Переглянути джерело

1.查实时敞口增加总敞口变量字段
2.查财务报表增加品种、品类和品牌名称
3.增加查周期报表明细接口(财务/现货/敞口/损益汇总/库存)

zou.yingbin 4 роки тому
батько
коміт
3a2885e9de
7 змінених файлів з 565 додано та 164 видалено
  1. 83 26
      controllers/ermcp3/qryErmcp3Report.go
  2. 53 17
      docs/docs.go
  3. 53 17
      docs/swagger.json
  4. 41 15
      docs/swagger.yaml
  5. 220 89
      models/ermcp3Report.go
  6. 2 0
      models/ermcpExposure.go
  7. 113 0
      mtpcache/weekdate.go

+ 83 - 26
controllers/ermcp3/qryErmcp3Report.go

@@ -10,7 +10,9 @@ import (
 	"github.com/gin-gonic/gin"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
+	"mtp2_if/logger"
 	"mtp2_if/models"
+	"mtp2_if/mtpcache"
 	"net/http"
 	"strconv"
 )
@@ -41,7 +43,7 @@ func (v QueryDate) IsNumberic(queryType int32) bool {
 // 检查周期类型、周期时间
 type CycleTypeCheck struct {
 	CYCLETYPE int32  `json:"cycletype"  xorm:"'cycletype'"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-	CYCLETIME string `json:"cycletime"  xorm:"'cycletime'"` // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETIME string `json:"cycletime"  xorm:"'cycletime'"` // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
 }
 
 func (r *CycleTypeCheck) Check() bool {
@@ -81,10 +83,10 @@ func (r *CycleTypeCheck) Check() bool {
 
 // QryReportReq 查报表请求
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
 type QryReportReq struct {
@@ -92,7 +94,7 @@ type QryReportReq struct {
 	QUERYTYPE int32  `form:"querytype" binding:"required"` // 查询类型
 	TRADEDATE string `form:"tradedate"`                    // 交易日
 	CYCLETYPE int32  `form:"cycletype"`                    // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-	CYCLETIME string `form:"cycletime"`                    // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETIME string `form:"cycletime"`                    // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
 	BEGINDATE string `form:"begindate"`                    // 开始交易日
 	ENDDATE   string `form:"enddate"`                      // 结束交易日
 }
@@ -119,6 +121,34 @@ func (r *QryReportReq) Check() bool {
 	return true
 }
 
+// CovertRequest 转换查询请求, 日期格式等
+func (r *QryReportReq) CovertRequest() {
+	// 周期报表明细, 转换为查日报表
+	if r.QUERYTYPE == 5 {
+		r.QUERYTYPE = 3
+		switch r.CYCLETYPE {
+		case 1: // 月
+			r.BEGINDATE = r.CYCLETIME + "01"
+			r.ENDDATE = r.CYCLETIME + "31"
+		case 2: // 季, 暂不实现
+		case 3: // 年, 暂不实现
+		case 4: // 周
+			if w, ok := mtpcache.GetWeekInfo(r.CYCLETIME); ok {
+				r.BEGINDATE = w.BeginDate
+				r.ENDDATE = w.EndDate
+			} else {
+				// 转换失败 : 一般来说不会转换失败
+				logger.GetLogger().Errorf("covert cycletime to week fail:", r.CYCLETIME)
+			}
+		}
+	} else {
+		// 周报表查询, 转换时间格式
+		if r.CYCLETYPE == 4 {
+			r.CYCLETIME = mtpcache.GetWeekIW(r.CYCLETIME)
+		}
+	}
+}
+
 // QryReportDaySpotDetail 查询现货日报表详情(菜单:报表查询/现货报表/现货日报表详情) - 作废
 func QryReportDaySpotDetail(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
@@ -168,8 +198,7 @@ func QryReportDaySpot(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// QryReportMonthSpot
-// 查询现货月报表(菜单:报表查询/现货报表/现货月报表) - 作废
+// QryReportMonthSpot 查询现货月报表(菜单:报表查询/现货报表/现货月报表) - 作废
 func QryReportMonthSpot(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	m := models.Ermcp3ReportAreaSpotSub{}
@@ -201,10 +230,10 @@ func QryReportMonthSpotDetail(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
 // @Success 200 {array} models.Ermcp3ExpourseReport
@@ -216,6 +245,7 @@ func QryAreaExpourseReport(c *gin.Context) {
 	req := QryReportReq{}
 	a.DoBindReq(&req)
 	a.CheckParam(&req)
+	req.CovertRequest()
 	m := models.Ermcp3ExpourseReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE,
 		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
 	a.DoGetDataI(&m)
@@ -274,12 +304,15 @@ func QryAreaExpourseHedgeplanDetail(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
+// @Param deliverygoodsid query int false "现货品种id"
+// @Param wrstandardid query int false "品类id"
+// @Param currencyid query int false "币种id"
 // @Success 200 {array} models.Ermcp3AreaSpotPLReport
 // @Failure 500 {object} app.Response
 // @Router /Ermcp3/QryAreaSpotplReport [get]
@@ -289,8 +322,24 @@ func QryAreaSpotplReport(c *gin.Context) {
 	req := QryReportReq{}
 	a.DoBindReq(&req)
 	a.CheckParam(&req)
+	req2 := struct {
+		DELIVERYGOODSID int64 `form:"deliverygoodsid"` // 品种
+		WRSTANDARDID    int64 `form:"wrstandardid"`    // 品类
+		CURRENCYID      int32 `form:"currencyid"`      // 币种
+	}{}
+	if req.QUERYTYPE == 4 {
+		a.DoBindReq(&req2)
+		a.CheckParamF(func() bool {
+			if req2.DELIVERYGOODSID <= 0 || req2.WRSTANDARDID <= 0 || req2.CURRENCYID <= 0 {
+				return false
+			}
+			return true
+		})
+	}
+	req.CovertRequest()
 	m := models.Ermcp3AreaSpotPLReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
-		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
+		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE,
+		DELIVERYGOODSID: req2.DELIVERYGOODSID, WRSTANDARDID: req2.WRSTANDARDID, CURRENCYID: req2.CURRENCYID}
 	a.DoGetDataI(&m)
 }
 
@@ -299,10 +348,10 @@ func QryAreaSpotplReport(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
 // @Param currencyid query int false "币种id(日报表明细)"
@@ -325,6 +374,7 @@ func QryFinanceReport(c *gin.Context) {
 		}
 		return true
 	})
+	req.CovertRequest()
 	m := models.Ermcp3FinanceReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
 		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE, CURRENCYID: req2.CURRENCYID}
 	a.DoGetDataI(&m)
@@ -335,16 +385,15 @@ func QryFinanceReport(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
 // @Param deliverygoodsid query int false "现货商品ID"
 // @Param wrstandardid query int false "品类ID"
 // @Param spotgoodsbrandid query int false "品牌ID"
-// @Param warehouseinfoid query int false "仓库ID"
 // @Success 200 {array} models.Ermcp3AreaStockReport
 // @Failure 500 {object} app.Response
 // @Router /Ermcp3/QryAreaStockReport [get]
@@ -353,23 +402,30 @@ func QryAreaStockReport(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := QryReportReq{}
 	req2 := struct {
-		DELIVERYGOODSID  int32  `form:"deliverygoodsid"`  // 现货品种id
-		WRSTANDARDID     int32  `form:"wrstandardid"`     // 品类ID
-		SPOTGOODSBRANDID int32  `form:"spotgoodsbrandid"` // 品牌id
-		WAREHOUSEINFOID  string `form:"warehouseinfoid"`  // 现货仓库ID
+		DELIVERYGOODSID  int32 `form:"deliverygoodsid"`  // 现货品种id
+		WRSTANDARDID     int32 `form:"wrstandardid"`     // 品类ID
+		SPOTGOODSBRANDID int32 `form:"spotgoodsbrandid"` // 品牌id
 	}{}
 	a.DoBindReq(&req)
-	a.DoBindReq(&req2)
 	a.CheckParam(&req)
+	a.DoBindReq(&req2)
+	if req.QUERYTYPE == 4 {
+		a.CheckParamF(func() bool {
+			if req2.DELIVERYGOODSID <= 0 || req2.WRSTANDARDID <= 0 || req2.SPOTGOODSBRANDID <= 0 {
+				return false
+			}
+			return true
+		})
+	}
+	req.CovertRequest()
 	m := models.Ermcp3AreaStockReport{USERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
 		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE,
-		DELIVERYGOODSID: req2.DELIVERYGOODSID, WRSTANDARDID: req2.WRSTANDARDID, SPOTGOODSBRANDID: req2.SPOTGOODSBRANDID,
-		WAREHOUSEINFOID: req2.WAREHOUSEINFOID}
+		DELIVERYGOODSID: req2.DELIVERYGOODSID, WRSTANDARDID: req2.WRSTANDARDID, SPOTGOODSBRANDID: req2.SPOTGOODSBRANDID}
 	a.DoGetDataI(&m)
 }
 
 // QueryAreaStockReportDetail
-// 查询库存报表明细 - 作废(库存报表明细就是查库存申请记录,直接调用其接口)
+// 查询库存报表明细 - 作废
 func QueryAreaStockReportDetail(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
@@ -412,10 +468,10 @@ func QueryAreaStockReportDetail(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细"
 // @Param tradedate query string false "交易日(格式yyyymmdd)"
 // @Param cycletype query int false "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
+// @Param cycletime query string false "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】"
 // @Param begindate query string false "开始交易日(格式yyyymmdd)"
 // @Param enddate query string false "结束交易日(格式yyyymmdd)"
 // @Param currencyid query int false "币种id(日报表明细)"
@@ -438,6 +494,7 @@ func QryAreaSumPL(c *gin.Context) {
 		}
 		return true
 	})
+	req.CovertRequest()
 	m := models.Ermcp3ArealSumPL{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
 		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE, CURRENCYID: req2.CURRENCYID}
 	a.DoGetDataI(&m)

+ 53 - 17
docs/docs.go

@@ -2717,7 +2717,7 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2736,7 +2736,7 @@ var doc = `{
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2796,7 +2796,7 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2815,7 +2815,7 @@ var doc = `{
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2830,6 +2830,24 @@ var doc = `{
                         "description": "结束交易日(格式yyyymmdd)",
                         "name": "enddate",
                         "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "现货品种id",
+                        "name": "deliverygoodsid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "品类id",
+                        "name": "wrstandardid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "币种id",
+                        "name": "currencyid",
+                        "in": "query"
                     }
                 ],
                 "responses": {
@@ -2875,7 +2893,7 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2894,7 +2912,7 @@ var doc = `{
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2927,12 +2945,6 @@ var doc = `{
                         "description": "品牌ID",
                         "name": "spotgoodsbrandid",
                         "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "仓库ID",
-                        "name": "warehouseinfoid",
-                        "in": "query"
                     }
                 ],
                 "responses": {
@@ -2978,7 +2990,7 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2997,7 +3009,7 @@ var doc = `{
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -3063,7 +3075,7 @@ var doc = `{
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -3082,7 +3094,7 @@ var doc = `{
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -11620,7 +11632,7 @@ var doc = `{
                 },
                 "wrstandardid": {
                     "description": "现货品类ID",
-                    "type": "string"
+                    "type": "integer"
                 },
                 "wrstandardname": {
                     "description": "品类名称",
@@ -12897,6 +12909,10 @@ var doc = `{
                     "description": "业务类型 - 1:套保 2:套利",
                     "type": "integer"
                 },
+                "brandname": {
+                    "description": "品牌名称",
+                    "type": "string"
+                },
                 "buypreinvoicedamount": {
                     "description": "采购预收票额(预收票额)",
                     "type": "number"
@@ -12941,10 +12957,18 @@ var doc = `{
                     "description": "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】",
                     "type": "integer"
                 },
+                "deliverygoodscode": {
+                    "description": "现货品种代码",
+                    "type": "string"
+                },
                 "deliverygoodsid": {
                     "description": "现货品种ID",
                     "type": "integer"
                 },
+                "deliverygoodsname": {
+                    "description": "现货品种名称",
+                    "type": "string"
+                },
                 "reckondate": {
                     "description": "日照时期(yyyyMMdd)",
                     "type": "string"
@@ -12997,9 +13021,17 @@ var doc = `{
                     "description": "仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)",
                     "type": "integer"
                 },
+                "wrstandardcode": {
+                    "description": "品类代码",
+                    "type": "string"
+                },
                 "wrstandardid": {
                     "description": "现货商品ID",
                     "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "品类名称",
+                    "type": "string"
                 }
             }
         },
@@ -15207,6 +15239,10 @@ var doc = `{
                     "description": "套保变动量",
                     "type": "number"
                 },
+                "diffQty": {
+                    "description": "变动量(总敞口)",
+                    "type": "number"
+                },
                 "diffSpotHedgeQty": {
                     "description": "变动量(现货应套保总量)",
                     "type": "number"

+ 53 - 17
docs/swagger.json

@@ -2701,7 +2701,7 @@
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2720,7 +2720,7 @@
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2780,7 +2780,7 @@
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2799,7 +2799,7 @@
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2814,6 +2814,24 @@
                         "description": "结束交易日(格式yyyymmdd)",
                         "name": "enddate",
                         "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "现货品种id",
+                        "name": "deliverygoodsid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "品类id",
+                        "name": "wrstandardid",
+                        "in": "query"
+                    },
+                    {
+                        "type": "integer",
+                        "description": "币种id",
+                        "name": "currencyid",
+                        "in": "query"
                     }
                 ],
                 "responses": {
@@ -2859,7 +2877,7 @@
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2878,7 +2896,7 @@
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -2911,12 +2929,6 @@
                         "description": "品牌ID",
                         "name": "spotgoodsbrandid",
                         "in": "query"
-                    },
-                    {
-                        "type": "integer",
-                        "description": "仓库ID",
-                        "name": "warehouseinfoid",
-                        "in": "query"
                     }
                 ],
                 "responses": {
@@ -2962,7 +2974,7 @@
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -2981,7 +2993,7 @@
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -3047,7 +3059,7 @@
                     },
                     {
                         "type": "integer",
-                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细",
+                        "description": "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细",
                         "name": "querytype",
                         "in": "query",
                         "required": true
@@ -3066,7 +3078,7 @@
                     },
                     {
                         "type": "string",
-                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】",
+                        "description": "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】",
                         "name": "cycletime",
                         "in": "query"
                     },
@@ -11604,7 +11616,7 @@
                 },
                 "wrstandardid": {
                     "description": "现货品类ID",
-                    "type": "string"
+                    "type": "integer"
                 },
                 "wrstandardname": {
                     "description": "品类名称",
@@ -12881,6 +12893,10 @@
                     "description": "业务类型 - 1:套保 2:套利",
                     "type": "integer"
                 },
+                "brandname": {
+                    "description": "品牌名称",
+                    "type": "string"
+                },
                 "buypreinvoicedamount": {
                     "description": "采购预收票额(预收票额)",
                     "type": "number"
@@ -12925,10 +12941,18 @@
                     "description": "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】",
                     "type": "integer"
                 },
+                "deliverygoodscode": {
+                    "description": "现货品种代码",
+                    "type": "string"
+                },
                 "deliverygoodsid": {
                     "description": "现货品种ID",
                     "type": "integer"
                 },
+                "deliverygoodsname": {
+                    "description": "现货品种名称",
+                    "type": "string"
+                },
                 "reckondate": {
                     "description": "日照时期(yyyyMMdd)",
                     "type": "string"
@@ -12981,9 +13005,17 @@
                     "description": "仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)",
                     "type": "integer"
                 },
+                "wrstandardcode": {
+                    "description": "品类代码",
+                    "type": "string"
+                },
                 "wrstandardid": {
                     "description": "现货商品ID",
                     "type": "integer"
+                },
+                "wrstandardname": {
+                    "description": "品类名称",
+                    "type": "string"
                 }
             }
         },
@@ -15191,6 +15223,10 @@
                     "description": "套保变动量",
                     "type": "number"
                 },
