Prechádzať zdrojové kódy

1、持仓单界面显示数据

ProGo 4 rokov pred
rodič
commit
add9745171

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

@@ -6,10 +6,12 @@ import cn.muchinfo.rma.global.data.GoodsInfoAndQuotes
 import cn.muchinfo.rma.global.data.QuoteDayData
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
+import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.global.database.AppDatabase
 import cn.muchinfo.rma.global.room.Builder
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
+import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.app.BaseResult
 import cn.muchinfo.rma.view.base.app.Constant
 import cn.muchinfo.rma.view.base.app.ServiceFunApi
@@ -227,20 +229,21 @@ class FutureManager {
 
 
     /**
-     * 获取企业风管期货成交单信息
+     * 获取企业风管期货持仓头寸信息
      * @param params Map<String, String> accountID/资金账户ID marketID/所属市场ID
      * @param responseBack Function3<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] List<FutureDetailsData>?, [@kotlin.ParameterName] Error?, Unit>
      */
     fun queryErmcpTradePosition(
         params: Map<String, String>,
-        responseBack: (isSuccess: Boolean, respData: List<FutureDetailsData>?, error: Error?) -> Unit
+        responseBack: (isSuccess: Boolean, respData: List<FutureHoldData>?, error: Error?) -> Unit
     ){
         MyOkHttpUtils().query(
             URL = SPUtils.getInstance().getString(Constant.goCommonSearchUrl) + "/Ermcp/QueryErmcpTradePosition",
             params = params,
             type = "1",
-            callback = object : ResponseCallback<BaseResult<List<FutureDetailsData>>>(){
-                override fun onResponse(response: BaseResult<List<FutureDetailsData>>?, id: Int) {
+            callback = object : ResponseCallback<BaseResult<List<FutureHoldData>>>(){
+                override fun onResponse(response: BaseResult<List<FutureHoldData>>?, id: Int) {
+                    GlobalDataCollection.instance?.futureHoldData = response?.data?.toArrayList()
                     responseBack(true, response?.data, null)
                 }
 

+ 17 - 18
RMA/app/src/main/java/cn/muchinfo/rma/global/BaseGlobalData.java

@@ -13,6 +13,7 @@ import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo;
 import cn.muchinfo.rma.global.data.database.EnumDicEntity;
 import cn.muchinfo.rma.global.data.database.ErrorCodeEntity;
 import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData;
+import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData;
 import cn.muchinfo.rma.protobuf.protoclasses.SystemMI1;
 
 public class BaseGlobalData {
@@ -72,26 +73,9 @@ public class BaseGlobalData {
      */
     private ArrayList<GoodsInfoAndQuotes> goodsInfoAndQuotesList;
 
-    /**
-     * 持仓头寸信息
-     * @return
-     */
-    private ArrayList<FutureDetailsData> tradePositionList;
-
     private ArrayList<FutureEntrustData> futureEntrustData;
     private ArrayList<FutureEntrustData> futureHisEntrustData;
-
-
-    public ArrayList<FutureDetailsData> getTradePositionList() {
-        if (tradePositionList == null){
-            tradePositionList = new ArrayList<>();
-        }
-        return tradePositionList;
-    }
-
-    public void setTradePositionList(ArrayList<FutureDetailsData> tradePositionList) {
-        this.tradePositionList = tradePositionList;
-    }
+    private ArrayList<FutureHoldData> futureHoldData; // 持仓头寸信息
 
     public ArrayList<GoodsInfoAndQuotes> getGoodsInfoAndQuotesList() {
         if (goodsInfoAndQuotesList == null){
@@ -202,4 +186,19 @@ public class BaseGlobalData {
     public void setFutureHisEntrustData(ArrayList<FutureEntrustData> futureHisEntrustData) {
         this.futureHisEntrustData = futureHisEntrustData;
     }
+
+    /**
+     * 期货-头寸信息
+     * @return
+     */
+    public ArrayList<FutureHoldData> getFutureHoldData() {
+        if (futureHoldData == null) {
+            futureHoldData = new ArrayList<>();
+        }
+        return futureHoldData;
+    }
+
+    public void setFutureHoldData(ArrayList<FutureHoldData> futureHoldData) {
+        this.futureHoldData = futureHoldData;
+    }
 }

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

@@ -0,0 +1,26 @@
+package cn.muchinfo.rma.global.data.futureOrders
+
+data class FutureHoldData(
+    var agreeunit: Double = 0.0, // 合约单位
+    var buyorsell: Int = 0, // 方向 - 0:买 1:卖
+    var curpositionqty: Int = 0, // 持仓(总仓数量, 期末头寸)
+    var curtdposition: Int = 0, // 今仓数量(期末今日头寸)
+    var curtdpositionenabled: Int = 0, // 今仓可用
+    var decimalplace: Int = 0, // 报价小数位
+    var enableqty: Int = 0, // 可用(总仓可用)
+    var exexchangename: String = "", // 外部交易所名称
+    var goodscode: String = "", // 商品代码(内部)
+    var goodsid: Int = 0, // 商品ID(自增ID SEQ_GOODS)
+    var goodsname: String = "", // 商品名称
+    var last: Double = 0.0, // 现价
+    var marketid: Int = 0, // 所属市场ID
+    var openaverageprice: Double = 0.0, // 开仓均价【头寸变化更新】 = 开仓成本 / 期末头寸 / 合约单位
+    var opencost: Double = 0.0, // 开仓成本
+    var openpl: Double = 0.0, // 逐笔浮盈【实时行情更新】(MTP:开仓盈亏、平仓盈亏) 买方向 = (最新价 - 开仓均价) * 买期末头寸 * 合约单位;卖方向 = (开仓均价 - 最新价) * 卖期末头寸 * 合约单位
+    var outgoodscode: String = "", // 商品代码(外部)
+    var positionaverageprice: Double = 0.0, // 持仓均价【头寸变化更新】= 持仓成本 / 期末头寸 / 合约单位
+    var positioncost: Double = 0.0, // 持仓成本
+    var positionpl: Double = 0.0, // 盯市浮盈【实时行情更新】(MTP:浮动盈亏、持仓盈亏) 买方向 = (最新价 - 持仓均价) * 买期末头寸 * 合约单位;卖方向 = (持仓均价 - 最新价) * 卖期末头寸 * 合约单位
+    var positionplrate: Double = 0.0, // 持仓盈亏比例【实时行情更新】 = 持仓盈亏 / 开仓成本
+    var usedmargin: Double = 0.0 // 占用保证金
+)

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

@@ -116,7 +116,6 @@ class MainViewModel : BaseViewModel() {
         MyApplication.getInstance()?.futureManager?.queryErmcpTradePosition(params = params){isSuccess, respData, error ->  
             if (isSuccess){
                 loadingDialogStatus.postValue(TaskUiModel.success(msg = "数据初始化成功"))
-                GlobalDataCollection.instance?.tradePositionList = respData?.toArrayList()
             }else{
                 loadingDialogStatus.postValue(TaskUiModel.failed(InteractiveException(errorMessage = "数据初始化失败")))
             }

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

@@ -9,9 +9,9 @@ object Constant {
     /**
      * 获取基础url的接口
      */
-//    const val baseurl = "http://103.40.249.127:28280/cfg?key=mtp_20"
+    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.31.114:8080/cfg?key=test_114" // shenzhen01  123123
 //    const val baseurl = "http://192.168.31.220:8080/cfg?key=test_220"//李倩
 
     /**

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

@@ -10,6 +10,7 @@ import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseFragment
+import cn.muchinfo.rma.view.base.future.enums.CustomerEnums
 import org.jetbrains.anko.linearLayout
 import org.jetbrains.anko.matchParent
 import org.jetbrains.anko.support.v4.UI
@@ -17,11 +18,11 @@ import org.jetbrains.anko.support.v4.UI
 /**
  * 今日委托和今日可撤
  */
-class EntrustChildFragment(type: EntrustFragment.EntrustType) : BaseFragment<EntrustChildViewModel>() {
-    private var type: EntrustFragment.EntrustType? = type
+class EntrustChildFragment(type: CustomerEnums.EntrustType) : BaseFragment<EntrustChildViewModel>() {
+    private var type: CustomerEnums.EntrustType? = type
 
     companion object {
-        fun getInstance(type: EntrustFragment.EntrustType) = EntrustChildFragment(type)
+        fun getInstance(type: CustomerEnums.EntrustType) = EntrustChildFragment(type)
     }
 
     private lateinit var swipeToLayout: SwipeToLoadLayout

+ 12 - 12
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/entrusts/EntrustChildViewModel.kt

@@ -12,6 +12,7 @@ import cn.muchinfo.rma.business.future.FutureManager
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
 import cn.muchinfo.rma.view.base.BaseViewModel
+import cn.muchinfo.rma.view.base.future.enums.CustomerEnums
 import cn.muchinfo.rma.view.base.future.interfaces.OnItemClickListener
 import org.jetbrains.anko.backgroundColor
 import java.text.SimpleDateFormat
@@ -22,7 +23,7 @@ import kotlin.collections.ArrayList
  * 今日委托和今日可撤model
  */
 class EntrustChildViewModel : BaseViewModel() {
-    private var type: EntrustFragment.EntrustType? = EntrustFragment.EntrustType.TODAY_CANCEL_TYPE // 默认进入可撤
+    private var type: CustomerEnums.EntrustType? = CustomerEnums.EntrustType.TODAY_CANCEL_TYPE // 默认进入可撤
 
     val entrustLiveData: MutableLiveData<List<FutureEntrustData>> = MutableLiveData() // 加载状态控制
     val noDataLiveData: MutableLiveData<Boolean> = MutableLiveData() // 如果没有数据
@@ -51,7 +52,7 @@ class EntrustChildViewModel : BaseViewModel() {
             this.list = GlobalDataCollection.instance?.futureHisEntrustData
             this.inflater = LayoutInflater.from(context)
             this.context = context
-            selectedColor = context?.getColor(R.color.p_select_bg_color)!!
+            selectedColor = context?.getColor(R.color.p_list_item_select_color)!!
         }
 
         override fun getItemCount(): Int {
@@ -163,20 +164,19 @@ class EntrustChildViewModel : BaseViewModel() {
     fun queryOrder() {
         FutureManager().queryErmcpEntrustDetails { isSuccess, respData, _ ->
             if (isSuccess && !respData!!.isNullOrEmpty()) { // 查询成功
-                entrustLiveData.value = respData
+                val temps = arrayListOf<FutureEntrustData>()
+                respData.filter {
+                    // 如果是TODAY_CANCEL_TYPE 那就channelinnerorderstatus == 5,如果是TODAY_TYPE,那么channelinnerorderstatus != 5
+                    (it.channelinnerorderstatus == 5 && type == CustomerEnums.EntrustType.TODAY_CANCEL_TYPE) ||
+                            (it.channelinnerorderstatus != 5 && type == CustomerEnums.EntrustType.TODAY_TYPE)
+                }.forEach {
+                    temps.add(it)
+                }
+                entrustLiveData.value = temps
             } else { // 查询失败
                 noDataLiveData.value = true
             }
         }
-
-//        FutureManager().queryErmcpHisEntrustDetails { _isSuccess, _respData, _ ->
-//            if (_isSuccess && !_respData!!.isNullOrEmpty()) { // 查询成功
-//                list = _respData as ArrayList<FutureEntrustData>?
-//                entrustLiveData.value = _respData
-//            } else { // 查询失败
-//                noDataLiveData.value = true
-//            }
-//        }
     }
 
     //endregion

+ 3 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/entrusts/EntrustFragment.kt

@@ -15,6 +15,7 @@ import cn.muchinfo.rma.R
 import cn.muchinfo.rma.view.base.BaseFragment
 import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.base.future.BaseFutureModel
+import cn.muchinfo.rma.view.base.future.enums.CustomerEnums
 import com.google.android.material.tabs.TabLayout
 import com.qmuiteam.qmui.widget.tab.QMUITabSegment
 
@@ -23,11 +24,6 @@ import com.qmuiteam.qmui.widget.tab.QMUITabSegment
  */
 class EntrustFragment: BaseFragment<EntrustViewModel>() {
 
-    enum class EntrustType {
-        TODAY_CANCEL_TYPE, // 今日可撤
-        TODAY_TYPE // 今日委托
-    }
-
     companion object {
         fun getInstance() = EntrustFragment()
     }
@@ -38,8 +34,8 @@ class EntrustFragment: BaseFragment<EntrustViewModel>() {
         MyApplication.getInstance()?.resources?.getString(R.string.str_entrust_today) // 今日委托
     )
     private val tabFragments: Array<Fragment> = arrayOf(
-        EntrustChildFragment.getInstance(EntrustType.TODAY_CANCEL_TYPE),
-        EntrustChildFragment.getInstance(EntrustType.TODAY_TYPE)
+        EntrustChildFragment.getInstance(CustomerEnums.EntrustType.TODAY_CANCEL_TYPE),
+        EntrustChildFragment.getInstance(CustomerEnums.EntrustType.TODAY_TYPE)
     )
 //endregion
 

+ 13 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/enums/CustomerEnums.kt

@@ -0,0 +1,13 @@
+package cn.muchinfo.rma.view.base.future.enums
+
+class CustomerEnums {
+
+    /**
+     * 委托单显示类型
+     */
+    enum class EntrustType {
+        TODAY_CANCEL_TYPE, // 今日可撤
+        TODAY_TYPE // 今日委托
+    }
+
+}

+ 0 - 35
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldData.kt

@@ -1,35 +0,0 @@
-package cn.muchinfo.rma.view.base.future.holds
-
-import java.io.Serializable
-
-/**
- * 持仓的item的中间件bo
- */
-class HoldData: Serializable {
-    // 商品名称
-    var goodsName = ""
-    // 商品代码
-    var goodsCode = ""
-    // 商品id
-    var goodsId: Int = 0
-    // 最新价格
-    var lastPrice: Double = 0.0
-    // 可用
-    var available: Double = 0.0
-    // 持仓量
-    var totals: Double = 0.0
-    // 成本
-    var cost: Double = 0.0
-
-    // 持仓价格
-    var holdPrice: Double = 0.0
-
-    // 盈亏率
-    var plp: Double = 0.0
-
-    // 盈亏
-    var pl: Double = 0.0
-    // 方向
-    var direction: Int = 0
-
-}

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

@@ -7,6 +7,8 @@ import android.view.ViewGroup
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.lifecycle.bindOptional
+import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.BaseFragment
 
 /**
@@ -28,29 +30,22 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
     ): View? {
         _view = inflater.inflate(R.layout.hold_fragment, container, false)
         initViews()
+        viewModel.holdLiveData.bindOptional(context!!) { data ->
+            (idHoldList?.adapter as HoldViewModel.HoldAdapter).update(data?.toArrayList())
+        }
         return _view
     }
 
     private fun initViews() {
         idHoldList = _view?.findViewById(R.id.id_hold_list)
-        val list: ArrayList<HoldData>? = ArrayList()
-        for (a in 1..5) {
-            val m = HoldData()
-            m.goodsName = "铁矿石" + (2105 + a)
-            m.goodsCode = "I" + (2105 + a)
-            m.lastPrice = 998.0 + a
-            m.available = 1.0 + a
-            m.totals = 5.0 + a
-            m.cost = 500.0 + a
-            m.pl = 100.0 + a
-            m.plp = (100 + a) * 0.003
-            m.holdPrice = 899.0 + a
-            m.direction = a
-            list?.add(m)
-        }
+
         val layoutManager = LinearLayoutManager(context)
         idHoldList?.layoutManager = layoutManager
-        viewModel.list = list
         idHoldList?.adapter = viewModel.getAdapter()
     }
+
+    override fun onResume() {
+        super.onResume()
+        viewModel.queryHold()
+    }
 }

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

@@ -8,28 +8,38 @@ import android.view.ViewGroup
 import android.widget.ImageView
 import android.widget.RelativeLayout
 import android.widget.TextView
+import androidx.lifecycle.MutableLiveData
 import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.business.future.FutureManager
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.FutureDetailsData
+import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
+import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.view.base.BaseViewModel
+import cn.muchinfo.rma.view.base.app.Constant
+import com.blankj.utilcode.util.SPUtils
 
 /**
  * 持仓的ViewModel
  */
 class HoldViewModel : BaseViewModel() {
 
-    var list: ArrayList<HoldData>? = null
+    val holdLiveData: MutableLiveData<List<FutureHoldData>> = MutableLiveData() // 持仓单
 
+    var list: ArrayList<FutureHoldData>? = null
+    var marketID: String? = null
     /**
      * 获取配置器。
      */
     fun getAdapter(): RecyclerView.Adapter<HoldAdapter.HoldHolder> {
-        return HoldAdapter(context, list)
+        return HoldAdapter(context)
     }
     /**
      * 通用的适配器。
      */
-    class HoldAdapter(context: Context?, list: ArrayList<HoldData>?) : RecyclerView.Adapter<HoldAdapter.HoldHolder>() {
-        private var list: ArrayList<HoldData>? = null
+    inner class HoldAdapter(context: Context?) : RecyclerView.Adapter<HoldAdapter.HoldHolder>() {
+        private var list: ArrayList<FutureHoldData>? = null
         private var inflater: LayoutInflater? = null
         private var context: Context? = null
         private var pink: Drawable? = null
@@ -37,7 +47,7 @@ class HoldViewModel : BaseViewModel() {
         private var priceRed: Int = 0
         private var priceGreen: Int = 0
         init {
-            this.list = list
+            this.list = GlobalDataCollection.instance?.futureHoldData
             this.inflater = LayoutInflater.from(context)
             this.context = context
 
@@ -51,7 +61,12 @@ class HoldViewModel : BaseViewModel() {
             return list?.size ?: 0
         }
 
-        class HoldHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
+        fun update(list: ArrayList<FutureHoldData>?) {
+            this.list = list
+            notifyDataSetChanged()
+        }
+
+        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)
             var idAvailable = itemView?.findViewById<TextView>(R.id.id_available)
@@ -64,14 +79,14 @@ class HoldViewModel : BaseViewModel() {
         }
 
         override fun onBindViewHolder(holder: HoldHolder, position: Int) {
-            holder.idGoodsName?.text = list?.get(position)?.goodsName
-            holder.idAvailable?.text = list?.get(position)?.available.toString()
-            holder.idHoldTotal?.text = list?.get(position)?.totals.toString()
-            holder.idLastPrice?.text = list?.get(position)?.lastPrice.toString()
-            holder.idCost?.text = list?.get(position)?.cost.toString()
-            holder.idPl?.text = list?.get(position)?.pl.toString()
-            holder.idPlp?.text = list?.get(position)?.plp.toString()
-            if (list?.get(position)?.direction == 0) {
+            holder.idGoodsName?.text = list?.get(position)?.goodsname
+            holder.idAvailable?.text = list?.get(position)?.enableqty.toString() // 可用(总仓可用)
+            holder.idHoldTotal?.text = list?.get(position)?.curpositionqty.toString() // 持仓(总仓数量, 期末头寸)
+            holder.idLastPrice?.text = list?.get(position)?.last.toString() // 现价
+            holder.idCost?.text = list?.get(position)?.positioncost.toString() // 持仓成本
+//            holder.idPl?.text = list?.get(position)?.pl.toString() //
+//            holder.idPlp?.text = list?.get(position)?.plp.toString() // 持仓盈亏比例
+            if (list?.get(position)?.buyorsell == 0) {
                 holder.idTransDirection?.text = context?.resources?.getString(R.string.str_buy)
             } else {
                 holder.idTransDirection?.text = context?.resources?.getString(R.string.str_sell)
@@ -84,4 +99,24 @@ class HoldViewModel : BaseViewModel() {
         }
 
     }
+
+    /**
+     * 查询持仓单
+     */
+    fun queryHold() {
+        val params = mutableMapOf<String, String>()
+        params["accountID "] = SPUtils.getInstance().getLong(Constant.SELECT_ACCOUNT_ID).toString()
+        if (marketID != null) {
+            params["marketID"] = marketID!!
+        }
+        FutureManager().queryErmcpTradePosition(params) { isSuccess, respData, _ ->
+            if (isSuccess && !respData!!.isNullOrEmpty()) {
+                list = respData as ArrayList<FutureHoldData>
+                holdLiveData.value = list
+            } else {
+                // 没有数据或者接口返回错误的时候,通知界面没有获取到数据
+
+            }
+        }
+    }
 }