/** * @Author: zou.yingbin * @Create : 2021/1/26 13:42 * @Modify : 2021/1/26 13:42 */ package models import ( "fmt" "mtp2_if/db" "mtp2_if/logger" "mtp2_if/mtpcache" ) // 套保品种 type ErmcpMiddleGoodsModel struct { MIDDLEGOODSID uint32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID(SEQ_ERMS_MIDDLEGOODS) MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称 MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码 GOODSUNITID int32 `json:"-" xorm:"'GOODSUNITID'"` // 单位ID RELATEDGOODSID int32 `json:"relatedgoodsid" xorm:"'RELATEDGOODSID'"` // 关联交易商品ID EVALUATERATIO float64 `json:"evaluateratio" xorm:"'EVALUATERATIO'"` // 估价系数 QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 数量小数位 RELATEDGOODSTYPE int32 `json:"relatedgoodstype" xorm:"'RELATEDGOODSTYPE'"` // 关联商品类型 - 1:期货合约 2:现货品种 NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 套保比率 AREAUSERID uint32 `json:"areauserid" xorm:"'AREAUSERID'"` // 机构用户ID GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 关联期货品种ID ISVALID int32 `json:"isvalid" xorm:"'ISVALID'"` // 状态 0-无效(停用) 1-有效(正常) MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间 ENUMDICNAME string `json:"enumdicname"` // 单位名称 } func (r *ErmcpMiddleGoodsModel) Calc() { r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID) } // 获取套保品种数据 func (r *ErmcpMiddleGoodsModel) GetData() ([]interface{}, error) { sData := make([]ErmcpMiddleGoodsModel, 0) if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil { logger.GetLogger().Error(err) return nil, err } iData := make([]interface{}, 0) for i := range sData { iData = append(iData, &sData[i]) } return iData, nil } // 获取套保品种数据2 func (r *ErmcpMiddleGoodsModel) GetData2() ([]ErmcpMiddleGoodsModel, error) { sData := make([]ErmcpMiddleGoodsModel, 0) if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil { logger.GetLogger().Error(err) return nil, err } for i := range sData { sData[i].Calc() } return sData, nil } func (r *ErmcpMiddleGoodsModel) buildSql() string { sqlId := "select MIDDLEGOODSID," + " MIDDLEGOODSNAME," + " MIDDLEGOODSCODE," + " GOODSUNITID," + " RELATEDGOODSID," + " EVALUATERATIO," + " QTYDECIMALPLACE," + " RELATEDGOODSTYPE," + " NEEDHEDGERATIO," + " AREAUSERID," + " GOODSGROUPID," + " to_char(MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," + " ISVALID" + " from erms_middlegoods t" + " where 1=1 " if r.AREAUSERID > 0 { sqlId = sqlId + fmt.Sprintf(" and AREAUSERID = %v", r.AREAUSERID) } if r.ISVALID >= 0{ sqlId = sqlId + fmt.Sprintf(" and ISVALID=%v", r.ISVALID) } return sqlId } /////////////////////////////// // 期货品种折算配置表 type GoodsGroupConvert struct { Middlegoodsid uint32 `json:"middlegoodsid" xorm:"'Middlegoodsid'"` // 套保品种ID Convertratio float64 `json:"convertratio" xorm:"'Convertratio'"` // 折算系数 Goodsgroupid int32 `json:"goodsgroupid" xorm:"'Goodsgroupid'"` // 期货品种ID Goodsgroupname string `json:"goodsgroupname" xorm:"'Goodsgroupname'"` // 期货品种名称 Outergroupcode string `json:"outergroupcode" xorm:"'Outergroupcode'"` // 期货品种代码 } func (r *GoodsGroupConvert) buildSql() string { sqlId := "select t.middlegoodsid," + " t.convertratio," + " t.goodsgroupid," + " g.goodsgroupname," + " g.outergroupcode" + " from erms_goodsgroupconvert t" + " left join goodsgroup g" + " on t.goodsgroupid = g.goodsgroupid" + " where 1=1" if r.Middlegoodsid > 0 { sqlId = sqlId + fmt.Sprintf(" and Middlegoodsid=%v", r.Middlegoodsid) } return sqlId } // 获取期货品种配置详情 func (r *GoodsGroupConvert) GetData() ([]GoodsGroupConvert, error) { sData := make([]GoodsGroupConvert, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) return sData, err } // 套保品种详情 type ErmcpMiddleGoodsDetail struct { Mg ErmcpMiddleGoodsModel // 套保品种基本信息 CvList []GoodsGroupConvert // 期货品种折算列表 } // 获取套保品种详情 func (r *ErmcpMiddleGoodsDetail) GetData() (ErmcpMiddleGoodsDetail, error) { // 查基本信息 m := ErmcpMiddleGoodsModel{AREAUSERID: r.Mg.AREAUSERID, MIDDLEGOODSID: r.Mg.MIDDLEGOODSID, ISVALID: -1} d, err := m.GetData2() if err != nil || len(d) == 0 { return ErmcpMiddleGoodsDetail{}, fmt.Errorf("no record") } rsp := ErmcpMiddleGoodsDetail{Mg: d[0]} // 查折算表 md := GoodsGroupConvert{Middlegoodsid: r.Mg.MIDDLEGOODSID} if val, err := md.GetData(); err == nil { rsp.CvList = val } return rsp, nil }