/** * @Author: zou.yingbin * @Create : 2021/1/5 15:15 * @Modify : 2021/1/5 15:15 */ // 企业风险管理 package models import ( "fmt" "mtp2_if/db" "mtp2_if/logger" ) // 风险管理合同 type ErmcpModel struct { SpotContractId int64 `json:"spotcontractid" xorm:"'SPOTCONTRACTID'"` // 合同ID AccountId string `json:"accountid" xorm:"'ACCOUNTID'"` // 账户ID AccountName string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 账户名称 DeliveryGoodsId int `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货商品ID DeliveryGoodsCode string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货商品代码 DeliveryGoodsName string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货商品名称 SpotGoodsdesc string `json:"spotgoodsdesc" xorm:"'SPOTGOODSDESC'"` // 商品型号(商品规格) GoodsId int `json:"goodsid" xorm:"'GOODSID'"` // 点价商品ID Goodscode string `json:"goodscode" xorm:"'GOODSCODE'"` // 点价商品代码 Pricemove float64 `json:"pricemove" xorm:"'PRICEMOVE'"` // 升贴水 Qty float64 `json:"qty" xorm:"'QTY'"` // 合同量 UnpricedQty float64 `json:"unpricedqty" xorm:"'UNPRICEDQTY'"` // 未定价量 PricedQty float64 `json:"pricedqty" xorm:"'PRICEDQTY'"` // 已定价量 UnsureQty float64 `json:"unsureqty" xorm:"'UNSUREQTY'"` // 未确定量 PayAmount float64 `json:"payamount" xorm:"'PAYAMOUNT'"` // 已收付额(收款或付款) UnpayAmount float64 `json:"unpayAmount" xorm:"'UNPAYAMOUNT'"` // 待支收额(支付或收款) InvoiceAmount float64 `json:"invoiceamount" xorm:"'INVOICEAMOUNT'"` // 已开票额 DaikaiAmount float64 `json:"daikaiAmount" xorm:"'DAIKAIAMOUNT'"` // 待开票额 StartDate string `json:"startdate" xorm:"'STARTDATE'"` // 点价开始日 EndDate string `json:"enddate" xorm:"'ENDDATE'"` // 点价结束日 DeliveryStartDate string `json:"deliverystartdate" xorm:"'DELIVERYSTARTDATE'"` // 交割开始日 DeliveryendDate string `json:"deliveryenddate" xorm:"'DELIVERYENDDATE'"` // 交割结束日 Convertfactor float64 `json:"convertfactor" xorm:"'CONVERTFACTOR'"` // 标仓系数 EnumdicName string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位名称 Contracctstatus uint `json:"contracctstatus" xorm:"'CONTRACCTSTATUS'"` // 合同状态- 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回 PriceType int `json:"pricetype" xorm:"'PRICETYPE'"` // 定价类型 - 1:一口价 2:点价 3:暂定价 ProductType int `json:"producttype" xorm:"'PRODUCTTYPE'"` // 产品类型 - 1:标准仓单 2:等标 3:非标 } // 组装查询的sql func (r *ErmcpModel) buildSql(nContractType, nQueryType int32) string { str := "select t.contractno," + " t.SpotContractId," + " t.deliverygoodsid," + " t.spotgoodsdesc," + " t.goodsid," + " t.pricemove," + " t.qty," + " t.qty - t.pricedqty unpricedqty," + " t.pricedqty," + " (case" + " when t.pricetype = 3 then" + " t.qty - t.RECKONREALQTY" + " else" + " t.qty - t.pricedqty" + " end) unsureqty," + " t.reckonedamount PayAmount," + " t.pricedamount + t.reckonadjustamount - t.RECKONEDAMOUNT unpayAmount," + " t.invoiceamount," + " (t.pricedamount + t.RECKONADJUSTAMOUNT + t.RECKONOTHERAMOUNT -" + " t.invoiceamount) as daikaiAmount," + " to_char(t.startdate, 'mmdd') startdate," + " to_char(t.enddate, 'mmdd') enddate," + " to_char(t.deliverystartdate, 'mmdd') deliverystartdate," + " to_char(t.deliveryenddate, 'mmdd') deliveryenddate," + " t.convertfactor," + " t.contracctstatus," + " t.pricetype," + " t.producttype," + " t.contracttype," + " to_char(ta.accountid) accountid," + " ta.accountname," + " g.deliverygoodscode," + " g.deliverygoodsname," + " g2.goodscode," + " e.enumdicname" + " from ermcp_spotcontract t" + " left join taaccount ta" + " on t.%v = ta.userid" + " left join deliverygoods g" + " on t.deliverygoodsid = g.deliverygoodsid" + " left join goods g2" + " on t.goodsid = g2.goodsid" + " left join wrstandard wr" + " on t.wrstandardid = wr.wrstandardid" + " left join enumdicitem e" + " on wr.unitid = e.enumitemname" + " and e.enumdiccode = 'goodsunit'" + " where t.contracctstatus in (%v)" + " and t.contracttype in (%v)" var status string if 0 == nQueryType { // 全部 status = "0,1,2,3,4,5,6" str = str + " order by t.audittime desc" } else if 1 == nQueryType { // 待点价 status = "2" str = str + " and t.qty - t.pricedqty > 0 " + "order by unpricedqty, t.audittime desc" } else { // 履约 status = "2" str = str + " order by t.audittime desc" } var usrId string switch nContractType { case 1: // 采购 usrId = "buyuserid" case -1: // 销售 usrId = "selluserid" } sqlId := fmt.Sprintf(str, usrId, status, nContractType) return sqlId } // 从数据库中查询合同 func (r *ErmcpModel) GetData(contractType, nQueryType int32) ([]ErmcpModel, error) { sData := make([]ErmcpModel, 0) e := db.GetEngine() s := e.SQL(r.buildSql(contractType, nQueryType)) if err := s.Find(&sData); err != nil { logger.GetLogger().Errorf("ermcp query fail:%v", err) return sData, err } return sData, nil }