Parcourir la source

期货报表(未完成,定义了结构体等)

zou.yingbin il y a 4 ans
Parent
commit
04e0e2b733
1 fichiers modifiés avec 293 ajouts et 1 suppressions
  1. 293 1
      models/ermcp3Report.go

+ 293 - 1
models/ermcp3Report.go

@@ -1155,7 +1155,7 @@ type Ermcp3FinanceReport struct {
 	BRANDNAME              string  `json:"brandname"  xorm:"'BRANDNAME'"`                         // 品牌名称
 
 	CURRENCYNAME string `json:"currencyname"` // 币种名称
-	QueryType    int32  `json:"-"`            // 查询类型 1-日报表 2-周期报表 3-日报表(范围,[开始日期,结束日期])
+	QueryType    int32  `json:"-"`            // 查询类型 1-报表 2-报表明细
 	BeginDate    string `json:"begindate"`    // 开始交易日
 	EndDate      string `json:"enddate"`      // 结束交易日
 }
@@ -1794,3 +1794,295 @@ func (r *Ermcp3ArealSumPL) GetDataEx() (interface{}, error) {
 	}
 	return sData, err
 }
+
+// Ermcp3TaFutuReDataReport 期货报表
+type Ermcp3TaFutuReDataReport 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:全报表【原值】
+	ACCOUNTID              int64   `json:"accountid"  xorm:"ACCOUNTID"`                           // 交易账户
+	GOODSID                string  `json:"goodsid"  xorm:"GOODSID"`                               // 交易合约
+	BUYORSELL              int32   `json:"buyorsell"  xorm:"BUYORSELL"`                           // 持仓方向
+	CURRENCYID             string  `json:"currencyid"  xorm:"CURRENCYID"`                         // 结算币种ID
+	USERID                 int64   `json:"userid"  xorm:"USERID"`                                 // 账户所属用户ID
+	RELATEDUSERID          string  `json:"relateduserid"  xorm:"RELATEDUSERID"`                   // 账户关联用户ID
+	GOODSGROUPID           string  `json:"goodsgroupid"  xorm:"GOODSGROUPID"`                     // 交易品种
+	ORIHOLDQTY             float64 `json:"oriholdqty"  xorm:"ORIHOLDQTY"`                         // 期初持仓量
+	ORIOPENAMOUNT          float64 `json:"oriopenamount"  xorm:"ORIOPENAMOUNT"`                   // 期初开仓额
+	ORIHOLDAMOUNT          float64 `json:"oriholdamount"  xorm:"ORIHOLDAMOUNT"`                   // 期初持仓额
+	TODAYOPENQTY           float64 `json:"todayopenqty"  xorm:"TODAYOPENQTY"`                     // 今开仓量
+	TODAYOPENAMOUNT        float64 `json:"todayopenamount"  xorm:"TODAYOPENAMOUNT"`               // 今开仓额
+	TODAYCLOSEQTY          float64 `json:"todaycloseqty"  xorm:"TODAYCLOSEQTY"`                   // 今平仓量
+	TODAYCLOSEAMOUNT       float64 `json:"todaycloseamount"  xorm:"TODAYCLOSEAMOUNT"`             // 今平仓额
+	HOLDQTY                float64 `json:"holdqty"  xorm:"HOLDQTY"`                               // 期末持仓量
+	OPENAMOUNT             float64 `json:"openamount"  xorm:"OPENAMOUNT"`                         // 期末开仓额
+	HOLDAMOUNT             float64 `json:"holdamount"  xorm:"HOLDAMOUNT"`                         // 期末持仓额
+	RECKONPRICE            float64 `json:"reckonprice"  xorm:"RECKONPRICE"`                       // 结算价
+	RECKONHOLDAMOUNT       float64 `json:"reckonholdamount"  xorm:"RECKONHOLDAMOUNT"`             // 结算持仓额
+	CHARGE                 float64 `json:"charge"  xorm:"CHARGE"`                                 // 手续费
+	CLOSEPL                float64 `json:"closepl"  xorm:"CLOSEPL"`                               // 平仓损益
+	RECKONPL               float64 `json:"reckonpl"  xorm:"RECKONPL"`                             // 结算损益
+	LASTPRICE              float64 `json:"lastprice"  xorm:"LASTPRICE"`                           // 最新价
+	LASTHOLDAMOUNT         float64 `json:"lastholdamount"  xorm:"LASTHOLDAMOUNT"`                 // 当前持仓额
+	FLOATPL                float64 `json:"floatpl"  xorm:"FLOATPL"`                               // 浮动损益
+	GOODSGROUPSPOTQTY      float64 `json:"goodsgroupspotqty"  xorm:"GOODSGROUPSPOTQTY"`           // 交易品种期末量 (= 期末持仓量 * 合约乘数)
+	TODAYGOODSGROUPSPOTQTY float64 `json:"todaygoodsgroupspotqty"  xorm:"TODAYGOODSGROUPSPOTQTY"` // 交易品种变化量 (=(期末持仓量 - 期初持仓量)* 合约乘数)
+	MIDDLEGOODSQTY         float64 `json:"middlegoodsqty"  xorm:"MIDDLEGOODSQTY"`                 // 套保品种期末量 (=交易品种期末量 * 期货品种折算系数)
+	TODAYMIDDLEGOODSQTY    float64 `json:"todaymiddlegoodsqty"  xorm:"TODAYMIDDLEGOODSQTY"`       // 套保品种变化量 (= 交易品种变化量*期货品种折算系数)
+	RECKONPL2              float64 `json:"reckonpl2"  xorm:"RECKONPL2"`                           // 结算逐笔盈亏
+	OUTERGROUPCODE         string  `json:"outergroupcode"  xorm:"'OUTERGROUPCODE'"`               //  交易品种代码
+	GOODSGROUPNAME         string  `json:"goodsgroupname"  xorm:"'GOODSGROUPNAME'"`               // 交易品种名称
+	GOODSCODE              string  `json:"goodscode"  xorm:"'GOODSCODE'"`                         // 交易合约代码
+	GOODSNAME              string  `json:"goodsname"  xorm:"'GOODSNAME'"`                         // 交易合约名称
+	GOODUNITID             int32   `json:"goodunitid"  xorm:"'GOODUNITID'"`                       // 交易合约单位id
+	ACCOUNTNAME            string  `json:"accountname"  xorm:"'ACCOUNTNAME'"`                     // 交易账号名称
+
+	ENUMDICNAME string `json:"enumdicname"` // 单位名称(现货商品)
+	QueryType   int32  `json:"-"`           // 查询类型 1-报表 2-报表明细
+	BeginDate   string `json:"begindate"`   // 开始交易日
+	EndDate     string `json:"enddate"`     // 结束交易日
+}
+
+func (r *Ermcp3TaFutuReDataReport) calc() {
+
+}
+func (r *Ermcp3TaFutuReDataReport) userType() int32 {
+	var userType int32 = 2
+	areaUserId := mtpcache.GetAreaUserId(r.USERID, 0)
+	if areaUserId == r.USERID {
+		userType = 2
+	} else {
+		userType = 7
+	}
+	return userType
+}
+
+func (r *Ermcp3TaFutuReDataReport) buildSql() string {
+	userType := r.userType()
+	// 日报表
+	if r.QueryType == 1 && r.CYCLETYPE == 0 {
+		return r.buildSqlReckon(userType)
+	}
+	// 日报表明细
+	if r.QueryType == 2 && r.CYCLETYPE == 0 {
+		return r.buildSqlReckonDetail(userType)
+	}
+	return r.buildSqlReport(userType)
+}
+
+// buildSqlReckon 日照表
+func (r *Ermcp3TaFutuReDataReport) buildSqlReckon(userType int32) string {
+	var sqlId utils.SQLVal = "select a.*," +
+		"       gp.outergroupcode," +
+		"       gp.goodsgroupname," +
+		"       g.goodscode," +
+		"       g.goodsname," +
+		"       g.goodunitid" +
+		"  from (SELECT t.RECKONDATE," +
+		"               t.GOODSID," +
+		"               t.BUYORSELL," +
+		"               t.CURRENCYID," +
+		"               t.%v USERID," +
+		"               t.GOODSGROUPID," +
+		"               sum(t.ORIHOLDQTY) ORIHOLDQTY," +
+		"               sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
+		"               sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
+		"               sum(t.TODAYOPENQTY) TODAYOPENQTY," +
+		"               sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
+		"               sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
+		"               sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
+		"               sum(t.HOLDQTY) HOLDQTY," +
+		"               sum(t.OPENAMOUNT) OPENAMOUNT," +
+		"               sum(t.HOLDAMOUNT) HOLDAMOUNT," +
+		"               sum(t.RECKONPRICE) RECKONPRICE," +
+		"               sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
+		"               sum(t.CHARGE) CHARGE," +
+		"               sum(t.CLOSEPL) CLOSEPL," +
+		"               sum(t.RECKONPL) RECKONPL," +
+		"               sum(t.LASTPRICE) LASTPRICE," +
+		"               sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
+		"               sum(t.FLOATPL) FLOATPL," +
+		"               sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
+		"               sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
+		"               sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
+		"               sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
+		"               sum(t.Reckonpl2) RECKONPL2" +
+		"          FROM RECKON_ERMCP_TAFUTUREDATA t" +
+		"         WHERE 1 = 1 %v" +
+		"         GROUP BY t.RECKONDATE," +
+		"                  t.GOODSID," +
+		"                  t.BUYORSELL," +
+		"                  t.CURRENCYID," +
+		"                  t.%v," +
+		"                  t.GOODSGROUPID) a" +
+		"  left join goodsgroup gp" +
+		"    on a.goodsgroupid = gp.goodsgroupid" +
+		"  left join goods g" +
+		"    on a.goodsid = g.goodsid"
+	userId := "USERID"
+	var sqlParam utils.SQLVal
+	if userType == 2 {
+		sqlParam.AndEx("t.userid", r.USERID, userType == 2)
+		userId = "USERID"
+	} else if userType == 7 {
+		sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
+		userId = "RELATEDUSERID"
+	}
+	sqlParam.AndEx("t.reckondate", r.RECKONDATE, len(r.RECKONDATE) > 0)
+	if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
+		sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
+	}
+	sqlId.FormatParam(userId, sqlParam.String(), userId)
+	return sqlId.String()
+}
+
+// buildSqlReckon 日照表明细
+func (r *Ermcp3TaFutuReDataReport) buildSqlReckonDetail(userType int32) string {
+	var sqlId utils.SQLVal = "select a.*," +
+		"       gp.outergroupcode," +
+		"       gp.goodsgroupname," +
+		"       g.goodscode," +
+		"       g.goodsname," +
+		"       g.goodunitid," +
+		"       ta.accountname" +
+		"  from (SELECT t.reckondate," +
+		"               t.GOODSID," +
+		"               t.BUYORSELL," +
+		"               t.CURRENCYID," +
+		"               t.%v USERID," +
+		"               t.accountid," +
+		"               t.GOODSGROUPID," +
+		"               sum(t.ORIHOLDQTY) ORIHOLDQTY," +
+		"               sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
+		"               sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
+		"               sum(t.TODAYOPENQTY) TODAYOPENQTY," +
+		"               sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
+		"               sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
+		"               sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
+		"               sum(t.HOLDQTY) HOLDQTY," +
+		"               sum(t.OPENAMOUNT) OPENAMOUNT," +
+		"               sum(t.HOLDAMOUNT) HOLDAMOUNT," +
+		"               sum(t.RECKONPRICE) RECKONPRICE," +
+		"               sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
+		"               sum(t.CHARGE) CHARGE," +
+		"               sum(t.CLOSEPL) CLOSEPL," +
+		"               sum(t.RECKONPL) RECKONPL," +
+		"               sum(t.LASTPRICE) LASTPRICE," +
+		"               sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
+		"               sum(t.FLOATPL) FLOATPL," +
+		"               sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
+		"               sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
+		"               sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
+		"               sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
+		"               sum(t.Reckonpl2) RECKONPL2" +
+		"          FROM RECKON_ERMCP_TAFUTUREDATA t" +
+		"         WHERE 1 = 1 %v" +
+		"         GROUP BY t.reckondate," +
+		"                  t.GOODSID," +
+		"                  t.BUYORSELL," +
+		"                  t.CURRENCYID," +
+		"                  t.%v," +
+		"                  t.accountid," +
+		"                  t.GOODSGROUPID) a" +
+		"  left join goodsgroup gp" +
+		"    on a.goodsgroupid = gp.goodsgroupid" +
+		"  left join goods g" +
+		"    on a.goodsid = g.goodsid" +
+		"  left join taaccount ta on a.accountid = ta.accountid"
+	userId := "USERID"
+	var sqlParam utils.SQLVal
+	if userType == 2 {
+		sqlParam.AndEx("t.userid", r.USERID, userType == 2)
+		userId = "USERID"
+	} else if userType == 7 {
+		sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
+		userId = "RELATEDUSERID"
+	}
+	sqlParam.AndEx("t.reckondate", r.RECKONDATE, len(r.RECKONDATE) > 0)
+	if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
+		sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
+	}
+	sqlId.FormatParam(userId, sqlParam.String(), userId)
+	return sqlId.String()
+}
+
+// buildSqlReckon 报表表
+func (r *Ermcp3TaFutuReDataReport) buildSqlReport(userType int32) string {
+	var sqlId utils.SQLVal = "select a.*," +
+		"       gp.outergroupcode," +
+		"       gp.goodsgroupname," +
+		"       g.goodscode," +
+		"       g.goodsname," +
+		"       g.goodunitid" +
+		"  from (SELECT t.cycletype," +
+		"               t.cycletime," +
+		"               t.GOODSID," +
+		"               t.BUYORSELL," +
+		"               t.CURRENCYID," +
+		"               t.%v USERID," +
+		"               t.GOODSGROUPID," +
+		"               sum(t.ORIHOLDQTY) ORIHOLDQTY," +
+		"               sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
+		"               sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
+		"               sum(t.TODAYOPENQTY) TODAYOPENQTY," +
+		"               sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
+		"               sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
+		"               sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
+		"               sum(t.HOLDQTY) HOLDQTY," +
+		"               sum(t.OPENAMOUNT) OPENAMOUNT," +
+		"               sum(t.HOLDAMOUNT) HOLDAMOUNT," +
+		"               sum(t.RECKONPRICE) RECKONPRICE," +
+		"               sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
+		"               sum(t.CHARGE) CHARGE," +
+		"               sum(t.CLOSEPL) CLOSEPL," +
+		"               sum(t.RECKONPL) RECKONPL," +
+		"               sum(t.LASTPRICE) LASTPRICE," +
+		"               sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
+		"               sum(t.FLOATPL) FLOATPL," +
+		"               sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
+		"               sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
+		"               sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
+		"               sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
+		"               sum(t.Reckonpl2) RECKONPL2" +
+		"          FROM REPORT_ERMCP_TAFUTUREDATA t" +
+		"         WHERE 1 = 1 %v" +
+		"           and t.userid = 8888" +
+		"           and t.cycletype = 1" +
+		"           and t.cycletime = '202105'" +
+		"         GROUP BY t.cycletype," +
+		"                  t.cycletime," +
+		"                  t.GOODSID," +
+		"                  t.BUYORSELL," +
+		"                  t.CURRENCYID," +
+		"                  t.%v," +
+		"                  t.GOODSGROUPID) a" +
+		"  left join goodsgroup gp" +
+		"    on a.goodsgroupid = gp.goodsgroupid" +
+		"  left join goods g" +
+		"    on a.goodsid = g.goodsid"
+	userId := "USERID"
+	var sqlParam utils.SQLVal
+	if userType == 2 {
+		sqlParam.AndEx("t.userid", r.USERID, userType == 2)
+		userId = "USERID"
+	} else if userType == 7 {
+		sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
+		userId = "RELATEDUSERID"
+	}
+	sqlParam.And("t.cycletype", r.CYCLETYPE)
+	sqlParam.And("t.cycletime", r.CYCLETIME)
+	sqlId.FormatParam(userId, sqlParam.String(), userId)
+	return sqlId.String()
+}
+
+// GetDataEx 获取期货报表
+func (r *Ermcp3TaFutuReDataReport) GetDataEx() (interface{}, error) {
+	sData := make([]Ermcp3TaFutuReDataReport, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].calc()
+		sData[i].BeginDate = r.BeginDate
+		sData[i].EndDate = r.EndDate
+	}
+	return sData, err
+}