|
|
@@ -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
|
|
|
+}
|