Bladeren bron

风险管理6月22日提交代码-liu.bolan-千海金

Liu.bolan 4 jaren geleden
bovenliggende
commit
9eaa8eb859
24 gewijzigde bestanden met toevoegingen van 567 en 124 verwijderingen
  1. 45 1
      RMA/app/src/main/java/cn/muchinfo/rma/business/bank/BankManager.kt
  2. 71 2
      RMA/app/src/main/java/cn/muchinfo/rma/business/bank/adapter/BankAdapter.kt
  3. 4 14
      RMA/app/src/main/java/cn/muchinfo/rma/business/contractgoods/ContractGoodsManager.kt
  4. 5 4
      RMA/app/src/main/java/cn/muchinfo/rma/business/future/FutureManager.kt
  5. 36 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/BaseGlobalData.java
  6. 47 16
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/AccountData.kt
  7. 5 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/CusBankSignBankData.kt
  8. 9 0
      RMA/app/src/main/java/cn/muchinfo/rma/protobuf/funcode/FunCode.java
  9. 70 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/MainViewModel.kt
  10. 2 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/app/Constant.kt
  11. 50 38
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/login/LoginActivity.kt
  12. 12 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/addressmanagement/AddressSelectActivity.kt
  13. 1 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/castsurely/AddCastSurelyActivity.kt
  14. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/pickup/PickUpGoodsActivity.kt
  15. 20 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/withdrawmanagement/AddWithDrawActivity.kt
  16. 43 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/withdrawmanagement/WithDrawManagementActivity.kt
  17. 46 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/withdrawmanagement/WithDrawManagementViewModel.kt
  18. 23 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumBuyOrSellUI.kt
  19. 34 7
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumMoneyUI.kt
  20. 5 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeActivity.kt
  21. 5 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumTradeViewModel.kt
  22. 12 22
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PositionViewHolder.kt
  23. 1 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/qhjhome/QhjHomeFragment.kt
  24. 20 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/qhjhome/QhjHomeViewModel.kt

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

@@ -24,6 +24,50 @@ import java.lang.Exception
 class BankManager {
 
     /**
+     * 解约报文装箱
+     * @param AccountCode String 账户
+     * @param CusBankID String 托管银行编号
+     * @param Currency String 币种
+     * @param BankChildAcc String银行子账号
+     * @param BankChildAccName String 银行子账号名
+     * @param TradeDate String 交易所业务日期
+     */
+    fun T2bBankCancelSignReq(
+        AccountCode : String,
+        CusBankID : String,
+        Currency : String,
+        BankChildAcc : String,
+        BankChildAccName : String,
+        TradeDate : String,
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ){
+        val tradeSocketManager = MyApplication.getInstance()?.tradeSocketManager.guard {
+            callback(false, Error("交易链路未初始化"))
+            return
+        }
+
+        val reqPacket = BankAdapter.getT2bBankCancelSignReqInfo(
+            AccountCode, CusBankID, Currency, BankChildAcc, BankChildAccName, TradeDate
+        )
+
+        tradeSocketManager.send(
+            reqPacket,
+            FunCode.FID_t2bBankCancelSignRsp,
+            object : Callback<Packet50> {
+                override fun onSuccess(rsp: Packet50?) {
+                    val rst = BankAdapter.analysisT2bBankCancelSignRsq(rsp!!)
+                    callback(rst.first, rst.second)
+                }
+
+                override fun onFail(err: Error?) {
+                    // 发送数据失败
+                    callback(false, err)
+                }
+            }
+        )
+    }
+
+    /**
      * 签约解约请求
      * @param req SignReq
      * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
@@ -46,7 +90,7 @@ class BankManager {
             FunCode.T2BBANKSIGNRSP,
             object : Callback<Packet50> {
                 override fun onSuccess(rsp: Packet50?) {
-                    val rst = MoneyAdapter.analysisBalancePaymentRsq(rsp!!)
+                    val rst = BankAdapter.analysisBalancePaymentRsq(rsp!!)
                     callback(rst.first, rst.second)
                 }
 

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

@@ -8,6 +8,7 @@ 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.TkernelMI1
+import com.blankj.utilcode.util.TimeUtils
 import java.io.ByteArrayOutputStream
 import java.lang.Exception
 
@@ -16,7 +17,75 @@ object BankAdapter {
 
 
     /**
-     * 签约解约的报文装箱
+     * 解约报文装箱
+     * @param AccountCode String 账户
+     * @param CusBankID String 托管银行编号
+     * @param Currency String 币种
+     * @param BankChildAcc String银行子账号
+     * @param BankChildAccName String 银行子账号名
+     * @param TradeDate String 交易所业务日期
+     */
+    fun getT2bBankCancelSignReqInfo(
+        AccountCode : String,
+        CusBankID : String,
+        Currency : String,
+        BankChildAcc : String,
+        BankChildAccName : String,
+        TradeDate : String
+    ) : Packet50{
+        val builder = BankMI1.t2bBankCancelSignReq.newBuilder()
+        val loginInfo = GlobalDataCollection.instance?.loginRsp!!
+
+        // FIXME: - 250000000005
+        builder.setHeader(
+            MessageHeadModel.getHead(
+                FunCode.FID_t2bBankCancelSignReq,
+                loginInfo.userID,
+                0,
+                0,
+                18
+            )
+        )
+
+        builder.accountCode = AccountCode
+        builder.extOperatorID = TimeUtils.getNowMills()
+        builder.cusBankID = CusBankID
+        builder.currency = Currency
+        builder.bankChildAcc = BankChildAcc
+        builder.bankChildAccName = BankChildAccName
+        builder.tradeDate = TradeDate
+        val arrayOutputStream = ByteArrayOutputStream();
+        builder.build().writeTo(arrayOutputStream)
+        return Packet50(FunCode.FID_t2bBankCancelSignReq, arrayOutputStream.toByteArray())
+    }
+
+    /**
+     * 签约解约的请求报文解析
+     * @param packet50 Packet50
+     * @return Triple<Boolean, Error?, ErmcpMI1.SpotContractOperateRsp?>
+     */
+    fun analysisT2bBankCancelSignRsq(packet50: Packet50): Triple<Boolean, Error?, BankMI1.t2bBankCancelSignRsp?> {
+        return try {
+            val resultRsp = BankMI1.t2bBankCancelSignRsp.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)
+        }
+    }
+
+
+    /**
+     * 签约的报文装箱
      * @param req SignReq
      * @return Packet50
      */
