market.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  1. package models
  2. import (
  3. "fmt"
  4. "mtp2_if/db"
  5. "strconv"
  6. "time"
  7. )
  8. // Market 市场表
  9. type Market struct {
  10. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID正常5位,前三位固定:两位表示交易模式, 一位表示交易属性(1:收益权,2:所有权) 其它特殊市场:0-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
  11. MARKETNAME string `json:"marketname" xorm:"MARKETNAME"` // 市场名称
  12. EXCHAREAID int32 `json:"exchareaid" xorm:"EXCHAREAID"` // 所属交易所,可以没有
  13. MARKETTYPE int32 `json:"markettype" xorm:"MARKETTYPE"` // 市场类型- 1:非交易服务 2:交易服务
  14. TRADEMODE int32 `json:"trademode" xorm:"TRADEMODE"` // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
  15. TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性 - 1:收益权(可做空) 2:所有权(不可做空) 3:期权 4:现货 5:参考行情 6:通道交易 7:币交易 8:场外期权
  16. OPENMETHOD int32 `json:"openmethod" xorm:"OPENMETHOD"` // 开盘模式 - 0 自动 1手动
  17. RECKONPRICEALGORITHM int32 `json:"reckonpricealgorithm" xorm:"RECKONPRICEALGORITHM"` // 结算价算法: 1:最后多少笔成交价加权平均 2:最后多少秒成交价加权平均 3:全天加权平均 4:最后一口价 5.买一价 6.卖一价 7.买一卖一均价 8.外部结算价
  18. RECKONPRICEPARAM int32 `json:"reckonpriceparam" xorm:"RECKONPRICEPARAM"` // 结算价参数
  19. MARKETSTATUS int32 `json:"marketstatus" xorm:"MARKETSTATUS"` // 生效状态(ValidStatus枚举): 1:待生效 2:正常 3:注销
  20. MARKETSERVICEID int32 `json:"marketserviceid" xorm:"MARKETSERVICEID"` // 市场服务ID
  21. MARGINFORMULA int32 `json:"marginformula" xorm:"MARGINFORMULA"` // 持仓保证金公式 - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
  22. PERFORMANCETEMPID int64 `json:"performancetempid" xorm:"PERFORMANCETEMPID"` // 履约计划模板ID - 作废
  23. CLEARINTERVAL int32 `json:"clearinterval" xorm:"CLEARINTERVAL"` // 待开市间隔(交易市场开盘前多久发市场待开市信号(单位分钟))
  24. MATCHERMODE int32 `json:"matchermode" xorm:"MATCHERMODE"` // 指定对手模式[仓单贸易模式专用] - 1:任意对手 - 作废
  25. RECKONORDER int32 `json:"reckonorder" xorm:"RECKONORDER"` // 结算顺序
  26. CANPREEXERCISE int32 `json:"canpreexercise" xorm:"CANPREEXERCISE"` // [期权]是否可预申报- 0:否 1:是
  27. CANGOODSEXERCISE int32 `json:"cangoodsexercise" xorm:"CANGOODSEXERCISE"` // [期权]是否可现货行权- 0:否 1:是 \ 是否交收
  28. GOODSTYPE int32 `json:"goodstype" xorm:"GOODSTYPE"` // 商品类型 - 1:交易商品 2:仓单商品
  29. ROLEPRIORITYTYPE int32 `json:"roleprioritytype" xorm:"ROLEPRIORITYTYPE"` // 角色优先类型 - 1:无 2:报价商优先 3:非报价商优先 [16:挂牌点选]
  30. ISRECORDSOURCE int32 `json:"isrecordsource" xorm:"ISRECORDSOURCE"` // 是否记录成交源 - 0:不记录 1:记录 [所有权]
  31. MARGINFORMULA2 int32 `json:"marginformula2" xorm:"MARGINFORMULA2"` // 持仓保证金公式(仅受托竞价) - 1:双边收 2:净头寸收 3:大小边差异收 4:大边收 5:卖持仓收(仅期权)
  32. HASWR int32 `json:"haswr" xorm:"HASWR"` // [竞拍]是否需要仓单 - 0:不需要 1:需要- 作废
  33. PREMIUMQUOTEMODE int32 `json:"premiumquotemode" xorm:"PREMIUMQUOTEMODE"` // 权利金报价方式 - 1:自动 2:手动
  34. CANGOODSEXERCISETYPE int32 `json:"cangoodsexercisetype" xorm:"CANGOODSEXERCISETYPE"` // 可现货行权期权类型 - 1:认购 2认沽 3:认购认沽 [CanGoodsExercise = 1时可设置]
  35. CANACCEPTQUOTE int32 `json:"canacceptquote" xorm:"CANACCEPTQUOTE"` // 确认行权是否接收行情 - 0:不接受 1:接受 [可确认权的挂牌期权市场可配置]
  36. CANMUTISTAGE int32 `json:"canmutistage" xorm:"CANMUTISTAGE"` // 是否可多段运行 – 0:不可 1:可 [挂牌期权]
  37. ISDEDUCTMARGIN int32 `json:"isdeductmargin" xorm:"ISDEDUCTMARGIN"` // 竞拍违约是否扣除保证金[竞拍-降价式] - 0:不扣 1:扣除
  38. CANMANUALQUOTESTRIKE int32 `json:"canmanualquotestrike" xorm:"CANMANUALQUOTESTRIKE"` // 是否可手动报行权价- 0:否 1:是 [期权]
  39. TRADETYPE int32 `json:"tradetype" xorm:"TRADETYPE"` // 下单方式[通道交易] - 1:直接转单 2:净头寸下单
  40. PENDINGFLAG int32 `json:"pendingflag" xorm:"PENDINGFLAG"` // 待开市时间标识[通道交易-对冲] - 0:当日 1:上日
  41. PENDINGTIME string `json:"pendingtime" xorm:"PENDINGTIME"` // 待开市时间[通道交易-对冲](HH:mm)
  42. RECKONTIME string `json:"reckontime" xorm:"RECKONTIME"` // 结算时间[通道交易-对冲](HH:mm)
  43. HASTRADECREDIT int32 `json:"hastradecredit" xorm:"HASTRADECREDIT"` // 是否交易授信[做市收益权] - 0:不授信 1:授信
  44. CONTRACTTMP string `json:"contracttmp" xorm:"CONTRACTTMP"` // 合同模板[荷兰式][竞价式][仓单贸易]
  45. HASREBATE int32 `json:"hasrebate" xorm:"HASREBATE"` // 是否返利[竞价式] 0:不返,1:返利 -- 根据系统参数088显示或隐藏
  46. REBATERATIO float64 `json:"rebateratio" xorm:"REBATERATIO"` // 返利比率[竞价式]
  47. OTCUSERID int64 `json:"otcuserid" xorm:"OTCUSERID"` // 场外期权做市商[场外期权]
  48. OUTERSYNCTIME string `json:"outersynctime" xorm:"OUTERSYNCTIME"` // 外部同步时间点(h24:mi:ss)[场外期权]
  49. AUCTIONWRTYPE int32 `json:"auctionwrtype" xorm:"AUCTIONWRTYPE"` // 仓单类型(现货交易) - 1:无仓单 2:有仓单 3;有无仓单均可
  50. ISRELEASEMARGIN int32 `json:"isreleasemargin" xorm:"ISRELEASEMARGIN"` // 成交参与保证金是否释放[竞价式] - 0:不释放 1释放
  51. SELLLISTINGAUDITFLAG int32 `json:"selllistingauditflag" xorm:"SELLLISTINGAUDITFLAG"` // 卖挂牌是否需要审核(仓单贸易) - 0:不需要 1:需要
  52. TRADEMARKETTYPE int32 `json:"trademarkettype" xorm:"TRADEMARKETTYPE"` // 交易市场类型 - 1:合约市场 2:外部市场 3:仓单市场
  53. PAYLATERFLAG int32 `json:"paylaterflag" xorm:"PAYLATERFLAG"` // 是否支持后付 - 0:不支持 1;支持 - [挂牌点选 所有权、预售挂牌支持]
  54. ISUPDATERECKONPRICE int32 `json:"isupdatereckonprice" xorm:"ISUPDATERECKONPRICE"` // 输入结算价标识 - 0:系统生成 1:手工输入(自动) 2:手工输入(手动)
  55. UPDATERECKONPRICEINTERVAL int32 `json:"updatereckonpriceinterval" xorm:"UPDATERECKONPRICEINTERVAL"` // 输入结算价时长(分钟) [1:手工输入(自动)]
  56. FINANCEMARKETID int32 `json:"financemarketid" xorm:"FINANCEMARKETID"` // 融资回购市场ID [仓单贸易]
  57. FORCECLOSEMODE int32 `json:"forceclosemode" xorm:"FORCECLOSEMODE"` // 定期强平方式 - 1:到期结 2:日结 3:周结 4:月结 [收益权] 枚举-forceCloseMode
  58. FORCECLOSEVALUE int64 `json:"forceclosevalue" xorm:"FORCECLOSEVALUE"` // 定期强平参数 [收益权](周结、月结)
  59. DELIVERYMODE int32 `json:"deliverymode" xorm:"DELIVERYMODE"` // 交收方式(50模式) 1:配对交收 2:强平日交收
  60. ISDELIVERYSELLERCANAPPLY int32 `json:"isdeliverysellercanapply" xorm:"ISDELIVERYSELLERCANAPPLY"` // 卖方是否可申请交收(50模式 - DeliveryMode = 2时) - 0:否 1:是
  61. ISDELIVERYBUYERPAYONLINE int32 `json:"isdeliverybuyerpayonline" xorm:"ISDELIVERYBUYERPAYONLINE"` // 交收买方是否线上支付(50模式) - 0:否 1:是
  62. RISKCONTROLMODE int32 `json:"riskcontrolmode" xorm:"RISKCONTROLMODE"` // 风控方式(52模式) 1:按单风控 2:按账户风控
  63. }
  64. // TableName is MARKET
  65. func (Market) TableName() string {
  66. return "MARKET"
  67. }
  68. // Goodsgroup 商品组表 - 品种(通道交易\场外期权)
  69. type Goodsgroup struct {
  70. Goodsgroupid int64 `json:"goodsgroupid" xorm:"'GOODSGROUPID'" binding:"required"` // 商品组ID(自增ID)
  71. Goodsgroupname string `json:"goodsgroupname" xorm:"'GOODSGROUPNAME'" binding:"required"` // 商品组名称
  72. Goodsgroupstatus int64 `json:"goodsgroupstatus" xorm:"'GOODSGROUPSTATUS'" binding:"required"` // 商品组状态 - 1:正常 2:注销
  73. Marketid int64 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 所属市场ID
  74. Createtime time.Time `json:"-" xorm:"'CREATETIME'"` // 创建时间
  75. Creatorid int64 `json:"-" xorm:"'CREATORID'"` // 创建人
  76. Modifytime time.Time `json:"-" xorm:"'MODIFYTIME'"` // 修改时间
  77. Modifierid int64 `json:"-" xorm:"'MODIFIERID'"` // 修改人
  78. Quotesourcegroupid int64 `json:"quotesourcegroupid" xorm:"'QUOTESOURCEGROUPID'"` // 所属行情源分组ID[参考行情市场用\通道交易]
  79. Outergroupcode string `json:"outergroupcode" xorm:"'OUTERGROUPCODE'"` // 外部商品组代码[通道交易]
  80. Canshort int64 `json:"canshort" xorm:"'CANSHORT'"` // 是否允许做空[通道交易] - 0:不能做空 1:可以做空
  81. Exexchangeid int64 `json:"exexchangeid" xorm:"'EXEXCHANGEID'"` // 外部交易所ID[通道交易]
  82. Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 报价货币ID
  83. Goodunitid int64 `json:"goodunitid" xorm:"'GOODUNITID'"` // 报价单位ID
  84. Agreeunit float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约单位
  85. Decimalplace int64 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 报价小数位
  86. Quoteminunit int64 `json:"quoteminunit" xorm:"'QUOTEMINUNIT'"` // 行情最小变动单位 [整数,报价小数位一起使用]
  87. Innerdealmode int64 `json:"innerdealmode" xorm:"'INNERDEALMODE'"` // 内部成交方式[通道交易] - 1:净头寸 2:开平 3:平今
  88. Outerdealmode int64 `json:"outerdealmode" xorm:"'OUTERDEALMODE'"` // 外部成交方式[通道交易]- 1:净头寸 2:开平 3:平今
  89. Syncgoodsqty int64 `json:"syncgoodsqty" xorm:"'SYNCGOODSQTY'"` // 同步合约数[通道交易-投资管理用] - 0表示不限
  90. Closepricemode int64 `json:"closepricemode" xorm:"'CLOSEPRICEMODE'"` // 强平价格方式 - 1:市价 2:最新价 3:涨跌停(未实现)
  91. Closepriceparam float64 `json:"closepriceparam" xorm:"'CLOSEPRICEPARAM'"` // 强平最新价浮动比例 - 方式为2时使用
  92. Qtydecimalplace int64 `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  93. Exercisetype int64 `json:"exercisetype" xorm:"'EXERCISETYPE'"` // 行权类型[场外期权]-1:欧式期权 2:美式期权
  94. Premiumdecimalplace int64 `json:"premiumdecimalplace" xorm:"'PREMIUMDECIMALPLACE'"` // 权利金小数位[场外期权]
  95. Premiumspreadalgorithm int64 `json:"premiumspreadalgorithm" xorm:"'PREMIUMSPREADALGORITHM'"` // 权利金点差方式[场外期权] 1:比率 2:固定
  96. Premiumspreadvalue float64 `json:"premiumspreadvalue" xorm:"'PREMIUMSPREADVALUE'"` // 权利金点差值[场外期权]
  97. Isbuylimited int64 `json:"isbuylimited" xorm:"'ISBUYLIMITED'"` // 是否限制建仓量 - 0:不限制 1:限制
  98. Quotegear int64 `json:"quotegear" xorm:"'QUOTEGEAR'"` // 行情档位(1-10)
  99. Quoterid int64 `json:"quoterid" xorm:"'QUOTERID'"` // 报价商ID[场外期权]
  100. GROUPCATEGROYID int32 `json:"groupcategroyid" xorm:"GROUPCATEGROYID"` // 品种分类ID
  101. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构
  102. MAINGOODSID int64 `json:"maingoodsid" xorm:"MAINGOODSID"` // 主力合约ID
  103. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  104. Goodsgroupnameen string `json:"goodsgroupnameen" xorm:"'GOODSGROUPNAMEEN'"` // 商品组名称(英文)
  105. Goodsgroupnametw string `json:"goodsgroupnametw" xorm:"'GOODSGROUPNAMETW'"` // 商品组名称(繁体)
  106. Goodsgroupnameth string `json:"goodsgroupnameth" xorm:"'GOODSGROUPNAMETH'"` // 商品组名称(泰文)
  107. Goodsgroupnamevi string `json:"goodsgroupnamevi" xorm:"'GOODSGROUPNAMEVI'"` // 商品组名称(越南)
  108. }
  109. // TableName is GOODSGROUP
  110. func (Goodsgroup) TableName() string {
  111. return "GOODSGROUP"
  112. }
  113. // Externalexchange 外部交易所表
  114. type Externalexchange struct {
  115. Autoid uint64 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // AutoID - SEQ_EXTERNALEXCHANGE
  116. Exexchangecode string `json:"exexchangecode" xorm:"'EXEXCHANGECODE'"` // 外部交易所代码
  117. Exexchangename string `json:"exexchangename" xorm:"'EXEXCHANGENAME'"` // 外部交易所名称(简称)
  118. Updatetime time.Time `json:"-" xorm:"'UPDATETIME'"` // 更新时间
  119. Quotegear uint32 `json:"quotegear" xorm:"'QUOTEGEAR'"` // 行情档位(1-10)
  120. Showbrokerflag uint32 `json:"showbrokerflag" xorm:"'SHOWBROKERFLAG'"` // 是否显示买卖经纪盘 - 0:不显示 1:显示
  121. Exchangefullname string `json:"exchangefullname" xorm:"'EXCHANGEFULLNAME'"` // 外部交易所全称
  122. Ismarketprice uint32 `json:"ismarketprice" xorm:"'ISMARKETPRICE'"` // 是否支持市价 - 0:不支持 1:支持
  123. }
  124. // TableName is EXTERNALEXCHANGE
  125. func (Externalexchange) TableName() string {
  126. return "EXTERNALEXCHANGE"
  127. }
  128. // Marketrun 系统/市场运行参数表
  129. type Marketrun struct {
  130. Marketid int32 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 市场ID
  131. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'" binding:"required"` // 当前交易日(服务) 资金结算完成即变更,供交易服务使用
  132. Tradedate2 string `json:"tradedate2" xorm:"'TRADEDATE2'" binding:"required"` // 当前交易日(行情) 在第一个市场待开市时变更为TradeDate,供行情及终端系统使用
  133. Nexttradedate string `json:"nexttradedate" xorm:"'NEXTTRADEDATE'" binding:"required"` // 下一交易日
  134. Runstatus int32 `json:"runstatus" xorm:"'RUNSTATUS'" binding:"required"` // 运行状态 - 0:初始化 1:待开市 2:开市 3:休市 4:手工休市 5:闭市 6:确认行权开始 7:确认行权结束 10:日终处理开始 11:日终处理成功 12:日终处理失败 13基础服务结算开始 14基础服务结算成功 23.资金结算开始 24.资金结算成功 25.资金结算失败 26.系统结算成功 27.系统结算失败 28.盘中处理开始 29.盘中处理成功 30.盘中处理失败 31.资金结算开始(内) 32.资金结算成功(内) 33.资金结算失败(内) 40.签到开始 41.签到成功 42.签到部份成功 43.签到失败 44.签退开始 45.签退成功 46.签退部份成功 47.签退失败 48.对账开始 49.对账成功 50.对账失败 51.清算开始 52.清算成功 53.清算失败 54.清算部分成功 55. 系统结算开始 62.今日免清算
  135. Reckonflag int32 `json:"-" xorm:"'RECKONFLAG'" binding:"required"` // 结算标识 - 0: 停止结算 1: 正常(管理端控制此字段,交易服务根据此字段判断是否做结算)
  136. Manualflag int32 `json:"-" xorm:"'MANUALFLAG'"` // 手动开市标志- 0:否 1:是 (市场为手动时,是否触发了手动开市标志)
  137. Clearquoteflag int32 `json:"-" xorm:"'CLEARQUOTEFLAG'"` // 行情清盘标志- 1:未发送 2:已发送 3:已回复
  138. Updatetime time.Time `json:"-" xorm:"'UPDATETIME'"` // 更新时间
  139. Pretradedate string `json:"pretradedate" xorm:"'PRETRADEDATE'"` // 上一交易日
  140. Sectionid int32 `json:"sectionid" xorm:"'SECTIONID'"` // 时间段号[多时段时用]
  141. Afternexttradedate string `json:"afternexttradedate" xorm:"'AFTERNEXTTRADEDATE'"` // 下下交易日
  142. Machinedate string `json:"-" xorm:"'MACHINEDATE'"` // 机器时间
  143. Lastreckondate string `json:"lastreckondate" xorm:"'LASTRECKONDATE'"` // 最新交易日(结算成功)
  144. StartTime time.Time `json:"startTime" xorm:"-"` // 开始时间
  145. EndTime time.Time `json:"endTime" xorm:"-"` // 结束时间
  146. }
  147. // TableName is MARKETRUN
  148. func (Marketrun) TableName() string {
  149. return "MARKETRUN"
  150. }
  151. // Marketrunstepdetail 市场运行时间段明细
  152. type Marketrunstepdetail struct {
  153. Autoid int64 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // 自增ID
  154. Marketid int32 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 市场ID -- 其它特殊如下 0-系统 1-交割服务 2-账户服务3-履约服务 4-仓单服务 5-积分服务 6-银行服务
  155. Tradeweekday int32 `json:"tradeweekday" xorm:"'TRADEWEEKDAY'" binding:"required"` // 交易日归属 - 0:星期天、1:星期一、2:星期二、3:星期三、4:星期四、5:星期五、6:星期六
  156. Sectionid int32 `json:"sectionid" xorm:"'SECTIONID'" binding:"required"` // 从 1 开始 往下编
  157. Runstep int32 `json:"runstep" xorm:"'RUNSTEP'" binding:"required"` // 运行阶段 - 1:集合竞价、 2:连续竞价(交割) 3:-- 4:确认行权\交收时段\(补充交收
  158. Startweekday int32 `json:"startweekday" xorm:"'STARTWEEKDAY'" binding:"required"` // 开市时间
  159. Starttime string `json:"starttime" xorm:"'STARTTIME'" binding:"required"` // 起始时间(HH:mm)
  160. Endweekday int32 `json:"endweekday" xorm:"'ENDWEEKDAY'" binding:"required"` // 休市时间
  161. Endtime string `json:"endtime" xorm:"'ENDTIME'" binding:"required"` // 结束时间(HH:mm)
  162. Startflag int32 `json:"startflag" xorm:"'STARTFLAG'"` // 开始日标识 - (-1:上日 0:当日 1:次日 )
  163. Endflag int32 `json:"endflag" xorm:"'ENDFLAG'"` // 结束日标识 - (-1:上日 0:当日 1:次日 )
  164. }
  165. // TableName is MARKETRUNSTEPDETAIL
  166. func (Marketrunstepdetail) TableName() string {
  167. return "TODAY_MARKETRUNSTEPDETAIL"
  168. }
  169. // Quotesourcegrouprunstep 行情源分组开休市计划明细
  170. type Quotesourcegrouprunstep struct {
  171. Groupid int32 `json:"groupid" xorm:"'GROUPID'" binding:"required"` // 分组ID
  172. Tradeweekday int32 `json:"tradeweekday" xorm:"'TRADEWEEKDAY'" binding:"required"` // 交易日归属 - 0:星期天、1:星期一、2:星期二、3:星期三、4:星期四、5:星期五、6:星期六
  173. Sectionid int32 `json:"sectionid" xorm:"'SECTIONID'" binding:"required"` // 从 1 开始 往下编 [0为系统清盘、结算时间] SectionId = 0时,开始时间=清盘时间 开始周几= 清盘周几, 结束时间=结算时间 结束周几=结算周几
  174. Runstep int32 `json:"runstep" xorm:"'RUNSTEP'"` // 运行阶段 - 2:连续交易
  175. Startweekday int32 `json:"startweekday" xorm:"'STARTWEEKDAY'"` // 起始周几
  176. Starttime string `json:"starttime" xorm:"'STARTTIME'"` // 起始时间(HH:mm)
  177. Endweekday int32 `json:"endweekday" xorm:"'ENDWEEKDAY'"` // 结束周几
  178. Endtime string `json:"endtime" xorm:"'ENDTIME'"` // 结束时间(HH:mm)
  179. Startflag int32 `json:"startflag" xorm:"'STARTFLAG'"` // 开始日标识 - (-1:上日 0:当日 1:次日 )
  180. Endflag int32 `json:"endflag" xorm:"'ENDFLAG'"` // 结束日标识 - (-1:上日 0:当日 1:次日 )
  181. }
  182. // TableName is QUOTESOURCEGROUPRUNSTEP
  183. func (Quotesourcegrouprunstep) TableName() string {
  184. return "QUOTESOURCEGROUPRUNSTEP"
  185. }
  186. // GetMarket 获取市场信息
  187. // 参数 marketID int 市场ID
  188. // 返回值 *Market 市场信息
  189. // 返回值 error 错误
  190. func GetMarket(marketID int) (*Market, error) {
  191. engine := db.GetEngine()
  192. var market Market
  193. has, err := engine.Where("MARKETID = ?", marketID).Get(&market)
  194. if err != nil {
  195. return nil, err
  196. }
  197. if has {
  198. return &market, nil
  199. }
  200. return nil, nil
  201. }
  202. // GetMarketByGoodsCode 通过商品代码获取市场信息
  203. // 参数 goodsCode string 商品代码
  204. // 返回值 *Market 市场信息
  205. // 返回值 error 错误
  206. func GetMarketByGoodsCode(goodsCode string) (*Market, error) {
  207. engine := db.GetEngine()
  208. var market Market
  209. has, err := engine.Join("LEFT", "GOODS", "GOODS.MARKETID = MARKET.MARKETID").
  210. Where("upper(GOODS.GOODSCODE) = ?", goodsCode).Get(&market)
  211. if err != nil {
  212. return nil, err
  213. }
  214. if has {
  215. return &market, nil
  216. }
  217. return nil, nil
  218. }
  219. // GetMarketByGoodsID 通过商品ID获取市场信息
  220. func GetMarketByGoodsID(goodsID int) (*Market, error) {
  221. engine := db.GetEngine()
  222. var market Market
  223. has, err := engine.Join("LEFT", "GOODS", "GOODS.MARKETID = MARKET.MARKETID").
  224. Where("GOODS.GOODSID = ?", goodsID).Get(&market)
  225. if err != nil {
  226. return nil, err
  227. }
  228. if has {
  229. return &market, nil
  230. }
  231. return nil, nil
  232. }
  233. // GetMarketsByTradeMode 通用交易模式获取市场信息
  234. func GetMarketsByTradeMode(tradeMode int) ([]Market, error) {
  235. markets := make([]Market, 0)
  236. if err := db.GetEngine().Where("TRADEMODE = ?", tradeMode).Find(&markets); err != nil {
  237. return nil, err
  238. }
  239. return markets, nil
  240. }
  241. // GetMarkets 获取所有市场信息
  242. // 返回值 []Market 市场信息
  243. // 返回值 error 错误
  244. func GetMarkets() ([]Market, error) {
  245. engine := db.GetEngine()
  246. markets := make([]Market, 0)
  247. if err := engine.Find(&markets); err != nil {
  248. return nil, err
  249. }
  250. return markets, nil
  251. }
  252. // GetMarketRun 获取目标市场运行参数信息
  253. // 参数 marketID int 市场ID
  254. // 返回值 *Marketrun 市场运行参数信息
  255. // 返回值 error 错误
  256. func GetMarketRun(marketID int) (*Marketrun, error) {
  257. engine := db.GetEngine()
  258. var marketRun Marketrun
  259. has, err := engine.Where("MARKETID = ?", marketID).Get(&marketRun)
  260. if err != nil {
  261. return nil, err
  262. }
  263. if has {
  264. return &marketRun, nil
  265. }
  266. return nil, nil
  267. }
  268. // GetMarketRuns 获取目标市场运行参数信息
  269. func GetMarketRuns(marketID int) ([]Marketrun, error) {
  270. engine := db.GetEngine()
  271. marketRuns := make([]Marketrun, 0)
  272. session := engine.Table("MARKETRUN")
  273. if marketID > 0 {
  274. session = session.Where("MARKETID = ?", marketID)
  275. }
  276. if err := session.Find(&marketRuns); err != nil {
  277. return nil, err
  278. }
  279. return marketRuns, nil
  280. }
  281. // GetMarketRuns 通用TradeMode获取目标市场运行参数信息
  282. func GetMarketRunsByTradeMode(tradeMode int) ([]Marketrun, error) {
  283. engine := db.GetEngine()
  284. marketRuns := make([]Marketrun, 0)
  285. if err := engine.Table("MARKETRUN R").Join("INNER", "MARKET M", "M.MARKETID = R.MARKETID").Where("M.TRADEMODE = ?", tradeMode).Find(&marketRuns); err != nil {
  286. return nil, err
  287. }
  288. return marketRuns, nil
  289. }
  290. // FindQuoteSourceGroupRunSteps 获取行情源分组开休市计划明细信息
  291. func FindQuoteSourceGroupRunSteps(goods Goods) ([]Quotesourcegrouprunstep, error) {
  292. // if market.Trademode != 15 {
  293. // return nil, errors.New("目标市场非外部市场")
  294. // }
  295. engine := db.GetEngine()
  296. runSteps := make([]Quotesourcegrouprunstep, 0)
  297. // if err := engine.Join("INNER", "GOODSGROUP", "GOODSGROUP.GOODSGROUPID = QUOTESOURCEGROUPRUNSTEP.GROUPID").
  298. // Join("INNER", "MARKET", "MARKET.MARKETID = GOODSGROUP.MARKETID").
  299. // Where("QUOTESOURCEGROUPRUNSTEP.SECTIONID <> 0 and MARKET.MARKETID = ?", market.Marketid).Find(&runSteps); err != nil {
  300. // return nil, err
  301. // }
  302. // 这里要注意了:以后写SQL应该要先预估一下结果的数量,从而尽量优化
  303. if err := engine.Table("QUOTESOURCEGROUPRUNSTEP T").
  304. Join("INNER", "GOODSGROUP GG", "GG.QUOTESOURCEGROUPID = T.GROUPID").
  305. Where("GG.GOODSGROUPID = ?", goods.Goodsgroupid).
  306. And("T.SECTIONID <> 0").
  307. Find(&runSteps); err != nil {
  308. return nil, err
  309. }
  310. return runSteps, nil
  311. }
  312. // FindMarketRunStepDetails 获取市场运行时间段明细
  313. // 参数 marketID int 市场ID
  314. // 返回值 Marketrunstepdetail 市场运行时间段明细
  315. // 返回值 error 错误
  316. func FindMarketRunStepDetails(marketID int) ([]Marketrunstepdetail, error) {
  317. engine := db.GetEngine()
  318. runSteps := make([]Marketrunstepdetail, 0)
  319. if err := engine.Where("MARKETID = ?", marketID).Find(&runSteps); err != nil {
  320. return nil, err
  321. }
  322. return runSteps, nil
  323. }
  324. // GetMarketsByLoginID 获取登录账号有权限的市场列表
  325. func GetMarketsByLoginID(loginID int) ([]Market, error) {
  326. engine := db.GetEngine()
  327. // 账户下有权限的市场ID列表
  328. marketIDs := make([]int, 0)
  329. markets := make([]Market, 0)
  330. // 获取账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 (目前可能登录交易端的账号类型为 2 5)
  331. userAccount := new(Useraccount)
  332. has, err := engine.Join("INNER", "LOGINACCOUNT", "USERACCOUNT.UserID = LOGINACCOUNT.UserID").
  333. Where("LOGINACCOUNT.LoginID = ?", loginID).
  334. Get(userAccount)
  335. if err != nil || !has {
  336. return nil, err
  337. }
  338. if userAccount.Usertype == 5 || userAccount.Usertype == 3 {
  339. // 如果账户类型为5(投资者),则需要通过其所属经济会员来获取市场权限(表:AreaRoleMarket, 条件:对应市场状态为正常;角色类型:经济会员)
  340. // !注意:这里不知道为何不能使用别名,否则会报500错误
  341. if err := engine.Table("AREAROLEMARKET").
  342. Cols("AREAROLEMARKET.MARKETID").
  343. Join("INNER", "MARKET", "MARKET.MARKETID = AREAROLEMARKET.MARKETID").
  344. Where("MARKET.MARKETSTATUS = 2 and AREAROLEMARKET.ROLETYPE = 7 and AREAROLEMARKET.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
  345. return nil, err
  346. }
  347. } else {
  348. // 非投资者账号直接通过资金账号获取市场权限(表:TAAccountMarket)
  349. var taAccounts []string // 账户下所有资金账户
  350. // 先要获取当前登录账户对应的资金账户;如果为外部子资金账号(TaAccount.TaAccountType = 1),则使用TaAccount.FromAccountID来获取市场权限
  351. type taAccount struct {
  352. AccountID int `xorm:"ACCOUNTID"`
  353. TaAccountType int `xorm:"TAACCOUNTTYPE"`
  354. FromAccountID int `xorm:"FROMACCOUNTID"`
  355. }
  356. datas := make([]taAccount, 0)
  357. if err := engine.Table("LOGINTAACCOUNT").
  358. Join("INNER", "TAACCOUNT", "LOGINTAACCOUNT.ACCOUNTID = TAACCOUNT.ACCOUNTID").
  359. Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
  360. Where("LOGINTAACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
  361. return nil, err
  362. }
  363. // 如果一条记录都没有(未配置自营会员资金账户)则直接通过资金账户表获取
  364. if len(datas) == 0 {
  365. // 这里要注意,TaAccount表与LoginAccount表关联时,要使用TaAccount.RelatedUserID
  366. if err := engine.Table("TAACCOUNT").
  367. Join("INNER", "LOGINACCOUNT", "TAACCOUNT.RELATEDUSERID = LOGINACCOUNT.USERID").
  368. Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
  369. Where("LOGINACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
  370. return nil, err
  371. }
  372. }
  373. for _, v := range datas {
  374. if v.TaAccountType == 1 {
  375. // 外部资金账户使用TaAccount.FromAccountID来获取市场权限
  376. taAccounts = append(taAccounts, strconv.Itoa(v.FromAccountID))
  377. } else {
  378. taAccounts = append(taAccounts, strconv.Itoa(v.AccountID))
  379. }
  380. }
  381. // 获取资金账户对应的市场权限(有权限的市场ID)
  382. if len(taAccounts) > 0 {
  383. // taAccountStr := strings.Join(taAccounts, ",")
  384. if err := engine.Table("TAACCOUNTMARKET").
  385. Join("INNER", "MARKET", "MARKET.MARKETID = TAACCOUNTMARKET.MARKETID").
  386. Cols("TAACCOUNTMARKET.MARKETID").
  387. In("TAACCOUNTMARKET.ACCOUNTID", taAccounts).
  388. And("MARKET.MARKETSTATUS = 2").Find(&marketIDs); err != nil {
  389. return nil, err
  390. }
  391. }
  392. }
  393. // 获取市场信息
  394. if len(marketIDs) > 0 {
  395. if err := engine.Table("MARKET M").In("M.MARKETID", marketIDs).Find(&markets); err != nil {
  396. return nil, err
  397. }
  398. }
  399. return markets, nil
  400. }
  401. // GetExternalexchangeByGoodsGroupID 通过商品组ID获取对应交易所信息
  402. func GetExternalexchangeByGoodsGroupID(goodsGroupID int) (*Externalexchange, error) {
  403. rst := make([]Externalexchange, 0)
  404. if err := db.GetEngine().Table("EXTERNALEXCHANGE EX").
  405. Join("INNER", "GOODSGROUP GG", "GG.EXEXCHANGEID = EX.AUTOID").
  406. Where("GG.GOODSGROUPID = ?", goodsGroupID).
  407. Find(&rst); err != nil {
  408. return nil, err
  409. }
  410. if len(rst) == 0 {
  411. return nil, nil
  412. }
  413. return &rst[0], nil
  414. }
  415. // GetGoodsgroupInMarketIDs 通过市场ID列表获取对应的商品组信息
  416. func GetGoodsgroupInMarketIDs(marketIDs []int) ([]Goodsgroup, error) {
  417. goodsgroups := make([]Goodsgroup, 0)
  418. if err := db.GetEngine().In("MARKETID", marketIDs).And("GOODSGROUPSTATUS=1").
  419. OrderBy("GROUPCATEGROYID").OrderBy("GOODSGROUPNAME").
  420. Find(&goodsgroups); err != nil {
  421. return nil, err
  422. }
  423. return goodsgroups, nil
  424. }
  425. // GetExExchangeByIDs 通过ID列表获取对应的外部交易所信息
  426. func GetExExchangeByIDs(exchangeIDs []int) ([]Externalexchange, error) {
  427. exExchanges := make([]Externalexchange, 0)
  428. if err := db.GetEngine().In("AUTOID", exchangeIDs).Find(&exExchanges); err != nil {
  429. return nil, err
  430. }
  431. return exExchanges, nil
  432. }
  433. // GetAllExExchanges 获取所有外部交易所信息
  434. func GetAllExExchanges() ([]Externalexchange, error) {
  435. exExchanges := make([]Externalexchange, 0)
  436. if err := db.GetEngine().Find(&exExchanges); err != nil {
  437. return nil, err
  438. }
  439. return exExchanges, nil
  440. }
  441. // GetAvalidExchangeId 风管云平台获取有关联商品的交易所id
  442. func GetAvalidExchangeId(userId int64) []int64 {
  443. e := db.GetEngine()
  444. sqlId := `
  445. select t.exexchangeid
  446. from goodsgroup t
  447. where t.groupcategroyid in
  448. (select g.groupcategroyid
  449. from erms_middlegoods m
  450. left join goodsgroup g
  451. on m.goodsgroupid = g.goodsgroupid
  452. where m.areauserid = %v)
  453. `
  454. sqlId = fmt.Sprintf(sqlId, userId)
  455. type ExchangeId struct {
  456. EXEXCHANGEID int64 `json:"AutoId" xorm:"'exexchangeid'"`
  457. }
  458. sData := make([]ExchangeId, 0)
  459. _ = e.SQL(sqlId).Find(&sData)
  460. var sId []int64
  461. for _, v := range sData {
  462. sId = append(sId, v.EXEXCHANGEID)
  463. }
  464. return sId
  465. }
  466. type GetMarketSectionsRsp struct {
  467. Marketsection
  468. Marketsectionconfignews []Marketsectionconfignew `json:"marketsectionconfignews" xorm:"-"`
  469. }
  470. func GetMarketSections() (datas []GetMarketSectionsRsp, err error) {
  471. datas = make([]GetMarketSectionsRsp, 0)
  472. m := make([]Marketsection, 0)
  473. if err = db.GetEngine().Table("MARKETSECTION").OrderBy("ORDERINDEX").Find(&m); err != nil {
  474. return
  475. }
  476. for i := range m {
  477. item := &m[i]
  478. details := make([]Marketsectionconfignew, 0)
  479. if err = db.GetEngine().Table("MARKETSECTIONCONFIGNEW").Where("MARKETSECTIONID = ?", item.MARKETSECTIONID).OrderBy("MARKETSECTIONID,ORDERINDEX").Find(&details); err != nil {
  480. return
  481. }
  482. datas = append(datas, GetMarketSectionsRsp{Marketsection: *item, Marketsectionconfignews: details})
  483. }
  484. return
  485. }