Pārlūkot izejas kodu

修改接口: 品种 -> 品类
1. 敞口->现货头寸
2. 敞口->现货头寸->现货明细
3. 敞口->现货明细

zou.yingbin 4 gadi atpakaļ
vecāks
revīzija
87b7303c19
5 mainītis faili ar 299 papildinājumiem un 275 dzēšanām
  1. 5 5
      controllers/ermcp3/qryErmcp3.go
  2. 50 42
      docs/docs.go
  3. 50 42
      docs/swagger.json
  4. 38 32
      docs/swagger.yaml
  5. 156 154
      models/ermcp3.go

+ 5 - 5
controllers/ermcp3/qryErmcp3.go

@@ -196,7 +196,7 @@ func QueryExposureSpot(c *gin.Context) {
 // @Security ApiKeyAuth
 // @Param userid query int true "用户id"
 // @Param usertype query int false "用户类型 2-机构 7-企业成员"
-// @Param deliverygoodsid query int true "现货品种ID"
+// @Param wrstandardid query int true "现货商品ID"
 // @Success 200 {array} models.Ermcp3AreaSpotDetail
 // @Failure 500 {object} app.Response
 // @Router /Ermcp3/QueryExposureSpotDetail [get]
@@ -204,13 +204,13 @@ func QueryExposureSpot(c *gin.Context) {
 func QueryExposureSpotDetail(c *gin.Context) {
 	appG := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
-		USERID          int64 `form:"userid" binding:"required"`          // 用户id
-		USERTYPE        int32 `form:"usertype"`                           // 用户类型
-		DELIVERYGOODSID int32 `form:"deliverygoodsid" binding:"required"` // 现货商品id
+		USERID       int64 `form:"userid" binding:"required"`       // 用户id
+		USERTYPE     int32 `form:"usertype"`                        // 用户类型
+		WRSTANDARDID int32 `form:"wrstandardid" binding:"required"` // 现货商品id
 	}{}
 	appG.DoBindReq(&req)
 	m := models.Ermcp3AreaSpotDetail{UserId: req.USERID,
-		DELIVERYGOODSID: req.DELIVERYGOODSID}
+		WRSTANDARDID: req.WRSTANDARDID}
 	appG.DoGetDataI(&m)
 }
 

+ 50 - 42
docs/docs.go

@@ -4195,8 +4195,8 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "现货品ID",
-                        "name": "deliverygoodsid",
+                        "description": "现货品ID",
+                        "name": "wrstandardid",
                         "in": "query",
                         "required": true
                     }
@@ -17439,30 +17439,18 @@ var doc = `{
                     "description": "所属机构",
                     "type": "integer"
                 },
+                "convertratio": {
+                    "description": "套保系数",
+                    "type": "number"
+                },
                 "decreaseqty": {
                     "description": "减少数量=-(销售已定价数量+采购计划数量)",
                     "type": "number"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "单位名称",
                     "type": "string"
                 },
-                "goodsunitid": {
-                    "description": "现货品种单位id",
-                    "type": "integer"
-                },
                 "increaseqty": {
                     "description": "增加数量=销售计划数量+采购已定价数量",
                     "type": "number"
@@ -17475,9 +17463,25 @@ var doc = `{
                     "description": "当前数量(现货头寸总量) =  (销售计划数量 - 销售已定价数量)  - (采购计划数量 - 采购已定价数量)",
                     "type": "number"
                 },
+                "unitid": {
+                    "description": "现货商品单位id",
+                    "type": "integer"
+                },
                 "updatetime": {
                     "description": "更新时间",
                     "type": "string"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },
@@ -17492,18 +17496,6 @@ var doc = `{
                     "description": "创建时间",
                     "type": "string"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "现货商品单位名称",
                     "type": "string"
@@ -17531,6 +17523,18 @@ var doc = `{
                 "strtime": {
                     "description": "时间",
                     "type": "string"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },
@@ -18709,18 +18713,6 @@ var doc = `{
                     "description": "时间",
                     "type": "string"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "现货商品单位名称",
                     "type": "string"
@@ -18756,6 +18748,22 @@ var doc = `{
                 "relateNo": {
                     "description": "现货合同/套保计划编号",
                     "type": "string"
+                },
+                "unitid": {
+                    "description": "现货商品单位id",
+                    "type": "integer"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },

+ 50 - 42
docs/swagger.json

@@ -4179,8 +4179,8 @@
                     },
                     {
                         "type": "integer",
-                        "description": "现货品ID",
-                        "name": "deliverygoodsid",
+                        "description": "现货品ID",
+                        "name": "wrstandardid",
                         "in": "query",
                         "required": true
                     }
@@ -17423,30 +17423,18 @@
                     "description": "所属机构",
                     "type": "integer"
                 },