@@ -38,7 +107,7 @@ object BankAdapter {
 
         builder.extOperatorID = req.extOperatorID //***
 //        builder.exchId = req.exchId
-//        builder.tradeDate = req.tradeDate
+        builder.tradeDate = req.tradeDate
 //        builder.exchTicket = req.exchTicket
         builder.accountCode = req.accountCode //***
 

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

@@ -18,6 +18,7 @@ import cn.muchinfo.rma.protobuf.protoclasses.MSIM
 import cn.muchinfo.rma.protobuf.protoclasses.TkernelMI1
 import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.autoWidget.guard
+import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.app.BaseResult
 import cn.muchinfo.rma.view.base.app.Constant
 import com.blankj.utilcode.util.SPUtils
@@ -121,8 +122,6 @@ class ContractGoodsManager {
             type = "1",
             callback = object : ResponseCallback<BaseResult<List<PayOrderData>>>() {
                 override fun onResponse(response: BaseResult<List<PayOrderData>>?, id: Int) {
-                    GlobalDataCollection.instance?.futureHisEntrustData =
-                        response?.data as ArrayList<FutureEntrustData>?
                     responseBack(true, response?.data, null)
                 }
 
@@ -150,8 +149,7 @@ class ContractGoodsManager {
             type = "1",
             callback = object : ResponseCallback<BaseResult<List<QhjContractDetailsData>>>() {
                 override fun onResponse(response: BaseResult<List<QhjContractDetailsData>>?, id: Int) {
-                    GlobalDataCollection.instance?.futureHisEntrustData =
-                        response?.data as ArrayList<FutureEntrustData>?
+                    GlobalDataCollection.instance?.qhjContractDetailsDataArrayList = response?.data?.toArrayList()
                     responseBack(true, response?.data, null)
                 }
 
@@ -179,8 +177,7 @@ class ContractGoodsManager {
             type = "1",
             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)
                 }
 
@@ -209,8 +206,6 @@ class ContractGoodsManager {
             type = "1",
             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)
                 }
 
@@ -239,8 +234,6 @@ class ContractGoodsManager {
             type = "1",
             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)
                 }
 
@@ -269,8 +262,6 @@ class ContractGoodsManager {
             type = "1",
             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)
                 }
 
@@ -300,8 +291,7 @@ class ContractGoodsManager {
             type = "1",
             callback = object : ResponseCallback<BaseResult<List<ContractTradePositionData>>>() {
                 override fun onResponse(response: BaseResult<List<ContractTradePositionData>>?, id: Int) {
-                    GlobalDataCollection.instance?.futureHisEntrustData =
-                        response?.data as ArrayList<FutureEntrustData>?
+                    GlobalDataCollection.instance?.contractTradePositionDataArrayList = response?.data?.toArrayList()
                     responseBack(true, response?.data, null)
                 }
 

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

@@ -14,6 +14,7 @@ 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.global.toShowTime
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
 import cn.muchinfo.rma.view.autoWidget.toArrayList
@@ -47,10 +48,10 @@ class FutureManager {
         // 查询最大goodsId
         var lastUpdateTime = "0"
         var params = mutableMapOf<String, String>()
-//        if (SPUtils.getInstance().getString(Constant.GOODS_UPDATE_TIME).isNotEmpty()){
-//            lastUpdateTime = SPUtils.getInstance().getString(Constant.GOODS_UPDATE_TIME)
-//        }
-//        params["lastUpdateTime"] = lastUpdateTime
+        if (SPUtils.getInstance().getString(Constant.GOODS_UPDATE_TIME).isNotEmpty()){
+            lastUpdateTime = SPUtils.getInstance().getString(Constant.GOODS_UPDATE_TIME)
+        }
+        params["lastUpdateTime"] = lastUpdateTime.toShowTime()
         // 对接接口
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance()

+ 36 - 0
RMA/app/src/main/java/cn/muchinfo/rma/global/BaseGlobalData.java

@@ -6,10 +6,12 @@ import java.util.List;
 
 import cn.muchinfo.rma.global.data.AccountData;
 import cn.muchinfo.rma.global.data.ClientMenuData;
+import cn.muchinfo.rma.global.data.ContractTradePositionData;
 import cn.muchinfo.rma.global.data.ErmcpRoleFuncMenuData;
 import cn.muchinfo.rma.global.data.FutureDetailsData;
 import cn.muchinfo.rma.global.data.GoodsExInfoData;
 import cn.muchinfo.rma.global.data.GoodsInfoAndQuotes;
+import cn.muchinfo.rma.global.data.QhjContractDetailsData;
 import cn.muchinfo.rma.global.data.RStrategyData;
 import cn.muchinfo.rma.global.data.UserAccountData;
 import cn.muchinfo.rma.global.data.account.LoginQueryData;
@@ -108,6 +110,40 @@ public class BaseGlobalData {
      */
     private ArrayList<RStrategyData> rStrategyDataArrayList;
 
+    /**
+     * 合约市场持仓汇总单据
+     * @return
+     */
+    private ArrayList<ContractTradePositionData> contractTradePositionDataArrayList;
+
+    /**
+     * 合约市场融资明细列表
+     * @return
+     */
+    private ArrayList<QhjContractDetailsData> qhjContractDetailsDataArrayList;
+
+    public ArrayList<QhjContractDetailsData> getQhjContractDetailsDataArrayList() {
+        if (qhjContractDetailsDataArrayList == null){
+            qhjContractDetailsDataArrayList = new ArrayList<>();
+        }
+        return qhjContractDetailsDataArrayList;
+    }
+
+    public void setQhjContractDetailsDataArrayList(ArrayList<QhjContractDetailsData> qhjContractDetailsDataArrayList) {
+        this.qhjContractDetailsDataArrayList = qhjContractDetailsDataArrayList;
+    }
+
+    public ArrayList<ContractTradePositionData> getContractTradePositionDataArrayList() {
+        if (contractTradePositionDataArrayList == null){
+            contractTradePositionDataArrayList = new ArrayList<>();
+        }
+        return contractTradePositionDataArrayList;
+    }
+
+    public void setContractTradePositionDataArrayList(ArrayList<ContractTradePositionData> contractTradePositionDataArrayList) {
+        this.contractTradePositionDataArrayList = contractTradePositionDataArrayList;
+    }
+
     public ArrayList<RStrategyData> getrStrategyDataArrayList() {
         if (rStrategyDataArrayList == null){
             rStrategyDataArrayList = new ArrayList<>();

+ 47 - 16
RMA/app/src/main/java/cn/muchinfo/rma/global/data/AccountData.kt

@@ -1,6 +1,9 @@
 package cn.muchinfo.rma.global.data
 
 import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.database.DataBase
+import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
+import cn.muchinfo.rma.view.base.app.Constant
 
 /**
  * 资金账户信息
@@ -114,7 +117,10 @@ open class AccountData(
     var keep_watch_profit_and_loss: Double = 0.0, //持仓盯市盈亏
     var canUserAmount: Double = 0.0,//可用资金
     var rightsAndInterests: Double = 0.0,//权益
-    var orderValue: Double = 0.0//建仓市值
+    var orderValue: Double = 0.0,//建仓市值
+
+    var raisedAmount : Double = 0.0,//合约市场融资额
+    var valueOfposition : Double = 0.0//合约市场总市值
 ) {
 
     /**
@@ -123,23 +129,48 @@ open class AccountData(
      * 逐笔浮盈【实时行情更新】(MTP:开仓盈亏、平仓盈亏) 买方向 = (最新价 - 开仓均价) * 买期末头寸 * 合约单位;卖方向 = (开仓均价 - 最新价) * 卖期末头寸 * 合约单位
      */
     fun setNormalData() {
-        val futureHoldDatalist = GlobalDataCollection.instance?.futureHoldData
-
+        if (Constant.IS_QHJ){
+            /** 计算总市值 ***/
+            val contractTradePositionDataArrayList = GlobalDataCollection.instance?.contractTradePositionDataArrayList
+            contractTradePositionDataArrayList?.forEach {
+                val goodsInfoData = DataBase.getInstance().goodsInfoDao()
+                    .getGoodsInfo(it?.goodsid?.toInt() ?: 0)
+                val quoteDayData =
+                    GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { data ->
+                        data.outgoodscode == goodsInfoData.goodscode
+                    }?.quoteDayData
+                valueOfposition += quoteDayData?.ask?.times(
+                    it?.curpositionqty?.toDouble()?.div(
+                        Math.pow(
+                            10.0,
+                            goodsInfoData.qtydecimalplace.toDouble()
+                        )
+                    ) ?: 0.0
+                ) ?: 0.0
+                /** 计算融资额 **/
+                val qhjContractDetailsDataArrayList = GlobalDataCollection.instance?.qhjContractDetailsDataArrayList
+                qhjContractDetailsDataArrayList?.forEach {
+                    raisedAmount += it?.remainamount?.toDouble() ?: 0.0
+                }
+            }
+        }else{
+            val futureHoldDatalist = GlobalDataCollection.instance?.futureHoldData
+            futureHoldDatalist?.forEach { data ->
 
-        futureHoldDatalist?.forEach { data ->
-
-            data.calculate()
-            /** 计算持仓浮动盈亏汇总 **/
-            keep_watch_profit_and_loss = (keep_watch_profit_and_loss + data.positionpl)
-            /** 计算平仓浮动盈亏汇总 **/
-            close_watch_profit_and_loss = (close_watch_profit_and_loss + data.openpl)
-            /** 计算建仓市值 */
-            orderValue += data.opencost
+                data.calculate()
+                /** 计算持仓浮动盈亏汇总 **/
+                keep_watch_profit_and_loss = (keep_watch_profit_and_loss + data.positionpl)
+                /** 计算平仓浮动盈亏汇总 **/
+                close_watch_profit_and_loss = (close_watch_profit_and_loss + data.openpl)
+                /** 计算建仓市值 */
+                orderValue += data.opencost
+            }
+            /** 计算可用金额 **/
+            canUserAmount = currentbalance.plus(keep_watch_profit_and_loss).minus(usedmargin).minus(freezecharge).minus(otherfreezemargin).minus(outamountfreeze)
+            /** 权益 **/
+            rightsAndInterests = currentbalance.plus(keep_watch_profit_and_loss)
         }
-        /** 计算可用金额 **/
-        canUserAmount = currentbalance.plus(keep_watch_profit_and_loss).minus(usedmargin).minus(freezecharge).minus(otherfreezemargin).minus(outamountfreeze)
-        /** 权益 **/
-        rightsAndInterests = currentbalance.plus(keep_watch_profit_and_loss)
+
     }
 
     /**

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

@@ -28,6 +28,8 @@ data class CusBankSignBankData(
     val exchpaybankaccno : String? = "",//交易所支出结算账户
     val isneedcheck : String? = "",//是否需要对账 - 0:需要 1:不需要 [不需要界面配置]
     val isneedclear : String? = "",//是否需要清算 - 0:不需要 1:需要
+    val tradedate : String? = "",//交易日
+    val updatetime : String? = "",//当前签到/签退更新时间
     val riskinfo : String? = ""//签约风险提示书
 ) : Parcelable{
     constructor(parcel: Parcel) : this(
@@ -55,6 +57,7 @@ data class CusBankSignBankData(
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
+        parcel.readString(),
         parcel.readString()
     ) {
     }
@@ -84,6 +87,7 @@ data class CusBankSignBankData(
         parcel.writeString(exchpaybankaccno)
         parcel.writeString(isneedcheck)
         parcel.writeString(isneedclear)
+        parcel.writeString(tradedate)
         parcel.writeString(riskinfo)
     }
 
@@ -101,6 +105,7 @@ data class CusBankSignBankData(
         }
     }
 
+
 }
 
 data class QhjBankInfo(

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

@@ -138,6 +138,15 @@ public class FunCode {
      */
     public static final int T2BBANKSIGNRSP = 589826;
 
+    /**
+     * 解约请求
+     */
+    public static final int FID_t2bBankCancelSignReq = 589827;
+    /**
+     * 解约应答
+     */
+    public static final int FID_t2bBankCancelSignRsp = 589828;
+
 
     /**
      * MAKE_FID(0, 18, 8) 合同操作请求(1179656)

+ 70 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/MainViewModel.kt

@@ -59,7 +59,11 @@ class MainViewModel : BaseViewModel() {
         }
 
         queryUserFavoriteGoodses()
-        queryGoodsEx()
+        if (Constant.IS_QHJ){
+            queryGoodsEx()//查询商品关联列表
+            queryContract()//查询合约市场融资明细
+        }
+
 //
 //        //如果获取资金账户信息出错,则中断请求
 //        if (!canContinue) {
@@ -139,7 +143,11 @@ class MainViewModel : BaseViewModel() {
         MyApplication.getInstance()?.initializeManager?.getUserAccount(params = params) { isSuccess, respData, error ->
             isInitiaDataSuccess.postValue(isSuccess)
             if (isSuccess) {
-                queryErmcpTradePosition()//第三步请求持仓头寸
+                if (Constant.IS_QHJ){
+                    queryContractTradePosition()
+                }else{
+                    queryErmcpTradePosition()//第三步请求持仓头寸
+                }
                 GlobalDataCollection.instance?.userAccountData = respData
             } else {
                 loadingDialogStatus.postValue(TaskUiModel.idel())
@@ -147,8 +155,67 @@ class MainViewModel : BaseViewModel() {
         }
     }
 
+
+    /**
+     * 查询持仓汇总(千海金)
+     */
+    fun queryContractTradePosition(){
+        val params = mutableMapOf<String, String>().apply {
+            put("accountID", GlobalDataCollection.instance?.accountId.toString())
+        }
+        if (GlobalDataCollection.instance?.accountId.toString() == "0"){
+            isInitiaDataSuccess.postValue(true)
+            loadingDialogStatus.postValue(TaskUiModel.success(msg = "数据初始化成功"))
+            return
+        }
+
+        MyApplication.getInstance()?.contractGoodsManager?.queryContractTradePosition(params = params) { isSuccess, respData, error ->
+            isInitiaDataSuccess.postValue(isSuccess)
+            if (isSuccess) {
+                loadingDialogStatus.postValue(TaskUiModel.success(msg = "数据初始化成功"))
+
+                // 连接行情链路,并订阅持仓商品行情
+                val ip = SPUtils.getInstance().getString(Constant.quoteHost)
+                val port = SPUtils.getInstance().getString(Constant.quotePort)
+                GlobalScope.launch {
+                    MyApplication.getInstance()?.quoteSocketManager?.conn(ip, port, object :
+                        Callback<Packet40> {
+                        override fun onSuccess(rsp: Packet40?) {
+                            val contractTradePositionDataArrayList = GlobalDataCollection.instance?.contractTradePositionDataArrayList
+
+                            MyApplication.getInstance()?.quoteManager?.addSubscriptQuote(
+                                "11111",
+                                contractTradePositionDataArrayList!!.map { it.goodscode ?: "" }.toSet()
+                            ) { isCompleted, err ->
+
+                            }
+                        }
+
+                        override fun onFail(err: Error?) {
+                            // 连接行情链路失败
+                            print("")
+                        }
+                    })
+                }
+            } else {
+                loadingDialogStatus.postValue(TaskUiModel.failed(InteractiveException(errorMessage = "数据初始化失败")))
+            }
+        }
+    }
+
+    /**
+     * 查询融资明细列表
+     */
+    fun queryContract(){
+        val params = mutableMapOf<String,String>().apply {
+            put("userid",GlobalDataCollection.instance?.loginRsp?.userID.toString())
+        }
+        MyApplication.getInstance()?.contractGoodsManager?.queryContract(params = params){isSuccess, respData, error ->
+        }
+    }
+
     /**
-     * 查询持仓头寸
+     * 查询持仓头寸(企业风管)
      */
     fun queryErmcpTradePosition() {
         val params = mutableMapOf<String, String>().apply {

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

@@ -10,7 +10,7 @@ object Constant {
 //    const val baseurl = "http://192.168.30.125:8080/cfg?key=test_125"
 //    const val baseurl = "http://192.168.31.114:8080/cfg?key=test_114" // shenzhen01  123123
 //    const val baseurl = "http://192.168.31.220:8080/cfg?key=test_220"//李倩
-        const val baseurl = "http://192.168.30.125:8080/cfg?key=test_125"//李倩千海金
+//        const val baseurl = "http://192.168.30.125:8080/cfg?key=test_125"//李倩千海金
 //      const val baseurl = "http://192.168.30.211:8080/cfg?key=test_211"// 瑶姐
 //          const val baseurl = "http://192.168.31.107:8080/cfg?key=test_107"// 瑶姐 千海金
 //    const val baseurl = "http://192.168.31.175:8080/cfg?key=test_175" // 8888  123123
@@ -18,7 +18,7 @@ object Constant {
 //    const val baseurl = "http://192.168.31.174:8080/cfg?key=test_174"// 邓工
 
 //     const val baseurl = "http://192.168.31.176:8080/cfg?key=test_176" // 9999  123123  黄老板千海金
-//    const val baseurl = "http://192.168.31.171:8080/cfg?key=test_171" //
+    const val baseurl = "http://192.168.31.171:8080/cfg?key=test_171" //
 //    const val baseurl = "http://192.168.21.71:8280/cfg?key=mtp_20"
 
     /**

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

@@ -469,47 +469,59 @@ class LoginActivity : BaseActivity<LoginViewModel>(), UserPopupWindow.OnClearAcc
                                 )
                             return@getErmcpRoleFuncMenuLists
                         } else {
-                            // 商品信息要求每过24小时请求一次
-                            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())
-                                        goHomePage()
-                                    } else {
-                                        viewModel.loadingDialogStatus.value =
-                                            TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
-                                    }
-                                }
-                            } 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()
-                                            )
-                                            goHomePage()
-                                        } else {
-                                            viewModel.loadingDialogStatus.value =
-                                                TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
-                                        }
-                                    }
-                                } else {
-                                    //不请求商品信息时要把本地数据库的商品信息赋值给数据中心
-                                    MyApplication.getInstance()?.futureManager?.putGoodsInfoAndQuotesList()
+                            MyApplication.getInstance()?.futureManager?.queryGoodsList { isCompleted, err ->
+                                if (isCompleted) {
+                                    viewModel.loadingDialogStatus.value =
+                                        TaskUiModel.success(msg = "登录成功")
+                                    SPUtils.getInstance()
+                                        .put(Constant.QUERY_GOODS_TIME, TimeUtils.getNowMills())
                                     goHomePage()
+                                } else {
+                                    viewModel.loadingDialogStatus.value =
+                                        TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
                                 }
                             }
+//                            // 商品信息要求每过24小时请求一次
+//                            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())
+//                                        goHomePage()
+//                                    } else {
+//                                        viewModel.loadingDialogStatus.value =
+//                                            TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
+//                                    }
+//                                }
+//                            } 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()
+//                                            )
+//                                            goHomePage()
+//                                        } else {
+//                                            viewModel.loadingDialogStatus.value =
+//                                                TaskUiModel.failed(InteractiveException(errorMessage = "商品请求失败"))
+//                                        }
+//                                    }
+//                                } else {
+//                                    //不请求商品信息时要把本地数据库的商品信息赋值给数据中心
+//                                    MyApplication.getInstance()?.futureManager?.putGoodsInfoAndQuotesList()
+//                                    goHomePage()
+//                                }
+//                            }
                         }
                     }
                 }

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

@@ -8,6 +8,7 @@ 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.pickup.PickUpGoodViewHolder
+import com.blankj.utilcode.util.ActivityUtils
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
 import org.jetbrains.anko.matchParent
 import org.jetbrains.anko.verticalLayout
@@ -35,6 +36,11 @@ class AddressSelectActivity : BaseActivity<MyAddressViewModel>(){
             )
         }
 
+    override fun onResume() {
+        super.onResume()
+        viewModel.queryUserReceiveInfo()
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
@@ -45,6 +51,12 @@ class AddressSelectActivity : BaseActivity<MyAddressViewModel>(){
                 commonTitle {
                     text = "收货信息"
                 }
+                // 新增收货地址
+                commonMenuButton(R.mipmap.qhj_address_manegement) {
+                    val intent = Intent()
+                    intent.setClass(context,AddAddressManagementActivity::class.java)
+                    ActivityUtils.startActivity(intent)
+                }
             }
 
             statusLayout(contentBlock = {

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

@@ -105,6 +105,7 @@ class AddCastSurelyActivity : BaseActivity<MyCastSurelyViewModel>() {
             selectPayType.postValue(SelectData(id = data.regularlymode ?: "1", value = if (data.regularlymode == "1"){"按重量定投"}else{"按金额定投"}))
             selectTime.postValue(SelectData(id = data.regularlycycle ?: "1",value = data.regularlycyclevalue ?: "1"))
         }else if (type == "3"){
+            selectPayType.postValue(SelectData(id = "1", value = "按重量定投"))
             viewModel.queryMyRStrategy(goodsid = goodsId ?: "0")
         }
         viewModel.queryGoodsEx(goodsId ?: "")

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

@@ -104,7 +104,7 @@ class PickUpGoodsActivity : BaseActivity<PickUpGoodsViewModel>(){
 
                     textView {
                         val goodsInfo = DataBase.getInstance().goodsInfoDao().getGoodsInfo(data.goodsid?.toInt() ?: 0)
-                        text = NumberUtils.roundNum(data.enableqty?.toDouble()?.div(Math.pow(10.0,goodsInfo.qtydecimalplace.toDouble())).toString(),0) + "g"
+                        text = NumberUtils.doubleDistortion(data.enableqty?.toDouble()?.div(Math.pow(10.0,goodsInfo.qtydecimalplace.toDouble()))?.times(goodsInfo.agreeunit).toString()) + "g"
                         textSizeAuto = 41
                         textColorInt = R.color.rma_black_33
                     }.lparams(wrapContent, wrapContent){

+ 20 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/withdrawmanagement/AddWithDrawActivity.kt

@@ -8,6 +8,7 @@ import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.MTPEnums
+import cn.muchinfo.rma.global.data.BankAccountSignData
 import cn.muchinfo.rma.global.data.BankInfoData
 import cn.muchinfo.rma.global.data.transit.SignReq
 import cn.muchinfo.rma.lifecycle.bindOptional
@@ -33,6 +34,9 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
      */
     private val type by lazy { intent.getStringExtra("type") }
 
+    //传来的账户设置信息 修改时用到
+    val data by lazy { intent.getParcelableExtra<BankAccountSignData>("data") as BankAccountSignData }
+
     /**
      * 选择的开户银行
      */
@@ -93,7 +97,11 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
                         text = it?.bankname
                         textColorInt = R.color.rma_black_33
                     }
-                    text = "请选择开户银行"
+                    if (type == "2"){
+                        text = data.bankname
+                    }else{
+                        text = "请选择开户银行"
+                    }
                     textSizeAuto = 31
                     textColorInt = R.color.rma_hint_text_color_ccc
                 }.lparams(wrapContent, wrapContent) {
@@ -125,6 +133,9 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
                 editText {
 //                    isEnabled = false
                     bank_card_number = this
+                    if (type == "2"){
+                        setText(data.bankaccountno)
+                    }
                     hint = "请填写银行卡号"
                     background = null
                     inputType = EditorInfo.TYPE_CLASS_NUMBER
@@ -154,6 +165,9 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
                 editText {
 //                    isEnabled = false
                     bank_card_account_name = this
+                    if (type == "2"){
+                        setText(data.bankaccountname)
+                    }
                     hint = "请填写开户姓名"
                     background = null
                     inputType = EditorInfo.TYPE_CLASS_TEXT
@@ -182,6 +196,9 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
                 editText {
 //                    isEnabled = false
                     branch_name = this
+                    if (type == "2"){
+                        setText(data.branchbankname)
+                    }
                     hint = "请填写开户支行名称"
                     background = null
                     inputType = EditorInfo.TYPE_CLASS_TEXT
@@ -263,13 +280,14 @@ class AddWithDrawActivity : BaseActivity<WithDrawManagementViewModel>(){
         req.bankAccountNo = bank_card_number.text.toString()
         req.bankAccountName = bank_card_account_name.text.toString()
         req.accountCode = GlobalDataCollection.instance?.accountData?.accountid?.toString()
-        req.accountName = GlobalDataCollection.instance?.accountData?.accountname
+        req.accountName =  bank_card_account_name.text.toString()
         req.openBankName = branch_name.text.toString()
         req.extOperatorID = TimeUtils.getNowMills()
         req.certType = GlobalDataCollection.instance?.loginQueryData?.userInfo?.cardtypeid?.toString()
         req.certID = GlobalDataCollection.instance?.loginQueryData?.userInfo?.cardnum
         req.cusBankID = viewModel.cusBankSignBankDataList.value?.cusbankid
         req.currency = viewModel.cusBankSignBankDataList.value?.currency
+        req.tradeDate = viewModel.cusBankSignBankDataList.value?.tradedate
         req.exBankName = selectBnak.value?.bankname
         req.openBankAccId = selectBnak.value?.bankid
         return req

+ 43 - 4
RMA/app/src/main/java/cn/muchinfo/rma/view/base/main/withdrawmanagement/WithDrawManagementActivity.kt

@@ -5,14 +5,17 @@ import android.os.Bundle
 import android.view.Gravity
 import android.view.View
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.BankAccountSignData
 import cn.muchinfo.rma.global.data.CusBankSignBankData
 import cn.muchinfo.rma.global.data.UserCollectConfigData
+import cn.muchinfo.rma.global.data.transit.SignReq
 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.future.trade.itemView
 import com.blankj.utilcode.util.ActivityUtils
+import com.blankj.utilcode.util.TimeUtils
 import com.blankj.utilcode.util.ToastUtils
 import mtp.polymer.com.autowidget.dialog.SelectData
 import mtp.polymer.com.autowidget.dialog.creatBottomSheetNoTitleDialog
@@ -34,6 +37,7 @@ class WithDrawManagementActivity : BaseActivity<WithDrawManagementViewModel>() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            viewModel.queryCusBankSignBank()
             viewModel.userCollectConfigData.postValue(data)
             background = resources.getDrawable(R.color.rma_item_bg)
             //页面标题
@@ -58,10 +62,21 @@ class WithDrawManagementActivity : BaseActivity<WithDrawManagementViewModel>() {
                         if (this.id == "1"){
                             val intent = Intent()
                             intent.putExtra("type","2")
+                            intent.putExtra("data",data)
                             intent.setClass(context,AddWithDrawActivity::class.java)
                             ActivityUtils.startActivity(intent)
                         }else if (this.id == "2"){
-                            ToastUtils.showLong("删除")
+                            viewModel.T2bBankCancelSignReq(
+                                AccountCode = data.accountcode ?: "",
+                                Currency = data.currency ?: "",
+                                CusBankID = data.cusbankid ?: "",
+                                BankChildAcc = data.bankaccountno ?: "",
+                                BankChildAccName = data.bankaccountname ?: "",
+                                TradeDate = viewModel.cusBankSignBankDataList.value?.tradedate ?: ""
+                            ){
+                                ToastUtils.showLong("解约成功")
+                                viewModel.userCollectConfigData.postValue(BankAccountSignData())
+                            }
                         }
                     }
                 }
@@ -181,7 +196,7 @@ class WithDrawManagementActivity : BaseActivity<WithDrawManagementViewModel>() {
 
                     textView {
                          viewModel.userCollectConfigData.bindOptional(context){
-                             text = it?.accountname
+                             text = it?.bankaccountname
                         }
                         textSizeAuto = 36
                         textColorInt = R.color.rma_black_33
@@ -211,9 +226,33 @@ class WithDrawManagementActivity : BaseActivity<WithDrawManagementViewModel>() {
                 }.lparams(matchParent, autoSize(148))
 
             }.lparams(matchParent, matchParent)
-
-
         }
+
     }
 
+//    fun getReqInfo(operateType : Int) : SignReq {
+//        val req = SignReq()
+//        req.operateType = operateType////变更类型[1-增加;2-修改;4-绑卡; ***
+//        req.isForce = 0//是否强制[0-否;1-是]强制,只更新中心签约信息,不发送银行。用于银行信息不一致的情况 ***
+//        req.agentCertType = 0 // 授权代理人证件类型 ***
+//        req.bankCardType = 0 // 银行卡类型 ***
+//        req.accountType = 1//账户类型[1-对私;2-对公] ***
+//        req.extend_info = getJSONExtendInfo()
+//        req.bankAccountNo = bank_card_number.text.toString()
+//        req.bankAccountName = bank_card_account_name.text.toString()
+//        req.accountCode = data.accountcode
+//        req.accountName =  bank_card_account_name.text.toString()
+//        req.openBankName = branch_name.text.toString()
+//        req.extOperatorID = TimeUtils.getNowMills()
+//        req.certType = GlobalDataCollection.instance?.loginQueryData?.userInfo?.cardtypeid?.toString()
+//        req.certID = GlobalDataCollection.instance?.loginQueryData?.userInfo?.cardnum
+//        req.cusBankID = data.cusbankid
+//        req.currency = data.currency
+//        req.bankChildAcc = data.bankaccountno
+//        req.tradeDate = viewModel.cusBankSignBankDataList.value?.tradedate
+//        req.exBankName = selectBnak.value?.bankname
+//        req.openBankAccId = selectBnak.value?.bankid
+//        return req
+//    }
+
 }

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

@@ -41,6 +41,51 @@ class WithDrawManagementViewModel : BaseViewModel(){
     val bankInfoDataList : MutableLiveData<List<BankInfoData>> = MutableLiveData()
 
     /**
+     * 解约请求
+     * @param AccountCode String
+     * @param CusBankID String
+     * @param Currency String
+     * @param BankChildAcc String
+     * @param BankChildAccName String
+     * @param TradeDate String
+     * @param isSuccess Function1<[@kotlin.ParameterName] Boolean, Unit>
+     */
+    fun T2bBankCancelSignReq(
+        AccountCode : String,
+        CusBankID : String,
+        Currency : String,
+        BankChildAcc : String,
+        BankChildAccName : String,
+        TradeDate : String,
+        isSuccess: (isCompleted: Boolean) -> Unit
+    ){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
+        GlobalScope.launch {
+            MyApplication.getInstance()?.bankManager?.T2bBankCancelSignReq(
+                AccountCode = AccountCode,
+                CusBankID = CusBankID,
+                Currency = Currency,
+                BankChildAcc = BankChildAcc,
+                BankChildAccName = BankChildAccName,
+                TradeDate = TradeDate
+            ) { isCompleted, err ->
+                if (isCompleted) {
+                    loadingDialogStatus.postValue(TaskUiModel.success(msg = "请求成功"))
+                    isSuccess(true)
+                } else {
+                    loadingDialogStatus.postValue(
+                        TaskUiModel.failed(
+                            InteractiveException(
+                                errorMessage = err?.message!!
+                            )
+                        )
+                    )
+                }
+            }
+        }
+    }
+
+    /**
      * 签约解约请求
      * @param req SignReq
      * @param isSuccess Function1<[@kotlin.ParameterName] Boolean, Unit>
@@ -109,7 +154,7 @@ class WithDrawManagementViewModel : BaseViewModel(){
         MyApplication.getInstance()?.bankManager?.queryBankAccountSign(params = params){ isSuccess, respData, error ->
             if (isSuccess){
                 if (respData?.size ?: 0 > 0){
-                    userCollectConfigData.postValue(respData?.get(0))
+                    userCollectConfigData.postValue(respData?.find { it?.signstatus == "4" })
                 }
             }
         }

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

@@ -31,6 +31,7 @@ import cn.muchinfo.rma.view.eventbus.QuoteMessageEvent
 import cn.muchinfo.rma.view.eventbus.TradeMessageEvent
 import com.blankj.utilcode.util.ActivityUtils
 import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.ToastUtils
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
 import mtp.polymer.com.autowidget.dialog.*
 import mtp.polymer.com.autowidget.utils.TaskUiModel
@@ -255,7 +256,7 @@ class PlatinumBuyOrSellUI(
 
                             //行情变化后根据不同的价格类型分别对赋值
                             viewModel.quoteDayData.bindOptional(context) {
-                                if (trade_price_edittext.text.toString().isNullOrEmpty()) {
+                                if (trade_price_edittext.text.toString().isNullOrEmpty() || trade_price_edittext.text.toString() == "0") {
                                     if (type == "1") {
                                         setText(
                                             NumberUtils.roundNum(
@@ -284,6 +285,9 @@ class PlatinumBuyOrSellUI(
                     linearLayout {
                         gravity = Gravity.CENTER_VERTICAL
                         onThrottleFirstClick {
+                            if (type == "2"){
+                                return@onThrottleFirstClick
+                            }
                             val selectDataList = arrayListOf(
                                 SelectData(id = "1", value = "数量"),
                                 SelectData(id = "2", value = "金额")
@@ -304,6 +308,9 @@ class PlatinumBuyOrSellUI(
                         }
 
                         imageView {
+                            if (type == "2"){
+                                visibility = View.GONE
+                            }
                             imageResource = R.mipmap.qhj_trade_numberamout_select
                         }.lparams(autoSize(14), autoSize(14)) {
                             marginStart = autoSize(8)
@@ -315,6 +322,9 @@ class PlatinumBuyOrSellUI(
                             setOnTextChangeListener { view, value ->
 
                             }
+                            viewModel.goodsInfoData.bindOptional(context){
+                                setDecimal(it?.qtydecimalplace ?: 1)
+                            }
                             setText("0")
                             //拿到商品信息后对输入框进行初始化
                             viewModel.goodsInfoData.bindOptional(context) { data ->
@@ -421,6 +431,10 @@ class PlatinumBuyOrSellUI(
                     }
                     textView {
                         onThrottleFirstClick {
+                            if (trade_price_edittext.text.toString().toDouble() < viewModel.goodsExData.value?.minamount?.toDouble() ?: 0.0){
+                                ToastUtils.showLong("最小交易金额不能小于" + viewModel.goodsExData.value?.minamount)
+                                return@onThrottleFirstClick
+                            }
                             creatOrderDetailsDialog(
                                 type = "1",
                                 orderPrice = trade_price_edittext.text.toString(),
@@ -514,6 +528,14 @@ class PlatinumBuyOrSellUI(
                     } else {
                         visibility = View.GONE
                     }
+                    onThrottleFirstClick {
+                        creatOrderDetailsDialog(
+                            type = "2",
+                            orderPrice = trade_price_edittext.text.toString(),
+                            goodsInfo = viewModel.goodsInfoData.value ?: GoodsInfo(),
+                            selectPayType = selectPayType.value?.id ?: "1"
+                        )
+                    }
                     gravity = Gravity.CENTER
                     text = "卖出"
                     textSizeAuto = 36

+ 34 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/platinumtreasure/trade/PlatinumMoneyUI.kt

@@ -7,9 +7,11 @@ import androidx.appcompat.app.AppCompatActivity
 import androidx.viewpager.widget.PagerAdapter
 import androidx.viewpager.widget.ViewPager
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.AmountLogData
 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.future.trade.itemView
 import com.blankj.utilcode.util.ConvertUtils
 import com.qmuiteam.qmui.util.QMUIDisplayHelper
@@ -161,10 +163,12 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
+                    /**
+                     * 净资产=总市值-融资额+余额;
+                     */
                     viewModel.usedAccountData.bindOptional(context){
-
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(it?.valueOfposition?.minus(it.raisedAmount)?.plus(it.currentbalance).toString()),2)
                     }
-                    text = "280000.00"
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)
@@ -185,7 +189,10 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
-                    text = "2800.00"
+                    viewModel.usedAccountData.bindOptional(context){
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(it?.valueOfposition?.toString()),2)
+                    }
+
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)
@@ -206,7 +213,9 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
-                    text = "2800.00"
+                    viewModel.usedAccountData.bindOptional(context){
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(it?.raisedAmount?.toString()),2)
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)
@@ -227,7 +236,14 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
-                    text = "2800.00"
+                    /**
+                     * 余额=可用+冻结;
+                     */
+                    viewModel.usedAccountData.bindOptional(context){
+                        val freezeAmount = it?.freezemargin?.plus(it.otherfreezemargin)?.plus(it.freezecharge)?.plus(it.outamountfreeze)//冻结金额
+                        val balance = it?.currentbalance?.plus(freezeAmount ?: 0.0)//
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(balance?.toString()),2)
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)
@@ -248,7 +264,12 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
-                    text = "2800.00"
+                    /**
+                     * 可用取期末余额
+                     */
+                     viewModel.usedAccountData.bindOptional(context){
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(it?.currentbalance?.toString()),2)
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)
@@ -269,7 +290,13 @@ class MoneyInfoUI(private val activity: AppCompatActivity,private val viewModel:
                 }
 
                 textView {
-                    text = "2800.00"
+                    /**
+                     * 冻结=冻结保证金 + 其他冻结保证金 + 手续费冻结 + 出金冻结。
+                     */
+                    viewModel.usedAccountData.bindOptional(context){
+                        val freezeAmount = it?.freezemargin?.plus(it.otherfreezemargin)?.plus(it.freezecharge)?.plus(it.outamountfreeze)
+                        text = NumberUtils.roundNum(NumberUtils.doubleDistortion(freezeAmount.toString()),2)
+                    }
                     textSizeAuto = 36
                     textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent)

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

@@ -186,6 +186,11 @@ class PlatinumTradeActivity : BaseActivity<PlatinumTradeViewModel>(){
         }
     }
 
+    fun refreshAllData(){
+        viewModel.qhjContractDetailsData.postValue(GlobalDataCollection.instance?.qhjContractDetailsDataArrayList)//直接对融资信息进行赋值
+        viewModel.buyOrSellTradePositionDataList.postValue(GlobalDataCollection.instance?.contractTradePositionDataArrayList)//在数据请求前对持仓汇总单进行赋值
+    }
+
     override fun onDestroy() {
         super.onDestroy()
         viewModel.removeSubscriptQuote(thisTag)

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

@@ -506,7 +506,10 @@ class PlatinumTradeViewModel : BaseViewModel() {
     fun initAccountData() {
         val accountDataList = GlobalDataCollection.instance?.accountDataList
         if (accountDataList.isNullOrEmpty().not()) {
-            usedAccountData.postValue(GlobalDataCollection.instance?.accountData)
+            val accountData = GlobalDataCollection.instance?.accountData
+            accountData?.clearData()
+            accountData?.setNormalData()
+            usedAccountData.postValue(accountData)
         }
     }
 
@@ -571,7 +574,7 @@ class PlatinumTradeViewModel : BaseViewModel() {
         if (type == "1" || type == "3") {
             orderData.buyOrSell = MTPEnums.DIRECTION_BUY// 买入
         } else {
-            orderData.buyOrSell = MTPEnums.DIRECTION_SALE// 买入
+            orderData.buyOrSell = MTPEnums.DIRECTION_SALE// 卖出
         }
 
         orderData.goodsID = goodsInfo.goodsid

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

@@ -46,7 +46,6 @@ class PositionViewHolder(
         verticalLayout {
             onThrottleFirstClick {
                 viewModel.setOnPaypositionItemClick(data.value?.goodsid ?: "")
-
             }
             linearLayout {
                 verticalLayout {
@@ -73,19 +72,14 @@ class PositionViewHolder(
                                 GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { data ->
                                     data.outgoodscode == goodsInfoData.goodscode
                                 }?.quoteDayData
-                            text = quoteDayData?.ask?.times(
+                            text = NumberUtils.roundNum(NumberUtils.doubleDistortion(quoteDayData?.ask?.times(
                                 it?.curpositionqty?.toDouble()?.div(
                                     Math.pow(
                                         10.0,
-                                        goodsInfoData.qtydecimalplace.toDouble() ?: 2.0
+                                        goodsInfoData.qtydecimalplace.toDouble()
                                     )
                                 ) ?: 0.0
-                            ).toString()
-//                            if (it?.buyorsell == "0"){//买
-//
-//                            }else{//卖
-//                                text = quoteDayData?.bid?.times(it?.tradeqty?.toDouble()?.div(Math.pow(10.0,goodsInfoData.qtydecimalplace.toDouble() ?: 2.0)) ?: 0.0).toString()
-//                            }
+                            ).toString()),2)
                         }
 
                         textSizeAuto = 29
@@ -111,7 +105,7 @@ class PositionViewHolder(
                             var differencePrice = 0.0
 
                             if (it?.buyorsell == "0"){
-                                differencePrice = quoteDayData?.ask?.minus(costPrice?.toDouble() ?: 0.0) ?: 0.0
+                                differencePrice = quoteDayData?.bid?.minus(costPrice?.toDouble() ?: 0.0) ?: 0.0
                             }else{
                                 differencePrice = quoteDayData?.bid?.minus(costPrice?.toDouble() ?: 0.0) ?: 0.0
                             }
@@ -119,7 +113,7 @@ class PositionViewHolder(
                             if (differencePrice > 0){
                                 textColorInt = R.color.rma_red_color
                                 proportion_Text.textColorInt = R.color.rma_red_color
-                                proportion_Text.text = 1.minus(costPrice?.toDouble()?.minus(differencePrice)?.div(costPrice?.toDouble()) ?: 0.0)?.toString()?.toPercentage()
+                                proportion_Text.text = 1.minus(costPrice?.toDouble()?.minus(differencePrice)?.div(costPrice.toDouble()) ?: 0.0)?.toString()?.toPercentage()
                             }else if (differencePrice < 0){
                                 textColorInt = R.color.rma_green_color
                                 proportion_Text.textColorInt = R.color.rma_green_color
@@ -157,13 +151,13 @@ class PositionViewHolder(
                         data.bindOptional(context) {
                             val goodsInfoData = DataBase.getInstance().goodsInfoDao()
                                 .getGoodsInfo(it?.goodsid?.toInt() ?: 0)
-                            text = NumberUtils.roundNum(
+                            text = NumberUtils.doubleDistortion(
                                 it?.curpositionqty?.toDouble()?.div(
                                     Math.pow(
                                         10.0,
                                         goodsInfoData.qtydecimalplace?.toDouble() ?: 2.0
                                     )
-                                )?.toString(), 0
+                                )?.toString()
                             )
                         }
                         textSizeAuto = 31
@@ -176,13 +170,13 @@ class PositionViewHolder(
                         data.bindOptional(context) {
                             val goodsInfoData = DataBase.getInstance().goodsInfoDao()
                                 .getGoodsInfo(it?.goodsid?.toInt() ?: 0)
-                            text = NumberUtils.roundNum(
+                            text = NumberUtils.doubleDistortion(
                                 it?.enableqty?.toDouble()?.div(
                                     Math.pow(
                                         10.0,
                                         goodsInfoData.qtydecimalplace?.toDouble() ?: 2.0
                                     )
-                                )?.toString(), 0
+                                )?.toString()
                             )
                         }
                         textSizeAuto = 31
@@ -221,7 +215,7 @@ class PositionViewHolder(
                                     data.outgoodscode == goodsInfoData.goodscode
                                 }?.quoteDayData
                             if (it?.buyorsell == "0") {//买
-                                text = quoteDayData?.ask?.toString()
+                                text = quoteDayData?.bid?.toString()
                             } else {//卖
                                 text = quoteDayData?.bid?.toString()
                             }
@@ -252,18 +246,14 @@ class PositionViewHolder(
 
                 textView {
                     data.bindOptional(context){
-                        if (it?.buyorsell == "0"){
-                            text = "卖出"
-                        }else{
-                            text = "买入"
-                        }
+                        text = "卖出"
                     }
                     onThrottleFirstClick {
                         EventBus.getDefault().post(
                             TradeMessageEvent(
                                 messageType = EventConstent.TRADEGOODSID,
                                 goodsId = data.value?.goodsid.toString(),
-                                buyOrSell = data.value?.buyorsell?.toInt() ?: 0,
+                                buyOrSell = 1,
                                 outGoodsCode = data.value?.goodscode ?: ""
                             )
                         )

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

@@ -660,6 +660,7 @@ class QhjResearchReportUI(
 class QhjInformationUI(private val baseFragment: Fragment, private val viewModule: QhjHomeViewModel) {
     val root = _FrameLayout(baseFragment.context!!).apply {
         verticalLayout {
+            viewModule.querySiteColumnDetail()
             textView {
                 text = "资讯"
                 textColorInt = R.color.black

+ 20 - 4
RMA/app/src/main/java/cn/muchinfo/rma/view/base/qhjhome/QhjHomeViewModel.kt

@@ -3,10 +3,7 @@ package cn.muchinfo.rma.view.base.qhjhome
 
 import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.global.GlobalDataCollection
-import cn.muchinfo.rma.global.data.AccountData
-import cn.muchinfo.rma.global.data.NoticeData
-import cn.muchinfo.rma.global.data.PendingAuditInfoData
-import cn.muchinfo.rma.global.data.UserAccountData
+import cn.muchinfo.rma.global.data.*
 import cn.muchinfo.rma.global.data.account.LoginQueryData
 import cn.muchinfo.rma.global.data.database.BannerEntity
 import cn.muchinfo.rma.global.database.DataBase
@@ -53,6 +50,25 @@ class QhjHomeViewModel : BaseViewModel(){
 
     val pendingAudit : MutableLiveData<PendingAuditInfoData> = MutableLiveData()
 
+
+    /**
+     * 咨询信息
+     */
+    val SiteColumnDetailList : MutableLiveData<List<SiteColumnDetailData>> = MutableLiveData()
+    /**
+     * 查询咨询
+     */
+    fun querySiteColumnDetail(){
+        val params = mutableMapOf<String,String>().apply {
+            put("userid",GlobalDataCollection.instance?.loginRsp?.userID.toString())
+        }
+        MyApplication.getInstance()?.commonManager?.querySiteColumnDetail(params = params){isSuccess, respData, error ->
+            if (isSuccess){
+                SiteColumnDetailList.postValue(respData)
+            }
+        }
+    }
+
     /**
      * 在请求之前先获取数据库存储的banner信息
      */