Browse Source

风险管理3月13日提交代码-liu.bolan-期货交易请求

Liu.bolan 4 years ago
parent
commit
2141a92d3d

+ 1 - 2
RMA/app/src/main/java/cn/muchinfo/rma/global/StringUtils.kt

@@ -41,10 +41,9 @@ fun String.isBlankNumber() : String{
 }
 
 fun String.toPercentage() : String{
-    if (this.isNullOrEmpty()){
+    if (this.isEmpty()){
         return "--"
     }
-
     val percentage = NumberUtils.roundNum(this.toDouble().times(100),2) + "%"
     return percentage
 }

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

@@ -113,7 +113,8 @@ open class AccountData(
     var close_watch_profit_and_loss : Double = 0.0, //平仓盯市盈亏  7.5
     var keep_watch_profit_and_loss : Double = 0.0, //持仓盯市盈亏
     var canUserAmount : Double = 0.0,//可用资金
-    var rightsAndInterests : Double = 0.0//权益
+    var rightsAndInterests : Double = 0.0,//权益
+    var orderValue : Double = 0.0//建仓市值
 ) {
 
     /**
@@ -144,9 +145,13 @@ open class AccountData(
                 openpl = data.openaverageprice.minus(quoteData?.last ?: 0.0).times(data.curpositionqty).times(data.agreeunit)
             }
             close_watch_profit_and_loss = (close_watch_profit_and_loss + openpl)
-        }
 
-        canUserAmount = currentbalance.minus(usedmargin).minus(freezecharge).minus(freezemargin).minus(otherfreezemargin)
+            /** 计算建仓市值 */
+            orderValue += data.opencost
+        }
+        /** 计算可用金额 **/
+        canUserAmount = currentbalance.minus(usedmargin).minus(freezecharge).minus(freezemargin).minus(otherfreezemargin).minus(orderValue)
+        /** 权益 **/
         rightsAndInterests = currentbalance.plus(keep_watch_profit_and_loss)
     }
 

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

@@ -136,6 +136,9 @@ data class QuoteDayData(
      * @return Double
      */
     fun pricesDifference() : Double{
+        if (ontheprice == 0.0){
+            return 0.0
+        }
         return last.minus(ontheprice)
     }
 }

+ 29 - 1
RMA/app/src/main/java/cn/muchinfo/rma/global/data/futureOrders/FutureHoldData.kt

@@ -1,5 +1,7 @@
 package cn.muchinfo.rma.global.data.futureOrders
 
+import cn.muchinfo.rma.global.GlobalDataCollection
+
 data class FutureHoldData(
     var agreeunit: Double = 0.0, // 合约单位
     var buyorsell: Int = 0, // 方向 - 0:买 1:卖
@@ -24,4 +26,30 @@ data class FutureHoldData(
     var positionplrate: Double = 0.0, // 持仓盈亏比例【实时行情更新】 = 持仓盈亏 / 开仓成本
     var usedmargin: Double = 0.0, // 占用保证金
     var selected: Boolean = false
-)
+){
+
+    /**
+     * 计算盈亏
+     */
+    fun calculate(){
+        val quoteData = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { it.outgoodscode == outgoodscode }?.quoteDayData
+        if (quoteData != null){
+            /** 计算持仓浮动盈亏/盯市浮盈 **/
+            if (buyorsell == 0){//买
+                positionpl = quoteData.last.minus(positionaverageprice).times(curpositionqty).times(agreeunit)
+            }else if (buyorsell == 1){
+                positionpl = positionaverageprice.minus(quoteData.last).times(curpositionqty).times(agreeunit)
+            }
+
+            /** 逐笔浮盈/平仓浮动盈亏 **/
+            if (buyorsell == 0){
+                openpl = quoteData.last.minus(openaverageprice).times(curpositionqty).times(agreeunit)
+            }else if (buyorsell == 1){
+                openpl = openaverageprice.minus(quoteData.last).times(curpositionqty).times(agreeunit)
+            }
+
+            positionplrate = positionpl.div(opencost)
+        }
+    }
+
+}

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

@@ -277,7 +277,7 @@ class MyApplication : BaseApplication() {
                         // 写入盘面
                         val goodsIDs = futureManager?.updateQuoteInfo(goodsQuoteTiks!!)
                         EventBus.getDefault().post(goodsIDs?.let { QuoteMessageEvent(goodsid = it) })
-                        // TODO: - 计算持仓盈亏和资金账户
+                        //计算持仓盈亏和资金账户
                         GlobalDataCollection.instance?.accountData?.setNormalData()
                     }
                 }

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