+                "convertratio": {
+                    "description": "套保系数",
+                    "type": "number"
+                },
                 "decreaseqty": {
                     "description": "减少数量=-(销售已定价数量+采购计划数量)",
                     "type": "number"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "单位名称",
                     "type": "string"
                 },
-                "goodsunitid": {
-                    "description": "现货品种单位id",
-                    "type": "integer"
-                },
                 "increaseqty": {
                     "description": "增加数量=销售计划数量+采购已定价数量",
                     "type": "number"
@@ -17459,9 +17447,25 @@
                     "description": "当前数量(现货头寸总量) =  (销售计划数量 - 销售已定价数量)  - (采购计划数量 - 采购已定价数量)",
                     "type": "number"
                 },
+                "unitid": {
+                    "description": "现货商品单位id",
+                    "type": "integer"
+                },
                 "updatetime": {
                     "description": "更新时间",
                     "type": "string"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },
@@ -17476,18 +17480,6 @@
                     "description": "创建时间",
                     "type": "string"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "现货商品单位名称",
                     "type": "string"
@@ -17515,6 +17507,18 @@
                 "strtime": {
                     "description": "时间",
                     "type": "string"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },
@@ -18693,18 +18697,6 @@
                     "description": "时间",
                     "type": "string"
                 },
-                "deliverygoodscode": {
-                    "description": "现货品种代码",
-                    "type": "string"
-                },
-                "deliverygoodsid": {
-                    "description": "现货品种id",
-                    "type": "integer"
-                },
-                "deliverygoodsname": {
-                    "description": "现货品种名称",
-                    "type": "string"
-                },
                 "enumdicname": {
                     "description": "现货商品单位名称",
                     "type": "string"
@@ -18740,6 +18732,22 @@
                 "relateNo": {
                     "description": "现货合同/套保计划编号",
                     "type": "string"
+                },
+                "unitid": {
+                    "description": "现货商品单位id",
+                    "type": "integer"
+                },
+                "wrstandardcode": {
+                    "description": "现货商品代码",
+                    "type": "string"
+                },
+                "wrstandardid": {
+                    "description": "现货商品ID(SEQ_WRSTANDARD)",
+                    "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "现货商品名称",
+                    "type": "string"
                 }
             }
         },

+ 38 - 32
docs/swagger.yaml

@@ -3130,24 +3130,15 @@ definitions:
       areauserid:
         description: 所属机构
         type: integer
+      convertratio:
+        description: 套保系数
+        type: number
       decreaseqty:
         description: 减少数量=-(销售已定价数量+采购计划数量)
         type: number
-      deliverygoodscode:
-        description: 现货品种代码
-        type: string
-      deliverygoodsid:
-        description: 现货品种id
-        type: integer
-      deliverygoodsname:
-        description: 现货品种名称
-        type: string
       enumdicname:
         description: 单位名称
         type: string
-      goodsunitid:
-        description: 现货品种单位id
-        type: integer
       increaseqty:
         description: 增加数量=销售计划数量+采购已定价数量
         type: number
@@ -3157,9 +3148,21 @@ definitions:
       totalspotqty:
         description: 当前数量(现货头寸总量) =  (销售计划数量 - 销售已定价数量)  - (采购计划数量 - 采购已定价数量)
         type: number
+      unitid:
+        description: 现货商品单位id
+        type: integer
       updatetime:
         description: 更新时间
         type: string
+      wrstandardcode:
+        description: 现货商品代码
+        type: string
+      wrstandardid:
+        description: 现货商品ID(SEQ_WRSTANDARD)
+        type: integer
+      wrstandardname:
+        description: 现货商品名称
+        type: string
     type: object
   models.Ermcp3AreaSpotDetail:
     properties:
@@ -3169,15 +3172,6 @@ definitions:
       createtime:
         description: 创建时间
         type: string
