zhou.xiaoning 3 лет назад
Родитель
Сommit
5f9f13e0aa
4 измененных файлов с 57 добавлено и 15 удалено
  1. 6 6
      config/config.xml
  2. 7 0
      config/pcweb_menu/pcweb_menu_qyfg.json
  3. 15 8
      models/ermcp8.go
  4. 29 1
      models/ermcpExposure.go

+ 6 - 6
config/config.xml

@@ -13,11 +13,11 @@
     <DbAddress value="192.168.31.88"/>
     <DbName value="orcl"/>
     <DbPort value="1521"/>
-    <DbUser value="mtp2_test203"/>
+    <DbUser value="mtp2_test137"/>
     <DbPwd value="muchinfo"/>
   </DbSetting>
   <RedisSetting>
-    <Address value="192.168.31.203"/>
+    <Address value="192.168.31.137"/>
     <Port value="5007"/>
     <Timeout value="3"/>
     <ConnNum value="1"/>
@@ -25,11 +25,11 @@
     <Pwd value=""/>
   </RedisSetting>
   <MqSetting>
-    <Url value="amqp://guest:guest@192.168.31.203:5020/test"/>
+    <Url value="amqp://guest:guest@192.168.31.137:5020/test"/>
     <Exchange value="entry"/>
   </MqSetting>
   <MongoDBSetting>
-    <HostName value="192.168.31.203"/>
+    <HostName value="192.168.31.137"/>
     <Port value="5025"/>
     <DBName value="HistoryQuote"/>
     <Username value="quote_test01"/>
@@ -38,8 +38,8 @@
   <MySQLSetting>
     <Host value="192.168.30.72"/>
     <Port value="3306"/>
-    <DBName value="historyquote_test203"/>
-    <Username value="quote_test203"/>
+    <DBName value="historyquote_test137"/>
+    <Username value="quote_test137"/>
     <Password value="123456"/>
   </MySQLSetting>
 </Configuration>

+ 7 - 0
config/pcweb_menu/pcweb_menu_qyfg.json

