Browse Source

1.增加 查敞口报表(日/周/月)接口
2.出入库类型swag注释更改
3.查现货市价接口增加币种名称字段

zou.yingbin 4 years ago
parent
commit
bcc1fec913

+ 0 - 12
controllers/ermcp/qryReport.go

@@ -73,18 +73,6 @@ func QryReportMonthFinance(c *gin.Context) {
 	a.DoGetDataEx(&m)
 }
 
-// 敞口日报表
-type QryReportExposureDayRsp models.ErmcpReportDayExposure
-
-// QryReportDayExposure 查询敞口日报表(菜单:报表查询/敞口报表/敞口日报表)
-func QryReportDayExposure(c *gin.Context) {
-	a := app.GinUtils{Gin: app.Gin{C: c}}
-	req := QryReportDayReq{}
-	a.DoBindReq(&req)
-	m := models.ErmcpReportDayExposure{AREAUSERID: req.UserId, RECKONDATE: req.TradeDate}
-	a.DoGetDataEx(&m)
-}
-
 // 现货日报表
 type QryReportSpotDayRsp models.ErmcpReportDaySpot
 

+ 1 - 1
controllers/ermcp3/qryErmcp3.go

@@ -305,7 +305,7 @@ func QueryGoodsWrstandard(c *gin.Context) {
 // @Security ApiKeyAuth
 // @Param userid query int true "用户ID"
 // @Param deliverygoodsid query int false "现货商品ID"
-// @Param inouttype query string false "出入库类型(可多项,逗号隔开) 1:采购入库 2:销售出库 3:生产入库 4:生产出库"
+// @Param inouttype query string false "出入库类型(可多项,逗号隔开) 5:采购入库 6:销售出库 7:生产入库 8:生产出库"
 // @Param spotcontractid query int false "合同ID"
 // @Param wrstandardid query int false "品类ID"
 // @Param spotgoodsbrandid query int false "品牌ID"

+ 88 - 0
controllers/ermcp3/qryErmcp3Report.go

@@ -38,6 +38,47 @@ func (v QueryDate) IsNumberic(queryType int32) bool {
 	return true
 }
 
+// 检查周期类型、周期时间
+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)【原值】
+}
+
+func (r *CycleTypeCheck) Check() bool {
+	if r.CYCLETYPE < 1 || r.CYCLETYPE > 5 {
+		return false
+	}
+	nLen := len(r.CYCLETIME)
+	// 判断是否为数字
+	if _, err := strconv.ParseInt(r.CYCLETIME, 10, 32); err != nil {
+		return false
+	}
+	// 判断长度
+	switch r.CYCLETYPE {
+	case 1:
+		if nLen != 6 {
+			return false
+		}
+	case 2:
+		if nLen != 5 {
+			return false
+		}
+	case 3:
+		if nLen != 4 {
+			return false
+		}
+	case 4:
+		if nLen != 6 {
+			return false
+		}
+	case 5:
+		if r.CYCLETIME != "0" {
+			return false
+		}
+	}
+	return true
+}
+
 // @Summary 查询现货日报表详情(菜单:报表查询/现货报表/现货日报表详情)
 // @Produce json
 // @Security ApiKeyAuth
@@ -214,3 +255,50 @@ func QryReportAreaSpotPL(c *gin.Context) {
 		a.Gin.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
 	}
 }
+
+// QryReckonAreaExpourse
+// @Summary 查询敞口日报表(报表/敞口报表/日报表)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param tradedate query string true "交易日(YYYYMMDD)"
+// @Success 200 {array} models.Ermcp3ReckonExpourse
+// @Failure 500 {object} app.Response
+// @Router /Ermcp3/QryReckonAreaExpourse [get]
+// @Tags 企业风险管理v3(app)
+func QryReckonAreaExpourse(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := struct {
+		USERID    int64  `form:"userid"`                       // 用户id
+		TRADEDATE string `form:"tradedate" binding:"required"` // 交易日
+	}{}
+	a.DoBindReq(&req)
+	m := models.Ermcp3ReckonExpourse{AREAUSERID: req.USERID, RECKONDATE: req.TRADEDATE}
+	a.DoGetDataI(&m)
+}
+
+// QryReportAreaExpourse
+// @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)【原值】"
+// @Success 200 {array} models.Ermcp3ReportExpourse
+// @Failure 500 {object} app.Response
+// @Router /Ermcp3/QryReportAreaExpourse [get]
+// @Tags 企业风险管理v3(app)
+func QryReportAreaExpourse(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := struct {
+		USERID    int64  `form:"userid" binding:"required"`    // 用户id
+		CYCLETIME string `form:"cycletime" binding:"required"` // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+		CYCLETYPE int32  `form:"cycletype" binding:"required"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+	}{}
+	a.DoBindReq(&req)
+	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)
+}

