Преглед изворни кода

风险管理6月11日提交代码-liu.bolan

Liu.bolan пре 4 година
родитељ
комит
8a2265882b
62 измењених фајлова са 1918 додато и 552 уклоњено
  1. 4 4
      RMA/app/build.gradle
  2. 89 0
      RMA/app/src/main/java/cn/muchinfo/rma/business/address/AddressManager.kt
  3. 60 1
      RMA/app/src/main/java/cn/muchinfo/rma/business/address/adapter/AddressAdapter.kt
  4. 62 0
      RMA/app/src/main/java/cn/muchinfo/rma/business/bank/BankManager.kt
  5. 2 2
      RMA/app/src/main/java/cn/muchinfo/rma/business/bank/adapter/BankAdapter.kt
  6. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/business/contract/adapter/ContractAdapter.kt
  7. 6 7
      RMA/app/src/main/java/cn/muchinfo/rma/business/contractgoods/ContractGoodsManager.kt
  8. 5 2
      RMA/app/src/main/java/cn/muchinfo/rma/business/future/FutureManager.kt
  9. 93 8
      RMA/app/src/main/java/cn/muchinfo/rma/business/money/MoneyManager.kt
  10. 98 0
      RMA/app/src/main/java/cn/muchinfo/rma/business/money/adapter/MoneyAdapter.kt
  11. 55 0
      RMA/app/src/main/java/cn/muchinfo/rma/business/report/ReportManager.kt
  12. 3 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/GlobalDataCollection.kt
  13. 5 2
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/AreaExpourseContractDetailData.kt
  14. 119 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/BankAccountSignData.kt
  15. 0 236
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/ContractHisTradeOrderDetailData.kt
  16. 144 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/CusBankSignBankData.kt
  17. 6 6
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/ExposureReportData.kt
  18. 92 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/ExpourseFutuDetailData.kt
  19. 158 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/FutureDataReportData.kt
  20. 73 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/GoodsExInfoData.kt
  21. 1 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/VerificationCodeData.kt
  22. 3 1
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/account/loginQeruy/GoodsInfo.kt
  23. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/global/database/AppDatabase.java
  24. 10 2
      RMA/app/src/main/java/cn/muchinfo/rma/global/database/DataBase.kt
  25. 18 0
      RMA/app/src/main/java/cn/muchinfo/rma/protobuf/funcode/FunCode.java
  26. 10 6
      RMA/app/src/main/java/cn/muchinfo/rma/view/MainActivity.kt
  27. 7 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/MyApplication.kt
  28. 29 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/autoWidget/dialog/Dialog.kt
  29. 6 5
      RMA/app/src/main/java/cn/muchinfo/rma/view/autoWidget/tool/DesTools.java
  30. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/app/Constant.kt
  31. 2 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/chart/ChartViewModel.kt
  32. 4 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/markets/MarketFragment.kt
  33. 3 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/trade/GoodsTradeActivity.kt
  34. 6 5
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/HomeFragment.kt
  35. 2 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/business/BusinessManagementViewholder.kt
  36. 13 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/AddContractActivity.kt
  37. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractDetailsActivity.kt
  38. 67 67
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractPublicView.kt
  39. 2 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractViewModel.kt
  40. 2 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/reportquery/ReportQueryViewModel.kt
  41. 5 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/reportquery/reportdetail/ReportCommonDetailsViewModel.kt
  42. 73 45
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/LoginActivity.kt
  43. 9 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/EnterpriseRegisterActivity.kt
  44. 10 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/PersonalRegisterActivity.kt
  45. 2 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/RegisterSelectActivity.kt
  46. 16 77
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/RegisterViewModel.kt
  47. 59 11
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/AddAddressManagementActivity.kt
  48. 35 8
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressManagementViewHolder.kt
  49. 24 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressMnangerActivity.kt
  50. 114 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressViewModel.kt
  51. 49 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/AddCastSurelyActivity.kt
  52. 18 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyActivity.kt
  53. 17 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyHistoryActivity.kt
  54. 41 11
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyViewHolder.kt
  55. 117 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyViewModel.kt
  56. 1 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/PlatinumTreasureViewModel.kt
  57. 19 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumBuyOrSellUI.kt
  58. 3 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumPositionUI.kt
  59. 2 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeActivity.kt
  60. 25 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeViewModel.kt
  61. 15 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PositionViewHolder.kt
  62. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/procurement/ProcurementViewModel.kt

+ 4 - 4
RMA/app/build.gradle

