Quellcode durchsuchen

1.新增 查询财务报表接口(日/周/季/年)
2.新增 查询库存报表接口(日/周/季/年)
3.新增 查询汇总损益报表接口(日/周/季/年)
4.修改 敞口报表/现货报表查询参数

zou.yingbin vor 4 Jahren
Ursprung
Commit
5a001ef6c2
9 geänderte Dateien mit 1810 neuen und 2040 gelöschten Zeilen
  1. 0 91
      controllers/ermcp3/qryErmcp3.go
  2. 185 103
      controllers/ermcp3/qryErmcp3Report.go
  3. 369 435
      docs/docs.go
  4. 369 435
      docs/swagger.json
  5. 453 691
      docs/swagger.yaml
  6. 8 0
      global/app/ginUtils.go
  7. 0 108
      models/ermcp3.go
  8. 423 176
      models/ermcp3Report.go
  9. 3 1
      routers/router.go

+ 0 - 91
controllers/ermcp3/qryErmcp3.go

@@ -376,97 +376,6 @@ func QueryAreaStockApplySum(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// QueryAreaStockReport
-// @Summary 查询库存报表
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表 2-月报表"
-// @Param querydate query string true "查询日期(格式 日报表YYYYMMDD, 月报表YYYYMM)"
-// @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/QueryAreaStockReport [get]
-// @Tags 企业风险管理v3(app)
-func QueryAreaStockReport(c *gin.Context) {
-	a := app.GinUtils{Gin: app.Gin{C: c}}
-	req := struct {
-		USERID           int64  `form:"userid" binding:"required"` // 机构ID
-		WRSTANDARDID     int32  `form:"wrstandardid"`              // 品类ID
-		SPOTGOODSBRANDID int32  `form:"spotgoodsbrandid"`          // 现货品牌ID
-		WAREHOUSEINFOID  string `form:"warehouseinfoid"`           // 仓库ID
-		DELIVERYGOODSID  int32  `form:"deliverygoodsid"`           // 现货品种id
-
-		ReportType int32  `form:"querytype" binding:"required"` // 报表类型 1-日报表 2-月报表
-		ReportDate string `form:"querydate" binding:"required"` // 格式 日报表(YYYYMMDD) 月报表(YYYYMM)
-	}{}
-	a.DoBindReq(&req)
-	if QueryDate(req.ReportDate).IsNumberic(req.ReportType) {
-		m := models.Ermcp3AreaStockReport{USERID: req.USERID, WRSTANDARDID: req.WRSTANDARDID,
-			SPOTGOODSBRANDID: req.SPOTGOODSBRANDID, DELIVERYGOODSID: req.DELIVERYGOODSID,
-			WAREHOUSEINFOID: req.WAREHOUSEINFOID, ReportDate: req.ReportDate, ReportType: req.ReportType}
-		a.DoGetDataI(&m)
-	} else {
-		a.Gin.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
-	}
-}
-
-// QueryAreaStockReportDetail
-// @Summary 查询库存报表明细
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户ID"
-// @Param querytype query int true "查询类型 1-日报表明细 2-月报表明细"
-// @Param detailtype query int true "明细类型 1:入库明细(采购入库+生产入库) 2:出库明细(销售出库+生产出库)"
-// @Param querydate query string true "查询日期(格式 日报表YYYYMMDD, 月报表YYYYMM)"
-// @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.Ermcp3AreaStockApply
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QueryAreaStockReportDetail [get]
-// @Tags 企业风险管理v3(app)
-func QueryAreaStockReportDetail(c *gin.Context) {
-	a := app.GinUtils{Gin: app.Gin{C: c}}
-	req := struct {
-		USERID           int64  `form:"userid" binding:"required"`     // 机构ID
-		DELIVERYGOODSID  int32  `form:"deliverygoodsid"`               // 现货品种id
-		WRSTANDARDID     int32  `form:"wrstandardid"`                  // 品类ID
-		SPOTGOODSBRANDID int32  `form:"spotgoodsbrandid"`              // 品牌id
-		WAREHOUSEINFOID  string `form:"warehouseinfoid"`               // 现货仓库ID
-		QUERYTYPE        int32  `form:"querytype" binding:"required"`  // 查询类型
-		QUERYDATE        string `form:"querydate" binding:"required"`  // 查询日期
-		DETAILTYPE       int32  `form:"detailtype" binding:"required"` // 明细类型
-	}{}
-	a.DoBindReq(&req)
-	if QueryDate(req.QUERYDATE).IsNumberic(req.QUERYTYPE) {
-		var beginDate, endDate string
-		if req.QUERYTYPE == 1 {
-			beginDate = req.QUERYDATE
-			endDate = beginDate
-		} else if req.QUERYTYPE == 2 {
-			beginDate = req.QUERYDATE + "01"
-			endDate = req.QUERYDATE + "31"
-		}
-		m := models.Ermcp3AreaStockApply{USERID: req.USERID, WRSTANDARDID: req.WRSTANDARDID,
-			SPOTGOODSBRANDID: req.SPOTGOODSBRANDID, DELIVERYGOODSID: req.DELIVERYGOODSID,
-			WAREHOUSEINFOID: req.WAREHOUSEINFOID, BeginDate: beginDate, EndDate: endDate, APPLYSTATUS: 2}
-		// 出入库类型(可多项,逗号隔开) 1:采购入库 2:销售出库 3:生产入库 4:生产出库"
-		if req.DETAILTYPE == 1 {
-			m.FilterType = "1,3"
-		} else if req.DETAILTYPE == 2 {
-			m.FilterType = "2,4"
-		}
-		a.DoGetDataI(&m)
-	} else {
-		a.Gin.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
-	}
-}
-
 // QuerySpotGoodsPrice
 // @Summary 查询现货市价(现货市价)
 // @Produce json

+ 185 - 103
controllers/ermcp3/qryErmcp3Report.go

@@ -18,7 +18,7 @@ import (
 // 查询日期
 type QueryDate string
 
-// IsNumberic 判断是否为数字,
+// IsNumberic 判断是否为数字, queryType 1:8位日期 2:6位日期
 func (v QueryDate) IsNumberic(queryType int32) bool {
 	if queryType == 1 {
 		// 日报表 日期长度YYYYMMDD
@@ -79,18 +79,45 @@ func (r *CycleTypeCheck) Check() bool {
 	return true
 }
 
-// @Summary 查询现货日报表详情(菜单:报表查询/现货报表/现货日报表详情)
-// @Produce json
-// @Security ApiKeyAuth
+// QryReportReq 查报表请求
 // @Param userid query int true "用户ID"
-// @Param deliverygoodsid query int true "现货商品id"
-// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
-// @Param wrstandardid query int false "品类ID"
-// @Param spotgoodsbrandid query int false "现货品牌ID"
-// @Success 200 {array} models.Ermcp3ReportOPLog
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportDaySpotDetail [get]
-// @Tags 企业风险管理v3(app)
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @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 begindate query string false "开始交易日(格式yyyymmdd)"
+// @Param enddate query string false "结束交易日(格式yyyymmdd)"
+type QryReportReq struct {
+	USERID    int64  `form:"userid" binding:"required"`    // 用户id
+	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)【原值】
+	BEGINDATE string `form:"begindate"`                    // 开始交易日
+	ENDDATE   string `form:"enddate"`                      // 结束交易日
+}
+
+// Check 参数检查
+func (r *QryReportReq) Check() bool {
+	// 参数检查
+	switch r.QUERYTYPE {
+	case 1:
+		return QueryDate(r.TRADEDATE).IsNumberic(1)
+	case 2:
+		switch r.CYCLETYPE {
+		case 1, 2, 3, 4, 5:
+			p := CycleTypeCheck{CYCLETYPE: r.CYCLETYPE, CYCLETIME: r.CYCLETIME}
+			return p.Check()
+		default:
+			return false
+		}
+	case 3:
+		return QueryDate(r.BEGINDATE).IsNumberic(1) && QueryDate(r.ENDDATE).IsNumberic(1)
+	}
+	return true
+}
+
+// QryReportDaySpotDetail 查询现货日报表详情(菜单:报表查询/现货报表/现货日报表详情) - 作废
 func QryReportDaySpotDetail(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
@@ -107,15 +134,7 @@ func QryReportDaySpotDetail(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// @Summary 查询财务日报表款项(菜单:报表查询/财务报表/日报表/款项)
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户ID"
-// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
-// @Success 200 {array} models.Ermcp3ReportOPLog
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportDayFinanceKx [get]
-// @Tags 企业风险管理v3(app)
+// QryReportDayFinanceKx 查询财务日报表款项(菜单:报表查询/财务报表/日报表/款项) - 作废
 func QryReportDayFinanceKx(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
@@ -127,15 +146,7 @@ func QryReportDayFinanceKx(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// @Summary 查询财务日报表发票(菜单:报表查询/财务报表/日报表/发票)
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户ID"
-// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
-// @Success 200 {array} models.Ermcp3ReportOPLog
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportDayFinanceFp [get]
-// @Tags 企业风险管理v3(app)
+// QryReportDayFinanceFp 查询财务日报表发票(菜单:报表查询/财务报表/日报表/发票) - 作废
 func QryReportDayFinanceFp(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
@@ -147,19 +158,7 @@ func QryReportDayFinanceFp(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// @Summary 查询现货日报表(菜单:报表查询/现货报表/现货日报表)
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户id"
-// @Param reckondate query string true "交易日(格式:yyyyMMdd)"
-// @Param accountid query int false "期货账户ID"
-// @Param deliverygoodsid query int false "现货品种ID"
-// @Param wrstandardid query int false "品类ID"
-// @Param spotgoodsbrandid query int false "现货品牌ID"
-// @Success 200 {array} models.Ermcp3ReckonAreaSpotSub
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportDaySpot [get]
-// @Tags 企业风险管理v3(app)
+// QryReportDaySpot 查询现货日报表(菜单:报表查询/现货报表/现货日报表) - 作废
 func QryReportDaySpot(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	m := models.Ermcp3ReckonAreaSpotSub{}
@@ -168,20 +167,7 @@ func QryReportDaySpot(c *gin.Context) {
 }
 
 // QryReportMonthSpot
-// @Summary 查询现货月报表(菜单:报表查询/现货报表/现货月报表)
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户id"
-// @Param cycletype query int true "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string true "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
-// @Param accountid query int false "期货账户ID"
-// @Param deliverygoodsid query int false "现货品种ID"
-// @Param wrstandardid query int false "品类ID"
-// @Param spotgoodsbrandid query int false "现货品牌ID"
-// @Success 200 {array} models.Ermcp3ReportAreaSpotSub
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportMonthSpot [get]
-// @Tags 企业风险管理v3(app)
+// 查询现货月报表(菜单:报表查询/现货报表/现货月报表) - 作废
 func QryReportMonthSpot(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	m := models.Ermcp3ReportAreaSpotSub{}
@@ -189,20 +175,7 @@ func QryReportMonthSpot(c *gin.Context) {
 	a.DoGetDataI(&m)
 }
 
-// @Summary 查询现货月报表详情(菜单:报表查询/现货月报表/现货月报表详情)
-// @Produce json
-// @Security ApiKeyAuth
-// @Param userid query int true "用户id"
-// @Param cycletype query int true "周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】"
-// @Param cycletime query string true "周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】"
-// @Param accountid query int false "期货账户ID"
-// @Param deliverygoodsid query int false "现货品种ID"
-// @Param wrstandardid query int false "品类ID"
-// @Param spotgoodsbrandid query int false "现货品牌ID"
-// @Success 200 {array} models.Ermcp3ReportAreaSpotSub
-// @Failure 500 {object} app.Response
-// @Router /Ermcp3/QryReportMonthSpotDetail [get]
-// @Tags 企业风险管理v3(app)
+// QryReportMonthSpotDetail 查询现货月报表详情(菜单:报表查询/现货月报表/现货月报表详情) - 作废
 func QryReportMonthSpotDetail(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := models.Ermcp3ReportAreaSpotSub{}
@@ -226,34 +199,24 @@ func QryReportMonthSpotDetail(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
-// @Param tradedate query string false "交易日(YYYYMMDD)"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @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)【原值】"
-// @Success 200 {array} models.Ermcp3ReckonExpourse
+// @Param begindate query string false "开始交易日(格式yyyymmdd)"
+// @Param enddate query string false "结束交易日(格式yyyymmdd)"
+// @Success 200 {array} models.Ermcp3ExpourseReport
 // @Failure 500 {object} app.Response
 // @Router /Ermcp3/QryAreaExpourseReport [get]
 // @Tags 企业风险管理v3(app)
 func QryAreaExpourseReport(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
-	req := struct {
-		USERID    int64  `form:"userid" binding:"required"` // 用户id
-		TRADEDATE string `form:"tradedate"`                 // 交易日
-		CYCLETIME string `form:"cycletime"`                 // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
-		CYCLETYPE int32  `form:"cycletype"`                 // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-	}{}
+	req := QryReportReq{}
 	a.DoBindReq(&req)
-	if len(req.TRADEDATE) > 0 {
-		// 查日报表
-		m := models.Ermcp3ReckonExpourse{AREAUSERID: req.USERID, RECKONDATE: req.TRADEDATE}
-		a.DoGetDataI(&m)
-	} else {
-		// 查月报表
-		p := CycleTypeCheck{CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME}
-		a.CheckParam(&p)
-		m := models.Ermcp3ReportExpourse{AREAUSERID: req.USERID,
-			CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME}
-		a.DoGetDataI(&m)
-	}
+	a.CheckParam(&req)
+	m := models.Ermcp3ExpourseReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE,
+		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
+	a.DoGetDataI(&m)
 }
 
 // QryAreaExpourseContractDetail
@@ -309,30 +272,149 @@ func QryAreaExpourseHedgeplanDetail(c *gin.Context) {
 // @Produce json
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
 // @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)【原值】"
-// @Success 200 {array} models.Ermcp3ReckonAreaSpotPL
+// @Param begindate query string false "开始交易日(格式yyyymmdd)"
+// @Param enddate query string false "结束交易日(格式yyyymmdd)"
+// @Success 200 {array} models.Ermcp3AreaSpotPLReport
 // @Failure 500 {object} app.Response
 // @Router /Ermcp3/QryAreaSpotplReport [get]
 // @Tags 企业风险管理v3(app)
 func QryAreaSpotplReport(c *gin.Context) {
 	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportReq{}
+	a.DoBindReq(&req)
+	a.CheckParam(&req)
+	m := models.Ermcp3AreaSpotPLReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
+		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
+	a.DoGetDataI(&m)
+}
+
+// QryFinanceReport
+// @Summary 查询财务报表
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @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 begindate query string false "开始交易日(格式yyyymmdd)"
+// @Param enddate query string false "结束交易日(格式yyyymmdd)"
+// @Success 200 {array} models.Ermcp3FinanceReport
+// @Failure 500 {object} app.Response
+// @Router /Ermcp3/QryFinanceReport [get]
+// @Tags 企业风险管理v3(app)
+func QryFinanceReport(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportReq{}
+	a.DoBindReq(&req)
+	a.CheckParam(&req)
+	m := models.Ermcp3FinanceReport{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
+		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
+	a.DoGetDataI(&m)
+}
+
+// QryAreaStockReport
+// @Summary 查询库存报表
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @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 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]
+// @Tags 企业风险管理v3(app)
+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
+	}{}
+	a.DoBindReq(&req)
+	a.DoBindReq(&req2)
+	a.CheckParam(&req)
+	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}
+	a.DoGetDataI(&m)
+}
+
+// QueryAreaStockReportDetail
+// 查询库存报表明细 - 作废(库存报表明细就是查库存申请记录,直接调用其接口)
+func QueryAreaStockReportDetail(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
 	req := struct {
-		USERID    int64  `form:"userid" binding:"required"` // 用户id
-		TRADEDATE string `form:"tradedate"`                 // 交易日
-		CYCLETYPE int32  `form:"cycletype"`                 // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-		CYCLETIME string `form:"cycletime"`                 // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+		USERID           int64  `form:"userid" binding:"required"`     // 机构ID
+		DELIVERYGOODSID  int32  `form:"deliverygoodsid"`               // 现货品种id
+		WRSTANDARDID     int32  `form:"wrstandardid"`                  // 品类ID
+		SPOTGOODSBRANDID int32  `form:"spotgoodsbrandid"`              // 品牌id
+		WAREHOUSEINFOID  string `form:"warehouseinfoid"`               // 现货仓库ID
+		QUERYTYPE        int32  `form:"querytype" binding:"required"`  // 查询类型
+		QUERYDATE        string `form:"querydate" binding:"required"`  // 查询日期
+		DETAILTYPE       int32  `form:"detailtype" binding:"required"` // 明细类型
 	}{}
 	a.DoBindReq(&req)
-	if len(req.TRADEDATE) > 0 {
-		m := models.Ermcp3ReckonAreaSpotPL{AREAUSERID: req.USERID, RECKONDATE: req.TRADEDATE}
+	if QueryDate(req.QUERYDATE).IsNumberic(req.QUERYTYPE) {
+		var beginDate, endDate string
+		if req.QUERYTYPE == 1 {
+			beginDate = req.QUERYDATE
+			endDate = beginDate
+		} else if req.QUERYTYPE == 2 {
+			beginDate = req.QUERYDATE + "01"
+			endDate = req.QUERYDATE + "31"
+		}
+		m := models.Ermcp3AreaStockApply{USERID: req.USERID, WRSTANDARDID: req.WRSTANDARDID,
+			SPOTGOODSBRANDID: req.SPOTGOODSBRANDID, DELIVERYGOODSID: req.DELIVERYGOODSID,
+			WAREHOUSEINFOID: req.WAREHOUSEINFOID, BeginDate: beginDate, EndDate: endDate, APPLYSTATUS: 2}
+		// 出入库类型(可多项,逗号隔开) 1:采购入库 2:销售出库 3:生产入库 4:生产出库"
+		if req.DETAILTYPE == 1 {
+			m.FilterType = "1,3"
+		} else if req.DETAILTYPE == 2 {
+			m.FilterType = "2,4"
+		}
 		a.DoGetDataI(&m)
 	} else {
-		p := CycleTypeCheck{CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME}
-		a.CheckParam(&p)
-		m := models.Ermcp3ReportAreaSpotPL{AREAUSERID: req.USERID,
-			CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME}
-		a.DoGetDataI(&m)
+		a.Gin.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
 	}
 }
+
+// QryAreaSumPL
+// @Summary 查询汇总损益表
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param querytype query int true "查询类型 1-日报表 2-周期报表 3-日报表(指定时间段[开始交易日,结束交易日])"
+// @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 begindate query string false "开始交易日(格式yyyymmdd)"
+// @Param enddate query string false "结束交易日(格式yyyymmdd)"
+// @Success 200 {array} models.Ermcp3ArealSumPL
+// @Failure 500 {object} app.Response
+// @Router /Ermcp3/QryAreaSumPL [get]
+// @Tags 企业风险管理v3(app)
+func QryAreaSumPL(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportReq{}
+	a.DoBindReq(&req)
+	a.CheckParam(&req)
+	m := models.Ermcp3ArealSumPL{AREAUSERID: req.USERID, QueryType: req.QUERYTYPE, RECKONDATE: req.TRADEDATE,
+		CYCLETYPE: req.CYCLETYPE, CYCLETIME: req.CYCLETIME, BeginDate: req.BEGINDATE, EndDate: req.ENDDATE}
+	a.DoGetDataI(&m)
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 369 - 435
docs/docs.go


Datei-Diff unterdrückt, da er zu groß ist
+ 369 - 435
docs/swagger.json


Datei-Diff unterdrückt, da er zu groß ist
+ 453 - 691
docs/swagger.yaml


+ 8 - 0
global/app/ginUtils.go

@@ -112,6 +112,14 @@ func (r *GinUtils) CheckParam(iObj ICheck) {
 	}
 }
 
+// CheckParamF 参数检查
+func (r *GinUtils) CheckParamF(f func() bool) {
+	if f() == false {
+		r.err = fmt.Errorf("check param err")
+		r.Gin.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+	}
+}
+
 // NewGinUtils 生成处理GinUtils实例
 func NewGinUtils(c *gin.Context) *GinUtils {
 	return &GinUtils{Gin: Gin{C: c}}

+ 0 - 108
models/ermcp3.go

@@ -1671,114 +1671,6 @@ func (r *Ermcp3AreaStock) GetDataEx() (interface{}, error) {
 	return sData, err
 }
 
-// Ermcp3AreaStockReport 库存报表
-type Ermcp3AreaStockReport struct {
-	USERID             int64   `json:"userid"  xorm:"'USERID'"`                         // 机构ID
-	WRSTANDARDID       int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`             // 品类ID
-	SPOTGOODSBRANDID   int32   `json:"spotgoodsbrandid"  xorm:"'SPOTGOODSBRANDID'"`     // 现货品牌ID
-	WAREHOUSEINFOID    string  `json:"warehouseinfoid"  xorm:"'WAREHOUSEINFOID'"`       // 仓库ID
-	ORISTOCK           float64 `json:"oristock"  xorm:"'ORISTOCK'"`                     // 期初库存量
-	CURSTOCK           float64 `json:"curstock"  xorm:"'CURSTOCK'"`                     // 期末库存量
-	TODAYBUYINQTY      float64 `json:"todaybuyinqty"  xorm:"'TODAYBUYINQTY'"`           // 今日采购入库量
-	TODAYPRODUCEINQTY  float64 `json:"todayproduceinqty"  xorm:"'TODAYPRODUCEINQTY'"`   // 今日生产入库量
-	TODAYSELLOUTQTY    float64 `json:"todayselloutqty"  xorm:"'TODAYSELLOUTQTY'"`       // 今日销售出库量
-	TODAYPRODUCEOUTQTY float64 `json:"todayproduceoutqty"  xorm:"'TODAYPRODUCEOUTQTY'"` // 今日生产出库量
-	UPDATETIME         string  `json:"updatetime"  xorm:"'UPDATETIME'"`                 // 更新时间
-	WRSTANDARDNAME     string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`         // 品类名称
-	WRSTANDARDCODE     string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`         // 品类代码
-	UNITID             int32   `json:"unitid"  xorm:"'UNITID'"`                         // 品类单位id
-	BRANDNAME          string  `json:"brandname"  xorm:"'BRANDNAME'"`                   // 品牌名称
-	WAREHOUSENAME      string  `json:"warehousename"  xorm:"'WAREHOUSENAME'"`           // 仓库名称
-	WAREHOUSECODE      string  `json:"warehousecode"  xorm:"'WAREHOUSECODE'"`           // 仓库代码
-	WAREHOUSETYPE      int32   `json:"warehousetype"  xorm:"'WAREHOUSETYPE'"`           // 仓库类型 - 1 厂库  2 自有库  3 合作库
-	USERNAME           string  `json:"username"`                                        // 机构名称
-	ENUMDICNAME        string  `json:"enumdicname"`                                     // 单位名称
-	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
-
-	ReportType int32  `json:"-"` // 报表类型 1-日报表 2-月报表
-	ReportDate string `json:"-"` // 格式 日报表(YYYYMMDD) 月报表(YYYYMM)
-}
-
-func (r *Ermcp3AreaStockReport) calc() {
-	r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
-	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
-}
-
-func (r *Ermcp3AreaStockReport) buildSql() string {
-	var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
-		"       t.TODAYPRODUCEINQTY," +
-		"       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," +
-		"       w.wrstandardname," +
-		"       w.wrstandardcode," +
-		"       w.unitid," +
-		"       gb.dgfactoryitemvalue brandname," +
-		"       h.warehousename," +
-		"       h.warehousecode," +
-		"       h.warehousetype," +
-		"       g.deliverygoodsid," +
-		"       g.deliverygoodscode," +
-		"       g.deliverygoodsname," +
-		"       g.goodsunitid" +
-		"  FROM %v t" +
-		"  LEFT JOIN WRSTANDARD w" +
-		"    on t.wrstandardid = w.wrstandardid" +
-		"  LEFT JOIN dgfactoryitem gb" +
-		"    on t.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)
-	if r.ReportType == 1 {
-		// 日报表
-		sqlId.FormatParam("RECKON_ERMCP_AREASTOCK")
-		sqlId.And("t.reckondate", r.ReportDate)
-	} else {
-		// 月报表
-		sqlId.FormatParam("REPORT_ERMCP_AREASTOCK")
-		sqlId.And("t.cycletype", 1)
-		sqlId.And("t.cycletime", r.ReportDate)
-	}
-	// 现货商品id
-	sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
-	// 品类id
-	sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
-	// 品牌id
-	if r.SPOTGOODSBRANDID > 0 {
-		sqlId.And("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID)
-	}
-	// 仓库id
-	if len(r.WAREHOUSEINFOID) > 0 {
-		sqlId.And("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID)
-	}
-	return sqlId.String()
-}
-
-// GetDataEx 查询库存报表
-func (r *Ermcp3AreaStockReport) GetDataEx() (interface{}, error) {
-	sData := make([]ErmcpAreaStockReport, 0)
-	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
-	if err == nil {
-		for i := range sData {
-			sData[i].calc()
-		}
-	}
-	return sData, err
-}
-
 // Ermcp3SpotGoodsPrice 现货市价
 type Ermcp3SpotGoodsPrice struct {
 	WRSTANDARDID      int64   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`           // 现货品类ID(通用则为0)

+ 423 - 176
models/ermcp3Report.go

@@ -432,8 +432,11 @@ func (r *Ermcp3ReportAreaSpotSub) GetDataEx() (interface{}, error) {
 	return sData, err
 }
 
-// Ermcp3ReckonExpourse 敞口日报表
-type Ermcp3ReckonExpourse struct {
+// Ermcp3ExpourseReport 敞口报表
+type Ermcp3ExpourseReport struct {
+	RECKONDATE            string  `json:"reckondate"  xorm:"'RECKONDATE'"`                       // 日照时期(yyyyMMdd)
+	CYCLETIME             string  `json:"cycletime"  xorm:"'CYCLETIME'"`                         // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETYPE             int32   `json:"cycletype"  xorm:"'CYCLETYPE'"`                         // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
 	ORITOTALSPOTQTY       float64 `json:"oritotalspotqty"  xorm:"'ORITOTALSPOTQTY'"`             // 期初现货头寸总量
 	ORITOTALFUTUREQTY     float64 `json:"oritotalfutureqty"  xorm:"'ORITOTALFUTUREQTY'"`         // 期初期货头寸总量
 	ORITOTALEXPOSURE      float64 `json:"oritotalexposure"  xorm:"'ORITOTALEXPOSURE'"`           // 期初实时总敞口
@@ -443,7 +446,6 @@ type Ermcp3ReckonExpourse struct {
 	ORINEEDHEDGEQTY       float64 `json:"orineedhedgeqty"  xorm:"'ORINEEDHEDGEQTY'"`             // 期初应套保量
 	ORINEEDARBITRAGEQTY   float64 `json:"orineedarbitrageqty"  xorm:"'ORINEEDARBITRAGEQTY'"`     // 期初应套利量
 	ORITOTALNEEDHEDGEQTY  float64 `json:"oritotalneedhedgeqty"  xorm:"'ORITOTALNEEDHEDGEQTY'"`   // 期初应套保总量
-	RECKONDATE            string  `json:"reckondate"  xorm:"'RECKONDATE'"`                       // 日照时期(yyyyMMdd)
 	MIDDLEGOODSID         int64   `json:"middlegoodsid"  xorm:"'MIDDLEGOODSID'"`                 // 套保品种ID
 	AREAUSERID            int64   `json:"areauserid"  xorm:"'AREAUSERID'"`                       // 所属机构\交易用户ID
 	ACCOUNTID             int64   `json:"accountid"  xorm:"'ACCOUNTID'"`                         // 期货账户ID (作废, 默认为0)
@@ -487,9 +489,13 @@ type Ermcp3ReckonExpourse struct {
 	DiffQty      float64 `json:"diffqty"`      // 变动量(总敞口)
 	DiffHedgeQty float64 `json:"diffhedgeqty"` // 变动量(现货应套保总量)
 	DiffExposure float64 `json:"diffexposure"` // 变动量(套保敞口)
+
+	QueryType int32  `json:"-"` // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	BeginDate string `json:"-"` // 开始交易日
+	EndDate   string `json:"-"` // 结束交易日
 }
 
-func (r *Ermcp3ReckonExpourse) calc() {
+func (r *Ermcp3ExpourseReport) calc() {
 	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
 	r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
 	// 变动量(现货) = 现货头寸总量 - 期初现货头寸总量
@@ -508,7 +514,14 @@ func (r *Ermcp3ReckonExpourse) calc() {
 	r.DiffExposure = r.NEEDHEDGEEXPOSOURE - r.ORINEEDHEDGEEXPOSOURE
 }
 
-func (r *Ermcp3ReckonExpourse) buildSql() string {
+func (r *Ermcp3ExpourseReport) buildSql() string {
+	if r.QueryType == 1 || r.QueryType == 3 {
+		return r.buildSqlDay()
+	}
+	return r.buildSqlCycle()
+}
+
+func (r *Ermcp3ExpourseReport) buildSqlDay() string {
 	var sqlId utils.SQLVal = "SELECT t.ORITOTALSPOTQTY," +
 		"       t.ORITOTALFUTUREQTY," +
 		"       t.ORITOTALEXPOSURE," +
@@ -554,98 +567,15 @@ func (r *Ermcp3ReckonExpourse) buildSql() string {
 		"    on t.middlegoodsid = g.middlegoodsid" +
 		" WHERE 1 = 1"
 	sqlId.AndEx("t.AREAUSERID", r.AREAUSERID, r.AREAUSERID > 0)
-	sqlId.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
-	return sqlId.String()
-}
-
-// GetDataEx 获取敞口日报表
-func (r *Ermcp3ReckonExpourse) GetDataEx() (interface{}, error) {
-	sData := make([]Ermcp3ReckonExpourse, 0)
-	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
-	for i := range sData {
-		sData[i].calc()
+	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))
 	}
-	return sData, err
-}
-
-// Ermcp3ReportExpourse 获取敞口周期报表
-type Ermcp3ReportExpourse struct {
-	CYCLETIME             string  `json:"cycletime"  xorm:"'CYCLETIME'"`                         // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
-	CYCLETYPE             int32   `json:"cycletype"  xorm:"'CYCLETYPE'"`                         // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-	ORITOTALSPOTQTY       float64 `json:"oritotalspotqty"  xorm:"'ORITOTALSPOTQTY'"`             // 期初现货头寸总量
-	ORITOTALFUTUREQTY     float64 `json:"oritotalfutureqty"  xorm:"'ORITOTALFUTUREQTY'"`         // 期初期货头寸总量
-	ORITOTALEXPOSURE      float64 `json:"oritotalexposure"  xorm:"'ORITOTALEXPOSURE'"`           // 期初实时总敞口
-	ORINEEDHEDGEEXPOSOURE float64 `json:"orineedhedgeexposoure"  xorm:"'ORINEEDHEDGEEXPOSOURE'"` // 期初应套保敞口
-	ORIHEDGEQTY           float64 `json:"orihedgeqty"  xorm:"'ORIHEDGEQTY'"`                     // 期初套保量
-	ORIARBITRAGEQTY       float64 `json:"oriarbitrageqty"  xorm:"'ORIARBITRAGEQTY'"`             // 期初套利量
-	ORINEEDHEDGEQTY       float64 `json:"orineedhedgeqty"  xorm:"'ORINEEDHEDGEQTY'"`             // 期初应套保量
-	ORINEEDARBITRAGEQTY   float64 `json:"orineedarbitrageqty"  xorm:"'ORINEEDARBITRAGEQTY'"`     // 期初应套利量
-	ORITOTALNEEDHEDGEQTY  float64 `json:"oritotalneedhedgeqty"  xorm:"'ORITOTALNEEDHEDGEQTY'"`   // 期初应套保总量
-	MIDDLEGOODSID         int64   `json:"middlegoodsid"  xorm:"'MIDDLEGOODSID'"`                 // 套保品种ID
-	AREAUSERID            int64   `json:"areauserid"  xorm:"'AREAUSERID'"`                       // 所属机构\交易用户ID
-	ACCOUNTID             int64   `json:"accountid"  xorm:"'ACCOUNTID'"`                         // 期货账户ID (作废, 默认为0)
-	ORIBUYPLANQTY         float64 `json:"oribuyplanqty"  xorm:"'ORIBUYPLANQTY'"`                 // 期初采购计划数量
-	ORIBUYPRICEDQTY       float64 `json:"oribuypricedqty"  xorm:"'ORIBUYPRICEDQTY'"`             // 期初采购合同已定价数量
-	ORISELLPLANQTY        float64 `json:"orisellplanqty"  xorm:"'ORISELLPLANQTY'"`               // 期初销售计划数量
-	ORISELLPRICEDQTY      float64 `json:"orisellpricedqty"  xorm:"'ORISELLPRICEDQTY'"`           // 期初销售合同已定价数量
-	ORIBUYFUTUREQTY       float64 `json:"oribuyfutureqty"  xorm:"'ORIBUYFUTUREQTY'"`             // 期初买入期货数量
-	ORISELLFUTUREQTY      float64 `json:"orisellfutureqty"  xorm:"'ORISELLFUTUREQTY'"`           // 期初卖出期货数量
-	BUYPLANQTY            float64 `json:"buyplanqty"  xorm:"'BUYPLANQTY'"`                       // 采购计划数量
-	BUYPRICEDQTY          float64 `json:"buypricedqty"  xorm:"'BUYPRICEDQTY'"`                   // 采购合同已定价数量
-	SELLPLANQTY           float64 `json:"sellplanqty"  xorm:"'SELLPLANQTY'"`                     // 销售计划数量
-	SELLPRICEDQTY         float64 `json:"sellpricedqty"  xorm:"'SELLPRICEDQTY'"`                 // 销售合同已定价数量
-	BUYFUTUREQTY          float64 `json:"buyfutureqty"  xorm:"'BUYFUTUREQTY'"`                   // 买入期货数量
-	SELLFUTUREQTY         float64 `json:"sellfutureqty"  xorm:"'SELLFUTUREQTY'"`                 // 卖出期货数量
-	TOTALSPOTQTY          float64 `json:"totalspotqty"  xorm:"'TOTALSPOTQTY'"`                   // 现货头寸总量
-	TOTALFUTUREQTY        float64 `json:"totalfutureqty"  xorm:"'TOTALFUTUREQTY'"`               // 期货头寸总量(期货总量)
-	TOTALEXPOSURE         float64 `json:"totalexposure"  xorm:"'TOTALEXPOSURE'"`                 // 实时总敞口(总敞口)
-	TOTALHEDGERATIO       float64 `json:"totalhedgeratio"  xorm:"'TOTALHEDGERATIO'"`             // 敞口比例
-	TOTALNEEDHEDGEQTY     float64 `json:"totalneedhedgeqty"  xorm:"'TOTALNEEDHEDGEQTY'"`         // 应套保总量(现货应套保总量)
-	NEEDHEDGEEXPOSOURE    float64 `json:"needhedgeexposoure"  xorm:"'NEEDHEDGEEXPOSOURE'"`       // 应套保敞口(套保敞口)
-	NEEDHEDGERATIO        float64 `json:"needhedgeratio"  xorm:"'NEEDHEDGERATIO'"`               // 应套保敞口比例
-	UPDATETIME            string  `json:"updatetime"  xorm:"'UPDATETIME'"`                       // 更新时间
-	HEDGEQTY              float64 `json:"hedgeqty"  xorm:"'HEDGEQTY'"`                           // 套保量
-	ARBITRAGEQTY          float64 `json:"arbitrageqty"  xorm:"'ARBITRAGEQTY'"`                   // 套利量
-	NEEDHEDGEQTY          float64 `json:"needhedgeqty"  xorm:"'NEEDHEDGEQTY'"`                   // 应套保量
-	NEEDARBITRAGEQTY      float64 `json:"needarbitrageqty"  xorm:"'NEEDARBITRAGEQTY'"`           // 应套利量
-	MIDDLEGOODSNAME       string  `json:"middlegoodsnam"  xorm:"'MIDDLEGOODSNAME'"`              // 套保商品名称
-	MIDDLEGOODSCODE       string  `json:"middlgoodscode"  xorm:"'MIDDLEGOODSCODE'"`              // 套保商品代码
-	UNITID                int32   `json:"unitid"  xorm:"'UNITID'"`                               // 单位id
-	MGNEEDHEDGERATIO      float64 `json:"mgneedhedgeratio"  xorm:"'MGNEEDHEDGERATIO'"`           // 套保比例(套保品的)
-	NEEDARBITRAGERATIO    float64 `json:"needarbitrageratio"  xorm:"'NEEDARBITRAGERATIO'"`       // 套利比例(套保品的)
-
-	ENUMDICNAME string `json:"enumdicname"` // 单位名称
-	ACCOUNTNAME string `json:"accountname"` // 机构名称
-
-	DiffSpotQty  float64 `json:"diffspotqty"`  // 变动量(现货)
-	DiffMgQtyA   float64 `json:"diffmgqtya"`   // 套保变动量
-	DiffMgQtyB   float64 `json:"diffmgqtyb"`   // 套利变动量
-	DiffFutuQty  float64 `json:"difffutuqty"`  // 变动量(期货)
-	DiffQty      float64 `json:"diffqty"`      // 变动量(总敞口)
-	DiffHedgeQty float64 `json:"diffhedgeqty"` // 变动量(现货应套保总量)
-	DiffExposure float64 `json:"diffexposure"` // 变动量(套保敞口)
-}
-
-func (r *Ermcp3ReportExpourse) calc() {
-	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
-	r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
-	// 变动量(现货) = 现货头寸总量 - 期初现货头寸总量
-	r.DiffSpotQty = r.TOTALSPOTQTY - r.ORITOTALSPOTQTY
-	// 套保变动量 = 套保量 - 期初套保量
-	r.DiffMgQtyA = r.HEDGEQTY - r.ORIHEDGEQTY
-	// 套利变动量 = 套利量 - 期初套利量
-	r.DiffMgQtyB = r.ARBITRAGEQTY - r.ORIARBITRAGEQTY
-	// 变动量(期货) = (买入 - 买入期初) - (卖出 - 卖出期初)
-	r.DiffFutuQty = (r.BUYFUTUREQTY - r.ORIBUYFUTUREQTY) - (r.SELLFUTUREQTY - r.ORISELLFUTUREQTY)
-	// 变动量(敞口) = 实时敞口 - 期初实时敞口
-	r.DiffQty = r.TOTALEXPOSURE - r.ORITOTALEXPOSURE
-	// 变动量(现货应套保总量)
-	r.DiffHedgeQty = r.TOTALNEEDHEDGEQTY - r.ORITOTALNEEDHEDGEQTY
-	// 变动量(套保敞口)
-	r.DiffExposure = r.NEEDHEDGEEXPOSOURE - r.ORINEEDHEDGEEXPOSOURE
+	return sqlId.String()
 }
 
-func (r *Ermcp3ReportExpourse) buildSql() string {
+func (r *Ermcp3ExpourseReport) buildSqlCycle() string {
 	var sqlId utils.SQLVal = "SELECT t.cycletime," +
 		"       t.cycletype," +
 		"       t.ORITOTALSPOTQTY," +
@@ -699,9 +629,9 @@ func (r *Ermcp3ReportExpourse) buildSql() string {
 	return sqlId.String()
 }
 
-// GetDataEx 获取获取周期报表
-func (r *Ermcp3ReportExpourse) GetDataEx() (interface{}, error) {
-	sData := make([]Ermcp3ReportExpourse, 0)
+// GetDataEx 获取敞报表
+func (r *Ermcp3ExpourseReport) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3ExpourseReport, 0)
 	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
 	for i := range sData {
 		sData[i].calc()
@@ -881,9 +811,11 @@ func (r *Ermcp3ExposureHedgeplanDetail) GetDataEx() (interface{}, error) {
 	return sData, err
 }
 
-// Ermcp3ReckonAreaSpotPL 现货日照数据(现货数据日照表)
-type Ermcp3ReckonAreaSpotPL struct {
+// Ermcp3AreaSpotPLReport 现货报表(日/月/周/季/年)
+type Ermcp3AreaSpotPLReport struct {
 	RECKONDATE            string  `json:"reckondate"  xorm:"RECKONDATE"`                       // 日照时期(yyyyMMdd)
+	CYCLETIME             string  `json:"cycletime"  xorm:"'CYCLETIME'"`                       // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETYPE             int32   `json:"cycletype"  xorm:"'CYCLETYPE'"`                       // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
 	AREAUSERID            int64   `json:"areauserid"  xorm:"AREAUSERID"`                       // 所属机构\交易用户ID
 	ACCOUNTID             int64   `json:"accountid"  xorm:"ACCOUNTID"`                         // 期货账户ID (作废, 默认为0)
 	WRFACTORTYPEID        int64   `json:"wrfactortypeid"  xorm:"WRFACTORTYPEID"`               // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
@@ -931,16 +863,28 @@ type Ermcp3ReckonAreaSpotPL struct {
 	UNITIDNAME   string `json:"unitidname"`   // 品类单位名称
 	ACCOUNTNAME  string `json:"accountname"`  // 机构名称
 	CURRENCYNAME string `json:"currencyname"` // 币种名称
+
+	QueryType int32  `json:"-"` // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	BeginDate string `json:"-"` // 开始交易日
+	EndDate   string `json:"-"` // 结束交易日
 }
 
-func (r *Ermcp3ReckonAreaSpotPL) calc() {
+func (r *Ermcp3AreaSpotPLReport) calc() {
 	r.EnumdicName = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
 	r.UNITIDNAME = mtpcache.GetEnumDicitemName(r.UNITID)
 	r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
 	r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
 }
 
-func (r *Ermcp3ReckonAreaSpotPL) buildSql() string {
+func (r *Ermcp3AreaSpotPLReport) buildSql() string {
+	if r.QueryType == 1 || r.QueryType == 3 {
+		return r.buildSqlDay()
+	}
+	return r.buildSqlCycle()
+}
+
+// buildSqlDay 日报表查询语句
+func (r *Ermcp3AreaSpotPLReport) buildSqlDay() string {
 	var sqlId utils.SQLVal = "SELECT t.RECKONDATE," +
 		"       t.AREAUSERID," +
 		"       t.ACCOUNTID," +
@@ -990,81 +934,16 @@ func (r *Ermcp3ReckonAreaSpotPL) buildSql() string {
 		"  LEFT JOIN DGFACTORYITEM dg on t.spotgoodsbrandid=dg.dgfactoryitemid" +
 		" WHERE 1 = 1"
 	sqlId.And("t.AREAUSERID", r.AREAUSERID)
-	sqlId.And("t.RECKONDATE", r.RECKONDATE)
-	return sqlId.String()
-}
-
-// GetDataEx 获取现货日照数据(现货数据日照表)
-func (r *Ermcp3ReckonAreaSpotPL) GetDataEx() (interface{}, error) {
-	sData := make([]Ermcp3ReckonAreaSpotPL, 0)
-	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
-	for i := range sData {
-		sData[i].calc()
+	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))
 	}
-	return sData, err
-}
-
-// Ermcp3ReportAreaSpotPL 现货周期数据(周/月/季/年)
-type Ermcp3ReportAreaSpotPL struct {
-	CYCLETIME             string  `json:"cycletime"  xorm:"'CYCLETIME'"`                       // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
-	CYCLETYPE             int32   `json:"cycletype"  xorm:"'CYCLETYPE'"`                       // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
-	AREAUSERID            int64   `json:"areauserid"  xorm:"AREAUSERID"`                       // 所属机构\交易用户ID
-	ACCOUNTID             int64   `json:"accountid"  xorm:"ACCOUNTID"`                         // 期货账户ID (作废, 默认为0)
-	WRFACTORTYPEID        int64   `json:"wrfactortypeid"  xorm:"WRFACTORTYPEID"`               // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
-	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
-	SPOTGOODSBRANDID      int32   `json:"spotgoodsbrandid"  xorm:"SPOTGOODSBRANDID"`           // 现货品牌ID
-	ORIBUYQTY             float64 `json:"oribuyqty"  xorm:"ORIBUYQTY"`                         // 期初采购总量
-	ORIBUYAMOUNT          float64 `json:"oribuyamount"  xorm:"ORIBUYAMOUNT"`                   // 期初采购总额
-	ORISELLQTY            float64 `json:"orisellqty"  xorm:"ORISELLQTY"`                       // 期初销售总量
-	ORISELLAMOUNT         float64 `json:"orisellamount"  xorm:"ORISELLAMOUNT"`                 // 期初销售总额
-	ORIQTY                float64 `json:"oriqty"  xorm:"ORIQTY"`                               // 期初量
-	ORIAVERAGEPRICE       float64 `json:"oriaverageprice"  xorm:"ORIAVERAGEPRICE"`             // 期初均价
-	ORIAMOUNT             float64 `json:"oriamount"  xorm:"ORIAMOUNT"`                         // 期初额
-	TODAYBUYQTY           float64 `json:"todaybuyqty"  xorm:"TODAYBUYQTY"`                     // 今日采购量(今采购量)
-	TODAYBUYAMOUNT        float64 `json:"todaybuyamount"  xorm:"TODAYBUYAMOUNT"`               // 今日采购额(今采购额)
-	TODAYBUYAVERAGEPRICE  float64 `json:"todaybuyaverageprice"  xorm:"TODAYBUYAVERAGEPRICE"`   // 今日采购均价
-	TODAYSELLQTY          float64 `json:"todaysellqty"  xorm:"TODAYSELLQTY"`                   // 今日销售量(今销售量)
-	TODAYSELLAMOUNT       float64 `json:"todaysellamount"  xorm:"TODAYSELLAMOUNT"`             // 今日销售额(今销售额)
-	TODAYSELLAVERAGEPRICE float64 `json:"todaysellaverageprice"  xorm:"TODAYSELLAVERAGEPRICE"` // 今日销售均价
-	CURBUYQTY             float64 `json:"curbuyqty"  xorm:"CURBUYQTY"`                         // 期末采购总量
-	CURBUYAMOUNT          float64 `json:"curbuyamount"  xorm:"CURBUYAMOUNT"`                   // 期末采购总额
-	CURSELLQTY            float64 `json:"cursellqty"  xorm:"CURSELLQTY"`                       // 期末销售总量
-	CURSELLAMOUNT         float64 `json:"cursellamount"  xorm:"CURSELLAMOUNT"`                 // 期末销售总额
-	CURQTY                float64 `json:"curqty"  xorm:"CURQTY"`                               // 期末量
-	CURAVERAGEPRICE       float64 `json:"curaverageprice"  xorm:"CURAVERAGEPRICE"`             // 期末均价
-	CURAMOUNT             float64 `json:"curamount"  xorm:"CURAMOUNT"`                         // 期末额
-	CURSPOTPRICE          float64 `json:"curspotprice"  xorm:"CURSPOTPRICE"`                   // 参考市价(最新价)
-	CURMARKETVALUE        float64 `json:"curmarketvalue"  xorm:"CURMARKETVALUE"`               // 参考市值(期末市值)
-	ACTUALPL              float64 `json:"actualpl"  xorm:"ACTUALPL"`                           // 现货损益
-	FLOATPL               float64 `json:"floatpl"  xorm:"FLOATPL"`                             // 浮动损益
-	UPDATETIME            string  `json:"updatetime"  xorm:"UPDATETIME"`                       // 更新时间
-	TODAYINQTY            float64 `json:"todayinqty"  xorm:"TODAYINQTY"`                       // 今日入库量(今入库量)
-	TODAYOUTQTY           float64 `json:"todayoutqty"  xorm:"TODAYOUTQTY"`                     // 今日出库量(今出库量)
-	DELIVERYGOODSCODE     string  `json:"deliverygoodscode"  xorm:"'DELIVERYGOODSCODE'"`       // 现货商品代码
-	DELIVERYGOODSNAME     string  `json:"deliverygoodsname"  xorm:"'DELIVERYGOODSNAME'"`       // 现货商品名称
-	GOODSUNITID           int32   `json:"goodsunitid"  xorm:"'GOODSUNITID'"`                   // 现货商品单位id
-	WRSTANDARDCODE        string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`             // 品类代码
-	WRSTANDARDNAME        string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`             // 品类名称
-	UNITID                int32   `json:"unitid"  xorm:"'UNITID'"`                             // 品类单位id
-	BRANDNAME             string  `json:"brandname"  xorm:"'BRANDNAME'"`                       // 品牌名称
-
-	EnumdicName  string `json:"enumdicname"`  // 现货商品单位名称
-	UNITIDNAME   string `json:"unitidname"`   // 品类单位名称
-	ACCOUNTNAME  string `json:"accountname"`  // 机构名称
-	CURRENCYNAME string `json:"currencyname"` // 币种名称
-}
-
-func (r *Ermcp3ReportAreaSpotPL) calc() {
-	r.EnumdicName = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
-	r.UNITIDNAME = mtpcache.GetEnumDicitemName(r.UNITID)
-	r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
-	r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
+	return sqlId.String()
 }
 
-func (r *Ermcp3ReportAreaSpotPL) buildSql() string {
+// buildSqlCycle 周期报表查询语句
+func (r *Ermcp3AreaSpotPLReport) buildSqlCycle() string {
 	var sqlId utils.SQLVal = "SELECT t.Cycletype," +
 		"       t.Cycletime," +
 		"       t.AREAUSERID," +
@@ -1120,9 +999,377 @@ func (r *Ermcp3ReportAreaSpotPL) buildSql() string {
 	return sqlId.String()
 }
 
-// GetDataEx 获取现货周期数据(周/月/季/年)
-func (r *Ermcp3ReportAreaSpotPL) GetDataEx() (interface{}, error) {
-	sData := make([]Ermcp3ReportAreaSpotPL, 0)
+// GetDataEx 获取现货报表(日/月/周/季/年)
+func (r *Ermcp3AreaSpotPLReport) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3AreaSpotPLReport, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].calc()
+	}
+	return sData, err
+}
+
+// Ermcp3FinanceReport 财务报表
+type Ermcp3FinanceReport struct {
+	RECKONDATE             string  `json:"reckondate"  xorm:"RECKONDATE"`                         // 日照时期(yyyyMMdd)
+	CYCLETIME              string  `json:"cycletime"  xorm:"CYCLETIME"`                           // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETYPE              int32   `json:"cycletype"  xorm:"CYCLETYPE"`                           // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+	SELLPREINVOICEDAMOUNT  float64 `json:"sellpreinvoicedamount"  xorm:"SELLPREINVOICEDAMOUNT"`   // 销售预开票额(预开票额)
+	SELLUNINVOICEDAMOUNT   float64 `json:"selluninvoicedamount"  xorm:"SELLUNINVOICEDAMOUNT"`     // 销售应开票额(应开票额)
+	TODAYRECEIVESUM        float64 `json:"todayreceivesum"  xorm:"TODAYRECEIVESUM"`               // 今收款合计
+	TODAYPAYSUM            float64 `json:"todaypaysum"  xorm:"TODAYPAYSUM"`                       // 今付款合计
+	UPDATETIME             string  `json:"updatetime"  xorm:"UPDATETIME"`                         // 更新时间
+	AREAUSERID             int64   `json:"areauserid"  xorm:"AREAUSERID"`                         // 所属机构\交易用户ID
+	CURRENCYID             int32   `json:"currencyid"  xorm:"CURRENCYID"`                         // 结算币种ID
+	BIZTYPE                int32   `json:"biztype"  xorm:"BIZTYPE"`                               // 业务类型 - 1:套保 2:套利
+	BUYTODAYSETTLEAMOUNT   float64 `json:"buytodaysettleamount"  xorm:"BUYTODAYSETTLEAMOUNT"`     // 采购今付款额(今付货款额)
+	SELLTODAYSETTLEAMOUNT  float64 `json:"selltodaysettleamount"  xorm:"SELLTODAYSETTLEAMOUNT"`   // 销售今收款额(今收货款额)
+	BUYTODAYREFUNDAMOUNT   float64 `json:"buytodayrefundamount"  xorm:"BUYTODAYREFUNDAMOUNT"`     // 采购今收退款额(今收退款额)
+	SELLTODAYREFUNDAMOUNT  float64 `json:"selltodayrefundamount"  xorm:"SELLTODAYREFUNDAMOUNT"`   // 销售今付退款额(今付退款额)
+	SELLTODAYINVOICEAMOUNT float64 `json:"selltodayinvoiceamount"  xorm:"SELLTODAYINVOICEAMOUNT"` // 销售今开票额(今开票额)
+	BUYTODAYINVOICEAMOUNT  float64 `json:"buytodayinvoiceamount"  xorm:"BUYTODAYINVOICEAMOUNT"`   // 采购今收票额(今收票额)
+	BUYPREPAIDAMOUNT       float64 `json:"buyprepaidamount"  xorm:"BUYPREPAIDAMOUNT"`             // 采购预付款额(预付货款额)
+	BUYUNPAIDAMOUNT        float64 `json:"buyunpaidamount"  xorm:"BUYUNPAIDAMOUNT"`               // 采购应付款额(应付货款额)
+	BUYPREINVOICEDAMOUNT   float64 `json:"buypreinvoicedamount"  xorm:"BUYPREINVOICEDAMOUNT"`     // 采购预收票额(预收票额)
+	BUYUNINVOICEDAMOUNT    float64 `json:"buyuninvoicedamount"  xorm:"BUYUNINVOICEDAMOUNT"`       // 采购应收票额(应收票额)
+	SELLPREPAIDAMOUNT      float64 `json:"sellprepaidamount"  xorm:"SELLPREPAIDAMOUNT"`           // 销售预收款额(预收货款额)
+	SELLUNPAIDAMOUNT       float64 `json:"sellunpaidamount"  xorm:"SELLUNPAIDAMOUNT"`             // 销售应收款额(应收货款额)
+
+	CURRENCYNAME string `json:"currencyname"` // 币种名称
+	QueryType    int32  `json:"-"`            // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	BeginDate    string `json:"-"`            // 开始交易日
+	EndDate      string `json:"-"`            // 结束交易日
+}
+
+func (r *Ermcp3FinanceReport) calc() {
+	r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
+}
+
+func (r *Ermcp3FinanceReport) buildSql() string {
+	if r.QueryType == 1 || r.QueryType == 3 {
+		return r.buildSqlDay()
+	}
+	return r.buildSqlCycle()
+}
+
+// 日报表查询语句
+func (r *Ermcp3FinanceReport) buildSqlDay() string {
+	var sqlId utils.SQLVal = "SELECT t.SELLPREINVOICEDAMOUNT," +
+		"       t.SELLUNINVOICEDAMOUNT," +
+		"       t.TODAYRECEIVESUM," +
+		"       t.TODAYPAYSUM," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       t.RECKONDATE," +
+		"       t.AREAUSERID," +
+		"       t.CURRENCYID," +
+		"       t.BIZTYPE," +
+		"       t.BUYTODAYSETTLEAMOUNT," +
+		"       t.BUYTODAYREFUNDAMOUNT," +
+		"       t.BUYPREPAIDAMOUNT," +
+		"       t.BUYUNPAIDAMOUNT," +
+		"       t.BUYTODAYINVOICEAMOUNT," +
+		"       t.BUYPREINVOICEDAMOUNT," +
+		"       t.BUYUNINVOICEDAMOUNT," +
+		"       t.SELLTODAYSETTLEAMOUNT," +
+		"       t.SELLTODAYREFUNDAMOUNT," +
+		"       t.SELLPREPAIDAMOUNT," +
+		"       t.SELLUNPAIDAMOUNT," +
+		"       t.SELLTODAYINVOICEAMOUNT" +
+		"  FROM RECKON_ERMCP_AREAFINANCE t" +
+		" 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))
+	}
+	return sqlId.String()
+}
+
+// 周期报表查询语句
+func (r *Ermcp3FinanceReport) buildSqlCycle() string {
+	var sqlId utils.SQLVal = "SELECT t.SELLPREINVOICEDAMOUNT," +
+		"       t.SELLUNINVOICEDAMOUNT," +
+		"       t.TODAYRECEIVESUM," +
+		"       t.TODAYPAYSUM," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       t.CYCLETIME," +
+		"       t.CYCLETYPE," +
+		"       t.AREAUSERID," +
+		"       t.CURRENCYID," +
+		"       t.BIZTYPE," +
+		"       t.BUYTODAYSETTLEAMOUNT," +
+		"       t.BUYTODAYREFUNDAMOUNT," +
+		"       t.BUYPREPAIDAMOUNT," +
+		"       t.BUYUNPAIDAMOUNT," +
+		"       t.BUYTODAYINVOICEAMOUNT," +
+		"       t.BUYPREINVOICEDAMOUNT," +
+		"       t.BUYUNINVOICEDAMOUNT," +
+		"       t.SELLTODAYSETTLEAMOUNT," +
+		"       t.SELLTODAYREFUNDAMOUNT," +
+		"       t.SELLPREPAIDAMOUNT," +
+		"       t.SELLUNPAIDAMOUNT," +
+		"       t.SELLTODAYINVOICEAMOUNT" +
+		"  FROM REPORT_ERMCP_AREAFINANCE t" +
+		" WHERE 1 = 1"
+	sqlId.And("t.AREAUSERID", r.AREAUSERID)
+	sqlId.And("t.CYCLETYPE", r.CYCLETYPE)
+	sqlId.And("t.CYCLETIME", r.CYCLETIME)
+	return sqlId.String()
+}
+
+// GetDataEx 获取财务报表
+func (r *Ermcp3FinanceReport) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3FinanceReport, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].calc()
+	}
+	return sData, err
+}
+
+// Ermcp3AreaStockReport 库存报表
+type Ermcp3AreaStockReport struct {
+	RECKONDATE         string  `json:"reckondate"  xorm:"RECKONDATE"`                   // 日照时期(yyyyMMdd)
+	CYCLETIME          string  `json:"cycletime"  xorm:"CYCLETIME"`                     // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETYPE          int32   `json:"cycletype"  xorm:"CYCLETYPE"`                     // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+	USERID             int64   `json:"userid"  xorm:"'USERID'"`                         // 机构ID
+	WRSTANDARDID       int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`             // 品类ID
+	SPOTGOODSBRANDID   int32   `json:"spotgoodsbrandid"  xorm:"'SPOTGOODSBRANDID'"`     // 现货品牌ID
+	WAREHOUSEINFOID    string  `json:"warehouseinfoid"  xorm:"'WAREHOUSEINFOID'"`       // 仓库ID
+	ORISTOCK           float64 `json:"oristock"  xorm:"'ORISTOCK'"`                     // 期初库存量
+	CURSTOCK           float64 `json:"curstock"  xorm:"'CURSTOCK'"`                     // 期末库存量
+	TODAYBUYINQTY      float64 `json:"todaybuyinqty"  xorm:"'TODAYBUYINQTY'"`           // 今采购入库量
+	TODAYPRODUCEINQTY  float64 `json:"todayproduceinqty"  xorm:"'TODAYPRODUCEINQTY'"`   // 今内部入库量
+	TODAYSELLOUTQTY    float64 `json:"todayselloutqty"  xorm:"'TODAYSELLOUTQTY'"`       // 今销售出库量
+	TODAYPRODUCEOUTQTY float64 `json:"todayproduceoutqty"  xorm:"'TODAYPRODUCEOUTQTY'"` // 今内部出库量
+	UPDATETIME         string  `json:"updatetime"  xorm:"'UPDATETIME'"`                 // 更新时间
+	WRSTANDARDNAME     string  `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"`         // 品类名称
+	WRSTANDARDCODE     string  `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"`         // 品类代码
+	UNITID             int32   `json:"unitid"  xorm:"'UNITID'"`                         // 品类单位id
+	BRANDNAME          string  `json:"brandname"  xorm:"'BRANDNAME'"`                   // 品牌名称
+	WAREHOUSENAME      string  `json:"warehousename"  xorm:"'WAREHOUSENAME'"`           // 仓库名称
+	WAREHOUSECODE      string  `json:"warehousecode"  xorm:"'WAREHOUSECODE'"`           // 仓库代码
+	WAREHOUSETYPE      int32   `json:"warehousetype"  xorm:"'WAREHOUSETYPE'"`           // 仓库类型 - 1 厂库  2 自有库  3 合作库
+	USERNAME           string  `json:"username"`                                        // 机构名称
+	ENUMDICNAME        string  `json:"enumdicname"`                                     // 单位名称
+	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
+
+	UNBUYINQTY   float64 `json:"unbuyinqty"`   // 采购未入库量(数据库未找到相关字段?)
+	UNSELLOUTQTY float64 `json:"unselloutqty"` // 销售未出库量(数据库未找到相关字段?)
+	DiffQty      float64 `json:"diffqty"`      // 库存变化量 = 期末 - 期初
+	QueryType    int32   `json:"-"`            // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	BeginDate    string  `json:"-"`            // 开始交易日
+	EndDate      string  `json:"-"`            // 结束交易日
+}
+
+func (r *Ermcp3AreaStockReport) calc() {
+	r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
+	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
+	r.DiffQty = r.CURSTOCK - r.ORISTOCK
+}
+
+func (r *Ermcp3AreaStockReport) buildSql() string {
+	if r.QueryType == 1 || r.QueryType == 3 {
+		return r.buildSqlDay()
+	}
+	return r.buildSqlCycle()
+}
+
+func (r *Ermcp3AreaStockReport) buildSqlDay() string {
+	var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
+		"       t.TODAYPRODUCEINQTY," +
+		"       t.reckondate," +
+		"       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," +
+		"       w.wrstandardname," +
+		"       w.wrstandardcode," +
+		"       w.unitid," +
+		"       gb.dgfactoryitemvalue brandname," +
+		"       h.warehousename," +
+		"       h.warehousecode," +
+		"       h.warehousetype," +
+		"       g.deliverygoodsid," +
+		"       g.deliverygoodscode," +
+		"       g.deliverygoodsname," +
+		"       g.goodsunitid" +
+		"  FROM RECKON_ERMCP_AREASTOCK t" +
+		"  LEFT JOIN WRSTANDARD w" +
+		"    on t.wrstandardid = w.wrstandardid" +
+		"  LEFT JOIN dgfactoryitem gb" +
+		"    on t.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)
+	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))
+	}
+
+	// 现货商品id
+	sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
+	// 品类id
+	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," +
+		"       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" +
+		"  LEFT JOIN WRSTANDARD w" +
+		"    on t.wrstandardid = w.wrstandardid" +
+		"  LEFT JOIN dgfactoryitem gb" +
+		"    on t.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)
+	// 现货商品id
+	sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
+	// 品类id
+	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()
+}
+
+// GetDataEx 查询库存报表
+func (r *Ermcp3AreaStockReport) GetDataEx() (interface{}, error) {
+	sData := make([]ErmcpAreaStockReport, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	if err == nil {
+		for i := range sData {
+			sData[i].calc()
+		}
+	}
+	return sData, err
+}
+
+// Ermcp3ArealSumPL 损益汇总表
+type Ermcp3ArealSumPL struct {
+	RECKONDATE     string  `json:"reckondate"  xorm:"RECKONDATE"`         // 日照时期(yyyyMMdd)
+	CYCLETIME      string  `json:"cycletime"  xorm:"'CYCLETIME'"`         // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	CYCLETYPE      int32   `json:"cycletype"  xorm:"'CYCLETYPE'"`         // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+	AREAUSERID     int64   `json:"areauserid"  xorm:"AREAUSERID"`         // 所属机构\交易用户ID
+	MIDDLEGOODSID  int64   `json:"middlegoodsid"  xorm:"MIDDLEGOODSID"`   // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
+	CURRENCYID     int32   `json:"currencyid"  xorm:"CURRENCYID"`         // 结算币种ID
+	SPOTACTUALPL   float64 `json:"spotactualpl"  xorm:"SPOTACTUALPL"`     // 现货损益
+	SPOTFLOATPL    float64 `json:"spotfloatpl"  xorm:"SPOTFLOATPL"`       // 现货浮动损益
+	FUTUREACTUALPL float64 `json:"futureactualpl"  xorm:"FUTUREACTUALPL"` // 期货损益
+	FUTUREFLOATPL  float64 `json:"futurefloatpl"  xorm:"FUTUREFLOATPL"`   // 期货浮动损益
+	SUMACTUALPL    float64 `json:"sumactualpl"  xorm:"SUMACTUALPL"`       // 实际损益 = (ActualPL + FutureActualPL)
+	SUMPL          float64 `json:"sumpl"  xorm:"'SUMPL'"`                 // 汇总损益
+	UPDATETIME     string  `json:"updatetime"  xorm:"UPDATETIME"`         // 更新时间
+
+	CURRENCYNAME string `json:"currencyname"` // 币种名称
+	QueryType    int32  `json:"-"`            // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	BeginDate    string `json:"-"`            // 开始交易日
+	EndDate      string `json:"-"`            // 结束交易日
+}
+
+func (r *Ermcp3ArealSumPL) calc() {
+	r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
+}
+
+func (r *Ermcp3ArealSumPL) buildSql() string {
+	if r.QueryType == 1 || r.QueryType == 3 {
+		return r.buildSqlDay()
+	}
+	return r.buildSqlCycle()
+}
+
+func (r *Ermcp3ArealSumPL) buildSqlDay() string {
+	var sqlId utils.SQLVal = "SELECT t.RECKONDATE," +
+		"       t.AREAUSERID," +
+		"       t.MIDDLEGOODSID," +
+		"       t.CURRENCYID," +
+		"       t.SPOTACTUALPL," +
+		"       t.SPOTFLOATPL," +
+		"       t.FUTUREACTUALPL," +
+		"       t.FUTUREFLOATPL," +
+		"       t.SUMACTUALPL," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
+		"  FROM RECKON_ERMCP_AREASUMPL t" +
+		" WHERE 1 = 1"
+	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))
+	}
+	return sqlId.String()
+}
+
+func (r *Ermcp3ArealSumPL) buildSqlCycle() string {
+	var sqlId utils.SQLVal = "SELECT t.AREAUSERID," +
+		"       t.CYCLETIME," +
+		"       t.CYCLETYPE," +
+		"       t.MIDDLEGOODSID," +
+		"       t.CURRENCYID," +
+		"       t.SPOTACTUALPL," +
+		"       t.SPOTFLOATPL," +
+		"       t.FUTUREACTUALPL," +
+		"       t.FUTUREFLOATPL," +
+		"       t.SUMACTUALPL," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
+		"  FROM REPORT_ERMCP_AREASUMPL t" +
+		" WHERE 1 = 1"
+	sqlId.And("t.cycletype", r.CYCLETYPE)
+	sqlId.And("t.cycletime", r.CYCLETIME)
+	return sqlId.String()
+}
+
+// GetDataEx 获取损益汇总表
+func (r *Ermcp3ArealSumPL) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3ArealSumPL, 0)
 	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
 	for i := range sData {
 		sData[i].calc()

+ 3 - 1
routers/router.go

@@ -420,7 +420,6 @@ func InitRouter() *gin.Engine {
 		ermcp3R.GET("/QueryAreaStockApply", ermcp3.QueryAreaStockApply)
 		ermcp3R.GET("/QueryAreaStock", ermcp3.QueryAreaStock)
 		ermcp3R.GET("/QueryAreaStockApplySum", ermcp3.QueryAreaStockApplySum)
-		ermcp3R.GET("/QueryAreaStockReport", ermcp3.QueryAreaStockReport)
 		ermcp3R.GET("/QueryAreaStockReportDetail", ermcp3.QueryAreaStockReportDetail)
 		ermcp3R.GET("/QuerySpotGoodsPrice", ermcp3.QuerySpotGoodsPrice)
 		ermcp3R.GET("/QuerySpotGoodsPriceLog", ermcp3.QuerySpotGoodsPriceLog)
@@ -439,6 +438,9 @@ func InitRouter() *gin.Engine {
 		ermcp3R.GET("/QryAreaExpourseReport", ermcp3.QryAreaExpourseReport)
 		ermcp3R.GET("/QryAreaExpourseContractDetail", ermcp3.QryAreaExpourseContractDetail)
 		ermcp3R.GET("/QryAreaExpourseHedgeplanDetail", ermcp3.QryAreaExpourseHedgeplanDetail)
+		ermcp3R.GET("/QryAreaStockReport", ermcp3.QryAreaStockReport)
+		ermcp3R.GET("/QryFinanceReport", ermcp3.QryFinanceReport)
+		ermcp3R.GET("/QryAreaSumPL", ermcp3.QryAreaSumPL)
 	}
 
 	return r

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.