+                "diffQty": {
+                    "description": "变动量(总敞口)",
+                    "type": "number"
+                },
                 "diffSpotHedgeQty": {
                     "description": "变动量(现货应套保总量)",
                     "type": "number"

+ 41 - 15
docs/swagger.yaml

@@ -2847,7 +2847,7 @@ definitions:
         type: string
       wrstandardid:
         description: 现货品类ID
-        type: string
+        type: integer
       wrstandardname:
         description: 品类名称
         type: string
@@ -3795,6 +3795,9 @@ definitions:
       biztype:
         description: 业务类型 - 1:套保 2:套利
         type: integer
+      brandname:
+        description: 品牌名称
+        type: string
       buypreinvoicedamount:
         description: 采购预收票额(预收票额)
         type: number
@@ -3828,9 +3831,15 @@ definitions:
       cycletype:
         description: 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
         type: integer
+      deliverygoodscode:
+        description: 现货品种代码
+        type: string
       deliverygoodsid:
         description: 现货品种ID
         type: integer
+      deliverygoodsname:
+        description: 现货品种名称
+        type: string
       reckondate:
         description: 日照时期(yyyyMMdd)
         type: string
@@ -3870,9 +3879,15 @@ definitions:
       wrfactortypeid:
         description: 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
         type: integer
+      wrstandardcode:
+        description: 品类代码
+        type: string
       wrstandardid:
         description: 现货商品ID
         type: integer
+      wrstandardname:
+        description: 品类名称
+        type: string
     type: object
   models.Ermcp3Goods:
     properties:
@@ -5496,6 +5511,9 @@ definitions:
       diffHedgeQty:
         description: 套保变动量
         type: number
+      diffQty:
+        description: 变动量(总敞口)
+        type: number
       diffSpotHedgeQty:
         description: 变动量(现货应套保总量)
         type: number
@@ -12705,7 +12723,7 @@ paths:
         name: userid
         required: true
         type: integer
-      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细
+      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细
         in: query
         name: querytype
         required: true
@@ -12718,7 +12736,7 @@ paths:
         in: query
         name: cycletype
         type: integer
-      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
         in: query
         name: cycletime
         type: string
@@ -12756,7 +12774,7 @@ paths:
         name: userid
         required: true
         type: integer
-      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细
+      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细
         in: query
         name: querytype
         required: true
@@ -12769,7 +12787,7 @@ paths:
         in: query
         name: cycletype
         type: integer
-      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
         in: query
         name: cycletime
         type: string
@@ -12781,6 +12799,18 @@ paths:
         in: query
         name: enddate
         type: string
+      - description: 现货品种id
+        in: query
+        name: deliverygoodsid
+        type: integer
+      - description: 品类id
+        in: query
+        name: wrstandardid
+        type: integer
+      - description: 币种id
+        in: query
+        name: currencyid
+        type: integer
       produces:
       - application/json
       responses:
@@ -12807,7 +12837,7 @@ paths:
         name: userid
         required: true
         type: integer
-      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细
+      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细
         in: query
         name: querytype
         required: true
@@ -12820,7 +12850,7 @@ paths:
         in: query
         name: cycletype
         type: integer
-      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
         in: query
         name: cycletime
         type: string
@@ -12844,10 +12874,6 @@ paths:
         in: query
         name: spotgoodsbrandid
         type: integer
-      - description: 仓库ID
-        in: query
-        name: warehouseinfoid
-        type: integer
       produces:
       - application/json
       responses:
@@ -12874,7 +12900,7 @@ paths:
         name: userid
         required: true
         type: integer
-      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细
+      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细
         in: query
         name: querytype
         required: true
@@ -12887,7 +12913,7 @@ paths:
         in: query
         name: cycletype
         type: integer
-      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
         in: query
         name: cycletime
         type: string
@@ -12929,7 +12955,7 @@ paths:
         name: userid
         required: true
         type: integer
-      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细
+      - description: 查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日]) 4-日报表明细 5-周期报表明细
         in: query
         name: querytype
         required: true
