presale.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "mtp2_if/db"
  6. "mtp2_if/utils"
  7. "time"
  8. )
  9. // PresaleAuction 预售竞拍
  10. type PresaleAuction struct {
  11. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  12. APPLYID string `json:"applyid" xorm:"APPLYID"` // 关联申请ID
  13. USERID int64 `json:"userid" xorm:"USERID"` // 卖方用户ID
  14. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 卖方账户ID
  15. RELATEDGOODSID int64 `json:"relatedgoodsid" xorm:"RELATEDGOODSID"` // 关联交易合约ID
  16. PRESALEQTY int64 `json:"presaleqty" xorm:"PRESALEQTY"` // 预售数量
  17. STARTTIME string `json:"starttime" xorm:"STARTTIME"` // 预售开始时间
  18. ENDTIME string `json:"endtime" xorm:"ENDTIME"` // 预售结束时间
  19. ATTACHMENTURL string `json:"attachmenturl" xorm:"ATTACHMENTURL"` // 缩略图片(1:1)
  20. PRESALEMODE int32 `json:"presalemode" xorm:"PRESALEMODE" form:"presalemode" binding:"required"` // 预售模式 - 1:一口价 2:大宗式竞拍 3:挂牌预售(HSBY) 4:定金预售(大宗) 5:定金预售(中签)
  21. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 预售市场ID - 根据预售模式选择市场
  22. REFPRICE float64 `json:"refprice" xorm:"REFPRICE"` // 参考价格[一口价]
  23. STARTPRICE float64 `json:"startprice" xorm:"STARTPRICE"` // 起拍价[大宗式竞拍]
  24. FLOORPRICE float64 `json:"floorprice" xorm:"FLOORPRICE"` // 底价[大宗式竞拍]
  25. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  26. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  27. RELATEDMARKETID int64 `json:"relatedmarketid" xorm:"RELATEDMARKETID"` // 关联交易合约市场ID
  28. PRESALEDQTY int64 `json:"presaledqty" xorm:"PRESALEDQTY"` // 已预售量(预售结束时更新) 71-委托时更新
  29. PRESALEDAMOUNT float64 `json:"presaledamount" xorm:"PRESALEDAMOUNT"` // 已预售总金额(预售结束时更新)71-委托时更新
  30. SELLSTATUS int32 `json:"sellstatus" xorm:"SELLSTATUS"` // 卖方处理状态 - 1:卖方头寸未处理 2:卖方头寸已处理
  31. GOODSDETAIL string `json:"goodsdetail" xorm:"GOODSDETAIL"` // 详情[大宗]
  32. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价[大宗]
  33. BUYMAXQTY int64 `json:"buymaxqty" xorm:"BUYMAXQTY"` // 购买上限 [71] - 0为不限
  34. PRESALEDEPOSITALGORITHM int32 `json:"presaledepositalgorithm" xorm:"PRESALEDEPOSITALGORITHM"` // 预售定金方式(48) - 1:比率 2:固定
  35. PRESALEDEPOSITVALUE float64 `json:"presaledepositvalue" xorm:"PRESALEDEPOSITVALUE"` // 预售定金设置值(48)
  36. PRESALESTATUS int32 `json:"presalestatus" xorm:"PRESALESTATUS" form:"presalestatus"` // 预售状态 - 1:未开始 2:预售中 3:已结束 4:已关闭
  37. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)(宽:1125)
  38. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)(2:1)
  39. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  40. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  41. TRANSFERDEPOSITRATIO float64 `json:"transferdepositratio" xorm:"TRANSFERDEPOSITRATIO"` // 转让定金比例(49)
  42. PROVIDERUSERID int64 `json:"provideruserid" xorm:"PROVIDERUSERID"` // 发售方用户ID(49)
  43. SELLNAME string `json:"sellname" xorm:"SELLNAME"` // [卖方名称]客户名称(企业名称)
  44. PRESALEMODESTR string `json:"presalemodestr" xorm:"PRESALEMODESTR"` // 预售模式 - 1:一口价 2:大宗式竞拍 3:挂牌预售(HSBY) 4:定金预售(大宗) 5:定金预售(中签)
  45. PRESALESTATUSSTR string `json:"presalestatusstr" xorm:"PRESALESTATUSSTR" form:"presalestatusstr"` // 预售状态 - 1:未开始 2:预售中 3:已结束 4:已关闭 (多个逗号分隔)
  46. PageEx `xorm:"extends"` // 页码信息
  47. }
  48. func (r *PresaleAuction) calc() {
  49. }
  50. func (r *PresaleAuction) buildSql() string {
  51. var sqlId utils.SQLVal = `
  52. select
  53. t.GOODSID,
  54. to_char(t.APPLYID) APPLYID,
  55. t.USERID,
  56. t.ACCOUNTID,
  57. t.RELATEDGOODSID,
  58. t.PRESALEQTY,
  59. to_char(t.STARTTIME, 'yyyy-mm-dd') STARTTIME,
  60. to_char(t.ENDTIME, 'yyyy-mm-dd') ENDTIME,
  61. t.ATTACHMENTURL,
  62. t.PRESALEMODE,
  63. t.MARKETID,
  64. t.REFPRICE,
  65. t.STARTPRICE,
  66. t.FLOORPRICE,
  67. t.CREATETIME,
  68. t.TRADEDATE,
  69. t.RELATEDMARKETID,
  70. t.PRESALEDQTY,
  71. t.PRESALEDAMOUNT,
  72. t.SELLSTATUS,
  73. t.GOODSDETAIL,
  74. t.TRADEPRICE,
  75. t.BUYMAXQTY,
  76. t.PRESALEDEPOSITALGORITHM,
  77. t.PRESALEDEPOSITVALUE,
  78. t.PRESALESTATUS,
  79. t.PICTUREURLS,
  80. t.BANNERPICURL,
  81. g.GOODSCODE,
  82. g.GOODSNAME,
  83. g.PRESALEPRICE,
  84. g.TRANSFERDEPOSITRATIO,
  85. g.PROVIDERUSERID,
  86. ui.CUSTOMERNAME SELLNAME,
  87. en.ENUMDICNAME PRESALEMODESTR
  88. from CPTrade_PresaleGoodsEx t
  89. inner join Goods g
  90. on t.relatedgoodsid = g.goodsid
  91. inner join userinfo ui
  92. on g.provideruserid = ui.userid
  93. left join enumdicitem en
  94. on en.enumdiccode = 'presalemode'
  95. and t.PresaleMode = en.enumitemname
  96. where 1=1
  97. `
  98. // sqlId.FormatParam(r.PRESALEMODE)
  99. sqlId.And("t.PRESALEMODE", r.PRESALEMODE)
  100. sqlId.AndEx("t.PRESALESTATUS", r.PRESALESTATUS, r.PRESALESTATUS != 0)
  101. if len(r.PRESALESTATUSSTR) > 0 {
  102. sqlId.Join(fmt.Sprintf(" and t.PRESALESTATUS in (%v)", r.PRESALESTATUSSTR))
  103. }
  104. sqlId.OrderBy("t.endtime")
  105. sqlId.Page(r.Page, r.PageSize)
  106. return sqlId.String()
  107. }
  108. func (r *PresaleAuction) GetDataByPage() (interface{}, error, int, int, int) {
  109. sData := make([]PresaleAuction, 0)
  110. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  111. total := 0
  112. for i := range sData {
  113. sData[i].calc()
  114. total = sData[i].Total
  115. }
  116. return sData, err, r.Page, r.PageSize, total
  117. }
  118. // PresaleDefault 转让详情
  119. type PresaleDefault struct {
  120. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid" binding:"required"` // 期货合约ID(自增ID SEQ_GOODS)
  121. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE"` // 期货合约代码(内部)
  122. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME"` // 期货合约名称
  123. PRESALEPRICE float64 `json:"presaleprice" xorm:"PRESALEPRICE"` // 发售价\订货价(49)
  124. TRANSFERDEPOSITRATIO float64 `json:"transferdepositratio" xorm:"TRANSFERDEPOSITRATIO"` // 转让定金比例(49)
  125. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图(逗号分隔)(2:1)
  126. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)(宽:1125)
  127. CUSTOMERNAME string `json:"sellname" xorm:"SELLNAME"` // [发售方]客户名称(企业名称)
  128. }
  129. func (r *PresaleDefault) calc() {
  130. }
  131. func (r *PresaleDefault) buildSql() string {
  132. var sqlId utils.SQLVal = `
  133. select
  134. g.GOODSID,
  135. g.GOODSCODE,
  136. g.GOODSNAME,
  137. g.PRESALEPRICE,
  138. g.TRANSFERDEPOSITRATIO,
  139. cp.BANNERPICURL,
  140. cp.PICTUREURLS,
  141. ui.customername "SELLNAME"
  142. from goods g
  143. left join CPTrade_PresaleGoodsEx cp
  144. on g.goodsid = cp.relatedgoodsid
  145. and cp.presalestatus = 2
  146. inner join userinfo ui
  147. on g.provideruserid = ui.userid
  148. where g.goodsid = %v
  149. `
  150. sqlId.FormatParam(r.GOODSID)
  151. return sqlId.String()
  152. }
  153. // GetDataEx 从数据库中查询数据
  154. func (r *PresaleDefault) GetDataEx() (interface{}, error) {
  155. e := db.GetEngine()
  156. s := e.SQL(r.buildSql())
  157. sData := make([]PresaleDefault, 0)
  158. if err := s.Find(&sData); err != nil {
  159. return nil, err
  160. }
  161. // for i := range sData {
  162. // sData[i].calc()
  163. // }
  164. if len(sData) > 0 {
  165. return sData[0], nil
  166. } else {
  167. return nil, errors.New("无数据")
  168. }
  169. }