@@ -19,8 +19,8 @@ android {
         applicationId "cn.muchinfo.rma"
         minSdkVersion 24
         targetSdkVersion 30
-        versionCode 50008
-        versionName "5.0.08"
+        versionCode 50009
+        versionName "5.0.09"
         multiDexEnabled true
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         //指定room.schemaLocation生成的文件路径
@@ -38,7 +38,7 @@ android {
             // 设置applicationId(这里很重要,两个相同applicationId的apk不同同时安装在同一台Android手机中)
             applicationId "cn.muchinfo.rma"
             // 自动生成@string/app_name为demo
-            resValue "string","app_name","风管云平台"
+            resValue "string","app_name","企业风管云"
             // 定义app_icon字段,在AndroidManifest.xml文件中用到
             manifestPlaceholders = [app_icon : "@mipmap/ic_launcher"]
         }
@@ -53,7 +53,7 @@ android {
 
     buildTypes {
         release {
-            minifyEnabled true
+            minifyEnabled false
             signingConfig signingConfigs.release
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
         }

+ 89 - 0
RMA/app/src/main/java/cn/muchinfo/rma/business/address/AddressManager.kt

@@ -1,11 +1,18 @@
 package cn.muchinfo.rma.business.address
 
+import cn.muchinfo.rma.business.address.adapter.AddressAdapter
+import cn.muchinfo.rma.business.contract.adapter.ContractAdapter
 import cn.muchinfo.rma.global.data.ContractData
 import cn.muchinfo.rma.global.data.GoodsPickupData
 import cn.muchinfo.rma.global.data.PickGoodsData
 import cn.muchinfo.rma.global.data.UserReceiveInfoData
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
+import cn.muchinfo.rma.netcore.packet.Packet50
+import cn.muchinfo.rma.netcore.socket.Callback
+import cn.muchinfo.rma.protobuf.funcode.FunCode
+import cn.muchinfo.rma.view.MyApplication
+import cn.muchinfo.rma.view.autoWidget.guard
 import cn.muchinfo.rma.view.base.app.BaseResult
 import cn.muchinfo.rma.view.base.app.Constant
 import com.blankj.utilcode.util.SPUtils
@@ -16,6 +23,86 @@ import java.lang.Exception
 class AddressManager {
 
     /**
+     *
+     * @param receiverName String
+     * @param phoneNum String
+     * @param address String
+     * @param provinceID String
+     * @param cityId String
+     * @param districtID String
+     * @param receiveInfoId String
+     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun addAddressOrder(
+        receiverName : String,
+        phoneNum : String,
+        address : String,
+        provinceID : String,
+        cityId : String,
+        districtID : String,
+        receiveInfoId : String = "",//修改时填收货地址id
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ){
+        val tradeSocketManager = MyApplication.getInstance()?.tradeSocketManager.guard {
+            callback(false, Error("交易链路未初始化"))
+            return
+        }
+
+        val reqPacket = AddressAdapter.getUserReceiveInfo(
+             receiverName, phoneNum, address, provinceID, cityId, districtID, receiveInfoId
+        )
+
+        tradeSocketManager.send(
+            reqPacket,
+            FunCode.UserReceiveInfoRsp,
+            object : Callback<Packet50> {
+                override fun onSuccess(rsp: Packet50?) {
+                    val rst = AddressAdapter.analysisUserReceiveInfoRsq(rsp!!)
+                    callback(rst.first, rst.second)
+                }
+
+                override fun onFail(err: Error?) {
+                    // 发送数据失败
+                    callback(false, err)
+                }
+            }
+        )
+    }
+
+    /**
+     *  地址设置为默认
+     */
+    fun setUserReceiveIsDefault(
+        AutoId : Long,
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ){
+        val tradeSocketManager = MyApplication.getInstance()?.tradeSocketManager.guard {
+            callback(false, Error("交易链路未初始化"))
+            return
+        }
+
+        val reqPacket = AddressAdapter.getUserReceiveIsDefaultReqInfo(
+            AutoId
+        )
+
+        tradeSocketManager.send(
+            reqPacket,
+            FunCode.UserReceiveIsDefaultRsp,
+            object : Callback<Packet50> {
+                override fun onSuccess(rsp: Packet50?) {
+                    val rst = AddressAdapter.analysisUserReceiveInfoRsq(rsp!!)
+                    callback(rst.first, rst.second)
+                }
+
+                override fun onFail(err: Error?) {
+                    // 发送数据失败
+                    callback(false, err)
+                }
+            }
+        )
+    }
+
+    /**
      * 查询收货地址信息
      * @param params Map<String, String>
      * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<ContractData>?, [@kotlin.ParameterName] Error?, Unit>
@@ -126,4 +213,6 @@ class AddressManager {
 
 
 
+
+
 }

+ 60 - 1
RMA/app/src/main/java/cn/muchinfo/rma/business/address/adapter/AddressAdapter.kt

@@ -7,6 +7,7 @@ import cn.muchinfo.rma.netcore.packet.Packet50
 import cn.muchinfo.rma.protobuf.funcode.FunCode
 import cn.muchinfo.rma.protobuf.protoclasses.ErmcpMI1
 import cn.muchinfo.rma.protobuf.protoclasses.ManageServiceMI1
+import com.blankj.utilcode.util.TimeUtils
 import java.io.ByteArrayOutputStream
 import java.lang.Exception
 import java.util.*
@@ -64,7 +65,10 @@ object AddressAdapter {
         }
         builder.userID = loginInfo.userID
 
-        builder.clientSerialID = UUID.randomUUID().toString().replace("-", "").toLong()
+//        builder.clientSerialID = UUID.randomUUID().toString().replace("-", "").toLong()
+
+        builder.clientSerialID = TimeUtils.getNowMills()
+
 
         val arrayOutputStream = ByteArrayOutputStream();
         builder.build().writeTo(arrayOutputStream)
@@ -96,4 +100,59 @@ object AddressAdapter {
         }
     }
 
+    /**
+     * 地址设置为默认报文装箱
+     * @param AutoId Long
+     * @return Packet50
+     */
+    fun getUserReceiveIsDefaultReqInfo(
+        AutoId : Long
+    ) : Packet50{
+        val builder = ManageServiceMI1.UserReceiveIsDefaultReq.newBuilder()
+        val loginInfo = GlobalDataCollection.instance?.loginRsp!!
+
+        // FIXME: - 250000000005
+        builder.setHeader(
+            MessageHeadModel.getHead(
+                FunCode.UserReceiveIsDefaultReq,
+                loginInfo.userID,
+                0,
+                0,
+                18
+            )
+        )
+        builder.autoId = AutoId
+        builder.userId = loginInfo.userID.toLong()
+
+        val arrayOutputStream = ByteArrayOutputStream();
+        builder.build().writeTo(arrayOutputStream)
+        return Packet50(FunCode.UserReceiveIsDefaultReq, arrayOutputStream.toByteArray())
+    }
+
+
+    /**
+     * 新增修改收货地址请求报文解析
+     * @param packet50 Packet50
+     * @return Triple<Boolean, Error?, ErmcpMI1.SpotContractOperateRsp?>
+     */
+    fun analysisUserReceiveIsDefaultRsq(packet50: Packet50): Triple<Boolean, Error?, ManageServiceMI1.UserReceiveIsDefaultRsp?> {
+        return try {
+            val resultRsp = ManageServiceMI1.UserReceiveIsDefaultRsp.parseFrom(packet50.content)
+            if (resultRsp.retCode == 0) {
+                // 操作成功
+                Triple(true, null, resultRsp)
+            }else if (resultRsp.retCode == -1){
+                // 操作失败
+                Triple(false, Error(resultRsp.retDesc), null)
+            } else {
+                // 操作失败
+                Triple(false, Error(ErrorMessageUtils.getErrorString(resultRsp.retCode)), null)
+            }
+        } catch (e: Exception) {
+            // 操作失败
+            Triple(false, Error("装箱失败"), null)
+        }
+    }
+
+
 }

+ 62 - 0
RMA/app/src/main/java/cn/muchinfo/rma/business/bank/BankManager.kt

@@ -1,7 +1,69 @@
 package cn.muchinfo.rma.business.bank
 
+import cn.muchinfo.rma.global.data.BankAccountSignData
+import cn.muchinfo.rma.global.data.CusBankSignBankData
+import cn.muchinfo.rma.global.data.GoodsPickupData
+import cn.muchinfo.rma.netManage.base.ResponseCallback
+import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
+import cn.muchinfo.rma.view.base.app.BaseResult
+import cn.muchinfo.rma.view.base.app.Constant
+import com.blankj.utilcode.util.SPUtils
+import okhttp3.Call
+import java.lang.Exception
+
 //银行相关管理类
 class BankManager {
 
+    /**
+     * 查询托管银行
+     * @param params Map<String, String>
+     * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<ContractData>?, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun queryCusBankSignBank(
+        params: Map<String, String>,
+        responseBack: (isSuccess: Boolean, respData: List<CusBankSignBankData>?, error: Error?) -> Unit
+    ) {
+        MyOkHttpUtils().query(
+            URL = SPUtils.getInstance()
+                .getString(Constant.goCommonSearchUrl) + "/Qhj/QueryCusBankSignBank",
+            params = params,
+            type = "1",
+            callback = object : ResponseCallback<BaseResult<List<CusBankSignBankData>>>() {
+                override fun onResponse(response: BaseResult<List<CusBankSignBankData>>?, id: Int) {
+                    responseBack(true, response?.data, null)
+                }
+
+                override fun onError(call: Call?, e: Exception?, id: Int) {
+                    responseBack(false, null, Error(e?.message))
+                }
+            }
+        )
+    }
+
+
+    /**
+     * 查询签约银行信息(提现账户管理)
+     * @param params Map<String, String>
+     * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<ContractData>?, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun queryBankAccountSign(
+        params: Map<String, String>,
+        responseBack: (isSuccess: Boolean, respData: List<BankAccountSignData>?, error: Error?) -> Unit
+    ) {
+        MyOkHttpUtils().query(
+            URL = SPUtils.getInstance()
+                .getString(Constant.goCommonSearchUrl) + "/Qhj/QueryBankAccountSign",
+            params = params,
+            type = "1",
+            callback = object : ResponseCallback<BaseResult<List<BankAccountSignData>>>() {
+                override fun onResponse(response: BaseResult<List<BankAccountSignData>>?, id: Int) {
+                    responseBack(true, response?.data, null)
+                }
 
+                override fun onError(call: Call?, e: Exception?, id: Int) {
+                    responseBack(false, null, Error(e?.message))
+                }
+            }
+        )
+    }
 }

+ 2 - 2
RMA/app/src/main/java/cn/muchinfo/rma/business/bank/adapter/BankAdapter.kt

@@ -10,6 +10,8 @@ import java.util.*
 
 //bank相关装箱解箱
 object BankAdapter {
+
+
     fun getT2bBankSignReqInfo() : Packet50{
         val builder = BankMI1.t2bBankSignReq.newBuilder()
 
@@ -31,7 +33,5 @@ object BankAdapter {
         val arrayOutputStream = ByteArrayOutputStream();
         builder.build().writeTo(arrayOutputStream)
         return Packet50(FunCode.T2BBANKSIGNREQ, arrayOutputStream.toByteArray())
-
-
     }
 }

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/business/contract/adapter/ContractAdapter.kt

@@ -335,7 +335,7 @@ object ContractAdapter {
         )
         builder.setClientTicket(UUID.randomUUID().toString().replace("-", ""))
         builder.operateType = OperateType.toInt()
-        if (OperateType == "1" || OperateType == "2") {
+        if (OperateType == "1" || OperateType == "2" || OperateType == "4") {
             builder.info = contractInfobuilder.build()
         }
         builder.userID = loginInfo.loginID

+ 6 - 7
RMA/app/src/main/java/cn/muchinfo/rma/business/contractgoods/ContractGoodsManager.kt

@@ -2,7 +2,6 @@ package cn.muchinfo.rma.business.contractgoods
 
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.ContractHisTradeDetailData
-import cn.muchinfo.rma.global.data.ContractHisTradeOrderDetailData
 import cn.muchinfo.rma.global.data.ContractTradeDetailData
 import cn.muchinfo.rma.global.data.ContractTradeOrderDetailData
 import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
@@ -27,15 +26,15 @@ class ContractGoodsManager {
      */
     fun queryContractHisTradeDetail(
         params: Map<String, String>,
-        responseBack: (isSuccess: Boolean, respData: List<ContractHisTradeDetailData>?, error: Error?) -> Unit
+        responseBack: (isSuccess: Boolean, respData: List<ContractTradeDetailData>?, error: Error?) -> Unit
     ) {
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance()
                 .getString(Constant.goCommonSearchUrl) + "/Order/QueryHisTradeDetail",
             params = params,
             type = "1",
-            callback = object : ResponseCallback<BaseResult<List<ContractHisTradeDetailData>>>() {
-                override fun onResponse(response: BaseResult<List<ContractHisTradeDetailData>>?, id: Int) {
+            callback = object : ResponseCallback<BaseResult<List<ContractTradeDetailData>>>() {
+                override fun onResponse(response: BaseResult<List<ContractTradeDetailData>>?, id: Int) {
                     GlobalDataCollection.instance?.futureHisEntrustData =
                         response?.data as ArrayList<FutureEntrustData>?
                     responseBack(true, response?.data, null)
@@ -57,15 +56,15 @@ class ContractGoodsManager {
      */
     fun queryContractHisTradeOrderDetail(
         params: Map<String, String>,
-        responseBack: (isSuccess: Boolean, respData: List<ContractHisTradeOrderDetailData>?, error: Error?) -> Unit
+        responseBack: (isSuccess: Boolean, respData: List<ContractTradeOrderDetailData>?, error: Error?) -> Unit
     ) {
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance()
                 .getString(Constant.goCommonSearchUrl) + "/Order/QueryHisTradeOrderDetail",
             params = params,
             type = "1",
-            callback = object : ResponseCallback<BaseResult<List<ContractHisTradeOrderDetailData>>>() {
-                override fun onResponse(response: BaseResult<List<ContractHisTradeOrderDetailData>>?, id: Int) {
+            callback = object : ResponseCallback<BaseResult<List<ContractTradeOrderDetailData>>>() {
+                override fun onResponse(response: BaseResult<List<ContractTradeOrderDetailData>>?, id: Int) {
                     GlobalDataCollection.instance?.futureHisEntrustData =
                         response?.data as ArrayList<FutureEntrustData>?
                     responseBack(true, response?.data, null)

+ 5 - 2
RMA/app/src/main/java/cn/muchinfo/rma/business/future/FutureManager.kt

@@ -12,6 +12,7 @@ import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
 import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.global.data.futureOrders.HolderDetailsListData
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
@@ -59,7 +60,8 @@ class FutureManager {
             callback = object : ResponseCallback<BaseResult<List<GoodsInfo>>>() {
                 override fun onResponse(response: BaseResult<List<GoodsInfo>>?, id: Int) {
                     // 存储直接入库,需要的时候,再查询,检查方法的运行时间,10ms可以接受
-                    Builder.getDatabase<AppDatabase>().goodsInfoDao.insertAll(response?.data)
+                    DataBase.getInstance().goodsInfoDao().insertAll(response?.data)
+//                    Builder.getDatabase<AppDatabase>().goodsInfoDao.insertAll()
                     putGoodsInfoAndQuotesList()
                     callback(true, null)
                 }
@@ -75,7 +77,8 @@ class FutureManager {
      * 把数据库中的商品信息暂存本地数据中心
      */
     fun putGoodsInfoAndQuotesList() {
-        val goodsInfoList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+
+        val goodsInfoList = DataBase.getInstance().goodsInfoDao().all
         val goodsInfoAndQuotesList = GlobalDataCollection.instance?.goodsInfoAndQuotesList
         goodsInfoList.forEach {
             goodsInfoAndQuotesList?.add(

+ 93 - 8
RMA/app/src/main/java/cn/muchinfo/rma/business/money/MoneyManager.kt

@@ -1,17 +1,75 @@
 package cn.muchinfo.rma.business.money
 
-import cn.muchinfo.rma.global.data.UserCollectConfigData
-import cn.muchinfo.rma.global.data.UserReceiveInfoData
+import cn.muchinfo.rma.business.address.adapter.AddressAdapter
+import cn.muchinfo.rma.business.money.adapter.MoneyAdapter
+import cn.muchinfo.rma.global.data.*
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
+import cn.muchinfo.rma.netcore.packet.Packet50
+import cn.muchinfo.rma.netcore.socket.Callback
+import cn.muchinfo.rma.protobuf.funcode.FunCode
+import cn.muchinfo.rma.view.MyApplication
+import cn.muchinfo.rma.view.autoWidget.guard
 import cn.muchinfo.rma.view.base.app.BaseResult
 import cn.muchinfo.rma.view.base.app.Constant
 import com.blankj.utilcode.util.SPUtils
 import okhttp3.Call
 import java.lang.Exception
 
+/**
+ * 定投已经支付相关的管理类
+ */
 class MoneyManager {
 
+    /**
+     *
+     * @param regularlyStrategyID Long
+     * @param goodsID Long
+     * @param regularlyCycle Int
+     * @param regularlyCycleValue Int
+     * @param regularlyMode Int
+     * @param regularlyModeValue Double
+     * @param remark String
+     * @param operateType Int
+     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun requestQhjRegularlyStrategyReq(
+        regularlyStrategyID : Long = 0,
+        goodsID : Long,
+        regularlyCycle : Int,
+        regularlyCycleValue : Int,
+        regularlyMode : Int,
+        regularlyModeValue : Double,
+        remark : String = "",
+        operateType : Int,
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ){
+        val tradeSocketManager = MyApplication.getInstance()?.tradeSocketManager.guard {
+            callback(false, Error("交易链路未初始化"))
+            return
+        }
+
+        val reqPacket = MoneyAdapter.getQhjRegularlyStrategyReqInfo(
+            regularlyStrategyID, goodsID, regularlyCycle, regularlyCycleValue, regularlyMode, regularlyModeValue, remark, operateType
+        )
+
+        tradeSocketManager.send(
+            reqPacket,
+            FunCode.QhjRegularlyStrategyRsp,
+            object : Callback<Packet50> {
+                override fun onSuccess(rsp: Packet50?) {
+                    val rst = MoneyAdapter.analysisQhjRegularlyStrategyRsq(rsp!!)
+                    callback(rst.first, rst.second)
+                }
+
+                override fun onFail(err: Error?) {
+                    // 发送数据失败
+                    callback(false, err)
+                }
+            }
+        )
+    }
+
 
     /**
      * 查询提现账户设置
@@ -47,15 +105,15 @@ class MoneyManager {
      */
     fun queryRStrategy(
         params: Map<String, String>,
-        responseBack: (isSuccess: Boolean, respData: List<UserCollectConfigData>?, error: Error?) -> Unit
+        responseBack: (isSuccess: Boolean, respData: List<RStrategyData>?, error: Error?) -> Unit
     ) {
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance()
                 .getString(Constant.goCommonSearchUrl) + "/Qhj/QueryRStrategy",
             params = params,
             type = "1",
-            callback = object : ResponseCallback<BaseResult<List<UserCollectConfigData>>>() {
-                override fun onResponse(response: BaseResult<List<UserCollectConfigData>>?, id: Int) {
+            callback = object : ResponseCallback<BaseResult<List<RStrategyData>>>() {
+                override fun onResponse(response: BaseResult<List<RStrategyData>>?, id: Int) {
                     responseBack(true, response?.data, null)
                 }
 
@@ -74,15 +132,42 @@ class MoneyManager {
      */
     fun queryRSTriggerLog(
         params: Map<String, String>,
-        responseBack: (isSuccess: Boolean, respData: List<UserCollectConfigData>?, error: Error?) -> Unit
+        responseBack: (isSuccess: Boolean, respData: List<RSTriggerLogData>?, error: Error?) -> Unit
     ) {
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance()
                 .getString(Constant.goCommonSearchUrl) + "/Qhj/QueryRSTriggerLog",
             params = params,
             type = "1",
-            callback = object : ResponseCallback<BaseResult<List<UserCollectConfigData>>>() {
-                override fun onResponse(response: BaseResult<List<UserCollectConfigData>>?, id: Int) {
+            callback = object : ResponseCallback<BaseResult<List<RSTriggerLogData>>>() {
+                override fun onResponse(response: BaseResult<List<RSTriggerLogData>>?, id: Int) {
+                    responseBack(true, response?.data, null)
+                }
+
+                override fun onError(call: Call?, e: Exception?, id: Int) {
+                    responseBack(false, null, Error(e?.message))
+                }
+            }
+        )
+    }
+
+
+    /**
+     * 交易商品扩展表
+     * @param params Map<String, String>
+     * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<ContractData>?, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun queryGoodsEx(
+        params: Map<String, String>,
+        responseBack: (isSuccess: Boolean, respData: List<GoodsExInfoData>?, error: Error?) -> Unit
+    ) {
+        MyOkHttpUtils().query(
+            URL = SPUtils.getInstance()
+                .getString(Constant.goCommonSearchUrl) + "/Qhj/QueryGoodsEx",
+            params = params,
+            type = "1",
+            callback = object : ResponseCallback<BaseResult<List<GoodsExInfoData>>>() {
+                override fun onResponse(response: BaseResult<List<GoodsExInfoData>>?, id: Int) {
                     responseBack(true, response?.data, null)
                 }
 

+ 98 - 0
RMA/app/src/main/java/cn/muchinfo/rma/business/money/adapter/MoneyAdapter.kt

@@ -0,0 +1,98 @@
+package cn.muchinfo.rma.business.money.adapter
+
+import cn.muchinfo.rma.business.global.MessageHeadModel
+import cn.muchinfo.rma.global.ErrorMessageUtils
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.netcore.packet.Packet50
+import cn.muchinfo.rma.protobuf.funcode.FunCode
+import cn.muchinfo.rma.protobuf.protoclasses.BankMI1
+import cn.muchinfo.rma.protobuf.protoclasses.ErmcpMI1
+import cn.muchinfo.rma.protobuf.protoclasses.ManageServiceMI3
+import com.google.common.math.IntMath
+import java.io.ByteArrayOutputStream
+import java.lang.Exception
+
+object MoneyAdapter {
+
+    /**
+     * 定投策略报文装箱
+     *optional MessageHead Header = 1; // MessageHead
+    optional uint64 RegularlyStrategyID = 2; // uint64 定投策略ID 修改暂停恢复关闭时有值
+    optional uint64 UserID = 3; // uint64 所属用户ID
+    optional uint64 GoodsID = 4; // uint64 定投商品ID
+    optional uint32 RegularlyCycle = 5; // uint32 定投频率 - 1:每周 2:每月
+    optional uint32 RegularlyCycleValue = 6; // uint32 定投频率值 - 每周几(0-6)  或 每月几号(<=28)
+    optional uint32 RegularlyMode = 7; // uint32 定投方式 - 1:按数量 2:按金额
+    optional double RegularlyModeValue = 8; // double 定投方式值 - 数量或金额
+    optional string Remark = 9; // string 备注
+    optional uint64 UpdatorID = 10; // uint64 更新人
+    optional uint32 UpdateSrc = 11; // uint32 更新来源 - 1:管理端 2:终端
+    optional uint32 OperateType = 12; // uint32 操作类型:1:新增,2:修改,3:暂停,4:恢复,5:关闭
+     * @return Packet50
+     */
+    fun getQhjRegularlyStrategyReqInfo(
+        regularlyStrategyID : Long = 0,
+        goodsID : Long,
+        regularlyCycle : Int,
+        regularlyCycleValue : Int,
+        regularlyMode : Int,
+        regularlyModeValue : Double,
+        remark : String = "",
+        operateType : Int
+    ) : Packet50 {
+        val builder = ManageServiceMI3.QhjRegularlyStrategyReq.newBuilder()
+
+        val loginInfo = GlobalDataCollection.instance?.loginRsp!!
+        // FIXME: - 250000000005
+        builder.setHeader(
+            MessageHeadModel.getHead(
+                FunCode.QhjRegularlyStrategyReq,
+                loginInfo.userID,
+                0,
+                0,
+                18
+            )
+        )
+
+        if (regularlyStrategyID != 0L){
+            builder.regularlyStrategyID = regularlyStrategyID
+        }
+
+        builder.goodsID = goodsID
+        builder.regularlyCycle = regularlyCycle
+        builder.regularlyCycleValue = regularlyCycleValue
+        builder.regularlyMode = regularlyMode
+        builder.regularlyModeValue = regularlyModeValue
+        builder.remark = remark
+        builder.operateType = operateType
+
+        val arrayOutputStream = ByteArrayOutputStream();
+        builder.build().writeTo(arrayOutputStream)
+        return Packet50(FunCode.QhjRegularlyStrategyReq, arrayOutputStream.toByteArray())
+    }
+
+
+    /**
+     * 定投策略报文解析
+     * @param packet50 Packet50
+     * @return Triple<Boolean, Error?, ErmcpMI1.SpotContractOperateRsp?>
+     */
+    fun analysisQhjRegularlyStrategyRsq(packet50: Packet50): Triple<Boolean, Error?, ManageServiceMI3.QhjRegularlyStrategyRsp?> {
+        return try {
+            val resultRsp = ManageServiceMI3.QhjRegularlyStrategyRsp.parseFrom(packet50.content)
+            if (resultRsp.retCode == 0) {
+                // 操作成功
+                Triple(true, null, resultRsp)
+            }else if (resultRsp.retCode == -1){
+                // 操作失败
+                Triple(false, Error(resultRsp.retDesc), null)
+            } else {
+                // 操作失败
+                Triple(false, Error(ErrorMessageUtils.getErrorString(resultRsp.retCode)), null)
+            }
+        } catch (e: Exception) {
+            // 操作失败
+            Triple(false, Error("装箱失败"), null)
+        }
+    }
+}

+ 55 - 0
RMA/app/src/main/java/cn/muchinfo/rma/business/report/ReportManager.kt

@@ -420,4 +420,59 @@ class ReportManager {
         )
     }
 
+
+    /**
+     * 查询敞口期货明细(敞口报表/期货明细)
+     * @param params Map<String, String>
+     * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<SpotReportData>?, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun qryAreaExpourseFutuDetail(
+        params: Map<String, String>,
+        responseBack: (isSuccess: Boolean, respData: List<ExpourseFutuDetailData>?, error: Error?) -> Unit
+    ){
+        MyOkHttpUtils().query(
+            URL = SPUtils.getInstance().getString(Constant.goCommonSearchUrl) + "/Ermcp3/QryAreaExpourseFutuDetail",
+            params = params,
+            type = "1",
+            callback = object : ResponseCallback<BaseResult<List<ExpourseFutuDetailData>>>(){
+                override fun onResponse(response: BaseResult<List<ExpourseFutuDetailData>>?, id: Int) {
+                    responseBack(true, response?.data, null)
+                }
+
+                override fun onError(call: Call?, e: Exception?, id: Int) {
+                    responseBack(false, null, Error(e?.message))
+                }
+
+            }
+        )
+    }
+
+
+    /**
+     * 查询期货报表
+     * @param params Map<String, String>
+     * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<SpotReportData>?, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun qryTaFutureDataReport(
+        params: Map<String, String>,
+        responseBack: (isSuccess: Boolean, respData: List<FutureDataReportData>?, error: Error?) -> Unit
+    ){
+        MyOkHttpUtils().query(
+            URL = SPUtils.getInstance().getString(Constant.goCommonSearchUrl) + "/Ermcp3/QryTaFutureDataReport",
+            params = params,
+            type = "1",
+            callback = object : ResponseCallback<BaseResult<List<FutureDataReportData>>>(){
+                override fun onResponse(response: BaseResult<List<FutureDataReportData>>?, id: Int) {
+                    responseBack(true, response?.data, null)
+                }
+
+                override fun onError(call: Call?, e: Exception?, id: Int) {
+                    responseBack(false, null, Error(e?.message))
+                }
+
+            }
+        )
+    }
+
+
 }

+ 3 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/GlobalDataCollection.kt

@@ -12,6 +12,9 @@ import java.util.concurrent.locks.ReentrantLock
 
 class GlobalDataCollection : BaseGlobalData() {
 
+    /**
+     * 获取首页菜单的列表
+     */
 
     /**
      * 获取一级菜单的权限

+ 5 - 2
RMA/app/src/main/java/cn/muchinfo/rma/global/data/AreaExpourseContractDetailData.kt

@@ -35,6 +35,9 @@ data class AreaExpourseContractDetailData(
     val deliverygoodscode : String = "",//现货商品代码
     val deliverygoodsname : String = "",//现货商品名称
     val hedgeplanstatus : String = "",//套保计划状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
-    val mgunitidname : String = ""//单位名称(套保商品)
-
+    val mgunitidname : String = "",//单位名称(套保商品)
+    val convertfactor : String = "",//标仓系数
+    val diffhedgeqty : String = "",//套保变动量
+    val diffneedhedgeqty : String = "",//应套保变动量
+    val todaypricedqty : String = ""//今定价量
 )

+ 119 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/BankAccountSignData.kt

@@ -0,0 +1,119 @@
+package cn.muchinfo.rma.global.data
+
+import android.os.Parcel
+import android.os.Parcelable
+
+/**
+ * 签约银行信息(提现账户管理)
+ */
+data class BankAccountSignData(
+    val accountcode : String? = "",//资金账号
+    val accountname : String? = "",//资金账号对应的账号名(UserName)
+    val accounttype : String? = "",//账户类型(UserType)
+    val applicationtime : String? = "",//最后一次更新的时间
+    val applyexchticket : String? = "",//申请流水
+    val auditid : String? = "",//审核人
+    val audittime : String? = "",//审核时间
+    val bankaccountname : String? = "",//签约银行卡账号名
+    val bankaccountno : String? = "",//银行卡号
+    val bankaccounttype : String? = "",//银行账户类型 - 1-对私; 2-对公
+    val bankcardtype : String? = "",//银行卡类型
+    val bankchildaccount : String? = "",//银行子账号(签约成功后,很多银行会返回对应的这个虚拟账号)
+    val bankcity : String? = "",//开户行城市
+    val bankid : String? = "",//签约银行ID
+    val bankprovince : String? = "",//开户行省份
+    val branchbankid : String? = "",//签约银行支行号
+    val branchbankname : String? = "",//签约银行支行名称
+    val cardno : String? = "",//证件号码
+    val cardtype : String? = "",//证件类型
+    val currency : String? = "",//币种
+    val cusbankid : String? = "",//托管银行编号
+    val direct : String? = "",//方向(可以判断那方先发起的签约)
+    val exchticket : String? = "",//最后一次签约成功的流水号
+    val extendinfo : String? = "",//扩展信息(JSON字符串)
+    val mobilephone : String? ="",//手机号
+    val netaddr : String? = "",//调转网址
+    val relateduserid : String? = "",//关联使用者userid
+    val signstatus : String? = "",//签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中 10:审核拒绝 11:换签待审核
+    val updatetime : String? = ""//更新时间(签解约更新时间)
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(accountcode)
+        parcel.writeString(accountname)
+        parcel.writeString(accounttype)
+        parcel.writeString(applicationtime)
+        parcel.writeString(applyexchticket)
+        parcel.writeString(auditid)
+        parcel.writeString(audittime)
+        parcel.writeString(bankaccountname)
+        parcel.writeString(bankaccountno)
+        parcel.writeString(bankaccounttype)
+        parcel.writeString(bankcardtype)
+        parcel.writeString(bankchildaccount)
+        parcel.writeString(bankcity)
+        parcel.writeString(bankid)
+        parcel.writeString(bankprovince)
+        parcel.writeString(branchbankid)
+        parcel.writeString(branchbankname)
+        parcel.writeString(cardno)
+        parcel.writeString(cardtype)
+        parcel.writeString(currency)
+        parcel.writeString(cusbankid)
+        parcel.writeString(direct)
+        parcel.writeString(exchticket)
+        parcel.writeString(extendinfo)
+        parcel.writeString(mobilephone)
+        parcel.writeString(netaddr)
+        parcel.writeString(relateduserid)
+        parcel.writeString(signstatus)
+        parcel.writeString(updatetime)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<BankAccountSignData> {
+        override fun createFromParcel(parcel: Parcel): BankAccountSignData {
+            return BankAccountSignData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<BankAccountSignData?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}

+ 0 - 236
RMA/app/src/main/java/cn/muchinfo/rma/global/data/ContractHisTradeOrderDetailData.kt

@@ -1,236 +0,0 @@
-package cn.muchinfo.rma.global.data
-
-import android.os.Parcel
-import android.os.Parcelable
-
-/**
- * 委托单查询请求(合约市场)
- */
-data class ContractHisTradeOrderDetailData(
-    val accountid : String? = "",//账户ID[报价币种]
-    val buildtype : String? = "",//委托单据类型 1:建仓 2:平仓 3:先平后建
-    val buyorsell : String? = "",//方向 - 0:买 1:卖
-    val cancelorderid : String? = "",//撤单单号(撤单时填写)
-    val cancelqty : String? = "",//撤单数量
-    val clientordertime : String? = "",//客户端委托时间
-    val clientticket : String? = "",//客户端流水号
-    val clienttype : String? = "",//客户端类型 - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端安卓 4:网页客户端 5:微信客户端 6:手机客户端苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
-    val closeexchagechargevalue : String? = "",//平仓交易所手续费设置值
-    val closefeealgorithm : String? = "",//平仓手续费收取方式 1:比率 2:固定
-    val closefreezecharge : String? = "",//平仓冻结手续费(先建后平操作,需要记录)
-    val closememberchargevalue : String? = "",//平仓会员手续费设置值
-    val closeqty : String? = "",//平仓数量(先建后平操作 需要记录)
-    val closetradeqty : String? = "",//平仓成交数量(先建后平操作,需要记录)
-    val closeunfreezecharge : String? = "",//平仓解冻手续费(先建后平操作,需要记录)
-    val delistingtype : String? = "",//摘牌类型 - 1:价格最优 2:点选成交
-    val freezecharge : String? = "",//冻结手续费
-    val freezemargin : String? = "",//冻结保证金(冻结交易金额)
-    val gcaccountid : String? = "",//账户ID[合约币种]
-    val goodscode : String? = "",//商品代码
-    val goodsid : String? = "",//商品ID
-    val goodsname : String? = "",//商品名称
-    val histradedate : String? = "",//历史交易日
-    val isconfirmexercise : String? = "",//是否确认行权- 0:否 1:是
-    val ispreexercise : String? = "",//是否预申报- 0:否 1:是
-    val isvaliddata : String? = "",//是否有效 - 0:无效 1:有效
-    val listingselecttype : String? = "",//挂牌点选类型 - 1:挂牌 2:摘牌 3:先摘后挂
-    val marginalgorithm : String? = "",//保证金收取方式 1:比率 2:固定
-    val marginvalue : String? = "",//即市保证金设置值
-    val marketid : String? = "",//市场ID
-    val marketmaxsub : String? = "",//市价最大偏移范围
-    val marketname : String? = "",//市场名称
-    val memberuserid : String? = "",//所属会员UserID
-    val openexchagechargevalue : String? = "",//建仓交易所手续费设置值
-    val openfeealgorithm : String? = "",//建仓手续费收取方式 1:比率 2:固定
-    val openfreezecharge : String? = "",//开仓冻结手续费(先建后平操作,需要记录)
-    val openmemberchargevalue : String?  ="",//建仓会员手续费设置值
-    val openqty : String?  ="",//开仓数量(先建后平操作,需要记录)
-    val opentradeqty : String? = "",//开仓成交数量(先建后平操作,需要记录)
-    val openunfreezecharge : String? = "",//开仓解冻手续费(先建后平操作,需要记录)
-    val operatetype : String? = "",//操作类型 - 1:正常下单 2:斩仓 3:转单 4:结算撤单 5:系统卖出(适用于先平后建的卖出) 6:行情源报价 7:(结算)到期强平 8:(结算)协议转让 9:系统对冲单 10:(结算)到期无效 11:交割协议转让 12:交割协议平仓 13:交割成交(所有权) 14:管理端强行平仓 15:管理端协议转让
-    val operatorid : String? = "",//登录账号(LoginID)
-    val optiontype : String? = "",//期权类型 - 1:认购(看涨) 2:认沽(看跌)
-    val orderid : String? = "",//委托单号(100+Unix秒时间戳(10位)+2位(MarketServiceID)+xxx
-    val orderprice : String? = "",//委托价格
-    val orderqty : String? = "",//委托数量
-    val ordersrc : String? = "",//委托来源 - 1:客户端 2:管理端 3:风控服务 4:交割服务 5:交易服务 6:交易日结 7:商品强平 8:管理端商品退市强平 9:交易接口 10:交割服务商被动(受托竞价) 11:预埋触发
-    val orderstatus : String? = "",//委托状态 - 1: 委托请求 2:待冻结 3:委托成功 4: 委托失败 5:配对成功 6: 已撤销 7:部分成交 8:已成交 9:部成部撤 10:成交失败 11:已拒绝 12:经过摘牌(先摘后挂专用-先摘后挂已摘过) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用)
-    val ordertime : String? = "",//委托时间
-    val preexerciseprice : String? = "",//预申报价格
-    val premium : String?  ="",//权利金
-    val preorderid : String? = "",//关联预埋单号(止盈止损单时填写)
-    val pricemode : String? = "",//取价方式 - 1:市价 2: 限价
-    val quoteid : String?  ="",//报价单ID
-    val relatedid : String?  ="",//关联单号(交割单)
-    val retcode : String?  ="",//错误代码
-    val sessionid : String? = "",//会话ID
-    val tradedate : String? = "",//交易日(yyyyMMdd)
-    val trademode : String?  ="",//交易模式
-    val tradeproperty : String?  ="",//交易属性
-    val tradeqty : String? = "",//成交数量
-    val unfreezecharge : String? = "",//解冻手续费
-    val unfreezemargin : String? = "",//解冻保证金
-    val updatetime: String?  ="",//更新时间
-    val uuid : String? = "",//发起端唯一id
-    val validtime : String? = "",//有效期限
-    val validtype : String? = "",//有效类型 - 1当日有效 2本周有效 3指定日期有效 4一直有效 5指定时间有效
-    val volumetype : String? =""//当时间有效类型为 “立即执行否则取消 IOC” 时,需要此项 - 0:任意量 1:最小量(暂时不支持) 2:全部量
-) : Parcelable{
-    constructor(parcel: Parcel) : this(
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readString()
-    ) {
-    }
-
-    override fun writeToParcel(parcel: Parcel, flags: Int) {
-        parcel.writeString(accountid)
-        parcel.writeString(buildtype)
-        parcel.writeString(buyorsell)
-        parcel.writeString(cancelorderid)
-        parcel.writeString(cancelqty)
-        parcel.writeString(clientordertime)
-        parcel.writeString(clientticket)
-        parcel.writeString(clienttype)
-        parcel.writeString(closeexchagechargevalue)
-        parcel.writeString(closefeealgorithm)
-        parcel.writeString(closefreezecharge)
-        parcel.writeString(closememberchargevalue)
-        parcel.writeString(closeqty)
-        parcel.writeString(closetradeqty)
-        parcel.writeString(closeunfreezecharge)
-        parcel.writeString(delistingtype)
-        parcel.writeString(freezecharge)
-        parcel.writeString(freezemargin)
-        parcel.writeString(gcaccountid)
-        parcel.writeString(goodscode)
-        parcel.writeString(goodsid)
-        parcel.writeString(goodsname)
-        parcel.writeString(histradedate)
-        parcel.writeString(isconfirmexercise)
-        parcel.writeString(ispreexercise)
-        parcel.writeString(isvaliddata)
-        parcel.writeString(listingselecttype)
-        parcel.writeString(marginalgorithm)
-        parcel.writeString(marginvalue)
-        parcel.writeString(marketid)
-        parcel.writeString(marketmaxsub)
-        parcel.writeString(marketname)
-        parcel.writeString(memberuserid)
-        parcel.writeString(openexchagechargevalue)
-        parcel.writeString(openfeealgorithm)
-        parcel.writeString(openfreezecharge)
-        parcel.writeString(openmemberchargevalue)
-        parcel.writeString(openqty)
-        parcel.writeString(opentradeqty)
-        parcel.writeString(openunfreezecharge)
-        parcel.writeString(operatetype)
-        parcel.writeString(operatorid)
-        parcel.writeString(optiontype)
-        parcel.writeString(orderid)
-        parcel.writeString(orderprice)
-        parcel.writeString(orderqty)
-        parcel.writeString(ordersrc)
-        parcel.writeString(orderstatus)
-        parcel.writeString(ordertime)
-        parcel.writeString(preexerciseprice)
-        parcel.writeString(premium)
-        parcel.writeString(preorderid)
-        parcel.writeString(pricemode)
-        parcel.writeString(quoteid)
-        parcel.writeString(relatedid)
-        parcel.writeString(retcode)
-        parcel.writeString(sessionid)
-        parcel.writeString(tradedate)
-        parcel.writeString(trademode)
-        parcel.writeString(tradeproperty)
-        parcel.writeString(tradeqty)
-        parcel.writeString(unfreezecharge)
-        parcel.writeString(unfreezemargin)
-        parcel.writeString(updatetime)
-        parcel.writeString(uuid)
-        parcel.writeString(validtime)
-        parcel.writeString(validtype)
-        parcel.writeString(volumetype)
-    }
-
-    override fun describeContents(): Int {
-        return 0
-    }
-
-    companion object CREATOR : Parcelable.Creator<ContractHisTradeOrderDetailData> {
-        override fun createFromParcel(parcel: Parcel): ContractHisTradeOrderDetailData {
-            return ContractHisTradeOrderDetailData(parcel)
-        }
-
-        override fun newArray(size: Int): Array<ContractHisTradeOrderDetailData?> {
-            return arrayOfNulls(size)
-        }
-    }
-
-}

+ 144 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/CusBankSignBankData.kt

@@ -0,0 +1,144 @@
+package cn.muchinfo.rma.global.data
+
+import android.os.Parcel
+import android.os.Parcelable
+
+data class CusBankSignBankData(
+    val banklst : List<QhjBankInfo>? = arrayListOf(),//银行列表
+    val canallot : String? = "",//是否支持跨行调拨 - 0:不支持 1:支持
+    val canallotquery : String? = "",//是否支持跨行调拨查询 - 0:不支持 1:支持
+    val canbindcard : String? = "",//是否可绑卡与解卡 - 0:不可 1:可以
+    val caninamount : String? = "",//是否可入金 - 0:不可 1:可以
+    val caninamount2 : String? = "",//是否可入金(网银端) - 0:不可 1:可以
+    val canmodifybankcard : String? = "",//是否可修改银行卡号 - 0:不可 1:可以
+    val canmodifyphone : String? = "",//是否可修改手机号 - 0:不可 1:可以
+    val canmodifysigninfo  : String? = "",//是否可修改签约信息 - 0:不可 1:可以
+    val canoutamount : String? = "",//是否可出金 - 0:不可 1:可以
+    val canoutamount2 : String? = "",//是否可出金(网银端) - 0:不可 1:可以
+    val canrelease : String? = "",//是否可解约 - 0:不可 1:可以
+    val canrelease2 : String? = "",//是否可解约(网银端) - 0:不可 1:可以
+    val cansign : String? = "",//是否可签约 - 0:不可 1:可以
+    val cansign2 : String? = "",//是否可签约(网银端) - 0:不可 1:可以
+    val currency : String? = "",//币种
+    val cusbankid : String? = "",//托管银行编号(对应清算中心TRAN_NO)
+    val cusbankname : String? = "",//银行业务名称
+    val cusbankshortname : String? = "",//银行业务简称
+    val exchbankid : String? = "",//交易所开户银行ID
+    val exchpaybankaccname : String? = "",//交易所支出结算账户户名
+    val exchpaybankaccno : String? = "",//交易所支出结算账户
+    val isneedcheck : String? = "",//是否需要对账 - 0:需要 1:不需要 [不需要界面配置]
+    val isneedclear : String? = "",//是否需要清算 - 0:不需要 1:需要
+    val riskinfo : String? = ""//签约风险提示书
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.createTypedArrayList(QhjBankInfo),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeTypedList(banklst)
+        parcel.writeString(canallot)
+        parcel.writeString(canallotquery)
+        parcel.writeString(canbindcard)
+        parcel.writeString(caninamount)
+        parcel.writeString(caninamount2)
+        parcel.writeString(canmodifybankcard)
+        parcel.writeString(canmodifyphone)
+        parcel.writeString(canmodifysigninfo)
+        parcel.writeString(canoutamount)
+        parcel.writeString(canoutamount2)
+        parcel.writeString(canrelease)
+        parcel.writeString(canrelease2)
+        parcel.writeString(cansign)
+        parcel.writeString(cansign2)
+        parcel.writeString(currency)
+        parcel.writeString(cusbankid)
+        parcel.writeString(cusbankname)
+        parcel.writeString(cusbankshortname)
+        parcel.writeString(exchbankid)
+        parcel.writeString(exchpaybankaccname)
+        parcel.writeString(exchpaybankaccno)
+        parcel.writeString(isneedcheck)
+        parcel.writeString(isneedclear)
+        parcel.writeString(riskinfo)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<CusBankSignBankData> {
+        override fun createFromParcel(parcel: Parcel): CusBankSignBankData {
+            return CusBankSignBankData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<CusBankSignBankData?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}
+
+data class QhjBankInfo(
+    val bankid : String? = "",//银行ID
+    val bankname : String? = "",//银行名称
+    val clearbankno : String? = "",//清算系统银行编号
+    val orderindex : String? = "",//排序顺序
+    val status : String? = ""//状态 - 0:正常 1:注销
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(bankid)
+        parcel.writeString(bankname)
+        parcel.writeString(clearbankno)
+        parcel.writeString(orderindex)
+        parcel.writeString(status)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<QhjBankInfo> {
+        override fun createFromParcel(parcel: Parcel): QhjBankInfo {
+            return QhjBankInfo(parcel)
+        }
+
+        override fun newArray(size: Int): Array<QhjBankInfo?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}

+ 6 - 6
RMA/app/src/main/java/cn/muchinfo/rma/global/data/ExposureReportData.kt

@@ -11,8 +11,8 @@ data class ExposureReportData(
     val buyfutureqty : String? = "",//买入期货数量
     val buyplanqty : String? = "",//采购计划数量
     val buypricedqty : String? = "",//采购合同已定价数量
-    val diffFutuQty : String? = "0",//变动量(期货)
-    val diffSpotQty : String? = "0",//变动量(现货)
+    val difffutuqty : String? = "0",//变动量(期货)
+    val diffspotqty : String? = "0",//变动量(现货)
     val enumdicname : String? = "",//单位名称
     val middlegoodscode : String? = "",//套保品种代码
     val middlegoodshedgeratio : String? = "",//应套保比例
@@ -21,7 +21,7 @@ data class ExposureReportData(
     val needhedgeexposoure : String? = "",//应套保敞口
     val needhedgeratio : String? = "",//应套保敞口比例
     val oriTotalFutuQty : String? = "",//期初期货数量=期初买入期货数量-期初卖出期货数量
-    val oriTotalSpotQty : String? = "",//期初现货头寸总量
+    val oritotalspotqty : String? = "",//期初现货头寸总量
     val oribuyfutureqty : String? = "",//期初买入期货数量
     val oribuyplanqty : String? = "",//期初采购计划数量
     val oribuypricedqty : String? = "",//期初采购合同已定价数量
@@ -135,8 +135,8 @@ data class ExposureReportData(
         parcel.writeString(buyfutureqty)
         parcel.writeString(buyplanqty)
         parcel.writeString(buypricedqty)
-        parcel.writeString(diffFutuQty)
-        parcel.writeString(diffSpotQty)
+        parcel.writeString(difffutuqty)
+        parcel.writeString(diffspotqty)
         parcel.writeString(enumdicname)
         parcel.writeString(middlegoodscode)
         parcel.writeString(middlegoodshedgeratio)
@@ -145,7 +145,7 @@ data class ExposureReportData(
         parcel.writeString(needhedgeexposoure)
         parcel.writeString(needhedgeratio)
         parcel.writeString(oriTotalFutuQty)
-        parcel.writeString(oriTotalSpotQty)
+        parcel.writeString(oritotalspotqty)
         parcel.writeString(oribuyfutureqty)
         parcel.writeString(oribuyplanqty)
         parcel.writeString(oribuypricedqty)

+ 92 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/ExpourseFutuDetailData.kt

@@ -0,0 +1,92 @@
+package cn.muchinfo.rma.global.data
+
+import android.os.Parcel
+import android.os.Parcelable
+
+/**
+ * 敞口期货报表明细实体
+ */
+data class ExpourseFutuDetailData(
+    val accountid : String? = "",//交易账户id
+    val accountname : String? = "",//交易账户
+    val begindate : String? = "",//开始交易日
+    val buyorsell : String? = "",//方向 0-买 1-卖
+    val diffmgqty : String? = "",//套保品种今变化量
+    val diffneedqty : String? = "",//应套保总量变化量
+    val difftradeqty : String? = "",//交易品种今变化量
+    val enddate : String? = "",//结束交易日
+    val enumdicname : String? = "",//单位名称
+    val goodscode : String? = "",//商品代码
+    val goodsid : String? = "",//商品id
+    val goodsname : String? = "",//商品名称
+    val holdqty : String? = "",//期末持仓量
+    val middlegoodscode : String? = "",//套保商品代码
+    val middlegoodsid : String? = "",//套保商品id
+    val middlegoodsname : String? = "",//套保商品名称
+    val oriholdqty : String? = "",//期初持仓量
+    val todaycloseqty : String? = "",//今平仓量
+    val todayopenqty : String? = "",//今开仓量
+    val tradedate : String? = ""//交易日
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(accountid)
+        parcel.writeString(accountname)
+        parcel.writeString(begindate)
+        parcel.writeString(buyorsell)
+        parcel.writeString(diffmgqty)
+        parcel.writeString(diffneedqty)
+        parcel.writeString(difftradeqty)
+        parcel.writeString(enddate)
+        parcel.writeString(enumdicname)
+        parcel.writeString(goodscode)
+        parcel.writeString(goodsid)
+        parcel.writeString(goodsname)
+        parcel.writeString(holdqty)
+        parcel.writeString(middlegoodscode)
+        parcel.writeString(middlegoodsid)
+        parcel.writeString(middlegoodsname)
+        parcel.writeString(oriholdqty)
+        parcel.writeString(todaycloseqty)
+        parcel.writeString(todayopenqty)
+        parcel.writeString(tradedate)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<ExpourseFutuDetailData> {
+        override fun createFromParcel(parcel: Parcel): ExpourseFutuDetailData {
+            return ExpourseFutuDetailData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<ExpourseFutuDetailData?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}

+ 158 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/FutureDataReportData.kt

@@ -0,0 +1,158 @@
+package cn.muchinfo.rma.global.data
+
+import android.os.Parcel
+import android.os.Parcelable
+
+/**
+ * 期货报表
+ */
+data class FutureDataReportData(
+    val accountid : String? = "",//交易账户
+    val accountname : String? = "",//交易账号名称
+    val begindate : String? = "",//开始交易日
+    val buyorsell : String? = "",//持仓方向
+    val charge : String? = "",//手续费
+    val closepl : String? = "",//平仓损益
+    val currencyid : String? = "",//结算币种ID
+    val cycletime : String? = "",//周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+    val cycletype : String? = "",//周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+    val enddate : String? = "",//结束交易日
+    val enumdicname : String? = "",//单位名称(现货商品)
+    val floatpl : String? = "",//浮动损益
+    val goodscode : String? = "",//交易合约代码
+    val goodsgroupid : String? = "",//交易品种
+    val goodsgroupname : String? = "",//交易品种名称
+    val goodsgroupspotqty : String? = "",//交易品种期末量 (= 期末持仓量 * 合约乘数)
+    val goodsid : String? = "",//交易合约
+    val goodsname : String? = "",//交易合约名称
+    val goodunitid : String? = "",//交易合约单位id
+    val holdamount : String? = "",//期末持仓额
+    val holdqty : String? = "",//期末持仓量
+    val lastholdamount : String? = "",//当前持仓额
+    val lastprice : String? = "",//最新价
+    val middlegoodsqty : String? = "",//套保品种期末量 (=交易品种期末量 * 期货品种折算系数)
+    val openamount : String? = "",//期末开仓额
+    val oriholdamount : String? = "",//期初持仓额
+    val oriholdqty : String? = "",//期初持仓量
+    val oriopenamount : String? = "",//期初开仓额
+    val outergroupcode : String? = "",//交易品种代码
+    val reckondate : String? = "",//日照时期(yyyyMMdd)
+    val reckonholdamount : String? = "",//结算持仓额
+    val reckonpl : String? = "",//结算损益
+    val reckonpl2 : String? = "",//结算逐笔盈亏
+    val reckonprice : String? = "",//结算价
+    val relateduserid : String? = "",//账户关联用户ID
+    val todaycloseamount : String? = "",//今平仓额
+    val todaycloseqty : String? = "",//今平仓量
+    val todaygoodsgroupspotqty : String? = "",//交易品种变化量 (=(期末持仓量 - 期初持仓量)* 合约乘数)
+    val todaymiddlegoodsqty : String? = "",//套保品种变化量 (= 交易品种变化量*期货品种折算系数)
+    val todayopenamount : String? = "",//今开仓额
+    val todayopenqty : String? = "",//今开仓量
+    val userid : String? = ""//账户所属用户ID
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(accountid)
+        parcel.writeString(accountname)
+        parcel.writeString(begindate)
+        parcel.writeString(buyorsell)
+        parcel.writeString(charge)
+        parcel.writeString(closepl)
+        parcel.writeString(currencyid)
+        parcel.writeString(cycletime)
+        parcel.writeString(cycletype)
+        parcel.writeString(enddate)
+        parcel.writeString(enumdicname)
+        parcel.writeString(floatpl)
+        parcel.writeString(goodscode)
+        parcel.writeString(goodsgroupid)
+        parcel.writeString(goodsgroupname)
+        parcel.writeString(goodsgroupspotqty)
+        parcel.writeString(goodsid)
+        parcel.writeString(goodsname)
+        parcel.writeString(goodunitid)
+        parcel.writeString(holdamount)
+        parcel.writeString(holdqty)
+        parcel.writeString(lastholdamount)
+        parcel.writeString(lastprice)
+        parcel.writeString(middlegoodsqty)
+        parcel.writeString(openamount)
+        parcel.writeString(oriholdamount)
+        parcel.writeString(oriholdqty)
+        parcel.writeString(oriopenamount)
+        parcel.writeString(outergroupcode)
+        parcel.writeString(reckondate)
+        parcel.writeString(reckonholdamount)
+        parcel.writeString(reckonpl)
+        parcel.writeString(reckonpl2)
+        parcel.writeString(reckonprice)
+        parcel.writeString(relateduserid)
+        parcel.writeString(todaycloseamount)
+        parcel.writeString(todaycloseqty)
+        parcel.writeString(todaygoodsgroupspotqty)
+        parcel.writeString(todaymiddlegoodsqty)
+        parcel.writeString(todayopenamount)
+        parcel.writeString(todayopenqty)
+        parcel.writeString(userid)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<FutureDataReportData> {
+        override fun createFromParcel(parcel: Parcel): FutureDataReportData {
+            return FutureDataReportData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<FutureDataReportData?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}

+ 73 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/GoodsExInfoData.kt

@@ -0,0 +1,73 @@
+package cn.muchinfo.rma.global.data
+
+import android.os.Parcel
+import android.os.Parcelable
+
+/**
+ * 交易商品扩展表
+ * @property canfinance String?
+ * @property canregularlybuy String?
+ * @property defaulttradeuserid String?
+ * @property deliverygoodsid String?
+ * @property goodsid String?
+ * @property minamount String?
+ * @property regularlybuyminamount String?
+ * @property regularlybuyminqty String?
+ * @property spotgoodsbrandid String?
+ * @property wrstandardid String?
+ * @constructor
+ */
+data class GoodsExInfoData(
+    val canfinance : String? = "",//是否支持融资 - 0:不支持 1:支持【69:铂金宝】
+    val canregularlybuy : String? = "",//是否支持定投 - 0:不支持 1:支持【69:铂金宝】
+    val defaulttradeuserid : String? = "",//默认交易用户ID
+    val deliverygoodsid : String? = "",//现货品种ID
+    val goodsid : String? = "",//商品ID(自增ID SEQ_GOODS)
+    val minamount : String? = "",//最小购买金额
+    val regularlybuyminamount : String? = "",//定投最小金额
+    val regularlybuyminqty : String? = "",//定投最小数量
+    val spotgoodsbrandid : String? = "",//现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID"
+    val wrstandardid : String? = ""//现货商品ID
+) : Parcelable{
+    constructor(parcel: Parcel) : this(
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString(),
+        parcel.readString()
+    ) {
+    }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(canfinance)
+        parcel.writeString(canregularlybuy)
+        parcel.writeString(defaulttradeuserid)
+        parcel.writeString(deliverygoodsid)
+        parcel.writeString(goodsid)
+        parcel.writeString(minamount)
+        parcel.writeString(regularlybuyminamount)
+        parcel.writeString(regularlybuyminqty)
+        parcel.writeString(spotgoodsbrandid)
+        parcel.writeString(wrstandardid)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<GoodsExInfoData> {
+        override fun createFromParcel(parcel: Parcel): GoodsExInfoData {
+            return GoodsExInfoData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<GoodsExInfoData?> {
+            return arrayOfNulls(size)
+        }
+    }
+
+}

+ 1 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/data/VerificationCodeData.kt

@@ -2,6 +2,7 @@ package cn.muchinfo.rma.global.data
 
 data class VerificationCodeData(
     val success : Boolean = false,
+    val isSuccess : Boolean = false,
     val msg : String = "",
     val message : String = ""
 )

+ 3 - 1
RMA/app/src/main/java/cn/muchinfo/rma/global/data/account/loginQeruy/GoodsInfo.kt

@@ -97,5 +97,7 @@ data class GoodsInfo(
     @ColumnInfo(name = "out_goods_code")
     var outgoodscode : String = "", // 商品代码(外部)
     @ColumnInfo(name = "related_goods_id")
-    var relatedgoodsid : Int = 0//关联商品id
+    var relatedgoodsid : Int = 0,//关联商品id
+    @ColumnInfo(name = "trade_mode")
+    var trademode : Int = 0
 )

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/global/database/AppDatabase.java

@@ -8,7 +8,7 @@ import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo;
 import cn.muchinfo.rma.global.data.database.BannerEntity;
 import cn.muchinfo.rma.global.data.database.EnumDicEntity;
 import cn.muchinfo.rma.global.data.database.ErrorCodeEntity;
-
+//不知道为啥竟然多了一个,,,,
 @Database(entities = {GoodsInfo.class, BannerEntity.class, EnumDicEntity.class, ErrorCodeEntity.class}, version = 2, exportSchema = false)
 public abstract class AppDatabase extends RoomDatabase implements UserDatabase {
 }

+ 10 - 2
RMA/app/src/main/java/cn/muchinfo/rma/global/database/DataBase.kt

@@ -17,7 +17,7 @@ import com.blankj.utilcode.util.Utils
 
 @Database(
     entities = [GoodsInfo::class, BannerEntity::class, ErrorCodeEntity::class, EnumDicEntity::class, AddressEntity::class],
-    version = 2,
+    version = 3,
     exportSchema = false
 )
 abstract class DataBase : RoomDatabase() {
@@ -49,7 +49,15 @@ abstract class DataBase : RoomDatabase() {
                     //使用下面分开的形式,可以正确执行
                     database.execSQL("ALTER TABLE goods_infos " + " ADD COLUMN related_goods_id INTEGER " + " NOT NULL DEFAULT 1")
                 }
-            })
+            },
+                object : Migration(2, 3) {
+                    override fun migrate(@NonNull database: SupportSQLiteDatabase) {
+                        //没有布尔值,用INTEGER代替
+                        //使用"ALTER TABLE Word  ADD COLUMN bar_data2 INTEGER  NOT NULL DEFAULT 1"出错。
+                        //使用下面分开的形式,可以正确执行
+                        database.execSQL("ALTER TABLE goods_infos " + " ADD COLUMN trade_mode INTEGER " + " NOT NULL DEFAULT 1")
+                    }
+                })
             .allowMainThreadQueries()
             .build()
     }

+ 18 - 0
RMA/app/src/main/java/cn/muchinfo/rma/protobuf/funcode/FunCode.java

@@ -96,6 +96,24 @@ public class FunCode {
     public static final int DelUserReceiveInfoReq = 1900547;    // 删除收货地址请求请求
     public static final int DelUserReceiveInfoRsp = 1900548;    // 删除收货地址请求响应
 
+    public static final int QhjRegularlyStrategyReq = 1900722;//客户定投策略请求
+    public static final int QhjRegularlyStrategyRsp = 1900723;//客户定投策略应答
+
+    public static final int CustomerRefernumOperateReq = 1900726;//客户推广码操作请求
+    public static final int CustomerRefernumOperateRsp = 1900727;//客户推广码操作应答
+
+    public static final int GoodsPickupOperateReq = 1900728;//提货单操作请求
+    public static final int GoodsPickupOperateRsp = 1900729;//提货单操作应答
+
+    /**
+     * 设置默认收货地址的请求
+     */
+    public static final int UserReceiveIsDefaultReq = 1900570;
+    /**
+     * 设置默认收货地址的应答
+     */
+    public static final int UserReceiveIsDefaultRsp = 1900571;
+
     /**
      * 签约请求
      */

+ 10 - 6
RMA/app/src/main/java/cn/muchinfo/rma/view/MainActivity.kt

@@ -170,16 +170,20 @@ class MainActivity : BaseActivity<MainViewModel>() {
         }
 
 
-        //前海金铂金宝
-        newFragments.add(platinumTreasureFragment)
-        newTabText.add("铂金宝")
-        newNormalIcon.add(R.mipmap.qhj_bjb_tab_normal)
-        newSelectIcon.add(R.mipmap.qhj_bjb_tab_select)
+        if (Constant.IS_QHJ) {
+            //前海金铂金宝
+            newFragments.add(platinumTreasureFragment)
+            newTabText.add("铂金宝")
+            newNormalIcon.add(R.mipmap.qhj_bjb_tab_normal)
+            newSelectIcon.add(R.mipmap.qhj_bjb_tab_select)
+        }
 
-        //前海金饰品回购
+        if (Constant.IS_QHJ) {
+            //前海金饰品回购
 //        newTabText.add("饰品回购")
 //        newNormalIcon.add(R.mipmap.qhj_sphg_tab_normal)
 //        newSelectIcon.add(R.mipmap.qhj_sphg_tab_select)
+        }
 
         if (Constant.IS_QHJ) {
             //前海金我的页面

+ 7 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/MyApplication.kt

@@ -12,6 +12,7 @@ import cn.muchinfo.rma.business.chart.ChartManager
 import cn.muchinfo.rma.business.commodity.CommodityManager
 import cn.muchinfo.rma.business.common.CommonManager
 import cn.muchinfo.rma.business.contract.ContractManager
+import cn.muchinfo.rma.business.contractgoods.ContractGoodsManager
 import cn.muchinfo.rma.business.customer.CustomerManage
 import cn.muchinfo.rma.business.exposure.ExposureManager
 import cn.muchinfo.rma.business.financial.FinancialManager
@@ -133,6 +134,9 @@ class MyApplication : BaseApplication() {
     /*** 出入金管理类 **/
     var moneyManager : MoneyManager? = null
 
+    /** 合约市场管理类 **/
+    var contractGoodsManager : ContractGoodsManager? = null
+
     companion object {
         private var instance: MyApplication? = null
 
@@ -172,7 +176,8 @@ class MyApplication : BaseApplication() {
 
         Utils.init(instance)
         Fresco.initialize(this)
-        Builder.build(this, AppDatabase::class.java)
+
+//        Builder.build(this, AppDatabase::class.java)
         initLifecycle()
         initsqData()
     }
@@ -251,6 +256,7 @@ class MyApplication : BaseApplication() {
         spotManager = SpotManager()
         addressManager = AddressManager()
         moneyManager = MoneyManager()
+        contractGoodsManager = ContractGoodsManager()
     }
 
     /**

+ 29 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/autoWidget/dialog/Dialog.kt

@@ -18,6 +18,7 @@ import cn.muchinfo.rma.global.data.AccountData
 import cn.muchinfo.rma.global.data.AvaildGoodsGroupData
 import cn.muchinfo.rma.global.data.GoodsGroupData
 import cn.muchinfo.rma.global.data.MiddleGoodsData
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.isBlankString
 
 import cn.muchinfo.rma.lifecycle.addObserver
@@ -192,6 +193,34 @@ fun AppCompatActivity.creatHedgeBottomSheetDialog(
 
 
 /**
+ * 专门用于千海金商品下拉选择的dialog
+ * @receiver AppCompatActivity
+ * @param titleStr 头部内容
+ * @param selectList List<GoodsInfo> 选择的实体列表
+ * @param select [@kotlin.ExtensionFunctionType] Function1<AvaildGoodsGroupData, Unit>?
+ */
+fun AppCompatActivity.creatGoodsInfoBottomSheetDialog(
+    titleStr: String,
+    selectList: List<GoodsInfo>,
+    select: (GoodsInfo.() -> Unit)? = null
+) {
+    val builder: QMUIBottomSheet.BottomListSheetBuilder =
+        QMUIBottomSheet.BottomListSheetBuilder(this)
+    builder.setGravityCenter(true)
+        .setTitle(titleStr)
+        .setAddCancelBtn(true)
+    selectList.forEach {
+        builder.addItem(it.goodsname)
+    }
+    builder.setOnSheetItemClickListener { dialog, itemView, position, tag ->
+        select?.invoke(selectList.get(position))
+        dialog.dismiss()
+    }
+    builder.build().show()
+}
+
+
+/**
  * 专门用新增现货商品时的套保品种选择
  * @receiver AppCompatActivity
  * @param titleStr 头部内容

+ 6 - 5
RMA/app/src/main/java/cn/muchinfo/rma/view/autoWidget/tool/DesTools.java

@@ -130,11 +130,12 @@ public class DesTools {
     public static String myServiceAddPass(String content) throws Exception {
         String password = encode(DesTools.getKey(),content);  //des加密
 //       String base64 = Base64.encodeToString(password.getBytes(), Base64.DEFAULT);
-        return password
-                .replace("+","*")
-                .replace("///","-")
-                .replace("=",".")
-                .replace("\n","");
+        return password;
+//        return password
+//                .replace("+","*")
+//                .replace("///","-")
+//                .replace("=",".")
+//                .replace("\n","");
     }
 
     public static String encode(String content) throws Exception {

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/app/Constant.kt

@@ -246,6 +246,6 @@ object Constant {
 
     const val SUCCESS_ADD_CUSTOMER = "SUCCESS_ADD_CUSTOMER"
 
-
+    //是否是千海金
     const val IS_QHJ = true
 }

+ 2 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/chart/ChartViewModel.kt

@@ -11,6 +11,7 @@ import cn.muchinfo.rma.global.data.account.loginQeruy.Markets
 import cn.muchinfo.rma.global.data.chart.ChartTSData
 import cn.muchinfo.rma.global.data.chart.HistoryDatas
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.base.BaseViewModel
@@ -40,7 +41,7 @@ class ChartViewModel : BaseViewModel() {
         goodsCode = intent.getStringExtra("goodsCode").toString()
         goodsGroupId = intent.getIntExtra("goodsGroupId", 0)
         marketId = intent.getIntExtra("marketId", 0)
-        goodsInfo.postValue(Builder.getDatabase<AppDatabase>().goodsInfoDao.getGoodsInfo(goodsId))
+        goodsInfo.postValue(DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId))
         // FIXME: 2021/4/25  这里以后要根据市场id去判断交易模式 现在只有一种交易模式
         // autoId 关联 exchangeId
         if(GlobalDataCollection.instance?.loginQueryData?.market?.size != 0){

+ 4 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/markets/MarketFragment.kt

@@ -14,6 +14,7 @@ import cn.muchinfo.rma.global.data.account.loginQeruy.ExternalExchanges
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsGroups
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.view.base.BaseFragment
 import cn.muchinfo.rma.view.base.app.Constant
@@ -86,7 +87,7 @@ class MarketFragment(data: ExternalExchanges) : BaseFragment<MarketBaseModel>()
         if (messageEvent.messageType == EventConstent.OPTIONAL_GOODS_CHANGE){//接到自选商品变化通知
             if (data?.autoid == -1){
                 val goodsIdList = GlobalDataCollection.instance?.goodsIdList
-                val allList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+                val allList = DataBase.getInstance().goodsInfoDao().all
                 val list = arrayListOf<GoodsInfo>()
                 goodsIdList?.forEach { data ->
                     allList.forEach {
@@ -142,7 +143,7 @@ class MarketFragment(data: ExternalExchanges) : BaseFragment<MarketBaseModel>()
                 }
             }
 
-            val allList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+            val allList = DataBase.getInstance().goodsInfoDao().all
             goodsGroupDataList.forEach {
                 allList.forEach {data ->
                     if (it.goodsgroupid == data.goodsgroupid  && data.goodsstatus == 3){
@@ -152,7 +153,7 @@ class MarketFragment(data: ExternalExchanges) : BaseFragment<MarketBaseModel>()
             }
         }else{//为自选
             val goodsIdList = GlobalDataCollection.instance?.goodsIdList
-            val allList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+            val allList = DataBase.getInstance().goodsInfoDao().all
                 goodsIdList?.forEach { data ->
                     allList.forEach {
                         if (data == it.goodsid.toString()  && it.goodsstatus == 3){

+ 3 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/trade/GoodsTradeActivity.kt

@@ -20,6 +20,7 @@ import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.global.toPercentage
 import cn.muchinfo.rma.lifecycle.bindOptional
@@ -204,7 +205,7 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         }
         viewModel.priceOrderType.postValue(FutureConstent.eOrderPriceSelectType_Last)//默认交易价格取价方式为最新价
         viewModel.tradeMode.postValue(FutureConstent.PriceMode_PRICEMODE_LIMIT)//通道下单类型默认为限价
-        goodsInfoData.postValue(Builder.getDatabase<AppDatabase>().goodsInfoDao.getGoodsInfo(goodsId.toInt()))//获取商品详情
+        goodsInfoData.postValue(DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId.toInt()))//获取商品详情
         viewModel.queryQuoteDay(tag = thisTag,goodsCodes = outGoodsCode,isShowLoading = isShowLoading)//请求盘面
     }
 
@@ -228,7 +229,7 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         //如果推送的goodsid包含当前页面的goodsid,则进行页面刷新
         if (goodsids.contains(goodsId?.toInt())){
             LogUtils.eTag("dasjhdkjagfkask","行情推送" + goodsId)
-            val goodsInfo = Builder.getDatabase<AppDatabase>().goodsInfoDao.getGoodsInfo(goodsId?.toInt() ?: 0)
+            val goodsInfo = DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId?.toInt() ?: 0)
             val quote = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { goodsInfo?.outgoodscode == it.outgoodscode }?.quoteDayData
             if (quote != null){
                 viewModel.quoteDayData.postValue(quote)

+ 6 - 5
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/HomeFragment.kt

@@ -755,12 +755,13 @@ class FirstTabUI(private val baseFragment: Fragment, private val viewModel: Home
                 }
 
                 linearLayout {
-                    if (GlobalDataCollection.instance?.getFirstLevelMenu(code = "client_business") == true){
-                        visibility = View.VISIBLE
-                    }else{
-                        visibility = View.GONE
-                    }
+
                     relativeLayout {
+                        if (GlobalDataCollection.instance?.getFirstLevelMenu(code = "client_business") == true){
+                            visibility = View.VISIBLE
+                        }else{
+                            visibility = View.GONE
+                        }
                         verticalLayout {
                             onThrottleFirstClick {
                                 val intent = Intent()

+ 2 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/business/BusinessManagementViewholder.kt

@@ -14,6 +14,7 @@ import cn.muchinfo.rma.global.data.BusinessData
 import cn.muchinfo.rma.global.isShowTimeString
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
+import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.home.contract.emptyView
 import com.blankj.utilcode.util.ActivityUtils
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
@@ -128,7 +129,7 @@ class BusinessManagementViewholder(private val activity: AppCompatActivity, priv
                     textView {
                         data.bindOptional(context){
                             if (type == "1"){
-                                text = it?.amount
+                                text = NumberUtils.roundNum(NumberUtils.doubleDistortion(it?.amount),2)
                             }else{
                                 text = it?.reckonvalue
                             }

+ 13 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/AddContractActivity.kt

@@ -1673,13 +1673,25 @@ class AddContractActivity : BaseActivity<ContractViewModel>() {
                             if (checkUpdate().not()) {
                                 return@onThrottleFirstClick
                             }
-                            viewModel.orderContract(
+                            if (data.spotcontractid.isNullOrEmpty()){
+                                viewModel.orderContract(
                                 contractInfo = getContractInfo(),
                                 OperateType = "2",
                                 Remark = remask_edittext.text.toString()
                             ) {
                                 finish()
                             }
+                            }else{
+                                viewModel.orderContract(
+                                contractInfo = getContractInfo(),
+                                OperateType = "2",
+                                Remark = remask_edittext.text.toString(),
+                                SpotContractID = data.spotcontractid ?: ""
+                            ) {
+                                finish()
+                            }
+                            }
+
                         }
                         gravity = Gravity.CENTER
                         backgroundResource = R.mipmap.rma_submit_bg

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractDetailsActivity.kt

@@ -422,7 +422,7 @@ class ContractDetailsActivity : BaseActivity<ContractViewModel>() {
                                 return@onThrottleFirstClick
                             }
                             viewModel.orderContract(
-                                contractInfo = SpotContractInfo(SaleUserID = selectSalesman.value?.id?.toLong() ?: 0,MerUserID = selectMerchandiser.value?.id?.toLong() ?: 0,TradeUserID = selectTradingData.value?.id?.toLong() ?: 0),
+                                contractInfo = SpotContractInfo(CurrencyID = data.currencyid?.toInt() ?: 0,BizType = data.biztype?.toInt() ?: 0,SaleUserID = selectSalesman.value?.id?.toLong() ?: 0,MerUserID = selectMerchandiser.value?.id?.toLong() ?: 0,TradeUserID = selectTradingData.value?.id?.toLong() ?: 0),
                                 OperateType = "4",
                                 Remark = remarskText.text.toString(),
                                 SpotContractID = data.spotcontractid ?: ""

+ 67 - 67
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractPublicView.kt

@@ -583,73 +583,73 @@ fun _LinearLayout.contractDetailFourView(data: ContractData) {
             }
         }.lparams(matchParent, autoSize(132))
 
-        viewItemUI()
-
-        linearLayout {
-
-            gravity = Gravity.CENTER_VERTICAL
-            textView {
-                text = "业  务  员"
-                textSizeAuto = 31
-                textColorInt = R.color.p_normal_summary_txt_color
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(59)
-            }
-
-            textView {
-                text = data.saleuserlogincode?.isBlankString()
-                textColorInt = R.color.rma_black_33
-                textSizeAuto = 31
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(80)
-            }
-        }.lparams(matchParent, autoSize(132))
-
-        viewItemUI()
-
-
-        linearLayout {
-
-            gravity = Gravity.CENTER_VERTICAL
-            textView {
-                text = "跟  单  员"
-                textSizeAuto = 31
-                textColorInt = R.color.p_normal_summary_txt_color
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(59)
-            }
-
-            textView {
-                text = data.meruserlogincode?.isBlankString()
-                textColorInt = R.color.rma_black_33
-                textSizeAuto = 31
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(80)
-            }
-        }.lparams(matchParent, autoSize(132))
-
-        viewItemUI()
-
-
-        linearLayout {
-
-            gravity = Gravity.CENTER_VERTICAL
-            textView {
-                text = "交易用户"
-                textSizeAuto = 31
-                textColorInt = R.color.p_normal_summary_txt_color
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(59)
-            }
-
-            textView {
-                text = data.tradeusername?.isBlankString()
-                textColorInt = R.color.rma_black_33
-                textSizeAuto = 31
-            }.lparams(wrapContent, wrapContent) {
-                marginStart = autoSize(80)
-            }
-        }.lparams(matchParent, autoSize(132))
+//        viewItemUI()
+//
+//        linearLayout {
+//
+//            gravity = Gravity.CENTER_VERTICAL
+//            textView {
+//                text = "业  务  员"
+//                textSizeAuto = 31
+//                textColorInt = R.color.p_normal_summary_txt_color
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(59)
+//            }
+//
+//            textView {
+//                text = data.saleuserlogincode?.isBlankString()
+//                textColorInt = R.color.rma_black_33
+//                textSizeAuto = 31
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(80)
+//            }
+//        }.lparams(matchParent, autoSize(132))
+//
+//        viewItemUI()
+//
+//
+//        linearLayout {
+//
+//            gravity = Gravity.CENTER_VERTICAL
+//            textView {
+//                text = "跟  单  员"
+//                textSizeAuto = 31
+//                textColorInt = R.color.p_normal_summary_txt_color
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(59)
+//            }
+//
+//            textView {
+//                text = data.meruserlogincode?.isBlankString()
+//                textColorInt = R.color.rma_black_33
+//                textSizeAuto = 31
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(80)
+//            }
+//        }.lparams(matchParent, autoSize(132))
+//
+//        viewItemUI()
+//
+//
+//        linearLayout {
+//
+//            gravity = Gravity.CENTER_VERTICAL
+//            textView {
+//                text = "交易用户"
+//                textSizeAuto = 31
+//                textColorInt = R.color.p_normal_summary_txt_color
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(59)
+//            }
+//
+//            textView {
+//                text = data.tradeusername?.isBlankString()
+//                textColorInt = R.color.rma_black_33
+//                textSizeAuto = 31
+//            }.lparams(wrapContent, wrapContent) {
+//                marginStart = autoSize(80)
+//            }
+//        }.lparams(matchParent, autoSize(132))
 
         viewItemUI()
 

+ 2 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/contract/ContractViewModel.kt

@@ -5,10 +5,9 @@ import cn.muchinfo.rma.business.contract.SpotContractInfo
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.ViewEnumUtils
 import cn.muchinfo.rma.global.data.*
-import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.isBlankString
 import cn.muchinfo.rma.global.isShowTimeString
-import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.autoWidget.remove
@@ -477,7 +476,7 @@ class ContractViewModel : BaseViewModel() {
      * @return ArrayList<SelectData>
      */
     fun setSelectGoodsList(): ArrayList<SelectData> {
-        val goodsList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+        val goodsList = DataBase.getInstance().goodsInfoDao().all
         val newCustomerList = arrayListOf<SelectData>()
         goodsList.forEach {
             newCustomerList.add(SelectData(id = it.goodsid.toString(), value = it.goodsname))

+ 2 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/reportquery/ReportQueryViewModel.kt

@@ -738,7 +738,7 @@ class ReportQueryViewModel : BaseViewModel(){
             //'套保量/\n 套利量 '
             newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.hedgeqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.arbitrageqty),2) + it.enumdicname)
             //'现货总量/\n 变动量 '
-            newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalspotqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(it.diffSpotQty,2) + it.enumdicname)
+            newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalspotqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(it.diffspotqty,2) + it.enumdicname)
             //'套保变动量/\n 套利变动量 '
             newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.diffmgqtya),2) + it.enumdicname + "\n" + NumberUtils.roundNum(it.diffmgqtyb,2) + it.enumdicname)
             //'套保比例/\n 套利比例 '
@@ -748,7 +748,7 @@ class ReportQueryViewModel : BaseViewModel(){
             //'现货应套保总量/\n 变动量 '
             newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalneedhedgeqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.diffhedgeqty),2) + it.enumdicname)
             //'期货总量/\n 变动量 '
-            newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalfutureqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.diffFutuQty),2) + it.enumdicname)
+            newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalfutureqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.difffutuqty),2) + it.enumdicname)
             //'套保敞口/\n 变动量 '
             newRightData.add(NumberUtils.roundNum(NumberUtils.doubleDistortion(it.needhedgeexposoure),2) + it.enumdicname +  "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.diffexposure),2) + it.enumdicname)
             //'总敞口/\n 变动量 '

+ 5 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/reportquery/reportdetail/ReportCommonDetailsViewModel.kt

@@ -58,6 +58,7 @@ class ReportCommonDetailsViewModel : BaseViewModel(){
                 put("cycletype",financeReportData.cycletype ?: "")
                 put("cycletime",financeReportData.reckondate ?: "")
                 put("currencyid",financeReportData.currencyid ?: "")
+                put("sumfields","1,2,3")
             }
             MyApplication.getInstance()?.reportManager?.qryFinanceReport(params = params) { isSuccess, respData, error ->
                 if (isSuccess) {
@@ -70,6 +71,7 @@ class ReportCommonDetailsViewModel : BaseViewModel(){
                 put("querytype","2")
                 put("cycletype",financeReportData.cycletype ?: "")
                 put("cycletime",financeReportData.cycletime ?: "")
+                put("sumfields","1,2,3")
             }
             MyApplication.getInstance()?.reportManager?.qryFinanceReport(params = params) { isSuccess, respData, error ->
                 if (isSuccess) {
@@ -83,6 +85,7 @@ class ReportCommonDetailsViewModel : BaseViewModel(){
                 put("cycletype",financeReportData.cycletype ?: "")
                 put("cycletime",financeReportData.reckondate ?: "")
                 put("currencyid",financeReportData.currencyid ?: "")
+                put("sumfields","1,2")
             }
             MyApplication.getInstance()?.reportManager?.qryFinanceReport(params = params) { isSuccess, respData, error ->
                 if (isSuccess) {
@@ -95,6 +98,7 @@ class ReportCommonDetailsViewModel : BaseViewModel(){
                 put("querytype","2")
                 put("cycletype",financeReportData.cycletype ?: "")
                 put("cycletime",financeReportData.cycletime ?: "")
+                put("sumfields","1,2")
             }
             MyApplication.getInstance()?.reportManager?.qryFinanceReport(params = params) { isSuccess, respData, error ->
                 if (isSuccess) {
@@ -788,7 +792,7 @@ class ReportCommonDetailsViewModel : BaseViewModel(){
             //'期货总量/\n 变动量 '
             newRightData.add(
                 NumberUtils.roundNum(NumberUtils.doubleDistortion(it.totalfutureqty),2) + it.enumdicname + "\n" + NumberUtils.roundNum(
-                    NumberUtils.doubleDistortion(it.diffFutuQty),2) + it.enumdicname)
+                    NumberUtils.doubleDistortion(it.difffutuqty),2) + it.enumdicname)
             //'套保敞口/\n 变动量 '
             newRightData.add(it.needhedgeexposoure + "\n" + NumberUtils.roundNum(NumberUtils.doubleDistortion(it.diffexposure),2) + it.enumdicname)
             //'总敞口/\n 变动量 '

+ 73 - 45
RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/LoginActivity.kt

@@ -45,7 +45,7 @@ import org.jetbrains.anko.sdk25.coroutines.textChangedListener
 import java.util.*
 import kotlin.collections.ArrayList
 
-class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAccountListener {
+class LoginActivity : BaseActivity<LoginViewModel>(), UserPopupWindow.OnClearAccountListener {
     private var loginCodeEditText: EditText? = null
     private var loginPwdEditText: EditText? = null
     private val dialog by lazy { createLoadingDialog(hintStr = "登录中...") }
@@ -57,7 +57,7 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
     //是否选择记住密码
     var isRememberPsw = false
 
-    lateinit var p_tips : CheckBox
+    lateinit var p_tips: CheckBox
 
     private var hasAvailableVersion = false
 
@@ -137,24 +137,26 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
 
                     textChangedListener {
                         afterTextChanged {//记住密码功能暂时没有了
+                            if (Constant.IS_QHJ) {
+                                if (it.toString().isNotEmpty()) {
+                                    val oldMap: Map<String, String> =
+                                        NumberUtils.getHashMapData(Constant.MTP_LOGIN_ACCOUNT)
+                                    val psw =
+                                        oldMap[it.toString().trim { it <= ' ' }]
+                                    if (psw != null) {
+                                        if (psw.contains("-")) {
+                                            val pswlist =
+                                                psw.split("-").toTypedArray()
+                                            loginPwdEditText?.setText(EnUtil.decrypt(pswlist[0]))
+                                        } else {
+                                            loginPwdEditText?.setText(EnUtil.decrypt(psw))
+                                        }
+                                    } else {
+                                        loginPwdEditText?.setText("")
+                                    }
+                                }
+                            }
 
-//                            if (it.toString().isNotEmpty()){
-//                                val oldMap: Map<String, String> =
-//                                    NumberUtils.getHashMapData(Constant.MTP_LOGIN_ACCOUNT)
-//                                val psw =
-//                                    oldMap[it.toString().trim { it <= ' ' }]
-//                                if (psw != null) {
-//                                    if (psw.contains("-")) {
-//                                        val pswlist =
-//                                            psw.split("-").toTypedArray()
-//                                        loginPwdEditText?.setText(EnUtil.decrypt(pswlist[0]))
-//                                    } else {
-//                                        loginPwdEditText?.setText(EnUtil.decrypt(psw))
-//                                    }
-//                                } else {
-//                                    loginPwdEditText?.setText("")
-//                                }
-//                            }
                         }
                     }
                     hintColorStr = "#83B7FF"
@@ -163,13 +165,13 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
                     hint = "手机号码/登录账号"
                     background = null
                     textSizeAuto = 34
-                }.lparams(0, wrapContent,1f) {
+                }.lparams(0, wrapContent, 1f) {
                     leftMargin = autoSize(53)
                 }
 
                 imageView {
                     onThrottleFirstClick {
-                        if (userPopupWindow == null){
+                        if (userPopupWindow == null) {
                             if (userList != null && userList.size > 0) {
                                 userPopupWindow = UserPopupWindow(
                                     userList,
@@ -179,12 +181,13 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
                                     true
                                 )
                                 userPopupWindow!!.height = FrameLayout.LayoutParams.WRAP_CONTENT
-                                userPopupWindow!!.width = loginCodeEditText?.measuredWidth ?: 0 + 180
+                                userPopupWindow!!.width =
+                                    loginCodeEditText?.measuredWidth ?: 0 + 180
                                 if (!userPopupWindow!!.isShowing) {
                                     userPopupWindow!!.showAsDropDown(loginCodeEditText, 0, 1)
                                 }
                             }
-                        }else{
+                        } else {
                             if (userList != null && userList.size > 0) {
                                 if (!userPopupWindow!!.isShowing) {
                                     userPopupWindow!!.showAsDropDown(loginCodeEditText, 0, 1)
@@ -241,13 +244,18 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
             linearLayout {
                 gravity = Gravity.CENTER_VERTICAL
                 checkBox {
-                    visibility = View.GONE
+                    if (Constant.IS_QHJ) {
+                        visibility = View.GONE
+                    } else {
+                        visibility = View.VISIBLE
+                    }
+
                     p_tips = this
                     buttonDrawable = null
                     background = resources.getDrawable(R.drawable.checkbox_switch_selector)
                     setOnCheckedChangeListener { _, b ->
                         isRememberPsw = b
-                        SPUtils.getInstance().put(Constant.IS_REMEBERPSW,b)
+                        SPUtils.getInstance().put(Constant.IS_REMEBERPSW, b)
                     }
                 }.lparams(autoSize(100), autoSize(100)) {
                     marginStart = autoSize(36)
@@ -255,12 +263,20 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
 
                 textView {
                     onThrottleFirstClick {
-                        val intent = Intent()
-                        intent.setClass(context,RegisterSelectActivity::class.java)
-                        ActivityUtils.startActivity(intent)
+                        if (Constant.IS_QHJ) {
+                            val intent = Intent()
+                            intent.setClass(context, RegisterSelectActivity::class.java)
+                            ActivityUtils.startActivity(intent)
+                        }
+
+                    }
+                    if (Constant.IS_QHJ) {
+                        text = "用户注册"
+                    } else {
+                        text = "记住密码"
                     }
-                    text = "用户注册"
-//                    text = "记住密码"
+
+//
                     textColorInt = R.color.white
                     textSizeAuto = 34
                 }.lparams(wrapContent, wrapContent) {
@@ -296,14 +312,15 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
                 gravity = Gravity.CENTER_HORIZONTAL
                 topMargin = autoSize(25)
             }.onClick {
-                if (isReadAgreement.value == false){
+                if (isReadAgreement.value == false) {
                     ToastUtils.showLong("请仔细阅读《用户协议》并勾选")
                     return@onClick
                 }
 
                 //你什么登陆都要链接服务吧  链接之前判断下更新问题
                 if (SPUtils.getInstance().getString(Constant.UploadMode).equals("1") &&
-                   getVersionCode(context) < SPUtils.getInstance().getString(Constant.VERSONCODE).toInt()
+                    getVersionCode(context) < SPUtils.getInstance().getString(Constant.VERSONCODE)
+                        .toInt()
                 ) {
                     //如果是强制更新 并且服务器版本号大于当前版本号
                     ToastUtils.showLong("当前版本低于服务器版本,请更新后登陆")
@@ -404,10 +421,10 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
         viewModel.loadingDialogStatus.value = TaskUiModel.inFlight()
         SPUtils.getInstance().put("login", loginCodeEditText!!.text.toString().trim())
         SPUtils.getInstance().put("psw", loginPwdEditText!!.text.toString())
-        var collectInfo : ByteArray = byteArrayOf()
+        var collectInfo: ByteArray = byteArrayOf()
         try {
             collectInfo = DeviceInfoManager.getCollectInfo(this) ?: byteArrayOf()
-        }catch (e : Exception){
+        } catch (e: Exception) {
             e.printStackTrace()
         }
 
@@ -442,8 +459,8 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
                         return@loginQuery
                     }
                     //请求获取企业风管终端权限
-                    MyApplication.getInstance()?.accountManager?.getErmcpRoleFuncMenuLists(){isSuccess, respData, error ->
-                        if (isSuccess.not()){
+                    MyApplication.getInstance()?.accountManager?.getErmcpRoleFuncMenuLists() { isSuccess, respData, error ->
+                        if (isSuccess.not()) {
                             viewModel.loadingDialogStatus.value =
                                 TaskUiModel.failed(
                                     InteractiveException(
@@ -451,32 +468,43 @@ class LoginActivity : BaseActivity<LoginViewModel>() , UserPopupWindow.OnClearAc
                                     )
                                 )
                             return@getErmcpRoleFuncMenuLists
-                        }else{
+                        } else {
                             // 商品信息要求每过24小时请求一次
-                            if (SPUtils.getInstance().getLong(Constant.QUERY_GOODS_TIME ,0) == 0L){//如果拿到的记录的商品信息请求时间为空则进行商品信息请求
+                            if (SPUtils.getInstance()
+                                    .getLong(Constant.QUERY_GOODS_TIME, 0) == 0L
+                            ) {//如果拿到的记录的商品信息请求时间为空则进行商品信息请求
                                 MyApplication.getInstance()?.futureManager?.queryGoodsList { isCompleted, err ->
                                     if (isCompleted) {
-                                        viewModel.loadingDialogStatus.value = TaskUiModel.success(msg = "登录成功")
-                                        SPUtils.getInstance().put(Constant.QUERY_GOODS_TIME,TimeUtils.getNowMills())
+                                        viewModel.loadingDialogStatus.value =
+                                            TaskUiModel.success(msg = "登录成功")
+                                        SPUtils.getInstance()
+                                            .put(Constant.QUERY_GOODS_TIME, TimeUtils.getNowMills())
                                         goHomePage()
                                     } else {
                                         viewModel.loadingDialogStatus.value =
                                             TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
                                     }
                                 }
-                            }else{//如果记录的时间和当前时间相差超过24小时则进行商品信息请求
-                                if (TimeUtils.getNowMills().minus(SPUtils.getInstance().getLong(Constant.QUERY_GOODS_TIME)) >= 86400000){
+                            } else {//如果记录的时间和当前时间相差超过24小时则进行商品信息请求
+                                if (TimeUtils.getNowMills().minus(
+                                        SPUtils.getInstance().getLong(Constant.QUERY_GOODS_TIME)
+                                    ) >= 86400000
+                                ) {
                                     MyApplication.getInstance()?.futureManager?.queryGoodsList { isCompleted, err ->
                                         if (isCompleted) {
-                                            viewModel.loadingDialogStatus.value = TaskUiModel.success(msg = "登录成功")
-                                            SPUtils.getInstance().put(Constant.QUERY_GOODS_TIME,TimeUtils.getNowMills())
+                                            viewModel.loadingDialogStatus.value =
+                                                TaskUiModel.success(msg = "登录成功")
+                                            SPUtils.getInstance().put(
+                                                Constant.QUERY_GOODS_TIME,
+                                                TimeUtils.getNowMills()
+                                            )
                                             goHomePage()
                                         } else {
                                             viewModel.loadingDialogStatus.value =
                                                 TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
                                         }
                                     }
-                                }else{
+                                } else {
                                     //不请求商品信息时要把本地数据库的商品信息赋值给数据中心
                                     MyApplication.getInstance()?.futureManager?.putGoodsInfoAndQuotesList()
                                     goHomePage()

+ 9 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/EnterpriseRegisterActivity.kt

@@ -26,6 +26,7 @@ import com.blankj.utilcode.util.SPUtils
 import com.blankj.utilcode.util.ToastUtils
 import com.zhy.http.okhttp.callback.StringCallback
 import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.dialog.createWarningDialog
 import mtp.polymer.com.autowidget.utils.TaskUiModel
 import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import okhttp3.Call
@@ -368,7 +369,14 @@ class EnterpriseRegisterActivity : BaseActivity<RegisterViewModel>() {
                             return@onThrottleFirstClick
                         }
                         viewModel.requestEnterpriseInfo(username = enterprise_name.text.toString(),vcode = verification_code.text.toString(),logincode = login_code.text.toString(),loginpwd = login_password.text.toString(),mobilephone = phone_number.text.toString(),cardfrontphotourl = uploadFile){
-                            finish()
+                            createWarningDialog {
+                                setTitle("温馨提示")
+                                setMessage("注册成功,请前往登录")
+                                addAction("确定") { dialog, _ ->
+                                    finish()
+                                    dialog.dismiss()
+                                }
+                            }.show()
                         }
                     }
                     gravity = Gravity.CENTER

+ 10 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/PersonalRegisterActivity.kt

@@ -14,8 +14,10 @@ import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.future.trade.itemPaddingView
 import cn.muchinfo.rma.view.base.home.contract.verticalEmptyView
+import com.blankj.utilcode.util.AppUtils
 import com.blankj.utilcode.util.ToastUtils
 import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.dialog.createWarningDialog
 import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
 
@@ -225,7 +227,14 @@ class PersonalRegisterActivity : BaseActivity<RegisterViewModel>(){
                         }
 
                         viewModel.requestPersonalInfo(vcode = version_code.text.toString(),refernum = recommended_code.text.toString(),mobilephone = phone_number.text.toString(),loginpwd = login_password.text.toString()){
-                            finish()
+                            createWarningDialog {
+                                setTitle("温馨提示")
+                                setMessage("注册成功,请前往登录")
+                                addAction("确定") { dialog, _ ->
+                                    finish()
+                                    dialog.dismiss()
+                                }
+                            }.show()
                         }
                     }
                     gravity = Gravity.CENTER

+ 2 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/RegisterSelectActivity.kt

@@ -42,6 +42,7 @@ class RegisterSelectActivity : BaseActivity<RegisterViewModel>(){
                     val intent = Intent()
                     intent.setClass(context,PersonalRegisterActivity::class.java)
                     ActivityUtils.startActivity(intent)
+                    finish()
                 }
                 backgroundDrawable = createRoundRectDrawable("#FFB560", 20)
                 gravity = Gravity.CENTER_VERTICAL
@@ -78,6 +79,7 @@ class RegisterSelectActivity : BaseActivity<RegisterViewModel>(){
                     val intent = Intent()
                     intent.setClass(context,EnterpriseRegisterActivity::class.java)
                     ActivityUtils.startActivity(intent)
+                    finish()
                 }
                 backgroundDrawable = createRoundRectDrawable("#84D1FF", 20)
                 gravity = Gravity.CENTER_VERTICAL

+ 16 - 77
RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/register/RegisterViewModel.kt

@@ -67,15 +67,16 @@ class RegisterViewModel : BaseViewModel(){
     //企业用户注册请求 isaudit 0-否,1-是 企业用户需要注册 userinfotype  1-个人,2-企业 sid 获取图形验证码时传的当前时间戳:
     fun requestEnterpriseInfo(username : String,vcode : String,logincode : String,loginpwd : String,mobilephone : String,cardfrontphotourl : String,
                               isSuccess: (isCompleted: Boolean) -> Unit){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
         val json = JSONObject()
         json["vcode"] = vcode
         json["username"] = username
         json["logincode"] = logincode
-        json["loginpwd"] = DesTools.myServiceAddPass(loginpwd)
+        json["loginpwd"] = EncodeUtils.base64Encode(loginpwd)
         json["mobilephone"] = mobilephone
         json["cardfrontphotourl"] = cardfrontphotourl
         json["sid"] = timeMills.value
-        json["isaudit"] = "1"
+        json["isaudit"] = "0"
         json["userinfotype"] = "2"
         json["openmode"] = "5"
         OkHttpUtils.postString()
@@ -97,8 +98,8 @@ class RegisterViewModel : BaseViewModel(){
                     LogUtils.d("dhasfhkajhlkasuccess", response)
                     val gson = Gson()
                     val allData = gson.fromJson(response, VerificationCodeData::class.java)
-                    if (allData.success) {
-                        loadingDialogStatus.value = TaskUiModel.success()
+                    if (allData.isSuccess) {
+                        loadingDialogStatus.value = TaskUiModel.success(msg = "注册成功")
                         isSuccess.invoke(true)
                         imageCode.value = allData.msg
                     } else {
@@ -117,17 +118,18 @@ class RegisterViewModel : BaseViewModel(){
     //企业用户注册请求 isaudit 0-否,1-是 企业用户需要注册 userinfotype  1-个人,2-企业 sid 获取图形验证码时传的当前时间戳:
     fun requestPersonalInfo(vcode : String,refernum : String = "",loginpwd : String,mobilephone : String,
                               isSuccess: (isCompleted: Boolean) -> Unit){
-
+        loadingDialogStatus.value = TaskUiModel.inFlight()
         if (refernum.isNullOrEmpty()){
             val json = JSONObject()
             json["vcode"] = vcode
-            json["loginpwd"] = DesTools.myServiceAddPass(loginpwd)
+            json["loginpwd"] = EncodeUtils.base64Encode(loginpwd)
             json["mobilephone"] = mobilephone
-            json["isaudit"] = "0"
+            json["isaudit"] = "1"
             json["userinfotype"] = "1"
             json["openmode"] = "5"
 
             OkHttpUtils.postString()
+//                .url("http://192.168.30.65:8082/mtp2-onlineopen/onlineopen/userInfo/add3")
                 .url(SPUtils.getInstance().getString(Constant.openApiUrl) + "/onlineopen/userInfo/add3")
                 .mediaType(MediaType.parse("application/json; charset=utf-8"))
                 .content(json.toJSONString())
@@ -137,8 +139,8 @@ class RegisterViewModel : BaseViewModel(){
                         LogUtils.d("dhasfhkajhlkasuccess", response)
                         val gson = Gson()
                         val allData = gson.fromJson(response, VerificationCodeData::class.java)
-                        if (allData.success) {
-                            loadingDialogStatus.value = TaskUiModel.success()
+                        if (allData.isSuccess) {
+                            loadingDialogStatus.value = TaskUiModel.success(msg = "注册成功,请前往登录")
                             isSuccess.invoke(true)
                             imageCode.value = allData.msg
                         } else {
@@ -155,12 +157,13 @@ class RegisterViewModel : BaseViewModel(){
         }else{
             val json = JSONObject()
             json["vcode"] = vcode
-            json["loginpwd"] = DesTools.myServiceAddPass(loginpwd)
+            json["loginpwd"] = EncodeUtils.base64Encode(loginpwd)
             json["mobilephone"] = mobilephone
-            json["isaudit"] = "0"
+            json["isaudit"] = "1"
             json["userinfotype"] = "1"
             json["openmode"] = "5"
             OkHttpUtils.postString()
+//                .url("http://192.168.30.65:8082/mtp2-onlineopen/onlineopen/userInfo/add3")
                 .url(SPUtils.getInstance().getString(Constant.openApiUrl) + "/onlineopen/userInfo/add3")
                 .mediaType(MediaType.parse("application/json; charset=utf-8"))
                 .content(json.toJSONString())
@@ -170,8 +173,8 @@ class RegisterViewModel : BaseViewModel(){
                         LogUtils.d("dhasfhkajhlkasuccess", response)
                         val gson = Gson()
                         val allData = gson.fromJson(response, VerificationCodeData::class.java)
-                        if (allData.success) {
-                            loadingDialogStatus.value = TaskUiModel.success()
+                        if (allData.isSuccess) {
+                            loadingDialogStatus.value = TaskUiModel.success(msg = "注册成功,请前往登录")
                             isSuccess.invoke(true)
                             imageCode.value = allData.msg
                         } else {
@@ -219,69 +222,5 @@ class RegisterViewModel : BaseViewModel(){
 
     //        Toast.makeText(PhoneLoginActivity.this,DesTools.myServiceAddPass(phone_text.getText().toString()),Toast.LENGTH_LONG).show();
 
-    fun fas(){
-//
-//        OkHttpUtils.get()
-//            .url(AddressConfig.AUTH_GO_URL + "/HSBY/QueryHsbyTopGoodses?marketIDs=" + touristCheckString(doTourist = {
-//                if(touristMarketId == null) "16201" else touristMarketId.marketid
-//            }, unTourist = {
-//                marketid
-//            }))
-//            .addParams("marketIDs",marketid)
-//            .addParams("descProvinceID",DescProvinceID)
-//            .addParams("descCityID",cityId)
-//            .addHeader("Authorization", SPUtils.getInstance().getString("token"))
-//            .build()
-//            .execute(object : StringCallback() {
-//                override fun onResponse(response: String?, id: Int) {
-//                    LogUtils.e("dhasfhkajhlka22222",response + "——————" + DescProvinceID + "+++" + cityId)
-//                    val gson = Gson()
-//                    val allData = gson.fromJson(response, HomeSellResultData::class.java)
-//                    if (allData.code == 200) {
-//                        loadingDialogStatus.value = TaskUiModel.success()
-//                        homeList.value = allData.getData()
-//                        setAllSubList(allData.getData())
-//                    } else {
-//                        loadingDialogStatus.value = TaskUiModel.failed(Throwable(message = allData.msg))
-//                    }
-//                }
-//
-//                override fun onError(call: Call?, e: java.lang.Exception?, id: Int) {
-//                    loadingDialogStatus.value = TaskUiModel.failed(Throwable(message = e?.message))
-//                    LogUtils.d("dhasfhkajhlka", e?.message)
-//                }
-//            })
-//        //请求验证码
-//        OkHttpUtils.postString()
-//            .url(AddressConfig.AUTH_LOGIN_ADDRESS.toString() + "/user/smsvcode")
-//            .content(json.toJSONString())
-//            .mediaType(okhttp3.MediaType.parse("application/json; charset=utf-8")) //                .addParams("mobile",DesTools.myServiceAddPass(area_code.getText().toString().trim() + phone_text.getText().toString().trim()))
-//            .build()
-//            .execute(
-//                object : StringCallback() {
-//                    override fun onError(call: Call, e: Exception, id: Int) {
-//
-//                    }
-//
-//                    override fun onResponse(response: String, id: Int) {
-//
-//                        //这里也要加个判断
-////            val identifyData: IdentifyData? = JSON.parseObject(response, IdentifyData::class.java)
-////            if (identifyData != null) {
-////                if (identifyData.getSuccess().equals("true")) {
-////                    isShowInvitation.postValue(identifyData.getIsShowRefer())
-////                    Toast.makeText(
-////                        this@PhoneLoginActivity,
-////                        identifyData.getMsg(),
-////                        Toast.LENGTH_LONG
-////                    ).show()
-////                } else {
-////                    showToast(R.string.identify_request_error)
-////                }
-////            }
-//                    }
-//                })
-    }
-
 
 }

+ 59 - 11
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/AddAddressManagementActivity.kt

@@ -16,10 +16,13 @@ import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.emptyView
 import com.blankj.utilcode.util.ScreenUtils
+import com.blankj.utilcode.util.ToastUtils
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
 
 /**
- *新增收货地址
+ * 新增收货地址
  */
 class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
 
@@ -39,6 +42,7 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
             background = resources.getDrawable(R.color.main_hit_bg_color)
             //页面标题
             topBar {
@@ -60,12 +64,10 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
                 }
 
                 editText {
-                    isEnabled = false
                     consignee_name = this
                     hint = "请填写收货人姓名"
                     background = null
                     inputType = EditorInfo.TYPE_CLASS_TEXT
-                    setDecimalInputType()
                     hintColorStr = "#CCCCCC"
                     textSizeAuto = 31
                     textColorStr = "#333333"
@@ -88,12 +90,11 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
                 }
 
                 editText {
-                    isEnabled = false
                     consignee_phone = this
                     hint = "请填写收货人联系电话"
                     background = null
                     inputType = EditorInfo.TYPE_CLASS_NUMBER
-                    setDecimalInputType()
+//                    setDecimalInputType()
                     hintColorStr = "#CCCCCC"
                     textSizeAuto = 31
                     textColorStr = "#333333"
@@ -171,24 +172,24 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
 
             linearLayout {
                 background = resources.getDrawable(R.color.white)
-                gravity = Gravity.CENTER_VERTICAL
+
                 textView {
                     text = "详细地址"
                     textSizeAuto = 31
                     textColorInt = R.color.rma_gray_color
                 }.lparams(wrapContent, wrapContent) {
                     marginStart = autoSize(36)
+                    topMargin = autoSize(15)
                 }
 
                 editText {
-                    isEnabled = false
+//                    isEnabled = false
                     detailed_address = this
-                    gravity = Gravity.CENTER
-                    setPadding(autoSize(15),0,0,0)
+                    gravity = Gravity.LEFT
+                    setPadding(autoSize(15),autoSize(30),0,0)
                     hint = "请输入详细地址"
                     background = null
-                    inputType = EditorInfo.TYPE_CLASS_NUMBER
-                    setDecimalInputType()
+                    inputType = EditorInfo.TYPE_CLASS_TEXT
                     hintColorStr = "#CCCCCC"
                     textSizeAuto = 31
                     textColorStr = "#333333"
@@ -208,7 +209,25 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
                 gravity = Gravity.CENTER_VERTICAL
                 textView {
                     onThrottleFirstClick {
+//                        params["countryid"] = 0
+//                        params["provinceid"] = mData.value?.get(0)?.autoid?.toInt()!!
+//                        params["cityid"] = mData.value?.get(1)?.autoid?.toInt()!!
+//                        params["districtid"] = mData.value?.get(2)?.autoid?.toInt()!!
+                         if (check().not()){
+                             return@onThrottleFirstClick
+                         }
 
+                        viewModel.addAddressOrder(
+                            receiverName = consignee_name.text.toString(),
+                            phoneNum = consignee_phone.text.toString(),
+                            address = detailed_address.text.toString(),
+                            provinceID = mData.value?.get(0)?.autoid?.toString()!!,
+                            cityId = mData.value?.get(1)?.autoid?.toString()!!,
+                            districtID = mData.value?.get(2)?.autoid?.toString()!!
+                        ){
+                            ToastUtils.showLong("新增成功")
+                            finish()
+                        }
                     }
                     gravity = Gravity.CENTER
                     backgroundResource = R.mipmap.rma_submit_bg
@@ -227,6 +246,35 @@ class AddAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
     }
 
     /**
+     * 提交新增地址时的数据校验
+     * @return Boolean
+     */
+    fun check() : Boolean{
+        if (consignee_name.text.toString().isNullOrEmpty()){
+            ToastUtils.showLong("请输入收货人姓名")
+            return false
+        }
+
+        if (consignee_phone.text.toString().isNullOrEmpty()){
+            ToastUtils.showLong("请输入收货人联系电话")
+            return false
+        }
+
+        // 通讯地址
+        if (mData.value.isNullOrEmpty()) {
+            ToastUtils.showLong("请选择通讯地址")
+            return false
+        }
+
+        if (detailed_address.text.toString().isNullOrEmpty()){
+            ToastUtils.showLong("请输入详细地址")
+            return false
+        }
+
+        return true
+    }
+
+    /**
      * 地址选择器
      */
     private fun showAddress() {

+ 35 - 8
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressManagementViewHolder.kt

@@ -2,14 +2,15 @@ package cn.muchinfo.rma.view.base.main.addressmanagement
 
 import android.graphics.Typeface
 import android.view.Gravity
+import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
-import cn.muchinfo.rma.view.autoWidget.autoSize
-import cn.muchinfo.rma.view.autoWidget.createRoundRectDrawable
-import cn.muchinfo.rma.view.autoWidget.textColorInt
-import cn.muchinfo.rma.view.autoWidget.textSizeAuto
+import cn.muchinfo.rma.global.data.UserReceiveInfoData
+import cn.muchinfo.rma.lifecycle.bindOptional
+import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.emptyView
+import com.blankj.utilcode.util.ToastUtils
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
 import org.jetbrains.anko.*
 
@@ -20,7 +21,7 @@ import org.jetbrains.anko.*
  * @property itemSize IntArray
  * @constructor
  */
-class MyAddressManagementViewHolder(private val activity : AppCompatActivity,private val viewModel: MyAddressViewModel) : BaseViewHolder<String>(activity){
+class MyAddressManagementViewHolder(private val activity : AppCompatActivity,private val viewModel: MyAddressViewModel) : BaseViewHolder<UserReceiveInfoData>(activity){
 
     override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
 
@@ -29,7 +30,9 @@ class MyAddressManagementViewHolder(private val activity : AppCompatActivity,pri
             linearLayout {
                 gravity = Gravity.CENTER_VERTICAL
                 textView {
-                    text = "周星星"
+                    data.bindOptional(context){
+                        text = it?.receivername
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                     typeface = Typeface.defaultFromStyle(Typeface.BOLD)
@@ -38,7 +41,9 @@ class MyAddressManagementViewHolder(private val activity : AppCompatActivity,pri
                 }
 
                 textView {
-                    text = "1315789234"
+                    data.bindOptional(context){
+                        text = it?.phonenum
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent){
@@ -48,6 +53,18 @@ class MyAddressManagementViewHolder(private val activity : AppCompatActivity,pri
                 emptyView()
 
                 textView {
+                    onThrottleFirstClick {
+                        viewModel.setUserReceiveIsDefault(AutoId = data.value?.autoid?.toLong() ?: 0){
+                            viewModel.queryUserReceiveInfo()
+                        }
+                    }
+                    data.bindOptional(context){
+                        if (it?.isdefault == "1"){
+                            visibility = View.GONE
+                        }else{
+                            visibility = View.VISIBLE
+                        }
+                    }
                     backgroundResource = R.drawable.qhj_transparent_bg
                     gravity = Gravity.CENTER
                     text = "设为默认"
@@ -58,6 +75,14 @@ class MyAddressManagementViewHolder(private val activity : AppCompatActivity,pri
                 }
 
                 textView {
+                    data.bindOptional(context){
+                        if (it?.isdefault == "1"){
+                            visibility = View.VISIBLE
+                        }else{
+                            visibility = View.GONE
+                        }
+                    }
+                    gravity = Gravity.CENTER
                     background = createRoundRectDrawable("#FFE8D3", 5)
                     text = "默认"
                     textSizeAuto = 29
@@ -70,7 +95,9 @@ class MyAddressManagementViewHolder(private val activity : AppCompatActivity,pri
             }
 
             textView {
-                text = "广东省深圳市南山区粤海街道金融基地10楼"
+                data.bindOptional(context){
+                    text = it?.provincename + it?.cityname + it?.districtname + it?.address
+                }
                 textSizeAuto = 31
                 textColorInt = R.color.rma_gray_color
             }.lparams(wrapContent, wrapContent){

+ 24 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressMnangerActivity.kt

@@ -3,6 +3,8 @@ package cn.muchinfo.rma.view.base.main.addressmanagement
 import android.content.Intent
 import android.os.Bundle
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.UserReceiveInfoData
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.main.castsurely.CastSurelyDetailsViewHolder
@@ -10,6 +12,8 @@ import com.blankj.utilcode.util.ActivityUtils
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
 import mtp.polymer.com.autowidget.dialog.SelectData
 import mtp.polymer.com.autowidget.dialog.creatBottomSheetDialog
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.matchParent
 import org.jetbrains.anko.verticalLayout
 
@@ -25,7 +29,7 @@ class MyAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
     /**
      * 定投列表适配器
      */
-    private val addressManagementAdapter: BaseAdapter<String, MyAddressManagementViewHolder> =
+    private val addressManagementAdapter: BaseAdapter<UserReceiveInfoData, MyAddressManagementViewHolder> =
         BaseAdapter { _, _ ->
             MyAddressManagementViewHolder(
                 this,
@@ -33,9 +37,16 @@ class MyAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
             )
         }
 
+    override fun onResume() {
+        super.onResume()
+        viewModel.queryUserReceiveInfo()
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
+            viewModel.queryUserReceiveInfo()
             background = resources.getDrawable(R.color.main_hit_bg_color)
             //页面标题
             topBar {
@@ -61,7 +72,7 @@ class MyAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
                     setEnableRefresh(true)
                     setEnableLoadMore(false)
                     setOnRefreshListener {
-
+                        viewModel.queryUserReceiveInfo()
                     }
                     setEnableScrollContentWhenLoaded(false)
                     setEnableLoadMoreWhenContentNotFull(false)
@@ -76,7 +87,17 @@ class MyAddressManagementActivity : BaseActivity<MyAddressViewModel>(){
                 emptyView(hint = resources.getString(R.string.now_no_data))
             }).lparams(matchParent, matchParent)
 
-            addressManagementAdapter.setNewData(arrayListOf("1","2","3","4"))
+            viewModel.userReceiveInfoDataList.bindOptional(context) {
+                if (it?.isEmpty() == true || it?.size == 0) {
+                    statusLayout.showEmpty()
+                } else {
+                    if (swipeToLayout.getIsRefreshing()) {
+                        swipeToLayout.finishRefresh()
+                    }
+                    statusLayout.showSuccess()
+                    addressManagementAdapter.setNewData(it)
+                }
+            }
         }
     }
 

+ 114 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/MyAddressViewModel.kt

@@ -1,15 +1,129 @@
 package cn.muchinfo.rma.view.base.main.addressmanagement
 
 import androidx.lifecycle.MutableLiveData
+import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.UserReceiveInfoData
+import cn.muchinfo.rma.netManage.base.InteractiveException
+import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.base.BaseViewModel
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import mtp.polymer.com.autowidget.utils.TaskUiModel
 
 /**
  * 我的地址管理viewmodel
  */
 class MyAddressViewModel : BaseViewModel(){
 
+    /**
+     * 加载状态控制
+     */
+    val loadingDialogStatus: MutableLiveData<TaskUiModel> = MutableLiveData()
 
+    /**
+     * 收货地址
+     */
     val userReceiveInfoDataList : MutableLiveData<List<UserReceiveInfoData>> = MutableLiveData()
 
+
+    /**
+     * 查询收货地址
+     */
+    fun queryUserReceiveInfo(){
+        val params = mutableMapOf<String, String>().apply {
+            put("userid", GlobalDataCollection.instance?.loginRsp?.userID.toString())
+        }
+        MyApplication.getInstance()?.addressManager?.queryUserReceiveInfo(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                userReceiveInfoDataList.postValue(respData)
+            }
+        }
+    }
+
+    /**
+     * 新增修改收货地址
+     *  /** 新增修改收货地址请求
+     * optional MessageHead Header = 1; // MessageHead
+    optional uint64 ClientSerialID = 2; // uint64 客户端唯一ID
+    optional uint32 UserID = 3; // uint32 用户ID
+    optional string ReceiverName = 4; // string 提货人姓名
+    optional uint32 CardTypeID = 5; // uint32 证件类型
+    optional string CardNum = 6; // string 证件号码
+    optional string PhoneNum = 7; // string 提货人联系方式
+    optional uint32 CountryID = 8; // uint32 国家
+    optional uint32 ProvinceID = 9; // uint32 省
+    optional uint32 CityID = 10; // uint32 市
+    optional uint32 DistrictID = 11; // uint32 地区
+    optional string Address = 12; // string 提货人详细地址
+    optional string TakeRemark = 13; // string 提货备注
+    optional uint64 ReceiveInfoId = 14; // uint64 修改时填收货地址id
+    */
+     */
+    fun addAddressOrder(
+        receiverName : String,
+        phoneNum : String,
+        address : String,
+        provinceID : String,
+        cityId : String,
+        districtID : String,
+        receiveInfoId : String = "",//修改时填收货地址id
+        isSuccess: (isCompleted: Boolean) -> Unit
+    ){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
+        GlobalScope.launch {
+            MyApplication.getInstance()?.addressManager?.addAddressOrder(
+                receiverName = receiverName,
+                phoneNum = phoneNum,
+                address = address,
+                provinceID = provinceID,
+                cityId = cityId,
+                districtID = districtID,
+                receiveInfoId = receiveInfoId
+            ) { isCompleted, err ->
+                if (isCompleted) {
+                    loadingDialogStatus.postValue(TaskUiModel.success(msg = "请求成功"))
+                    isSuccess(true)
+                } else {
+                    loadingDialogStatus.postValue(
+                        TaskUiModel.failed(
+                            InteractiveException(
+                                errorMessage = err?.message!!
+                            )
+                        )
+                    )
+                }
+            }
+        }
+    }
+
+    /**
+     * 地址设置为默认
+     * @param AutoId Long
+     */
+    fun setUserReceiveIsDefault(
+        AutoId : Long,
+        isSuccess: (isCompleted: Boolean) -> Unit
+    ){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
+        GlobalScope.launch {
+            MyApplication.getInstance()?.addressManager?.setUserReceiveIsDefault(
+                AutoId = AutoId
+            ) { isCompleted, err ->
+                if (isCompleted) {
+                    loadingDialogStatus.postValue(TaskUiModel.success(msg = "请求成功"))
+                    isSuccess(true)
+                } else {
+                    loadingDialogStatus.postValue(
+                        TaskUiModel.failed(
+                            InteractiveException(
+                                errorMessage = err?.message!!
+                            )
+                        )
+                    )
+                }
+            }
+        }
+    }
+
+
 }

+ 49 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/AddCastSurelyActivity.kt

@@ -5,7 +5,11 @@ import android.os.Bundle
 import android.view.Gravity
 import android.view.inputmethod.EditorInfo
 import android.widget.EditText
+import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
+import cn.muchinfo.rma.global.database.DataBase
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.autoWidget.PickerView.builder.OptionsPickerBuilder
 import cn.muchinfo.rma.view.autoWidget.PickerView.listener.OnOptionsSelectListener
@@ -14,6 +18,11 @@ import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.emptyView
 import cn.muchinfo.rma.view.base.home.contract.verticalEmptyView
 import com.blankj.utilcode.util.ToastUtils
+import mtp.polymer.com.autowidget.dialog.SelectData
+import mtp.polymer.com.autowidget.dialog.creatBottomSheetDialog
+import mtp.polymer.com.autowidget.dialog.creatGoodsInfoBottomSheetDialog
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
 
 /**
@@ -30,23 +39,53 @@ class AddCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
     var opt1tx: String? = null
     var opt2tx: String? = null
 
+    //选择的交易类型 金额或者数量
+    val selectPayType : MutableLiveData<SelectData> = MutableLiveData()
+
+    /**
+     * 选择的商品信息
+     */
+    val selectGoodsInfoData : MutableLiveData<GoodsInfo> = MutableLiveData()
+
+
+    fun initData(){
+        viewModel.initCastSureData()
+        selectPayType.postValue(SelectData(id = "1",value = "按克数定投"))
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
-            viewModel.initCastSureData()
+            createLoadingDialog(hintStr = "").bindTaskStatus(context, viewModel.loadingDialogStatus)
             background = resources.getDrawable(R.color.rma_item_bg)
             topBar {
                 commonLeftButton()
                 commonTitle {
-                    text = "定投"
+                    text = "新增定投"
                 }
             }
 
             linearLayout {
+                onThrottleFirstClick {
+                    val selectGoodsInfoList = arrayListOf<GoodsInfo>()
+                    val goodsInfoList = DataBase.getInstance().goodsInfoDao().all
+                    goodsInfoList.forEach {
+                        if (it.marketid == 69201){
+                            selectGoodsInfoList.add(it)
+                        }
+                    }
+                    creatGoodsInfoBottomSheetDialog("请选择的商品",selectGoodsInfoList){
+                        selectGoodsInfoData.postValue(this)
+                        viewModel.queryGoodsEx(this.goodsid.toString())
+                    }
+                }
                 background = resources.getDrawable(R.color.white)
                 gravity = Gravity.CENTER_VERTICAL
                 textView {
-                    text = "黄金"
+                    selectGoodsInfoData.bindOptional(context){
+                        text = it?.goodsname
+                    }
+                    text = "请选择商品"
                     textSizeAuto = 40
                     textColorInt = R.color.qhj_yellow_text_color
                 }.lparams(wrapContent, wrapContent) {
@@ -59,6 +98,13 @@ class AddCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
             linearLayout {
                 background = resources.getDrawable(R.color.white)
                 textView {
+                    onThrottleFirstClick {
+                        val selectDataList = arrayListOf(SelectData(id = "1",value = "按克数定投"),
+                            SelectData(id = "2",value = "按金额定投"))
+                        creatBottomSheetDialog("请选择方式", selectDataList) {
+                            selectPayType.postValue(this)
+                        }
+                    }
                     text = "按金额定投"
                     textSizeAuto = 32
                     textColorInt = R.color.rma_gray_color

+ 18 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyActivity.kt

@@ -4,7 +4,11 @@ import android.content.Intent
 import android.os.Bundle
 import android.view.Gravity
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.RSTriggerLogData
+import cn.muchinfo.rma.global.data.RStrategyData
 import cn.muchinfo.rma.global.data.SpotGoodsPriceData
+import cn.muchinfo.rma.global.data.UserCollectConfigData
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.home.contract.emptyView
@@ -26,7 +30,7 @@ class MyCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
     /**
      * 定投列表适配器
      */
-    private val myCastSurelyAdapter: BaseAdapter<String, MyCastSurelyViewHolder> =
+    private val myCastSurelyAdapter: BaseAdapter<RStrategyData, MyCastSurelyViewHolder> =
         BaseAdapter { _, _ ->
             MyCastSurelyViewHolder(
                 this,
@@ -37,6 +41,7 @@ class MyCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            viewModel.queryRStrategy()
             linearLayout {
                 background = resources.getDrawable(R.color.rma_blue_color)
                 gravity = Gravity.CENTER_VERTICAL
@@ -96,7 +101,7 @@ class MyCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
                     setEnableRefresh(true)
                     setEnableLoadMore(false)
                     setOnRefreshListener {
-
+                        viewModel.queryRStrategy()
                     }
                     setEnableScrollContentWhenLoaded(false)
                     setEnableLoadMoreWhenContentNotFull(false)
@@ -111,7 +116,17 @@ class MyCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
                 emptyView(hint = resources.getString(R.string.now_no_data))
             }).lparams(org.jetbrains.anko.matchParent, org.jetbrains.anko.matchParent)
 
-            myCastSurelyAdapter.setNewData(arrayListOf("1","2","3","4","5"))
+            viewModel.castSurelyDataList.bindOptional(context) {
+                if (it?.isEmpty() == true || it?.size == 0) {
+                    statusLayout.showEmpty()
+                } else {
+                    if (swipeToLayout.getIsRefreshing()) {
+                        swipeToLayout.finishRefresh()
+                    }
+                    statusLayout.showSuccess()
+                    myCastSurelyAdapter.setNewData(it)
+                }
+            }
         }
     }
 

+ 17 - 4
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyHistoryActivity.kt

@@ -2,6 +2,8 @@ package cn.muchinfo.rma.view.base.main.castsurely
 
 import android.os.Bundle
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.RStrategyData
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
@@ -19,7 +21,7 @@ class MyCastSurelyHistoryActivity : BaseActivity<MyCastSurelyViewModel>(){
     /**
      * 定投列表适配器
      */
-    private val myCastSurelyAdapter: BaseAdapter<String, MyCastSurelyViewHolder> =
+    private val myCastSurelyAdapter: BaseAdapter<RStrategyData, MyCastSurelyViewHolder> =
         BaseAdapter { _, _ ->
             MyCastSurelyViewHolder(
                 this,
@@ -30,6 +32,7 @@ class MyCastSurelyHistoryActivity : BaseActivity<MyCastSurelyViewModel>(){
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            viewModel.queryRStrategyHistory()
             background = resources.getDrawable(R.color.main_hit_bg_color)
             topBar {
                 // 返回
@@ -50,7 +53,7 @@ class MyCastSurelyHistoryActivity : BaseActivity<MyCastSurelyViewModel>(){
                     setEnableRefresh(true)
                     setEnableLoadMore(false)
                     setOnRefreshListener {
-
+                        viewModel.queryRStrategyHistory()
                     }
                     setEnableScrollContentWhenLoaded(false)
                     setEnableLoadMoreWhenContentNotFull(false)
@@ -64,8 +67,18 @@ class MyCastSurelyHistoryActivity : BaseActivity<MyCastSurelyViewModel>(){
             }, emptyBlock = {
                 emptyView(hint = resources.getString(R.string.now_no_data))
             }).lparams(org.jetbrains.anko.matchParent, org.jetbrains.anko.matchParent)
-
-            myCastSurelyAdapter.setNewData(arrayListOf("1","2","3","4","5"))
+            viewModel.castSurrelyhistoryDataList.bindOptional(context) {
+                if (it?.isEmpty() == true || it?.size == 0) {
+                    statusLayout.showEmpty()
+                } else {
+                    if (swipeToLayout.getIsRefreshing()) {
+                        swipeToLayout.finishRefresh()
+                    }
+                    statusLayout.showSuccess()
+                    myCastSurelyAdapter.setNewData(it)
+                }
+            }
+//            myCastSurelyAdapter.setNewData(arrayListOf("1","2","3","4","5"))
         }
     }
 

+ 41 - 11
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyViewHolder.kt

@@ -5,10 +5,16 @@ import android.view.Gravity
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.RSTriggerLogData
+import cn.muchinfo.rma.global.data.RStrategyData
+import cn.muchinfo.rma.global.data.UserCollectConfigData
+import cn.muchinfo.rma.global.database.DataBase
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.autoSize
 import cn.muchinfo.rma.view.autoWidget.createRoundRectDrawable
 import cn.muchinfo.rma.view.autoWidget.textColorInt
 import cn.muchinfo.rma.view.autoWidget.textSizeAuto
+import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.emptyView
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
@@ -22,7 +28,7 @@ import org.jetbrains.anko.*
  * @property type 1 : 我的定投 2 : 历史定投
  * @constructor
  */
-class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private val viewModel : MyCastSurelyViewModel,private val type : String) : BaseViewHolder<String>(activity){
+class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private val viewModel : MyCastSurelyViewModel,private val type : String) : BaseViewHolder<RStrategyData>(activity){
     override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
 
     override fun _FrameLayout.createContentView() {
@@ -31,7 +37,9 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                 linearLayout {
                     gravity = Gravity.CENTER_VERTICAL
                     textView {
-                        text = "黄金"
+                        data.bindOptional(context){
+                            text = it?.goodsname
+                        }
                         textSizeAuto = 43
                         textColorInt = R.color.rma_black_33
                     }.lparams(wrapContent, wrapContent){
@@ -61,7 +69,9 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                         }
 
                         textView {
-                            text = "2300.23"
+                            data.bindOptional(context){
+                                text = NumberUtils.roundNum(it?.triggertotalamount,2)
+                            }
                             textColorInt = R.color.rma_black_33
                             textSizeAuto = 36
                             typeface = Typeface.defaultFromStyle(Typeface.BOLD)
@@ -73,7 +83,9 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                     verticalLayout {
                         gravity = Gravity.CENTER_HORIZONTAL
                         textView {
-                            text = "累计定投(克)"
+                            data.bindOptional(context){
+                                text = "累计定投(" + it?.enumdicname + ")"
+                            }
                             textColorInt = R.color.qhj_hint_text_color
                             textSizeAuto = 29
                         }.lparams(wrapContent, wrapContent){
@@ -81,7 +93,10 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                         }
 
                         textView {
-                            text = "19g"
+                            data.bindOptional(context){
+                                val qtydecimalplace = DataBase.getInstance().goodsInfoDao().getGoodsInfo(it?.goodsid?.toInt() ?: 0).qtydecimalplace
+                                text = NumberUtils.roundNum(it?.triggertotalqty?.toDouble()?.times(qtydecimalplace).toString(),qtydecimalplace)
+                            }
                             textColorInt = R.color.rma_black_33
                             textSizeAuto = 36
                             typeface = Typeface.defaultFromStyle(Typeface.BOLD)
@@ -101,7 +116,9 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                         }
 
                         textView {
-                            text = "10期"
+                            data.bindOptional(context){
+                                text = it?.triggersuccesstimes
+                            }
                             textColorInt = R.color.rma_black_33
                             textSizeAuto = 36
                             typeface = Typeface.defaultFromStyle(Typeface.BOLD)
@@ -115,10 +132,17 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                     background = createRoundRectDrawable("#E5EFF5", 3)
                     gravity = Gravity.CENTER_VERTICAL
                     textView {
-                        if (type == "1"){
-                            text = "2021-06-01(星期三)将从余额扣款定投0.1g"
-                        }else{
-                            text = "定投已终止"
+                        data.bindOptional(context){
+                            val qtydecimalplace = DataBase.getInstance().goodsInfoDao().getGoodsInfo(it?.goodsid?.toInt() ?: 0).qtydecimalplace
+                            if (type == "1"){
+                                if (it?.regularlymode == "1"){//按数量
+                                    text = it?.nexttriggerdate + "(" + it?.regularlycyclevalue + ")将从余额扣款定投" + it?.nexttriggerqty?.toDouble()?.times(qtydecimalplace) + it?.enumdicname
+                                }else{//按金额
+                                    text = it?.nexttriggerdate + "(" + it?.regularlycyclevalue + ")将从余额扣款定投" + NumberUtils.roundNum(it?.nexttriggeramount,2)
+                                }
+                            }else{
+                                text = "定投已终止"
+                            }
                         }
                         textColorInt = R.color.rma_zhushi_text_color
                         textSizeAuto = 31
@@ -132,10 +156,16 @@ class MyCastSurelyViewHolder(private val activity : AppCompatActivity,private va
                         if (type == "2"){
                             visibility = View.GONE
                         }
+                        data.bindOptional(context){
+                            if (it?.regularlystrategystatus == "1"){
+                                text = "暂停"
+                            }else if (it?.regularlystrategystatus == "2"){
+                                text = "恢复"
+                            }
+                        }
                         backgroundResource = R.drawable.qhj_transparent_bg
 //                    background = createRoundRectDrawable("#2794FF", 5)
                         gravity = Gravity.CENTER
-                        text = "暂停"
                         textColorInt = R.color.qhj_blue_text_color
                         textSizeAuto = 29
                     }.lparams(autoSize(120), autoSize(48)){

+ 117 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/MyCastSurelyViewModel.kt

@@ -1,13 +1,39 @@
 package cn.muchinfo.rma.view.base.main.castsurely
 
 import androidx.lifecycle.MutableLiveData
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.GoodsExInfoData
+import cn.muchinfo.rma.global.data.RSTriggerLogData
+import cn.muchinfo.rma.global.data.RStrategyData
+import cn.muchinfo.rma.global.data.UserCollectConfigData
+import cn.muchinfo.rma.netManage.base.InteractiveException
+import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.base.BaseViewModel
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import mtp.polymer.com.autowidget.utils.TaskUiModel
 
 /**
  * 定投页面viewmodel
  */
 class MyCastSurelyViewModel : BaseViewModel(){
 
+    /**
+     * 加载状态控制
+     */
+    val loadingDialogStatus: MutableLiveData<TaskUiModel> = MutableLiveData()
+
+    //我的定投数据
+    val castSurelyDataList : MutableLiveData<List<RStrategyData>> = MutableLiveData()
+
+    //我的定投历史数据
+    val castSurrelyhistoryDataList : MutableLiveData<List<RStrategyData>> = MutableLiveData()
+
+    /**
+     * 选择的商品的关联商品表
+     */
+    val goodsexinfo : MutableLiveData<GoodsExInfoData> = MutableLiveData()
+
     val firstSelectData : MutableLiveData<List<JsonBean>> = MutableLiveData()//定投选择的月或者周
 
     val secondSelectData : MutableLiveData<List<List<String>>> = MutableLiveData()//定投选择的月对应天,周对应周几
@@ -45,4 +71,95 @@ class MyCastSurelyViewModel : BaseViewModel(){
         secondSelectData.postValue(arrayListOf(jsonBean1SonString,jsonBean2SonString))
     }
 
+    /**
+     * 查询我的定投
+     */
+    fun queryRStrategy(){
+        val params = mutableMapOf<String, String>().apply {
+            put("userid", GlobalDataCollection.instance?.loginRsp?.userID.toString())
+            put("status","1,2")//策略状态(可多选,逗号隔开) - 1:正常 2:暂停 3:终止
+        }
+        MyApplication.getInstance()?.moneyManager?.queryRStrategy(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                castSurelyDataList.postValue(respData)
+            }
+        }
+    }
+
+
+    /**
+     * 查询我的定投历史记录
+     */
+    fun queryRStrategyHistory(){
+        val params = mutableMapOf<String, String>().apply {
+            put("userid", GlobalDataCollection.instance?.loginRsp?.userID.toString())
+            put("status","3")//策略状态(可多选,逗号隔开) - 1:正常 2:暂停 3:终止
+        }
+        MyApplication.getInstance()?.moneyManager?.queryRStrategy(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                castSurrelyhistoryDataList.postValue(respData)
+            }
+        }
+    }
+
+    /**
+     * 定投策略请求
+     */
+    fun qhjRegularlyStrategyReq(
+        regularlyStrategyID : Long = 0,
+        goodsID : Long,
+        regularlyCycle : Int,
+        regularlyCycleValue : Int,
+        regularlyMode : Int,
+        regularlyModeValue : Double,
+        remark : String = "",
+        operateType : Int,
+        isSuccess: (isCompleted: Boolean) -> Unit
+    ){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
+        GlobalScope.launch {
+            MyApplication.getInstance()?.moneyManager?.requestQhjRegularlyStrategyReq(
+                regularlyStrategyID = regularlyStrategyID,
+                goodsID = goodsID,
+                regularlyCycle = regularlyCycle,
+                regularlyCycleValue = regularlyCycleValue ,
+                regularlyMode = regularlyMode,
+                regularlyModeValue = regularlyModeValue,
+                remark = remark,
+                operateType = operateType
+            ) { isCompleted, err ->
+                if (isCompleted) {
+                    loadingDialogStatus.postValue(TaskUiModel.success(msg = "请求成功"))
+                    isSuccess(true)
+                } else {
+                    loadingDialogStatus.postValue(
+                        TaskUiModel.failed(
+                            InteractiveException(
+                                errorMessage = err?.message!!
+                            )
+                        )
+                    )
+                }
+            }
+        }
+    }
+
+    /**
+     * 查询商品扩展表
+     */
+    fun queryGoodsEx(goodsid : String){
+        val params = mutableMapOf<String, String>().apply {
+            put("goodsid",goodsid)
+        }
+        MyApplication.getInstance()?.moneyManager?.queryGoodsEx(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                if (respData?.size ?: 0 > 0){
+                    goodsexinfo.postValue(respData?.get(0))
+                }
+            }
+        }
+    }
+
+
+
 }

+ 1 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/PlatinumTreasureViewModel.kt

@@ -4,7 +4,6 @@ import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.ColumnsData
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
-import cn.muchinfo.rma.global.database.AppDatabase
 import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.view.MyApplication
@@ -24,7 +23,7 @@ class PlatinumTreasureViewModel : BaseViewModel(){
 
     fun initData(tag: String){
         val list = arrayListOf<GoodsInfo>()
-        val allList = Builder.getDatabase<AppDatabase>().goodsInfoDao.all
+        val allList = DataBase.getInstance().goodsInfoDao().all
         allList.forEach {
             if (it.marketid == 69201){
                 list.add(it)

+ 19 - 4
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumBuyOrSellUI.kt

@@ -4,7 +4,9 @@ import android.view.Gravity
 import android.view.View
 import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.ContractTradeOrderDetailData
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.isBlankString
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.lifecycle.bindOptional
@@ -53,7 +55,7 @@ class PlatinumBuyOrSellUI(
     /**
      * 交易下持仓
      */
-    private val positionAdapter: BaseAdapter<String, PositionViewHolder> =
+    private val positionAdapter: BaseAdapter<ContractTradeOrderDetailData, PositionViewHolder> =
         BaseAdapter { _, _ ->
             PositionViewHolder(
                 activity,
@@ -63,8 +65,9 @@ class PlatinumBuyOrSellUI(
 
     fun initData(goodsId: String, outGoodsCode: String = "",buyOrSell: Int = -1,isShowLoading : Boolean = true){
         selectPayType.postValue(SelectData(id = "1",value = "数量"))
-        viewModel.goodsInfoData.postValue(Builder.getDatabase<AppDatabase>().goodsInfoDao.getGoodsInfo(goodsId.toInt()))//获取商品详情
+        viewModel.goodsInfoData.postValue(DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId.toInt()))//获取商品详情
         viewModel.queryQuoteDay(tag = thisTag,goodsCodes = outGoodsCode,isShowLoading = isShowLoading)//请求盘面
+        viewModel.queryContractTradePosition()
     }
 
     val root = _FrameLayout(activity).apply {
@@ -364,7 +367,7 @@ class PlatinumBuyOrSellUI(
                 }
                 swipeToLoadLayout {
                     swipeToLayout = this
-                    setEnableRefresh(true)
+                    setEnableRefresh(false)
                     setEnableLoadMore(false)
                     setOnRefreshListener {
 
@@ -382,9 +385,21 @@ class PlatinumBuyOrSellUI(
                 emptyView(hint = resources.getString(R.string.now_no_data))
             }).lparams(matchParent, matchParent)
 
-            positionAdapter.setNewData(arrayListOf("1", "2", "3", "4"))
+
         }.lparams(matchParent, matchParent)
 
+        viewModel.buyOrSellTradePositionDataList.bindOptional(context) {
+            if (it?.isEmpty() == true || it?.size == 0) {
+                statusLayout.showEmpty()
+            } else {
+                if (swipeToLayout.getIsRefreshing()) {
+                    swipeToLayout.finishRefresh()
+                }
+                statusLayout.showSuccess()
+                positionAdapter.setNewData(it)
+            }
+        }
+
     }
 
 }

+ 3 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumPositionUI.kt

@@ -6,6 +6,7 @@ import android.view.ViewGroup
 import androidx.viewpager.widget.PagerAdapter
 import androidx.viewpager.widget.ViewPager
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.ContractTradeOrderDetailData
 import cn.muchinfo.rma.view.autoWidget.*
 import com.blankj.utilcode.util.ConvertUtils
 import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -121,7 +122,7 @@ class PositionUI(private val activity: PlatinumTradeActivity,private val viewMod
     /**
      * 持仓汇总
      */
-    private val positionAdapter: BaseAdapter<String, PositionViewHolder> =
+    private val positionAdapter: BaseAdapter<ContractTradeOrderDetailData, PositionViewHolder> =
         BaseAdapter { _, _ ->
             PositionViewHolder(
                 activity,
@@ -210,7 +211,7 @@ class PositionUI(private val activity: PlatinumTradeActivity,private val viewMod
                 emptyView(hint = resources.getString(R.string.now_no_data))
             }).lparams(matchParent, matchParent)
 
-            positionAdapter.setNewData(arrayListOf("1", "2", "3", "4"))
+//            positionAdapter.setNewData(arrayListOf("1", "2", "3", "4"))
         }
     }
 }

+ 2 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeActivity.kt

@@ -9,6 +9,7 @@ import androidx.viewpager.widget.ViewPager
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.database.AppDatabase
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.view.autoWidget.autoSize
 import cn.muchinfo.rma.view.autoWidget.tabSegment
@@ -136,7 +137,7 @@ class PlatinumTradeActivity : BaseActivity<PlatinumTradeViewModel>(){
         //如果推送的goodsid包含当前页面的goodsid,则进行页面刷新
         if (goodsids.contains(goodsId?.toInt())){
             LogUtils.eTag("dasjhdkjagfkask","行情推送" + goodsId)
-            val goodsInfo = Builder.getDatabase<AppDatabase>().goodsInfoDao.getGoodsInfo(goodsId?.toInt() ?: 0)
+            val goodsInfo = DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId?.toInt() ?: 0)
             val quote = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { goodsInfo?.outgoodscode == it.outgoodscode }?.quoteDayData
             if (quote != null){
                 viewModel.quoteDayData.postValue(quote)

+ 25 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeViewModel.kt

@@ -1,11 +1,15 @@
 package cn.muchinfo.rma.view.base.platinumtreasure.trade
 
 import androidx.lifecycle.MutableLiveData
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.ContractTradeOrderDetailData
 import cn.muchinfo.rma.global.data.QuoteDayData
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.view.MyApplication
+import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.BaseViewModel
+import com.blankj.utilcode.util.TimeUtils
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 import mtp.polymer.com.autowidget.utils.TaskUiModel
@@ -31,6 +35,27 @@ class PlatinumTradeViewModel : BaseViewModel(){
 
 
     /**
+     * 买卖页面的持仓汇总单据
+     */
+    val buyOrSellTradePositionDataList : MutableLiveData<List<ContractTradeOrderDetailData>> = MutableLiveData()
+
+    /**
+     * 买卖页面查询持仓汇总单
+     */
+    fun queryContractTradePosition(){
+
+        val params = mutableMapOf<String, String>().apply {
+            put("accountID", GlobalDataCollection.instance?.accountData?.accountid.toString())
+        }
+        MyApplication.getInstance()?.contractGoodsManager?.queryContractTradePosition(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                buyOrSellTradePositionDataList.postValue(respData)
+            }
+        }
+    }
+
+
+    /**
      * 请求盘面信息
      * @param first Int
      * @param last Int

+ 15 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PositionViewHolder.kt

@@ -6,6 +6,9 @@ import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.ContractTradeOrderDetailData
+import cn.muchinfo.rma.global.database.DataBase
+import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.autoSize
 import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.autoWidget.textColorInt
@@ -20,7 +23,7 @@ import mtp.polymer.com.autowidget.adapter.BaseViewHolder
 import mtp.polymer.com.autowidget.dialog.createWarningDialog
 import org.jetbrains.anko.*
 
-class PositionViewHolder(private val activity : AppCompatActivity,private val viewModel: PlatinumTradeViewModel) : BaseViewHolder<String>(activity){
+class PositionViewHolder(private val activity : AppCompatActivity,private val viewModel: PlatinumTradeViewModel) : BaseViewHolder<ContractTradeOrderDetailData>(activity){
 
     override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
 
@@ -29,8 +32,11 @@ class PositionViewHolder(private val activity : AppCompatActivity,private val vi
             linearLayout {
                 verticalLayout {
                     gravity = Gravity.CENTER
+                    //市值
                     textView {
-                        text = "黄金10g"
+                        data.bindOptional(context){
+                            text = it?.goodsname
+                        }
                         textSizeAuto = 36
                         textColorInt = R.color.rma_black_33
                     }.lparams(wrapContent, wrapContent){
@@ -38,6 +44,13 @@ class PositionViewHolder(private val activity : AppCompatActivity,private val vi
                     }
 
                     textView {
+                        data.bindOptional(context){
+                            val goodsInfoData = DataBase.getInstance().goodsInfoDao().getGoodsInfo(it?.goodsid?.toInt() ?: 0)
+                            val quoteDayData = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find {data ->
+                                data.outgoodscode == goodsInfoData.outgoodscode
+                            }
+
+                        }
                         text = "16081.25"
                         textSizeAuto = 36
                         textColorInt = R.color.rma_black_33

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/procurement/ProcurementViewModel.kt

@@ -199,7 +199,7 @@ class ProcurementViewModel : BaseViewModel() {
         val newList = arrayListOf<ContractData>()
         respData.forEach {
             val newRightData = arrayListOf<String>()
-            newRightData.add(it.deliverygoodsname + "\n" + it.spotgoodsdesc)
+            newRightData.add(it.deliverygoodsname + "\n" + it.wrstandardname)
             newRightData.add(it.goodsname + "\n" + it.pricemove)
             newRightData.add(it.pricedqty + it.enumdicname + "\n" + it.unsureqty+ it.enumdicname)
             newRightData.add(it.payamount + "\n" + it.unpayamount)