File diff suppressed because it is too large
+ 2479 - 2156
docs/docs.go


File diff suppressed because it is too large
+ 2479 - 2156
docs/swagger.json


File diff suppressed because it is too large
+ 116 - 841
docs/swagger.yaml


+ 14 - 0
global/app/ginUtils.go

@@ -7,6 +7,7 @@
 package app
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"mtp2_if/global/e"
 	"mtp2_if/logger"
@@ -28,6 +29,11 @@ type ICalc interface {
 	Calc()
 }
 
+// Check 参数检查接口
+type ICheck interface {
+	Check() bool
+}
+
 // GinUtils 封装绑定和数据获取处理
 type GinUtils struct {
 	Gin
@@ -98,6 +104,14 @@ func (r *GinUtils) DoGetDataI(iObj IGetDataEx) {
 	}
 }
 
+// CheckParam 参数检查
+func (r *GinUtils) CheckParam(iObj ICheck) {
+	if iObj.Check() == 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}}

+ 4 - 2
models/ermcp3.go

@@ -1307,7 +1307,7 @@ func (r *Ermcp3Wrstandard) GetDataEx() (interface{}, error) {
 type Ermcp3AreaStockApply struct {
 	INOUTAPPLYID      string  `json:"inoutapplyid"  xorm:"'INOUTAPPLYID'"`           // 申请ID(607+Unix秒时间戳(10位)+xxxxxx)
 	USERID            int64   `json:"userid"  xorm:"'USERID'"`                       // 机构ID
-	INOUTTYPE         int32   `json:"inouttype"  xorm:"'INOUTTYPE'"`                 // 出入库类型 - 1:采购入库 2:销售出库 3:生产入库 4:生产出库
+	INOUTTYPE         int32   `json:"inouttype"  xorm:"'INOUTTYPE'"`                 // 出入库类型 - 5:采购入库 6:销售出库 7:生产入库 8:生产出库
 	WRSTANDARDID      int32   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`           // 品类ID
 	SPOTGOODSBRANDID  int32   `json:"spotgoodsbrandid"  xorm:"'SPOTGOODSBRANDID'"`   // 现货品牌ID
 	SPOTCONTRACTID    string  `json:"spotcontractid"  xorm:"'SPOTCONTRACTID'"`       // 关联现货合同ID
@@ -1753,7 +1753,7 @@ func (r *Ermcp3AreaStockReport) GetDataEx() (interface{}, error) {
 type Ermcp3SpotGoodsPrice struct {
 	WRSTANDARDID      int64   `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`           // 现货品类ID(通用则为0)
 	SPOTGOODSBRANDID  int32   `json:"spotgoodsbrandid"  xorm:"'SPOTGOODSBRANDID'"`   // 现货品牌ID(通用则为0, 不为0则须先有品类ID)
-	CURRENCYID        int64   `json:"currencyid"  xorm:"'CURRENCYID'"`               // 报价货币ID
+	CURRENCYID        int32   `json:"currencyid"  xorm:"'CURRENCYID'"`               // 报价货币ID
 	SPOTGOODSPRICE    float64 `json:"spotgoodsprice"  xorm:"'SPOTGOODSPRICE'"`       // 现货价格
 	TRADEDATE         string  `json:"tradedate"  xorm:"'TRADEDATE'"`                 // 交易日(yyyyMMdd)
 	OPERATESRC        int32   `json:"operatesrc"  xorm:"'OPERATESRC'"`               // 最后操作来源 - 1:管理端 2:终端
@@ -1773,6 +1773,7 @@ type Ermcp3SpotGoodsPrice struct {
 	OPERATORNAME  string `json:"operatorname"`  // 操作人名称
 	ENUMDICNAME   string `json:"enumdicname"`   // 现货商品单位名称
 	GBENUMDICNAME string `json:"gbenumdicname"` // 品类单位名称
+	CURRENCYNAME  string `json:"currencyname"`  // 币种名称
 }
 
 func (r *Ermcp3SpotGoodsPrice) calc() {
@@ -1783,6 +1784,7 @@ func (r *Ermcp3SpotGoodsPrice) calc() {
 	}
 	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
 	r.GBENUMDICNAME = mtpcache.GetEnumDicitemName(r.GMUNITID)
+	r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
 }
 
 func (r *Ermcp3SpotGoodsPrice) buildSql() string {

+ 277 - 0
models/ermcp3Report.go

@@ -568,3 +568,280 @@ func (r *Ermcp3ReportAreaSpotSub) GetDataEx() (interface{}, error) {
 	}
 	return sData, err
 }
+
+// Ermcp3ReckonExpourse 敞口日报表
+type Ermcp3ReckonExpourse struct {
+	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'"`   // 期初应套保总量
+	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)
+	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 *Ermcp3ReckonExpourse) 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
+}
+
+func (r *Ermcp3ReckonExpourse) buildSql() string {
+	var sqlId utils.SQLVal = "SELECT t.ORITOTALSPOTQTY," +
+		"       t.ORITOTALFUTUREQTY," +
+		"       t.ORITOTALEXPOSURE," +
+		"       t.ORINEEDHEDGEEXPOSOURE," +
+		"       t.ORIHEDGEQTY," +
+		"       t.ORIARBITRAGEQTY," +
+		"       t.ORINEEDHEDGEQTY," +
+		"       t.ORINEEDARBITRAGEQTY," +
+		"       t.ORITOTALNEEDHEDGEQTY," +
+		"       t.RECKONDATE," +
+		"       t.MIDDLEGOODSID," +
+		"       t.AREAUSERID," +
+		"       t.ACCOUNTID," +
+		"       t.ORIBUYPLANQTY," +
+		"       t.ORIBUYPRICEDQTY," +
+		"       t.ORISELLPLANQTY," +
+		"       t.ORISELLPRICEDQTY," +
+		"       t.ORIBUYFUTUREQTY," +
+		"       t.ORISELLFUTUREQTY," +
+		"       t.BUYPLANQTY," +
+		"       t.BUYPRICEDQTY," +
+		"       t.SELLPLANQTY," +
+		"       t.SELLPRICEDQTY," +
+		"       t.BUYFUTUREQTY," +
+		"       t.SELLFUTUREQTY," +
+		"       t.TOTALSPOTQTY," +
+		"       t.TOTALFUTUREQTY," +
+		"       t.TOTALEXPOSURE," +
+		"       t.TOTALHEDGERATIO," +
+		"       t.TOTALNEEDHEDGEQTY," +
+		"       t.NEEDHEDGEEXPOSOURE," +
+		"       t.NEEDHEDGERATIO," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       t.HEDGEQTY," +
+		"       t.ARBITRAGEQTY," +
+		"       t.NEEDHEDGEQTY," +
+		"       t.NEEDARBITRAGEQTY," +
+		"       g.middlegoodsname," +
+		"       g.middlegoodscode," +
+		"       g.goodsunitid unitid" +
+		"  FROM RECKON_ERMCP_AREAEXPOSURE t" +
+		"  LEFT JOIN ERMS_MIDDLEGOODS g" +
+		"    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()
+	}
+	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
+}
+
+func (r *Ermcp3ReportExpourse) buildSql() string {
+	var sqlId utils.SQLVal = "SELECT t.cycletime," +
+		"       t.cycletype," +
+		"       t.ORITOTALSPOTQTY," +
+		"       t.ORITOTALFUTUREQTY," +
+		"       t.ORITOTALEXPOSURE," +
+		"       t.ORINEEDHEDGEEXPOSOURE," +
+		"       t.ORIHEDGEQTY," +
+		"       t.ORIARBITRAGEQTY," +
+		"       t.ORINEEDHEDGEQTY," +
+		"       t.ORINEEDARBITRAGEQTY," +
+		"       t.ORITOTALNEEDHEDGEQTY," +
+		"       t.MIDDLEGOODSID," +
+		"       t.AREAUSERID," +
+		"       t.ACCOUNTID," +
+		"       t.ORIBUYPLANQTY," +
+		"       t.ORIBUYPRICEDQTY," +
+		"       t.ORISELLPLANQTY," +
+		"       t.ORISELLPRICEDQTY," +
+		"       t.ORIBUYFUTUREQTY," +
+		"       t.ORISELLFUTUREQTY," +
+		"       t.BUYPLANQTY," +
+		"       t.BUYPRICEDQTY," +
+		"       t.SELLPLANQTY," +
+		"       t.SELLPRICEDQTY," +
+		"       t.BUYFUTUREQTY," +
+		"       t.SELLFUTUREQTY," +
+		"       t.TOTALSPOTQTY," +
+		"       t.TOTALFUTUREQTY," +
+		"       t.TOTALEXPOSURE," +
+		"       t.TOTALHEDGERATIO," +
+		"       t.TOTALNEEDHEDGEQTY," +
+		"       t.NEEDHEDGEEXPOSOURE," +
+		"       t.NEEDHEDGERATIO," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
+		"       t.HEDGEQTY," +
+		"       t.ARBITRAGEQTY," +
+		"       t.NEEDHEDGEQTY," +
+		"       t.NEEDARBITRAGEQTY," +
+		"       g.middlegoodsname," +
+		"       g.middlegoodscode," +
+		"       g.goodsunitid unitid," +
+		"       g.needhedgeratio," +
+		"       g.needarbitrageratio" +
+		"  FROM REPORT_ERMCP_AREAEXPOSURE t" +
+		"  LEFT JOIN ERMS_MIDDLEGOODS g" +
+		"    on t.middlegoodsid = g.middlegoodsid" +
+		" 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 *Ermcp3ReportExpourse) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3ReportExpourse, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].calc()
+	}
+	return sData, err
+}