@@ -12942,7 +12968,7 @@ paths:
         in: query
         name: cycletype
         type: integer
-      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+      - description: 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYMMDD周内任意一天) 全(0)【原值】
         in: query
         name: cycletime
         type: string

+ 220 - 89
models/ermcp3Report.go

@@ -832,7 +832,7 @@ type Ermcp3AreaSpotPLReport struct {
 	CURRENCYID            int32   `json:"currencyid"  xorm:"CURRENCYID"`                       // 结算币种ID【原值】
 	BIZTYPE               int32   `json:"biztype"  xorm:"BIZTYPE"`                             // 业务类型 - 1:套保 2:套利
 	DELIVERYGOODSID       int64   `json:"deliverygoodsid"  xorm:"DELIVERYGOODSID"`             // 现货品种ID
-	WRSTANDARDID          string  `json:"wrstandardid"  xorm:"WRSTANDARDID"`                   // 现货品类ID
+	WRSTANDARDID          int64   `json:"wrstandardid"  xorm:"WRSTANDARDID"`                   // 现货品类ID
 	SPOTGOODSBRANDID      int32   `json:"spotgoodsbrandid"  xorm:"SPOTGOODSBRANDID"`           // 现货品牌ID
 	ORIBUYQTY             float64 `json:"oribuyqty"  xorm:"ORIBUYQTY"`                         // 期初采购总量
 	ORIBUYAMOUNT          float64 `json:"oribuyamount"  xorm:"ORIBUYAMOUNT"`                   // 期初采购总额
@@ -889,12 +889,75 @@ func (r *Ermcp3AreaSpotPLReport) calc() {
 func (r *Ermcp3AreaSpotPLReport) buildSql() string {
 	if r.QueryType == 1 || r.QueryType == 3 {
 		return r.buildSqlDay()
+	} else if r.QueryType == 4 {
+		return r.buildSqlDayDetail()
 	}
 	return r.buildSqlCycle()
 }
 
-// buildSqlDay 日报表查询语句
+// buildSqlDay 现货日报表查询语句
 func (r *Ermcp3AreaSpotPLReport) buildSqlDay() string {
+	var sqlId utils.SQLVal = "select a.*," +
+		"       g.deliverygoodscode," +
+		"       g.deliverygoodsname," +
+		"       g.goodsunitid," +
+		"       w.wrstandardcode," +
+		"       w.wrstandardname," +
+		"       w.unitid" +
+		"  from (SELECT t.RECKONDATE," +
+		"               t.AREAUSERID," +
+		"               t.CURRENCYID," +
+		"               t.DELIVERYGOODSID," +
+		"               t.WRSTANDARDID," +
+		"               sum(t.ORIBUYQTY) ORIBUYQTY," +
+		"               sum(t.ORIBUYAMOUNT) ORIBUYAMOUNT," +
+		"               sum(t.ORISELLQTY) ORISELLQTY," +
+		"               sum(t.ORISELLAMOUNT) ORISELLAMOUNT," +
+		"               sum(t.ORIQTY) ORIQTY," +
+		"               sum(t.ORIAVERAGEPRICE) ORIAVERAGEPRICE," +
+		"               sum(t.ORIAMOUNT) ORIAMOUNT," +
+		"               sum(t.TODAYBUYQTY) TODAYBUYQTY," +
+		"               sum(t.TODAYBUYAMOUNT) TODAYBUYAMOUNT," +
+		"               sum(t.TODAYBUYAVERAGEPRICE) TODAYBUYAVERAGEPRICE," +
+		"               sum(t.TODAYSELLQTY) TODAYSELLQTY," +
+		"               sum(t.TODAYSELLAMOUNT) TODAYSELLAMOUNT," +
+		"               sum(t.TODAYSELLAVERAGEPRICE) TODAYSELLAVERAGEPRICE," +
+		"               sum(t.CURBUYQTY) CURBUYQTY," +
+		"               sum(t.CURBUYAMOUNT) CURBUYAMOUNT," +
+		"               sum(t.CURSELLQTY) CURSELLQTY," +
+		"               sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
+		"               sum(t.CURQTY) CURQTY," +
+		"               sum(t.CURAVERAGEPRICE) CURAVERAGEPRICE," +
+		"               sum(t.CURAMOUNT) CURAMOUNT," +
+		"               sum(t.CURSPOTPRICE) CURSPOTPRICE," +
+		"               sum(t.CURMARKETVALUE) CURMARKETVALUE," +
+		"               sum(t.ACTUALPL) ACTUALPL," +
+		"               sum(t.FLOATPL) FLOATPL," +
+		"               sum(t.TODAYINQTY) TODAYINQTY," +
+		"               sum(t.TODAYOUTQTY) TODAYOUTQTY" +
+		"          FROM RECKON_ERMCP_AREASPOTPL t" +
+		"         WHERE 1=1 %v" +
+		"         GROUP BY t.RECKONDATE," +
+		"                  t.AREAUSERID," +
+		"                  t.CURRENCYID," +
+		"                  t.DELIVERYGOODSID," +
+		"                  t.WRSTANDARDID) a" +
+		"  LEFT JOIN DELIVERYGOODS g" +
+		"    on a.deliverygoodsid = g.deliverygoodsid" +
+		"  LEFT JOIN WRSTANDARD w" +
+		"    on a.wrstandardid = w.wrstandardid"
+	var sqlParam utils.SQLVal
+	sqlParam.And("t.AREAUSERID", r.AREAUSERID)
+	if r.QueryType == 1 {
+		sqlParam.And("t.RECKONDATE", r.RECKONDATE)
+	} else if r.QueryType == 3 {
+		sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
+	}
+	sqlId.FormatParam(sqlParam.String())
+	return sqlId.String()
+}
+
+func (r *Ermcp3AreaSpotPLReport) buildSqlDayDetail() string {
 	var sqlId utils.SQLVal = "SELECT t.RECKONDATE," +
 		"       t.AREAUSERID," +
 		"       t.ACCOUNTID," +
@@ -944,68 +1007,72 @@ func (r *Ermcp3AreaSpotPLReport) buildSqlDay() string {
 		"  LEFT JOIN DGFACTORYITEM dg on t.spotgoodsbrandid=dg.dgfactoryitemid" +
 		" WHERE 1 = 1"
 	sqlId.And("t.AREAUSERID", r.AREAUSERID)
-	if r.QueryType == 1 {
-		sqlId.And("t.RECKONDATE", r.RECKONDATE)
-	} else if r.QueryType == 3 {
-		sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
-	}
+	sqlId.And("t.RECKONDATE", r.RECKONDATE)
+	sqlId.And("t.CURRENCYID", r.CURRENCYID)
+	sqlId.And("t.DELIVERYGOODSID", r.DELIVERYGOODSID)
+	sqlId.And("t.WRSTANDARDID", r.WRSTANDARDID)
+
 	return sqlId.String()
 }
 
 // buildSqlCycle 周期报表查询语句
 func (r *Ermcp3AreaSpotPLReport) buildSqlCycle() string {
-	var sqlId utils.SQLVal = "SELECT t.Cycletype," +
-		"       t.Cycletime," +
-		"       t.AREAUSERID," +
-		"       t.ACCOUNTID," +
-		"       t.WRFACTORTYPEID," +
-		"       t.CURRENCYID," +
-		"       t.BIZTYPE," +
-		"       t.DELIVERYGOODSID," +
-		"       t.WRSTANDARDID," +
-		"       t.SPOTGOODSBRANDID," +
-		"       t.ORIBUYQTY," +
-		"       t.ORIBUYAMOUNT," +
-		"       t.ORISELLQTY," +
-		"       t.ORISELLAMOUNT," +
-		"       t.ORIQTY," +
-		"       t.ORIAVERAGEPRICE," +
-		"       t.ORIAMOUNT," +
-		"       t.TODAYBUYQTY," +
-		"       t.TODAYBUYAMOUNT," +
-		"       t.TODAYBUYAVERAGEPRICE," +
-		"       t.TODAYSELLQTY," +
-		"       t.TODAYSELLAMOUNT," +
-		"       t.TODAYSELLAVERAGEPRICE," +
-		"       t.CURBUYQTY," +
-		"       t.CURBUYAMOUNT," +
-		"       t.CURSELLQTY," +
-		"       t.CURSELLAMOUNT," +
-		"       t.CURQTY," +
-		"       t.CURAVERAGEPRICE," +
-		"       t.CURAMOUNT," +
-		"       t.CURSPOTPRICE," +
-		"       t.CURMARKETVALUE," +
-		"       t.ACTUALPL," +
-		"       t.FLOATPL," +
-		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
-		"       t.TODAYINQTY," +
-		"       t.TODAYOUTQTY," +
+	var sqlId utils.SQLVal = "select a.*," +
 		"       g.deliverygoodscode," +
 		"       g.deliverygoodsname," +
 		"       g.goodsunitid," +
 		"       w.wrstandardcode," +
 		"       w.wrstandardname," +
-		"       w.unitid," +
-		"       dg.dgfactoryitemvalue brandName" +
-		"  FROM REPORT_ERMCP_AREASPOTPL t" +
-		"  LEFT JOIN DELIVERYGOODS g on t.deliverygoodsid=g.deliverygoodsid" +
-		"  LEFT JOIN WRSTANDARD w on t.wrstandardid = w.wrstandardid" +
-		"  LEFT JOIN DGFACTORYITEM dg on t.spotgoodsbrandid=dg.dgfactoryitemid" +
-		" WHERE 1 = 1"
-	sqlId.And("t.AREAUSERID", r.AREAUSERID)
-	sqlId.And("t.Cycletype", r.CYCLETYPE)
-	sqlId.And("t.CYCLETIME", r.CYCLETIME)
+		"       w.unitid" +
+		"  from (SELECT t.cycletype," +
+		"               t.cycletime," +
+		"               t.AREAUSERID," +
+		"               t.CURRENCYID," +
+		"               t.DELIVERYGOODSID," +
+		"               t.WRSTANDARDID," +
+		"               sum(t.ORIBUYQTY) ORIBUYQTY," +
+		"               sum(t.ORIBUYAMOUNT) ORIBUYAMOUNT," +
+		"               sum(t.ORISELLQTY) ORISELLQTY," +
+		"               sum(t.ORISELLAMOUNT) ORISELLAMOUNT," +
+		"               sum(t.ORIQTY) ORIQTY," +
+		"               sum(t.ORIAVERAGEPRICE) ORIAVERAGEPRICE," +
+		"               sum(t.ORIAMOUNT) ORIAMOUNT," +
+		"               sum(t.TODAYBUYQTY) TODAYBUYQTY," +
+		"               sum(t.TODAYBUYAMOUNT) TODAYBUYAMOUNT," +
+		"               sum(t.TODAYBUYAVERAGEPRICE) TODAYBUYAVERAGEPRICE," +
+		"               sum(t.TODAYSELLQTY) TODAYSELLQTY," +
+		"               sum(t.TODAYSELLAMOUNT) TODAYSELLAMOUNT," +
+		"               sum(t.TODAYSELLAVERAGEPRICE) TODAYSELLAVERAGEPRICE," +
+		"               sum(t.CURBUYQTY) CURBUYQTY," +
+		"               sum(t.CURBUYAMOUNT) CURBUYAMOUNT," +
+		"               sum(t.CURSELLQTY) CURSELLQTY," +
+		"               sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
+		"               sum(t.CURQTY) CURQTY," +
+		"               sum(t.CURAVERAGEPRICE) CURAVERAGEPRICE," +
+		"               sum(t.CURAMOUNT) CURAMOUNT," +
+		"               sum(t.CURSPOTPRICE) CURSPOTPRICE," +
+		"               sum(t.CURMARKETVALUE) CURMARKETVALUE," +
+		"               sum(t.ACTUALPL) ACTUALPL," +
+		"               sum(t.FLOATPL) FLOATPL," +
+		"               sum(t.TODAYINQTY) TODAYINQTY," +
+		"               sum(t.TODAYOUTQTY) TODAYOUTQTY" +
+		"          FROM REPORT_ERMCP_AREASPOTPL t" +
+		"         WHERE 1=1 %v" +
+		"         GROUP BY t.AREAUSERID," +
+		"                  t.cycletype," +
+		"                  t.cycletime," +
+		"                  t.CURRENCYID," +
+		"                  t.DELIVERYGOODSID," +
+		"                  t.WRSTANDARDID) a" +
+		"  LEFT JOIN DELIVERYGOODS g" +
+		"    on a.deliverygoodsid = g.deliverygoodsid" +
+		"  LEFT JOIN WRSTANDARD w" +
+		"    on a.wrstandardid = w.wrstandardid"
+	var sqlParam utils.SQLVal
+	sqlParam.And("t.AREAUSERID", r.AREAUSERID)
+	sqlParam.And("t.Cycletype", r.CYCLETYPE)
+	sqlParam.And("t.CYCLETIME", r.CYCLETIME)
+	sqlId.FormatParam(sqlParam.String())
 	return sqlId.String()
 }
 
@@ -1048,6 +1115,11 @@ type Ermcp3FinanceReport struct {
 	DELIVERYGOODSID        int64   `json:"deliverygoodsid"  xorm:"DELIVERYGOODSID"`               // 现货品种ID
 	WRSTANDARDID           int64   `json:"wrstandardid"  xorm:"WRSTANDARDID"`                     // 现货商品ID
 	SPOTGOODSBRANDID       int32   `json:"spotgoodsbrandid"  xorm:"SPOTGOODSBRANDID"`             // 现货品牌ID
+	DELIVERYGOODSCODE      string  `json:"deliverygoodscode"  xorm:"'DELIVERYGOODSCODE'"`         // 现货品种代码
+	DELIVERYGOODSNAME      string  `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"`         // 现货品种名称
+	WRSTANDARDCODE         string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`               // 品类代码
+	WRSTANDARDNAME         string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`               // 品类名称
+	BRANDNAME              string  `json:"brandname"  xorm:"'BRANDNAME'"`                         // 品牌名称
 
 	CURRENCYNAME string `json:"currencyname"` // 币种名称
 	QueryType    int32  `json:"-"`            // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
@@ -1128,8 +1200,16 @@ func (r *Ermcp3FinanceReport) buildSqlDayDetail() string {
 		"       t.SELLUNINVOICEDAMOUNT," +
 		"       t.TODAYRECEIVESUM," +
 		"       t.TODAYPAYSUM," +
-		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       g.deliverygoodscode," +
+		"       g.deliverygoodsname," +
+		"       w.wrstandardcode," +
+		"       w.wrstandardname," +
+		"       dg.dgfactoryitemvalue brandName" +
 		"  FROM RECKON_ERMCP_AFINANCESUB t" +
+		"  LEFT JOIN DELIVERYGOODS g on t.deliverygoodsid=g.deliverygoodsid" +
+		"  LEFT JOIN WRSTANDARD w on t.wrstandardid=w.wrstandardid" +
+		"  LEFT JOIN DGFACTORYITEM dg on t.spotgoodsbrandid=dg.dgfactoryitemid" +
 		" WHERE 1 = 1"
 	sqlId.And("t.AREAUSERID", r.AREAUSERID)
 	sqlId.And("t.RECKONDATE", r.RECKONDATE)
@@ -1231,6 +1311,59 @@ func (r *Ermcp3AreaStockReport) buildSql() string {
 }
 
 func (r *Ermcp3AreaStockReport) buildSqlDay() string {
+	var sqlId utils.SQLVal = "SELECT a.*," +
+		"       w.wrstandardname," +
+		"       w.wrstandardcode," +
+		"       w.unitid," +
+		"       gb.dgfactoryitemvalue brandname," +
+		"       g.deliverygoodsid," +
+		"       g.deliverygoodscode," +
+		"       g.deliverygoodsname," +
+		"       g.goodsunitid" +
+		"  from (SELECT t.RECKONDATE," +
+		"               t.USERID," +
+		"               t.DELIVERYGOODSID," +
+		"               t.WRSTANDARDID," +
+		"               t.SPOTGOODSBRANDID," +
+		"               sum(t.ORISTOCK) ORISTOCK," +
+		"               sum(t.CURSTOCK) CURSTOCK," +
+		"               sum(t.TODAYBUYINQTY) TODAYBUYINQTY," +
+		"               sum(t.TODAYPRODUCEINQTY) TODAYPRODUCEINQTY," +
+		"               sum(t.TODAYSELLOUTQTY) TODAYSELLOUTQTY," +
+		"               sum(t.TODAYPRODUCEOUTQTY) TODAYPRODUCEOUTQTY" +
+		"          FROM RECKON_ERMCP_AREASTOCK t" +
+		"         WHERE 1 = 1 %v" +
+		"         GROUP BY t.RECKONDATE," +
+		"                  t.USERID," +
+		"                  t.DELIVERYGOODSID," +
+		"                  t.WRSTANDARDID," +
+		"                  t.SPOTGOODSBRANDID) a" +
+		"  LEFT JOIN WRSTANDARD w" +
+		"    on a.wrstandardid = w.wrstandardid" +
+		"  LEFT JOIN dgfactoryitem gb" +
+		"    on a.spotgoodsbrandid = gb.dgfactoryitemid" +
+		"  LEFT JOIN deliverygoods g" +
+		"    on a.deliverygoodsid = g.deliverygoodsid"
+
+	var sqlParam utils.SQLVal
+	sqlParam.And("t.USERID", r.USERID)
+	if r.QueryType == 1 {
+		sqlParam.And("t.RECKONDATE", r.RECKONDATE)
+	} else if r.QueryType == 3 {
+		sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
+	}
+
+	// 现货商品id
+	sqlParam.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
+	// 品类id
+	sqlParam.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
+	// 品牌id
+	sqlParam.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
+	sqlId.FormatParam(sqlParam.String())
+	return sqlId.String()
+}
+
+func (r *Ermcp3AreaStockReport) buildSqlDayDetail() string {
 	var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
 		"       t.TODAYPRODUCEINQTY," +
 		"       t.reckondate," +
@@ -1278,58 +1411,56 @@ func (r *Ermcp3AreaStockReport) buildSqlDay() string {
 	sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
 	// 品牌id
 	sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
-	// 仓库id
-	sqlId.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
 	return sqlId.String()
 }
 
 func (r *Ermcp3AreaStockReport) buildSqlCycle() string {
-	var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
-		"       t.TODAYPRODUCEINQTY," +
-		"       t.CYCLETIME," +
-		"       t.CYCLETYPE," +
-		"       t.TODAYSELLOUTQTY," +
-		"       t.TODAYPRODUCEOUTQTY," +
-		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
-		"       t.USERID," +
-		"       t.WRSTANDARDID," +
-		"       t.SPOTGOODSBRANDID," +
-		"       t.WAREHOUSEINFOID," +
-		"       t.ORISTOCK," +
-		"       t.CURSTOCK," +
+	var sqlId utils.SQLVal = "SELECT a.*," +
 		"       w.wrstandardname," +
 		"       w.wrstandardcode," +
 		"       w.unitid," +
 		"       gb.dgfactoryitemvalue brandname," +
-		"       h.warehousename," +
-		"       h.warehousecode," +
-		"       h.warehousetype," +
 		"       g.deliverygoodsid," +
 		"       g.deliverygoodscode," +
 		"       g.deliverygoodsname," +
 		"       g.goodsunitid" +
-		"  FROM REPORT_ERMCP_AREASTOCK t" +
+		"  from (SELECT t.cycletype," +
+		"               t.cycletime," +
+		"               t.USERID," +
+		"               t.DELIVERYGOODSID," +
+		"               t.WRSTANDARDID," +
+		"               t.SPOTGOODSBRANDID," +
+		"               sum(t.ORISTOCK) ORISTOCK," +
+		"               sum(t.CURSTOCK) CURSTOCK," +
+		"               sum(t.TODAYBUYINQTY) TODAYBUYINQTY," +
+		"               sum(t.TODAYPRODUCEINQTY) TODAYPRODUCEINQTY," +
+		"               sum(t.TODAYSELLOUTQTY) TODAYSELLOUTQTY," +
+		"               sum(t.TODAYPRODUCEOUTQTY) TODAYPRODUCEOUTQTY" +
+		"          FROM REPORT_ERMCP_AREASTOCK t" +
+		"         WHERE 1 = 1 %v" +
+		"         GROUP BY t.cycletype," +
+		"                  t.cycletime," +
+		"                  t.USERID," +
+		"                  t.DELIVERYGOODSID," +
+		"                  t.WRSTANDARDID," +
+		"                  t.SPOTGOODSBRANDID) a" +
 		"  LEFT JOIN WRSTANDARD w" +
-		"    on t.wrstandardid = w.wrstandardid" +
+		"    on a.wrstandardid = w.wrstandardid" +
 		"  LEFT JOIN dgfactoryitem gb" +
-		"    on t.spotgoodsbrandid = gb.dgfactoryitemid" +
+		"    on a.spotgoodsbrandid = gb.dgfactoryitemid" +
 		"  LEFT JOIN deliverygoods g" +
-		"    on t.deliverygoodsid = g.deliverygoodsid" +
-		"  LEFT JOIN WAREHOUSEINFO h" +
-		"    on t.warehouseinfoid = h.autoid" +
-		" WHERE 1 = 1"
-
-	sqlId.And("t.USERID", r.USERID)
-	sqlId.And("t.cycletype", r.CYCLETYPE)
-	sqlId.And("t.cycletime", r.CYCLETIME)
+		"    on a.deliverygoodsid = g.deliverygoodsid"
+	var sqlParam utils.SQLVal
+	sqlParam.And("t.USERID", r.USERID)
+	sqlParam.And("t.cycletype", r.CYCLETYPE)
+	sqlParam.And("t.cycletime", r.CYCLETIME)
 	// 现货商品id
-	sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
+	sqlParam.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
 	// 品类id
-	sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
+	sqlParam.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
 	// 品牌id
-	sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
-	// 仓库id
-	sqlId.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
+	sqlParam.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
+	sqlId.FormatParam(sqlParam.String())
 	return sqlId.String()
 }
 

+ 2 - 0
models/ermcpExposure.go

@@ -66,6 +66,7 @@ type ErmcpRealExposureModel struct {
 	DiffArbitrageQty float64 // 套利变动量
 	DiffSpotHedgeQty float64 // 变动量(现货应套保总量)
 	DiffExposoureQty float64 // 变动量(套保敞口)
+	DiffQty          float64 // 变动量(总敞口)
 
 }
 
@@ -79,6 +80,7 @@ func (r *ErmcpRealExposureModel) calc() {
 	r.DiffArbitrageQty = r.ARBITRAGEQTY - r.ORIHEDGEQTY
 	r.DiffSpotHedgeQty = r.TotalNeedHedgeQty - r.ORITOTALNEEDHEDGEQTY
 	r.DiffExposoureQty = r.NeedHedgeExposoure - r.ORINEEDHEDGEEXPOSOURE
+	r.DiffQty = r.TotalExposure - r.ORITOTALEXPOSURE
 
 	if r.ENUMDICNAME == "" {
 		r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)

+ 113 - 0
mtpcache/weekdate.go

@@ -0,0 +1,113 @@
+/**
+* @Author: zou.yingbin
+* @Create  : 2021/5/24 14:42
+* @Modify  : 2021/5/24 14:42
+ */
+
+package mtpcache
+
+import (
+	"fmt"
+	"mtp2_if/db"
+	"sync"
+	"time"
+)
+
+var vWeekMgr WeekDateMgr
+
+// WeekDate 周日期信息
+type WeekDate struct {
+	CurDate   string `json:"curdate"  xorm:"'CurDate'"`     // 当前日期(yyyymmdd)
+	BeginDate string `json:"begindate"  xorm:"'BeginDate'"` // 周开始日期(yyyy-mm-dd)
+	EndDate   string `json:"enddate"  xorm:"'EndDate'"`     // 周结束日期(yyyy-mm-dd)
+	Week      int32  `json:"week"  xorm:"'Week'"`           // 第几周
+	WeekIW    string `json:"weekiw"  xorm:"'WeekIW'"`       // 周日期iw(yyyyiw)
+}
+
+// WeekDateMgr 周日期缓存
+type WeekDateMgr struct {
+	mtx  sync.RWMutex
+	data map[string]WeekDate
+}
+
+func init() {
+	go func() {
+		time.Sleep(time.Second)
+		vWeekMgr.load("")
+	}()
+}
+
+func (r *WeekDateMgr) load(curDate string) {
+	var sqlId string
+	if len(curDate) > 0 {
+		// 查指定日期信息
+		sqlId = "select" +
+			"  '%v' curdate," +
+			"  to_char(trunc(to_date('%v', 'yyyymmdd'), 'IW'), 'yyyy-mm-dd') begindate," +
+			"  to_char(trunc(to_date('%v', 'yyyymmdd'), 'IW') + 6, 'yyyy-mm-dd') enddate," +
+			"  to_char(to_date('%v', 'yyyymmdd'), 'yyyyiw') weekiw," +
+			"  to_char(to_date('%v', 'yyyymmdd'), 'iw') week" +
+			" from dual t"
+		sqlId = fmt.Sprintf(sqlId, curDate, curDate, curDate, curDate, curDate)
+	} else {
+		// 查当前日期信息
+		sqlId = "select" +
+			"  to_char(sysdate, 'yyyymmdd') curdate," +
+			"  to_char(trunc(to_date(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd'), 'IW'), 'yyyy-mm-dd') begindate," +
+			"  to_char(trunc(to_date(to_char(sysdate, 'yyyymmdd'), 'yyyymmdd'), 'IW') + 6, 'yyyy-mm-dd') enddate," +
+			"  to_char(sysdate, 'yyyyiw') weekiw," +
+			"  to_char(sysdate, 'iw') week" +
+			" from dual t"
+	}
+	r.mtx.Lock()
+	defer r.mtx.Unlock()
+	sData := []WeekDate{}
+	if err := db.GetEngine().SQL(sqlId).Find(&sData); err == nil {
+		if r.data == nil {
+			r.data = map[string]WeekDate{}
+		}
+		for i := range sData {
+			r.data[sData[i].CurDate] = sData[i]
+		}
+	}
+}
+
+// WeekIW 获取yyyyiw
+func (r *WeekDateMgr) WeekIW(curDate string) string {
+	r.mtx.RLock()
+	defer r.mtx.RUnlock()
+	if d, ok := r.data[curDate]; ok {
+		return d.WeekIW
+	}
+	return ""
+}
+
+// Get 获取周信息
+func (r *WeekDateMgr) Get(curDate string) (WeekDate, bool) {
+	r.mtx.RLock()
+	defer r.mtx.RUnlock()
+	if d, ok := r.data[curDate]; ok {
+		return d, true
+	}
+	return WeekDate{}, false
+}
+
+// GetWeekInfo 获取周信息
+func GetWeekInfo(curDate string) (WeekDate, bool) {
+	if d, ok := vWeekMgr.Get(curDate); ok {
+		return d, ok
+	} else {
+		vWeekMgr.load(curDate)
+	}
+	return vWeekMgr.Get(curDate)
+}
+
+// GetWeekIW 获取yyyyiw
+func GetWeekIW(curDate string) string {
+	if d := vWeekMgr.WeekIW(curDate); d != "" {
+		return d
+	} else {
+		vWeekMgr.load(curDate)
+	}
+	return vWeekMgr.WeekIW(curDate)
+}