@@ -1106,6 +1106,13 @@
                         "remark": "",
                         "auth": [
                             {
+                                "label": "补单关联",
+                                "rulekey": "client_pc_web_qiyefengguan_hedgeditem_futures_in_add",
+                                "code": "add",
+                                "isshow": true,
+                                "remark": ""
+                            },
+                            {
                                 "label": "关联",
                                 "rulekey": "client_pc_web_qiyefengguan_hedgeditem_futures_in_bind",
                                 "code": "bind",

+ 15 - 8
models/ermcp8.go

@@ -519,7 +519,7 @@ func (r *Ermcpjrlinkpos) buildSql() string {
 			t.OPTIONCODE,
 			t.CLOSEPL,
 			t.NETQTY,
-			((t.TotalBuyHoldAmount - t.TotalSellHoldAmount) / (t.NetQty * g.agreeunit)) AVERAGEPRICE,
+			decode(t.NetQty, 0, 0, ((t.TotalBuyHoldAmount - t.TotalSellHoldAmount) / (t.NetQty * g.agreeunit))) AVERAGEPRICE,
 			mg.middlegoodsname,
 			mg.middlegoodscode,
 			(t.NETQTY * gc.convertratio * g.agreeunit) FUTUREHEDGEQTY
@@ -1437,11 +1437,15 @@ func (r *Ermcp8RunningHedgeditem) ParseFromProto(p *pb.Ermcp2HedgedItemInfo) {
 	r.Hedgeditemnum = p.Hedgeditemext.Item.GetHedgedItemNum()
 	r.Hedgeditemname = p.Hedgeditemext.Item.GetHedgedItemName()
 	r.Hedgedtype = int32(p.Hedgeditemext.Item.GetHedgedType())
-	if p, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanStartDate().GetDateStr()); err == nil {
-		r.Planstartdate = p.Format("2006-01-02")
+	if f, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanStartDate().GetDateStr()); err == nil {
+		r.Planstartdate = f.Format("2006-01-02")
+	} else {
+		r.Planstartdate = p.Hedgeditemext.Item.GetPlanStartDate().GetDateStr()
 	}
-	if p, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanEndDate().GetDateStr()); err == nil {
-		r.Planenddate = p.Format("2006-01-02")
+	if f, err := time.Parse("2006-01-02 15:04:05", p.Hedgeditemext.Item.GetPlanEndDate().GetDateStr()); err == nil {
+		r.Planenddate = f.Format("2006-01-02")
+	} else {
+		r.Planenddate = p.Hedgeditemext.Item.GetPlanEndDate().GetDateStr()
 	}
 	r.Hedgerate = p.Hedgeditemext.Item.GetHedgeRate()
 	r.Tradeuserid = int64(*p.Hedgeditemext.Item.TradeUserID)
@@ -1544,9 +1548,12 @@ func (r *Ermcp8RunningHedgeditem) GetDataEx(userID int) (interface{}, error) {
 					if itemValue, err := redisCli.Get(itemKey).Result(); err == nil {
 						var data pb.Ermcp2HedgedItemInfo
 						if err = proto.Unmarshal([]byte(itemValue), &data); err == nil {
-							m := Ermcp8RunningHedgeditem{}
-							m.ParseFromProto(&data)
-							sData = append(sData, m)
+							// 只加载执行中的项目
+							if data.Hedgeditemext.Item.GetHedgedItemStatus() == 2 {
+								m := Ermcp8RunningHedgeditem{}
+								m.ParseFromProto(&data)
+								sData = append(sData, m)
+							}
 						}
 					}
 				}

+ 29 - 1
models/ermcpExposure.go

@@ -756,7 +756,7 @@ type ErmcpExposurePostion struct {
 	DiffHedgeQty     float64 `json:"diffhedgeqty"  xorm:"'DiffHedgeQty'"`         // 套保品种变动量=持仓变动量*期货合约单位*期货品种系数
 	AGREEUNIT        string  `json:"agreeunit"`                                   // 合约单位
 	CONVERTRATIO     float64 `json:"convertratio"`                                // 期货品种系数(折算系数)
-	ACCOUNTID        int64   `json:"accountid"  xorm:"'ACCOUNTID'"`               // 资金账号(只有外部账号才有值, 内部账号是根据userid汇总的)
+	ACCOUNTID        int64   `json:"-"  xorm:"'ACCOUNTID'"`                       // 资金账号(只有外部账号才有值, 内部账号是根据userid汇总的)
 	HEDGEACCOUNTCODE string  `json:"hedgeaccountcode"  xorm:"'HEDGEACCOUNTCODE'"` // 对冲账号(只有外部账号才有值)
 
 	MIDDLEGOODSNAME string  `json:"middlegoodsname"  xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
@@ -826,10 +826,24 @@ func (r *ErmcpExposurePostion) GetDataEx() (interface{}, error) {
 		}
 
 		// 合并处理
+	LOOP1:
 		for i := range sPostion {
 			if val, ok := sGoods[sPostion[i].HEDGEGOODSID]; ok {
 				d := ErmcpExposurePostion{}
 				d.ParseFromHedgePos(val, &sPostion[i])
+				// 如果已存在此合约,则把相关数据合并
+				for j, item := range sData {
+					if item.GOODSID == d.GOODSID {
+						srcData := &sData[j]
+						srcData.YdQty += d.YdQty
+						srcData.CurQty += d.CurQty
+						srcData.DiffQty += d.DiffQty
+						srcData.DiffHedgeQty += d.DiffHedgeQty
+						srcData.CurHedgeQty += d.CurHedgeQty
+
+						continue LOOP1
+					}
+				}
 				sData = append(sData, d)
 			}
 		}
@@ -840,11 +854,25 @@ func (r *ErmcpExposurePostion) GetDataEx() (interface{}, error) {
 		if err1 != nil || sPostion == nil || len(sPostion) == 0 {
 			return sData, err1
 		}
+	LOOP2:
 		// 合并处理
 		for i := range sPostion {
 			if val, ok := sGoods[sPostion[i].GOODSID]; ok {
 				d := ErmcpExposurePostion{}
 				d.ParseFromPos(val, &sPostion[i])
+				// 如果已存在此合约,则把相关数据合并
+				for j, item := range sData {
+					if item.GOODSID == d.GOODSID {
+						srcData := &sData[j]
+						srcData.YdQty += d.YdQty
+						srcData.CurQty += d.CurQty
+						srcData.DiffQty += d.DiffQty
+						srcData.DiffHedgeQty += d.DiffHedgeQty
+						srcData.CurHedgeQty += d.CurHedgeQty
+
+						continue LOOP2
+					}
+				}
 				sData = append(sData, d)
 			}
 		}