+ 0 - 39
models/ermcpAccMgr.go

@@ -489,18 +489,6 @@ func (r *ErmcpRole) GetData() ([]ErmcpRole, error) {
 	for i := range sData {
 		sData[i].calc()
 	}
-	/* 后期改动 无须增加固定角色
-	sDataEx := make([]ErmcpRole, 0)
-	// 添加固定角色22,23,24
-	sDataEx = append(sDataEx, ErmcpRole{AREAUSERID: r.AREAUSERID, ROLENAME: "业务员", AUTOID: 22,
-		ROLESTATUS: 1, ROLETYPE: 2, MODIFYTIME: "-", MODIFIERID: 1, MODIFIERNAME: "平台"})
-	sDataEx = append(sDataEx, ErmcpRole{AREAUSERID: r.AREAUSERID, ROLENAME: "跟单员", AUTOID: 23,
-		ROLESTATUS: 1, ROLETYPE: 2, MODIFYTIME: "-", MODIFIERID: 1, MODIFIERNAME: "平台"})
-	sDataEx = append(sDataEx, ErmcpRole{AREAUSERID: r.AREAUSERID, ROLENAME: "交易员", AUTOID: 24,
-		ROLESTATUS: 1, ROLETYPE: 2, MODIFYTIME: "-", MODIFIERID: 1, MODIFIERNAME: "平台"})
-	sDataEx = append(sDataEx, sData...)
-	return sDataEx, err
-	*/
 	return sData, err
 }
 
