/** * @Author: zou.yingbin * @Create : 2021/9/7 16:01 * @Modify : 2021/9/7 16:01 * @note : 天津麦顿 */ package models import ( "fmt" "github.com/golang/protobuf/proto" "mtp2_if/db" "mtp2_if/pb" "mtp2_if/utils" ) // TjmdQuoteGoods 掉期报价列表 type TjmdQuoteGoods struct { GOODSID int64 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 合约id GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 合约代码 GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 合约名称 REFGOODSID int64 `json:"refgoodsid" xorm:"'REFGOODSID'"` // 标的合约id REFGOODSCODE string `json:"refgoodscode" xorm:"'REFGOODSCODE'"` // 标的合约代码 REFGOODSNAME string `json:"refgoodsname" xorm:"'REFGOODSNAME'"` // 标的合约名称 SELLQTY float64 `json:"sellqty" xorm:"'SELLQTY'"` // 卖量(暂不做, 无值, 保留字段) BUYQTY float64 `json:"buyqty" xorm:"'BUYQTY'"` // 买量(暂不做, 无值, 保留字段) GOODSGROUPID int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'" form:"goodsgroupid"` // 商品组ID(自增ID) GOODSGROUPNAME string `json:"goodsgroupname" xorm:"'GOODSGROUPNAME'"` // 商品组名称 UserType int32 `json:"-" form:"usertype"` // 用户类型 FtMarketIds string `json:"-" form:"marketids"` // 市场id, 格式 1,2,3 } func (r *TjmdQuoteGoods) calc() { } func (r *TjmdQuoteGoods) buildSql() string { var sqlId utils.SQLVal = ` select g1.goodsid, g1.goodscode, g1.goodsname, g2.goodsid refgoodsid, g2.goodscode refgoodscode, g2.goodsname refgoodsname, gp.goodsgroupid, gp.goodsgroupname, gp.outergroupcode goodsgroupcode, gp.marketid from goods g1 left join goods g2 on g1.refgoodsid = g2.goodsid left join goodsgroup gp on g1.goodsgroupid = gp.goodsgroupid where 1=1 and g1.goodsstatus = 3 ` sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and gp.marketid in(%v)", r.FtMarketIds)) return sqlId.String() } // GetDataEx 获取掉期报价列表 func (r *TjmdQuoteGoods) GetDataEx() (interface{}, error) { sData := make([]TjmdQuoteGoods, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } return sData, err } // TjmdTradeOrderDetail 买卖大厅 type TjmdTradeOrderDetail struct { ORDERID string `json:"orderid" xorm:"'ORDERID'"` // 委托单号 GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 商品id BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'" form:"buyorsell"` // 买卖方向 0-买 1-卖 ORDERPRICE SFLOAT64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格 ORDERQTY int64 `json:"orderqty" xorm:"'ORDERQTY'"` // 委托数量 USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称(已脱敏) PRICEMODE int32 `json:"pricemode" xorm:"'PRICEMODE'"` // 取价方式 - 1:市价 2: 限价 3:浮动价 MARKETMAXSUB float64 `json:"marketmaxsub" xorm:"'MARKETMAXSUB'"` // 市价最大偏移范围 [浮动价 - 点差] PageEx `xorm:"extends"` USERTYPE int32 `json:"-" form:"usertype"` // 用户类型 FtMarketIds string `json:"-" form:"marketids"` // 市场id, 格式 1,2,3 } func (r *TjmdTradeOrderDetail) calc() { r.USERNAME = EncryptByStar(r.USERNAME) } func (r *TjmdTradeOrderDetail) buildSql() string { var sqlId utils.SQLVal = ` select to_char(t.orderid) orderid, t.buyorsell, t.goodsid, t.orderprice, t.orderqty - t.tradeqty orderqty, u.userid, u.accountname username, t.orderstatus, t.pricemode, t.marketmaxsub, g.marketid from trade_orderdetail t left join taaccount ta on t.accountid = ta.accountid left join useraccount u on ta.relateduserid = u.userid left join goods g on t.goodsid=g.goodsid where 1 = 1 and t.orderstatus in (3, 7) and (u.usertype = decode(%v,2,5,2) or u.userid = %v) ` // 投资者只能看到会员的单, 会员只能看到投资者的单, decode(%v,2,5,-1); or u.userid=r.userid 则为自己的挂单可见 sqlId.FormatParam(r.USERTYPE, r.USERID) sqlId.And("t.GOODSID", r.GOODSID) sqlId.And("t.BUYORSELL", r.BUYORSELL) sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and g.marketid in(%v)", r.FtMarketIds)) if r.BUYORSELL == 0 { sqlId.Join(" order by t.orderprice desc, t.ordertime desc") } else { sqlId.Join(" order by t.orderprice, t.ordertime desc") } sqlId.Page(r.Page, r.PageSize) return sqlId.String() } // GetDataByPage 获取买卖大厅 func (r *TjmdTradeOrderDetail) GetDataByPage() (interface{}, error, int, int, int) { sData := make([]TjmdTradeOrderDetail, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } if len(sData) > 0 { r.Total = sData[0].Total } return sData, err, r.Page, r.PageSize, r.Total } // TjmdTransferApply 协议转让申请 type TjmdTransferApply struct { APPLYID int64 `json:"applyid" xorm:"'APPLYID'"` // 申请ID(自增ID SEQ_TRADE_HOLDTRANSFERAPPLY) MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID INACCOUNTID int64 `json:"-" xorm:"INACCOUNTID" form:"inaccountid"` // 转入方资金ID(确认方) --对方申请 OUTACCOUNTID int64 `json:"-" xorm:"OUTACCOUNTID" form:"outaccountid"` // 转出方资金ID(申请方) --我的申请 GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码 GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称 QTYDECIMALPLACE int `json:"-" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位 BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖 - 0:买 1:卖 TRANSFERPRICE float64 `json:"transferprice" xorm:"'TRANSFERPRICE'"` // 转让价格(协议价格) QTY SFLOAT64 `json:"qty" xorm:"'QTY'"` // 转让数量(数量) TRANSFERAMOUNT float64 `json:"transferamount" xorm:"'TRANSFERAMOUNT'"` // 转让总金额(金额) APPLYSTATUS int32 `json:"applystatus" xorm:"'APPLYSTATUS'"` // 状态 - 0:未提交 1:待审核 2:审核中 3:审核通过 4:审核拒绝 5:审核失败 6:已撤销 TRADEID string `json:"tradeid" xorm:"'TRADEID'"` // 成交单号(关联持仓) APPLYTIME string `json:"applytime" xorm:"'APPLYTIME'"` // 申请时间(时间) AUDITREMARK string `json:"auditremark" xorm:"'AUDITREMARK'"` // 审核备注(拒绝原因?) ApplyType int32 `json:"-" form:"applytype"` // 类型 1-我的申请 2-对方申请 FtMarketIds string `json:"-" form:"marketids"` // 市场 格式 1,2,3 FtAccountIds string `json:"-" form:"accountids"` // 资金账号 格式 1,2,3 } func (r *TjmdTransferApply) calc() { if r.QTYDECIMALPLACE != 0 { r.QTY.Power10(r.QTYDECIMALPLACE * -1) } } func (r *TjmdTransferApply) buildSql() string { var sqlId utils.SQLVal = ` select t.applyid, t.marketid, t.goodsid, g.goodscode, g.goodsname, g.qtydecimalplace, t.buyorsell, t.transferprice, t.qty, t.transferamount, t.applystatus, to_char(t.tradeid) tradeid, to_char(t.applytime,'yyyy-mm-dd hh24:mi:ss') applytime, t.auditremark from trade_holdtransferapply t left join goods g on t.goodsid = g.goodsid where 1=1 ` sqlId.JoinEx(r.FtMarketIds != "", fmt.Sprintf(" and t.marketid in(%v)", r.FtMarketIds)) if r.ApplyType == 1 { sqlId.JoinEx(r.FtAccountIds != "", fmt.Sprintf(" and t.outaccountid in(%v)", r.FtAccountIds)) } else if r.ApplyType == 2 { sqlId.JoinEx(r.FtAccountIds != "", fmt.Sprintf(" and t.inaccountid in(%v)", r.FtAccountIds)) } return sqlId.String() } // GetDataEx 获取协议转让申请 func (r *TjmdTransferApply) GetDataEx() (interface{}, error) { sData := make([]TjmdTransferApply, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } return sData, err } // TjmdTodayAccountMargin 账户保证金配置 type TjmdTodayAccountMargin struct { ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'" form:"accountid"` // 账号ID GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 商品ID INFOCONTENT string `json:"-" xorm:"'INFOCONTENT'"` // 保证金信息(存储配置的Protobuffer串) MARKETID int32 `json:"marketid" xorm:"'MARKETID'" form:"marketid"` // 市场ID INFOC pb.GoodsMarginCfgStruct `json:"infoc"` // 配置参数 } func (r *TjmdTodayAccountMargin) calc() { if len(r.INFOCONTENT) > 0 { proto.Unmarshal([]byte(r.INFOCONTENT), &r.INFOC) } } func (r *TjmdTodayAccountMargin) buildSql() string { var sqlId utils.SQLVal = ` select t.accountid, t.goodsid, t.infocontent, t.createdate, t.marketid from today_accountmargin t where 1 = 1 ` if r.ACCOUNTID > 0 { sqlId.JoinFormat(" and t.ACCOUNTID in(0, %v)", r.ACCOUNTID) } sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0) sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0) sqlId.Join(" order by t.accountid desc") sqlId.Page(1, 1) // 只取一条 return sqlId.String() } // GetDataEx 获取账户保证金配置 func (r *TjmdTodayAccountMargin) GetDataEx() (interface{}, error) { sData := make([]TjmdTodayAccountMargin, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } return sData, err }