Преглед на файлове

风险管理11月1日提交代码-liu.bolan-天津麦顿/企业风管6期开发

Liu.bolan преди 4 години
родител
ревизия
dd5ed18ed7
променени са 29 файла, в които са добавени 4437 реда и са изтрити 402 реда
  1. 2 0
      RMA/app/src/main/AndroidManifest.xml
  2. 56 0
      RMA/app/src/main/assets/errormessage.json
  3. 35 0
      RMA/app/src/main/java/cn/muchinfo/rma/business/commodity/CommodityManager.kt
  4. 55 1
      RMA/app/src/main/java/cn/muchinfo/rma/business/commodity/adapter/CommodityAdapter.kt
  5. 1 0
      RMA/app/src/main/java/cn/muchinfo/rma/global/data/GoodsGroupData.kt
  6. 4 0
      RMA/app/src/main/java/cn/muchinfo/rma/protobuf/funcode/FunCode.java
  7. 2901 337
      RMA/app/src/main/java/cn/muchinfo/rma/protobuf/protoclasses/ManageServiceMI3.java
  8. 2 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/app/Constant.kt
  9. 8 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldFragment.kt
  10. 19 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldViewModel.kt
  11. 52 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/trade/GoodsTradeActivity.kt
  12. 2 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddBrandActivity.kt
  13. 447 5
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddGoodsActivity.kt
  14. 14 7
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddMiddleGoodsNameActivity.kt
  15. 40 7
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ChangeGoodsActivity.kt
  16. 6 3
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ChangeSpotVarietyActivity.kt
  17. 404 6
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ModifyViewModel.kt
  18. 302 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/SixInsuredVarietyViewHolder.kt
  19. 1 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newcommodity/DemoViewHolder.kt
  20. 14 7
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newcommodity/NewCommodityInformationActivity.kt
  21. 1 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newspot/NewAddSpotGoodsViewModel.kt
  22. 14 0
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/procurement/ContentAdapter.java
  23. 6 4
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/BusinessAssociationsActivity.kt
  24. 6 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/BusinessAssociationsViewModel.kt
  25. 4 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleAssociationsViewHolder.kt
  26. 9 6
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleConnectionActivity.kt
  27. 11 2
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleConnectionViewModel.kt
  28. 9 1
      RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/relationalrecord/RelationalRecordContentAdapter.java
  29. 12 0
      RMA/app/src/main/res/layout/layout_item_content.xml

+ 2 - 0
RMA/app/src/main/AndroidManifest.xml

@@ -518,6 +518,8 @@
 
         <activity android:name=".view.base.home.commodity.flow.CommodityModificationFlowActivity"/>
 
+        <activity android:name=".view.base.home.commodity.modify.AddMiddleGoodsNameActivity"/>
+
     </application>
 
 </manifest>

+ 56 - 0
RMA/app/src/main/assets/errormessage.json

@@ -11806,5 +11806,61 @@
     "operatecode": "ERR_ERMCP_CONTRACT_APPLY_REQUEST_DATA_LEGITIMACY_CHECK_FAILED",
     "description": "合同操作申请请求数据合法性校验失败",
     "rownumber": "AAI+HaABDAAABx2AA3"
+  },
+  {
+    "errorid": 34035,
+    "errorcode": "34035",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_TRADEDETAIL_NOT_FIND",
+    "description": "内部成交关联未找到相关成交单",
+    "rownumber": "AABG+sAAoAAABn2AAa"
+  },
+  {
+    "errorid": 34036,
+    "errorcode": "34036",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_CUSTOMER_DELIVERY_REGISTER_REQUEST_INCOMPLETE",
+    "description": "对手收发货登记请求不完整",
+    "rownumber": "AABG+sAAoAAABn2AAb"
+  },
+  {
+    "errorid": 34037,
+    "errorcode": "34037",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_SPOT_CONTRACT_NOT_FIND",
+    "description": "内部成交关联未找到现货合同",
+    "rownumber": "AABG+sAAoAAABn2AAc"
+  },
+  {
+    "errorid": 34038,
+    "errorcode": "34038",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_FUTURE_CONVERT_CONFIG_NOT_FIND",
+    "description": "内部成交关联未找到期货折算配置",
+    "rownumber": "AABG+sAAoAAABn2AAd"
+  },
+  {
+    "errorid": 34039,
+    "errorcode": "34039",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_SPOT_CONVERT_CONFIG_NOT_FIND",
+    "description": "内部成交关联未找到现货折算配置",
+    "rownumber": "AABG+sAAoAAABn2AAe"
+  },
+  {
+    "errorid": 34040,
+    "errorcode": "34040",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_SPOT_CONVERT_CONFIG_NOT_MATCH",
+    "description": "内部成交关联现货折算配置不匹配",
+    "rownumber": "AABG+sAAoAAABn2AAf"
+  },
+  {
+    "errorid": 34041,
+    "errorcode": "34041",
+    "modulecode": "34",
+    "operatecode": "ERR_ERMCP_INNER_TRADE_LINK_RELATEDLOT_GREATER_TRADELOT",
+    "description": "内部成交关联手数大于成交手术",
+    "rownumber": "AABG+sAAoAAABn2AAg"
   }
 ]

+ 35 - 0
RMA/app/src/main/java/cn/muchinfo/rma/business/commodity/CommodityManager.kt

@@ -786,4 +786,39 @@ class CommodityManager {
         )
     }
 
+    /**
+     * 套保品种操作请求
+     */
+    fun ermsMiddleGoodsOperateCommonReq(
+        goodsgroupid : Long = 0,//期货品种id
+        type : Int = 0,//类型 1 新增
+        callback: (isCompleted: Boolean, err: Error?) -> Unit
+    ){
+        val tradeSocketManager = MyApplication.getInstance()?.tradeSocketManager.guard {
+            callback(false, Error("交易链路未初始化"))
+            return
+        }
+
+        val reqPacket = CommodityAdapter.getErmsMiddleGoodsOperateCommonReqInfo(
+            goodsgroupid, type
+        )
+
+        tradeSocketManager.send(
+            reqPacket,
+            FunCode.ErmsMiddleGoodsOperateCommonRsp,
+            object : Callback<Packet50> {
+                override fun onSuccess(rsp: Packet50?) {
+                    val rst = CommodityAdapter.analysisErmsMiddleGoodsOperateCommonRsp(rsp!!)
+                    callback(rst.first, rst.second)
+                }
+
+                override fun onFail(err: Error?) {
+                    // 发送数据失败
+                    callback(false, err)
+                }
+
+            }
+        )
+    }
+
 }

+ 55 - 1
RMA/app/src/main/java/cn/muchinfo/rma/business/commodity/adapter/CommodityAdapter.kt

