| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- /**
- * @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
- }
|