-      deliverygoodscode:
-        description: 现货品种代码
-        type: string
-      deliverygoodsid:
-        description: 现货品种id
-        type: integer
-      deliverygoodsname:
-        description: 现货品种名称
-        type: string
       enumdicname:
         description: 现货商品单位名称
         type: string
@@ -3199,6 +3193,15 @@ definitions:
       strtime:
         description: 时间
         type: string
+      wrstandardcode:
+        description: 现货商品代码
+        type: string
+      wrstandardid:
+        description: 现货商品ID(SEQ_WRSTANDARD)
+        type: integer
+      wrstandardname:
+        description: 现货商品名称
+        type: string
     type: object
   models.Ermcp3AreaSpotPLReport:
     properties:
@@ -4074,15 +4077,6 @@ definitions:
       createtime:
         description: 时间
         type: string
-      deliverygoodscode:
-        description: 现货品种代码
-        type: string
-      deliverygoodsid:
-        description: 现货品种id
-        type: integer
-      deliverygoodsname:
-        description: 现货品种名称
-        type: string
       enumdicname:
         description: 现货商品单位名称
         type: string
@@ -4110,6 +4104,18 @@ definitions:
       relateNo:
         description: 现货合同/套保计划编号
         type: string
+      unitid:
+        description: 现货商品单位id
+        type: integer
+      wrstandardcode:
+        description: 现货商品代码
+        type: string
+      wrstandardid:
+        description: 现货商品ID(SEQ_WRSTANDARD)
+        type: integer
+      wrstandardname:
+        description: 现货商品名称
+        type: string
     type: object
   models.Ermcp3ExposureFutuDetail:
     properties:
@@ -20705,9 +20711,9 @@ paths:
         in: query
         name: usertype
         type: integer
-      - description: 现货品ID
+      - description: 现货品ID
         in: query
-        name: deliverygoodsid
+        name: wrstandardid
         required: true
         type: integer
       produces:

+ 156 - 154
models/ermcp3.go

