소스 검색

风险管理9月28日提交代码-liu.bolan-企业风管

Liu.bolan 4 년 전
부모
커밋
bf1f4d5e65

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

@@ -1,6 +1,7 @@
 package cn.muchinfo.rma.global.data
 
-import cn.muchinfo.rma.global.data.chart.HistoryDatas
+import cn.muchinfo.rma.R
+import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import com.google.gson.annotations.SerializedName
 
 /**
@@ -194,6 +195,45 @@ data class QuoteDayData(
         return colorType
     }
 
+    /**
+     * 根据最新价和上一口价的对比获取字体颜色类型
+     * @return Int
+     */
+    fun getColorReturnInt() : Int{
+        var colorType = 1//1 黑色 2绿色 3红色
+        if (getPrice() > ontheprice){
+            colorType = R.color.rma_red_color
+        }else if (getPrice() < ontheprice){
+            colorType = R.color.rma_green_color
+        }else{
+            colorType = R.color.rma_black_33
+        }
+        return colorType
+    }
+
+
+//    //获取涨跌幅
+//    fun getUpDownValue() : String{
+//        var upDownValue = ""
+//        if (presettle == 0.0){
+//            upDownValue = "--"
+//        }else{
+//            upDownValue = getPrice().minus(presettle).toString()
+//        }
+//        return getUpDownValue()
+//    }
+//
+//    //获取涨跌幅
+//    fun getApplies() : String{
+//        var applies = ""
+//        if (presettle == 0.0){
+//            applies = ""
+//        }else{
+//            applies = ((getPrice() - presettle) / presettle * 100).toString() + "%"
+//        }
+//        return applies
+//    }
+
 
     /**
      * 根据最新价和昨结价的对比获取字体颜色类型

+ 33 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/MainViewModel.kt

@@ -2,6 +2,7 @@ package cn.muchinfo.rma.view
 
 import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.ContractTradePositionData
 import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.netcore.packet.Packet40
@@ -193,7 +194,7 @@ class MainViewModel : BaseViewModel() {
         MyApplication.getInstance()?.initializeManager?.getUserAccount(params = params) { isSuccess, respData, error ->
             isInitiaDataSuccess.postValue(isSuccess)
             if (isSuccess) {
-                if (SPUtils.getInstance().getString(Constant.oem) == "qhj" || SPUtils.getInstance().getString(Constant.oem) == "yrdz" ){
+                if (SPUtils.getInstance().getString(Constant.oem) == "qhj" || SPUtils.getInstance().getString(Constant.oem) == "yrdz" || SPUtils.getInstance().getString(Constant.oem) == "tjmd"){
                     queryContractTradePosition()
                 }
                 queryErmcpTradePosition()//第三步请求持仓头寸
@@ -232,7 +233,7 @@ class MainViewModel : BaseViewModel() {
                         Callback<Packet40> {
                         override fun onSuccess(rsp: Packet40?) {
                             val contractTradePositionDataArrayList = GlobalDataCollection.instance?.contractTradePositionDataArrayList
-
+                            queryPositionQuoteDay(contractTradePositionDataArrayList ?: arrayListOf())
                             MyApplication.getInstance()?.quoteManager?.addSubscriptQuote(
                                 "11111",
                                 contractTradePositionDataArrayList!!.map { it.goodscode ?: "" }.toSet()
@@ -254,6 +255,36 @@ class MainViewModel : BaseViewModel() {
     }
 
     /**
+     * 请求盘面信息
+     * @param first Int
+     * @param last Int
+     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun queryPositionQuoteDay(
+        list : List<ContractTradePositionData>
+    ) {
+        val goodsCodes = getgoodsCodes(list)
+        val params = mutableMapOf<String, String>().apply {
+            put("goodsCodes", goodsCodes)
+        }
+        MyApplication.getInstance()?.futureManager?.queryQuoteDay(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+
+            }
+        }
+
+    }
+
+    //订阅当前持仓汇总的行情
+    fun getgoodsCodes(list : List<ContractTradePositionData>): String {
+        var goodsCodes = ""
+        list.forEach {
+            goodsCodes = goodsCodes + it.goodscode + "," //+ DataBase.getInstance().goodsInfoDao().getGoodsInfo(it.relatedgoodsid).goodscode + ","
+        }
+        return goodsCodes
+    }
+
+    /**
      * 查询融资明细列表
      */
     fun queryContract(){

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

@@ -9,14 +9,14 @@ object Constant {
 //    const val baseurl = "http://103.40.249.123:38280/cfg?key=mtp_20" // 天津麦顿
 //    const val baseurl = "http://103.40.249.123:28280/cfg?key=mtp_20"//云融大宗
 //    const val baseurl = "http://103.40.249.123:8280/cfg?key=mtp_20"//千海金外盘
-//    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.31.93:8080/cfg?key=test_93"//李倩企业风管 18611112222
 //    const val baseurl = "http://192.168.31.104:8080/cfg?key=test_104"//李倩云融 18611112222
 //
-    const val baseurl = "http://192.168.31.135:8080/cfg?key=test_135"// 瑶姐 云融 190000000001 123456
+//    const val baseurl = "http://192.168.31.135:8080/cfg?key=test_135"// 瑶姐 云融 190000000001 123456
 
 //    const val baseurl = "http://192.168.31.175:8080/cfg?key=test_175" // 8888  123123
 //    const val baseurl = "http://192.168.31.223:8080/cfg?key=test_223"

+ 129 - 8
RMA/app/src/main/java/cn/muchinfo/rma/view/base/hnstmain/HnstMainFragment.kt

@@ -21,11 +21,13 @@ import cn.muchinfo.rma.global.data.BankAccountSignData
 import cn.muchinfo.rma.global.data.BrokerApplyData
 import cn.muchinfo.rma.global.data.ContractTradePositionData
 import cn.muchinfo.rma.global.data.OrderQuoteData
+import cn.muchinfo.rma.global.toPercentage
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.autoWidget.utils.CopyButtonLibrary
 import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.BaseFragment
+import cn.muchinfo.rma.view.base.app.Constant
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.hnstmain.account.RydzAccountActivity
 import cn.muchinfo.rma.view.base.hnstmain.bookingwarehouse.BookingWarehouseActivity
@@ -51,10 +53,7 @@ import cn.muchinfo.rma.view.base.warehousereceipt.BusinessHallActivity
 import cn.muchinfo.rma.view.eventbus.EventConstent
 import cn.muchinfo.rma.view.eventbus.MessageEvent
 import cn.muchinfo.rma.view.eventbus.QuoteMessageEvent
-import com.blankj.utilcode.util.ActivityUtils
-import com.blankj.utilcode.util.AppUtils
-import com.blankj.utilcode.util.PhoneUtils
-import com.blankj.utilcode.util.ToastUtils
+import com.blankj.utilcode.util.*
 import mtp.polymer.com.autowidget.dialog.creatSelectAccountDialog
 import mtp.polymer.com.autowidget.dialog.createLoadingDialog
 import mtp.polymer.com.autowidget.utils.bindTaskStatus
@@ -80,7 +79,6 @@ class HnstMainFragment : BaseFragment<HnstMainViewmodel>() {
         super.onResume()
         viewModel.getUserAccount()
         viewModel.resetAccountData()
-        viewModel.queryContractTradePosition()
     }
 
     override fun onDestroy() {
@@ -323,7 +321,11 @@ class HnstMainFragment : BaseFragment<HnstMainViewmodel>() {
                             verticalLayout {
                                 gravity = Gravity.LEFT
                                 textView {
-                                    text = "总市值"
+                                    if (SPUtils.getInstance().getString(Constant.oem) == "tjmd"){
+                                        text = "净值"
+                                    }else{
+                                        text = "总市值"
+                                    }
                                     textSizeAuto = 29
                                     textColorStr = "#A1B1C5"
                                 }.lparams(wrapContent, wrapContent) {
@@ -353,6 +355,125 @@ class HnstMainFragment : BaseFragment<HnstMainViewmodel>() {
                         }.lparams(matchParent, autoSize(200))
 
                         linearLayout {
+                            if (SPUtils.getInstance().getString(Constant.oem) == "tjmd"){
+                                visibility = View.VISIBLE
+                            }else{
+                                visibility = View.GONE
+                            }
+                            verticalLayout {
+                                onThrottleFirstClick {
+                                    val intent = Intent()
+                                    intent.setClass(context, RydzAccountActivity::class.java)
+                                    ActivityUtils.startActivity(intent)
+                                }
+                                gravity = Gravity.LEFT
+                                textView {
+                                    text = "占用"
+                                    textSizeAuto = 29
+                                    textColorStr = "#A1B1C5"
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginStart = autoSize(36)
+                                    topMargin = autoSize(36)
+                                }
+
+                                textView {
+                                    /**
+                                     * 占用-usedmargin
+                                     */
+                                    viewModel.usedAccountData.bindOptional(context) {
+                                        if (isOpenEye.value == true){
+                                            text = NumberUtils.roundNum(
+                                                NumberUtils.doubleDistortion(
+                                                    it?.usedmargin.toString()
+                                                ), 2
+                                            )
+                                        }else{
+                                            text = "****"
+                                        }
+                                    }
+                                    textSizeAuto = 34
+                                    textColorStr = "#00C280"
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginStart = autoSize(36)
+                                    topMargin = autoSize(10)
+                                }
+                            }.lparams(0, autoSize(200), 1f)
+
+                            verticalLayout {
+                                gravity = Gravity.LEFT
+                                textView {
+                                    text = "浮动盈亏"
+                                    textSizeAuto = 29
+                                    textColorStr = "#A1B1C5"
+                                }.lparams(wrapContent, wrapContent) {
+                                    topMargin = autoSize(36)
+                                }
+
+                                textView {
+                                    /**
+                                     * 浮动盈亏
+                                     */
+                                    viewModel.usedAccountData.bindOptional(context) {
+                                        if (isOpenEye.value == true){
+                                            text = NumberUtils.roundNum(
+                                                NumberUtils.doubleDistortion(it?.keep_watch_profit_and_loss?.toString()),
+                                                2
+                                            )
+                                        }else{
+                                            text = "****"
+                                        }
+                                    }
+                                    textSizeAuto = 34
+                                    textColorStr = "#FF1414"
+                                }.lparams(wrapContent, wrapContent) {
+                                    topMargin = autoSize(10)
+                                }
+                            }.lparams(0, autoSize(200), 1f)
+
+                            verticalLayout {
+                                gravity = Gravity.LEFT
+                                textView {
+                                    text = "风险率"
+                                    textSizeAuto = 29
+                                    textColorStr = "#A1B1C5"
+                                }.lparams(wrapContent, wrapContent) {
+                                    topMargin = autoSize(36)
+                                }
+
+                                textView {
+                                    /**
+                                     * 风险率
+                                     */
+                                    viewModel.usedAccountData.bindOptional(context) {
+                                        if (isOpenEye.value == true){
+                                            ///// 0 - 占用/净值  1 - 净值/占用
+                                            val parmasvalue = GlobalDataCollection.instance?.getSystemParamsValue("143")
+                                            var risk = 0.0
+                                            if (parmasvalue == "0"){
+                                                if (it?.valueOfposition != 0.0){
+                                                    risk = it?.usedmargin?.div(it.valueOfposition) ?: 0.0
+                                                }
+
+                                            }else if (parmasvalue == "1"){
+                                                if (it?.valueOfposition != 0.0){
+                                                    risk = it?.valueOfposition?.div(it.usedmargin) ?: 0.0
+                                                }
+                                            }
+
+                                            text = risk.toString().toPercentage()
+                                        }else{
+                                            text = "****"
+                                        }
+                                    }
+                                    textSizeAuto = 34
+                                    textColorStr = "#FF1414"
+                                }.lparams(wrapContent, wrapContent) {
+                                    topMargin = autoSize(10)
+                                }
+                            }.lparams(0, autoSize(200), 1f)
+                        }.lparams(matchParent, autoSize(200))
+
+                        linearLayout {
 
                             linearLayout {
                                 onThrottleFirstClick {
@@ -403,7 +524,7 @@ class HnstMainFragment : BaseFragment<HnstMainViewmodel>() {
 
                         view {
                             background = resources.getDrawable(R.color.rma_item_bg)
-                        }.lparams(com.qmuiteam.qmui.kotlin.matchParent, autoSize(20))
+                        }.lparams(matchParent, autoSize(20))
 
                         linearLayout {
 
@@ -503,7 +624,7 @@ class HnstMainFragment : BaseFragment<HnstMainViewmodel>() {
                                     topMargin = autoSize(10)
                                 }
                             }.lparams(0, autoSize(200), 1f)
-                        }.lparams(com.qmuiteam.qmui.kotlin.matchParent, autoSize(200))
+                        }.lparams(matchParent, autoSize(200))
 
                         view {
                             background = resources.getDrawable(R.color.rma_item_bg)

+ 25 - 6
RMA/app/src/main/java/cn/muchinfo/rma/view/base/hnstmain/HnstMainViewmodel.kt

@@ -3,6 +3,7 @@ package cn.muchinfo.rma.view.base.hnstmain
 import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.AccountData
+import cn.muchinfo.rma.global.data.ContractTradePositionData
 import cn.muchinfo.rma.global.data.UserAccountData
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.view.MyApplication
@@ -72,18 +73,36 @@ class HnstMainViewmodel : BaseViewModel(){
         }
     }
 
+
+
     /**
-     * 查询合约汇总
+     * 请求盘面信息
+     * @param first Int
+     * @param last Int
+     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
      */
-    fun queryContractTradePosition(){
-        val params = mutableMapOf<String,String>().apply {
-            put("accountID", GlobalDataCollection.instance?.accountId?.toString() ?: "")
+    fun queryPositionQuoteDay(
+        list : List<ContractTradePositionData>
+    ) {
+        val goodsCodes = getgoodsCodes(list)
+        val params = mutableMapOf<String, String>().apply {
+            put("goodsCodes", goodsCodes)
         }
-        MyApplication.getInstance()?.contractGoodsManager?.queryContractTradePosition(params = params){ isSuccess, respData, error ->
-            if (isSuccess){
+        MyApplication.getInstance()?.futureManager?.queryQuoteDay(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
                 resetAccountData()
             }
         }
+
+    }
+
+    //订阅当前持仓汇总的行情
+    fun getgoodsCodes(list : List<ContractTradePositionData>): String {
+        var goodsCodes = ""
+        list.forEach {
+            goodsCodes = goodsCodes + it.goodscode + "," //+ DataBase.getInstance().goodsInfoDao().getGoodsInfo(it.relatedgoodsid).goodscode + ","
+        }
+        return goodsCodes
     }
 
     /**

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

@@ -67,7 +67,7 @@ class ReferenceViewModel : BaseViewModel(){
             }
         }
 
-        list?.subList(first, last)?.let { addSubscriptQuote(tag = tag, goodsInfoList = it) }
+        list.subList(first, last).let { addSubscriptQuote(tag = tag, goodsInfoList = it) }
     }
 
     //获取本商品的盘面信息的同时,还要获取关联商品的盘面信息

+ 5 - 38
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/tjmd/TjmdDemoData.kt

@@ -2,43 +2,10 @@ package cn.muchinfo.rma.view.base.home.tjmd
 
 import android.os.Parcel
 import android.os.Parcelable
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 
 data class TjmdDemoData(
-    var id : String? = "",
-    var goodsName : String? = "",//名字
-    var price : Double? = 0.0,//价格
-    var gains : Double? = 0.0,//涨幅
-    var forehead : Double? = 0.0//涨跌额
-) : Parcelable{
-    constructor(parcel: Parcel) : this(
-        parcel.readString(),
-        parcel.readString(),
-        parcel.readValue(Double::class.java.classLoader) as? Double,
-        parcel.readValue(Double::class.java.classLoader) as? Double,
-        parcel.readValue(Double::class.java.classLoader) as? Double
-    ) {
-    }
-
-    override fun writeToParcel(parcel: Parcel, flags: Int) {
-        parcel.writeString(id)
-        parcel.writeString(goodsName)
-        parcel.writeValue(price)
-        parcel.writeValue(gains)
-        parcel.writeValue(forehead)
-    }
-
-    override fun describeContents(): Int {
-        return 0
-    }
-
-    companion object CREATOR : Parcelable.Creator<TjmdDemoData> {
-        override fun createFromParcel(parcel: Parcel): TjmdDemoData {
-            return TjmdDemoData(parcel)
-        }
-
-        override fun newArray(size: Int): Array<TjmdDemoData?> {
-            return arrayOfNulls(size)
-        }
-    }
-
-}
+    var goodsid : String = "",//id
+    var isClick : Int? = 0,//是否点击
+    var goodsInfo : GoodsInfo? = GoodsInfo()//商品信息
+)

+ 79 - 13
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/tjmd/TjmdHomeFragment.kt

@@ -48,6 +48,7 @@ import cn.muchinfo.rma.view.base.home.yrdz.market.IndexData
 import cn.muchinfo.rma.view.base.home.yrdz.market.IndexViewHolder
 import cn.muchinfo.rma.view.base.home.yrdz.market.YrdzMarketFragment
 import cn.muchinfo.rma.view.eventbus.MainTabSelectMessageEvent
+import cn.muchinfo.rma.view.eventbus.QuoteMessageEvent
 import com.blankj.utilcode.util.*
 import com.facebook.drawee.view.SimpleDraweeView
 import com.github.aachartmodel.aainfographics.aachartcreator.*
@@ -58,6 +59,8 @@ import com.qmuiteam.qmui.widget.tab.QMUITabSegment
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
 import mtp.polymer.com.information_management.hnstocks.message.MessageDetailsActivity
 import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
 import org.jetbrains.anko.*
 import org.jetbrains.anko.support.v4.UI
 import org.jetbrains.anko.support.v4.viewPager
@@ -78,14 +81,23 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
 
     lateinit var segment: QMUITabSegment
 
+    var fistShow: Int = 0
+    var lastShow: Int = 0
+
     var selectedTabIndex: Int = 0
     private lateinit var viewPager: ViewPager
 
     lateinit var noticeViewFlipper : ViewFlipper
 
+    lateinit var dataRecyclerview : RecyclerView
+
+    val thisTag by lazy {
+        "TjmdHomeFragment"
+    }
+
 
     //天津麦顿首页参考行情adapter
-    private val tjmdHomeMarketViewHolder: BaseAdapter<GoodsInfo, TjmdHomeMarketViewHolder> =
+    private val tjmdHomeMarketViewHolder: BaseAdapter<TjmdDemoData, TjmdHomeMarketViewHolder> =
         BaseAdapter { _, _ ->
             TjmdHomeMarketViewHolder(
                 this.getAppCompatActivity(),
@@ -94,7 +106,7 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
         }
 
     //掉期商品合约列表adapter
-    private val tjmdHomeSonAdapter: BaseAdapter<String, TjmdHomeSonViewHolder> =
+    private val tjmdHomeSonAdapter: BaseAdapter<GoodsInfo, TjmdHomeSonViewHolder> =
         BaseAdapter { _, _ ->
             TjmdHomeSonViewHolder(
                 this.getAppCompatActivity(),
@@ -102,6 +114,32 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
             )
         }
 
+    override fun onDestroy() {
+        super.onDestroy()
+        EventBus.getDefault().unregister(this)
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        EventBus.getDefault().register(this)
+    }
+
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onQuoteMessageEvent(quoteMessageEvent: QuoteMessageEvent) {
+        /** 行情推送过来的goodsid **/
+        quoteMessageEvent.goodsid.forEach { goodid ->
+            LogUtils.eTag("dadafafsjhdkjahkjdhak",goodid)
+            //找到相应商品信息
+            val goodsInfo = viewModel.dataList.value?.find { it.goodsInfo?.goodsid == goodid }
+            viewModel.dataList.value?.indexOf(goodsInfo)?.let {
+                if (it != -1) {//刷新相应item
+                    tjmdHomeMarketViewHolder?.notifyItemChanged(it)
+                }
+            }
+        }
+
+    }
+
     private fun initViewFlipper(notice: List<NoticeData>) {
         for (i in 0 until notice.size) {
             val view = TextView(context)
@@ -143,7 +181,10 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
     ): View? {
         return UI {
             viewModel.getBanner()
-            viewModel.setDataList()
+
+            viewModel.setDataList(thisTag){isCompleted, err ->
+
+            }
 
             viewModel.queryNotice()
             verticalLayout {
@@ -438,21 +479,45 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
                                 topMargin = autoSize(40)
                             }
 
+                            view {
+                                background = resources.getDrawable(R.color.rma_hint_line_color_eee)
+                            }.lparams(matchParent, autoSize(20))
 
                             recyclerView {
+                                dataRecyclerview = this
                                 background = resources.getDrawable(R.color.white)
                                 adapter = tjmdHomeMarketViewHolder
                                 layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
+
+                                addOnScrollListener(object : RecyclerView.OnScrollListener() {
+                                    override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
+                                        super.onScrollStateChanged(recyclerView, newState)
+                                        // DES: 找出当前可视Item位置
+                                        val linearLayoutManager = dataRecyclerview!!.layoutManager as LinearLayoutManager
+                                        if (newState == RecyclerView.SCROLL_STATE_IDLE) {// 这个判断是当recyclerview不滚动时
+                                            fistShow = linearLayoutManager.findFirstVisibleItemPosition()//获取第一个显示条目
+                                            lastShow = linearLayoutManager.findLastVisibleItemPosition()//获取最后一个显示条目
+                                            if (fistShow != -1 && lastShow != -1) {
+                                                viewModel.queryQuoteDay(
+                                                    tag = thisTag ?: "",
+                                                    first = fistShow,
+                                                    last = lastShow,
+                                                    list = viewModel.dataList.value ?: arrayListOf()
+                                                ) { isCompleted, err ->
+                                                    if (isCompleted) {
+                                                        dataRecyclerview.adapter?.notifyItemRangeChanged(fistShow, lastShow)
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                })
                             }.lparams(matchParent, autoSize(300))
 
                             viewModel.dataList.bindOptional(context){
-//                                tjmdHomeMarketViewHolder.setNewData(it)
+                                tjmdHomeMarketViewHolder.setNewData(it)
                             }
 
-
-                            imageView {
-                                imageResource = R.mipmap.tjmd_demo_image
-                            }.lparams(matchParent, autoSize(380))
                             chartview {
                                 visibility = View.GONE
                                 val aaChartModel = AAChartModel()
@@ -476,15 +541,16 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
                                     )
 
                                 viewModel.wrAverageTradePriceDataList.bindOptional(context) {
+                                    if (it?.size ?: 0 > 0){
+                                        visibility = View.VISIBLE
+                                    }
                                     val list = it
                                     val totalexposureelement = AASeriesElement()
                                         .lineWidth(2f)
                                         .name("成交均价")
                                         .step(true)
-                                        .data(list?.map { it.price }!!.toTypedArray())
-
-//                aaChartModel.tooltipValueSuffix(resp.enumdicname)
-                                    aaChartModel.categories(list.map { it.time }.toTypedArray())
+                                        .data(list?.map { it.s?.toDouble() ?: 0.0 }!!.toTypedArray())
+                                    aaChartModel.categories(list.map { it.getTime() }.toTypedArray())
                                     aaChartModel.series(arrayOf(totalexposureelement))
                                     aa_drawChartWithChartModel(aaChartModel)
                                 }
@@ -504,7 +570,7 @@ class TjmdHomeFragment : BaseFragment<TjmdHomeViewModel>(){
                             }
                         }
                     }.lparams(matchParent, matchParent)
-                    viewModel.resetChartViewData()
+
                 }
             }
         }.view

+ 124 - 39
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/tjmd/TjmdHomeMarketViewHolder.kt

@@ -1,76 +1,161 @@
 package cn.muchinfo.rma.view.base.home.tjmd
 
 import android.view.Gravity
+import android.view.View
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.QuoteDayData
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.autoSize
+import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.autoWidget.textColorInt
 import cn.muchinfo.rma.view.autoWidget.textSizeAuto
+import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.home.contract.emptyView
+import cn.muchinfo.rma.view.base.home.contract.verticalEmptyView
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
 import org.jetbrains.anko.*
 
-class TjmdHomeMarketViewHolder(private val activity : AppCompatActivity,private val viewModel: TjmdHomeViewModel) : BaseViewHolder<GoodsInfo>(activity){
+class TjmdHomeMarketViewHolder(private val activity : AppCompatActivity,private val viewModel: TjmdHomeViewModel) : BaseViewHolder<TjmdDemoData>(activity){
     override val itemSize: IntArray = intArrayOf(autoSize(300), autoSize(200))
 
+    //涨跌额
+    lateinit var rise_and_fall_the_forehead : TextView
+
+    //涨跌幅
+    lateinit var applies_textview : TextView
+
+
     override fun _FrameLayout.createContentView() {
-        verticalLayout {
-            gravity = Gravity.CENTER_HORIZONTAL
-            //商品名称
-            textView {
-                data.bindOptional(context){
-                    text = it?.goodsname
-                }
-                textSizeAuto = 34
-                textColorInt = R.color.rma_black_33
-            }.lparams(wrapContent, wrapContent){
-                topMargin = 25
-            }
 
-            //现价
-            textView {
-                data.bindOptional(context){
+        linearLayout {
+            gravity = Gravity.CENTER_VERTICAL
+            onThrottleFirstClick {
+                viewModel.setOnItemClick(goodsid = data.value?.goodsid ?: "")
+            }
 
-//                    text = it?.price.toString()
+            data.bindOptional(context){
+                if (it?.isClick == 1){
+                    backgroundResource = R.drawable.tjmd_home_enter_bg
+                }else{
+                    background = resources.getDrawable(R.color.white)
                 }
-                textSizeAuto = 34
-                textColorInt = R.color.rma_red_color
-            }.lparams(wrapContent, wrapContent){
-                topMargin = autoSize(15)
             }
-
-            linearLayout {
-                emptyView()
-
-                //涨跌额
+            verticalLayout {
+                gravity = Gravity.CENTER_HORIZONTAL
+                //商品名称
                 textView {
                     data.bindOptional(context){
-//                        text = it?.forehead.toString()
+                        text = it?.goodsInfo?.goodsname
                     }
-                    textSizeAuto = 27
-                    textColorInt = R.color.rma_red_color
+                    textSizeAuto = 34
+                    textColorInt = R.color.rma_black_33
                 }.lparams(wrapContent, wrapContent){
-                    marginEnd = autoSize(10)
+                    topMargin = 25
                 }
 
-                //涨跌幅
+                //现价
                 textView {
-                    data.bindOptional(context){
-//                        text = it?.gains.toString()
+                    data.bindOptional(context){data ->
+                        val quotesList = GlobalDataCollection.instance?.goodsInfoAndQuotesList
+                        //获取盘面信息
+                        var quoteDayData: QuoteDayData? = null
+                        quotesList?.forEach {
+                            if (data?.goodsInfo?.goodscode == it.outgoodscode){
+                                quoteDayData = it?.quoteDayData ?: QuoteDayData()
+                            }
+                        }
+
+                        if (quoteDayData != null){
+                            text = quoteDayData?.getPrice().toString()
+                            textColorInt = quoteDayData?.getColorReturnInt() ?: R.color.rma_black_33
+                            if (quoteDayData?.presettle == 0.0){
+                                rise_and_fall_the_forehead.textColorInt = R.color.rma_black_33
+                                applies_textview.textColorInt = R.color.rma_black_33
+                                rise_and_fall_the_forehead.text = "--"
+                                applies_textview.text = "--"
+                            }else{
+                                val upDownValue = quoteDayData?.getPrice()?.minus(quoteDayData?.presettle ?: 0.0) ?: 0.0
+                                if (upDownValue > 0){
+                                    rise_and_fall_the_forehead.textColorInt = R.color.rma_red_color
+                                    applies_textview.textColorInt = R.color.rma_red_color
+                                }else if (upDownValue < 0){
+                                    rise_and_fall_the_forehead.textColorInt = R.color.rma_green_color
+                                    applies_textview.textColorInt = R.color.rma_green_color
+                                }else{
+                                    rise_and_fall_the_forehead.textColorInt = R.color.rma_black_33
+                                    applies_textview.textColorInt = R.color.rma_black_33
+                                }
+
+                                rise_and_fall_the_forehead.textColorInt = quoteDayData?.getColorReturnInt() ?: R.color.rma_black_33
+
+                                rise_and_fall_the_forehead.text = NumberUtils.roundNum( upDownValue,2) + "%"
+                                applies_textview.text = NumberUtils.roundNum(quoteDayData?.getPrice()?.minus(quoteDayData?.presettle ?: 0.0)?.div(quoteDayData?.presettle ?: 1.0) ?: 0.0,2)
+                            }
+                        }else{
+                            text = "--"
+                            textColorInt = R.color.rma_black_33
+                            rise_and_fall_the_forehead.text = "--"
+                            rise_and_fall_the_forehead.textColorInt = R.color.rma_black_33
+                            applies_textview.text = "--"
+                            applies_textview.textColorInt = R.color.rma_black_33
+                        }
+
                     }
-                    textSizeAuto = 27
+                    textSizeAuto = 34
                     textColorInt = R.color.rma_red_color
                 }.lparams(wrapContent, wrapContent){
-                    marginStart = autoSize(10)
+                    topMargin = autoSize(15)
                 }
 
-                emptyView()
-            }.lparams(matchParent, wrapContent){
-                topMargin = 18
-            }
+                linearLayout {
+                    emptyView()
+
+                    //涨跌额
+                    textView {
+                        rise_and_fall_the_forehead = this
+                        textSizeAuto = 27
+                        textColorInt = R.color.rma_red_color
+                    }.lparams(wrapContent, wrapContent){
+                        marginEnd = autoSize(10)
+                    }
+
+                    //涨跌幅
+                    textView {
+                        applies_textview = this
+                        textSizeAuto = 27
+                        textColorInt = R.color.rma_red_color
+                    }.lparams(wrapContent, wrapContent){
+                        marginStart = autoSize(10)
+                    }
+
+                    emptyView()
+                }.lparams(matchParent, wrapContent){
+                    topMargin = 18
+                }
+
+                verticalEmptyView()
+
+                view {
+                    data.bindOptional(context){
+                        if (it?.isClick == 1){
+                            visibility = View.VISIBLE
+                        }else{
+                            visibility = View.GONE
+                        }
+                    }
+                    background = resources.getDrawable(R.color.rma_blue_color)
+                }.lparams(autoSize(299), autoSize(2))
+            }.lparams(autoSize(299), autoSize(200))
+
+            view {
+                background = resources.getDrawable(R.color.rma_gray_color)
+            }.lparams(autoSize(1), autoSize(100))
         }.lparams(autoSize(300), autoSize(200))
+
     }
 
 }

+ 18 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/tjmd/TjmdHomeSonViewHolder.kt

@@ -1,27 +1,43 @@
 package cn.muchinfo.rma.view.base.home.tjmd
 
+import android.content.Intent
 import android.view.Gravity
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
+
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.autoSize
+import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.autoWidget.textColorInt
 import cn.muchinfo.rma.view.autoWidget.textSizeAuto
+import cn.muchinfo.rma.view.base.yrdzpurchase.swaps.business.SwapsBusinessHallActivity
+import com.blankj.utilcode.util.ActivityUtils
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
 import org.jetbrains.anko._FrameLayout
 import org.jetbrains.anko.linearLayout
 import org.jetbrains.anko.textView
 
-class TjmdHomeSonViewHolder(private val activity : AppCompatActivity,private val viewModel: TjmdHomeViewModel) : BaseViewHolder<String>(activity){
+class TjmdHomeSonViewHolder(private val activity : AppCompatActivity,private val viewModel: TjmdHomeViewModel) : BaseViewHolder<GoodsInfo>(activity){
     override val itemSize: IntArray = intArrayOf(autoSize(300), autoSize(100))
 
     override fun _FrameLayout.createContentView() {
         linearLayout {
+            onThrottleFirstClick {
+                val quoteGoodsListDataList = GlobalDataCollection.instance!!.quoteGoodsListDataArrayList
+                val intent = Intent()
+                intent.putExtra("goodsId", data.value?.goodsid.toString())
+                intent.putExtra("goodsCode", data.value?.goodscode)
+                intent.putExtra("quoteGoodsListData", quoteGoodsListDataList?.find { data.value?.goodsid.toString() == it?.goodsid })
+                intent.setClass(context, SwapsBusinessHallActivity::class.java)
+                ActivityUtils.startActivity(intent)
+            }
             gravity = Gravity.CENTER
             textView {
                 gravity = Gravity.CENTER
                 data.bindOptional(context){
-                    text = it
+                    text = it?.goodsname
                 }
                 textSizeAuto = 30
                 textColorInt = R.color.rma_gray_color

+ 129 - 23
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/tjmd/TjmdHomeViewModel.kt

@@ -5,6 +5,9 @@ import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.BannerData
 import cn.muchinfo.rma.global.data.NoticeData
 import cn.muchinfo.rma.global.data.WrAverageTradePriceData
+import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
+import cn.muchinfo.rma.global.data.chart.HistoryDatas
+import cn.muchinfo.rma.global.database.DataBase
 import cn.muchinfo.rma.netManage.base.ResponseCallback
 import cn.muchinfo.rma.netManage.utils.MyOkHttpUtils
 import cn.muchinfo.rma.view.MyApplication
@@ -15,6 +18,8 @@ import cn.muchinfo.rma.view.base.app.Constant
 import cn.muchinfo.rma.view.base.home.yrdz.market.IndexData
 import com.blankj.utilcode.util.LogUtils
 import com.blankj.utilcode.util.SPUtils
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
 import mtp.polymer.com.autowidget.utils.TaskUiModel
 import okhttp3.Call
 import java.lang.Exception
@@ -38,38 +43,139 @@ class TjmdHomeViewModel : BaseViewModel(){
      */
     val noticeDataList : MutableLiveData<List<NoticeData>> = MutableLiveData()
 
-    fun setDataList(){
 
-        val list = arrayListOf(
-            TjmdDemoData(goodsName = "橡胶2019",price = 12434.0,gains = 0.0021,forehead = +132.2,id = "1"),
-            TjmdDemoData(goodsName = "焦炭2019",price = 4164.2,gains = 0.023,forehead = +113.2,id = "2"),
-            TjmdDemoData(goodsName = "棕榈油",price = 4164.2,gains = 0.023,forehead = +113.2,id = "2")
-        )
+    val sonItemList : MutableLiveData<List<GoodsInfo>> = MutableLiveData()
 
+
+    fun setOnItemClick(goodsid : String){
+        val newDataList = arrayListOf<TjmdDemoData>()
+        dataList.value?.forEach {
+            if (it.goodsid == goodsid){
+                newDataList.add(it.copy(isClick = 1))
+            }else{
+                newDataList.add(it.copy(isClick = 0))
+            }
+        }
+        dataList.postValue(newDataList)
+    }
+
+    //天津麦顿首页初始化参考行情以及掉期商品数据
+    fun setDataList(tag: String,callback: (isCompleted: Boolean, err: Error?) -> Unit){
+        //组装掉期商品
+        val sonlist = arrayListOf<GoodsInfo>()
+        val allList = DataBase.getInstance().goodsInfoDao().all
+        //需要知道掉期trademodel
+        allList.forEach {data ->
+            if (data.trademode == 46 && data.goodsstatus == 3){
+                sonlist.add(data)
+            }
+        }
+        sonItemList.postValue(sonlist)
+
+        //组装参考行情商品
+        val list = arrayListOf<TjmdDemoData>()
+        allList.forEach {data ->
+            if (data.trademode == 99 && data.goodsstatus == 3){
+                if (allList.indexOf(data) == 0){
+                    list.add(TjmdDemoData(goodsid = data.goodsid.toString(),isClick = 1,goodsInfo = data))
+                }else{
+                    list.add(TjmdDemoData(goodsid = data.goodsid.toString(),isClick = 0,goodsInfo = data))
+                }
+            }
+        }
         dataList.postValue(list)
+        if (list.size > 0){
+            queryKChartData(list.get(0).goodsInfo?.goodscode ?: "","11")
+        }
+
+        if (list.size > 4){
+            queryQuoteDay(tag,0,10,list){isCompleted, err ->
+                callback(isCompleted, err)
+            }
+        }else{
+            queryQuoteDay(tag,0,list.size,list){isCompleted, err ->
+                callback(isCompleted, err)
+            }
+        }
+
+    }
+
+    /**
+     * 请求盘面信息
+     * @param first Int
+     * @param last Int
+     * @param callback Function2<[@kotlin.ParameterName] Boolean, [@kotlin.ParameterName] Error?, Unit>
+     */
+    fun queryQuoteDay(
+        tag: String,
+        first: Int,
+        last: Int,
+        list : List<TjmdDemoData> = arrayListOf(),
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ) {
+        val goodsCodes = getgoodsCodes(first, last,list)
+        val params = mutableMapOf<String, String>().apply {
+            put("goodsCodes", goodsCodes)
+        }
+        MyApplication.getInstance()?.futureManager?.queryQuoteDay(params = params) { isSuccess, respData, error ->
+            if (isSuccess) {
+                callback(true, null)
+            } else {
+                callback(false, error)
+            }
+        }
+
+        list.subList(first, last).let { addSubscriptQuote(tag = tag, goodsInfoList = it) }
+    }
+
+    //获取本商品的盘面信息的同时,还要获取关联商品的盘面信息
+    fun getgoodsCodes(first: Int, last: Int,list : List<TjmdDemoData>): String {
+        var goodsCodes = ""
+        val newList = list.subList(first, last)
+        newList.forEach {
+            goodsCodes = goodsCodes + it.goodsInfo?.goodscode + ","
+        }
+        return goodsCodes
+    }
+
+    /**
+     * 订阅行情
+     * @param tag String
+     * @param goodsInfoList List<GoodsInfo>
+     */
+    fun addSubscriptQuote(tag: String, goodsInfoList: List<TjmdDemoData>) {
+        GlobalScope.launch {
+            MyApplication.getInstance()?.quoteManager?.addSubscriptQuote(
+                tag = tag, goodsCodeSet = goodsInfoList.map { it.goodsInfo?.goodscode ?: "" }.toSet()
+            ) { isCompleted, err ->
+
+            }
+        }
     }
 
 
+
     /**
      * 历史走势图
      */
-    val wrAverageTradePriceDataList : MutableLiveData<List<ChartViewData>> = MutableLiveData()
-
-    val sonItemList : MutableLiveData<List<String>> = MutableLiveData()
-
-    fun resetChartViewData(){
-        val chartList = arrayListOf(
-            ChartViewData(price = 12334.2,time = "09-01",gains = "1.2%"),
-            ChartViewData(price = 12326.4,time = "09-02",gains = "0.2%"),
-            ChartViewData(price = 12462.3,time = "09-03",gains = "0.22%"),
-            ChartViewData(price = 12663.4,time = "09-04",gains = "0.29%"),
-            ChartViewData(price = 12902.3,time = "09-05",gains = "1.2%"),
-            ChartViewData(price = 14361.5,time = "09-06",gains = "2.2%"),
-            ChartViewData(price = 11346.9,time = "09-07",gains = "2.8%")
-        )
-        wrAverageTradePriceDataList.postValue(chartList)
-        val sonItemDataList = arrayListOf<String>("橡胶20天","橡胶30天","橡胶60天","焦炭20天","焦炭30天","焦炭60天","棕榈油20天","棕榈油30天","棕榈油60天")
-        sonItemList.postValue(sonItemDataList)
+    val wrAverageTradePriceDataList : MutableLiveData<List<HistoryDatas>> = MutableLiveData()
+
+
+    /**
+     * 请求k线数据
+     */
+    fun queryKChartData(goodsCode: String, type: String){
+        val params = mutableMapOf<String, String>().apply {
+            put("goodsCode", goodsCode)
+            put("cycleType", type)
+            put("count", "30")
+            put("isAsc", "true")
+        }
+        MyApplication.getInstance()?.chartManager?.queryHistoryDatas(params = params) { isSuccess, respData, _ ->
+            if (isSuccess) {
+                wrAverageTradePriceDataList.postValue(respData)
+            }
+        }
     }
 
     /**

+ 5 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/eventbus/EventConstent.kt

@@ -41,4 +41,9 @@ object EventConstent {
      * 刷新贸易圈列表的更新
      */
     const val refresh_circle_list = "refresh_circle_list"
+
+    /**
+     * 通知我的页面请求一次持仓合约的盘面
+     */
+    const val refresh_contractTradePositionData = "refresh_contractTradePositionData"
 }

+ 10 - 0
RMA/app/src/main/res/drawable/tjmd_home_enter_bg.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!--left to right-->
+    <gradient
+        android:angle="90"
+        android:endColor="@android:color/white"
+        android:startColor="#DDFFF4" />
+    <corners android:radius="4dp" />
+</shape>