@@ -10,9 +10,10 @@ object Constant {
      * 获取基础url的接口
      */
 //    const val baseurl = "http://103.40.249.127:28280/cfg?key=mtp_20"
-    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.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.211:8080/cfg?key=test_211"// 瑶姐
 
     /**
      * 用sp存储基础url的key

+ 7 - 11
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/FutureFragment.kt

@@ -15,13 +15,18 @@ import androidx.viewpager.widget.ViewPager
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.MyApplication
+import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.base.BaseFragment
 import cn.muchinfo.rma.view.base.future.costs.CostFragment
 import cn.muchinfo.rma.view.base.future.deals.DealFragment
 import cn.muchinfo.rma.view.base.future.entrusts.EntrustFragment
 import cn.muchinfo.rma.view.base.future.holds.HoldFragment
 import cn.muchinfo.rma.view.base.future.markets.FutureMarket
+import com.blankj.utilcode.util.ToastUtils
 import com.qmuiteam.qmui.widget.tab.QMUITabSegment
+import org.jetbrains.anko._LinearLayout
+import org.jetbrains.anko.support.v4.UI
+import java.util.zip.Inflater
 
 
 /**
@@ -34,8 +39,8 @@ class FutureFragment : BaseFragment<FutureViewModel>() {
     private var _view: View? = null
     private var idTab: QMUITabSegment? = null
     private var idPager: ViewPager? = null
-    var id_title : TextView? = null
-   lateinit var id_account : TextView
+    private var id_title : TextView? = null
+    private var id_account : TextView? = null
     val selectIndex : MutableLiveData<Int> = MutableLiveData()
     // tab 值
     private val tabs: Array<String?> = arrayOf(
@@ -68,15 +73,6 @@ class FutureFragment : BaseFragment<FutureViewModel>() {
     private fun initViews() {
         idTab = _view?.findViewById(R.id.id_tab)
         idPager = _view?.findViewById(R.id.id_pager)
-        id_title = view?.findViewById(R.id.id_title)
-//        id_account = view?.findViewById(R.id.id_account)!!
-//        selectIndex.bindOptional(context!!){
-//            if (it == 0){
-//                id_account.visibility = View.GONE
-//            }else{
-//                id_account.visibility = View.VISIBLE
-//            }
-//        }
         // 设置
         val builder = BaseFutureModel().qmuiTabSegmentConfig(idTab, 15, context)
         idTab?.mode = QMUITabSegment.MODE_FIXED

+ 26 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldFragment.kt

@@ -9,10 +9,12 @@ import androidx.lifecycle.MutableLiveData
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.BaseFragment
 import cn.muchinfo.rma.view.eventbus.MessageEvent
+import cn.muchinfo.rma.view.eventbus.QuoteMessageEvent
 import mtp.polymer.com.autowidget.dialog.createLoadingDialog
 import mtp.polymer.com.autowidget.utils.TaskUiModel
 import mtp.polymer.com.autowidget.utils.bindTaskStatus
@@ -34,6 +36,9 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
     private var loadingDialog: Dialog? = null
     var isBackhandByLose = 0 //是否是快捷反手操作,1是反手操作,0不是反手操作
 
+    //此页面是否在显示,true行情下发可刷新列表 false则不刷新
+    var canrefrashQuote: Boolean = false
+
     /**
      * 数据初始化状态控制
      */
@@ -59,12 +64,24 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
         EventBus.getDefault().register(this)
     }
 
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    fun onMessageEvent(messageEvent : MessageEvent) {
 
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onQuoteMessageEvent(quoteMessageEvent: QuoteMessageEvent) {
+        /** 是否可刷新ui **/
+        if (canrefrashQuote) {
+            /** 行情推送过来的goodsid **/
+            quoteMessageEvent.goodsid.forEach { goodid ->
+                //找到相应商品信息
+                val goodsInfo = viewModel.list?.find { it.goodsid == goodid }
+                viewModel.list?.indexOf(goodsInfo)?.let {
+                    if (it != -1) {//刷新相应item
+                        idHoldList?.adapter?.notifyItemChanged(it)
+                    }
+                }
+            }
+        }
     }
 
-
     override fun onDestroy() {
         super.onDestroy()
         EventBus.getDefault().unregister(this)
@@ -79,8 +96,14 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
         idHoldList?.adapter = adapter
     }
 
+    override fun onPause() {
+        super.onPause()
+        canrefrashQuote = false
+    }
+
     override fun onResume() {
         super.onResume()
+        canrefrashQuote = true
         viewModel.queryHold()
     }
     //主动更新数据

+ 55 - 6
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldViewModel.kt

@@ -57,7 +57,9 @@ class HoldViewModel : BaseViewModel() {
         private var green: Drawable? = null
         private var priceRed: Int = 0
         private var priceGreen: Int = 0
+        private var priceBlack: Int = 0
         private var fragment : Fragment? = null
+        private var refreshByQuote : Boolean = false
         var futureHoldData: FutureHoldData? = null // 当前选择的item对应的数据
 
         init {
@@ -69,6 +71,7 @@ class HoldViewModel : BaseViewModel() {
             green = context?.getDrawable(R.drawable.rma_green)
             priceGreen = context?.getColor(R.color.p_price_green)!!
             priceRed = context.getColor(R.color.p_price_red)
+            priceBlack = context.getColor(R.color.rma_black_33)
         }
 
         override fun getItemCount(): Int {
@@ -80,6 +83,11 @@ class HoldViewModel : BaseViewModel() {
             notifyDataSetChanged()
         }
 
+        //刷新item是否是由于行情推送
+        fun updateByQuote(refreshByQuote : Boolean){
+            this.refreshByQuote = refreshByQuote
+        }
+
         inner class HoldHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
             var idGoodsName = itemView?.findViewById<TextView>(R.id.id_goods_name) // 商品名称
             var idTransDirection = itemView?.findViewById<TextView>(R.id.id_trans_direction) // 方向
@@ -110,16 +118,57 @@ class HoldViewModel : BaseViewModel() {
                 itemData?.openaverageprice.toString()//开仓均价【头寸变化更新】 = 开仓成本 / 期末头寸 / 合约单位
             holder.idHoldAveragePrice?.text =
                 itemData?.positionaverageprice.toString()//持仓均价【头寸变化更新】= 持仓成本 / 期末头寸 / 合约单位
-            holder.idZPl?.text =
-                NumberUtils.roundNum(itemData?.positionpl.toString(),2)//盯市浮盈【实时行情更新】(MTP:浮动盈亏、持仓盈亏) 买方向 = (最新价 - 持仓均价) * 买期末头寸 * 合约单位;卖方向 = (持仓均价 - 最新价) * 卖期末头寸 * 合约单位
-            holder.idPlp?.text = itemData?.positionplrate.toString()//持仓盈亏比例【实时行情更新】 = 持仓盈亏 / 开仓成本
-            holder.id_pl?.text =
-                NumberUtils.roundNum(itemData?.openpl.toString(),2)//逐笔浮盈【实时行情更新】(MTP:开仓盈亏、平仓盈亏) 买方向 = (最新价 - 开仓均价) * 买期末头寸 * 合约单位;卖方向 = (开仓均价 - 最新价) * 卖期末头寸 * 合约单位
-            holder.idMargin?.text = itemData?.usedmargin.toString()//占用保证金
+           holder.idMargin?.text = itemData?.usedmargin.toString()//占用保证金
+
+            if (refreshByQuote){//行情下发的推送则自己算一遍
+                /**
+                 * 获取基本信息(主要计算持仓浮动盈亏和平仓浮动盈亏)
+                 * 盯市浮盈【实时行情更新】(MTP:浮动盈亏、持仓盈亏) 买方向 = (最新价 - 持仓均价) * 买期末头寸 * 合约单位;卖方向 = (持仓均价 - 最新价) * 卖期末头寸 * 合约单位
+                 * 逐笔浮盈【实时行情更新】(MTP:开仓盈亏、平仓盈亏) 买方向 = (最新价 - 开仓均价) * 买期末头寸 * 合约单位;卖方向 = (开仓均价 - 最新价) * 卖期末头寸 * 合约单位
+                 */
+                val quoteData = GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { itemData?.outgoodscode == it.outgoodscode }
+                if (quoteData != null){
+                    itemData?.calculate()
+                    holder.idZPl?.text =
+                        NumberUtils.roundNum(itemData?.positionpl.toString(),2)
+                    holder.idPlp?.text = itemData?.positionplrate.toString()
+                    holder.id_pl?.text =
+                        NumberUtils.roundNum(itemData?.openpl.toString(),2)
+                }else{
+                    holder.idZPl?.text =
+                        NumberUtils.roundNum(itemData?.positionpl.toString(),2)
+                    holder.idPlp?.text = itemData?.positionplrate.toString()
+                    holder.id_pl?.text =
+                        NumberUtils.roundNum(itemData?.openpl.toString(),2)
+                }
+            }else{//第一次请求则直接拿go服务给的值
+                holder.idZPl?.text =
+                    NumberUtils.roundNum(itemData?.positionpl.toString(),2)
+                holder.idPlp?.text = itemData?.positionplrate.toString()
+                holder.id_pl?.text =
+                    NumberUtils.roundNum(itemData?.openpl.toString(),2)
+            }
+
+            if (itemData?.positionpl == 0.0){
+                holder.idZPl?.setTextColor(priceBlack)
+                holder.idPlp?.setTextColor(priceBlack)
+                holder.id_pl?.setTextColor(priceBlack)
+            }else if (itemData?.positionpl ?: 0.0 > 0){
+                holder.idZPl?.setTextColor(priceRed)
+                holder.idPlp?.setTextColor(priceRed)
+                holder.id_pl?.setTextColor(priceRed)
+            }else if (itemData?.positionpl ?: 0.0 < 0){
+                holder.idZPl?.setTextColor(priceGreen)
+                holder.idPlp?.setTextColor(priceGreen)
+                holder.id_pl?.setTextColor(priceGreen)
+            }
+
             if (list?.get(position)?.buyorsell == 0) {
                 holder.idTransDirection?.text = context?.resources?.getString(R.string.str_buy)
+                holder.idTransDirection?.setTextColor(priceRed)
             } else {
                 holder.idTransDirection?.text = context?.resources?.getString(R.string.str_sell)
+                holder.idTransDirection?.setTextColor(priceGreen)
             }
 
             /** 快捷反手 */

+ 13 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/markets/MarketBaseModel.kt

@@ -174,23 +174,29 @@ class MarketBaseModel : BaseViewModel() {
                 }else{
                     holder.idUpDown?.text = "--"
                 }
+                val textUpDown = quoteDayData.last.minus(quoteDayData.presettle)
+                if (textUpDown == 0.0){
+                    holder.idUpDown?.setTextColor(noChangeBlack)
+                    holder.idPrice?.setTextColor(noChangeBlack)
+                }else if (textUpDown > 0){
+                    holder.idUpDown?.setTextColor(priceRed)
+                    holder.idPrice?.setTextColor(priceRed)
+                }else if (textUpDown < 0){
+                    holder.idUpDown?.setTextColor(priceGreen)
+                    holder.idPrice?.setTextColor(priceGreen)
+                }
 
-                 val upDown = quoteDayData.pricesDifference()
+                //和上一口价的差额
+                val upDown = quoteDayData.pricesDifference()
                 if (upDown == 0.0){
                     holder.idUpDown?.background = noChange
-                    holder.idUpDown?.setTextColor(noChangeBlack)
                     holder.idPrice?.background = noChange
-                    holder.idPrice?.setTextColor(noChangeBlack)
                 }else if (upDown > 0){
                     holder.idUpDown?.background = pink
-                    holder.idUpDown?.setTextColor(priceRed)
                     holder.idPrice?.background = pink
-                    holder.idPrice?.setTextColor(priceRed)
                 }else if (upDown < 0){
                     holder.idUpDown?.background = green
-                    holder.idUpDown?.setTextColor(priceGreen)
                     holder.idPrice?.background = green
-                    holder.idPrice?.setTextColor(priceGreen)
                 }
 
                 holder.idHoldTotal?.text = quoteDayData.totalvolume

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

@@ -41,7 +41,7 @@ class MarketFragment(data: ExternalExchanges) : BaseFragment<MarketBaseModel>()
     private var idMarketList: RecyclerView? = null // 列表
 
     val thisTag by lazy {
-        this.getTag()
+        this.tag
     }
 
     var fistShow: Int = 0

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

@@ -35,6 +35,7 @@ import cn.muchinfo.rma.view.base.future.holds.HoldFragment
 import cn.muchinfo.rma.view.base.home.contract.emptyView
 import cn.muchinfo.rma.view.eventbus.EventConstent
 import cn.muchinfo.rma.view.eventbus.MessageEvent
+import cn.muchinfo.rma.view.eventbus.QuoteMessageEvent
 import cn.muchinfo.rma.view.eventbus.TradeMessageEvent
 import com.blankj.utilcode.util.ConvertUtils
 import com.blankj.utilcode.util.TimeUtils
@@ -79,6 +80,11 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
     var selectedTabIndex: Int = 0
     private lateinit var viewPager: ViewPager
 
+    /** 用于订阅行情的唯一标识 */
+    val thisTag by lazy {
+        "goodtradeorder"
+    }
+
     /** 当前页面的goodsid **/
     val goodsId by lazy {
         intent.getStringExtra("goodsId")
@@ -198,7 +204,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()))//获取商品详情
-        viewModel.queryQuoteDay(outGoodsCode,isShowLoading = isShowLoading)//请求盘面
+        viewModel.queryQuoteDay(tag = thisTag,goodsCodes = outGoodsCode,isShowLoading = isShowLoading)//请求盘面
         viewModel.initAccountData()//拿到当前的资金账号
 
     }
@@ -216,8 +222,20 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         initData(goodsId = tradeMessageEvent.goodsId,buyOrSell = tradeMessageEvent.buyOrSell,outGoodsCode = tradeMessageEvent.outGoodsCode,isShowLoading = false)
     }
 
+    //行情推送通知
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onQuoteMessageEvent(quoteMessageEvent: QuoteMessageEvent) {
+        val goodsids = quoteMessageEvent.goodsid
+        //如果推送的goodsid包含当前页面的goodsid,则进行页面刷新
+        if (goodsids.contains(goodsId?.toInt())){
+            val goodsInfo = GlobalDataCollection.instance?.goodsInfoList?.findLast { it.goodsid == goodsId?.toInt() }
+            viewModel.quoteDayData.postValue(GlobalDataCollection.instance?.goodsInfoAndQuotesList?.find { goodsInfo?.outgoodscode == it.outgoodscode }?.quoteDayData)
+        }
+    }
+
     override fun onDestroy() {
         super.onDestroy()
+        viewModel.removeSubscriptQuote(thisTag)
         EventBus.getDefault().unregister(this)
     }
 
@@ -383,8 +401,10 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
 
                                     textView {
                                         viewModel.quoteDayData.bindOptional(context) {
-                                            text = it?.last?.minus(it.preclose)?.div(it.last)
-                                                .toString().toPercentage()
+                                            if (it != null){
+                                                text = it?.last?.minus(it.preclose)?.div(it.last)
+                                                    .toString().toPercentage()
+                                            }
                                         }
                                         textSizeAuto = 31
                                         textColorInt = R.color.rma_red_color

+ 34 - 9
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/trade/GoodsTradeViewModel.kt

@@ -6,6 +6,7 @@ import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.AccountData
 import cn.muchinfo.rma.global.data.AccountShowData
 import cn.muchinfo.rma.global.data.QuoteDayData
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.view.MyApplication
@@ -61,6 +62,7 @@ class GoodsTradeViewModel : BaseViewModel() {
      * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
      */
     fun queryQuoteDay(
+        tag : String,
         goodsCodes: String,
         isShowLoading : Boolean
     ) {
@@ -74,7 +76,7 @@ class GoodsTradeViewModel : BaseViewModel() {
         MyApplication.getInstance()?.futureManager?.queryQuoteDay(params = params) { isSuccess, respData, error ->
             if (isSuccess) {
                 if (respData?.isEmpty()?.not() == true) {
-                    quoteDayData.postValue(respData.get(0))
+                    quoteDayData.postValue(respData[0])
                 }
                 if (isShowLoading){
                     loadingDialogStatus.postValue(TaskUiModel.success(msg = "数据请求成功"))
@@ -86,6 +88,34 @@ class GoodsTradeViewModel : BaseViewModel() {
                 }
             }
         }
+        addSubscriptQuote(tag = tag,goodsCodes = setOf(goodsCodes))
+    }
+
+    /**
+     * 订阅行情
+     * @param tag String
+     * @param goodsInfoList List<GoodsInfo>
+     */
+    fun addSubscriptQuote(tag : String,goodsCodes: Set<String>){
+        GlobalScope.launch {
+            MyApplication.getInstance()?.quoteManager?.addSubscriptQuote(
+                tag = tag,goodsCodeSet = goodsCodes
+            ){isCompleted, err ->
+
+            }
+        }
+    }
+
+    /**
+     * 取消订阅
+     * @param tag String
+     */
+    fun removeSubscriptQuote(tag : String){
+        GlobalScope.launch {
+            MyApplication.getInstance()?.quoteManager?.removeSubscriptQuote(
+                tag = tag
+            )
+        }
     }
 
     /**
@@ -93,14 +123,9 @@ class GoodsTradeViewModel : BaseViewModel() {
      */
     fun calculateMoney(){
         val accountData = GlobalDataCollection.instance?.accountData
-        val showAccountData = AccountShowData()
-//        showAccountData.setNormalData()
-        canUseWorth.postValue(accountData?.currentbalance?.minus(accountData.usedmargin)?.minus(
-            accountData.freezecharge
-        )?.minus(
-            accountData.freezemargin
-        )?.minus(accountData.otherfreezemargin).toString())
-        allWorth.postValue(accountData?.currentbalance?.plus(showAccountData.keep_watch_profit_and_loss.toDouble()).toString())
+        accountData?.setNormalData()
+        canUseWorth.postValue(accountData?.canUserAmount.toString())
+        allWorth.postValue(accountData?.rightsAndInterests.toString())
     }
 
     /**

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

@@ -36,7 +36,12 @@ class ContractDetailsActivity : BaseActivity<ContractViewModel>(){
             topBar {
                 commonLeftButton()
                 commonTitle {
-                    text = "采购合同详情"
+                    text = if (data.contracttype == "1"){
+                        "采购合同详情"
+                    }else{
+                        "销售合同详情"
+                    }
+
                 }
             }
 

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

@@ -384,7 +384,7 @@ fun _LinearLayout.contractDetailThreeView(data: ContractData) {
             }
             gravity = Gravity.CENTER_VERTICAL
             textView {
-                text = "升  贴  水"
+                text = "暂  定  价"
                 textSizeAuto = 31
                 textColorInt = R.color.p_normal_summary_txt_color
             }.lparams(wrapContent, wrapContent) {
@@ -392,7 +392,7 @@ fun _LinearLayout.contractDetailThreeView(data: ContractData) {
             }
 
             textView {
-                text = "100元"
+                text = data.price + "元"
                 textColorInt = R.color.rma_black_33
                 textSizeAuto = 31
             }.lparams(wrapContent, wrapContent) {
@@ -403,7 +403,7 @@ fun _LinearLayout.contractDetailThreeView(data: ContractData) {
         viewItemUI()
 
         linearLayout {
-            visibility = View.GONE
+
             gravity = Gravity.CENTER_VERTICAL
             textView {
                 text = "点  贴  水"
@@ -414,7 +414,7 @@ fun _LinearLayout.contractDetailThreeView(data: ContractData) {
             }
 
             textView {
-                text = "100元"
+                text = data.pricemove + "元"
                 textColorInt = R.color.rma_black_33
                 textSizeAuto = 31
             }.lparams(wrapContent, wrapContent) {

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

@@ -161,7 +161,7 @@ class AddCustomerDataActivity : BaseActivity<CustomerDataViewModel>() {
                             text = "客户资料审核"
                         }
                         "4" -> {
-                            text = "客户资料撤"
+                            text = "客户资料撤"
                         }
                         "5" -> {
                             text = "停用客户资料"
@@ -741,7 +741,7 @@ class AddCustomerDataActivity : BaseActivity<CustomerDataViewModel>() {
                         }
                         gravity = Gravity.CENTER
                         backgroundResource = R.mipmap.rma_submit_bg
-                        text = "撤"
+                        text = "撤"
                         textColorInt = R.color.white
                         textSizeAuto = 38
                     }.lparams(autoSize(780), autoSize(119)) {

+ 3 - 1
RMA/app/src/main/res/layout/future_list.xml

@@ -24,6 +24,7 @@
 <!--        android:background="@color/main_title_bg_color">-->
 
 <!--        <TextView-->
+<!--            app:layout_constraintTop_toTopOf="parent"-->
 <!--            android:layout_width="wrap_content"-->
 <!--            android:textSize="17sp"-->
 <!--            android:id="@+id/id_title"-->
@@ -34,7 +35,8 @@
 <!--            android:layout_height="wrap_content"/>-->
 
 <!--        <TextView-->
-<!--            android:visibility="gone"-->
+<!--            app:layout_constraintTop_toTopOf="parent"-->
+<!--            android:visibility="visible"-->
 <!--            android:layout_width="wrap_content"-->
 <!--            android:textSize="13sp"-->
 <!--            android:id="@+id/id_account"-->