|
|
@@ -227,7 +227,7 @@ func (r *AreaSpotModel) buildSql() string {
|
|
|
" t.SELLPLANQTY," +
|
|
|
" t.SELLPRICEDQTY," +
|
|
|
" t.TOTALSPOTQTY," +
|
|
|
- " to_char(t.UPDATETIME,'yyyy-mm-dd hh24:mi:ss') UPDATETIME"+
|
|
|
+ " to_char(t.UPDATETIME,'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
|
|
|
" from ermcp_areaspot t" +
|
|
|
" left join wrstandard w" +
|
|
|
" on t.wrstandardid = w.wrstandardid" +
|
|
|
@@ -239,7 +239,7 @@ func (r *AreaSpotModel) buildSql() string {
|
|
|
func (r *AreaSpotModel) GetData() ([]AreaSpotModel, error) {
|
|
|
e := db.GetEngine()
|
|
|
sData := make([]AreaSpotModel, 0)
|
|
|
- if err := e.SQL(r.buildSql()).Find(&sData); err != nil{
|
|
|
+ if err := e.SQL(r.buildSql()).Find(&sData); err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
for i := range sData {
|
|
|
@@ -247,3 +247,148 @@ func (r *AreaSpotModel) GetData() ([]AreaSpotModel, error) {
|
|
|
}
|
|
|
return sData, nil
|
|
|
}
|
|
|
+
|
|
|
+// 现货头寸-现货明细
|
|
|
+type ErmcpAreaSpotDetailModel struct {
|
|
|
+ Relatedid string `json:"relatedid" xorm:"'relatedid'"` // 套保计划ID/现货合同ID
|
|
|
+ Relatedno string `json:"relatedno" xorm:"'relatedno'"` // 编号
|
|
|
+ LogType int32 `json:"logtype" xorm:"'logType'"` // 记录类型 1-套保 2-现货合同
|
|
|
+ Contracttype int32 `json:"contracttype" xorm:"'contracttype'"` // 合同类型 1-采购 -1-销售
|
|
|
+ Wrstandardname string `json:"wrstandardname" xorm:"'wrstandardname'"` // 现货商品名称
|
|
|
+ Wrstandardcode string `json:"wrstandardcode" xorm:"'wrstandardcode'"` // 现货商品代码
|
|
|
+ Qty float64 `json:"qty" xorm:"'qty'"` // 数量
|
|
|
+ Strtime string `json:"strtime" xorm:"'strtime'"` // 时间
|
|
|
+ Enumdicname string `json:"enumdicname"` // 现货商品单位名称
|
|
|
+ Recordname string `json:"recordname"` // 类型名称
|
|
|
+ Unitid int32 `json:"-" xorm:"'UNITID'"` // 单位ID
|
|
|
+ UserId int `json:"-"` // 所属用户ID
|
|
|
+ WrstandardId int32 `json:"-"` // 现货商品ID
|
|
|
+}
|
|
|
+
|
|
|
+// 组建查询SQL
|
|
|
+func (r *ErmcpAreaSpotDetailModel) buildSql() string {
|
|
|
+ str := "select to_char(t.hedgeplanid) relatedid," +
|
|
|
+ " t.hedgeplanno relatedno," +
|
|
|
+ " 1 as logType," +
|
|
|
+ " t.contracttype," +
|
|
|
+ " w.wrstandardname," +
|
|
|
+ " w.wrstandardcode," +
|
|
|
+ " t.planqty qty," +
|
|
|
+ " w.unitid," +
|
|
|
+ " to_char(t.createtime, 'yyyy-mm-dd hh:mi:ss') strtime" +
|
|
|
+ " from ermcp_hedgeplan t" +
|
|
|
+ " left join wrstandard w" +
|
|
|
+ " on t.wrstandardid = w.wrstandardid" +
|
|
|
+ " where t.hedgeplanstatus in (2, 3, 5)" +
|
|
|
+ " and t.areauserid = %v and t.wrstandardid = %v" +
|
|
|
+ " union all " +
|
|
|
+ "select to_char(t.spotcontractid)," +
|
|
|
+ " t.contractno," +
|
|
|
+ " 1 as logType," +
|
|
|
+ " t.contracttype," +
|
|
|
+ " w.wrstandardname," +
|
|
|
+ " w.wrstandardcode," +
|
|
|
+ " t.qty," +
|
|
|
+ " w.unitid," +
|
|
|
+ " to_char(t.createtime, 'yyyy-mm-dd hh:mi:ss') strtime" +
|
|
|
+ " from ermcp_spotcontract t" +
|
|
|
+ " left join wrstandard w" +
|
|
|
+ " on t.wrstandardid = w.wrstandardid" +
|
|
|
+ " where t.contractstatus in (2, 3, 5)" +
|
|
|
+ " and t.userid = %v and t.wrstandardid = %v"
|
|
|
+
|
|
|
+ return fmt.Sprintf(str, r.UserId, r.WrstandardId, r.UserId, r.WrstandardId)
|
|
|
+}
|
|
|
+
|
|
|
+// 现货头寸-明细:数据加工处理
|
|
|
+func (r *ErmcpAreaSpotDetailModel) Calc() {
|
|
|
+ var logTypeName, contractTypeName string
|
|
|
+ if r.LogType == 1 {
|
|
|
+ logTypeName = "计划"
|
|
|
+ } else {
|
|
|
+ logTypeName = "合同"
|
|
|
+ }
|
|
|
+
|
|
|
+ if r.Contracttype == 1 {
|
|
|
+ contractTypeName = "采购"
|
|
|
+ } else {
|
|
|
+ contractTypeName = "销售"
|
|
|
+ }
|
|
|
+
|
|
|
+ r.Recordname = contractTypeName + logTypeName
|
|
|
+ r.Enumdicname = mtpcache.GetEnumDicitemName(r.Unitid)
|
|
|
+}
|
|
|
+
|
|
|
+// 现货头寸-明细:从数据库中查询敞口现货头寸明细数据
|
|
|
+func (r *ErmcpAreaSpotDetailModel) GetData() ([]interface{}, error) {
|
|
|
+ sData := make([]ErmcpAreaSpotDetailModel, 0)
|
|
|
+ err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
|
|
|
+ iDatas := make([]interface{}, 0)
|
|
|
+ for i := range sData {
|
|
|
+ // 注意要传指针类型(&sData[i]),因为要接口转换
|
|
|
+ iDatas = append(iDatas, &sData[i])
|
|
|
+ }
|
|
|
+ return iDatas, err
|
|
|
+}
|
|
|
+
|
|
|
+///////////////////////////
|
|
|
+
|
|
|
+/*历史/历史敞口*/
|
|
|
+type ErmcpHisExposure struct {
|
|
|
+ RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 日照时期(yyyyMMdd)
|
|
|
+ MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID
|
|
|
+ AREAUSERID int32 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构
|
|
|
+ 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'"` // 套保品种代码
|
|
|
+ LastNum int32 `json:"-"` // 查询条数
|
|
|
+}
|
|
|
+
|
|
|
+// 历史分品种嵌套结构
|
|
|
+type ErmcpHisExposureS struct {
|
|
|
+ MIDDLEGOODSID int32 `json:"middlegoodsid"` // 套保品种ID
|
|
|
+ MIDDLEGOODSNAME string `json:"middlegoodsname"` // 套保品种名称
|
|
|
+ Data []ErmcpHisExposure `json:"data"` // 历史敞口
|
|
|
+}
|
|
|
+
|
|
|
+func (r *ErmcpHisExposure) buildSql() string {
|
|
|
+ str := "select *" +
|
|
|
+ " from (select t.RECKONDATE," +
|
|
|
+ " t.MIDDLEGOODSID," +
|
|
|
+ " t.AREAUSERID," +
|
|
|
+ " t.TOTALSPOTQTY," +
|
|
|
+ " t.TOTALFUTUREQTY," +
|
|
|
+ " t.TOTALEXPOSURE," +
|
|
|
+ " t.TOTALHEDGERATIO," +
|
|
|
+ " t.TOTALNEEDHEDGEQTY," +
|
|
|
+ " t.NEEDHEDGEEXPOSOURE," +
|
|
|
+ " t.NEEDHEDGERATIO," +
|
|
|
+ " g.MIDDLEGOODSNAME," +
|
|
|
+ " g.MIDDLEGOODSCODE" +
|
|
|
+ " from Reckon_ERMCP_AreaExposure t" +
|
|
|
+ " left join erms_middlegoods g" +
|
|
|
+ " on t.middlegoodsid = g.middlegoodsid" +
|
|
|
+ " where t.areauserid = %v" +
|
|
|
+ " order by t.middlegoodsid, t.reckondate desc) a" +
|
|
|
+ " where rownum <= %v"
|
|
|
+ if r.LastNum <= 0 {
|
|
|
+ r.LastNum = 100000 //限制最多查10W条
|
|
|
+ }
|
|
|
+ return fmt.Sprintf(str, r.AREAUSERID, r.LastNum)
|
|
|
+}
|
|
|
+
|
|
|
+// 获取历史敞口
|
|
|
+func (r *ErmcpHisExposure) GetData() ([]ErmcpHisExposure, error) {
|
|
|
+ e := db.GetEngine()
|
|
|
+ sData := make([]ErmcpHisExposure, 0)
|
|
|
+ if err := e.SQL(r.buildSql()).Find(&sData); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return sData, nil
|
|
|
+}
|