@@ -602,34 +590,7 @@ func (r *ErmcpRoleMenu) buildSql() string {
 
 // GetDataEx 查询角色菜单
 func (r *ErmcpRoleMenu) GetDataEx() (interface{}, error) {
-	// sData := make([]ErmcpRoleMenu, 0)
-	// err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
-	// for i := range sData {
-	// 	sData[i].calc()
-	// }
-	// 构建层级树
 	sDataEx := make([]ErmcpRoleMenuEx, 0)
-	// // 最多构建4层
-	// for level := int32(1); level <= 4; level++ {
-	// 	for _, v := range sData {
-	// 		if v.RESOURCELEVEL == level {
-	// 			val := ErmcpRoleMenuEx{Menu: v, SubMenu: make([]ErmcpRoleMenu, 0)}
-	// 			for _, v2 := range sData {
-	// 				// 获取子菜单
-	// 				if v2.ROLEID == v.ROLEID && v2.PARENTCODE == v.RESOURCECODE {
-	// 					val.SubMenu = append(val.SubMenu, v2)
-	// 				}
-	// 			}
-	// 			// 第一层固定要, 不管有没有子菜单
-	// 			if val.Menu.RESOURCELEVEL == 1 {
-	// 				sDataEx = append(sDataEx, val)
-	// 			} else if val.Menu.RESOURCELEVEL > 1 && len(val.SubMenu) > 0 {
-	// 				// 第二层开始,有子菜单内容的才要
-	// 				sDataEx = append(sDataEx, val)
-	// 			}
-	// 		}
-	// 	}
-	// }
 
 	// 获取所有菜单
 	sData := make([]ErmcpRoleMenu, 0)

+ 0 - 91
models/ermcpReport.go

@@ -299,97 +299,6 @@ func (r *ErmcpReportMonthFR) GetDataEx() (interface{}, error) {
 	return sData, err
 }
 
-// ErmcpReportDayExposure 敞口日报表
-type ErmcpReportDayExposure struct {
-	RECKONDATE            string  `json:"reckondate"  xorm:"'RECKONDATE'"`                       // 日照时期(yyyyMMdd)
-	MIDDLEGOODSID         int64   `json:"middlegoodsid"  xorm:"'MIDDLEGOODSID'"`                 // 套保品种ID
-	AREAUSERID            int64   `json:"areauserid"  xorm:"'AREAUSERID'"`                       // 所属机构
-	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'"`               // 应套保敞口比例
-	MIDDLEGOODSNAME       string  `json:"middlegoodsname"  xorm:"'MIDDLEGOODSNAME'"`             // 套保品种名称
-	MIDDLEGOODSCODE       string  `json:"middlegoodscode"  xorm:"'MIDDLEGOODSCODE'"`             // 套保品种代码
-	MIDDLEGOODSHEDGERATIO float64 `json:"middlegoodshedgeratio"  xorm:"'MIDDLEGOODSHEDGERATIO'"` // 应套保比例
-	GOODSUNITID           int32   `json:"-"  xorm:"'GOODSUNITID'"`                               // 套保商品单位id
-
-	ENUMDICNAME     string  `json:"enumdicname"`     // 单位名称
-	OriTotalSpotQty float64 `json:"oriTotalSpotQty"` // 期初现货数量=(期初销售计划数量-期初销售合同已定价数量)-(期初采购计划数量-期初采购合同已定价数量)
-	OriTotalFutuQty float64 `json:"oriTotalFutuQty"` // 期初期货数量=期初买入期货数量-期初卖出期货数量
-	DiffSpotQty     float64 `json:"diffSpotQty"`     // 今日变动量(现货) = 现货数量 - 期初现货数量
-	DiffFutuQty     float64 `json:"diffFutuQty"`     // 今日变动量(期货) = (买入 - 买入期初) - (卖出 - 卖出期初)
-}
-
-// Calc 数据处理
-func (r *ErmcpReportDayExposure) Calc() {
-	r.OriTotalSpotQty = (r.ORISELLPLANQTY - r.ORISELLPRICEDQTY) - (r.ORIBUYPLANQTY - r.ORIBUYPRICEDQTY)
-	r.OriTotalFutuQty = r.ORIBUYFUTUREQTY - r.ORISELLFUTUREQTY
-	r.DiffSpotQty = r.TOTALSPOTQTY - r.OriTotalSpotQty
-	r.DiffFutuQty = (r.BUYFUTUREQTY - r.ORIBUYFUTUREQTY) - (r.SELLFUTUREQTY - r.ORISELLFUTUREQTY)
-	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
-}
-
-func (r *ErmcpReportDayExposure) buildSql() string {
-	var sqlId utils.SQLVal = "SELECT t.RECKONDATE," +
-		"       t.MIDDLEGOODSID," +
-		"       t.AREAUSERID," +
-		"       t.ORIBUYPLANQTY," +
-		"       t.ORIBUYPRICEDQTY," +
-		"       t.ORISELLPLANQTY," +
-		"       t.ORISELLPRICEDQTY," +
-		"       t.ORIBUYFUTUREQTY," +
-		"       t.ORISELLFUTUREQTY," +
-		"       t.BUYPLANQTY," +
-		"       t.BUYPRICEDQTY," +
-		"       t.SELLPLANQTY," +
-		"       t.SELLPRICEDQTY," +
-		"       t.BUYFUTUREQTY," +
-		"       t.SELLFUTUREQTY," +
-		"       t.TOTALSPOTQTY," +
-		"       t.TOTALFUTUREQTY," +
-		"       t.TOTALEXPOSURE," +
-		"       t.TOTALHEDGERATIO," +
-		"       t.TOTALNEEDHEDGEQTY," +
-		"       t.NEEDHEDGEEXPOSOURE," +
-		"       t.NEEDHEDGERATIO," +
-		"       g.middlegoodsname," +
-		"       g.middlegoodscode," +
-		"       g.needhedgeratio MIDDLEGOODSHEDGERATIO," +
-		"       g.goodsunitid" +
-		"  FROM RECKON_ERMCP_AREAEXPOSURE t" +
-		"  left join ERMS_MIDDLEGOODS g" +
-		"    on t.middlegoodsid = g.middlegoodsid" +
-		" WHERE 1 = 1"
-	sqlId.And("t.AREAUSERID", r.AREAUSERID)
-	sqlId.And("t.RECKONDATE", r.RECKONDATE)
-	return sqlId.String()
-}
-
-// GetDataEx 获取敞口日报表
-func (r *ErmcpReportDayExposure) GetDataEx() (interface{}, error) {
-	sData := make([]ErmcpReportDayExposure, 0)
-	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
-	for i := range sData {
-		sData[i].Calc()
-	}
-	return sData, err
-}
-
 // ErmcpReportDaySpot 现货日报表
 type ErmcpReportDaySpot struct {
 	BUYPRICEDQTY       float64 `json:"-"  xorm:"'BUYPRICEDQTY'"`                        // 期末采购定价量

+ 2 - 1
routers/router.go

@@ -351,7 +351,6 @@ func InitRouter() *gin.Engine {
 		ermcpR.GET("/QryReportDayFinanceKx", ermcp.QryReportDayFinanceKx)
 		ermcpR.GET("/QryReportDayFinanceFp", ermcp.QryReportDayFinanceFp)
 		ermcpR.GET("/QryReportMonthFinance", ermcp.QryReportMonthFinance)
-		ermcpR.GET("/QryReportDayExposure", ermcp.QryReportDayExposure)
 		ermcpR.GET("/QryReportDaySpot", ermcp.QryReportDaySpot)
 		ermcpR.GET("/QryReportDaySpotDetail", ermcp.QryReportDaySpotDetail)
 		ermcpR.GET("/QryReportMonthSpot", ermcp.QryReportMonthSpot)
@@ -422,6 +421,8 @@ func InitRouter() *gin.Engine {
 		ermcp3R.GET("/QryReportMonthSpot", ermcp3.QryReportMonthSpot)
 		ermcp3R.GET("/QryReportMonthSpotDetail", ermcp3.QryReportMonthSpotDetail)
 		ermcp3R.GET("/QryReportAreaSpotPL", ermcp3.QryReportAreaSpotPL)
+		ermcp3R.GET("/QryReckonAreaExpourse", ermcp3.QryReckonAreaExpourse)
+		ermcp3R.GET("/QryReportAreaExpourse", ermcp3.QryReportAreaExpourse)
 		ermcp3R.GET("/QueryDGFactoryItem", ermcp3.QueryDGFactoryItem)
 		ermcp3R.GET("/QueryGoodsbrand", ermcp3.QueryGoodsbrand)
 		ermcp3R.GET("/QueryGoodsWrstandard", ermcp3.QueryGoodsWrstandard)

Some files were not shown because too many files changed in this diff