qhj.go 74 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/6/1 14:14
  4. * @Modify : 2021/6/1 14:14
  5. */
  6. package models
  7. import (
  8. "fmt"
  9. "mtp2_if/db"
  10. "mtp2_if/mtpcache"
  11. "mtp2_if/utils"
  12. "strconv"
  13. )
  14. // 大连千海金
  15. // QhjContract 千海金融资明细(合同)
  16. type QhjContract struct {
  17. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  18. SCFCONTRACTID int64 `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  19. SCFCONTRACTTYPE int32 `json:"scfcontracttype" xorm:"SCFCONTRACTTYPE"` // 合同类型 - 1:仓单回购 2:仓单质押 3:合作套保 4:资金贷款 5:融资单
  20. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID [5:融资单]
  21. CONTRACTCONFIRMTIME string `json:"contractconfirmtime" xorm:"CONTRACTCONFIRMTIME"` // 合同确认时间(时间)
  22. WRQTY int32 `json:"wrqty" xorm:"WRQTY"` // 仓单数量(数量)
  23. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格(成本价格)
  24. LENDERAMOUNT float64 `json:"lenderamount" xorm:"LENDERAMOUNT"` // 贷款金额(总额|订单总额)
  25. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率(首付比例)
  26. INITMARGIN float64 `json:"initmargin" xorm:"'INITMARGIN'"` // 初始保证金(首付款)
  27. RECOVEREDMARGIN float64 `json:"recoveredmargin" xorm:"'RECOVEREDMARGIN'"` // 已追缴保证金
  28. REMAINAMOUNT float64 `json:"remainamount" xorm:"'REMAINAMOUNT'"` // 合同剩余金额(融资额)
  29. TOTALINTEREST float64 `json:"totalinterest" xorm:"'TOTALINTEREST'"` // 已计总利息(利息)
  30. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  31. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  32. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 商品单位id
  33. PAYAMOUNT float64 `json:"payamount" xorm:"'PAYAMOUNT'"` // 已付(已付货款)
  34. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  35. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  36. }
  37. func (r *QhjContract) calc() {
  38. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  39. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  40. // 已付(已付货款) = 已追缴保证金 + 初始保证金
  41. r.PAYAMOUNT = r.RECOVEREDMARGIN + r.INITMARGIN
  42. }
  43. func (r *QhjContract) buildSql() string {
  44. var sqlId utils.SQLVal = "select t.borroweruserid userid," +
  45. " t.scfcontractid," +
  46. " t.scfcontracttype," +
  47. " t.goodsid," +
  48. " to_char(t.contractconfirmtime, 'yyyy-mm-dd hh24:mi:ss') contractconfirmtime," +
  49. " t.wrqty," +
  50. " t.tradeprice," +
  51. " t.lenderamount," +
  52. " t.marginratio," +
  53. " s.initmargin," +
  54. " s.recoveredmargin," +
  55. " s.remainamount," +
  56. " s.totalinterest," +
  57. " g.goodscode," +
  58. " g.goodsname," +
  59. " g.goodunitid" +
  60. " from scf_contract t" +
  61. " left join scf_contractinfo s" +
  62. " on t.scfcontractid = s.scfcontractid" +
  63. " left join goods g" +
  64. " on t.goodsid = g.goodsid" +
  65. " where 1=1"
  66. sqlId.And("t.borroweruserid", r.USERID)
  67. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, r.SCFCONTRACTID > 0)
  68. return sqlId.String()
  69. }
  70. // GetDataEx 获取融资明细(合同)
  71. func (r *QhjContract) GetDataEx() (interface{}, error) {
  72. sData := make([]QhjContract, 0)
  73. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  74. for i := range sData {
  75. sData[i].calc()
  76. }
  77. return sData, err
  78. }
  79. // QhjContractLog 融资明细流水log
  80. type QhjContractLog struct {
  81. LOGID string `json:"logid" xorm:"LOGID"` // LogID(315+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  82. SCFCONTRACTID int64 `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  83. AMOUNTTYPE int32 `json:"amounttype" xorm:"AMOUNTTYPE"` // 资金类型 - 1:首付款 2:尾款 3:利息 4:追加款
  84. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 支付金额
  85. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // 剩余货款
  86. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  87. FilterType string `json:"-"` // 资金类型
  88. }
  89. func (r *QhjContractLog) calc() {
  90. }
  91. func (r *QhjContractLog) buildSql() string {
  92. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  93. " t.SCFCONTRACTID," +
  94. " t.AMOUNTTYPE," +
  95. " t.AMOUNT," +
  96. " t.REMAINAMOUNT," +
  97. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
  98. " FROM SCF_CONTRACTAMOUNTLOG t" +
  99. " WHERE 1 = 1"
  100. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, r.SCFCONTRACTID > 0)
  101. sqlId.JoinEx(len(r.FilterType) > 0, fmt.Sprintf(" and t.AMOUNTTYPE in(%v)", r.FilterType))
  102. return sqlId.String()
  103. }
  104. // GetDataEx 获取融资明细流水log
  105. func (r *QhjContractLog) GetDataEx() (interface{}, error) {
  106. sData := make([]QhjContractLog, 0)
  107. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  108. for i := range sData {
  109. sData[i].calc()
  110. }
  111. return sData, err
  112. }
  113. // QhjRStrategy 定投规则策略
  114. type QhjRStrategy struct {
  115. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  116. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  117. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  118. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  119. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  120. REGULARLYSTRATEGYSTATUS int32 `json:"regularlystrategystatus" xorm:"REGULARLYSTRATEGYSTATUS"` // 策略状态 - 1:正常 2:暂停 3:终止
  121. TRIGGERTOTALTIMES string `json:"triggertotaltimes" xorm:"TRIGGERTOTALTIMES"` // 累计定投总次数
  122. TRIGGERSUCCESSTIMES string `json:"triggersuccesstimes" xorm:"TRIGGERSUCCESSTIMES"` // 累计定投成功次数
  123. TRIGGERTOTALQTY float64 `json:"triggertotalqty" xorm:"TRIGGERTOTALQTY"` // 累计定投数量(成功) [按小数位放大值]
  124. TRIGGERTOTALAMOUNT float64 `json:"triggertotalamount" xorm:"TRIGGERTOTALAMOUNT"` // 累计定投金额(成功)
  125. LASTEFFECTTRADEDATE string `json:"lasteffecttradedate" xorm:"LASTEFFECTTRADEDATE"` // 最新生效交易日
  126. LASTSTOPTRADEDATE string `json:"laststoptradedate" xorm:"LASTSTOPTRADEDATE"` // 最新暂停交易日
  127. LASTTRIGGERTRADEDATE string `json:"lasttriggertradedate" xorm:"LASTTRIGGERTRADEDATE"` // 最新触发交易日
  128. NEXTTRIGGERDATE string `json:"nexttriggerdate" xorm:"NEXTTRIGGERDATE"` // 下次触发日期
  129. NEXTTRIGGERQTY float64 `json:"nexttriggerqty" xorm:"NEXTTRIGGERQTY"` // 下次触发数量 [按小数位放大值]
  130. NEXTTRIGGERAMOUNT float64 `json:"nexttriggeramount" xorm:"NEXTTRIGGERAMOUNT"` // 下次触发金额
  131. UPDATORID string `json:"updatorid" xorm:"UPDATORID"` // 更新人
  132. UPDATESRC int32 `json:"updatesrc" xorm:"UPDATESRC"` // 更新来源 - 1:管理端 2:终端
  133. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  134. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID (SEQ_QHJ_REGULARLYSTRATEGY)
  135. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  136. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  137. GOODSID string `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  138. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  139. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  140. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  141. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  142. USERNAME string `json:"username"` // 用户名称(userid对应的名称)
  143. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  144. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  145. CURRENCYNAME string `json:"currencyname"` // 币种名称
  146. FilterStatus string `json:"-"` // 状态过滤条件
  147. }
  148. func (r *QhjRStrategy) calc() {
  149. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  150. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  151. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  152. }
  153. func (r *QhjRStrategy) buildSql() string {
  154. var sqlId utils.SQLVal = "SELECT t.REGULARLYCYCLE," +
  155. " t.REGULARLYCYCLEVALUE," +
  156. " t.REGULARLYMODE," +
  157. " t.REGULARLYMODEVALUE," +
  158. " t.REMARK," +
  159. " t.REGULARLYSTRATEGYSTATUS," +
  160. " t.TRIGGERTOTALTIMES," +
  161. " t.TRIGGERSUCCESSTIMES," +
  162. " t.TRIGGERTOTALQTY," +
  163. " t.TRIGGERTOTALAMOUNT," +
  164. " t.LASTEFFECTTRADEDATE," +
  165. " t.LASTSTOPTRADEDATE," +
  166. " t.LASTTRIGGERTRADEDATE," +
  167. " to_char(t.NEXTTRIGGERDATE, 'yyyy-mm-dd hh24:mi:ss') NEXTTRIGGERDATE," +
  168. " t.NEXTTRIGGERQTY," +
  169. " t.NEXTTRIGGERAMOUNT," +
  170. " t.UPDATORID," +
  171. " t.UPDATESRC," +
  172. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  173. " t.REGULARLYSTRATEGYID," +
  174. " t.USERID," +
  175. " t.ACCOUNTID," +
  176. " t.GOODSID," +
  177. " g.goodscode," +
  178. " g.goodsname," +
  179. " g.goodunitid," +
  180. " ta.accountname" +
  181. " FROM QHJ_REGULARLYSTRATEGY t" +
  182. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  183. " LEFT JOIN TAACCOUNT ta on t.accountid=ta.accountid" +
  184. " WHERE 1 = 1"
  185. sqlId.And("t.USERID", r.USERID)
  186. sqlId.JoinEx(len(r.FilterStatus) > 0, fmt.Sprintf(" and t.REGULARLYSTRATEGYSTATUS in(%v)", r.FilterStatus))
  187. return sqlId.String()
  188. }
  189. // GetDataEx 获取定投规则策略
  190. func (r *QhjRStrategy) GetDataEx() (interface{}, error) {
  191. sData := make([]QhjRStrategy, 0)
  192. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  193. for i := range sData {
  194. sData[i].calc()
  195. }
  196. return sData, err
  197. }
  198. // QhjRSTriggerLog 定投规则策略触发记录
  199. type QhjRSTriggerLog struct {
  200. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单ID
  201. LOGID string `json:"logid" xorm:"LOGID"` // LogID(SEQ_QHJ_RSTRIGGERLOG)
  202. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID
  203. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  204. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  205. GOODSID string `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  206. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  207. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  208. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  209. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  210. TRIGGERTIME string `json:"triggertime" xorm:"TRIGGERTIME"` // 触发时间
  211. TRIGGERTRADEDATE string `json:"triggertradedate" xorm:"TRIGGERTRADEDATE"` // 触发交易日
  212. TRIGGERQTY float64 `json:"triggerqty" xorm:"TRIGGERQTY"` // 触发数量
  213. TRIGGERAMOUNT float64 `json:"triggeramount" xorm:"TRIGGERAMOUNT"` // 触发金额
  214. TRIGGERSTATUS int32 `json:"triggerstatus" xorm:"TRIGGERSTATUS"` // 触发状态 - 1:成功 2:失败
  215. RETCODE string `json:"retcode" xorm:"RETCODE"` // 错误码
  216. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  217. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  218. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  219. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  220. USERNAME string `json:"username"` // 用户名称(userid对应的名称)
  221. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  222. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  223. CURRENCYNAME string `json:"currencyname"` // 币种名称
  224. }
  225. func (r *QhjRSTriggerLog) calc() {
  226. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  227. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  228. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  229. }
  230. func (r *QhjRSTriggerLog) buildSql() string {
  231. var sqlId utils.SQLVal = "SELECT t.TRADEID," +
  232. " t.LOGID," +
  233. " t.REGULARLYSTRATEGYID," +
  234. " t.USERID," +
  235. " t.ACCOUNTID," +
  236. " t.GOODSID," +
  237. " t.REGULARLYCYCLE," +
  238. " t.REGULARLYCYCLEVALUE," +
  239. " t.REGULARLYMODE," +
  240. " t.REGULARLYMODEVALUE," +
  241. " to_char(t.TRIGGERTIME, 'yyyy-mm-dd hh24:mi:ss') TRIGGERTIME," +
  242. " t.TRIGGERTRADEDATE," +
  243. " t.TRIGGERQTY," +
  244. " t.TRIGGERAMOUNT," +
  245. " t.TRIGGERSTATUS," +
  246. " t.RETCODE," +
  247. " g.goodscode," +
  248. " g.goodsname," +
  249. " g.goodunitid," +
  250. " ta.accountname," +
  251. " ta.currencyid" +
  252. " FROM QHJ_RSTRIGGERLOG t" +
  253. " LEFT JOIN GOODS g" +
  254. " on t.goodsid = g.goodsid" +
  255. " LEFT JOIN TAACCOUNT ta" +
  256. " on t.accountid = ta.accountid" +
  257. " WHERE 1 = 1"
  258. sqlId.And("t.USERID", r.USERID)
  259. sqlId.AndEx("t.REGULARLYSTRATEGYID", r.REGULARLYSTRATEGYID, r.REGULARLYSTRATEGYID > 0)
  260. return sqlId.String()
  261. }
  262. // GetDataEx 获取定投规则策略触发记录
  263. func (r *QhjRSTriggerLog) GetDataEx() (interface{}, error) {
  264. sData := make([]QhjRSTriggerLog, 0)
  265. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  266. for i := range sData {
  267. sData[i].calc()
  268. }
  269. return sData, err
  270. }
  271. // UserReceiveInfo 用户收货信息
  272. type UserReceiveInfo struct {
  273. AUTOID int32 `json:"autoid" xorm:"AUTOID"` // AutoID
  274. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  275. RECEIVERNAME string `json:"receivername" xorm:"RECEIVERNAME"` // 提货人姓名
  276. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 证件类型
  277. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 证件号码(加密存储)
  278. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式(加密存储)
  279. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  280. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  281. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  282. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  283. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  284. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  285. ISDEFAULT int32 `json:"isdefault" xorm:"ISDEFAULT"` // 是否默认地址 - 0:否 1:是
  286. HASENCRYPT int32 `json:"hasencrypt" xorm:"HASENCRYPT"` // 数据是否已加密 - 0:未加密 1:已加密
  287. COUNTRYNAME string `json:"countryname"` // 国家名称
  288. CITYNAME string `json:"cityname"` // 城市名称
  289. PROVINCENAME string `json:"provincename"` // 省名称
  290. DISTRICTNAME string `json:"districtname"` // 地区名称
  291. }
  292. func (r *UserReceiveInfo) calc() {
  293. // 加密过的长度 > 16, 否则是未加密的
  294. if len(r.CARDNUM) > 16 {
  295. r.CARDNUM = DecryptField(r.CARDNUM)
  296. }
  297. if len(r.PHONENUM) > 16 {
  298. r.PHONENUM = DecryptField(r.PHONENUM)
  299. }
  300. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  301. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  302. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  303. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  304. }
  305. func (r *UserReceiveInfo) buildSql() string {
  306. var sqlId utils.SQLVal = "SELECT t.AUTOID," +
  307. " t.USERID," +
  308. " t.RECEIVERNAME," +
  309. " t.CARDTYPEID," +
  310. " t.CARDNUM," +
  311. " t.PHONENUM," +
  312. " t.ADDRESS," +
  313. " t.TAKEREMARK," +
  314. " t.COUNTRYID," +
  315. " t.PROVINCEID," +
  316. " t.CITYID," +
  317. " t.DISTRICTID," +
  318. " t.ISDEFAULT," +
  319. " t.HASENCRYPT" +
  320. " FROM USERRECEIVEINFO t" +
  321. " WHERE 1 = 1"
  322. sqlId.And("t.USERID", r.USERID)
  323. return sqlId.String()
  324. }
  325. // GetDataEx 获取用户收货信息
  326. func (r *UserReceiveInfo) GetDataEx() (interface{}, error) {
  327. sData := make([]UserReceiveInfo, 0)
  328. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  329. for i := range sData {
  330. sData[i].calc()
  331. }
  332. return sData, err
  333. }
  334. // UserCollectConfig 提现账户设置
  335. type UserCollectConfig struct {
  336. COLLECTCONFIGID string `json:"collectconfigid" xorm:"COLLECTCONFIGID"` // 收款账户配置ID(SEQ_USERCOLLECTCONFIG)
  337. USERID int64 `json:"userid" xorm:"USERID"` // 收款人用户ID
  338. COLLECTACCOUNTNO string `json:"collectaccountno" xorm:"COLLECTACCOUNTNO"` // 收款人账户
  339. COLLECTACCOUNTNAME string `json:"collectaccountname" xorm:"COLLECTACCOUNTNAME"` // 收款人账户名称
  340. COLLECTBANKNAME string `json:"collectbankname" xorm:"COLLECTBANKNAME"` // 收款人开户行
  341. COLLECTBRANCHBANKNAME string `json:"collectbranchbankname" xorm:"COLLECTBRANCHBANKNAME"` // 收款人开户支行
  342. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  343. ACCOUNTSTATUS int32 `json:"accountstatus" xorm:"ACCOUNTSTATUS"` // 账户状态 - 1:正常 2:停用 3:注销
  344. }
  345. func (r *UserCollectConfig) calc() {
  346. // 加密后的长度是32的倍数
  347. if len(r.COLLECTACCOUNTNO)%32 == 0 {
  348. r.COLLECTACCOUNTNO = DecryptField(r.COLLECTACCOUNTNO)
  349. }
  350. }
  351. func (r *UserCollectConfig) buildSql() string {
  352. var sqlId utils.SQLVal = "SELECT t.COLLECTCONFIGID," +
  353. " t.USERID," +
  354. " t.COLLECTACCOUNTNO," +
  355. " t.COLLECTACCOUNTNAME," +
  356. " t.COLLECTBANKNAME," +
  357. " t.COLLECTBRANCHBANKNAME," +
  358. " t.REMARK," +
  359. " t.ACCOUNTSTATUS" +
  360. " FROM USERCOLLECTCONFIG t" +
  361. " WHERE 1 = 1"
  362. sqlId.And("t.USERID", r.USERID)
  363. return sqlId.String()
  364. }
  365. // GetDataEx 获取提现账户设置
  366. func (r *UserCollectConfig) GetDataEx() (interface{}, error) {
  367. sData := make([]UserCollectConfig, 0)
  368. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  369. for i := range sData {
  370. sData[i].calc()
  371. }
  372. return sData, err
  373. }
  374. // QhjTradeGoodsPickup 提货单
  375. type QhjTradeGoodsPickup struct {
  376. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 更新来源 - 1:管理端 2:终端
  377. STOREUSERID int64 `json:"storeuserid" xorm:"STOREUSERID"` // 门店用户ID (千海金)
  378. ARTRADEDATE string `json:"artradedate" xorm:"ARTRADEDATE"` // 自动收货交易日(yyyyMMdd)
  379. EXPRESSCOMPANY string `json:"expresscompany" xorm:"EXPRESSCOMPANY"` // 物流公司
  380. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  381. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  382. EXPRESSNUM string `json:"expressnum" xorm:"EXPRESSNUM"` // 物流单号
  383. TAKEORDERID int64 `json:"takeorderid" xorm:"TAKEORDERID"` // 提货单号(905+Unix秒时间戳(10位)+xxxxxx)
  384. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID
  385. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  386. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  387. QTY float64 `json:"qty" xorm:"QTY"` // 交易商品总手数(交易商品 - 69模式按成交量放大) - 明细表的交易商品手数汇总
  388. REQTIME string `json:"reqtime" xorm:"REQTIME"` // 提货申请时间
  389. RECIVERNAME string `json:"recivername" xorm:"RECIVERNAME"` // 提货人姓名
  390. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 提货人证件类型
  391. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 提货人证件号码
  392. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式
  393. TAKEMODE int32 `json:"takemode" xorm:"TAKEMODE"` // 提货方式 - 2:自提 3:配送(邮寄)
  394. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  395. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  396. TAKEORDERSTATUS int32 `json:"takeorderstatus" xorm:"TAKEORDERSTATUS"` // 提货状态 - 1:备货中 2:待取货(自提) 3:已取货(自提) 4:待收货(邮寄) 5:已收货(邮寄) 6:自动收货(邮寄) 7:已拒绝 8:已撤销
  397. AUDITER int32 `json:"auditer" xorm:"AUDITER"` // 审核人
  398. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间(发货时间 | 备货完成时间 都是这个字段)
  399. CONFIRMTIME string `json:"confirmtime" xorm:"'CONFIRMTIME'"` // 取货时间 或 收货时间
  400. CHECKREMARK string `json:"checkremark" xorm:"CHECKREMARK"` // 审核备注
  401. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  402. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  403. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  404. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 提货金额
  405. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  406. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  407. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  408. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  409. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  410. GOODSAGREEUNIT float64 `json:"goodsagreeunit" xorm:"GOODSAGREEUNIT"` // 交易商品乘数
  411. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 提货商品合约乘数
  412. PICKUPRATIO float64 `json:"pickupratio" xorm:"PICKUPRATIO"` // 提货系数
  413. PICKUPGOODSQTY float64 `json:"pickupgoodsqty" xorm:"PICKUPGOODSQTY"` // 提货商品手数(数量)
  414. GOODSQTY float64 `json:"goodsqty" xorm:"GOODSQTY"` // 交易商品手数(69模式按成交量小数位放大取整)
  415. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)-提货单明细表
  416. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  417. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID(提货商品)
  418. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  419. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  420. ENUMDICNAME string `json:"enumdicname"` // 单位名称(提货商品)
  421. USERNAME string `json:"username"` // 用户名称
  422. STOREUSERNAME string `json:"storeusername"` // 门店用户名称
  423. COUNTRYNAME string `json:"countryname"` // 国家名称
  424. CITYNAME string `json:"cityname"` // 城市名称
  425. PROVINCENAME string `json:"provincename"` // 省名称
  426. DISTRICTNAME string `json:"districtname"` // 地区名称
  427. }
  428. func (r *QhjTradeGoodsPickup) calc() {
  429. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.PICKUPGOODSUNITID)
  430. r.STOREUSERNAME = mtpcache.GetUserNameByUserId(r.STOREUSERID)
  431. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  432. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  433. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  434. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  435. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  436. }
  437. func (r *QhjTradeGoodsPickup) buildSql() string {
  438. var sqlId utils.SQLVal = "SELECT t.AUDITSRC," +
  439. " t.STOREUSERID," +
  440. " t.ARTRADEDATE," +
  441. " t.EXPRESSCOMPANY," +
  442. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  443. " t.AUDITTRADEDATE," +
  444. " t.EXPRESSNUM," +
  445. " t.TAKEORDERID," +
  446. " t.ACCOUNTID," +
  447. " t.GOODSID," +
  448. " t.USERID," +
  449. " t.QTY," +
  450. " to_char(t.REQTIME, 'yyyy-mm-dd hh24:mi:ss') REQTIME," +
  451. " t.RECIVERNAME," +
  452. " t.CARDTYPEID," +
  453. " t.CARDNUM," +
  454. " t.PHONENUM," +
  455. " t.TAKEMODE," +
  456. " decode(t.takemode, 3, t.address, u.address) address," +
  457. " t.TAKEREMARK," +
  458. " t.TAKEORDERSTATUS," +
  459. " t.AUDITER," +
  460. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  461. " to_char(t.CONFIRMTIME, 'yyyy-mm-dd hh24:mi:ss') CONFIRMTIME," +
  462. " t.CHECKREMARK," +
  463. " t.TRADEDATE," +
  464. " t.MARKETID," +
  465. " t.HANDLESTATUS," +
  466. " t.AMOUNT," +
  467. " decode(t.takemode, 3, t.COUNTRYID, u.countryid) COUNTRYID," +
  468. " decode(t.takemode, 3, t.PROVINCEID, u.provinceid) PROVINCEID," +
  469. " decode(t.takemode, 3, t.CITYID, u.cityid) CITYID," +
  470. " decode(t.takemode, 3, t.DISTRICTID, u.districtid) DISTRICTID," +
  471. " k.PICKUPGOODSID," +
  472. " k.GOODSAGREEUNIT," +
  473. " k.PICKUPGOODSAGREEUNIT," +
  474. " k.PICKUPRATIO," +
  475. " k.PICKUPGOODSQTY," +
  476. " k.GOODSQTY," +
  477. " k.PREPAREDAYS," +
  478. " g.PICKUPGOODSNAME," +
  479. " g.PICKUPGOODSUNITID," +
  480. " g2.goodsname," +
  481. " g2.goodscode" +
  482. " FROM TRADE_GOODSPICKUP t" +
  483. " LEFT JOIN TRADE_GOODSPICKUPDETAIL k" +
  484. " on t.takeorderid = k.takeorderid" +
  485. " LEFT JOIN PICKUPGOODS g" +
  486. " on k.pickupgoodsid = g.pickupgoodsid" +
  487. " LEFT JOIN GOODS g2" +
  488. " on t.goodsid = g2.goodsid" +
  489. " LEFT JOIN USERINFO u" +
  490. " on t.storeuserid = u.userid" +
  491. " WHERE 1 = 1"
  492. sqlId.And("t.USERID", r.USERID)
  493. return sqlId.String()
  494. }
  495. // GetDataEx 获取提货单
  496. func (r *QhjTradeGoodsPickup) GetDataEx() (interface{}, error) {
  497. sData := make([]QhjTradeGoodsPickup, 0)
  498. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  499. for i := range sData {
  500. sData[i].calc()
  501. }
  502. return sData, err
  503. }
  504. // QhjPickGoods 提货商品
  505. type QhjPickGoods struct {
  506. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  507. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  508. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID
  509. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 合约乘数
  510. PICKUPGOODSDESC string `json:"pickupgoodsdesc" xorm:"PICKUPGOODSDESC"` // 描述
  511. IMAGEADDRESS string `json:"imageaddress" xorm:"IMAGEADDRESS"` // 图片
  512. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  513. MODIFYSRC int32 `json:"modifysrc" xorm:"MODIFYSRC"` // 修改来源 - 1:管理端 2:终端
  514. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 修改人
  515. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  516. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)
  517. PICKUPGOODSSTATUS int32 `json:"pickupgoodsstatus" xorm:"PICKUPGOODSSTATUS"` // 状态 - 1:正常 2:停用 3:注销
  518. MODIFIERNAME string `json:"modifiername"` // 修改人名称
  519. FilterStatus string `json:"-"` // 状态过淲
  520. }
  521. func (r *QhjPickGoods) calc() {
  522. if r.MODIFYSRC == 1 {
  523. r.MODIFIERNAME = mtpcache.GetSystemmangerLoginCode(r.MODIFIERID)
  524. } else {
  525. r.MODIFIERNAME = mtpcache.GetLoginCodeByLoginId(r.MODIFIERID)
  526. }
  527. if r.MODIFIERNAME == "" {
  528. r.MODIFIERNAME = mtpcache.GetUserNameByUserId(r.MODIFIERID)
  529. }
  530. }
  531. func (r *QhjPickGoods) buildSql() string {
  532. var sqlId utils.SQLVal = "SELECT t.PICKUPGOODSID," +
  533. " t.PICKUPGOODSNAME," +
  534. " t.PICKUPGOODSUNITID," +
  535. " t.PICKUPGOODSAGREEUNIT," +
  536. " to_char(t.PICKUPGOODSDESC) PICKUPGOODSDESC," +
  537. " to_char(t.IMAGEADDRESS) IMAGEADDRESS," +
  538. " t.REMARK," +
  539. " t.MODIFYSRC," +
  540. " t.MODIFIERID," +
  541. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  542. " t.PREPAREDAYS," +
  543. " t.PICKUPGOODSSTATUS" +
  544. " FROM PICKUPGOODS t" +
  545. " WHERE 1 = 1"
  546. if len(r.FilterStatus) > 0 {
  547. sqlId.Join(fmt.Sprintf(" and t.PICKUPGOODSSTATUS in(%v)", r.FilterStatus))
  548. }
  549. return sqlId.String()
  550. }
  551. // GetDataEx 获取提货商品
  552. func (r *QhjPickGoods) GetDataEx() (interface{}, error) {
  553. sData := make([]QhjPickGoods, 0)
  554. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  555. for i := range sData {
  556. sData[i].calc()
  557. }
  558. return sData, err
  559. }
  560. // QhjPickArea 提货门店
  561. type QhjPickArea struct {
  562. ISRETURNSCORE int32 `json:"-" xorm:"ISRETURNSCORE"` // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
  563. ORGTYPE int32 `json:"-" xorm:"ORGTYPE"` // 组织机构类型 1:机构\分支节点 2:交易员\叶子节点 3:部门\分支节点
  564. ROLETYPE int32 `json:"-" xorm:"ROLETYPE"` // 角色类型
  565. SUBORGTYPE int32 `json:"suborgtype" xorm:"SUBORGTYPE"` // 子机构类型(千海金) - 0:机构 1:代理 2:门店
  566. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人ID
  567. FROMUSERID int64 `json:"fromuserid" xorm:"FROMUSERID"` // 所属机构(组织机构)( OrgType = 1时为自己, = 2\3时取上级机构的所属机构)
  568. MODIFIERID int64 `json:"-" xorm:"MODIFIERID"` // 修改人ID
  569. PARENTUSERID int64 `json:"-" xorm:"PARENTUSERID"` // 上级组织机构(组织机构)
  570. ROOTUSERID int64 `json:"-" xorm:"ROOTUSERID"` // 顶级组织机构用户ID(组织机构)
  571. TRADEACCOUNTID int64 `json:"-" xorm:"TRADEACCOUNTID"` // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号) - 作废, 使用UserReckonAccount
  572. USERID int64 `json:"userid" xorm:"USERID"` // 机构用户ID 其他做市关系,都设置为 1
  573. CREATETIME string `json:"-" xorm:"CREATETIME"` // 创建时间
  574. MODIFYTIME string `json:"-" xorm:"MODIFYTIME"` // 修改时间
  575. OUTUSERID string `json:"-" xorm:"OUTUSERID"` // 外部账户[场外期权做市商]
  576. SHOPPASSWORD string `json:"-" xorm:"SHOPPASSWORD"` // 商城店铺登陆密码(商城店铺角色使用)
  577. SUBLEVELPATH string `json:"-" xorm:"SUBLEVELPATH"` // 组织机构层级路径(逗号分隔,首尾加逗号)
  578. TRANSURL string `json:"-" xorm:"TRANSURL"` // 物流地址(物流机构)
  579. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  580. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  581. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  582. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  583. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 详细地址
  584. USERNAME string `json:"username"` // 机构用户名称(门店门称)
  585. FROMUSERNAME string `json:"fromusername"` // 所属机构名称
  586. COUNTRYNAME string `json:"countryname"` // 国家名称
  587. CITYNAME string `json:"cityname"` // 城市名称
  588. PROVINCENAME string `json:"provincename"` // 省名称
  589. DISTRICTNAME string `json:"districtname"` // 地区名称
  590. }
  591. func (r *QhjPickArea) calc() {
  592. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  593. r.FROMUSERNAME = mtpcache.GetUserNameByUserId(r.FROMUSERID)
  594. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  595. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  596. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  597. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  598. }
  599. func (r *QhjPickArea) buildSql() string {
  600. var sqlId utils.SQLVal = "SELECT t.FROMUSERID," +
  601. " t.SUBORGTYPE," +
  602. " t.USERID," +
  603. " t.ROLETYPE," +
  604. " t.TRADEACCOUNTID," +
  605. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  606. " t.CREATORID," +
  607. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  608. " t.MODIFIERID," +
  609. " t.SHOPPASSWORD," +
  610. " t.ISRETURNSCORE," +
  611. " t.TRANSURL," +
  612. " t.OUTUSERID," +
  613. " t.PARENTUSERID," +
  614. " t.ROOTUSERID," +
  615. " t.SUBLEVELPATH," +
  616. " t.ORGTYPE," +
  617. " u.countryid," +
  618. " u.provinceid," +
  619. " u.cityid," +
  620. " u.districtid," +
  621. " u.address" +
  622. " FROM AREAROLE t" +
  623. " LEFT JOIN USERINFO u on t.userid=u.userid" +
  624. " WHERE 1 = 1"
  625. sqlId.And("t.SUBORGTYPE", 2)
  626. return sqlId.String()
  627. }
  628. // GetDataEx 获取机构角色
  629. func (r *QhjPickArea) GetDataEx() (interface{}, error) {
  630. sData := make([]QhjPickArea, 0)
  631. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  632. for i := range sData {
  633. sData[i].calc()
  634. }
  635. return sData, err
  636. }
  637. // QhjBankAccountSign 签约银行
  638. type QhjBankAccountSign struct {
  639. ACCOUNTTYPE int32 `json:"accounttype" xorm:"ACCOUNTTYPE"` // 账户类型(UserType)
  640. BANKACCOUNTTYPE int32 `json:"bankaccounttype" xorm:"BANKACCOUNTTYPE"` // 银行账户类型 - 1-对私; 2-对公
  641. BANKCARDTYPE int32 `json:"bankcardtype" xorm:"BANKCARDTYPE"` // 银行卡类型
  642. DIRECT int32 `json:"direct" xorm:"DIRECT"` // 方向(可以判断那方先发起的签约)
  643. SIGNSTATUS int32 `json:"signstatus" xorm:"SIGNSTATUS"` // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中 10:审核拒绝 11:换签待审核
  644. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  645. ACCOUNTCODE string `json:"accountcode" xorm:"ACCOUNTCODE"` // 资金账号
  646. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 资金账号对应的账号名(UserName)
  647. APPLICATIONTIME string `json:"applicationtime" xorm:"APPLICATIONTIME"` // 最后一次更新的时间
  648. APPLYEXCHTICKET string `json:"applyexchticket" xorm:"APPLYEXCHTICKET"` // 申请流水
  649. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  650. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 签约银行卡账号名
  651. BANKACCOUNTNO string `json:"bankaccountno" xorm:"BANKACCOUNTNO"` // 银行卡号
  652. BANKCHILDACCOUNT string `json:"bankchildaccount" xorm:"BANKCHILDACCOUNT"` // 银行子账号(签约成功后,很多银行会返回对应的这个虚拟账号)
  653. BANKCITY string `json:"bankcity" xorm:"BANKCITY"` // 开户行城市
  654. BANKID string `json:"bankid" xorm:"BANKID"` // 签约银行ID
  655. BANKPROVINCE string `json:"bankprovince" xorm:"BANKPROVINCE"` // 开户行省份
  656. BRANCHBANKID string `json:"branchbankid" xorm:"BRANCHBANKID"` // 签约银行支行号
  657. BRANCHBANKNAME string `json:"branchbankname" xorm:"BRANCHBANKNAME"` // 签约银行支行名称
  658. CARDNO string `json:"cardno" xorm:"CARDNO"` // 证件号码
  659. CARDTYPE string `json:"cardtype" xorm:"CARDTYPE"` // 证件类型
  660. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  661. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号
  662. EXCHTICKET string `json:"exchticket" xorm:"EXCHTICKET"` // 最后一次签约成功的流水号
  663. EXTENDINFO string `json:"extendinfo" xorm:"EXTENDINFO"` // 扩展信息(JSON字符串)
  664. MOBILEPHONE string `json:"mobilephone" xorm:"MOBILEPHONE"` // 手机号
  665. NETADDR string `json:"netaddr" xorm:"NETADDR"` // 调转网址
  666. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间(签解约更新时间)
  667. RELATEDUSERID int64 `json:"relateduserid" xorm:"'RELATEDUSERID'"` // 关联使用者userid
  668. }
  669. func (r *QhjBankAccountSign) calc() {
  670. r.ACCOUNTNAME = DecryptField(r.ACCOUNTNAME)
  671. r.BANKACCOUNTNAME = DecryptField(r.BANKACCOUNTNAME)
  672. r.CARDNO = DecryptField(r.CARDNO)
  673. r.BANKACCOUNTNO = DecryptField(r.BANKACCOUNTNO)
  674. r.MOBILEPHONE = DecryptField(r.MOBILEPHONE)
  675. }
  676. func (r *QhjBankAccountSign) buildSql() string {
  677. var sqlId utils.SQLVal = "SELECT t.ACCOUNTCODE," +
  678. " t.CUSBANKID," +
  679. " t.SIGNSTATUS," +
  680. " t.CURRENCY," +
  681. " t.ACCOUNTTYPE," +
  682. " t.ACCOUNTNAME," +
  683. " t.BANKCARDTYPE," +
  684. " t.BANKACCOUNTNO," +
  685. " t.BANKACCOUNTTYPE," +
  686. " t.BANKCHILDACCOUNT," +
  687. " t.BANKID," +
  688. " t.BRANCHBANKID," +
  689. " t.BRANCHBANKNAME," +
  690. " t.BANKACCOUNTNAME," +
  691. " t.CARDTYPE," +
  692. " t.CARDNO," +
  693. " t.BANKPROVINCE," +
  694. " t.BANKCITY," +
  695. " t.DIRECT," +
  696. " t.MOBILEPHONE," +
  697. " t.EXTENDINFO," +
  698. " t.EXCHTICKET," +
  699. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  700. " to_char(t.APPLICATIONTIME, 'yyyy-mm-dd hh24:mi:ss') APPLICATIONTIME," +
  701. " t.NETADDR," +
  702. " t.AUDITID," +
  703. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  704. " t.APPLYEXCHTICKET," +
  705. " ta.accountid," +
  706. " ta.relateduserid" +
  707. " FROM BANK_ACCOUNTSIGN t" +
  708. " INNER JOIN TAACCOUNT ta" +
  709. " on t.accountcode = to_char(ta.accountid)" +
  710. " WHERE 1 = 1 and ta.taaccounttype = 2"
  711. sqlId.And("ta.RELATEDUSERID", r.RELATEDUSERID)
  712. return sqlId.String()
  713. }
  714. // GetDataEx 获取签约银行
  715. func (r *QhjBankAccountSign) GetDataEx() (interface{}, error) {
  716. sData := make([]QhjBankAccountSign, 0)
  717. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  718. for i := range sData {
  719. sData[i].calc()
  720. }
  721. return sData, err
  722. }
  723. // QhjBankInfo 银行信息列表
  724. type QhjBankInfo struct {
  725. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 0:正常 1:注销
  726. ORDERINDEX int64 `json:"orderindex" xorm:"ORDERINDEX"` // 排序顺序
  727. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  728. BANKNAME string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  729. CLEARBANKNO string `json:"clearbankno" xorm:"CLEARBANKNO"` // 清算系统银行编号
  730. }
  731. func (r *QhjBankInfo) calc() {
  732. }
  733. func (r *QhjBankInfo) buildSql() string {
  734. var sqlId utils.SQLVal = "SELECT t.BANKID,t.BANKNAME,t.CLEARBANKNO,t.STATUS,t.ORDERINDEX FROM BANK_BANKINFO t WHERE 1=1 and t.status=0"
  735. return sqlId.String()
  736. }
  737. // GetData 获取银行信息列表
  738. func (r *QhjBankInfo) GetData() ([]QhjBankInfo, error) {
  739. sData := make([]QhjBankInfo, 0)
  740. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  741. for i := range sData {
  742. sData[i].calc()
  743. }
  744. return sData, err
  745. }
  746. // GetDataEx 获取银行信息列表
  747. func (r *QhjBankInfo) GetDataEx() (interface{}, error) {
  748. return r.GetData()
  749. }
  750. // QhjReckonPriceLog 结算价(定投价)
  751. type QhjReckonPriceLog struct {
  752. LASTRECKONPRICE float64 `json:"lastreckonprice" xorm:"LASTRECKONPRICE"` // 上日结算价
  753. NEXTDNLIMITPRICE float64 `json:"nextdnlimitprice" xorm:"NEXTDNLIMITPRICE"` // 下个交易日跌停价
  754. NEXTUPLIMITPRICE float64 `json:"nextuplimitprice" xorm:"NEXTUPLIMITPRICE"` // 下个交易日涨停价
  755. RECKONPRICE float64 `json:"reckonprice" xorm:"RECKONPRICE"` // 今日结算价(定投价)
  756. UPDOWNRATE float64 `json:"updownrate" xorm:"UPDOWNRATE"` // 今日涨跌幅
  757. UPDOWNRATE_2D float64 `json:"updownrate_2d" xorm:"UPDOWNRATE_2D"` // 连续两日涨跌幅
  758. UPDOWNRATE_3D float64 `json:"updownrate_3d" xorm:"UPDOWNRATE_3D"` // 连续三日涨跌幅
  759. TOTALHOLDERQTY int32 `json:"totalholderqty" xorm:"TOTALHOLDERQTY"` // 总持仓数
  760. TOTALSTOCK int32 `json:"totalstock" xorm:"TOTALSTOCK"` // 总库存
  761. UPDOWNCOUNT int32 `json:"updowncount" xorm:"UPDOWNCOUNT"` // 连续涨(跌)停天数 (涨跌停标志变为0时值归0,变成涨停或是跌停时值为1,连续涨停天数+1,连续跌停天数+1)
  762. UPDOWNFLAG int32 `json:"updownflag" xorm:"UPDOWNFLAG"` // 连续涨跌停标志 - 0:无涨跌停 -1:跌停 1:涨停
  763. GOODSID int64 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  764. NEXTTRADE string `json:"nexttrade" xorm:"NEXTTRADE"` // 下个交易日
  765. RECKONTIME string `json:"reckontime" xorm:"RECKONTIME"` // 结算时间
  766. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日
  767. }
  768. func (r *QhjReckonPriceLog) calc() {
  769. }
  770. func (r *QhjReckonPriceLog) buildSql() string {
  771. var sqlId utils.SQLVal = "SELECT t.TRADEDATE," +
  772. " t.GOODSID," +
  773. " to_char(t.RECKONTIME, 'yyyy-mm-dd hh24:mi:ss') RECKONTIME," +
  774. " t.LASTRECKONPRICE," +
  775. " t.RECKONPRICE," +
  776. " t.UPDOWNRATE," +
  777. " t.UPDOWNFLAG," +
  778. " t.UPDOWNCOUNT," +
  779. " t.UPDOWNRATE_2D," +
  780. " t.UPDOWNRATE_3D," +
  781. " t.NEXTTRADE," +
  782. " t.NEXTUPLIMITPRICE," +
  783. " t.NEXTDNLIMITPRICE," +
  784. " t.TOTALHOLDERQTY," +
  785. " t.TOTALSTOCK," +
  786. " g.goodsname," +
  787. " g.goodscode" +
  788. " FROM RECKON_PRICELOG t" +
  789. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  790. " INNER JOIN MARKET m on g.marketid=g.marketid" +
  791. " WHERE 1 = 1 and m.marketid=69201"
  792. sqlId.AndEx("t.TRADEDATE", r.TRADEDATE, len(r.TRADEDATE) > 0)
  793. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  794. return sqlId.String()
  795. }
  796. // GetDataEx 获取结算价(定投价)
  797. func (r *QhjReckonPriceLog) GetDataEx() (interface{}, error) {
  798. sData := make([]QhjReckonPriceLog, 0)
  799. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  800. for i := range sData {
  801. sData[i].calc()
  802. }
  803. return sData, err
  804. }
  805. // QhjCustomer 客户资料
  806. type QhjCustomer struct {
  807. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户ID
  808. MEMBERUSERID int64 `json:"memberuserid" xorm:"'MEMBERUSERID'"` // 所属机构ID(所属会员)
  809. PARENTUSERID int64 `json:"parentuserid" xorm:"'PARENTUSERID'"` // 上级机构(所属机构)
  810. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型 1-个人 2-企业
  811. CUSTOMERNAME string `json:"customername" xorm:"'CUSTOMERNAME'"` // 客户名称
  812. CARDTYPE int32 `json:"cardtype" xorm:"'CARDTYPE'"` // 证件类型
  813. CARDNUM string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码
  814. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  815. TELPHONE string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话
  816. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 通讯地址
  817. REMARK string `json:"remark" xorm:"'REMARK'"` // 备注
  818. STATUS int32 `json:"status" xorm:"'STATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
  819. STATUSDESC string `json:"statusdesc"` // 账户状态中文描述
  820. ATTACHMENT1 string `json:"attachment1" xorm:"'ATTACHMENT1'"` // 附件1
  821. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"'CARDFRONTPHOTOURL'"` // 证件正面图片地址
  822. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"'CARDBACKPHOTOURL'"` // 证件反面图片地址
  823. COUNTRYID int32 `json:"countryid" xorm:"'COUNTRYID'"` // 国家
  824. PROVINCEID int32 `json:"provinceid" xorm:"'PROVINCEID'"` // 省
  825. CITYID int32 `json:"cityid" xorm:"'CITYID'"` // 市
  826. DISTRICTID int32 `json:"districtid" xorm:"'DISTRICTID'"` // 区域
  827. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  828. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  829. AUDITTIME string `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
  830. NICKNAME string `json:"nickname" xorm:"'NICKNAME'"` // 昵称
  831. TAXPAYERNUM string `json:"taxpayernum" xorm:"'taxpayernum'"` // 纳税人识别号
  832. LEGALPERSONNAME string `json:"legalpersonname" xorm:"'legalpersonname'"` // 法人姓名(企业)
  833. CONTACTNAME string `json:"contactname" xorm:"'contactname'"` // 联系人
  834. EMAIL string `json:"email" xorm:"'EMAIL'"` // 邮件
  835. COUNTRYNAME string `json:"countryname"` // 国家名称
  836. CITYNAME string `json:"cityname"` // 城市名称
  837. PROVINCENAME string `json:"provincename"` // 省名称
  838. DISTRICTNAME string `json:"districtname"` // 地区名称
  839. CARDTYPENAME string `json:"cardtypename"` // 证件类型名称
  840. MEMBERUSERNAME string `json:"memberusername"` // 所属会员名称
  841. USERNAME string `json:"username"` // 用户名称
  842. PARENTUSERNAME string `json:"parentusername"` //所属机构名称
  843. QUERYTYPE int32 `json:"-"` // 查询类型(1:未提交(网上开户表) 2:待审核(网上开户表) 3:正常 4:停用)
  844. IncludeSub int32 `json:"-"` // 包子机构客户 1-包含
  845. }
  846. func (r *QhjCustomer) calc() {
  847. r.MEMBERUSERNAME = mtpcache.GetUserNameByUserId(r.MEMBERUSERID)
  848. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  849. r.PARENTUSERNAME = mtpcache.GetUserNameByUserId(r.PARENTUSERID)
  850. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  851. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  852. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  853. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  854. }
  855. func (r *QhjCustomer) level() int32 {
  856. if r.IncludeSub > 0 {
  857. // 层级, 最多20层
  858. return 20
  859. }
  860. return 1
  861. }
  862. func (r *QhjCustomer) buildSql() string {
  863. if r.QUERYTYPE == 1 || r.QUERYTYPE == 2 {
  864. return r.buildSqlWskh()
  865. }
  866. return r.buildSqlNormal()
  867. }
  868. func (r *QhjCustomer) buildSqlWskh() string {
  869. var sqlId utils.SQLVal = "with tmp as" +
  870. " (select t.userid, wm_concat(t.logincode) logincode" +
  871. " from loginaccount t" +
  872. " group by t.userid)" +
  873. "select a.*, k.logincode" +
  874. " from (select t.userid," +
  875. " t.memberareaid MEMBERUSERID," +
  876. " t.USERINFOTYPE," +
  877. " t.CUSTOMERNAME," +
  878. " t.NICKNAME," +
  879. " t.CARDTYPE," +
  880. " t.CARDNUM," +
  881. " t.mobilephone MOBILE," +
  882. " t.TELPHONE," +
  883. " t.cardaddress ADDRESS," +
  884. " t.REMARK," +
  885. " t.ATTACHMENT1," +
  886. " t.CARDFRONTPHOTOURL," +
  887. " t.CARDBACKPHOTOURL," +
  888. " t.userstate status," +
  889. " t.countryid," +
  890. " t.provinceid," +
  891. " t.districtid," +
  892. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  893. " t.cityid," +
  894. " to_char(t.modifiedtime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  895. " to_char(t.auditime, 'yyyy-mm-dd hh24:mi:ss') audittime," +
  896. " t.taxpayernum," +
  897. " t.legalpersonname," +
  898. " t.contactname," +
  899. " t.email," +
  900. " t.areaid parentuserid" +
  901. " from wskh_userinfo t" +
  902. " start with t.areaid = %v" +
  903. " connect by prior t.userid = t.areaid" +
  904. " and t.usertype = 6" +
  905. " and level <= %v) a" +
  906. " left join tmp k" +
  907. " on a.userid = k.userid" +
  908. " where 1 = 1 and a.status in(%v)"
  909. status := DecodeStr(r.QUERYTYPE == 1, "1", "2,4,5")
  910. sqlId.FormatParam(r.USERID, r.level(), status)
  911. sqlId.AndEx("a.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  912. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and a.customername like '%%%v%%'`, r.CUSTOMERNAME))
  913. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and a.nickname like '%%%v%%'`, r.NICKNAME))
  914. return sqlId.String()
  915. }
  916. func (r *QhjCustomer) buildSqlNormal() string {
  917. var sqlId utils.SQLVal = "with tmp as" +
  918. " (select t.userid, wm_concat(t.logincode) logincode" +
  919. " from loginaccount t" +
  920. " group by t.userid)" +
  921. "select a.*," +
  922. " k.logincode," +
  923. " u.USERINFOTYPE," +
  924. " u.CUSTOMERNAME," +
  925. " u.NICKNAME," +
  926. " u.CARDTYPEID CARDTYPE," +
  927. " u.CARDNUM," +
  928. " u.MOBILE," +
  929. " u.TELPHONE," +
  930. " u.ADDRESS," +
  931. " u.REMARK," +
  932. " u.ATTACHMENT1," +
  933. " u.CARDFRONTPHOTOURL," +
  934. " u.CARDBACKPHOTOURL," +
  935. " u.countryid," +
  936. " u.provinceid," +
  937. " u.districtid," +
  938. " u.taxpayernum," +
  939. " u.legalpersonname," +
  940. " u.contactname," +
  941. " u.email," +
  942. " u.cityid" +
  943. " from (select t.userid," +
  944. " t.usertype," +
  945. " t.parentuserid," +
  946. " t.memberuserid," +
  947. " t.accountstatus status," +
  948. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  949. " to_char(t.modifytime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  950. " to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') audittime" +
  951. " from useraccount t" +
  952. " start with t.usertype=6 and t.parentuserid = %v" +
  953. " connect by prior t.userid = t.parentuserid" +
  954. " and t.usertype = 6" +
  955. " and level <= %v) a" +
  956. " left join tmp k" +
  957. " on a.userid = k.userid" +
  958. " left join userinfo u" +
  959. " on a.userid = u.userid" +
  960. " where 1=1 and a.status in(%v)"
  961. status := DecodeStr(r.QUERYTYPE == 3, "4", "6")
  962. sqlId.FormatParam(r.USERID, r.level(), status)
  963. sqlId.AndEx("u.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  964. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and u.customername like '%%%v%%'`, r.CUSTOMERNAME))
  965. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and u.nickname like '%%%v%%'`, r.NICKNAME))
  966. return sqlId.String()
  967. }
  968. // GetDataEx 获取客户资料
  969. func (r *QhjCustomer) GetDataEx() (interface{}, error) {
  970. sData := make([]QhjCustomer, 0)
  971. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  972. for i := range sData {
  973. sData[i].calc()
  974. }
  975. return sData, err
  976. }
  977. // QhjCusBankInfo 托管银行信息
  978. type QhjCusBankInfo struct {
  979. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号(对应清算中心TRAN_NO)
  980. CUSBANKNAME string `json:"cusbankname" xorm:"CUSBANKNAME"` // 银行业务名称
  981. CUSBANKSHORTNAME string `json:"cusbankshortname" xorm:"CUSBANKSHORTNAME"` // 银行业务简称
  982. EXCHBANKID string `json:"exchbankid" xorm:"EXCHBANKID"` // 交易所开户银行ID
  983. EXCHPAYBANKACCNO string `json:"exchpaybankaccno" xorm:"EXCHPAYBANKACCNO"` // 交易所支出结算账户
  984. EXCHPAYBANKACCNAME string `json:"exchpaybankaccname" xorm:"EXCHPAYBANKACCNAME"` // 交易所支出结算账户户名
  985. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  986. CANSIGN int32 `json:"cansign" xorm:"CANSIGN"` // 是否可签约 - 0:不可 1:可以
  987. CANRELEASE int32 `json:"canrelease" xorm:"CANRELEASE"` // 是否可解约 - 0:不可 1:可以
  988. CANINAMOUNT int32 `json:"caninamount" xorm:"CANINAMOUNT"` // 是否可入金 - 0:不可 1:可以
  989. CANOUTAMOUNT int32 `json:"canoutamount" xorm:"CANOUTAMOUNT"` // 是否可出金 - 0:不可 1:可以
  990. RISKINFO string `json:"riskinfo" xorm:"RISKINFO"` // 签约风险提示书
  991. CANSIGN2 int32 `json:"cansign2" xorm:"CANSIGN2"` // 是否可签约(网银端) - 0:不可 1:可以
  992. CANRELEASE2 int32 `json:"canrelease2" xorm:"CANRELEASE2"` // 是否可解约(网银端) - 0:不可 1:可以
  993. CANINAMOUNT2 int32 `json:"caninamount2" xorm:"CANINAMOUNT2"` // 是否可入金(网银端) - 0:不可 1:可以
  994. CANOUTAMOUNT2 int32 `json:"canoutamount2" xorm:"CANOUTAMOUNT2"` // 是否可出金(网银端) - 0:不可 1:可以
  995. CANBINDCARD int32 `json:"canbindcard" xorm:"CANBINDCARD"` // 是否可绑卡与解卡 - 0:不可 1:可以
  996. ISNEEDCLEAR int32 `json:"isneedclear" xorm:"ISNEEDCLEAR"` // 是否需要清算 - 0:不需要 1:需要
  997. CANMODIFYPHONE int32 `json:"canmodifyphone" xorm:"CANMODIFYPHONE"` // 是否可修改手机号 - 0:不可 1:可以
  998. CANMODIFYSIGNINFO int32 `json:"canmodifysigninfo" xorm:"CANMODIFYSIGNINFO"` // 是否可修改签约信息 - 0:不可 1:可以
  999. ISNEEDCHECK int32 `json:"isneedcheck" xorm:"ISNEEDCHECK"` // 是否需要对账 - 0:需要 1:不需要 [不需要界面配置]
  1000. CANMODIFYBANKCARD int32 `json:"canmodifybankcard" xorm:"CANMODIFYBANKCARD"` // 是否可修改银行卡号 - 0:不可 1:可以
  1001. CANALLOT int32 `json:"canallot" xorm:"CANALLOT"` // 是否支持跨行调拨 - 0:不支持 1:支持
  1002. CANALLOTQUERY int32 `json:"canallotquery" xorm:"CANALLOTQUERY"` // 是否支持跨行调拨查询 - 0:不支持 1:支持
  1003. }
  1004. func (r *QhjCusBankInfo) calc() {
  1005. }
  1006. func (r *QhjCusBankInfo) buildSql() string {
  1007. var sqlId utils.SQLVal = "SELECT t.CUSBANKID," +
  1008. " t.CUSBANKNAME," +
  1009. " t.CUSBANKSHORTNAME," +
  1010. " t.EXCHBANKID," +
  1011. " t.EXCHPAYBANKACCNO," +
  1012. " t.EXCHPAYBANKACCNAME," +
  1013. " t.CURRENCY," +
  1014. " t.CANSIGN," +
  1015. " t.CANRELEASE," +
  1016. " t.CANINAMOUNT," +
  1017. " t.CANOUTAMOUNT," +
  1018. " to_char(t.RISKINFO) RISKINFO," +
  1019. " t.CANSIGN2," +
  1020. " t.CANRELEASE2," +
  1021. " t.CANINAMOUNT2," +
  1022. " t.CANOUTAMOUNT2," +
  1023. " t.CANBINDCARD," +
  1024. " t.ISNEEDCLEAR," +
  1025. " t.CANMODIFYPHONE," +
  1026. " t.CANMODIFYSIGNINFO," +
  1027. " t.ISNEEDCHECK," +
  1028. " t.CANMODIFYBANKCARD," +
  1029. " t.CANALLOT," +
  1030. " t.CANALLOTQUERY" +
  1031. " FROM BANK_CUSBANKINFO t" +
  1032. " WHERE 1 = 1"
  1033. return sqlId.String()
  1034. }
  1035. // GetData 获取托管银行信息
  1036. func (r *QhjCusBankInfo) GetData() ([]QhjCusBankInfo, error) {
  1037. sData := make([]QhjCusBankInfo, 0)
  1038. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1039. for i := range sData {
  1040. sData[i].calc()
  1041. }
  1042. return sData, err
  1043. }
  1044. // GetDataEx 获取托管银行信息
  1045. func (r *QhjCusBankInfo) GetDataEx() (interface{}, error) {
  1046. return r.GetData()
  1047. }
  1048. // QhjCusBankSignBank 托管银行签约关系
  1049. type QhjCusBankSignBank struct {
  1050. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行ID
  1051. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  1052. }
  1053. func (r *QhjCusBankSignBank) calc() {
  1054. }
  1055. func (r *QhjCusBankSignBank) buildSql() string {
  1056. var sqlId utils.SQLVal = "select * from bank_cusbanksignbank"
  1057. return sqlId.String()
  1058. }
  1059. // GetData 获取托管银行签约关系
  1060. func (r *QhjCusBankSignBank) GetData() ([]QhjCusBankSignBank, error) {
  1061. sData := make([]QhjCusBankSignBank, 0)
  1062. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1063. for i := range sData {
  1064. sData[i].calc()
  1065. }
  1066. return sData, err
  1067. }
  1068. // GetDataEx 获取托管银行签约关系
  1069. func (r *QhjCusBankSignBank) GetDataEx() (interface{}, error) {
  1070. return r.GetData()
  1071. }
  1072. // QhjCusBankSignBankEx 托管银行签约银行详细
  1073. type QhjCusBankSignBankEx struct {
  1074. QhjCusBankInfo
  1075. Banklst []QhjBankInfo // 银行列表
  1076. }
  1077. // GetDataEx 获取托管银行签约银行详细
  1078. func (r *QhjCusBankSignBankEx) GetDataEx() (interface{}, error) {
  1079. sData := make([]QhjCusBankSignBankEx, 0)
  1080. a := QhjCusBankSignBank{}
  1081. relateData, _ := a.GetData()
  1082. if len(relateData) == 0 {
  1083. return sData, nil
  1084. }
  1085. b := QhjCusBankInfo{}
  1086. bData, _ := b.GetData()
  1087. c := QhjBankInfo{}
  1088. cData, _ := c.GetData()
  1089. for _, vb := range bData {
  1090. // 托管银行
  1091. v := QhjCusBankSignBankEx{QhjCusBankInfo: vb, Banklst: make([]QhjBankInfo, 0)}
  1092. for _, vr := range relateData {
  1093. // 托管关系
  1094. if vb.CUSBANKID == vr.CUSBANKID {
  1095. for _, vc := range cData {
  1096. if vc.BANKID == vr.BANKID {
  1097. v.Banklst = append(v.Banklst, vc)
  1098. }
  1099. }
  1100. }
  1101. }
  1102. if len(v.Banklst) > 0 {
  1103. sData = append(sData, v)
  1104. }
  1105. }
  1106. return sData, nil
  1107. }
  1108. // QhjSiteColumnDetail 资讯
  1109. type QhjSiteColumnDetail struct {
  1110. ID int64 `json:"id" xorm:"ID"` // ID(SEQ_SITE_COLUMNDETAIL)
  1111. COLUMNID int64 `json:"columnid" xorm:"COLUMNID"` // 所属栏目
  1112. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID(默认为0, 核心为为机构用户ID)
  1113. TITLE string `json:"title" xorm:"TITLE"` // 标题
  1114. COVERIMAGE string `json:"coverimage" xorm:"COVERIMAGE"` // 封面图片
  1115. AUTHOR string `json:"author" xorm:"AUTHOR"` // 作者
  1116. BRIEF string `json:"brief" xorm:"BRIEF"` // 简介
  1117. CONTEXT string `json:"context" xorm:"CONTEXT"` // 内容
  1118. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 1:暂存 10:待审核 20:审核通过 30:审核拒绝
  1119. ISTOP int32 `json:"istop" xorm:"ISTOP"` // 是否置顶 - 0:不置 1:置顶
  1120. HITS int64 `json:"hits" xorm:"HITS"` // 点击数
  1121. PUBLISHDATE string `json:"publishdate" xorm:"PUBLISHDATE"` // 发布日期
  1122. CREAEDATE string `json:"creaedate" xorm:"CREAEDATE"` // 创建时间
  1123. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人
  1124. UPDATEDATE string `json:"updatedate" xorm:"UPDATEDATE"` // 修改时间
  1125. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 操作人
  1126. ISSHOW int32 `json:"isshow" xorm:"ISSHOW"` // 是否展示 - 0:不展示 1:展示
  1127. USERNAME string `json:"username"` // 用户名称
  1128. }
  1129. func (r *QhjSiteColumnDetail) calc() {
  1130. if r.USERID > 0 {
  1131. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  1132. }
  1133. }
  1134. func (r *QhjSiteColumnDetail) buildSql() string {
  1135. var sqlId utils.SQLVal = "SELECT t.ID," +
  1136. " t.COLUMNID," +
  1137. " t.USERID," +
  1138. " t.TITLE," +
  1139. " t.COVERIMAGE," +
  1140. " t.AUTHOR," +
  1141. " t.BRIEF," +
  1142. " to_char(t.CONTEXT) CONTEXT," +
  1143. " t.STATUS," +
  1144. " t.ISTOP," +
  1145. " t.HITS," +
  1146. " to_char(t.PUBLISHDATE, 'yyyy-mm-dd hh24:mi:ss') PUBLISHDATE," +
  1147. " to_char(t.CREAEDATE, 'yyyy-mm-dd hh24:mi:ss') CREAEDATE," +
  1148. " t.CREATORID," +
  1149. " to_char(t.UPDATEDATE, 'yyyy-mm-dd hh24:mi:ss') UPDATEDATE," +
  1150. " t.MODIFIERID," +
  1151. " t.ISSHOW" +
  1152. " FROM SITE_COLUMNDETAIL t" +
  1153. " WHERE 1 = 1"
  1154. sqlId.And("t.USERID", r.USERID)
  1155. return sqlId.String()
  1156. }
  1157. // GetDataEx 获取资讯
  1158. func (r *QhjSiteColumnDetail) GetDataEx() (interface{}, error) {
  1159. sData := make([]QhjSiteColumnDetail, 0)
  1160. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1161. for i := range sData {
  1162. sData[i].calc()
  1163. }
  1164. return sData, err
  1165. }
  1166. // QhjAccountOutInApply 充值提现(出入金)
  1167. type QhjAccountOutInApply struct {
  1168. EXECUTETYPE int32 `json:"executetype" xorm:"EXECUTETYPE"` // 申请类型 - 1:出金 2:入金 3: 单边账调整:入金; 4:单边账调整:出金 5:外部母账户调整:入金 6:外部母账户调整:出金 7:外部子账户:入金 8:外部子账户:出金
  1169. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额
  1170. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  1171. CHARGE float64 `json:"charge" xorm:"CHARGE"` // 手续费
  1172. ACCOUNTPWD string `json:"accountpwd" xorm:"ACCOUNTPWD"` // 资金密码
  1173. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间(申请时间)
  1174. BANKID string `json:"bankid" xorm:"BANKID"` // 银行编号
  1175. BRANCHBANKID string `json:"branchbankid" xorm:"BRANCHBANKID"` // 银行支行号
  1176. BRANCHBANKNAME string `json:"branchbankname" xorm:"BRANCHBANKNAME"` // 银行支行名称
  1177. BANKACCOUNTNO string `json:"bankaccountno" xorm:"BANKACCOUNTNO"` // 银行卡号
  1178. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 银行账户名
  1179. EXTENDINFO string `json:"extendinfo" xorm:"EXTENDINFO"` // 扩展信息
  1180. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  1181. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1182. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1183. NETADDR string `json:"netaddr" xorm:"NETADDR"` // 调转网址
  1184. ACCOUNTTICKET string `json:"accountticket" xorm:"ACCOUNTTICKET"` // 最新账户服务流水号
  1185. CHECKERRORFLAG int32 `json:"checkerrorflag" xorm:"CHECKERRORFLAG"` // 对账差错标志 - 1:为单边账;其它为正常出入金
  1186. REMARK2 string `json:"remark2" xorm:"REMARK2"` // 备注(失败原因)
  1187. REAUDITID int64 `json:"reauditid" xorm:"REAUDITID"` // 复审人
  1188. REAUDITTIME string `json:"reaudittime" xorm:"REAUDITTIME"` // 复审时间
  1189. REAUDITREMARK string `json:"reauditremark" xorm:"REAUDITREMARK"` // 复审备注
  1190. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  1191. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID"` // 三方关联ID
  1192. CAPAMOUNTOUT float64 `json:"capamountout" xorm:"CAPAMOUNTOUT"` // 出金(劣后本金) - 外部子账户
  1193. INFAMOUNT float64 `json:"infamount" xorm:"INFAMOUNT"` // 劣后金额(自有)
  1194. PRIAMOUNT float64 `json:"priamount" xorm:"PRIAMOUNT"` // 优先金额(授信)
  1195. BANK_APPLY_TICKET string `json:"bank_apply_ticket" xorm:"BANK_APPLY_TICKET"` // 银行申请流水
  1196. CERTIFICATEPHOTOURL string `json:"certificatephotourl" xorm:"CERTIFICATEPHOTOURL"` // 凭证地址
  1197. SOUCREAMOUNT float64 `json:"soucreamount" xorm:"SOUCREAMOUNT"` // 原始出入金金额
  1198. SOUCRECURRENCYID int64 `json:"soucrecurrencyid" xorm:"SOUCRECURRENCYID"` // 原始出入金币种
  1199. ACCOUNTCODE string `json:"accountcode" xorm:"ACCOUNTCODE"` // 资金账号
  1200. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号
  1201. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1202. EXCHTICKET string `json:"exchticket" xorm:"EXCHTICKET"` // 银行服务流水号
  1203. EXTOPERATEID int64 `json:"extoperateid" xorm:"EXTOPERATEID"` // 交易服务流水号
  1204. BANKTICKET string `json:"bankticket" xorm:"BANKTICKET"` // 银行流水
  1205. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS"` // 申请状态 - 1:待审核 2:待复审 3:初审拒绝 4:交易冻结中 5:交易解冻中 6:交易解冻扣款中 7:交易入金中 8:交易冻结/解冻/扣款中(银行发起出金时用) 9:银行出金中 10:银行入金中 11:成功 12:失败 13:银行审核中 14:账户服务入金失败; 15:账户服务解冻失败; 16:账户服务解冻扣款失败; 17:账户服务出金失败 18:复审通过 19:复审拒绝 20:提交审核,账户冻结中 21:审核拒绝,账户解冻中;22: 待审核,账户服务解冻回滚中; 23:待复审,账户服务解冻回滚中; 24: 审核通过,账户冻结金额检查中;25: 复审通过,账户冻结金额检查中;
  1206. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1207. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 登录账号(账号)
  1208. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 账户类型 1-个人 2-企业
  1209. ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 用户名称(名称)
  1210. BeginDate string `json:"-"` // 开始日期(yyyymmdd)
  1211. EndDate string `json:"-"` // 结束日期(yyyymmdd)
  1212. FilterName string `json:"-"` // 账户(模糊匹配)
  1213. }
  1214. func (r *QhjAccountOutInApply) calc() {
  1215. }
  1216. func (r *QhjAccountOutInApply) buildSql() string {
  1217. var sqlId utils.SQLVal = "with tmp as(select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  1218. "SELECT t.EXECUTETYPE," +
  1219. " t.AMOUNT," +
  1220. " t.CURRENCY," +
  1221. " t.CHARGE," +
  1222. " t.ACCOUNTPWD," +
  1223. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1224. " t.BANKID," +
  1225. " t.BRANCHBANKID," +
  1226. " t.BRANCHBANKNAME," +
  1227. " t.BANKACCOUNTNO," +
  1228. " t.BANKACCOUNTNAME," +
  1229. " t.EXTENDINFO," +
  1230. " t.AUDITID," +
  1231. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  1232. " t.REMARK," +
  1233. " t.NETADDR," +
  1234. " t.ACCOUNTTICKET," +
  1235. " t.CHECKERRORFLAG," +
  1236. " t.REMARK2," +
  1237. " t.REAUDITID," +
  1238. " to_char(t.REAUDITTIME, 'yyyy-mm-dd hh24:mi:ss') REAUDITTIME," +
  1239. " t.REAUDITREMARK," +
  1240. " t.APPLYREMARK," +
  1241. " t.RELATEDORDERID," +
  1242. " t.CAPAMOUNTOUT," +
  1243. " t.INFAMOUNT," +
  1244. " t.PRIAMOUNT," +
  1245. " t.BANK_APPLY_TICKET," +
  1246. " to_char(t.CERTIFICATEPHOTOURL) CERTIFICATEPHOTOURL," +
  1247. " t.SOUCREAMOUNT," +
  1248. " t.SOUCRECURRENCYID," +
  1249. " t.ACCOUNTCODE," +
  1250. " t.CUSBANKID," +
  1251. " t.TRADEDATE," +
  1252. " t.EXCHTICKET," +
  1253. " t.EXTOPERATEID," +
  1254. " t.BANKTICKET," +
  1255. " t.APPLYSTATUS," +
  1256. " ta.userid," +
  1257. " u.accountname," +
  1258. " ui.userinfotype," +
  1259. " tmp.logincode" +
  1260. " FROM BANK_ACCOUNTOUTINAPPLY t" +
  1261. " INNER JOIN TAACCOUNT ta on t.accountcode=to_char(ta.accountid)" +
  1262. " INNER JOIN USERACCOUNT u on ta.relateduserid=u.userid" +
  1263. " INNER JOIN USERINFO ui on u.userid=ui.userid" +
  1264. " LEFT JOIN tmp on u.userid=tmp.userid" +
  1265. " WHERE 1 = 1"
  1266. if len(r.BeginDate) > 0 {
  1267. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME >= to_date(%v,'yyyymmdd')", r.BeginDate))
  1268. }
  1269. if len(r.EndDate) > 0 {
  1270. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME <= to_date(%v,'yyyymmdd')", r.EndDate))
  1271. }
  1272. if len(r.FilterName) > 0 {
  1273. sqlId.Join(fmt.Sprintf(" and (tmp.logincode like '%%%v%%' or u.accountname like '%%%v%%')", r.FilterName, r.FilterName))
  1274. }
  1275. return sqlId.String()
  1276. }
  1277. // GetDataEx 获取充值提现(出入金)
  1278. func (r *QhjAccountOutInApply) GetDataEx() (interface{}, error) {
  1279. sData := make([]QhjAccountOutInApply, 0)
  1280. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1281. for i := range sData {
  1282. sData[i].calc()
  1283. }
  1284. return sData, err
  1285. }
  1286. type DBINT64 int64
  1287. func (r *DBINT64) FromDB(bytes []byte) error {
  1288. d, err := strconv.ParseInt(string(bytes), 10, 64)
  1289. if err == nil {
  1290. *r = DBINT64(d)
  1291. }
  1292. return err
  1293. }
  1294. func (r *DBINT64) ToDB() ([]byte, error) {
  1295. d := strconv.FormatInt(int64(*r), 10)
  1296. return []byte(d), nil
  1297. }
  1298. // QhjPayOrder 待付款单据
  1299. type QhjPayOrder struct {
  1300. OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE"` // 买委托操作类型 - 1:正常下单 16:融资买入
  1301. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  1302. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1303. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  1304. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  1305. BUYORDERID string `json:"buyorderid" xorm:"BUYORDERID"` // 买方委托单号
  1306. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID[报价币种]
  1307. SELLORDERID string `json:"sellorderid" xorm:"SELLORDERID"` // 卖方委托单号
  1308. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID[报价币种]
  1309. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额(优惠后金额)
  1310. TRADECHARGE float64 `json:"tradecharge" xorm:"TRADECHARGE"` // 成交手续费(买方)
  1311. PAYFLAG int32 `json:"payflag" xorm:"PAYFLAG"` // 付款标识 - 1:未支付 2:已支付 3:已过期 4:已撤销 5:结算过期 6:预售终止
  1312. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1313. PAYTIME string `json:"paytime" xorm:"PAYTIME"` // 付款时间
  1314. PAYLIMITEDTIME string `json:"paylimitedtime" xorm:"PAYLIMITEDTIME"` // 支付期限
  1315. OFFAMOUNT float64 `json:"offamount" xorm:"OFFAMOUNT"` // 优惠金额
  1316. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  1317. TRADEQTY int32 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  1318. PAYAMOUNT float64 `json:"payamount" xorm:"PAYAMOUNT"` // 支付金额=TradeAmount + TradeCharge
  1319. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  1320. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  1321. }
  1322. func (r *QhjPayOrder) calc() {
  1323. }
  1324. func (r *QhjPayOrder) buildSql() string {
  1325. var sqlId utils.SQLVal = "SELECT t.OPERATETYPE," +
  1326. " to_char(t.TRADEID) TRADEID," +
  1327. " t.TRADEDATE," +
  1328. " t.MARKETID," +
  1329. " t.GOODSID," +
  1330. " to_char(t.BUYORDERID) BUYORDERID," +
  1331. " t.BUYACCOUNTID," +
  1332. " to_char(t.SELLORDERID) SELLORDERID," +
  1333. " t.SELLACCOUNTID," +
  1334. " t.TRADEAMOUNT," +
  1335. " t.TRADECHARGE," +
  1336. " t.PAYFLAG," +
  1337. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  1338. " to_char(t.PAYTIME, 'yyyy-mm-dd hh24:mi:ss') PAYTIME," +
  1339. " to_char(t.PAYLIMITEDTIME, 'yyyy-mm-dd hh24:mi:ss') PAYLIMITEDTIME," +
  1340. " t.OFFAMOUNT," +
  1341. " t.TRADEPRICE," +
  1342. " t.TRADEQTY," +
  1343. " t.PAYAMOUNT," +
  1344. " g.goodscode," +
  1345. " g.goodsname" +
  1346. " FROM TRADE_PAYORDER t" +
  1347. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  1348. " WHERE 1 = 1"
  1349. sqlId.AndEx("t.BUYACCOUNTID", r.BUYACCOUNTID, r.BUYACCOUNTID > 0)
  1350. sqlId.AndEx("t.TRADEID", r.TRADEID, len(r.TRADEID) > 0)
  1351. sqlId.AndEx("t.PAYFLAG", r.PAYFLAG, r.PAYFLAG > 0)
  1352. return sqlId.String()
  1353. }
  1354. // GetDataEx 获取待付款单据
  1355. func (r *QhjPayOrder) GetDataEx() (interface{}, error) {
  1356. sData := make([]QhjPayOrder, 0)
  1357. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1358. for i := range sData {
  1359. sData[i].calc()
  1360. }
  1361. return sData, err
  1362. }
  1363. // Qhjgoodsex 交易商品扩展表(千海金)
  1364. type Qhjgoodsex struct {
  1365. Goodsid int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID(自增ID SEQ_GOODS)
  1366. Minamount float64 `json:"minamount" xorm:"MINAMOUNT"` // 最小购买金额
  1367. Canfinance int32 `json:"canfinance" xorm:"CANFINANCE"` // 是否支持融资 - 0:不支持 1:支持【69:铂金宝】
  1368. Canregularlybuy int32 `json:"canregularlybuy" xorm:"CANREGULARLYBUY"` // 是否支持定投 - 0:不支持 1:支持【69:铂金宝】
  1369. Regularlybuyminqty float64 `json:"regularlybuyminqty" xorm:"REGULARLYBUYMINQTY"` // 定投最小数量
  1370. Regularlybuyminamount float64 `json:"regularlybuyminamount" xorm:"REGULARLYBUYMINAMOUNT"` // 定投最小金额
  1371. Deliverygoodsid int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1372. Wrstandardid int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1373. Spotgoodsbrandid int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID"
  1374. Defaulttradeuserid int64 `json:"defaulttradeuserid" xorm:"DEFAULTTRADEUSERID"` // 默认交易用户ID
  1375. }
  1376. func (r *Qhjgoodsex) calc() {
  1377. }
  1378. func (r *Qhjgoodsex) buildSql() string {
  1379. var sqlId utils.SQLVal = "SELECT t.GOODSID," +
  1380. " t.MINAMOUNT," +
  1381. " t.CANFINANCE," +
  1382. " t.CANREGULARLYBUY," +
  1383. " t.REGULARLYBUYMINQTY," +
  1384. " t.REGULARLYBUYMINAMOUNT," +
  1385. " t.DELIVERYGOODSID," +
  1386. " t.WRSTANDARDID," +
  1387. " t.SPOTGOODSBRANDID," +
  1388. " t.DEFAULTTRADEUSERID" +
  1389. " FROM QHJ_GOODSEX t" +
  1390. " WHERE 1 = 1"
  1391. sqlId.AndEx("t.GOODSID", r.Goodsid, r.Goodsid > 0)
  1392. return sqlId.String()
  1393. }
  1394. // GetDataEx 获取交易商品扩展表(千海金)
  1395. func (r *Qhjgoodsex) GetDataEx() (interface{}, error) {
  1396. sData := make([]Qhjgoodsex, 0)
  1397. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1398. for i := range sData {
  1399. sData[i].calc()
  1400. }
  1401. return sData, err
  1402. }