/** * @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" ) // ErmcpMiddleGoodsModel 套保品种 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:"goodsunitid" 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'"` // 套保比率 NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 套利比例 AREAUSERID int64 `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'"` // 修改时间 CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 修改时间 REMARK string `json:"remark" xorm:"'REMARK'"` // 备注 ENUMDICNAME string `json:"enumdicname"` // 单位名称 } func (r *ErmcpMiddleGoodsModel) Calc() { r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID) } // GetData 获取套保品种数据 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 } // GetData2 获取套保品种数据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," + " NEEDARBITRAGERATIO," + " AREAUSERID," + " GOODSGROUPID," + " to_char(MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," + " to_char(CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," + " ISVALID," + " REMARK" + " 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) } if r.MIDDLEGOODSID > 0 { sqlId = sqlId + fmt.Sprintf(" and MIDDLEGOODSID=%v", r.MIDDLEGOODSID) } sqlId += " order by t.createtime desc" return sqlId } // ErmcpMiddleGoodsDetail 套保品种详情 type ErmcpMiddleGoodsDetail struct { Mg ErmcpMiddleGoodsModel // 套保品种基本信息 CvList []ErmcpGGConvertCfg // 期货品种折算列表 WrcList []WRSConverTDetail // 现货品种列表(现货商品折算配置) } // GetData 获取套保品种详情 func (r *ErmcpMiddleGoodsDetail) GetData() ([]ErmcpMiddleGoodsDetail, error) { rsp := make([]ErmcpMiddleGoodsDetail, 0) // 查基本信息 m := ErmcpMiddleGoodsModel{AREAUSERID: r.Mg.AREAUSERID, MIDDLEGOODSID: r.Mg.MIDDLEGOODSID, ISVALID: -1} d, err := m.GetData2() if err != nil || len(d) == 0 { return rsp, fmt.Errorf("no record") } for i := range d { val := ErmcpMiddleGoodsDetail{Mg: d[i], CvList: make([]ErmcpGGConvertCfg, 0), WrcList: make([]WRSConverTDetail, 0), } rsp = append(rsp, val) } // 查折算表 md := ErmcpGGConvertCfg{} if ggc, err := md.GetData2(); err == nil { for i := range rsp { for k := range ggc { if rsp[i].Mg.GOODSGROUPID == ggc[k].Destgoodsgroupid { rsp[i].CvList = append(rsp[i].CvList, ggc[k]) } } } } // 查现货商品折算配置明细表 mWc := WRSConverTDetail{} if wc, err := mWc.GetData(); err == nil { for i := range rsp { for k := range wc { if int64(rsp[i].Mg.MIDDLEGOODSID) == wc[k].MIDDLEGOODSID { rsp[i].WrcList = append(rsp[i].WrcList, wc[k]) } } } } return rsp, nil } // ErmcpMiddleGoodsChangeLog 套保品种变更记录 type ErmcpMiddleGoodsChangeLog struct { LOGID int64 `json:"logid" xorm:"'LOGID'"` // 流水ID MIDDLEGOODSID int `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID CHANGELOGTYPE int32 `json:"changelogtype" xorm:"'CHANGELOGTYPE'"` // 变更流水类型 - 1:套保比率变更 BEFOREVALUE float64 `json:"beforevalue" xorm:"'BEFOREVALUE'"` // 变更前 AFTERVALUE float64 `json:"aftervalue" xorm:"'AFTERVALUE'"` // 变更后 LOGDATETIME string `json:"logdatetime" xorm:"'LOGDATETIME'"` // 流水日期 LOGREMARK string `json:"logremark" xorm:"'LOGREMARK'"` // 流水备注 HANDLESTATUS int32 `json:"handlestatus" xorm:"'HANDLESTATUS'"` // 处理状态 TRADEDATE string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd) UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间 APPLYSRC int32 `json:"applysrc" xorm:"'APPLYSRC'"` // 操作来源 - 1:管理端 2:终端 APPLYID int64 `json:"applyid" xorm:"'APPLYID'"` // 操作人 APPLYNAME string `json:"applyname"` // 操作人名称 } func (r *ErmcpMiddleGoodsChangeLog) buildSql() string { sqlId := "SELECT LOGID," + " MIDDLEGOODSID," + " CHANGELOGTYPE," + " BEFOREVALUE," + " AFTERVALUE," + " to_char(LOGDATETIME, 'yyyy-mm-dd hh24:mi:ss') LOGDATETIME," + " LOGREMARK," + " HANDLESTATUS," + " TRADEDATE," + " to_char(UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," + " APPLYSRC," + " APPLYID" + " FROM ermcp_mgchangelog" + " WHERE 1 = 1" if r.MIDDLEGOODSID > 0 { sqlId = sqlId + fmt.Sprintf(" and MIDDLEGOODSID=%v", r.MIDDLEGOODSID) } return sqlId } // Calc 处理要转换的数据 func (r *ErmcpMiddleGoodsChangeLog) Calc() { r.APPLYNAME = mtpcache.GetUserNameByUserId(r.APPLYID) if r.APPLYNAME == "" { // APPLYID 原来数据库存的是userid, 后来又改为loginid // 当为loginid时,获取logincode #2177 要求改为loginname r.APPLYNAME = mtpcache.GetLoginNameByLoginId(r.APPLYID) } } // GetDataEx 获取套保变更操作数据 func (r *ErmcpMiddleGoodsChangeLog) GetDataEx() (interface{}, error) { sData := make([]ErmcpMiddleGoodsChangeLog, 0) if err := db.GetEngine().SQL(r.buildSql()).Find(&sData); err != nil { return nil, err } for i := range sData { sData[i].Calc() } return sData, nil }