zhou.xiaoning há 4 anos atrás
pai
commit
27472f4bf8

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

@@ -56,6 +56,7 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
         viewModel.holdLiveData.bindOptional(context!!) { data ->
             (idHoldList?.adapter as HoldViewModel.HoldAdapter).update(data?.toArrayList())
         }
+
         return _view
     }
 
@@ -105,6 +106,7 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
         super.onResume()
         canrefrashQuote = true
         viewModel.queryHold()
+
     }
     //主动更新数据
     fun onRefresh(){

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

@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.business.future.adapter.ChannelOrderReqData
 import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.futureOrders.DealOrderData
 import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.view.MyApplication
@@ -46,7 +47,7 @@ class HoldViewModel : BaseViewModel() {
      */
     fun makeCostInfo(data: FutureHoldData): ArrayList<OrderDetailData>? {
         val orderDetailList: ArrayList<OrderDetailData>? = ArrayList()
-        val paddingLeft = 350 // 右侧的文字,距离左侧的距离
+        val paddingLeft = 400 // 右侧的文字,距离左侧的距离
         val leftTextPadding = 0 // 左侧的文字,距离左侧的距离
 
         var m = OrderDetailData()
@@ -58,14 +59,22 @@ class HoldViewModel : BaseViewModel() {
 
         m = OrderDetailData()
         m.setLeftText(context?.getString(R.string.str_order_all_num))
-        m.setRightText(data.curpositionqty.toString() + "/" + data.curpositionqty)
+        m.setRightText(data.curtdposition.toString() + "/" + data.curpositionqty)
         m.setRightTextPadding(paddingLeft)
         m.setLeftTextPadding(leftTextPadding)
         orderDetailList?.add(m)
 
         m = OrderDetailData()
         m.setLeftText(context?.getString(R.string.str_order_all_available))
-        m.setRightText(data.enableqty.toString() + "" + data.curpositionqty)
+        m.setRightText(data.curtdposition.toString() + "/" + data.enableqty)
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        // 开仓均价
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_ava_open))
+        m.setRightText(data.openaverageprice.toString())
         m.setRightTextPadding(paddingLeft)
         m.setLeftTextPadding(leftTextPadding)
         orderDetailList?.add(m)
@@ -78,19 +87,26 @@ class HoldViewModel : BaseViewModel() {
         orderDetailList?.add(m)
 
         m = OrderDetailData()
-        m.setLeftText(context?.getString(R.string.str_hold_pl))
-        m.setRightText(data.positionpl.toString())
+        m.setLeftText(context?.getString(R.string.str_open_pl))
+        m.setRightText(data.openpl.toString())
         m.setRightTextPadding(paddingLeft)
         m.setLeftTextPadding(leftTextPadding)
         orderDetailList?.add(m)
 
         m = OrderDetailData()
-        m.setLeftText(context?.getString(R.string.str_use_amount))
-        m.setRightText(data.usedmargin.toString())
+        m.setLeftText(context?.getString(R.string.str_hold_pl))
+        m.setRightText(data.positionpl.toString())
         m.setRightTextPadding(paddingLeft)
         m.setLeftTextPadding(leftTextPadding)
         orderDetailList?.add(m)
 
+//        m = OrderDetailData()
+//        m.setLeftText(context?.getString(R.string.str_use_amount))
+//        m.setRightText(data.usedmargin.toString())
+//        m.setRightTextPadding(paddingLeft)
+//        m.setLeftTextPadding(leftTextPadding)
+//        orderDetailList?.add(m)
+
         m = OrderDetailData()
         m.setLeftText(context?.getString(R.string.str_exchange))
         m.setRightText(data.exexchangename)
@@ -109,7 +125,7 @@ class HoldViewModel : BaseViewModel() {
     }
 
     /**
-     * 通用的适配器。
+     * 持仓汇总相关成交单适配器
      */
     inner class HoldAdapter(context: Context?, fragment: Fragment) :
         RecyclerView.Adapter<HoldAdapter.HoldHolder>() {
@@ -279,7 +295,9 @@ class HoldViewModel : BaseViewModel() {
                 OrderDetail.start(
                     context!!,
                     data,
-                    context?.resources?.getString(R.string.str_order_detail_head)
+                    context?.resources?.getString(R.string.str_order_detail_head),
+                    tagData.goodsid,
+                    tagData.buyorsell
                 )
             }
 
@@ -469,5 +487,4 @@ class HoldViewModel : BaseViewModel() {
         }
     }
 
-
 }

+ 36 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/orderDeatails/OrderDetail.kt

@@ -6,8 +6,11 @@ import android.os.Bundle
 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.BaseActivity
 import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
+import cn.muchinfo.rma.view.base.future.holds.HoldViewModel
 import kotlinx.android.synthetic.main.order_detail.*
 
 /**
@@ -18,11 +21,19 @@ class OrderDetail : BaseActivity<OrderDetailModel>() {
     var data: ArrayList<OrderDetailData>? = null
     var titleName: String? = ""
 
+    private var idTradeDetailList: RecyclerView? = null // 相关成交单列表
+
     companion object {
-        fun start(context: Context, data: ArrayList<OrderDetailData>?, titleName: String?) {
+        fun start(context: Context, data: ArrayList<OrderDetailData>?, titleName: String?, goodsID: Int? = null, buyOrSell: Int? = 0) {
             val intent = Intent(context, OrderDetail::class.java)
             intent.putExtra("data", data)
             intent.putExtra("title_name", titleName)
+            if (null != goodsID) {
+                intent.putExtra("goodsid", goodsID)
+            }
+            if (null != buyOrSell) {
+                intent.putExtra("buyorsell", buyOrSell)
+            }
             context.startActivity(intent)
         }
     }
@@ -33,8 +44,13 @@ class OrderDetail : BaseActivity<OrderDetailModel>() {
         if (intent != null) {
             viewModel.orderDetailList = intent.getParcelableArrayListExtra<OrderDetailData>("data")
             titleName = intent.getStringExtra("title_name") ?: resources.getString(R.string.details)
+            // 相关成交单所需信息
+            viewModel.goodsID = intent.getIntExtra("goodsid", 0)
+            viewModel.buyOrSell = intent.getIntExtra("buyorsell", 0)
+
         }
         initViews()
+        initData()
     }
 
     private fun initViews() {
@@ -43,5 +59,24 @@ class OrderDetail : BaseActivity<OrderDetailModel>() {
         val layoutManager = LinearLayoutManager(this@OrderDetail)
         id_order_detail_list?.layoutManager = layoutManager
         id_order_detail_list?.adapter = viewModel.getCostInfoAdapter(context = this)
+
+        // 相关成交单列表
+        idTradeDetailList = this.findViewById(R.id.id_order_relation_list)
+        val tradeDetailAdapter = viewModel.getTradeDetailAdapter(this)
+        idTradeDetailList?.layoutManager = LinearLayoutManager(this)
+        idTradeDetailList?.adapter = tradeDetailAdapter
+        viewModel.tradeDeatils.bindOptional(this) { data ->
+            data?.toArrayList()?.let {
+                (idTradeDetailList?.adapter as OrderDetailModel.TradeDetailAdapter).update(
+                    it
+                )
+            }
+        }
+    }
+
+    private fun initData() {
+        if (viewModel.goodsID != 0) {
+            viewModel.queryHedgeTradeDetails(viewModel.goodsID, viewModel.buyOrSell)
+        }
     }
 }

+ 97 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/orderDeatails/OrderDetailModel.kt

@@ -4,8 +4,14 @@ import android.content.Context
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.TextView
+import androidx.lifecycle.MutableLiveData
 import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.futureOrders.DealOrderData
+import cn.muchinfo.rma.global.toShowTime
+import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.autoWidget.DetailItem
 import cn.muchinfo.rma.view.base.BaseViewModel
 import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
@@ -15,8 +21,22 @@ import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
  */
 class OrderDetailModel: BaseViewModel() {
 
-    var orderDetailList: ArrayList<OrderDetailData>? = ArrayList() // 资金信息
+    var orderDetailList: ArrayList<OrderDetailData>? = ArrayList() // 信息
 
+    /**
+     * 对应的成交单数据
+     */
+    var tradeDeatils: MutableLiveData<ArrayList<DealOrderData>> = MutableLiveData()
+
+    /**
+     * 当前商品ID
+     */
+    var goodsID: Int = 0
+
+    /**
+     * 当前买卖方向
+     */
+    var buyOrSell: Int = 0
 
 //region cost info 资金信息
 
@@ -62,4 +82,80 @@ class OrderDetailModel: BaseViewModel() {
 
     }
 //endregion
+
+    /**
+     * 查询对应的成交单信息
+     */
+    fun queryHedgeTradeDetails(goodsID: Int, buyOrSell: Int) {
+        val params = mutableMapOf<String, String>()
+        params["accountID"] = GlobalDataCollection.instance?.accountId.toString()
+        params["goodsID"] = goodsID.toString()
+        params["buyOrSell"] = buyOrSell.toString()
+
+        MyApplication.getInstance()?.futureManager?.queryErmcpTradeDetails(params) { isSuccess, respData, _ ->
+            if (!isSuccess) {
+                return@queryErmcpTradeDetails
+            }
+
+            tradeDeatils.value = respData as ArrayList<DealOrderData>
+        }
+    }
+
+    /**
+     * 相关成交单列表适合器
+     * @property list ArrayList<DealOrderData> 成交单列表
+     * @property inflater LayoutInflater? LayoutInflater
+     * @constructor
+     */
+    inner class TradeDetailAdapter(context: Context?): RecyclerView.Adapter<TradeDetailAdapter.TradeDetailHolder>() {
+        private var list: ArrayList<DealOrderData> = ArrayList()
+        private var inflater: LayoutInflater? = null
+
+        init {
+            this.inflater = LayoutInflater.from(context)
+        }
+
+        /**
+         * 持仓详情对应成交单ViewHolder
+         * @property idTradeTime TextView? 成交时间
+         * @property idTradeNumber TextView? 成交数量
+         * @property idTradePrice TextView? 成交金额
+         * @constructor
+         */
+        inner class TradeDetailHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
+            var idTradeTime = itemView?.findViewById<TextView>(R.id.id_trade_time)
+            var idTradeNumber = itemView?.findViewById<TextView>(R.id.id_trade_number)
+            var idTradePrice = itemView?.findViewById<TextView>(R.id.id_trade_price)
+        }
+
+        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TradeDetailHolder {
+            return TradeDetailHolder(inflater?.inflate(R.layout.order_detail_relation_item, parent, false))
+        }
+
+        override fun onBindViewHolder(holder: TradeDetailHolder, position: Int) {
+            holder.itemView.tag = list[position]
+            val itemData = list[position]
+
+            holder.idTradeTime?.text = itemData.tradetime?.toShowTime()
+            holder.idTradeNumber?.text = itemData.tradeqty
+            holder.idTradePrice?.text = itemData.tradeprice
+        }
+
+        override fun getItemCount(): Int {
+            return list.size
+        }
+
+        fun update(list: ArrayList<DealOrderData>) {
+            this.list = list
+            notifyDataSetChanged()
+        }
+    }
+
+    /**
+     * 获取相关成交单适配器
+     * @return RecyclerView.Adapter<TradeDetailAdapter.TradeDetailHolder>
+     */
+    fun getTradeDetailAdapter(context: Context?): RecyclerView.Adapter<TradeDetailAdapter.TradeDetailHolder> {
+        return TradeDetailAdapter(context)
+    }
 }

+ 53 - 9
RMA/app/src/main/res/layout/order_detail.xml

@@ -1,21 +1,65 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<!-- 订单详情(持仓) -->
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_height="match_parent"
     tools:ignore="RtlSymmetry">
+
     <cn.muchinfo.rma.view.autoWidget.HeadView
-        android:layout_width="match_parent"
-        app:layout_constraintTop_toTopOf="parent"
         android:id="@+id/id_head"
-        android:layout_height="wrap_content"/>
-    <androidx.recyclerview.widget.RecyclerView
         android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/id_order_detail_list"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:paddingStart="15dp"
+        app:layout_constraintTop_toBottomOf="@+id/id_head" />
+
+    <LinearLayout
+        android:id="@+id/id_order_relation_head"
+        android:layout_width="match_parent"
+        android:layout_height="22dp"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toBottomOf="@+id/id_order_detail_list">
+        <TextView
+            android:id="@+id/id_trade_time"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingLeft="15dp"
+            style="@style/HoldHeadTextStyle"
+            android:text="@string/str_deal_time" />
+
+        <TextView
+            android:id="@+id/id_trade_number"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:gravity="right"
+            style="@style/HoldHeadTextStyle"
+            android:text="@string/str_deal_num_price_1" />
+
+        <TextView
+            android:id="@+id/id_trade_price"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingRight="15dp"
+            android:gravity="right"
+            style="@style/HoldHeadTextStyle"
+            android:text="@string/str_deal_price" />
+    </LinearLayout>
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/id_order_relation_list"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
         android:paddingStart="15dp"
-        app:layout_constraintTop_toBottomOf="@+id/id_head"
         app:layout_constraintBottom_toBottomOf="parent"
-        android:layout_height="0dp"/>
+        app:layout_constraintTop_toBottomOf="@+id/id_order_relation_head" />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 30 - 0
RMA/app/src/main/res/layout/order_detail_relation_item.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 订单详情(持仓)相关成交单Item -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal" android:layout_width="match_parent"
+    android:layout_height="22dp">
+    <!-- 成交时间 -->
+    <TextView
+        android:id="@+id/id_trade_time"
+        android:layout_width="wrap_content"
+        android:layout_height="22dp"
+        android:layout_weight="1"
+        android:text="@string/str_deal_time" />
+    <!-- 成交数量 -->
+    <TextView
+        android:id="@+id/id_trade_number"
+        android:layout_width="wrap_content"
+        android:layout_height="22dp"
+        android:layout_weight="1"
+        android:gravity="center"
+        android:text="@string/str_deal_num_price_1" />
+    <!-- 成交价格 -->
+    <TextView
+        android:id="@+id/id_trade_price"
+        android:layout_width="wrap_content"
+        android:layout_height="22dp"
+        android:layout_weight="1"
+        android:paddingRight="15dp"
+        android:gravity="right"
+        android:text="@string/str_deal_price" />
+</LinearLayout>

+ 5 - 1
RMA/app/src/main/res/values/strings.xml

@@ -113,8 +113,12 @@
     <string name="str_order_all_num">今仓/总仓数量</string>
     <string name="str_order_all_available">今仓/总仓可用</string>
     <string name="str_ava_price">持仓均价(CNY)</string>
-    <string name="str_hold_pl">持仓盈亏(CNY)</string>
+    <string name="str_open_pl">逐笔浮盈(CNY)</string>
+    <string name="str_hold_pl">盯市浮盈(CNY)</string>
     <string name="str_use_amount">占用金额(CNY)</string>
     <string name="str_exchange">交易所</string>
+    <string name="str_ava_open">开仓均价(CNY)</string>
+    <string name="str_deal_num_price_1">成交数量</string>
+    <string name="str_deal_price">成交价格(CNY)</string>
 
 </resources>

+ 1 - 0
RMA/app/src/main/res/values/styles.xml

@@ -106,6 +106,7 @@
     <style name="CostValueTextStyle" parent="@android:style/Widget.TextView">
         <item name="android:textColor">@color/rma_black_33</item>
         <item name="android:textSize">13sp</item>
+        <item name="android:gravity">right</item>
     </style>
     <!--期货报价牌界面列表的文字的样式-->
     <style name="HoldHeadTextStyle" parent="@style/ListSummaryTextStyle">