@@ -1017,25 +1017,28 @@ func (r *Ermcp3SellBuyContract) GetDataEx() (interface{}, error) {
 
 // Ermcp3ExposureDetail 敞口现货明细
 type Ermcp3ExposureDetail struct {
-	Createtime        string  `json:"createtime"  xorm:"'createtime'"`               // 时间
-	Areauserid        int64   `json:"areauserid"  xorm:"'areauserid'"`               // 机构ID
-	Logtype           int32   `json:"logtype"  xorm:"'logtype'"`                     // 类型 - 1:套保计划 2:现货合同
-	Contracttype      int32   `json:"contracttype"  xorm:"'contracttype'"`           // 现货合同类型 - 1:采购 -1:销售
-	Qty               float64 `json:"qty"  xorm:"'qty'"`                             // 数量
-	RelateNo          string  `json:"relateNo"  xorm:"'relateNo'"`                   // 现货合同/套保计划编号
-	Middlegoodsname   string  `json:"middlegoodsname"  xorm:"'middlegoodsname'"`     // 套保商品名称
-	Middlegoodscode   string  `json:"middlegoodscode"  xorm:"'middlegoodscode'"`     // 套保商品代码
-	MiddlegoodsId     int32   `json:"middlegoodsId"  xorm:"'middlegoodsId'"`         // 套保商品id
-	Unitid            int32   `json:"-"  xorm:"'unitid'"`                            // 现货商品单位ID
-	Enumdicname       string  `json:"enumdicname"  xorm:"'enumdicname'"`             // 现货商品单位名称
-	ChangeQty         float64 `json:"changeQty"  xorm:"'changeQty'"`                 // 套保变动量
-	Convertfactor     float64 `json:"convertfactor"  xorm:"'convertfactor'"`         // 标仓系数
-	Convertratio      float64 `json:"convertratio"  xorm:"'convertratio'"`           // 套保系数
-	DELIVERYGOODSID   int32   `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"`     // 现货品种id
-	DELIVERYGOODSCODE string  `json:"deliverygoodscode"  xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
-	DELIVERYGOODSNAME string  `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
-	MGUNITID          int32   `json:"mgunitid"  xorm:"'MGUNITID'"`                   // 套保品种单位id
-	MGUNITIDNAME      string  `json:"mgunitidname"`                                  // 套保品种单位名称
+	Createtime        string  `json:"createtime"  xorm:"'createtime'"`           // 时间
+	Areauserid        int64   `json:"areauserid"  xorm:"'areauserid'"`           // 机构ID
+	Logtype           int32   `json:"logtype"  xorm:"'logtype'"`                 // 类型 - 1:套保计划 2:现货合同
+	Contracttype      int32   `json:"contracttype"  xorm:"'contracttype'"`       // 现货合同类型 - 1:采购 -1:销售
+	Qty               float64 `json:"qty"  xorm:"'qty'"`                         // 数量
+	RelateNo          string  `json:"relateNo"  xorm:"'relateNo'"`               // 现货合同/套保计划编号
+	Middlegoodsname   string  `json:"middlegoodsname"  xorm:"'middlegoodsname'"` // 套保商品名称
+	Middlegoodscode   string  `json:"middlegoodscode"  xorm:"'middlegoodscode'"` // 套保商品代码
+	MiddlegoodsId     int32   `json:"middlegoodsId"  xorm:"'middlegoodsId'"`     // 套保商品id
+	ChangeQty         float64 `json:"changeQty"  xorm:"'changeQty'"`             // 套保变动量
+	Convertfactor     float64 `json:"convertfactor"  xorm:"'convertfactor'"`     // 标仓系数
+	Convertratio      float64 `json:"convertratio"  xorm:"'convertratio'"`       // 套保系数
+	DELIVERYGOODSID   int32   `json:"-"  xorm:"'DELIVERYGOODSID'"`               // 现货品种id
+	DELIVERYGOODSCODE string  `json:"-"  xorm:"'DELIVERYGOODSCODE'"`             // 现货品种代码
+	DELIVERYGOODSNAME string  `json:"-"  xorm:"'DELIVERYGOODSNAME'"`             // 现货品种名称
+	MGUNITID          int32   `json:"mgunitid"  xorm:"'MGUNITID'"`               // 套保品种单位id
+	MGUNITIDNAME      string  `json:"mgunitidname"`                              // 套保品种单位名称
+	WRSTANDARDID      int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`       // 现货商品ID(SEQ_WRSTANDARD)
+	WRSTANDARDCODE    string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`   // 现货商品代码
+	WRSTANDARDNAME    string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`   // 现货商品名称
+	UNITID            int32   `json:"unitid"  xorm:"'UNITID'"`                   // 现货商品单位id
+	ENUMDICNAME       string  `json:"enumdicname"  xorm:"'enumdicname'"`         // 现货商品单位名称
 }
 
 func (r *Ermcp3ExposureDetail) calc() {
@@ -1051,56 +1054,43 @@ func (r *Ermcp3ExposureDetail) calc() {
 		r.Qty *= -1
 	}
 
-	if r.Convertratio > 0 && r.Convertfactor > 0 {
-		r.Qty = r.Qty / r.Convertfactor / r.Convertratio
-	}
 	r.MGUNITIDNAME = mtpcache.GetEnumDicitemName(r.MGUNITID)
 }
 
 func (r *Ermcp3ExposureDetail) buildSql() string {
-	var sqlId utils.SQLVal = "with tmp as" +
-		" (select 2                as LogType," +
-		"         s.spotcontractid as relatedid," +
-		"         s.contractno     as relateNo," +
-		"         s.qty" +
-		"    from ermcp_spotcontract s" +
-		"  union all" +
-		"  select 1," +
-		"         t.hedgeplanid as relateid," +
-		"         t.hedgeplanno as relateNo," +
-		"         t.planqty     as qty" +
-		"    from ermcp_hedgeplan t)" +
-		"select to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
-		"       t.middlegoodsid," +
-		"       t.areauserid," +
-		"       t.logtype," +
-		"       t.contracttype," +
-		"       t.qty," +
-		"       t.convertfactor," +
-		"       t.convertratio," +
-		"       t.qty changeQty," +
-		"       tmp.relateNo," +
-		"       m.middlegoodsname," +
-		"       m.middlegoodscode," +
-		"       m.goodsunitid mgunitid," +
-		"       g.deliverygoodsid," +
-		"       g.deliverygoodscode," +
-		"       g.deliverygoodsname," +
-		"       g.goodsunitid unitid," +
-		"       e.enumdicname" +
-		"  from ermcp_spotexposurelog t" +
-		"  left join erms_middlegoods m" +
-		"    on t.middlegoodsid = m.middlegoodsid" +
-		"  left join deliverygoods g" +
-		"    on t.deliverygoodsid = g.deliverygoodsid" +
-		"  left join enumdicitem e" +
-		"    on g.goodsunitid = e.enumitemname" +
-		"   and e.enumdiccode = 'goodsunit'" +
-		"  left join tmp" +
-		"    on t.logtype = tmp.LogType" +
-		"   and t.relatedid = tmp.relatedid" +
-		" where 1=1 and t.tradedate=to_char(sysdate, 'yyyymmdd')"
-	sqlId.And("t.areauserid", r.Areauserid)
+	var sqlId utils.SQLVal = `
+select to_char(t.updatetime, 'yyyy-mm-dd hh24:mi:ss') createtime,
+       s.userid as areauserid,
+       2 as LogType,
+       s.contracttype,
+       t.todaypricedqty qty,
+       to_char(s.spotcontractid) as relateid,
+       s.contractno as relateNo,
+       t.todaypricedqty * c.convertratio * (1 / (1 + nvl(w.vatrate, 0))) as changeQty,
+       m.middlegoodsid,
+       m.middlegoodsname,
+       m.middlegoodscode,
+       m.goodsunitid mgunitid,
+       w.wrstandardid,
+       w.wrstandardcode,
+       w.wrstandardname,
+       w.unitid,
+       e.enumdicname
+  from ERMCP_SCMiddleGoods t
+ inner join ermcp_spotcontract s
+    on t.spotcontractid = s.spotcontractid
+  left join erms_middlegoods m
+    on t.middlegoodsid = m.middlegoodsid
+  left join erms2_wrsconvertdetail c
+    on t.middlegoodsid = c.middlegoodsid
+   and t.wrstandardid = c.wrstandardid
+  left join wrstandard w
+    on t.wrstandardid = w.wrstandardid
+  left join enumdicitem e
+    on w.unitid = e.enumitemname
+   and e.enumdiccode = 'goodsunit'
+`
+	sqlId.And("s.userid", r.Areauserid)
 	sqlId.And("t.middlegoodsid", r.MiddlegoodsId)
 	return sqlId.String()
 }
@@ -1121,24 +1111,25 @@ func (r *Ermcp3ExposureDetail) GetDataEx() (interface{}, error) {
 
 // Ermcp3AreaSpot 敞口现货头寸
 type Ermcp3AreaSpot struct {
-	AREAUSERID        int64   `json:"areauserid"  xorm:"'AREAUSERID'"`               // 所属机构
-	ORIBUYPLANQTY     float64 `json:"-"  xorm:"'ORIBUYPLANQTY'"`                     // 期初采购计划数量
-	ORIBUYPRICEDQTY   float64 `json:"-"  xorm:"'ORIBUYPRICEDQTY'"`                   // 期初采购合同已定价数量
-	ORISELLPLANQTY    float64 `json:"-"  xorm:"'ORISELLPLANQTY'"`                    // 期初销售计划数量
-	ORISELLPRICEDQTY  float64 `json:"-"  xorm:"'ORISELLPRICEDQTY'"`                  // 期初销售合同已定价数量
-	BUYPLANQTY        float64 `json:"-"  xorm:"'BUYPLANQTY'"`                        // 采购计划数量
-	BUYPRICEDQTY      float64 `json:"-"  xorm:"'BUYPRICEDQTY'"`                      // 采购合同已定价数量
-	SELLPLANQTY       float64 `json:"-"  xorm:"'SELLPLANQTY'"`                       // 销售计划数量
-	SELLPRICEDQTY     float64 `json:"-"  xorm:"'SELLPRICEDQTY'"`                     // 销售合同已定价数量
-	TOTALSPOTQTY      float64 `json:"totalspotqty"  xorm:"'TOTALSPOTQTY'"`           // 当前数量(现货头寸总量) =  (销售计划数量 - 销售已定价数量)  - (采购计划数量 - 采购已定价数量)
-	OriToalSpotQty    float64 `json:"oritoalspotqty"  xorm:"'OriToalSpotQty'"`       // 昨日数量
-	IncreaseQty       float64 `json:"increaseqty"  xorm:"'IncreaseQty'"`             // 增加数量=销售计划数量+采购已定价数量
-	DecreaseQty       float64 `json:"decreaseqty"  xorm:"'DecreaseQty'"`             // 减少数量=-(销售已定价数量+采购计划数量)
-	UPDATETIME        string  `json:"updatetime"  xorm:"'UPDATETIME'"`               // 更新时间
-	DELIVERYGOODSID   int32   `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"`     // 现货品种id
-	DELIVERYGOODSCODE string  `json:"deliverygoodscode"  xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
-	DELIVERYGOODSNAME string  `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
-	GOODSUNITID       int32   `json:"goodsunitid"  xorm:"'GOODSUNITID'"`             // 现货品种单位id
+	AREAUSERID       int64   `json:"areauserid"  xorm:"'AREAUSERID'"`         // 所属机构
+	ORIBUYPLANQTY    float64 `json:"-"  xorm:"'ORIBUYPLANQTY'"`               // 期初采购计划数量
+	ORIBUYPRICEDQTY  float64 `json:"-"  xorm:"'ORIBUYPRICEDQTY'"`             // 期初采购合同已定价数量
+	ORISELLPLANQTY   float64 `json:"-"  xorm:"'ORISELLPLANQTY'"`              // 期初销售计划数量
+	ORISELLPRICEDQTY float64 `json:"-"  xorm:"'ORISELLPRICEDQTY'"`            // 期初销售合同已定价数量
+	BUYPLANQTY       float64 `json:"-"  xorm:"'BUYPLANQTY'"`                  // 采购计划数量
+	BUYPRICEDQTY     float64 `json:"-"  xorm:"'BUYPRICEDQTY'"`                // 采购合同已定价数量
+	SELLPLANQTY      float64 `json:"-"  xorm:"'SELLPLANQTY'"`                 // 销售计划数量
+	SELLPRICEDQTY    float64 `json:"-"  xorm:"'SELLPRICEDQTY'"`               // 销售合同已定价数量
+	TOTALSPOTQTY     float64 `json:"totalspotqty"  xorm:"'TOTALSPOTQTY'"`     // 当前数量(现货头寸总量) =  (销售计划数量 - 销售已定价数量)  - (采购计划数量 - 采购已定价数量)
+	OriToalSpotQty   float64 `json:"oritoalspotqty"  xorm:"'OriToalSpotQty'"` // 昨日数量
+	IncreaseQty      float64 `json:"increaseqty"  xorm:"'IncreaseQty'"`       // 增加数量=销售计划数量+采购已定价数量
+	DecreaseQty      float64 `json:"decreaseqty"  xorm:"'DecreaseQty'"`       // 减少数量=-(销售已定价数量+采购计划数量)
+	UPDATETIME       string  `json:"updatetime"  xorm:"'UPDATETIME'"`         // 更新时间
+	CONVERTRATIO     float64 `json:"convertratio"  xorm:"'CONVERTRATIO'"`     // 套保系数
+	WRSTANDARDID     int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`     // 现货商品ID(SEQ_WRSTANDARD)
+	WRSTANDARDCODE   string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"` // 现货商品代码
+	WRSTANDARDNAME   string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"` // 现货商品名称
+	UNITID           int32   `json:"unitid"  xorm:"'UNITID'"`                 // 现货商品单位id
 
 	ENUMDICNAME string `json:"enumdicname"` // 单位名称
 }
@@ -1157,29 +1148,34 @@ func (r *Ermcp3AreaSpot) calc() {
 	r.IncreaseQty = r.SELLPLANQTY - r.ORISELLPLANQTY + r.BUYPRICEDQTY - r.ORIBUYPRICEDQTY
 	r.DecreaseQty = (r.SELLPRICEDQTY - r.ORISELLPRICEDQTY + r.BUYPLANQTY - r.ORIBUYPLANQTY) * -1
 	r.OriToalSpotQty = (r.ORISELLPLANQTY - r.ORISELLPRICEDQTY) - (r.ORIBUYPLANQTY - r.ORIBUYPRICEDQTY)
-	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
+	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
 }
 
 func (r *Ermcp3AreaSpot) buildSql() string {
-	var sqlId utils.SQLVal = "select t.AREAUSERID," +
-		"       t.ORIBUYPLANQTY," +
-		"       t.ORIBUYPRICEDQTY," +
-		"       t.ORISELLPLANQTY," +
-		"       t.ORISELLPRICEDQTY," +
-		"       t.BUYPLANQTY," +
-		"       t.BUYPRICEDQTY," +
-		"       t.SELLPLANQTY," +
-		"       t.SELLPRICEDQTY," +
-		"       t.TOTALSPOTQTY," +
-		"       g.deliverygoodsid," +
-		"       g.deliverygoodscode," +
-		"       g.deliverygoodsname," +
-		"       g.goodsunitid," +
-		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
-		"  from ermcp_areaspot t" +
-		"  left join deliverygoods g" +
-		"    on t.deliverygoodsid = g.deliverygoodsid" +
-		" where 1 = 1"
+	var sqlId utils.SQLVal = `
+select t.AREAUSERID,
+       t.ORIBUYPLANQTY,
+       t.ORIBUYPRICEDQTY,
+       t.ORISELLPLANQTY,
+       t.ORISELLPRICEDQTY,
+       t.BUYPLANQTY,
+       t.BUYPRICEDQTY,
+       t.SELLPLANQTY,
+       t.SELLPRICEDQTY,
+       t.hedgeqty,
+       t.arbitrageqty,
+       t.hedgeqty + t.arbitrageqty TOTALSPOTQTY,
+       t.convertratio,
+       w.wrstandardid,
+       w.wrstandardcode,
+       w.wrstandardname,
+       w.unitid,
+       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME
+  from ermcp_areamiddlesum t
+  left join wrstandard w
+    on t.wrstandardid = w.wrstandardid
+ where 1 = 1
+`
 	sqlId.And("t.areauserid", r.AREAUSERID)
 	return sqlId.String()
 }
@@ -1198,22 +1194,22 @@ func (r *Ermcp3AreaSpot) GetDataEx() (interface{}, error) {
 	return sData, nil
 }
 
-// Ermcp3AreaSpotDetail 敞口现货头寸明细
+// Ermcp3AreaSpotDetail 敞口->现货头寸->现货明细
 type Ermcp3AreaSpotDetail struct {
-	Relatedid         string  `json:"relatedid"  xorm:"'relatedid'"`                 // 套保计划ID/现货合同ID
-	Relatedno         string  `json:"relatedno"  xorm:"'relatedno'"`                 // 编号
-	LogType           int32   `json:"logtype"  xorm:"'logType'"`                     // 记录类型 1-套保 2-现货合同
-	Contracttype      int32   `json:"contracttype"  xorm:"'contracttype'"`           // 合同类型 1-采购 -1-销售
-	Qty               float64 `json:"qty"  xorm:"'qty'"`                             // 数量
-	Strtime           string  `json:"strtime"  xorm:"'strtime'"`                     // 时间
-	Enumdicname       string  `json:"enumdicname"`                                   // 现货商品单位名称
-	Recordname        string  `json:"recordname"`                                    // 类型名称
-	CREATETIME        string  `json:"createtime"  xorm:"'CREATETIME'"`               // 创建时间
-	Unitid            int32   `json:"-"  xorm:"'UNITID'"`                            // 单位ID
-	UserId            int64   `json:"-"`                                             // 所属用户ID
-	DELIVERYGOODSID   int32   `json:"deliverygoodsid"  xorm:"'DELIVERYGOODSID'"`     // 现货品种id
-	DELIVERYGOODSCODE string  `json:"deliverygoodscode"  xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
-	DELIVERYGOODSNAME string  `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
+	Relatedid      string  `json:"relatedid"  xorm:"'relatedid'"`           // 套保计划ID/现货合同ID
+	Relatedno      string  `json:"relatedno"  xorm:"'relatedno'"`           // 编号
+	LogType        int32   `json:"logtype"  xorm:"'logType'"`               // 记录类型 1-套保 2-现货合同
+	Contracttype   int32   `json:"contracttype"  xorm:"'contracttype'"`     // 合同类型 1-采购 -1-销售
+	Qty            float64 `json:"qty"  xorm:"'qty'"`                       // 数量
+	Strtime        string  `json:"strtime"  xorm:"'strtime'"`               // 时间
+	Enumdicname    string  `json:"enumdicname"`                             // 现货商品单位名称
+	Recordname     string  `json:"recordname"`                              // 类型名称
+	CREATETIME     string  `json:"createtime"  xorm:"'CREATETIME'"`         // 创建时间
+	Unitid         int32   `json:"-"  xorm:"'UNITID'"`                      // 单位ID
+	UserId         int64   `json:"-"`                                       // 所属用户ID
+	WRSTANDARDID   int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`     // 现货商品ID(SEQ_WRSTANDARD)
+	WRSTANDARDCODE string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"` // 现货商品代码
+	WRSTANDARDNAME string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"` // 现货商品名称
 }
 
 func (r *Ermcp3AreaSpotDetail) calc() {
@@ -1249,42 +1245,48 @@ func (r *Ermcp3AreaSpotDetail) calc() {
 }
 
 func (r *Ermcp3AreaSpotDetail) buildSql() string {
-	var sqlId utils.SQLVal = "with tmp as" +
-		" (select to_char(t.hedgeplanid) relatedid," +
-		"         t.hedgeplanno relatedno," +
-		"         1 as logType," +
-		"         t.contracttype" +
-		"    from ermcp_hedgeplan t" +
-		"   where  %v in(t.areauserid, t.tradeuserid)" +
-		"     and t.deliverygoodsid = %v" +
-		"  union all" +
-		"  select to_char(t.spotcontractid)," +
-		"         t.contractno," +
-		"         2 as logType," +
-		"         t.contracttype" +
-		"    from ermcp_spotcontract t" +
-		"   where %v in(t.userid, t.tradeuserid)" +
-		"     and t.deliverygoodsid = %v)" +
-		"select t.relatedid," +
-		"       tmp.relatedno," +
-		"       t.LogType," +
-		"       tmp.contracttype," +
-		"       t.RealQty qty," +
-		"       to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
-		"       g.deliverygoodsid," +
-		"       g.deliverygoodsname," +
-		"       g.deliverygoodscode," +
-		"       g.goodsunitid unitid" +
-		"  from ermcp_spotlog t" +
-		" inner join tmp" +
-		"    on t.LogType = tmp.logType" +
-		"   and t.relatedid = tmp.relatedid" +
-		"   and t.areauserid = %v" +
-		"   and t.deliverygoodsid = %v" +
-		"  left join deliverygoods g" +
-		"    on t.deliverygoodsid = g.deliverygoodsid" +
-		" where t.tradedate = to_char(sysdate, 'yyyymmdd')"
-	sqlId.FormatParam(r.UserId, r.DELIVERYGOODSID, r.UserId, r.DELIVERYGOODSID, r.UserId, r.DELIVERYGOODSID)
+	var sqlId utils.SQLVal = `
+select *
+  from (select to_char(t.hedgeplanid) as relatedid,
+               t.hedgeplanno relatedno,
+               1 as LogType,
+               t.contracttype,
+               t.planqty qty,
+               to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') createtime,
+               w.wrstandardid,
+               w.wrstandardcode,
+               w.wrstandardname,
+               w.unitid,
+               t.areauserid as userid
+          from ermcp_hedgeplan t
+         inner join wrstandard w
+            on t.wrstandardid = w.wrstandardid
+         where t.hedgeplanstatus in (2, 3, 5)
+           and t.tradedate = to_char(sysdate, 'yyyymmdd')
+           and t.areauserid = %v
+           and t.wrstandardid = %v
+        union all
+        select to_char(t.spotcontractid) as relatedid,
+               t.contractno relatedno,
+               2 as LogType,
+               t.contracttype,
+               t.qty,
+               to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') createtime,
+               w.wrstandardid,
+               w.wrstandardcode,
+               w.wrstandardname,
+               w.unitid,
+               t.userid
+          from ermcp_spotcontract t
+         inner join wrstandard w
+            on t.wrstandardid = w.wrstandardid
+         where t.userid = %v
+           and t.wrstandardid = %v
+           and t.contractstatus in (2, 3, 5)
+           and t.tradedate = to_char(sysdate, 'yyyymmdd')) a
+ order by a.createtime desc
+`
+	sqlId.FormatParam(r.UserId, r.WRSTANDARDID, r.UserId, r.WRSTANDARDID)
 	return sqlId.String()
 }