@@ -16,6 +16,58 @@ import java.lang.Exception
  */
 object CommodityAdapter {
 
+    /**
+     * 套保品种操作请求报文装箱
+     */
+    fun getErmsMiddleGoodsOperateCommonReqInfo(
+        goodsgroupid : Long = 0,
+        type : Int = 0
+    ) : Packet50{
+        val builder = ManageServiceMI3.ErmsMiddleGoodsOperateCommonReq.newBuilder()
+        val loginInfo = GlobalDataCollection.instance?.loginRsp!!
+        builder.setHeader(
+            MessageHeadModel.getHead(
+                FunCode.ErmsMiddleGoodsOperateCommonReq,
+                loginInfo.userID,
+                0,
+                0,
+                18
+            )
+        )
+        builder.userid = loginInfo.userID.toLong()
+        builder.loginid = loginInfo.loginID
+        builder.goodsgroupid = goodsgroupid
+        builder.type = type
+        val arrayOutputStream = ByteArrayOutputStream();
+        builder.build().writeTo(arrayOutputStream)
+        return Packet50(FunCode.ErmsMiddleGoodsOperateCommonReq, arrayOutputStream.toByteArray())
+    }
+
+    /**
+     * 套保品种操作响应
+     * @param packet50 Packet50
+     * @return Triple<Boolean, Error?, ManageServiceMI2.DeliveryGoodsApplyRsp?>
+     */
+    fun analysisErmsMiddleGoodsOperateCommonRsp(packet50: Packet50): Triple<Boolean, Error?, ManageServiceMI3.ErmsMiddleGoodsOperateCommonRsp?> {
+        return try {
+            val loginRsp = ManageServiceMI3.ErmsMiddleGoodsOperateCommonRsp.parseFrom(packet50.content)
+            if (loginRsp.retCode == 0) {
+                // 操作成功
+                Triple(true, null, loginRsp)
+            } else {
+                // 操作失败
+                if (loginRsp.retCode == -1){
+                    Triple(false, Error(loginRsp.retDesc), null)
+                }else{
+                    Triple(false, Error(ErrorMessageUtils.getErrorString(loginRsp.retCode)), null)
+                }
+            }
+        } catch (e: Exception) {
+            // 操作失败
+            Triple(false, Error("装箱失败"), null)
+        }
+    }
+
 
     /**
      * 参数变更申请表操作请求
@@ -125,7 +177,9 @@ object CommodityAdapter {
         )
         builder.userid = loginInfo.userID.toLong()
         builder.loginid = loginInfo.loginID
-        builder.deliverygoodsid = deliverygoodsid
+        if (deliverygoodsid != 0L){
+            builder.deliverygoodsid = deliverygoodsid
+        }
         builder.type = type
         builder.glddgfactoryItems = glddgfactoryItems
         val arrayOutputStream = ByteArrayOutputStream();

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

@@ -54,6 +54,7 @@ data class GoodsGroupData(
     val quotesourcegroupid: String? = "",//所属行情源分组ID[参考行情市场用\通道交易]
     @SerializedName("syncgoodsqty")
     val syncgoodsqty: String? = "",//同步合约数[通道交易-投资管理用] - 0表示不限
+    var isClick : Int = 0,
     @SerializedName("enumdicname")
     val enumdicname : String? = ""//单位名称
 )

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

@@ -464,6 +464,10 @@ public class FunCode {
     public static final int DeliveryGoodsOperateCommonReq = 1900761;
     //现货品种操作请求(通用版本)
     public static final int DeliveryGoodsOperateCommonRsp = 1900762;
+    //套保品种操作请求(通用版本
+    public static final int ErmsMiddleGoodsOperateCommonReq = 1900771;
+    //套保品种操作响应(通用版本)
+    public static final int ErmsMiddleGoodsOperateCommonRsp = 1900772;
 
     /**
      * 交易委托请求(196639)

Файловите разлики са ограничени, защото са твърде много
+ 2901 - 337
RMA/app/src/main/java/cn/muchinfo/rma/protobuf/protoclasses/ManageServiceMI3.java


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

@@ -15,13 +15,13 @@ object Constant {
 
 //    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.203:8080/cfg?key=test_203"//李倩云融 18611112222
+    const val baseurl = "http://192.168.31.203:8080/cfg?key=test_203"//李倩云融 18611112222
 //
 //    const val baseurl = "http://192.168.31.204:8080/cfg?key=test_204"// 瑶姐 云融 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"
-    const val baseurl = "http://192.168.31.139:8080/cfg?key=test_139"// 邓工
+//    const val baseurl = "http://192.168.31.139:8080/cfg?key=test_139"// 邓工
 //
 //    const val baseurl = "http://192.168.31.176:8080/cfg?key=test_176" // 9999  123123  黄老板千海金
 //    const val baseurl = "http://192.168.31.171:8080/cfg?key=test_171" // 邓工 签约解约环境

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

@@ -35,6 +35,7 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
     private var _view: View? = null
     private var idHoldList: RecyclerView? = null // 持仓列表
     private var loadingDialog: Dialog? = null
+    private var contracttype : String = ""
     var isBackhandByLose = 0 //是否是快捷反手操作,1是反手操作,0不是反手操作
 
     //此页面是否在显示,true行情下发可刷新列表 false则不刷新
@@ -44,6 +45,11 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
      * 数据初始化状态控制
      */
     val loadingDialogStatus: MutableLiveData<TaskUiModel> = MutableLiveData()
+
+    //合同类型 1-采购, -1-销售
+    fun resetContractType(type : String){
+        contracttype = type
+    }
 //endregion
     override fun onCreateView(
         inflater: LayoutInflater,
@@ -114,11 +120,11 @@ class HoldFragment : BaseFragment<HoldViewModel>() {
     override fun onResume() {
         super.onResume()
         canrefrashQuote = true
-        viewModel.queryHold()
+        viewModel.queryHold(type = contracttype)
 
     }
     //主动更新数据
     fun onRefresh(){
-        viewModel.queryHold()
+        viewModel.queryHold(type = contracttype)
     }
 }

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

@@ -494,8 +494,9 @@ class HoldViewModel : BaseViewModel() {
 
     /**
      * 查询持仓单
+     * type 1 采购 -1销售
      */
-    fun queryHold() {
+    fun queryHold(type : String = "") {
         val params = mutableMapOf<String, String>()
         params["accountID"] = GlobalDataCollection.instance?.accountId.toString()
 //        if (marketID != null) {
@@ -504,7 +505,21 @@ class HoldViewModel : BaseViewModel() {
         MyApplication.getInstance()?.futureManager?.queryErmcpTradePosition(params) { isSuccess, respData, _ ->
             if (isSuccess) {
                 list = respData as ArrayList<FutureHoldData>
-                holdLiveData.value = list
+                val newDataList = arrayListOf<FutureHoldData>()
+                respData.forEach {
+                    if (type == "1"){
+                        if (it.buyorsell == 1){
+                            newDataList.add(it)
+                        }
+                    }else if (type == "-1"){
+                        if (it.buyorsell == 0){
+                            newDataList.add(it)
+                        }
+                    }else{
+                        newDataList.add(it)
+                    }
+                }
+                holdLiveData.postValue(newDataList)
             } else {
                 // 没有数据或者接口返回错误的时候,通知界面没有获取到数据
 
@@ -512,4 +527,6 @@ class HoldViewModel : BaseViewModel() {
         }
     }
 
+
+
 }

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

@@ -17,6 +17,7 @@ import androidx.viewpager.widget.ViewPager
 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.ContractData
 import cn.muchinfo.rma.global.data.account.loginQeruy.GoodsInfo
 import cn.muchinfo.rma.global.data.futureOrders.FutureHoldData
 import cn.muchinfo.rma.global.database.AppDatabase
@@ -96,6 +97,11 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         intent.getStringExtra("outGoodsCode")
     }
 
+    //从现货合同页面进入的套保交易页面
+    val contractData by lazy {
+        intent.getParcelableExtra<ContractData>("contractData") as ContractData
+    }
+
     /** 当前页面的商品信息 **/
     val goodsInfoData: MutableLiveData<GoodsInfo> = MutableLiveData()
 
@@ -207,6 +213,7 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         viewModel.tradeMode.postValue(FutureConstent.PriceMode_PRICEMODE_LIMIT)//通道下单类型默认为限价
         goodsInfoData.postValue(DataBase.getInstance().goodsInfoDao().getGoodsInfo(goodsId.toInt()))//获取商品详情
         viewModel.queryQuoteDay(tag = thisTag,goodsCodes = outGoodsCode,isShowLoading = isShowLoading)//请求盘面
+        (tabFragments[0] as HoldFragment).resetContractType(contractData.spotcontractid ?: "")
     }
 
     //通用的消息更新通知
@@ -769,10 +776,38 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
                             }.lparams(matchParent, autoSize(84))
 
                             linearLayout {
+                                if (contractData.contractno.isNullOrEmpty()){
+                                    visibility = View.GONE
+                                }else{
+                                    visibility = View.VISIBLE
+                                }
+                                gravity = Gravity.CENTER_VERTICAL
+                                textView {
+                                    text = "现货合同"
+                                    textSizeAuto = 31
+                                    textColorInt = R.color.rma_gray_color
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginStart = autoSize(34)
+                                }
+                                textView {
+                                    text = contractData.contractno
+                                    textSizeAuto = 31
+                                    textColorInt = R.color.rma_black_33
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginStart = autoSize(20)
+                                }
+
+                            }.lparams(matchParent, autoSize(84))
+
+                            linearLayout {
                                 //买
                                 verticalLayout {
                                     if (GlobalDataCollection.instance?.getThreeLevelMenu(firstCode = "client_futures",secondCode = "client_futures_quote",threeCode = "client_futures_quote_buy") == true){
-                                        visibility = View.VISIBLE
+                                        if (contractData.contracttype == "1"){
+                                            visibility = View.GONE
+                                        }else{
+                                            visibility = View.VISIBLE
+                                        }
                                     }else{
                                         visibility = View.GONE
                                     }
@@ -851,7 +886,11 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
                                 //卖
                                 verticalLayout {
                                     if (GlobalDataCollection.instance?.getThreeLevelMenu(firstCode = "client_futures",secondCode = "client_futures_quote",threeCode = "client_futures_quote_sell") == true){
-                                        visibility = View.VISIBLE
+                                        if (contractData.contracttype == "-1"){
+                                            visibility = View.GONE
+                                        }else{
+                                            visibility = View.VISIBLE
+                                        }
                                     }else{
                                         visibility = View.GONE
                                     }
@@ -1127,7 +1166,7 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
      * @param isClose Boolean 是否是平仓单
      * @param orderPrice String 价格
      */
-    private fun commitDealData(buyOrSell: Int, isClose: Boolean, orderPrice: String) {
+    private fun commitDealData(buyOrSell: Int, isClose: Boolean, orderPrice: String,biztype : String = "") {
         val datas = ChannelOrderReqData()
         datas.setAccountID(GlobalDataCollection.instance?.accountId ?: 0) // 交易账号
         if (isClose) {
@@ -1150,7 +1189,16 @@ class GoodsTradeActivity : BaseActivity<GoodsTradeViewModel>() {
         datas.validType = 1 // 有效类型-1当日有效
         datas.channelOperateType = FutureConstent.ChannelOperateType_ORDER // 操作类型  1:正常类型  默认写死???
         datas.channelOrderSrc = 1 // 单据来源委托来源-1:客户端  //默认写死?
-        datas.hedgeFlag = 0 // 投机套保标志-0:无
+        if (biztype.isNullOrEmpty()){
+            datas.hedgeFlag = 0 // 投机套保标志-0:无
+        }else{//业务类型 1-套保 2-套利
+            if (biztype == "1"){
+                datas.hedgeFlag = 4
+            }else if (biztype == "2"){
+                datas.hedgeFlag = 10
+            }
+        }
+
 
         datas.orderPrice = orderPrice.toDouble()
         datas.orderQty = amountInputEdittext.text.toString().toLong()

+ 2 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddBrandActivity.kt

@@ -37,7 +37,7 @@ class AddBrandActivity : BaseActivity<ModifyViewModel>(){
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
-            createLoadingDialog(hintStr = "").bindTaskStatus(context, viewModel.loadingDialogStatus)
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
             background = resources.getDrawable(R.color.segtabment_bg_color)
             topBar {
                 commonLeftButton()
@@ -128,7 +128,7 @@ class AddBrandActivity : BaseActivity<ModifyViewModel>(){
                             return@onThrottleFirstClick
                         }
                         if (type == "1"){//新增
-                            viewModel.dgFactoryItemOperateCommonReq(type = 1,glddgfactoryItems = getBrandNameData()){
+                            viewModel.dgFactoryItemOperateCommonReq(deliverygoodsid = deliveryGoodsDetailData.deliverygoodsid?.toLong() ?: 0,type = 1,glddgfactoryItems = getBrandNameData()){
                                 finish()
                             }
                         }else if (type == "2"){//修改

+ 447 - 5
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddGoodsActivity.kt

@@ -1,27 +1,469 @@
 package cn.muchinfo.rma.view.base.home.commodity.modify
 
 import android.os.Bundle
-import cn.muchinfo.rma.view.autoWidget.commonLeftButton
-import cn.muchinfo.rma.view.autoWidget.commonTitle
-import cn.muchinfo.rma.view.autoWidget.topBar
+import android.view.Gravity
+import android.view.View
+import android.view.inputmethod.EditorInfo
+import android.widget.EditText
+import androidx.lifecycle.MutableLiveData
+import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.DeliveryGoodsDetailData
+import cn.muchinfo.rma.lifecycle.bindOptional
+import cn.muchinfo.rma.protobuf.protoclasses.ManageServiceMI3
+import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
-import org.jetbrains.anko.verticalLayout
+import cn.muchinfo.rma.view.base.home.commodity.newspot.NewInsuredVarietyViewHolder
+import cn.muchinfo.rma.view.base.home.commodity.newspot.NewSpotInfoData
+import cn.muchinfo.rma.view.base.home.contract.emptyView
+import cn.muchinfo.rma.view.base.home.contract.viewItemUI
+import com.blankj.utilcode.util.LogUtils
+import com.blankj.utilcode.util.ToastUtils
+import mtp.polymer.com.autowidget.adapter.BaseAdapter
+import mtp.polymer.com.autowidget.dialog.SelectData
+import mtp.polymer.com.autowidget.dialog.creatBottomSheetDialog
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
+import org.jetbrains.anko.*
+import org.jetbrains.anko.sdk25.coroutines.textChangedListener
 
 /**
  * 新增商品页面
  */
-class AddGoodsActivity : BaseActivity<ModifyViewModel>(){
+class AddGoodsActivity : BaseActivity<ModifyViewModel>() {
+
+    /** 选择的单位 **/
+    val selectUnitType: MutableLiveData<SelectData> = MutableLiveData()
+
+
+    //输入的品类信息
+    lateinit var category_edittext: EditText
+
+    //输入的增值税税率
+    lateinit var coefficient_of_warehouse: EditText
+
+    //传入的商品模型
+    val deliveryGoodsDetailData by lazy { intent.getParcelableExtra<DeliveryGoodsDetailData>("deliveryGoodsDetailData") as DeliveryGoodsDetailData }
+
+    //套保
+    private val middleGoodsAdapter: BaseAdapter<NewSpotInfoData, SixInsuredVarietyViewHolder> =
+        BaseAdapter { _, _ ->
+            SixInsuredVarietyViewHolder(
+                activity = this,
+                viewModel = viewModel,
+                operationType = "1",
+                wrstandId = "1"
+            )
+        }
+
+    fun initData(){
+        val spotModelList = arrayListOf(NewSpotInfoData(id = "1", value = "",middleGoodsList = arrayListOf(
+            NewSpotInfoData(id = "1",value = "")))
+        )
+        viewModel.spotModelList.postValue(spotModelList)
+        viewModel.spotModelcacheList.postValue(spotModelList)
+        viewModel.queryGoodsGroup()
+    }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            initData()
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
+            background = resources.getDrawable(R.color.segtabment_bg_color)
             topBar {
                 commonLeftButton()
                 commonTitle {
                     text = "新增商品"
                 }
             }
+
+            frameLayout {
+                scrollView {
+                    verticalLayout {
+                        linearLayout {
+                            background = resources.getDrawable(R.color.white)
+                            gravity = Gravity.CENTER_VERTICAL
+                            linearLayout {
+                                gravity = Gravity.CENTER_VERTICAL
+                                textView {
+                                    text = "品种"
+                                    textSizeAuto = 31
+                                    textColorInt = R.color.rma_black_33
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginStart = autoSize(36)
+                                }
+                            }.lparams(autoSize(250), autoSize(132))
+
+                            textView {
+                                text = deliveryGoodsDetailData.deliverygoodsname
+                                textSizeAuto = 31
+                                textColorInt = R.color.rma_black_33
+                            }.lparams(wrapContent, wrapContent)
+                        }.lparams(matchParent, autoSize(132))
+
+                        //商品名称
+                        linearLayout {
+                            background = resources.getDrawable(R.color.white)
+                            gravity = Gravity.CENTER_VERTICAL
+                            textView {
+                                text = "*"
+                                textColorInt = R.color.rma_star_color
+                                textSizeAuto = 31
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(37)
+                            }
+
+                            textView {
+                                text = "商品"
+                                textSizeAuto = 31
+                                textColorInt = R.color.rma_black_33
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(10)
+                            }
+
+                            editText {
+                                category_edittext = this
+                                hint = "请输入商品名称"
+                                textChangedListener {
+                                    afterTextChanged {
+                                        if (it.toString().isNotEmpty()) {//修改品类
+                                            viewModel.changeSpotModelList(
+                                                id = "1",
+                                                type = "3",
+                                                value = it.toString(),
+                                                coefficientwarehouse = ""
+                                            )
+                                        }
+                                    }
+                                }
+                                background = null
+                                inputType = EditorInfo.TYPE_CLASS_TEXT
+                                hintColorStr = "#CCCCCC"
+                                textSizeAuto = 31
+                                textColorStr = "#333333"
+                            }.lparams(autoSize(300), autoSize(132)) {
+                                marginStart = autoSize(40)
+                            }
+
+                            emptyView()
+
+                            imageView {
+                                visibility = View.GONE
+//                    onThrottleFirstClick {
+//                        viewModel.changeSpotModelList("2",data.value?.id.toString(),value = "")
+//                    }
+                                imageResource = R.mipmap.rma_delete
+                            }.lparams(autoSize(30), autoSize(30)) {
+                                marginEnd = autoSize(31)
+                            }
+                        }.lparams(matchParent, autoSize(132))
+
+                        viewItemUI()
+
+                        //单位
+                        linearLayout {
+                            background = resources.getDrawable(R.color.white)
+                            gravity = Gravity.CENTER_VERTICAL
+
+                            onThrottleFirstClick {
+
+                                val selectDataList = arrayListOf(
+                                    SelectData(
+                                        id = "1",
+                                        value = "吨"
+                                    ),
+                                    SelectData(
+                                        id = "2",
+                                        value = "千克"
+                                    ), SelectData(
+                                        id = "3",
+                                        value = "克"
+                                    ),
+                                    SelectData(
+                                        id = "4",
+                                        value = "股"
+                                    ),
+                                    SelectData(
+                                        id = "6",
+                                        value = "张"
+                                    ),
+                                    SelectData(
+                                        id = "7",
+                                        value = "桶"
+                                    )
+                                )
+                                creatBottomSheetDialog("请选择单位", selectDataList) {
+                                    viewModel.changeSpotModelList(
+                                        type = "4",
+                                        id = "1",
+                                        value = category_edittext.text.toString(),
+                                        coefficientwarehouse = coefficient_of_warehouse.text.toString(),
+                                        enumdicnameid = this.id,
+                                        enumdicname = this.value
+                                    )
+                                    selectUnitType.postValue(this)
+                                }
+                            }
+                            textView {
+                                text = "*"
+                                textColorInt = R.color.rma_star_color
+                                textSizeAuto = 31
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(37)
+                            }
+
+                            textView {
+                                text = "单位"
+                                textSizeAuto = 31
+                                textColorInt = R.color.rma_black_33
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(10)
+                            }
+
+                            textView {
+                                selectUnitType.bindOptional(context){
+                                    text = it?.value
+                                    textColorInt = R.color.rma_black_33
+                                }
+                                text = "请选择单位"
+                                textSizeAuto = 31
+                                textColorInt = R.color.rma_hint_text_color_ccc
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(80)
+                            }
+
+                            emptyView()
+
+                            imageView {
+                                imageResource = R.mipmap.rma_more
+                            }.lparams(autoSize(36), autoSize(36)) {
+                                marginEnd = autoSize(25)
+                            }
+                        }.lparams(matchParent, autoSize(132))
+
+                        viewItemUI()
+
+                        //增值税税率-之前的标仓系数
+                        linearLayout {
+                            background = resources.getDrawable(R.color.white)
+                            gravity = Gravity.CENTER_VERTICAL
+                            textView {
+                                text = "*"
+                                textColorInt = R.color.rma_star_color
+                                textSizeAuto = 31
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(37)
+                            }
+
+                            textView {
+                                text = "增值税税率%"
+                                textSizeAuto = 31
+                                textColorInt = R.color.rma_black_33
+                            }.lparams(wrapContent, wrapContent) {
+                                marginStart = autoSize(10)
+                            }
+
+                            editText {
+                                coefficient_of_warehouse = this
+
+                                hint = "请输入增值税税率"
+                                textChangedListener {
+                                    afterTextChanged {
+                                        if (it.toString().isNotEmpty()) {
+                                            viewModel.changeSpotModelList(
+                                                "3",
+                                                "1",
+                                                coefficientwarehouse = it.toString()
+                                            )
+                                        }
+                                    }
+                                }
+                                background = null
+                                inputType = EditorInfo.TYPE_CLASS_TEXT
+                                hintColorStr = "#CCCCCC"
+                                textSizeAuto = 31
+                                textColorStr = "#333333"
+                            }.lparams(autoSize(300), autoSize(132)) {
+                                marginStart = autoSize(60)
+                            }
+                        }.lparams(matchParent, wrapContent)
+
+                        view {
+                            background = resources.getDrawable(R.color.rma_hint_line_color_eee)
+                        }.lparams(matchParent, autoSize(20))
+
+                        //添加套保品种信息
+                        recyclerView {
+                            background = resources.getDrawable(R.color.white)
+                            adapter = middleGoodsAdapter
+                            isNestedScrollingEnabled = false
+                        }.lparams(matchParent, wrapContent)
+
+                        viewModel.spotModelList.bindOptional(context){
+                            middleGoodsAdapter.setNewData(it?.get(0)?.middleGoodsList)
+                        }
+                        viewItemUI()
+
+                        linearLayout {
+
+                            background = resources.getDrawable(R.color.main_hit_bg_color)
+                            gravity = Gravity.CENTER_VERTICAL
+                            emptyView()
+
+                            linearLayout {
+                                onThrottleFirstClick {
+
+                                    viewModel.changeMiddleGoodsList(
+                                        wrstandId = "1",
+                                        type = "1",
+                                        id = viewModel.spotModelList.value?.find {
+                                            it.id == "1"
+                                        }?.middleGoodsList?.size?.plus(1).toString()
+                                    )
+                                }
+
+                                gravity = Gravity.CENTER_VERTICAL
+                                imageView {
+                                    imageResource = R.mipmap.rma_add
+                                }.lparams(autoSize(36), autoSize(36))
+
+                                textView {
+                                    text = "添加套保品种"
+                                    textColorInt = R.color.rma_blue_color
+                                    textSizeAuto = 31
+                                }.lparams(wrapContent, wrapContent) {
+                                    marginEnd = autoSize(35)
+                                }
+                            }.lparams(wrapContent, autoSize(80))
+                        }.lparams(matchParent, autoSize(80)){
+                            bottomMargin = autoSize(150)
+                        }
+                    }
+                }
+
+                linearLayout {
+                    background = resources.getDrawable(R.color.white)
+                    gravity = Gravity.CENTER_VERTICAL
+
+                    textView {
+                        onThrottleFirstClick {
+                            if (checkUpdate().not()) {
+                                return@onThrottleFirstClick
+                            }
+                            viewModel.wRStandardOperateCommonReq(
+                                version = "3.1",
+                                deliverygoodsid = deliveryGoodsDetailData.deliverygoodsid ?: "",
+                                type = "1",
+                                gldwrstandards =  getWrstandGoodsList()
+                            ){
+                                finish()
+                            }
+                        }
+                        gravity = Gravity.CENTER
+                        backgroundResource = R.mipmap.rma_submit_bg
+                        text = "确定"
+                        textColorInt = R.color.white
+                        textSizeAuto = 38
+                    }.lparams(0, autoSize(119), 1f) {
+                        marginStart = autoSize(36)
+                        marginEnd = autoSize(36)
+                    }
+                }.lparams(matchParent, autoSize(144)) {
+                    gravity = Gravity.BOTTOM
+                }
+            }.lparams(matchParent, matchParent)
         }
     }
 
+    /**
+     * 最新版本的商品信息
+     */
+    private fun getWrstandGoodsList(isAdd: Boolean = true) : ManageServiceMI3.GLDWRStandardCloudEx{
+        val wrstandGoodsList = arrayListOf<ManageServiceMI3.GLDWRStandardCloudEx>()
+        viewModel.spotModelcacheList.value?.forEach {
+            val spotGoodsData = ManageServiceMI3.GLDWRStandardCloudEx.newBuilder()
+            spotGoodsData.wrstandardname = it.value
+            if (it.middleGoodsId.isNullOrEmpty()){
+                spotGoodsData.wrstandardid = 0//修改时才加
+            }else{
+                spotGoodsData.wrstandardid = it.middleGoodsId.toLong()//修改时才加
+            }
+            spotGoodsData.unitid = it.enumdicnameid.toLong()
+            spotGoodsData.vatrate = it.coefficientwarehouse.toDouble().div(100)
+//            LogUtils.eTag("asdhahsdkjahdjka",spotGoodsData.modelid)
+            val wrsconverdetailsList = arrayListOf<ManageServiceMI3.WRSConvertDetailEx>()
+            it.middleGoodsList.forEach {
+                val wrsconverdetails = ManageServiceMI3.WRSConvertDetailEx.newBuilder()
+                wrsconverdetails.middlegoodsid = it.middleGoodsId.toLong()
+                wrsconverdetails.unitid = it.enumdicnameid.toLong()
+                wrsconverdetails.convertratio = it.value.toDouble()
+                wrsconverdetailsList.add(wrsconverdetails.build())
+            }
+            spotGoodsData.addAllWrsconvertdetails(wrsconverdetailsList)
+
+            wrstandGoodsList.add(spotGoodsData.build())
+        }
+
+        return wrstandGoodsList.get(0)
+    }
+
+    /**
+     * 提交资料前的效验
+     * @return Boolean
+     */
+    private fun checkUpdate(): Boolean {
+
+        if (category_edittext.text.toString().isNullOrEmpty()) {
+            ToastUtils.showLong("请输入商品名称")
+            return false
+        }
+
+        if (coefficient_of_warehouse.text.toString().isNullOrEmpty()){
+            ToastUtils.showLong("请输入增值税税率")
+            return false
+        }
+
+
+//        if (selectUnitType.value?.id.isNullOrEmpty()) {
+//            ToastUtils.showLong("请选择单位")
+//            return false
+//        }
+
+//        viewModel.spotModelcacheList.value?.forEach {
+//            if (it.value.isNullOrEmpty()) {
+//                ToastUtils.showLong("请输入完整品类信息")
+//                return false
+//            }
+//        }
+//
+
+        viewModel.spotModelcacheList.value?.forEach {
+            it.middleGoodsList.forEach {
+                if (it.middleGoodsName.isNullOrEmpty()){
+                    ToastUtils.showLong("请选择套保品种")
+                    return false
+                }
+                if (it.value.isNullOrEmpty()){
+                    ToastUtils.showLong("请输入折算系数")
+                    return false
+                }
+            }
+
+        }
+
+//        viewModel.middlegoodCacheList.value?.forEach {
+//            if (it.middleGoodsName.isNullOrEmpty()) {
+//                ToastUtils.showLong("请选择套保类型")
+//                return false
+//            }
+//            if (it.value.isNullOrEmpty()) {
+//                ToastUtils.showLong("请输入套保系数")
+//                return false
+//            }
+//        }
+
+        return true
+    }
+
+
 }

+ 14 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/AddMiddleGoodsNameActivity.kt

@@ -5,6 +5,7 @@ import android.os.Bundle
 import android.view.Gravity
 import androidx.appcompat.app.AppCompatActivity
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.data.GoodsGroupData
 import cn.muchinfo.rma.global.data.MiddleGoodsData
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
@@ -12,6 +13,8 @@ import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import mtp.polymer.com.autowidget.adapter.BaseAdapter
 import mtp.polymer.com.autowidget.adapter.BaseViewHolder
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
 
 /**
@@ -24,7 +27,7 @@ class AddMiddleGoodsNameActivity : BaseActivity<ModifyViewModel>(){
     private lateinit var swipeToLayout: SwipeToLoadLayout
     private lateinit var statusLayout: StatusLayout
 
-    private val deliveryAdapter: BaseAdapter<MiddleGoodsData, SelectMiddleGoodsViewHolder> =
+    private val deliveryAdapter: BaseAdapter<GoodsGroupData, SelectMiddleGoodsViewHolder> =
         BaseAdapter { _, _ ->
             SelectMiddleGoodsViewHolder(
                 this,
@@ -32,10 +35,10 @@ class AddMiddleGoodsNameActivity : BaseActivity<ModifyViewModel>(){
             )
         }
 
-
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
             viewModel.queryMiddleGodsDataList()
             background = resources.getDrawable(R.color.segtabment_bg_color)
             topBar {
@@ -108,7 +111,9 @@ class AddMiddleGoodsNameActivity : BaseActivity<ModifyViewModel>(){
 
                     textView {
                         onThrottleFirstClick {
-
+                            viewModel.ermsMiddleGoodsOperateCommonReq(goodsgroupid = viewModel.selectGoodsGroupData.value?.goodsgroupid?.toLong() ?: 0,type = 1){
+                                finish()
+                            }
                         }
                         gravity = Gravity.CENTER
                         backgroundResource = R.mipmap.rma_submit_bg
@@ -122,7 +127,7 @@ class AddMiddleGoodsNameActivity : BaseActivity<ModifyViewModel>(){
                 }.lparams(matchParent, autoSize(144)){
                     gravity = Gravity.BOTTOM
                 }
-            }
+            }.lparams(matchParent, matchParent)
         }
     }
 
@@ -135,15 +140,17 @@ class AddMiddleGoodsNameActivity : BaseActivity<ModifyViewModel>(){
  * @property itemSize IntArray
  * @constructor
  */
-class SelectMiddleGoodsViewHolder(private val activty : AppCompatActivity,private val viewModel: ModifyViewModel) : BaseViewHolder<MiddleGoodsData>(activty){
+@Suppress("DEPRECATION")
+class SelectMiddleGoodsViewHolder(private val activty : AppCompatActivity, private val viewModel: ModifyViewModel) : BaseViewHolder<GoodsGroupData>(activty){
     override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
 
     @SuppressLint("SetTextI18n")
     override fun _FrameLayout.createContentView() {
         verticalLayout {
             linearLayout {
+                background = resources.getDrawable(R.color.white)
                 onThrottleFirstClick {
-                    viewModel.setOnMiddleGoodsNameItemClick(data.value?.middlegoodsid ?: "")
+                    viewModel.setOnMiddleGoodsNameItemClick(data.value?.goodsgroupid ?: "")
                 }
                 gravity = Gravity.CENTER_VERTICAL
 
@@ -162,7 +169,7 @@ class SelectMiddleGoodsViewHolder(private val activty : AppCompatActivity,privat
 
                 textView {
                     data.bindOptional(context){
-                        text = it?.middlegoodsname + "(" + it?.enumdicname + ")"
+                        text = it?.goodsgroupname + "(" + it?.enumdicname + ")"
                     }
                     textSizeAuto = 29
                     textColorInt = R.color.rma_black_33

+ 40 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ChangeGoodsActivity.kt

@@ -4,13 +4,16 @@ import android.os.Bundle
 import android.view.Gravity
 import android.view.inputmethod.EditorInfo
 import android.widget.EditText
+import android.widget.Toast
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.global.data.DeliveryGoodsDetailData
 import cn.muchinfo.rma.global.data.XhWrstandard
+import cn.muchinfo.rma.protobuf.protoclasses.ManageServiceMI3
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.verticalEmptyView
+import com.blankj.utilcode.util.ToastUtils
 import mtp.polymer.com.autowidget.dialog.createLoadingDialog
 import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
@@ -19,19 +22,22 @@ import org.jetbrains.anko.*
  * 修改商品
  * @property goods_name EditText
  */
-class ChangeGoodsActivity : BaseActivity<ModifyViewModel>(){
+class ChangeGoodsActivity : BaseActivity<ModifyViewModel>() {
 
     val data by lazy { intent.getParcelableExtra<XhWrstandard>("data") as XhWrstandard }
 
     val deliveryGoodsDetailData by lazy { intent.getParcelableExtra<DeliveryGoodsDetailData>("deliveryGoodsDetailData") as DeliveryGoodsDetailData }
 
     //输入的商品名称
-    lateinit var goods_name : EditText
+    lateinit var goods_name: EditText
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
-            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(
+                context,
+                viewModel.loadingDialogStatus
+            )
             background = resources.getDrawable(R.color.segtabment_bg_color)
             topBar {
                 commonLeftButton()
@@ -49,7 +55,9 @@ class ChangeGoodsActivity : BaseActivity<ModifyViewModel>(){
                         text = "品种"
                         textSizeAuto = 31
                         textColorInt = R.color.rma_black_33
-                    }.lparams(wrapContent, wrapContent)
+                    }.lparams(wrapContent, wrapContent) {
+                        marginStart = autoSize(36)
+                    }
                 }.lparams(autoSize(250), autoSize(132))
 
                 textView {
@@ -106,7 +114,9 @@ class ChangeGoodsActivity : BaseActivity<ModifyViewModel>(){
                         text = "单位"
                         textSizeAuto = 31
                         textColorInt = R.color.rma_black_33
-                    }.lparams(wrapContent, wrapContent)
+                    }.lparams(wrapContent, wrapContent) {
+                        marginStart = autoSize(36)
+                    }
                 }.lparams(autoSize(250), autoSize(132))
 
                 textView {
@@ -124,14 +134,25 @@ class ChangeGoodsActivity : BaseActivity<ModifyViewModel>(){
 
                 textView {
                     onThrottleFirstClick {
-
+                        if (goods_name.text.toString().isNullOrEmpty()){
+                            ToastUtils.showLong("商品名称不能为空")
+                            return@onThrottleFirstClick
+                        }
+                        viewModel.wRStandardOperateCommonReq(
+                            version = "3.2",
+                            deliverygoodsid = data.deliverygoodsid ?: "",
+                            type = "2",
+                            gldwrstandards = getwrstandardnameeData()
+                            ) {
+                            finish()
+                        }
                     }
                     gravity = Gravity.CENTER
                     backgroundResource = R.mipmap.rma_submit_bg
                     text = "确定"
                     textColorInt = R.color.white
                     textSizeAuto = 38
-                }.lparams(0, autoSize(119),1f) {
+                }.lparams(0, autoSize(119), 1f) {
                     marginStart = autoSize(36)
                     marginEnd = autoSize(36)
                 }
@@ -140,4 +161,16 @@ class ChangeGoodsActivity : BaseActivity<ModifyViewModel>(){
         }
     }
 
+    /**
+     * 获取商品信息
+     * @return ManageServiceMI3.GLDDGFactoryItemEx
+     */
+    private fun getwrstandardnameeData(): ManageServiceMI3.GLDWRStandardCloudEx {
+        val spotGoodsData = ManageServiceMI3.GLDWRStandardCloudEx.newBuilder()
+
+        spotGoodsData.wrstandardid = data.wrstandardid?.toLong() ?: 0
+        spotGoodsData.wrstandardname = goods_name.text.toString()
+//        spotGoodsData.unitid = data.unitid?.toLong() ?: 0
+        return spotGoodsData.build()
+    }
 }

+ 6 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ChangeSpotVarietyActivity.kt

@@ -11,6 +11,8 @@ import cn.muchinfo.rma.view.base.BaseActivity
 import cn.muchinfo.rma.view.base.future.trade.itemView
 import cn.muchinfo.rma.view.base.home.contract.verticalEmptyView
 import com.blankj.utilcode.util.ToastUtils
+import mtp.polymer.com.autowidget.dialog.createLoadingDialog
+import mtp.polymer.com.autowidget.utils.bindTaskStatus
 import org.jetbrains.anko.*
 
 /**
@@ -18,6 +20,7 @@ import org.jetbrains.anko.*
  * @property spot_varietty EditText
  * @property remask_edittext EditText
  */
+@Suppress("DEPRECATION")
 class ChangeSpotVarietyActivity : BaseActivity<ModifyViewModel>(){
 
     /**
@@ -36,6 +39,7 @@ class ChangeSpotVarietyActivity : BaseActivity<ModifyViewModel>(){
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
+            createLoadingDialog(hintStr = "请求中...").bindTaskStatus(context, viewModel.loadingDialogStatus)
             background = resources.getDrawable(R.color.segtabment_bg_color)
             topBar {
                 commonLeftButton()
@@ -45,6 +49,7 @@ class ChangeSpotVarietyActivity : BaseActivity<ModifyViewModel>(){
             }
 
             linearLayout {
+                background = resources.getDrawable(R.color.white)
                 gravity = Gravity.CENTER_VERTICAL
                 linearLayout {
                     gravity = Gravity.CENTER_VERTICAL
@@ -74,9 +79,7 @@ class ChangeSpotVarietyActivity : BaseActivity<ModifyViewModel>(){
                     hintColorStr = "#CCCCCC"
                     textSizeAuto = 31
                     textColorStr = "#333333"
-                }.lparams(matchParent, autoSize(132)) {
-                    marginStart = autoSize(80)
-                }
+                }.lparams(matchParent, autoSize(132))
             }.lparams(matchParent, autoSize(132))
 
             itemView()

+ 404 - 6
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/ModifyViewModel.kt

@@ -2,11 +2,14 @@ package cn.muchinfo.rma.view.base.home.commodity.modify
 
 import androidx.lifecycle.MutableLiveData
 import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.GoodsGroupData
 import cn.muchinfo.rma.global.data.MiddleGoodsData
 import cn.muchinfo.rma.netManage.base.InteractiveException
 import cn.muchinfo.rma.protobuf.protoclasses.ManageServiceMI3
 import cn.muchinfo.rma.view.MyApplication
+import cn.muchinfo.rma.view.autoWidget.toArrayList
 import cn.muchinfo.rma.view.base.BaseViewModel
+import cn.muchinfo.rma.view.base.home.commodity.newspot.NewSpotInfoData
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 import mtp.polymer.com.autowidget.utils.TaskUiModel
@@ -22,14 +25,17 @@ class ModifyViewModel : BaseViewModel(){
     val loadingDialogStatus: MutableLiveData<TaskUiModel> = MutableLiveData()
 
     //可供选择的套保品种
-    val middleGoodsDataList : MutableLiveData<List<MiddleGoodsData>> = MutableLiveData()
+    val middleGoodsDataList : MutableLiveData<List<GoodsGroupData>> = MutableLiveData()
+
+    //用于新增套保品种时选择的商品组
+    val selectGoodsGroupData : MutableLiveData<GoodsGroupData> = MutableLiveData()
 
     fun queryMiddleGodsDataList(){
         val params = mutableMapOf<String,String>().apply {
             put("userid", GlobalDataCollection.instance?.loginRsp?.userID.toString())
             put("status","1")
         }
-        MyApplication.getInstance()?.commodityManager?.queryMiddleGoods(params = params){isSuccess, respData, error ->
+        MyApplication.getInstance()?.futureManager?.queryGoodsGroup(params = params){isSuccess, respData, error ->
             if (isSuccess){
                 middleGoodsDataList.postValue(respData)
             }
@@ -37,19 +43,22 @@ class ModifyViewModel : BaseViewModel(){
     }
 
     //新增套保品种的列表的点击选择
-    fun setOnMiddleGoodsNameItemClick(middlegoodsid : String){
-        val newDataList = arrayListOf<MiddleGoodsData>()
+    fun setOnMiddleGoodsNameItemClick(goodsGroupId : String){
+        val newDataList = arrayListOf<GoodsGroupData>()
         middleGoodsDataList.value?.forEach {
-            if (middlegoodsid == it.middlegoodsid){
+            if (goodsGroupId == it.goodsgroupid){
                 if (it.isClick == 0){
                     newDataList.add(it.copy(isClick = 1))
+                    selectGoodsGroupData.postValue(it)
                 }else{
                     newDataList.add(it.copy(isClick = 0))
+                    selectGoodsGroupData.postValue(GoodsGroupData())
                 }
             }else{
-                newDataList.add(it)
+                newDataList.add(it.copy(isClick = 0))
             }
         }
+        middleGoodsDataList.postValue(newDataList)
     }
 
     /**
@@ -214,5 +223,394 @@ class ModifyViewModel : BaseViewModel(){
         }
     }
 
+    /**
+     * 套保品种操作请求
+     */
+    fun ermsMiddleGoodsOperateCommonReq(
+        goodsgroupid : Long = 0,//期货品种id
+        type : Int = 0,//类型 1 新增
+        isSuccess: (isCompleted: Boolean) -> Unit
+    ){
+        loadingDialogStatus.value = TaskUiModel.inFlight()
+        GlobalScope.launch {
+            MyApplication.getInstance()?.commodityManager?.ermsMiddleGoodsOperateCommonReq(
+                goodsgroupid = goodsgroupid,
+                type = type
+            ) { isCompleted, err ->
+                if (isCompleted) {
+                    loadingDialogStatus.postValue(TaskUiModel.success(msg = "请求成功"))
+                    isSuccess(true)
+                } else {
+                    loadingDialogStatus.postValue(
+                        TaskUiModel.failed(
+                            InteractiveException(
+                                errorMessage = err?.message!!
+                            )
+                        )
+                    )
+                }
+            }
+        }
+    }
+    //--------------------------------------- 以下是新增商品的数据业务区------------------------------------------------
+
+    /**
+     * 套保品种正常列表
+     */
+    val middleGoodsNormalList: MutableLiveData<List<GoodsGroupData>> = MutableLiveData()
+
+    /**
+     * 新增现货品种时的型号列表数据(三期为品类)
+     */
+    val spotModelList: MutableLiveData<List<NewSpotInfoData>> = MutableLiveData()
+
+    /**
+     * 暂存的型号列表数据(三期为品类)
+     */
+    val spotModelcacheList: MutableLiveData<List<NewSpotInfoData>> = MutableLiveData()
+    /**
+     * 查询期货商品组(原套保品种)
+     * @param wrstandardid String
+     */
+    fun queryGoodsGroup() {
+        val params = mutableMapOf<String, String>().apply {
+            put("userid", GlobalDataCollection.instance?.loginRsp?.userID.toString())
+            put("usertype", GlobalDataCollection.instance?.userAccountData?.usertype?.toString() ?: "")
+//            put("deliverygoodsid", deliverygoodsid)
+        }
+        MyApplication.getInstance()?.futureManager?.queryGoodsGroup(params = params) { isSuccess, respData, _ ->
+            if (isSuccess) {
+                middleGoodsNormalList.postValue(respData)
+            }
+        }
+    }
+
+    /**
+     * 品类列表
+     * type 1为添加,2为删除 ,3为更换资料
+     */
+    fun changeSpotModelList(
+        type: String,//类型
+        id: String,//列表下标id
+        value: String = "",//品类名称
+        enumdicname: String = "",//单位名称
+        enumdicnameid: String = "",//单位id
+        coefficientwarehouse: String = ""//增值税税率
+    ) {
+        val oldDatacacheList = spotModelcacheList.value?.toArrayList()
+        val oldDataList = spotModelList.value?.toArrayList()
+        val newDataList = arrayListOf<NewSpotInfoData>()
+        if (type == "1") {//新增
+            oldDatacacheList?.forEach {
+                newDataList.add(it)
+            }
+            newDataList.add(NewSpotInfoData(id = id,middleGoodsList = arrayListOf(NewSpotInfoData(id = "1"))))
+            spotModelList.postValue(newDataList)
+            spotModelcacheList.postValue(newDataList)
+        } else if (type == "2") {//删除
+            oldDatacacheList?.forEach {
+                if (id.toInt() < it.id.toInt()) {
+                    newDataList.add(it.copy(id = oldDatacacheList.indexOf(it).toString(),value = it.value,coefficientwarehouse = it.coefficientwarehouse))
+                }else if (id.toInt() > it.id.toInt()){
+                    newDataList.add(it.copy(id = oldDatacacheList.indexOf(it).toString(),value = it.value,coefficientwarehouse = it.coefficientwarehouse))
+                }
+            }
+            spotModelList.postValue(newDataList)
+            spotModelcacheList.postValue(newDataList)
+        } else if (type == "3") {//更换资料
+            oldDatacacheList?.forEach {
+                var newValue = ""
+                var newEnumdicnameid = ""
+                var newEnumdicname = ""
+                var newCoefficientwarehouse = ""
+
+                var newData: NewSpotInfoData
+                if (it.id == id) {
+                    newValue = if (value.isNullOrEmpty()) {
+                        it.value
+                    } else {
+                        value
+                    }
+                    newEnumdicnameid = if (enumdicnameid.isNullOrEmpty()) {
+                        it.enumdicnameid
+                    } else {
+                        enumdicnameid
+                    }
+                    newEnumdicname = if (newEnumdicname.isNullOrEmpty()) {
+                        it.enumdicname
+                    } else {
+                        enumdicname
+                    }
+                    newCoefficientwarehouse = if (coefficientwarehouse.isNullOrEmpty()) {
+                        it.coefficientwarehouse
+                    } else {
+                        coefficientwarehouse
+                    }
+                    newData = it.copy(
+                        id = id,
+                        value = newValue,
+                        enumdicname = newEnumdicname,
+                        coefficientwarehouse = newCoefficientwarehouse,
+                        enumdicnameid = newEnumdicnameid
+                    )
+                    newDataList.add(newData)
+                } else {
+                    newDataList.add(it)
+                }
+            }
+//            spotModelList.postValue(newDataList)
+            spotModelcacheList.postValue(newDataList)
+        }else if (type == "4") {//更换资料
+            oldDatacacheList?.forEach {
+                var newValue = ""
+                var newEnumdicnameid = ""
+                var newEnumdicname = ""
+                var newCoefficientwarehouse = ""
+                var newData: NewSpotInfoData
+                if (it.id == id) {
+                    newValue = if (value.isNullOrEmpty()) {
+                        it.value
+                    } else {
+                        value
+                    }
+                    newEnumdicnameid = if (enumdicnameid.isNullOrEmpty()) {
+                        it.enumdicnameid
+                    } else {
+                        enumdicnameid
+                    }
+                    newEnumdicname = if (enumdicname.isNullOrEmpty()) {
+                        it.enumdicname
+                    } else {
+                        enumdicname
+                    }
+                    newCoefficientwarehouse = if (coefficientwarehouse.isNullOrEmpty()) {
+                        it.coefficientwarehouse
+                    } else {
+                        coefficientwarehouse
+                    }
+                    newData = it.copy(
+                        id = id,
+                        value = newValue,
+                        enumdicname = newEnumdicname,
+                        coefficientwarehouse = newCoefficientwarehouse,
+                        enumdicnameid = newEnumdicnameid
+                    )
+                    newDataList.add(newData)
+                } else {
+                    newDataList.add(it)
+                }
+            }
+            spotModelList.postValue(newDataList)
+            spotModelcacheList.postValue(newDataList)
+        }
+
+    }
+
+    /**
+     * 现货套保品种列表
+     * type 1为添加,2为删除 ,3为更换资料
+     */
+    fun changeMiddleGoodsList(
+        wrstandId : String,//所属新增商品的id
+        type: String,//类型
+        id: String,//列表的下标id
+        middlegoodsId: String = "",//套保id
+        ano: String = "",
+        enumdicname: String = "",
+        enumdicnameid: String = "",
+        costWeight : String = "",//成本权重
+        middleGoodsName: String = ""
+    ) {
+        //暂储存的商品下的套保品种
+        val oldDataCacheList = spotModelcacheList.value?.toArrayList()?.find { data ->
+            data.id == wrstandId
+        }?.middleGoodsList
+        val oldDataList = spotModelList.value?.toArrayList()?.find { data ->
+            data.id == wrstandId
+        }?.middleGoodsList
+        //相应套保品种的列表
+        val newDataList = arrayListOf<NewSpotInfoData>()
+        if (type == "1") {//增加一个套保品种
+            oldDataCacheList?.forEach {
+                newDataList.add(it)
+            }
+            newDataList.add(NewSpotInfoData(id = id, value = ano, middleGoodsId = middlegoodsId))
+            val newSpotList = arrayListOf<NewSpotInfoData>()
+            spotModelcacheList.value?.forEach {
+                if (it.id == wrstandId){
+                    newSpotList.add(it.copy(middleGoodsList = newDataList))
+                }else{
+                    newSpotList.add(it)
+                }
+            }
+            spotModelcacheList.postValue(newSpotList)
+            spotModelList.postValue(newSpotList)
+        } else if (type == "2") {//删除相应的套保品种
+            oldDataCacheList?.forEach {
+
+                if (id != it.id) {
+                    newDataList.add(it.copy(id = oldDataCacheList.indexOf(it).toString()))
+                }
+            }
+            val newSpotList = arrayListOf<NewSpotInfoData>()
+            spotModelcacheList.value?.forEach {
+                if (it.id == wrstandId){
+                    newSpotList.add(it.copy(middleGoodsList = newDataList))
+                }else{
+                    newSpotList.add(it)
+                }
+            }
+            spotModelcacheList.postValue(newSpotList)
+            spotModelList.postValue(newSpotList)
+        } else if (type == "3") {//更换资料
+            oldDataCacheList?.forEach {
+                var newMiddlegoodsId = ""
+                var newEnumdicname = ""
+                var newMiddleGoodsName = ""
+                var newEnumdicnameid = ""
+                var newAno = ""
+                var newCostWeight = ""
+                var newData: NewSpotInfoData
+                if (it.id == id) {
+                    newMiddlegoodsId = if (middlegoodsId.isNullOrEmpty()) {
+                        it.middleGoodsId
+                    } else {
+                        middlegoodsId
+                    }
+                    newMiddleGoodsName = if (middleGoodsName.isNullOrEmpty()) {
+                        it.middleGoodsName
+                    } else {
+                        middleGoodsName
+                    }
+                    newEnumdicname = if (enumdicname.isNullOrEmpty()) {
+                        it.enumdicname
+                    } else {
+                        enumdicname
+                    }
+                    newEnumdicnameid = if (enumdicnameid.isNullOrEmpty()) {
+                        it.enumdicnameid
+                    } else {
+                        enumdicnameid
+                    }
+                    newAno = if (ano.isNullOrEmpty()){
+                        it.value
+                    }else{
+                        ano
+                    }
+                    newCostWeight = if (costWeight.isNullOrEmpty()){
+                        it.costWeight
+                    }else{
+                        costWeight
+                    }
+                    newData = it.copy(
+                        id = id,
+                        value = newAno,
+                        costWeight = newCostWeight,
+                        middleGoodsId = newMiddlegoodsId,
+                        enumdicname = newEnumdicname,
+                        enumdicnameid = newEnumdicnameid,
+                        middleGoodsName = newMiddleGoodsName
+                    )
+                    newDataList.add(newData)
+                } else {
+                    newDataList.add(it)
+                }
+            }
+            val newSpotList = arrayListOf<NewSpotInfoData>()
+            spotModelcacheList.value?.forEach {
+                if (it.id == wrstandId){
+                    newSpotList.add(it.copy(middleGoodsList = newDataList))
+                }else{
+                    newSpotList.add(it)
+                }
+            }
+            spotModelcacheList.postValue(newSpotList)
+        } else if (type == "4") {//用于选择套保品种
+            oldDataCacheList?.forEach {
+                var newMiddlegoodsId = ""
+                var newEnumdicname = ""
+                var newMiddleGoodsName = ""
+                var newAno = ""
+                var newCostWeight = ""
+                var newEnumdicnameid = ""
+                var newData: NewSpotInfoData
+                if (it.id == id) {
+                    newEnumdicnameid = if (enumdicnameid.isNullOrEmpty()) {
+                        it.enumdicname
+                    } else {
+                        enumdicnameid
+                    }
+                    newMiddlegoodsId = if (middlegoodsId.isNullOrEmpty()) {
+                        it.middleGoodsId
+                    } else {
+                        middlegoodsId
+                    }
+                    newMiddleGoodsName = if (middleGoodsName.isNullOrEmpty()) {
+                        it.middleGoodsName
+                    } else {
+                        middleGoodsName
+                    }
+                    newEnumdicname = if (enumdicname.isNullOrEmpty()) {
+                        it.enumdicname
+                    } else {
+                        enumdicname
+                    }
+                    newAno = if (ano.isNullOrEmpty()){
+                        it.value
+                    }else{
+                        ano
+                    }
+                    newCostWeight = if (costWeight.isNullOrEmpty()){
+                        it.costWeight
+                    }else{
+                        costWeight
+                    }
+                    newData = it.copy(
+                        id = id,
+                        value = newAno,
+                        costWeight = newCostWeight,
+                        enumdicnameid = newEnumdicnameid,
+                        middleGoodsId = newMiddlegoodsId,
+                        enumdicname = newEnumdicname,
+                        middleGoodsName = newMiddleGoodsName
+                    )
+                    newDataList.add(newData)
+                } else {
+                    newDataList.add(it)
+                }
+            }
+            val newSpotList = arrayListOf<NewSpotInfoData>()
+            spotModelcacheList.value?.forEach {
+                if (it.id == wrstandId){
+                    newSpotList.add(it.copy(middleGoodsList = newDataList))
+                }else{
+                    newSpotList.add(it)
+                }
+            }
+            spotModelList.postValue(newSpotList)
+            spotModelcacheList.postValue(newSpotList)
+        }
+
+    }
+
+
+    /**
+     * 获取剩下可选择的套保品种
+     * @return List<MiddleGoodsData>
+     */
+    fun getRemainingMiddleGoodsList(): List<GoodsGroupData> {
+        val allSelectDataList = middleGoodsNormalList.value//所有可选择套保品种
+//        val middlegoodList = middlegoodList.value//列表数据已显示的套保品种
+//        val newSelectDataList = arrayListOf<GoodsGroupData>()//剩下的可选择套保品种
+//        allSelectDataList?.forEach { data ->
+//
+//        }
+//        middlegoodList?.forEach { data ->
+//            allSelectDataList?.remove { it.goodsgroupid == data.middleGoodsId }
+//        }
+
+        return allSelectDataList ?: arrayListOf()
+    }
+
 
 }

+ 302 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/modify/SixInsuredVarietyViewHolder.kt

@@ -0,0 +1,302 @@
+package cn.muchinfo.rma.view.base.home.commodity.modify
+
+import android.view.Gravity
+import android.view.View
+import android.view.inputmethod.EditorInfo
+import android.widget.EditText
+import androidx.appcompat.app.AppCompatActivity
+import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.MTPEnums
+import cn.muchinfo.rma.global.data.MiddleGoodsData
+import cn.muchinfo.rma.lifecycle.bindOptional
+import cn.muchinfo.rma.view.autoWidget.*
+import cn.muchinfo.rma.view.base.home.commodity.CommodityInformationViewModel
+import cn.muchinfo.rma.view.base.home.commodity.newspot.NewSpotInfoData
+import cn.muchinfo.rma.view.base.home.commodity.viewholder.SpotInfoData
+import cn.muchinfo.rma.view.base.home.contract.emptyView
+import cn.muchinfo.rma.view.base.home.contract.viewItemUI
+import com.blankj.utilcode.util.ToastUtils
+import mtp.polymer.com.autowidget.adapter.BaseViewHolder
+import mtp.polymer.com.autowidget.dialog.SelectData
+import mtp.polymer.com.autowidget.dialog.creatBottomSheetDialog
+import mtp.polymer.com.autowidget.dialog.creatGoodsHedgeBottomSheetDialog
+import org.jetbrains.anko.*
+import org.jetbrains.anko.sdk25.coroutines.textChangedListener
+
+/**
+ * 6.2期下的新增商品
+ * @property activity AppCompatActivity
+ * @property viewModel CommodityInformationViewModel
+ * @property operationType String  1 是新增,2是修改,3是停用,4详情 5恢复
+ * @property itemSize IntArray
+ * @constructor
+ */
+class SixInsuredVarietyViewHolder(
+    private val activity: AppCompatActivity,
+    private val viewModel: ModifyViewModel,
+    private val operationType : String = "",
+    private val wrstandId : String
+) : BaseViewHolder<NewSpotInfoData>(activity) {
+    override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
+
+    //套保系数
+    lateinit var hedge_coefficient : EditText
+
+    //成本权重
+    lateinit var cost_weight : EditText
+
+    override fun _FrameLayout.createContentView() {
+        verticalLayout {
+            linearLayout {
+                background = resources.getDrawable(R.color.white)
+                gravity = Gravity.CENTER_VERTICAL
+                onThrottleFirstClick {
+                    if (operationType == "4" || operationType == "3" || operationType == "5"){
+                        return@onThrottleFirstClick
+                    }
+
+                    activity.creatGoodsHedgeBottomSheetDialog("请选择套保品种", viewModel.getRemainingMiddleGoodsList()) {
+                        viewModel.changeMiddleGoodsList(wrstandId = wrstandId,type = "4",id = data.value?.id.toString(),ano = "",middlegoodsId = this.goodsgroupid ?: "",enumdicnameid = this.goodunitid ?: "",enumdicname = this.enumdicname ?: "" ?: "",middleGoodsName = this.goodsgroupname ?: "")
+                        hedge_coefficient.setText("")
+                    }
+                }
+                textView {
+                    text = "*"
+                    textColorInt = R.color.rma_star_color
+                    textSizeAuto = 31
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(37)
+                }
+
+                textView {
+                    data.bindOptional(context) {
+                        text = "套保品种"  + + dataIndex.plus(1)
+                    }
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_black_33
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(10)
+                }
+
+                textView {
+                    data.bindOptional(context){
+                        if (it?.middleGoodsName.isNullOrEmpty()){
+                            text = "请选择套保品种"
+                            textColorInt = R.color.rma_hint_text_color_ccc
+                        }else{
+                            text = it?.middleGoodsName
+                            textColorInt = R.color.rma_black_33
+                        }
+                    }
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_hint_text_color_ccc
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(80)
+                }
+
+                emptyView()
+
+                imageView {
+                    if (operationType == "4"){//页面类型为详情时则需要屏蔽相关操作
+                        visibility = View.GONE
+                    }else{
+                        visibility = View.VISIBLE
+                    }
+                    imageResource = R.mipmap.rma_more
+                }.lparams(autoSize(36), autoSize(36)) {
+                    marginEnd = autoSize(25)
+                }
+            }.lparams(matchParent, autoSize(132))
+
+            viewItemUI()
+
+            //单位
+            linearLayout {
+                background = resources.getDrawable(R.color.white)
+                gravity = Gravity.CENTER_VERTICAL
+
+                textView {
+                    text = "单位"
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_black_33
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(60)
+                }
+
+                textView {
+                    data.bindOptional(context){data ->
+                        text = data?.enumdicname
+                        textColorInt = R.color.rma_black_33
+                        viewModel.middleGoodsNormalList.value?.forEach {
+                            if (data?.middleGoodsId == it.goodsgroupid){
+                                text = it.goodunitid ?: ""
+                                textColorInt = R.color.rma_black_33
+                            }else{
+                                text = data?.enumdicname
+                            }
+                        }
+//                        if (it?.enumdicname.isNullOrEmpty()){
+//                            text = ""
+//                        }else{
+//
+//                        }
+                    }
+                    text = "请选择套保品种后自动填入"
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_hint_text_color_ccc
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(150)
+                }
+
+                emptyView()
+
+            }.lparams(matchParent, autoSize(132))
+
+            viewItemUI()
+
+            //折算系数-之前是套保系数(反正改回来改回去的)
+            linearLayout {
+                background = resources.getDrawable(R.color.white)
+                gravity = Gravity.CENTER_VERTICAL
+                textView {
+                    text = "*"
+                    textColorInt = R.color.rma_star_color
+                    textSizeAuto = 31
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(37)
+                }
+
+                textView {
+                    data.bindOptional(context) {
+                        text = "折算系数"
+                    }
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_black_33
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(10)
+                }
+
+                editText {
+                    hedge_coefficient = this
+                    isEnabled = !(operationType == "4" || operationType == "3" || operationType == "5")
+                    data.bindOptional(context){
+                        if (it?.value.isNullOrEmpty().not()){
+                            setText(it?.value)
+                            textColorInt = R.color.rma_black_33
+                        }
+                    }
+                    hint = "请输入折算系数"
+                    textChangedListener {
+                        afterTextChanged {
+                            if (it.toString().isNotEmpty()) {
+                                viewModel.changeMiddleGoodsList(
+                                    wrstandId = wrstandId,
+                                    type = "3",
+                                    id =  data.value?.id.toString(),
+                                    ano = it.toString()
+                                )
+                            }
+                        }
+                    }
+                    background = null
+                    inputType = EditorInfo.TYPE_CLASS_TEXT
+                    hintColorStr = "#CCCCCC"
+                    textSizeAuto = 31
+                    textColorStr = "#333333"
+                }.lparams(autoSize(300), autoSize(132)) {
+                    marginStart = autoSize(60)
+                }
+
+                emptyView()
+            }.lparams(matchParent, autoSize(132))
+
+            viewItemUI()
+
+            //成本权重
+            linearLayout {
+                background = resources.getDrawable(R.color.white)
+                gravity = Gravity.CENTER_VERTICAL
+                textView {
+                    text = "*"
+                    textColorInt = R.color.rma_star_color
+                    textSizeAuto = 31
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(37)
+                }
+
+                textView {
+                    data.bindOptional(context) {
+                        text = "成本权重"
+                    }
+                    textSizeAuto = 31
+                    textColorInt = R.color.rma_black_33
+                }.lparams(wrapContent, wrapContent) {
+                    marginStart = autoSize(10)
+                }
+
+                editText {
+                    cost_weight = this
+                    isEnabled = !(operationType == "4" || operationType == "3" || operationType == "5")
+                    data.bindOptional(context){
+                        if (it?.value.isNullOrEmpty().not()){
+                            setText(it?.value)
+                            textColorInt = R.color.rma_black_33
+                        }
+                    }
+                    hint = "请输入成本权重"
+                    textChangedListener {
+                        afterTextChanged {
+                            if (it.toString().isNotEmpty()) {
+                                viewModel.changeMiddleGoodsList(
+                                    wrstandId = wrstandId,
+                                    type = "3",
+                                    id =  data.value?.id.toString(),
+                                    costWeight = it.toString()
+                                )
+                            }
+                        }
+                    }
+                    background = null
+                    inputType = EditorInfo.TYPE_CLASS_TEXT
+                    hintColorStr = "#CCCCCC"
+                    textSizeAuto = 31
+                    textColorStr = "#333333"
+                }.lparams(autoSize(300), autoSize(132)) {
+                    marginStart = autoSize(60)
+                }
+
+                emptyView()
+
+                imageView {
+                    if (operationType == "4"){//页面类型为详情时则需要屏蔽相关操作
+                        visibility = View.GONE
+                    }else{
+                        visibility = View.VISIBLE
+                    }
+                    isEnabled = !(operationType == "4" || operationType == "3" || operationType == "5")
+                    onThrottleFirstClick {
+//                        if (viewModel.spotModelList.value?.size.toString() == "1") {
+//                            ToastUtils.showLong("最少选择一个套保品种")
+//                            return@onThrottleFirstClick
+//                        }
+                        viewModel.changeMiddleGoodsList(
+                            wrstandId = wrstandId,
+                            type = "2",
+                            id =  dataIndex.plus(1).toString(),
+                            middlegoodsId = ""
+                        )
+
+                    }
+                    imageResource = R.mipmap.rma_delete
+                }.lparams(autoSize(30), autoSize(30)) {
+                    marginEnd = autoSize(31)
+                }
+            }.lparams(matchParent, autoSize(132))
+
+            view {
+                background = resources.getDrawable(R.color.rma_hint_line_color_eee)
+            }.lparams(matchParent, autoSize(20))
+        }
+    }
+
+}

+ 1 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newcommodity/DemoViewHolder.kt

@@ -188,6 +188,7 @@ class DemoViewHolder(
 
                     onThrottleFirstClick {
                         val intent = Intent()
+                        intent.putExtra("deliveryGoodsDetailData",data.value)
                         intent.setClass(context,AddGoodsActivity::class.java)
                         ActivityUtils.startActivity(intent)
                     }

+ 14 - 7
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newcommodity/NewCommodityInformationActivity.kt

@@ -18,7 +18,7 @@ import cn.muchinfo.rma.global.data.MiddleGoodsDetail
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.autoWidget.*
 import cn.muchinfo.rma.view.base.BaseActivity
-import cn.muchinfo.rma.view.base.home.commodity.AddSpotGoodsActivity
+import cn.muchinfo.rma.view.base.home.commodity.modify.AddMiddleGoodsNameActivity
 import cn.muchinfo.rma.view.base.home.commodity.newcommodity.newhedge.NewHedgeSpeciesViewHolder
 import cn.muchinfo.rma.view.base.home.commodity.newspot.NewAddSpotGoodsActivity
 import cn.muchinfo.rma.view.base.home.contract.emptyView
@@ -147,19 +147,26 @@ class NewCommodityInformationActivity : BaseActivity<NewCommodityInformationView
                             ) {
                                 visibility = View.VISIBLE
                             } else {
-                                visibility = View.INVISIBLE
+                                visibility = View.VISIBLE
                             }
                         } else {
-                            visibility = View.INVISIBLE
+                            visibility = View.VISIBLE
                         }
                     }
 
                     imageResource = R.mipmap.add_new
                     onThrottleFirstClick {
-                        val intent = Intent()
-                        intent.putExtra("type", "1")
-                        intent.setClass(context, NewAddSpotGoodsActivity::class.java)
-                        ActivityUtils.startActivity(intent)
+                        if (selectedTabIndex == 0){
+                            val intent = Intent()
+                            intent.putExtra("type", "1")
+                            intent.setClass(context, NewAddSpotGoodsActivity::class.java)
+                            ActivityUtils.startActivity(intent)
+                        }else{
+                            val intent = Intent()
+                            intent.setClass(context, AddMiddleGoodsNameActivity::class.java)
+                            ActivityUtils.startActivity(intent)
+                        }
+
                     }
                 }.lparams(autoSize(48), autoSize(48)) {
                     marginEnd = autoSize(36)

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/home/commodity/newspot/NewAddSpotGoodsViewModel.kt

@@ -67,7 +67,7 @@ class NewAddSpotGoodsViewModel : BaseViewModel(){
     ){
         loadingDialogStatus.value = TaskUiModel.inFlight()
         GlobalScope.launch {
-            MyApplication.getInstance()?.commodityManager?.deliveryGoodsApplyCloudReq(
+            MyApplication.getInstance()?.commodityManager?.deliveryGoodsOperateCommonReq(
                 version = version,
                 deliverygoodscode = deliverygoodscode,
                 deliverygoodsname = deliverygoodsname,

+ 14 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/procurement/ContentAdapter.java

@@ -30,6 +30,7 @@ import cn.muchinfo.rma.global.GlobalDataCollection;
 import cn.muchinfo.rma.global.data.ContractData;
 import cn.muchinfo.rma.view.autoWidget.CustomHorizontalScrollView;
 import cn.muchinfo.rma.view.autoWidget.ListPopWindow;
+import cn.muchinfo.rma.view.base.future.trade.GoodsTradeActivity;
 import cn.muchinfo.rma.view.base.home.contract.ContractDetailsActivity;
 import cn.muchinfo.rma.view.base.home.registration.InvoiceRegistrationActivity;
 import cn.muchinfo.rma.view.base.home.registration.MidpointsRegistrationActivity;
@@ -127,12 +128,14 @@ public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ItemView
             itemViewHolder.allView.setVisibility(View.GONE);
         }
         if (listType.equals("1")) {//待点价列表
+            itemViewHolder.contract_hedges.setVisibility(View.VISIBLE);
             if (type.equals("1")){//采购
                 if (GlobalDataCollection.Companion.getInstance().getFourLevelMenu("client_spots","client_spots_purchase","client_spots_purchase_point","client_spots_purchase_point_point")){
                     itemViewHolder.midpoints_registration.setVisibility(View.VISIBLE);
                 }else {
                     itemViewHolder.midpoints_registration.setVisibility(View.GONE);
                 }
+
             }else {//销售
                 if (GlobalDataCollection.Companion.getInstance().getFourLevelMenu("client_spots","client_spots_sales","client_spots_sales_point","client_spots_sales_point_point")){
                     itemViewHolder.midpoints_registration.setVisibility(View.VISIBLE);
@@ -266,6 +269,15 @@ public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ItemView
             intent.setClass(context, ContractDetailsActivity.class);
             ActivityUtils.startActivity(intent);
         });
+        //套保交易
+        itemViewHolder.contract_hedges.setOnClickListener(view -> {
+            Intent intent = new Intent();
+            intent.putExtra("goodsId",data.getGoodsid());
+            intent.putExtra("outGoodsCode",data.getGoodscode());
+            intent.putExtra("contractData",data);
+            intent.setClass(context, GoodsTradeActivity.class);
+            ActivityUtils.startActivity(intent);
+        });
         itemViewHolder.details.setOnClickListener(view -> {
             Intent intent = new Intent();
             intent.putExtra("data", datas.get(i));
@@ -316,6 +328,7 @@ public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ItemView
         TextView settlement_of_registration;//结算登记
         TextView payment_registration;//款项登记
         TextView warehouse_register;//出入库登记
+        TextView contract_hedges;//套保交易
         TextView contract_completion;//完结合同
         ImageView load_more;//更多
         LinearLayout allView;//隐藏的底部操作空间
@@ -337,6 +350,7 @@ public class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ItemView
 
         public ItemViewHolder(@NonNull View itemView) {
             super(itemView);
+            contract_hedges = itemView.findViewById(R.id.contract_hedges);
             click_icon = itemView.findViewById(R.id.click_icon);
             contract_completion = itemView.findViewById(R.id.contract_completion);
             warehouse_register = itemView.findViewById(R.id.warehouse_register);

+ 6 - 4
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/BusinessAssociationsActivity.kt

@@ -67,10 +67,11 @@ class BusinessAssociationsActivity : BaseActivity<BusinessAssociationsViewModel>
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         verticalLayout {
-            viewModel.querySCMiddleGoods(data = data)
+            initData()
+            viewModel.querySCMiddleGoods(data = data,biztype = "4")
             createLoadingDialog(hintStr = "").bindTaskStatus(context, viewModel.loadingDialogStatus)
             background = resources.getDrawable(R.color.rma_hint_line_color_eee)
-            initData()
+
             topBar {
                 commonLeftButton()
                 commonTitle {
@@ -350,7 +351,8 @@ class BusinessAssociationsActivity : BaseActivity<BusinessAssociationsViewModel>
                                         data = data,
                                         contractno = spot_number_edittext.text.toString(),
                                         customername = counterparty_edittext.text.toString(),
-                                        wrstandardname = spot_goods_edittext.text.toString()
+                                        wrstandardname = spot_goods_edittext.text.toString(),
+                                        biztype = selectBusinessType.value?.id ?: ""
                                     )
                                 }
                                 backgroundResource = R.drawable.yrdz_item_click_bg
@@ -449,7 +451,7 @@ class BusinessAssociationsActivity : BaseActivity<BusinessAssociationsViewModel>
                                         RelatedLot = it.inputNumber?.toDouble() ?: 0.0,
                                         RelatedMode = 2//1自动关联 2手动关联 3 解绑关联
                                     ) {
-
+                                        finish()
                                     }
                                 }
                             }

+ 6 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/BusinessAssociationsViewModel.kt

@@ -36,11 +36,16 @@ class BusinessAssociationsViewModel : BaseViewModel(){
      * @param customername String
      * @param wrstandardname String
      */
-    fun querySCMiddleGoods(data : PaTradeLinkData,contractno : String = "",customername : String = "",wrstandardname : String = ""){
+    fun querySCMiddleGoods(data : PaTradeLinkData,contractno : String = "",customername : String = "",wrstandardname : String = "",biztype : String = ""){
         val params = mutableMapOf<String,String>().apply {
             put("userid",GlobalDataCollection.instance?.loginRsp?.userID.toString())
             put("buyorsell",data.buyorsell ?: "")
             put("goodsgroupid",data.goodsgroupid ?: "")
+            if (biztype == "4"){//套期
+                put("biztype","1")
+            }else if (biztype == "10"){//套利
+                put("biztype","2")
+            }
             if (contractno.isNotEmpty()){
                 put("contractno",contractno)
             }

+ 4 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleAssociationsViewHolder.kt

@@ -1,5 +1,6 @@
 package cn.muchinfo.rma.view.base.spot.associated.perioddocuments
 
+import android.annotation.SuppressLint
 import android.view.Gravity
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
@@ -26,6 +27,7 @@ import org.jetbrains.anko.*
 class FillSingleAssociationsViewHolder(private val activity : AppCompatActivity, private val viewModel: FillSingleConnectionViewModel) : BaseViewHolder<SCMiddleGoodsData>(activity){
     override val itemSize: IntArray = intArrayOf(matchParent, wrapContent)
 
+    @SuppressLint("SetTextI18n")
     override fun _FrameLayout.createContentView() {
         verticalLayout {
             backgroundDrawable = createRoundRectDrawable("#ffffff", 24)
@@ -91,7 +93,7 @@ class FillSingleAssociationsViewHolder(private val activity : AppCompatActivity,
                     gravity = Gravity.BOTTOM
                     textView {
                         data.bindOptional(context){
-                            text = it?.middlegoodspricedqty3 + "/"
+                            text = NumberUtils.roundNum(it?.middlegoodspricedqty3,2) + "/"
                         }
                         textSizeAuto = 34
                         textColorInt = R.color.rma_black_33
@@ -103,7 +105,7 @@ class FillSingleAssociationsViewHolder(private val activity : AppCompatActivity,
 
                     textView {
                         data.bindOptional(context){
-                            text = it?.pricedqty
+                            text = NumberUtils.roundNum(it?.relatedmiddlegoodsqty,2)
                         }
                         textSizeAuto = 34
                         textColorInt = R.color.rma_black_33

+ 9 - 6
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleConnectionActivity.kt

@@ -456,15 +456,15 @@ class FillSingleConnectionActivity : BaseActivity<FillSingleConnectionViewModel>
                                         value = "无关联"
                                     ),
                                     SelectData(
-                                        id = "1",
+                                        id = "4",
                                         value = "套期保值"
                                     ),
                                     SelectData(
-                                        id = "2",
+                                        id = "10",
                                         value = "套利"
                                     ),
                                     SelectData(
-                                        id = "3",
+                                        id = "11",
                                         value = "换月"
                                     )
                                 )
@@ -535,7 +535,7 @@ class FillSingleConnectionActivity : BaseActivity<FillSingleConnectionViewModel>
 
                             textView {
                                 viewModel.selectSpotData.bindOptional(context){
-                                    text = "当前关联数量" + it?.middlegoodspricedqty3?.toDouble()?.minus(it.relatedmiddlegoodsqty?.toDouble() ?: 0.0) + "手<=" +  number_edittext.text.toString() + "手"
+                                    text = "当前关联数量" + NumberUtils.roundNum(it?.middlegoodspricedqty3?.toDouble()?.minus(it.relatedmiddlegoodsqty?.toDouble() ?: 0.0) ?: 0.0,2) + "手<=" +  number_edittext.text.toString() + "手"
                                 }
                                 textSizeAuto = 29
                                 textColorInt = R.color.rma_red_color
@@ -628,7 +628,8 @@ class FillSingleConnectionActivity : BaseActivity<FillSingleConnectionViewModel>
                                         goodsgroupid = selectGoodsGroup.value?.id ?: "",
                                         contractno = spot_number_edittext.text.toString(),
                                         customername = counterparty_edittext.text.toString(),
-                                        wrstandardname = spot_goods_edittext.text.toString()
+                                        wrstandardname = spot_goods_edittext.text.toString(),
+                                        biztype = selectBusinessType.value?.id ?: ""
                                     )
                                 }
                                 backgroundResource = R.drawable.yrdz_item_click_bg
@@ -704,7 +705,9 @@ class FillSingleConnectionActivity : BaseActivity<FillSingleConnectionViewModel>
                             }
                             background = resources.getDrawable(R.color.segtabment_bg_color)
                             adapter = businessAssociationsAdapter
-                        }.lparams(matchParent, matchParent)
+                        }.lparams(matchParent, matchParent){
+                            bottomMargin = autoSize(150)
+                        }
 
                         viewModel.associationsSpotDataList.bindOptional(context) {
                             businessAssociationsAdapter.setNewData(it)

+ 11 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/perioddocuments/FillSingleConnectionViewModel.kt

@@ -63,11 +63,20 @@ class FillSingleConnectionViewModel : BaseViewModel(){
      * @param customername String
      * @param wrstandardname String
      */
-    fun querySCMiddleGoods(buyorsell : String,goodsgroupid : String, contractno : String = "", customername : String = "", wrstandardname : String = ""){
+    fun querySCMiddleGoods(buyorsell : String,goodsgroupid : String, contractno : String = "", customername : String = "", wrstandardname : String = "",biztype : String = ""){
         val params = mutableMapOf<String,String>().apply {
             put("userid",GlobalDataCollection.instance?.loginRsp?.userID.toString())
-            put("buyorsell",buyorsell)
+            if (buyorsell == "0"){
+                put("buyorsell","1")
+            }else{
+                put("buyorsell","0")
+            }
             put("goodsgroupid",goodsgroupid)
+            if (biztype == "4"){//套期
+                put("biztype","1")
+            }else if (biztype == "10"){//套利
+                put("biztype","2")
+            }
             if (contractno.isNotEmpty()){
                 put("contractno",contractno)
             }

+ 9 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/spot/associated/relationalrecord/RelationalRecordContentAdapter.java

@@ -128,7 +128,15 @@ public class RelationalRecordContentAdapter extends RecyclerView.Adapter<Relatio
             }
         });
         if (GlobalDataCollection.Companion.getInstance().getFourLevelMenu("client_spots", "client_spots_link", "client_spots_link_logs", "client_spots_link_logs_unlink")) {
-            itemViewHolder.dissociated.setVisibility(View.VISIBLE);
+            if (data.getRelatedmode().equals("1") || data.getRelatedmode().equals("2")){
+                if (data.getLinkstatus().equals("1")){
+                    itemViewHolder.dissociated.setVisibility(View.VISIBLE);
+                }else {
+                    itemViewHolder.dissociated.setVisibility(View.GONE);
+                }
+            }else {
+                itemViewHolder.dissociated.setVisibility(View.GONE);
+            }
         }else {
             itemViewHolder.dissociated.setVisibility(View.GONE);
         }

+ 12 - 0
RMA/app/src/main/res/layout/layout_item_content.xml

@@ -148,6 +148,18 @@
             android:background="@drawable/rma_item_click_bg"/>
 
         <TextView
+            android:visibility="gone"
+            android:id="@+id/contract_hedges"
+            android:layout_marginEnd="5dp"
+            android:gravity="center"
+            android:textSize="12sp"
+            android:layout_width="60dp"
+            android:layout_height="25dp"
+            android:text="套保对冲"
+            android:textColor="@color/rma_blue_color"
+            android:background="@drawable/rma_item_click_bg"/>
+
+        <TextView
             android:id="@+id/details"
             android:layout_marginEnd="5dp"
             android:gravity="center"

Някои файлове не бяха показани, защото твърде много файлове са промени