|
|
@@ -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()
|