| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777 |
- package models
- import (
- "fmt"
- "mtp2_if/db"
- "mtp2_if/mtpcache"
- "mtp2_if/pb"
- "mtp2_if/rediscli"
- "mtp2_if/utils"
- "sort"
- "strconv"
- "strings"
- "time"
- "google.golang.org/protobuf/proto"
- )
- type TouristGoods struct {
- Goodsid int64 `json:"goodsid" xorm:"'GOODSID'" binding:"required"` // 商品ID(自增ID SEQ_GOODS)
- Goodscode string `json:"goodscode" xorm:"'GOODSCODE'" binding:"required"` // 商品代码(内部)
- Goodsname string `json:"goodsname" xorm:"'GOODSNAME'" binding:"required"` // 商品名称
- Marketid int64 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 所属市场ID
- Goodsgroupid int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 所属商品组ID
- Goodsstatus int64 `json:"goodsstatus" xorm:"'GOODSSTATUS'"` // 商品状态- 1:待审核 2:未上市 3:上市 4:已注销 5:审核拒绝 6:退市 7:待退市
- Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 报价货币ID
- Goodunitid int64 `json:"goodunitid" xorm:"'GOODUNITID'"` // 报价单位ID
- Agreeunit float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约单位
- Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
- Listingdate time.Time `json:"listingdate" xorm:"'LISTINGDATE'"` // 交易开始日期
- Lasttradedate time.Time `json:"lasttradedate" xorm:"'LASTTRADEDATE'"` // 最后交易日期(状态:待退市)
- Delistingdate time.Time `json:"delistingdate" xorm:"'DELISTINGDATE'"` // 商品退市时间(状态:退市) -- 已作废
- Deliveryflag int64 `json:"deliveryflag" xorm:"'DELIVERYFLAG'"` // 交割标志 - 0:不可交割 1:可交割
- Hasquoter int64 `json:"hasquoter" xorm:"'HASQUOTER'"` // 是否有报价商 - 0:无报价商 1:有报价商
- Hqprotecttime int64 `json:"hqprotecttime" xorm:"'HQPROTECTTIME'"` // 行情保护时间(秒)
- Quoteshowtype int64 `json:"quoteshowtype" xorm:"'QUOTESHOWTYPE'"` // 行情报价类型: 1:成交价 2:买卖中间价 3:含买价 4:含卖价做市模式固定为3:含买价
- Quoteshowtypeinterval int64 `json:"quoteshowtypeinterval" xorm:"'QUOTESHOWTYPEINTERVAL'"` // 行情报价间隔时间(秒)(成交价时为0)
- Modifystatus int64 `json:"modifystatus" xorm:"'MODIFYSTATUS'"` // 变更状态 - 1:未变更 2:变更中 3:待审核 4:已审核
- Goodstradetype int64 `json:"goodstradetype" xorm:"'GOODSTRADETYPE'"` // 商品交易权限类型 - 1:可建可平 3:不可建可平
- Creatorid int64 `json:"creatorid" xorm:"'CREATORID'"` // 创建人
- Createtime time.Time `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
- Auditaccountid int64 `json:"auditaccountid" xorm:"'AUDITACCOUNTID'"` // 审核操作员账号
- Audittime time.Time `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
- Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
- Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人
- Cancelaccountid int64 `json:"cancelaccountid" xorm:"'CANCELACCOUNTID'"` // 注销操作员账号
- Remark string `json:"remark" xorm:"'REMARK'"` // 备注
- Canceltime time.Time `json:"canceltime" xorm:"'CANCELTIME'"` // 注销时间
- Delistingmode int64 `json:"delistingmode" xorm:"'DELISTINGMODE'"` // 退市方式 - 1:退市平仓 2:退市交收 3:不处理(仅期权\币币兑换)
- Forceclosemode int64 `json:"forceclosemode" xorm:"'FORCECLOSEMODE'"` // 定期强平方式 - 1:无 2:每日 3:每周 4:每月[收益权]
- Forceclosevalue int64 `json:"forceclosevalue" xorm:"'FORCECLOSEVALUE'"` // 定期强平参数 [收益权]
- Cutmode int64 `json:"cutmode" xorm:"'CUTMODE'"` // 斩仓方式 - 1:不斩仓 2:自动斩仓 3:半自动斩仓
- Quoteminunit int64 `json:"quoteminunit" xorm:"'QUOTEMINUNIT'"` // 行情最小变动单位 [整数,报价小数位一起使用]
- Isbuylimited int64 `json:"isbuylimited" xorm:"'ISBUYLIMITED'"` // 是否限制建仓量 - 0:不限制 1:限制
- Innerdealmode int64 `json:"innerdealmode" xorm:"'INNERDEALMODE'"` // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
- Outerdealmode int64 `json:"outerdealmode" xorm:"'OUTERDEALMODE'"` // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
- Closepricemode int64 `json:"closepricemode" xorm:"'CLOSEPRICEMODE'"` // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
- Closepriceparam float64 `json:"closepriceparam" xorm:"'CLOSEPRICEPARAM'"` // 强平最新价浮动比例 - 方式为2时使用 (<1)买 上浮 (1+x)*最新价卖 下浮 (1-x)*最新价
- Qtydecimalplace int64 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
- Goodscurrencyid int64 `json:"goodscurrencyid" xorm:"'GOODSCURRENCYID'"` // 合约货币ID
- Goodsquotetype int64 `json:"goodsquotetype" xorm:"'GOODSQUOTETYPE'"` // 合约报价类型: 1-直接报价 2-间接报价
- Quotegear int64 `json:"quotegear" xorm:"'QUOTEGEAR'"` // 行情档位(1-10)
- Outgoodscode string `json:"outgoodscode" xorm:"'OUTGOODSCODE'"` // 商品代码(外部)
- Isvisible int32 `json:"isvisible" xorm:"ISVISIBLE"` // 游客是否可见 - 0:不可见 1:可见
- Areauserid int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
- Pictureurl string `json:"pictureurl" xorm:"PICTUREURL"` // 商品图片
- THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
- Trademode int32 `json:"trademode" xorm:"'TRADEMODE'"` // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
- GOODSORDER string `json:"goodsorder" xorm:"GOODSORDER"` // 商品显示顺序(99)
- }
- func GetTouristGoods(tradeModes []int, marketIds []int) (goods []TouristGoods, err error) {
- goods = make([]TouristGoods, 0)
- session := db.GetEngine().Table("GOODS G").
- Select("G.*, M.TRADEMODE, E.GOODSORDER").
- Join("LEFT", "MARKET M", "M.MARKETID = G.MARKETID").
- Join("LEFT", "GOODSEX E", "E.GOODSID = G.GOODSID").
- Where("G.GOODSSTATUS in (3, 7)").In("M.TRADEMODE", tradeModes)
- if len(marketIds) > 0 {
- session = session.In("M.MARKETID", marketIds)
- }
- session = session.OrderBy("G.GOODSCODE")
- err = session.Find(&goods)
- return
- }
- // TradeHolderDetailEx 交易持仓扩展表
- type TradeHolderDetailEx struct {
- TradeID uint64 `json:"tradeID,string"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- BuyOrSell uint32 `json:"buyOrSell"` // 方向 - 0:买 1:卖
- TradeDate string `json:"tradeDate"` // 交易日(yyyyMMdd)
- MarketID uint32 `json:"marketID"` // 市场ID
- GoodsID uint32 `json:"goodsID"` // 商品ID
- UserID uint32 `json:"userID"` // 用户ID
- AccountID uint64 `json:"accountID"` // 账号ID
- MatchUserID uint32 `json:"matchUserID"` // 对手用户ID
- MatchAccountID uint64 `json:"matchAccountID"` // 对手账号ID
- OpenQty uint64 `json:"openQty"` // 建仓数量
- TradeAmount float64 `json:"tradeAmount"` // 成交金额
- OpenPrice float64 `json:"openPrice"` // 建仓价格
- HolderQty uint64 `json:"holderQty"` // 持仓数量
- HolderAmount float64 `json:"holderAmount"` // 持仓金额
- HolderPrice float64 `json:"holderPrice"` // 持仓价格
- FreezeQty uint64 `json:"freezeQty"` // 冻结数量
- DeliveryQty uint64 `json:"deliveryQty"` // 交收手数(已交收)
- HoldDays uint64 `json:"holdDays"` // 持仓天数
- PayedDeposit float64 `json:"payedDeposit"` // 已付定金
- RestockDeposit float64 `json:"restockDeposit"` // 补充定金
- LateFeeDays uint64 `json:"lateFeeDays"` // 滞纳金起计天数
- LateFeeAlgorithm uint32 `json:"lateFeeAlgorithm"` // 滞纳金收取方式 1:比率 2:固定
- LateFeeValue float64 `json:"lateFeeValue"` // 滞纳金收取值
- CallAteFee float64 `json:"callAteFee"` // 已计滞纳金
- PromptDepositRate float64 `json:"promptDepositRate"` // 提示定金率
- CutDepositRate float64 `json:"cutDepositRate"` // 斩仓定金率
- PromptPrice float64 `json:"promptPrice"` // 提示价格
- CutPrice float64 `json:"cutPrice"` // 斩仓价格
- ClosePL float64 `json:"closePL"` // 平仓盈亏
- FloatPL float64 `json:"floatPL"` // 浮动盈亏
- DepositRate float64 `json:"depositRate"` // 订单定金率
- RefundableDeposit float64 `json:"refundableDeposit"` // 可退定金
- TradeTime string `json:"tradeTime"` // 交易时间
- OriPayedDeposit float64 `json:"oripayeddeposit"` // 初始已付定金
- OriRestockDeposit float64 `json:"orirestockdeposit"` // 累计补充定金
- CanAutoAddDeposit uint64 `json:"canautoadddeposit"` // 是否允许自动追加定金: 0-否 1-是(52)
- AddDepositRate float64 `json:"adddepositrate"` // 自动追加定金率(52) - 允许时显示
- CanAutoRefundDeposit uint64 `json:"canautorefunddeposit"` // 是否允许自动退还定金: 0-否 1-是(52)
- }
- // RedisTradeHolderDetailEx redis存储交易持仓扩展表
- type RedisTradeHolderDetailEx struct {
- THDetailEx TradeHolderDetailEx `json:"tHDetailEx"` // 交易持仓扩展表记录
- FloatPL float64 `json:"floatPL"` // 浮动盈亏
- DepositRate float64 `json:"depositRate"` // 订单定金率
- RefundableDeposit float64 `json:"refundableDeposit"` // 可退定金
- GoodsCode string `json:"goodsCode"` // 商品代码
- GoodsName string `json:"goodsName"` // 商品名称
- GoodsUnitID uint32 `json:"goodsUnitID"` // 单位
- AgreeUnit float64 `json:"agreeUnit"` // 合约单位
- DecimalPlace uint32 `json:"decimalPlace"` // 小数位位数
- QuoteMinUnit uint32 `json:"quoteMinUnit"` // 行情最小变动单位
- GoodsUnit string `json:"goodsUnit"` // 单位名称
- THUMURLS string `json:"thumurls"` // 缩略图片(1:1)(逗号分隔)
- }
- type RedisTradeHolderDetailExArray []RedisTradeHolderDetailEx
- func (s RedisTradeHolderDetailExArray) Len() int { return len(s) }
- func (s RedisTradeHolderDetailExArray) Less(i, j int) bool {
- return s[i].THDetailEx.TradeID < s[j].THDetailEx.TradeID
- }
- func (s RedisTradeHolderDetailExArray) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
- // GetDataEx 从数据库中查询数据
- func (r *RedisTradeHolderDetailEx) GetDataEx(userId int, goodsId int) (sData RedisTradeHolderDetailExArray, err error) {
- redisCli := rediscli.GetRedisClient()
- g := strconv.Itoa(goodsId)
- if goodsId == 0 {
- g = "*"
- }
- sData = make([]RedisTradeHolderDetailEx, 0)
- // boost::format fmtDuration("TradeHolderDetailEx:%d_%d_%d_%" PRId64 "");
- // fmtDuration % detailEx.goodsid() % detailEx.buyorsell()%detailEx.userid()%detailEx.tradeid();
- key := fmt.Sprintf("TradeHolderDetailEx:%s_*_%d_*", g, userId)
- if ret, err := redisCli.Do("keys", key).Result(); err == nil {
- datas := ret.([]interface{})
- for _, item := range datas {
- itemKey := item.(string)
- if itemValue, err := redisCli.Get(itemKey).Result(); err == nil {
- var data pb.RedisTradeHolderDetailEx
- if err = proto.Unmarshal([]byte(itemValue), &data); err == nil {
- m := RedisTradeHolderDetailEx{}
- m.ParseFromProto(&data)
- // 处理失真问题
- m.THDetailEx.RefundableDeposit = utils.Float64Round(m.THDetailEx.RefundableDeposit, 2)
- m.THDetailEx.RestockDeposit = utils.Float64Round(m.THDetailEx.RestockDeposit, 2)
- m.THDetailEx.OriPayedDeposit = utils.Float64Round(m.THDetailEx.OriPayedDeposit, 2)
- m.THDetailEx.OriRestockDeposit = utils.Float64Round(m.THDetailEx.OriRestockDeposit, 2)
- m.THDetailEx.AddDepositRate = utils.Float64Round(m.THDetailEx.AddDepositRate, 4)
- sData = append(sData, m)
- }
- }
- }
- }
- // 按 TradeID 倒序排序
- sort.Sort(sort.Reverse(RedisTradeHolderDetailExArray(sData)))
- return sData, nil
- }
- func (r *RedisTradeHolderDetailEx) ParseFromProto(p *pb.RedisTradeHolderDetailEx) {
- r.FloatPL = p.GetFloatPL()
- r.DepositRate = p.GetDepositRate()
- r.RefundableDeposit = p.GetRefundableDeposit()
- r.GoodsCode = p.GetGoodsCode()
- r.GoodsName = p.GetGoodsName()
- r.GoodsUnitID = p.GetGoodsUnitID()
- r.AgreeUnit = p.GetAgreeUnit()
- r.DecimalPlace = p.GetDecimalPlace()
- r.QuoteMinUnit = p.GetQuoteMinUnit()
- r.THDetailEx = TradeHolderDetailEx{
- TradeID: p.GetTHDetailEx().GetTradeID(),
- BuyOrSell: p.GetTHDetailEx().GetBuyOrSell(),
- TradeDate: p.GetTHDetailEx().GetTradeDate(),
- MarketID: p.GetTHDetailEx().GetMarketID(),
- GoodsID: p.GetTHDetailEx().GetGoodsID(),
- UserID: p.GetTHDetailEx().GetUserID(),
- AccountID: p.GetTHDetailEx().GetAccountID(),
- MatchUserID: p.GetTHDetailEx().GetMatchUserID(),
- MatchAccountID: p.GetTHDetailEx().GetMatchAccountID(),
- OpenQty: p.GetTHDetailEx().GetOpenQty(),
- TradeAmount: utils.Float64Round(p.GetTHDetailEx().GetTradeAmount(), 2),
- OpenPrice: utils.Float64Round(p.GetTHDetailEx().GetOpenPrice(), int(p.GetDecimalPlace())),
- HolderQty: p.GetTHDetailEx().GetHolderQty(),
- HolderAmount: utils.Float64Round(p.GetTHDetailEx().GetHolderAmount(), 2),
- HolderPrice: p.GetTHDetailEx().GetHolderPrice(),
- FreezeQty: p.GetTHDetailEx().GetFreezeQty(),
- DeliveryQty: p.GetTHDetailEx().GetDeliveryQty(),
- HoldDays: p.GetTHDetailEx().GetHoldDays(),
- PayedDeposit: p.GetTHDetailEx().GetPayedDeposit(),
- RestockDeposit: p.GetTHDetailEx().GetRestockDeposit(),
- LateFeeDays: p.GetTHDetailEx().GetLateFeeDays(),
- LateFeeAlgorithm: p.GetTHDetailEx().GetLateFeeAlgorithm(),
- LateFeeValue: p.GetTHDetailEx().GetLateFeeValue(),
- CallAteFee: p.GetTHDetailEx().GetCallAteFee(),
- PromptDepositRate: p.GetTHDetailEx().GetPromptDepositRate(),
- CutDepositRate: p.GetTHDetailEx().GetCutDepositRate(),
- PromptPrice: utils.Float64Round(p.GetTHDetailEx().GetPromptPrice(), int(p.GetDecimalPlace())),
- CutPrice: utils.Float64Round(p.GetTHDetailEx().GetCutPrice(), int(p.GetDecimalPlace())),
- ClosePL: p.GetTHDetailEx().GetClosePL(),
- FloatPL: p.GetTHDetailEx().GetFloatPL(),
- DepositRate: p.GetTHDetailEx().GetDepositRate(),
- RefundableDeposit: p.GetTHDetailEx().GetRefundableDeposit(),
- TradeTime: p.GetTHDetailEx().GetTradeTime(),
- OriPayedDeposit: p.GetTHDetailEx().GetOriPayedDeposit(),
- OriRestockDeposit: p.GetTHDetailEx().GetOriReStockDeposit(),
- CanAutoAddDeposit: p.GetTHDetailEx().GetCanAutoAddDeposit(),
- AddDepositRate: p.GetTHDetailEx().GetAddDepositRate(),
- CanAutoRefundDeposit: p.GetTHDetailEx().GetCanAutoRefundDeposit(),
- }
- // 单位
- r.GoodsUnit = mtpcache.GetEnumDicitemName(int32(r.GoodsUnitID))
- r.THDetailEx.TradeTime = strings.Replace(r.THDetailEx.TradeTime, "\n\u0013", "", -1)
- // 获取对应的商品信息
- if goods, bFind := mtpcache.GetGoods(r.GoodsCode); bFind {
- r.THUMURLS = goods.THUMURLS
- }
- }
- type MyTradegoodsdeliveryoffline struct {
- DELIVERYORDERID string `json:"deliveryorderid" xorm:"DELIVERYORDERID"` // 交收单号(905+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 申请用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID
- GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
- MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
- BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 交收方向 - 0:买 1:卖
- DELIVERYLOT int64 `json:"deliverylot" xorm:"DELIVERYLOT"` // 交收手数
- DELIVERYQTY int64 `json:"deliveryqty" xorm:"DELIVERYQTY"` // 交收数量 (手数*合约乘数)
- DELIVERYINFO string `json:"deliveryinfo" xorm:"DELIVERYINFO"` // 交收信息
- MATCHUSERID int64 `json:"matchuserid" xorm:"MATCHUSERID"` // 对手方UserID
- MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手方AccountID
- REQTIME string `json:"reqtime" xorm:"REQTIME"` // 申请时间
- REQTRADEDATE string `json:"reqtradedate" xorm:"REQTRADEDATE"` // 申请交易日
- ORDERSTATUS int32 `json:"orderstatus" xorm:"ORDERSTATUS"` // 线下交收单状态 - 1:待处理 2:交收中 3:已完成 4:申请失败 枚举deliveryOrderStatus
- DELIVERYPRICE float64 `json:"deliveryprice" xorm:"DELIVERYPRICE"` // 交收价格
- DELIVERYAMOUNT float64 `json:"deliveryamount" xorm:"DELIVERYAMOUNT"` // 交收货款
- CLOSETIME time.Time `json:"closetime" xorm:"CLOSETIME"` // 完成时间
- CLOSETRADEDATE string `json:"closetradedate" xorm:"CLOSETRADEDATE"` // 完成交易日
- DELIVERYCHARGE float64 `json:"deliverycharge" xorm:"DELIVERYCHARGE"` // 交割手续费
- FEEALGORITHM int32 `json:"feealgorithm" xorm:"FEEALGORITHM"` // 手续费收取方式 1:比率 2:固定
- MEMBERCHARGEVALUE float64 `json:"memberchargevalue" xorm:"MEMBERCHARGEVALUE"` // 会员手续费设置值
- EXCHCHARGEVALUE float64 `json:"exchchargevalue" xorm:"EXCHCHARGEVALUE"` // 交易所手续费设置值
- HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
- DELIVERYPREMIUM float64 `json:"deliverypremium" xorm:"DELIVERYPREMIUM"` // 交收升贴水(每单位)
- DELIVERYTOTALAMOUNT float64 `json:"deliverytotalamount" xorm:"DELIVERYTOTALAMOUNT"` // 交收总货款 = 交收货款 + 交收升贴水 * 交收数量
- DELIVERYSTATUS int32 `json:"deliverystatus" xorm:"DELIVERYSTATUS" form:"deliverystatus"` // 交收单状态2(52模式使用) - 1:待审核 2:待确认 3:待付款 4:付款中 5:已完成付款 6:处理中 20:交收完成 21:审核拒绝 22:确认过期 23:付款过期 24:财务撤销 -- 枚举deliveryStatus
- TOCONFIRMTIME time.Time `json:"toconfirmtime" xorm:"TOCONFIRMTIME"` // 确认截止时间(买交收)
- TOPAYTIME time.Time `json:"topaytime" xorm:"TOPAYTIME"` // 付款截止时间(买交收)
- PAYEDAMOUNT float64 `json:"payedamount" xorm:"PAYEDAMOUNT"` // 已付货款
- FREEZEAMOUNT float64 `json:"freezeamount" xorm:"FREEZEAMOUNT"` // 冻结货款
- REALDELIVERYQTY float64 `json:"realdeliveryqty" xorm:"REALDELIVERYQTY"` // 实际交收数量
- REALDELIVERYAMOUNT float64 `json:"realdeliveryamount" xorm:"REALDELIVERYAMOUNT"` // 实际交收货款
- CLIENTTICKET string `json:"clientticket" xorm:"CLIENTTICKET"` // 客户端流水号
- GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
- GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
- AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 期货合约乘数
- DECIMALPLACE int32 `json:"decimalplace" xorm:"DECIMALPLACE"` // 报价小数位
- GOODUNITID int32 `json:"goodunitid" xorm:"GOODUNITID"` // 报价单位ID
- Status string `json:"-" form:"status"` // 状态入参
- PageEx `xorm:"extends"` // 页码信息
- }
- func (r *MyTradegoodsdeliveryoffline) calc() {
- }
- func (r *MyTradegoodsdeliveryoffline) buildSql() string {
- var sqlId utils.SQLVal = `
- SELECT
- to_char(t.deliveryorderid) DELIVERYORDERID,
- t.userid,
- t.accountid,
- t.goodsid,
- t.marketid,
- t.buyorsell,
- t.deliverylot,
- t.deliveryqty,
- t.deliveryinfo,
- t.matchuserid,
- t.matchaccountid,
- to_char(t.reqtime, 'yyyy-MM-dd hh24:mi:ss') REQTIME,
- t.reqtradedate,
- t.orderstatus,
- t.deliveryprice,
- t.deliveryamount,
- t.closetime,
- t.closetradedate,
- t.deliverycharge,
- t.feealgorithm,
- t.memberchargevalue,
- t.exchchargevalue,
- t.handlestatus,
- t.deliverypremium,
- t.deliverytotalamount,
- t.deliverystatus,
- t.toconfirmtime,
- t.topaytime,
- t.payedamount,
- t.freezeamount,
- t.REALDELIVERYQTY,
- t.REALDELIVERYAMOUNT,
- g.goodscode,
- g.goodsname,
- g.agreeunit,
- g.goodunitid,
- g.decimalplace
- FROM TRADE_GOODSDELIVERYOFFLINE t
- LEFT JOIN GOODS g ON g.goodsid = t.goodsid
- WHERE t.userid = %v
- `
- sqlId.FormatParam(r.USERID)
- // sqlId.AndEx("t.DELIVERYSTATUS", r.DELIVERYSTATUS, r.DELIVERYSTATUS > 0)
- sqlId.JoinEx(r.Status != "", fmt.Sprintf(" AND t.DELIVERYSTATUS IN (%v)", r.Status))
- sqlId.OrderByDesc("t.deliveryorderid")
- sqlId.Page(r.Page, r.PageSize)
- return sqlId.String()
- }
- func (r *MyTradegoodsdeliveryoffline) GetDataByPage() (interface{}, error, int, int, int) {
- sData := make([]MyTradegoodsdeliveryoffline, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- total := 0
- for i := range sData {
- sData[i].calc()
- total = sData[i].Total
- }
- return sData, err, r.Page, r.PageSize, total
- }
- // Deliveryofflinedetail 交易合约线下交收明细表
- type MyDeliveryofflinedetail struct {
- DELIVERYDETAILID string `json:"deliverydetailid" xorm:"DELIVERYDETAILID"` // 明细单号(906+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- DELIVERYORDERID string `json:"deliveryorderid" xorm:"DELIVERYORDERID" form:"deliveryorderid" binding:"required"` // 交收单号(905+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
- USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账号ID
- HOLDLOT int64 `json:"holdlot" xorm:"HOLDLOT"` // 持仓手数
- HOLDQTY int64 `json:"holdqty" xorm:"HOLDQTY"` // 持仓数量(手数*合约乘数)
- DELIVERYLOT int64 `json:"deliverylot" xorm:"DELIVERYLOT"` // 申请交收手数
- DELIVERYQTY int64 `json:"deliveryqty" xorm:"DELIVERYQTY"` // 申请交收数量 (手数*合约乘数)
- DELIVERYPRICE float64 `json:"deliveryprice" xorm:"DELIVERYPRICE"` // 交收价格
- DELIVERYAMOUNT float64 `json:"deliveryamount" xorm:"DELIVERYAMOUNT"` // 交收货款
- CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
- PageEx `xorm:"extends"` // 页码信息
- }
- func (r *MyDeliveryofflinedetail) calc() {
- }
- func (r *MyDeliveryofflinedetail) buildSql() string {
- var sqlId utils.SQLVal = `
- SELECT
- to_char(t.deliverydetailid) DELIVERYDETAILID,
- to_char(t.deliveryorderid) DELIVERYORDERID,
- to_char(t.tradeid) TRADEID,
- t.buyorsell,
- t.userid,
- t.accountid,
- t.holdlot,
- t.holdqty,
- t.deliverylot,
- t.deliveryqty,
- t.deliveryprice,
- t.deliveryamount,
- t.createtime
- FROM DELIVERYOFFLINEDETAIL t
- WHERE t.userid = %v AND t.deliveryorderid = %v
- `
- sqlId.FormatParam(r.USERID, r.DELIVERYORDERID)
- sqlId.Page(r.Page, r.PageSize)
- return sqlId.String()
- }
- func (r *MyDeliveryofflinedetail) GetDataByPage() (interface{}, error, int, int, int) {
- sData := make([]MyDeliveryofflinedetail, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- total := 0
- for i := range sData {
- sData[i].calc()
- total = sData[i].Total
- }
- return sData, err, r.Page, r.PageSize, total
- }
- // Deliveryofflineoperatelog 交易合约线下交收操作流水表
- type MyDeliveryofflineoperatelog struct {
- OPERATELOGID string `json:"operatelogid" xorm:"OPERATELOGID"` // 明细单号(907+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- DELIVERYORDERID string `json:"deliveryorderid" xorm:"DELIVERYORDERID" form:"deliveryorderid" binding:"required"` // 交收单ID
- OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE" form:"operatetype"` // 操作类型 - 1:交收流程 2:付款流水
- CURDELIVERYSTATUS int32 `json:"curdeliverystatus" xorm:"CURDELIVERYSTATUS"` // 当前交收状态(OperateType=1时) - 枚举deliveryStatus
- AFTDELIVERYSTATUS int32 `json:"aftdeliverystatus" xorm:"AFTDELIVERYSTATUS"` // 操作后交收状态(OperateType=1时) - 枚举deliveryStatus
- OPERATORSRC int32 `json:"operatorsrc" xorm:"OPERATORSRC"` // 操作人来源 - 1:管理端 2:终端 3:系统
- OPERATORID int64 `json:"operatorid" xorm:"OPERATORID"` // 操作人ID - systemmanager的autoid 或 loginaccount的loginid
- OPERATORACCOUNT string `json:"operatoraccount" xorm:"OPERATORACCOUNT"` // 操作人账号 - systemmanager的logincode 或 loginaccount的logincode,无则用loginid
- OPERATORNAME string `json:"operatorname" xorm:"OPERATORNAME"` // 操作人名称 - systemmanager的username 或 loginaccount的logincode,无则用loginid
- REMARK string `json:"remark" xorm:"REMARK"` // 操作备注
- OPERATETIME string `json:"operatetime" xorm:"OPERATETIME"` // 操作时间
- FILENAME string `json:"filename" xorm:"FILENAME"` // 文件名称
- FILEADDRESS string `json:"fileaddress" xorm:"FILEADDRESS"` // 文件地址
- DELIVERYPAYMODE int32 `json:"deliverypaymode" xorm:"DELIVERYPAYMODE" form:"deliverypaymode"` // 付款方式 - 1:线上支付2:线下支付 - 枚举deliveryPayMode
- PAYAMOUNT float64 `json:"payamount" xorm:"PAYAMOUNT"` // 付款金额
- CONFIRMSTATUS int32 `json:"confirmstatus" xorm:"CONFIRMSTATUS" form:"confirmstatus"` // 确认状态 - 1:未确认 2:已确认 - 枚举confirmStatus
- CONFIRMID int64 `json:"confirmid" xorm:"CONFIRMID"` // 确认人
- CONFIRMTIME time.Time `json:"confirmtime" xorm:"CONFIRMTIME"` // 确认时间
- PageEx `xorm:"extends"` // 页码信息
- }
- func (r *MyDeliveryofflineoperatelog) calc() {
- }
- func (r *MyDeliveryofflineoperatelog) buildSql() string {
- var sqlId utils.SQLVal = `
- SELECT
- to_char(t.operatelogid) OPERATELOGID,
- to_char(t.deliveryorderid) DELIVERYORDERID,
- t.operatetype,
- t.curdeliverystatus,
- t.aftdeliverystatus,
- t.operatorsrc,
- t.operatorid,
- t.operatoraccount,
- t.operatorname,
- t.remark,
- to_char(t.operatetime, 'yyyy-MM-dd hh24:mi:ss') OPERATETIME,
- t.filename,
- t.fileaddress,
- t.deliverypaymode,
- t.payamount,
- t.confirmstatus,
- t.confirmid,
- t.confirmtime
- FROM DELIVERYOFFLINEOPERATELOG t
- WHERE t.deliveryorderid = %v
- `
- sqlId.FormatParam(r.DELIVERYORDERID)
- sqlId.AndEx("t.operatetype", r.OPERATETYPE, r.OPERATETYPE > 0)
- sqlId.OrderByDesc("t.operatetime")
- sqlId.Page(r.Page, r.PageSize)
- return sqlId.String()
- }
- func (r *MyDeliveryofflineoperatelog) GetDataByPage() (interface{}, error, int, int, int) {
- sData := make([]MyDeliveryofflineoperatelog, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- total := 0
- for i := range sData {
- sData[i].calc()
- total = sData[i].Total
- }
- return sData, err, r.Page, r.PageSize, total
- }
- // Tradeholderdetailex 交易持仓扩展表
- type Tradeholderdetailex struct {
- TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
- TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
- MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
- GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
- USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid" binding:"required"` // 账号ID
- MATCHUSERID int64 `json:"matchuserid" xorm:"MATCHUSERID"` // 对手用户ID
- MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手账号ID
- OPENQTY int64 `json:"openqty" xorm:"OPENQTY"` // 建仓数量
- TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额
- OPENPRICE float64 `json:"openprice" xorm:"OPENPRICE"` // 建仓价格
- HOLDERQTY int64 `json:"holderqty" xorm:"HOLDERQTY" form:"holderqty"` // 持仓数量
- HOLDERAMOUNT float64 `json:"holderamount" xorm:"HOLDERAMOUNT"` // 持仓金额
- HOLDERPRICE float64 `json:"holderprice" xorm:"HOLDERPRICE"` // 持仓价格
- FREEZEQTY int64 `json:"freezeqty" xorm:"FREEZEQTY"` // 冻结数量
- DELIVERYQTY int64 `json:"deliveryqty" xorm:"DELIVERYQTY"` // 交收手数(已交收)
- HOLDDAYS int32 `json:"holddays" xorm:"HOLDDAYS"` // 持仓天数
- PAYEDDEPOSIT float64 `json:"payeddeposit" xorm:"PAYEDDEPOSIT"` // 已付定金
- RESTOCKDEPOSIT float64 `json:"restockdeposit" xorm:"RESTOCKDEPOSIT"` // 补充定金
- LATEFEEDAYS int32 `json:"latefeedays" xorm:"LATEFEEDAYS"` // 滞纳金起计天数
- LATEFEEALGORITHM int32 `json:"latefeealgorithm" xorm:"LATEFEEALGORITHM"` // 滞纳金收取方式 1:比率 2:固定
- LATEFEEVALUE float64 `json:"latefeevalue" xorm:"LATEFEEVALUE"` // 滞纳金收取值
- CALLATEFEE float64 `json:"callatefee" xorm:"CALLATEFEE"` // 已计滞纳金
- PROMPTDEPOSITRATE float64 `json:"promptdepositrate" xorm:"PROMPTDEPOSITRATE"` // 提示定金率
- CUTDEPOSITRATE float64 `json:"cutdepositrate" xorm:"CUTDEPOSITRATE"` // 斩仓定金率
- PROMPTPRICE float64 `json:"promptprice" xorm:"PROMPTPRICE"` // 提示价格
- CUTPRICE float64 `json:"cutprice" xorm:"CUTPRICE"` // 斩仓价格
- CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 平仓盈亏
- FLOATPL float64 `json:"floatpl" xorm:"FLOATPL"` // 浮动盈亏
- DEPOSITRATE float64 `json:"depositrate" xorm:"DEPOSITRATE"` // 订单定金率
- REFUNDABLEDEPOSIT float64 `json:"refundabledeposit" xorm:"REFUNDABLEDEPOSIT"` // 可退定金
- PAYEDLATEFEE float64 `json:"payedlatefee" xorm:"PAYEDLATEFEE"` // 已付滞纳金
- TRADETIME string `json:"tradetime" xorm:"TRADETIME"` // 交易时间
- HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
- ORIPAYEDDEPOSIT float64 `json:"oripayeddeposit" xorm:"ORIPAYEDDEPOSIT"` // 初始已付定金
- ORIRESTOCKDEPOSIT float64 `json:"orirestockdeposit" xorm:"ORIRESTOCKDEPOSIT"` // 累计补充定金
- CANAUTOADDDEPOSIT uint64 `json:"canautoadddeposit" xorm:"CANAUTOADDDEPOSIT"` // 是否允许自动追加定金: 0-否 1-是(52)
- ADDDEPOSITRATE float64 `json:"adddepositrate" xorm:"ADDDEPOSITRATE"` // 自动追加定金率(52) - 允许时显示
- CANAUTOREFUNDDEPOSIT uint64 `json:"canautorefunddeposit" xorm:"CANAUTOREFUNDDEPOSIT"` // 是否允许自动退还定金: 0-否 1-是(52)
- GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
- GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
- AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT"` // 期货合约乘数
- DECIMALPLACE int32 `json:"decimalplace" xorm:"DECIMALPLACE"` // 报价小数位
- GOODUNITID int32 `json:"goodunitid" xorm:"GOODUNITID"` // 报价单位ID
- THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
- MarketIds string `form:"marketids"` // 过滤市场ID列表,格式 1,2,3
- PageEx `xorm:"extends"` // 页码信息
- }
- func (r *Tradeholderdetailex) calc() {
- if r.TRADEAMOUNT != 0.0 {
- r.TRADEAMOUNT = utils.Float64Round(r.TRADEAMOUNT, 2)
- }
- if r.OPENPRICE != 0.0 {
- r.OPENPRICE = utils.Float64Round(r.OPENPRICE, int(r.DECIMALPLACE))
- }
- if r.HOLDERAMOUNT != 0.0 {
- r.HOLDERAMOUNT = utils.Float64Round(r.HOLDERAMOUNT, 2)
- }
- if r.PROMPTPRICE != 0.0 {
- r.PROMPTPRICE = utils.Float64Round(r.PROMPTPRICE, int(r.DECIMALPLACE))
- }
- if r.CUTPRICE != 0.0 {
- r.CUTPRICE = utils.Float64Round(r.CUTPRICE, int(r.DECIMALPLACE))
- }
- }
- func (r *Tradeholderdetailex) buildSql() string {
- var sqlId utils.SQLVal = `
- select
- to_char(t.tradeid) TRADEID,
- t.buyorsell,
- t.tradedate,
- t.marketid,
- t.goodsid,
- t.userid,
- t.accountid,
- t.matchuserid,
- t.matchaccountid,
- t.openqty,
- t.tradeamount,
- t.openprice,
- t.holderqty,
- t.holderamount,
- t.holderprice,
- t.freezeqty,
- t.deliveryqty,
- t.holddays,
- t.payeddeposit,
- t.restockdeposit,
- t.latefeedays,
- t.latefeealgorithm,
- t.latefeevalue,
- t.callatefee,
- t.promptdepositrate,
- t.cutdepositrate,
- t.promptprice,
- t.cutprice,
- t.closepl,
- t.floatpl,
- t.depositrate,
- t.refundabledeposit,
- t.payedlatefee,
- to_char(t.tradetime, 'yyyy-MM-dd hh24:mi:ss') TRADETIME,
- t.handlestatus,
- t.oripayeddeposit,
- t.orirestockdeposit,
- t.canautoadddeposit,
- t.adddepositrate,
- t.canautorefunddeposit,
- g.goodscode,
- g.goodsname,
- g.agreeunit,
- g.decimalplace,
- g.goodunitid,
- g.thumurls
- from trade_holderdetailex t
- left join goods g on g.goodsid = t.goodsid
- where 1=1
- `
- sqlId.And("t.accountid", r.ACCOUNTID)
- sqlId.AndEx("t.tradedate", r.TRADEDATE, r.TRADEDATE != "")
- sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
- sqlId.AndEx("t.holderqty", r.HOLDERQTY, r.HOLDERQTY > 0)
- if r.MarketIds != "" {
- sqlId.JoinFormat("and t.marketid in (%s)", r.MarketIds)
- }
- sqlId.OrderByDesc("t.tradetime")
- sqlId.Page(r.Page, r.PageSize)
- return sqlId.String()
- }
- func (r *Tradeholderdetailex) GetDataByPage() (interface{}, error, int, int, int) {
- sData := make([]Tradeholderdetailex, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- total := 0
- for i := range sData {
- sData[i].calc()
- total = sData[i].Total
- }
- return sData, err, r.Page, r.PageSize, total
- }
- type TradeCloseDetail struct {
- CLOSEID string `json:"closeid" xorm:"CLOSEID"` // 平仓明细ID(104+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
- TRADEID int64 `json:"tradeid" xorm:"TRADEID"` // 成交单号
- OPENTRADEID string `json:"opentradeid" xorm:"OPENTRADEID"` // 关联建仓成交单号
- TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
- MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
- GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid" binding:"required"` // 账号ID
- BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
- OPENPRICE float64 `json:"openprice" xorm:"OPENPRICE"` // 建仓价格
- HOLDERPRICE float64 `json:"holderprice" xorm:"HOLDERPRICE"` // 持仓价格
- CLOSEQTY int64 `json:"closeqty" xorm:"CLOSEQTY"` // 平仓数量
- CLOSEPRICE float64 `json:"closeprice" xorm:"CLOSEPRICE"` // 平仓价格
- CLOSETIME time.Time `json:"closetime" xorm:"CLOSETIME"` // 平仓时间
- TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
- OPTIONTYPE int32 `json:"optiontype" xorm:"OPTIONTYPE"` // 期权类型 - 1:认购(看涨) 2:认沽(看跌)
- PREMIUM float64 `json:"premium" xorm:"PREMIUM"` // 权利金 - [持仓单的权利金]
- ISPREEXERCISE int32 `json:"ispreexercise" xorm:"ISPREEXERCISE"` // 是否预申报- 0:否 1:是
- PREEXERCISEPRICE float64 `json:"preexerciseprice" xorm:"PREEXERCISEPRICE"` // 预申报价格
- ISCONFIRMEXERCISE int32 `json:"isconfirmexercise" xorm:"ISCONFIRMEXERCISE"` // 是否确认行权- 0:否 1:是
- OPENTRADEDATE string `json:"opentradedate" xorm:"OPENTRADEDATE"` // 建仓成交单交易日
- RELEASECREDIT float64 `json:"releasecredit" xorm:"RELEASECREDIT"` // 释放授信金额
- CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 平仓盈亏 - 按持仓价计算
- GOODSFULLNAME string `json:"goodsfullname" xorm:"GOODSFULLNAME"` // 商品名称
- OPENNUM string `json:"opennum" xorm:"OPENNUM"` // 开仓数量(带单位)
- CLOSENUM string `json:"closenum" xorm:"CLOSENUM"` // 平仓数量(带单位)
- REPAYEDDEPOSIT float64 `json:"repayeddeposit" xorm:"REPAYEDDEPOSIT"` // 已付定金
- RERESTOCKDEPOSIT float64 `json:"rerestockdeposit" xorm:"RERESTOCKDEPOSIT"` // 补充定金
- RECALLATEFEE float64 `json:"recallatefee" xorm:"RECALLATEFEE"` // 滞纳金
- PageEx `xorm:"extends"` // 页码信息
- }
- func (r *TradeCloseDetail) calc() {
- }
- func (r *TradeCloseDetail) buildSql() string {
- var sqlId utils.SQLVal = `
- select to_char(qt.opentradeid) OPENTRADEID,
- to_char(qt.closeid) CLOSEID,
- qt.accountid,
- qt.goodsid,
- qt.buyorsell,
- qt.openqty,
- qt.openprice,
- qt.closeqty,
- qt.closeprice,
- qt.closepl,
- qt.closetime,
- g.goodscode || '/' || g.goodsname "goodsfullname",
- qt.openqty * g.agreeunit || ' ' || en.enumdicname "opennum",
- qt.closeqty * g.agreeunit || ' ' || en.enumdicname "closenum",
- qt.repayeddeposit,
- qt.rerestockdeposit,
- qt.recallatefee
- from (select cd.opentradeid,
- cd.closeid,
- cd.accountid,
- cd.goodsid,
- hd.buyorsell,
- hd.openqty,
- hd.openprice,
- cd.closeqty,
- cd.closeprice,
- cd.closepl,
- cd.closetime,
- cdex.repayeddeposit,
- cdex.rerestockdeposit,
- cdex.recallatefee
- from trade_closedetail cd
- inner join trade_holderdetailex hd
- on hd.tradeid = cd.opentradeid
- and hd.accountid = cd.accountid
- left join trade_closedetailex cdex on cd.closeid = cdex.closeid
- where cd.accountid = %v
- union
- select cd.opentradeid,
- cd.closeid,
- cd.accountid,
- cd.goodsid,
- hd.buyorsell,
- hd.openqty,
- hd.openprice,
- cd.closeqty,
- cd.closeprice,
- cd.closepl,
- cd.closetime,
- cdex.repayeddeposit,
- cdex.rerestockdeposit,
- cdex.recallatefee
- from his_trade_closedetail cd
- inner join trade_holderdetailex hd
- on hd.tradeid = cd.opentradeid
- and hd.accountid = cd.accountid
- left join trade_closedetailex cdex on cd.closeid = cdex.closeid
- where cd.isvaliddata = 1
- and cd.accountid = %v) qt
- left join goods g
- on qt.goodsid = g.goodsid
- left join enumdicitem en
- on en.enumitemname = g.goodunitid
- and en.enumdiccode = 'goodsunit'
- order by qt.closeid desc
- `
- sqlId.FormatParam(r.ACCOUNTID, r.ACCOUNTID)
- sqlId.Page(r.Page, r.PageSize)
- return sqlId.String()
- }
- func (r *TradeCloseDetail) GetDataByPage() (interface{}, error, int, int, int) {
- sData := make([]TradeCloseDetail, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- total := 0
- for i := range sData {
- sData[i].calc()
- total = sData[i].Total
- }
- return sData, err, r.Page, r.PageSize, total
- }
|