qhj.go 116 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385
  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. // QhjAreaRole 角色查询
  16. type QhjAreaRole struct {
  17. FROMUSERID int64 `json:"fromuserid" xorm:"FROMUSERID"` // 所属机构(组织机构)( OrgType = 1时为自己, = 2\3时取上级机构的所属机构)
  18. SUBORGTYPE int32 `json:"suborgtype" xorm:"SUBORGTYPE"` // 子机构类型(千海金) - 0:机构 1:代理 2:门店
  19. USERID int64 `json:"userid" xorm:"USERID"` // 机构用户ID其他做市关系,都设置为 1
  20. ROLETYPE int32 `json:"roletype" xorm:"ROLETYPE"` // 角色类型 - 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:客户 98:代理 99:门店
  21. TRADEACCOUNTID int64 `json:"tradeaccountid" xorm:"TRADEACCOUNTID"` // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号) - 作废, 使用UserReckonAccount
  22. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  23. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人ID
  24. MODIFYTIME string `json:"modifytime" xorm:"MODIFYTIME"` // 修改时间
  25. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 修改人ID
  26. SHOPPASSWORD string `json:"shoppassword" xorm:"SHOPPASSWORD"` // 商城店铺登陆密码(商城店铺角色使用)
  27. ISRETURNSCORE int32 `json:"isreturnscore" xorm:"ISRETURNSCORE"` // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
  28. TRANSURL string `json:"transurl" xorm:"TRANSURL"` // 物流地址(物流机构)
  29. OUTUSERID string `json:"outuserid" xorm:"OUTUSERID"` // 外部账户[场外期权做市商]
  30. PARENTUSERID int64 `json:"parentuserid" xorm:"PARENTUSERID"` // 上级组织机构(组织机构)
  31. ROOTUSERID int64 `json:"rootuserid" xorm:"ROOTUSERID"` // 顶级组织机构用户ID(组织机构)
  32. SUBLEVELPATH string `json:"sublevelpath" xorm:"SUBLEVELPATH"` // 组织机构层级路径(逗号分隔,首尾加逗号)
  33. ORGTYPE int32 `json:"orgtype" xorm:"ORGTYPE"` // 组织机构类型 1:机构\分支节点 2:交易员\叶子节点 3:部门\分支节点
  34. }
  35. func (r *QhjAreaRole) calc() {
  36. }
  37. func (r *QhjAreaRole) buildSql() string {
  38. var sqlId utils.SQLVal = "select * from arearole t where 1=1"
  39. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  40. sqlId.AndEx("t.ROLETYPE", r.ROLETYPE, r.ROLETYPE > 0)
  41. sqlId.AndEx("t.SUBORGTYPE", r.SUBORGTYPE, r.SUBORGTYPE > 0)
  42. sqlId.AndEx("t.FROMUSERID", r.FROMUSERID, r.FROMUSERID > 0)
  43. return sqlId.String()
  44. }
  45. // GetDataEx 获取角色查询
  46. func (r *QhjAreaRole) GetData() ([]QhjAreaRole, error) {
  47. sData := make([]QhjAreaRole, 0)
  48. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  49. for i := range sData {
  50. sData[i].calc()
  51. }
  52. return sData, err
  53. }
  54. // QhjContract 千海金融资明细(合同)
  55. type QhjContract struct {
  56. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  57. SCFCONTRACTID string `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  58. SCFCONTRACTTYPE int32 `json:"scfcontracttype" xorm:"SCFCONTRACTTYPE"` // 合同类型 - 1:仓单回购 2:仓单质押 3:合作套保 4:资金贷款 5:融资单
  59. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID [5:融资单]
  60. CONTRACTCONFIRMTIME string `json:"contractconfirmtime" xorm:"CONTRACTCONFIRMTIME"` // 合同确认时间(时间)
  61. WRQTY float64 `json:"wrqty" xorm:"WRQTY"` // 仓单数量(数量)
  62. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格(成本价格)
  63. LENDERAMOUNT float64 `json:"lenderamount" xorm:"LENDERAMOUNT"` // 贷款金额(总额|订单总额)
  64. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率(首付比例)
  65. INITMARGIN float64 `json:"initmargin" xorm:"'INITMARGIN'"` // 初始保证金(首付款)
  66. RECOVEREDMARGIN float64 `json:"recoveredmargin" xorm:"'RECOVEREDMARGIN'"` // 已追缴保证金
  67. REMAINAMOUNT float64 `json:"remainamount" xorm:"'REMAINAMOUNT'"` // 合同剩余金额(融资额)
  68. TOTALINTEREST float64 `json:"totalinterest" xorm:"'TOTALINTEREST'"` // 已计总利息(利息)
  69. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  70. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  71. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 商品单位id
  72. CURRISKLEVEL int32 `json:"currisklevel" xorm:"'CURRISKLEVEL'"` // 风险级别 - 1:正常 2:追加货款 3:支付尾款
  73. RECKONRECOVERMARGIN float64 `json:"reckonrecovermargin" xorm:"'RECKONRECOVERMARGIN'"` // 结算应追缴保底金(结算时到过风险率时临时存储) - [仓单回购\仓单质押]
  74. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  75. SCFCONTRACTSTATUS int32 `json:"scfcontractstatus" xorm:"'SCFCONTRACTSTATUS'"` // 合同状态 - 1:待确认 2:已确认 3:确认拒绝 4:已支付保证金 5:已激活 6:已违约 7:到期结束 8:延期结束 9:违约结束 10:已注销 11:已关闭 99:未提交
  76. PAYAMOUNT float64 `json:"payamount" xorm:"'PAYAMOUNT'"` // 已付(已付货款)
  77. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  78. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  79. }
  80. func (r *QhjContract) calc() {
  81. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  82. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  83. // 已付(已付货款) = 已追缴保证金 + 初始保证金
  84. r.PAYAMOUNT = r.RECOVEREDMARGIN + r.INITMARGIN
  85. if r.SCFCONTRACTSTATUS == 10 || r.SCFCONTRACTSTATUS == 11 {
  86. // 当合同关闭时, 利息重置为0
  87. r.TOTALINTEREST = 0
  88. }
  89. }
  90. func (r *QhjContract) buildSql() string {
  91. var sqlId utils.SQLVal = "select t.borroweruserid userid," +
  92. " to_char(t.scfcontractid) scfcontractid," +
  93. " t.scfcontracttype," +
  94. " t.goodsid," +
  95. " to_char(t.contractconfirmtime, 'yyyy-mm-dd hh24:mi:ss') contractconfirmtime," +
  96. " t.wrqty," +
  97. " t.tradeprice," +
  98. " t.lenderamount," +
  99. " t.marginratio," +
  100. " s.initmargin," +
  101. " s.recoveredmargin," +
  102. " s.remainamount," +
  103. " s.totalinterest," +
  104. " s.currisklevel," +
  105. " s.reckonrecovermargin," +
  106. " s.scfcontractstatus," +
  107. " g.goodscode," +
  108. " g.goodsname," +
  109. " g.decimalplace," +
  110. " g.goodunitid" +
  111. " from scf_contract t" +
  112. " left join scf_contractinfo s" +
  113. " on t.scfcontractid = s.scfcontractid" +
  114. " left join goods g" +
  115. " on t.goodsid = g.goodsid" +
  116. " where 1=1"
  117. sqlId.AndEx("t.borroweruserid", r.USERID, r.USERID > 0)
  118. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, len(r.SCFCONTRACTID) > 0)
  119. return sqlId.String()
  120. }
  121. // GetDataEx 获取融资明细(合同)
  122. func (r *QhjContract) GetDataEx() (interface{}, error) {
  123. sData := make([]QhjContract, 0)
  124. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  125. for i := range sData {
  126. sData[i].calc()
  127. }
  128. return sData, err
  129. }
  130. // QhjContractLog 融资明细流水log
  131. type QhjContractLog struct {
  132. LOGID string `json:"logid" xorm:"LOGID"` // LogID(315+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  133. SCFCONTRACTID int64 `json:"scfcontractid" xorm:"SCFCONTRACTID"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  134. AMOUNTTYPE int32 `json:"amounttype" xorm:"AMOUNTTYPE"` // 资金类型 - 1:首付款 2:尾款 3:利息 4:追加款
  135. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 支付金额
  136. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // 剩余货款
  137. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  138. FilterType string `json:"-"` // 资金类型
  139. }
  140. func (r *QhjContractLog) calc() {
  141. }
  142. func (r *QhjContractLog) buildSql() string {
  143. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  144. " t.SCFCONTRACTID," +
  145. " t.AMOUNTTYPE," +
  146. " t.AMOUNT," +
  147. " t.REMAINAMOUNT," +
  148. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME" +
  149. " FROM SCF_CONTRACTAMOUNTLOG t" +
  150. " WHERE 1 = 1"
  151. sqlId.AndEx("t.SCFCONTRACTID", r.SCFCONTRACTID, r.SCFCONTRACTID > 0)
  152. sqlId.JoinEx(len(r.FilterType) > 0, fmt.Sprintf(" and t.AMOUNTTYPE in(%v)", r.FilterType))
  153. return sqlId.String()
  154. }
  155. // GetDataEx 获取融资明细流水log
  156. func (r *QhjContractLog) GetDataEx() (interface{}, error) {
  157. sData := make([]QhjContractLog, 0)
  158. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  159. for i := range sData {
  160. sData[i].calc()
  161. }
  162. return sData, err
  163. }
  164. // QhjRStrategy 定投规则策略
  165. type QhjRStrategy struct {
  166. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  167. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  168. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  169. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  170. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  171. REGULARLYSTRATEGYSTATUS int32 `json:"regularlystrategystatus" xorm:"REGULARLYSTRATEGYSTATUS"` // 策略状态 - 1:正常 2:暂停 3:终止
  172. TRIGGERTOTALTIMES string `json:"triggertotaltimes" xorm:"TRIGGERTOTALTIMES"` // 累计定投总次数
  173. TRIGGERSUCCESSTIMES string `json:"triggersuccesstimes" xorm:"TRIGGERSUCCESSTIMES"` // 累计定投成功次数
  174. TRIGGERTOTALQTY float64 `json:"triggertotalqty" xorm:"TRIGGERTOTALQTY"` // 累计定投数量(成功) [按小数位放大值]
  175. TRIGGERTOTALAMOUNT float64 `json:"triggertotalamount" xorm:"TRIGGERTOTALAMOUNT"` // 累计定投金额(成功)
  176. LASTEFFECTTRADEDATE string `json:"lasteffecttradedate" xorm:"LASTEFFECTTRADEDATE"` // 最新生效交易日
  177. LASTSTOPTRADEDATE string `json:"laststoptradedate" xorm:"LASTSTOPTRADEDATE"` // 最新暂停交易日
  178. LASTTRIGGERTRADEDATE string `json:"lasttriggertradedate" xorm:"LASTTRIGGERTRADEDATE"` // 最新触发交易日
  179. NEXTTRIGGERDATE string `json:"nexttriggerdate" xorm:"NEXTTRIGGERDATE"` // 下次触发日期
  180. NEXTTRIGGERQTY float64 `json:"nexttriggerqty" xorm:"NEXTTRIGGERQTY"` // 下次触发数量 [按小数位放大值]
  181. NEXTTRIGGERAMOUNT float64 `json:"nexttriggeramount" xorm:"NEXTTRIGGERAMOUNT"` // 下次触发金额
  182. UPDATORID string `json:"updatorid" xorm:"UPDATORID"` // 更新人
  183. UPDATESRC int32 `json:"updatesrc" xorm:"UPDATESRC"` // 更新来源 - 1:管理端 2:终端
  184. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  185. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID (SEQ_QHJ_REGULARLYSTRATEGY)
  186. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  187. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  188. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  189. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  190. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  191. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  192. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  193. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  194. QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  195. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 账号(登录代码)
  196. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  197. MOBILE string `json:"-" xorm:"'MOBILE'"` // 电话号码(用户资料里的电话)
  198. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称(userid对应的名称)
  199. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  200. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  201. CURRENCYNAME string `json:"currencyname"` // 币种名称
  202. FilterStatus string `json:"-"` // 状态过滤条件
  203. FilterName string `json:"-"` // 模糊搜索
  204. }
  205. func (r *QhjRStrategy) calc() {
  206. //r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  207. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  208. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  209. ZoomByDecimal(r.QTYDECIMALPLACE, &r.TRIGGERTOTALQTY, &r.NEXTTRIGGERQTY)
  210. if r.REGULARLYMODE == 1 {
  211. ZoomByDecimal(r.QTYDECIMALPLACE, &r.REGULARLYMODEVALUE)
  212. }
  213. if r.LOGINCODE == "" {
  214. r.LOGINCODE = DecryptField(r.MOBILE)
  215. }
  216. }
  217. func (r *QhjRStrategy) buildSql() string {
  218. var sqlId utils.SQLVal = "with k as (select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  219. "SELECT t.REGULARLYCYCLE," +
  220. " t.REGULARLYCYCLEVALUE," +
  221. " t.REGULARLYMODE," +
  222. " t.REGULARLYMODEVALUE," +
  223. " t.REMARK," +
  224. " t.REGULARLYSTRATEGYSTATUS," +
  225. " t.TRIGGERTOTALTIMES," +
  226. " t.TRIGGERSUCCESSTIMES," +
  227. " t.TRIGGERTOTALQTY," +
  228. " t.TRIGGERTOTALAMOUNT," +
  229. " t.LASTEFFECTTRADEDATE," +
  230. " t.LASTSTOPTRADEDATE," +
  231. " t.LASTTRIGGERTRADEDATE," +
  232. " to_char(t.NEXTTRIGGERDATE, 'yyyy-mm-dd hh24:mi:ss') NEXTTRIGGERDATE," +
  233. " t.NEXTTRIGGERQTY," +
  234. " t.NEXTTRIGGERAMOUNT," +
  235. " t.UPDATORID," +
  236. " t.UPDATESRC," +
  237. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  238. " t.REGULARLYSTRATEGYID," +
  239. " t.USERID," +
  240. " t.ACCOUNTID," +
  241. " t.GOODSID," +
  242. " g.goodscode," +
  243. " g.goodsname," +
  244. " g.decimalplace," +
  245. " g.qtydecimalplace," +
  246. " g.goodunitid," +
  247. " ta.accountname," +
  248. " k.logincode," +
  249. " ui.userinfotype," +
  250. " ui.mobile," +
  251. " u.accountname username" +
  252. " FROM QHJ_REGULARLYSTRATEGY t" +
  253. " LEFT JOIN GOODS g" +
  254. " on t.goodsid = g.goodsid" +
  255. " LEFT JOIN TAACCOUNT ta" +
  256. " on t.accountid = ta.accountid" +
  257. " LEFT JOIN USERINFO ui on t.userid=ui.userid" +
  258. " LEFT JOIN USERACCOUNT u on t.userid=u.userid" +
  259. " LEFT JOIN k on t.userid=k.userid" +
  260. " WHERE 1 = 1"
  261. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  262. sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
  263. if len(r.FilterName) > 0 {
  264. sqlId.JoinFormat(" and (k.logincode like '%%%v%%' or u.accountname like '%%%v%%')", r.FilterName, r.FilterName)
  265. }
  266. sqlId.JoinEx(len(r.FilterStatus) > 0, fmt.Sprintf(" and t.REGULARLYSTRATEGYSTATUS in(%v)", r.FilterStatus))
  267. sqlId.Join(" order by t.UPDATETIME desc")
  268. return sqlId.String()
  269. }
  270. // GetDataEx 获取定投规则策略
  271. func (r *QhjRStrategy) GetDataEx() (interface{}, error) {
  272. sData := make([]QhjRStrategy, 0)
  273. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  274. for i := range sData {
  275. sData[i].calc()
  276. }
  277. return sData, err
  278. }
  279. // QhjRSTriggerLog 定投规则策略触发记录
  280. type QhjRSTriggerLog struct {
  281. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单ID
  282. LOGID string `json:"logid" xorm:"LOGID"` // LogID(SEQ_QHJ_RSTRIGGERLOG)
  283. REGULARLYSTRATEGYID int64 `json:"regularlystrategyid" xorm:"REGULARLYSTRATEGYID"` // 定投策略ID
  284. USERID int64 `json:"userid" xorm:"USERID"` // 所属用户ID
  285. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 用户资金账户
  286. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 定投商品ID
  287. REGULARLYCYCLE int32 `json:"regularlycycle" xorm:"REGULARLYCYCLE"` // 定投频率 - 1:每周 2:每月
  288. REGULARLYCYCLEVALUE string `json:"regularlycyclevalue" xorm:"REGULARLYCYCLEVALUE"` // 定投频率值 - 每周几(0-6) 或 每月几号(<=28)
  289. REGULARLYMODE int32 `json:"regularlymode" xorm:"REGULARLYMODE"` // 定投方式 - 1:按数量 2:按金额
  290. REGULARLYMODEVALUE float64 `json:"regularlymodevalue" xorm:"REGULARLYMODEVALUE"` // 定投方式值 - 数量或金额
  291. TRIGGERTIME string `json:"triggertime" xorm:"TRIGGERTIME"` // 触发时间
  292. TRIGGERTRADEDATE string `json:"triggertradedate" xorm:"TRIGGERTRADEDATE"` // 触发交易日
  293. TRIGGERQTY float64 `json:"triggerqty" xorm:"TRIGGERQTY"` // 触发数量
  294. TRIGGERAMOUNT float64 `json:"triggeramount" xorm:"TRIGGERAMOUNT"` // 触发金额
  295. TRIGGERSTATUS int32 `json:"triggerstatus" xorm:"TRIGGERSTATUS"` // 触发状态 - 1:成功 2:失败
  296. RETCODE string `json:"retcode" xorm:"RETCODE"` // 错误码
  297. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 定投商品代码
  298. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 定投商品名称
  299. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 定投商品单位id
  300. CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
  301. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  302. QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  303. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 账号(登录代码)
  304. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  305. MOBILE string `json:"-" xorm:"'MOBILE'"` // 电话号码(用户资料里的电话)
  306. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称(userid对应的名称)
  307. ACCOUNTNAME string `json:"accountname"` // 账号名称(ACCOUNTID对应的名称)
  308. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  309. CURRENCYNAME string `json:"currencyname"` // 币种名称
  310. BeginDate string `json:"-"` // 开始交易日
  311. EndDate string `json:"-"` // 结束交易日
  312. FilterName string `json:"-"` // 模糊搜索
  313. }
  314. func (r *QhjRSTriggerLog) calc() {
  315. //r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  316. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  317. r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
  318. ZoomByDecimal(r.QTYDECIMALPLACE, &r.TRIGGERQTY)
  319. if r.REGULARLYMODE == 1 {
  320. ZoomByDecimal(r.QTYDECIMALPLACE, &r.REGULARLYMODEVALUE)
  321. }
  322. if r.LOGINCODE == "" {
  323. r.LOGINCODE = DecryptField(r.MOBILE)
  324. }
  325. }
  326. func (r *QhjRSTriggerLog) buildSql() string {
  327. var sqlId utils.SQLVal = "with k as (select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  328. "SELECT t.TRADEID," +
  329. " t.LOGID," +
  330. " t.REGULARLYSTRATEGYID," +
  331. " t.USERID," +
  332. " t.ACCOUNTID," +
  333. " t.GOODSID," +
  334. " t.REGULARLYCYCLE," +
  335. " t.REGULARLYCYCLEVALUE," +
  336. " t.REGULARLYMODE," +
  337. " t.REGULARLYMODEVALUE," +
  338. " to_char(t.TRIGGERTIME, 'yyyy-mm-dd hh24:mi:ss') TRIGGERTIME," +
  339. " t.TRIGGERTRADEDATE," +
  340. " t.TRIGGERQTY," +
  341. " t.TRIGGERAMOUNT," +
  342. " t.TRIGGERSTATUS," +
  343. " t.RETCODE," +
  344. " g.goodscode," +
  345. " g.goodsname," +
  346. " g.decimalplace," +
  347. " g.qtydecimalplace," +
  348. " g.goodunitid," +
  349. " ta.accountname," +
  350. " ta.currencyid," +
  351. " k.logincode," +
  352. " ui.userinfotype," +
  353. " ui.mobile," +
  354. " u.accountname username" +
  355. " FROM QHJ_RSTRIGGERLOG t" +
  356. " LEFT JOIN GOODS g" +
  357. " on t.goodsid = g.goodsid" +
  358. " LEFT JOIN TAACCOUNT ta" +
  359. " on t.accountid = ta.accountid" +
  360. " LEFT JOIN k on t.userid=k.userid" +
  361. " LEFT JOIN USERACCOUNT u on t.userid=u.userid" +
  362. " LEFT JOIN USERINFO ui on t.userid=ui.userid" +
  363. " WHERE 1 = 1"
  364. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  365. sqlId.AndEx("t.REGULARLYSTRATEGYID", r.REGULARLYSTRATEGYID, r.REGULARLYSTRATEGYID > 0)
  366. sqlId.AndEx("ui.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  367. sqlId.AndEx("t.goodsid", r.GOODSID, r.GOODSID > 0)
  368. if len(r.BeginDate) > 0 {
  369. sqlId.JoinFormat(" and t.TRIGGERTRADEDATE >=%v", r.BeginDate)
  370. }
  371. if len(r.EndDate) > 0 {
  372. sqlId.JoinFormat(" and t.TRIGGERTRADEDATE <=%v", r.EndDate)
  373. }
  374. if len(r.FilterName) > 0 {
  375. sqlId.JoinFormat(" and (k.logincode like '%%%v%%' or u.accountname like '%%%v%%')", r.FilterName, r.FilterName)
  376. }
  377. return sqlId.String()
  378. }
  379. // GetDataEx 获取定投规则策略触发记录
  380. func (r *QhjRSTriggerLog) GetDataEx() (interface{}, error) {
  381. sData := make([]QhjRSTriggerLog, 0)
  382. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  383. for i := range sData {
  384. sData[i].calc()
  385. }
  386. return sData, err
  387. }
  388. // UserReceiveInfo 用户收货信息
  389. type UserReceiveInfo struct {
  390. AUTOID int32 `json:"autoid" xorm:"AUTOID"` // AutoID
  391. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  392. RECEIVERNAME string `json:"receivername" xorm:"RECEIVERNAME"` // 提货人姓名
  393. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 证件类型
  394. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 证件号码(加密存储)
  395. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式(加密存储)
  396. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  397. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  398. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  399. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  400. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  401. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  402. ISDEFAULT int32 `json:"isdefault" xorm:"ISDEFAULT"` // 是否默认地址 - 0:否 1:是
  403. HASENCRYPT int32 `json:"hasencrypt" xorm:"HASENCRYPT"` // 数据是否已加密 - 0:未加密 1:已加密
  404. COUNTRYNAME string `json:"countryname"` // 国家名称
  405. CITYNAME string `json:"cityname"` // 城市名称
  406. PROVINCENAME string `json:"provincename"` // 省名称
  407. DISTRICTNAME string `json:"districtname"` // 地区名称
  408. }
  409. func (r *UserReceiveInfo) calc() {
  410. // 加密过的长度 > 16, 否则是未加密的
  411. if len(r.CARDNUM) > 16 {
  412. r.CARDNUM = DecryptField(r.CARDNUM)
  413. }
  414. if len(r.PHONENUM) > 16 {
  415. r.PHONENUM = DecryptField(r.PHONENUM)
  416. }
  417. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  418. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  419. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  420. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  421. }
  422. func (r *UserReceiveInfo) buildSql() string {
  423. var sqlId utils.SQLVal = "SELECT t.AUTOID," +
  424. " t.USERID," +
  425. " t.RECEIVERNAME," +
  426. " t.CARDTYPEID," +
  427. " t.CARDNUM," +
  428. " t.PHONENUM," +
  429. " t.ADDRESS," +
  430. " t.TAKEREMARK," +
  431. " t.COUNTRYID," +
  432. " t.PROVINCEID," +
  433. " t.CITYID," +
  434. " t.DISTRICTID," +
  435. " t.ISDEFAULT," +
  436. " t.HASENCRYPT" +
  437. " FROM USERRECEIVEINFO t" +
  438. " WHERE 1 = 1"
  439. sqlId.And("t.USERID", r.USERID)
  440. return sqlId.String()
  441. }
  442. // GetDataEx 获取用户收货信息
  443. func (r *UserReceiveInfo) GetDataEx() (interface{}, error) {
  444. sData := make([]UserReceiveInfo, 0)
  445. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  446. for i := range sData {
  447. sData[i].calc()
  448. }
  449. return sData, err
  450. }
  451. // UserCollectConfig 提现账户设置
  452. type UserCollectConfig struct {
  453. COLLECTCONFIGID string `json:"collectconfigid" xorm:"COLLECTCONFIGID"` // 收款账户配置ID(SEQ_USERCOLLECTCONFIG)
  454. USERID int64 `json:"userid" xorm:"USERID"` // 收款人用户ID
  455. COLLECTACCOUNTNO string `json:"collectaccountno" xorm:"COLLECTACCOUNTNO"` // 收款人账户
  456. COLLECTACCOUNTNAME string `json:"collectaccountname" xorm:"COLLECTACCOUNTNAME"` // 收款人账户名称
  457. COLLECTBANKNAME string `json:"collectbankname" xorm:"COLLECTBANKNAME"` // 收款人开户行
  458. COLLECTBRANCHBANKNAME string `json:"collectbranchbankname" xorm:"COLLECTBRANCHBANKNAME"` // 收款人开户支行
  459. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  460. ACCOUNTSTATUS int32 `json:"accountstatus" xorm:"ACCOUNTSTATUS"` // 账户状态 - 1:正常 2:停用 3:注销
  461. }
  462. func (r *UserCollectConfig) calc() {
  463. // 加密后的长度是32的倍数
  464. if len(r.COLLECTACCOUNTNO)%32 == 0 {
  465. r.COLLECTACCOUNTNO = DecryptField(r.COLLECTACCOUNTNO)
  466. }
  467. }
  468. func (r *UserCollectConfig) buildSql() string {
  469. var sqlId utils.SQLVal = "SELECT t.COLLECTCONFIGID," +
  470. " t.USERID," +
  471. " t.COLLECTACCOUNTNO," +
  472. " t.COLLECTACCOUNTNAME," +
  473. " t.COLLECTBANKNAME," +
  474. " t.COLLECTBRANCHBANKNAME," +
  475. " t.REMARK," +
  476. " t.ACCOUNTSTATUS" +
  477. " FROM USERCOLLECTCONFIG t" +
  478. " WHERE 1 = 1"
  479. sqlId.And("t.USERID", r.USERID)
  480. return sqlId.String()
  481. }
  482. // GetDataEx 获取提现账户设置
  483. func (r *UserCollectConfig) GetDataEx() (interface{}, error) {
  484. sData := make([]UserCollectConfig, 0)
  485. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  486. for i := range sData {
  487. sData[i].calc()
  488. }
  489. return sData, err
  490. }
  491. // QhjTradeGoodsPickup 提货单
  492. type QhjTradeGoodsPickup struct {
  493. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 更新来源 - 1:管理端 2:终端
  494. STOREUSERID int64 `json:"storeuserid" xorm:"STOREUSERID"` // 门店用户ID (千海金)
  495. ARTRADEDATE string `json:"artradedate" xorm:"ARTRADEDATE"` // 自动收货交易日(yyyyMMdd)
  496. EXPRESSCOMPANY string `json:"expresscompany" xorm:"EXPRESSCOMPANY"` // 物流公司
  497. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  498. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE"` // 审核交易日(yyyyMMdd)
  499. EXPRESSNUM string `json:"expressnum" xorm:"EXPRESSNUM"` // 物流单号
  500. TAKEORDERID string `json:"takeorderid" xorm:"TAKEORDERID"` // 提货单号(905+Unix秒时间戳(10位)+xxxxxx)
  501. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账户ID
  502. GOODSID int64 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  503. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  504. QTY float64 `json:"qty" xorm:"QTY"` // 交易商品总手数(交易商品 - 69模式按成交量放大) - 明细表的交易商品手数汇总
  505. REQTIME string `json:"reqtime" xorm:"REQTIME"` // 提货申请时间
  506. RECIVERNAME string `json:"recivername" xorm:"RECIVERNAME"` // 提货人姓名
  507. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID"` // 提货人证件类型
  508. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 提货人证件号码
  509. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 提货人联系方式
  510. TAKEMODE int32 `json:"takemode" xorm:"TAKEMODE"` // 提货方式 - 2:自提 3:配送(邮寄)
  511. ADDRESS string `json:"address" xorm:"ADDRESS"` // 提货人详细地址
  512. TAKEREMARK string `json:"takeremark" xorm:"TAKEREMARK"` // 提货备注
  513. TAKEORDERSTATUS int32 `json:"takeorderstatus" xorm:"TAKEORDERSTATUS"` // 提货状态 - 1:备货中 2:待取货(自提) 3:已取货(自提) 4:待收货(邮寄) 5:已收货(邮寄) 6:自动收货(邮寄) 7:已拒绝 8:已撤销
  514. AUDITER int32 `json:"auditer" xorm:"AUDITER"` // 审核人
  515. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间(发货时间 | 备货完成时间 都是这个字段)
  516. CONFIRMTIME string `json:"confirmtime" xorm:"'CONFIRMTIME'"` // 取货时间 或 收货时间
  517. CHECKREMARK string `json:"checkremark" xorm:"CHECKREMARK"` // 审核备注
  518. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  519. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  520. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  521. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 提货金额
  522. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  523. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  524. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  525. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  526. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  527. GOODSAGREEUNIT float64 `json:"goodsagreeunit" xorm:"GOODSAGREEUNIT"` // 交易商品乘数
  528. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 提货商品合约乘数
  529. PICKUPRATIO float64 `json:"pickupratio" xorm:"PICKUPRATIO"` // 提货系数
  530. PICKUPGOODSQTY float64 `json:"pickupgoodsqty" xorm:"PICKUPGOODSQTY"` // 提货商品手数(数量)
  531. GOODSQTY float64 `json:"goodsqty" xorm:"GOODSQTY"` // 交易商品手数(69模式按成交量小数位放大取整)
  532. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)-提货单明细表
  533. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  534. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID(提货商品)
  535. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  536. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  537. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  538. QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 商品数量小数位
  539. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 账号(登录代码, 有可能为空)
  540. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型 1-个人 2-企业
  541. MOBILE string `json:"-" xorm:"'MOBILE'"` // 手机号码(userinfo表中的手机号码)
  542. ENUMDICNAME string `json:"enumdicname"` // 单位名称(提货商品)
  543. USERNAME string `json:"username"` // 用户名称
  544. STOREUSERNAME string `json:"storeusername"` // 门店用户名称
  545. COUNTRYNAME string `json:"countryname"` // 国家名称
  546. CITYNAME string `json:"cityname"` // 城市名称
  547. PROVINCENAME string `json:"provincename"` // 省名称
  548. DISTRICTNAME string `json:"districtname"` // 地区名称
  549. }
  550. func (r *QhjTradeGoodsPickup) calc() {
  551. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.PICKUPGOODSUNITID)
  552. r.STOREUSERNAME = mtpcache.GetUserNameByUserId(r.STOREUSERID)
  553. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  554. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  555. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  556. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  557. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  558. if len(r.LOGINCODE) == 0 {
  559. // 如果登录代码为空, 取手机号码显示
  560. r.LOGINCODE = DecryptField(r.MOBILE)
  561. }
  562. ZoomByDecimal(r.QTYDECIMALPLACE, &r.GOODSQTY)
  563. ZoomByDecimal(r.QTYDECIMALPLACE, &r.QTY)
  564. }
  565. func (r *QhjTradeGoodsPickup) buildSql() string {
  566. var sqlId utils.SQLVal = "with tmp as (select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  567. "SELECT t.AUDITSRC," +
  568. " t.STOREUSERID," +
  569. " t.ARTRADEDATE," +
  570. " t.EXPRESSCOMPANY," +
  571. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  572. " t.AUDITTRADEDATE," +
  573. " t.EXPRESSNUM," +
  574. " to_char(t.TAKEORDERID) TAKEORDERID," +
  575. " t.ACCOUNTID," +
  576. " t.GOODSID," +
  577. " t.USERID," +
  578. " t.QTY," +
  579. " to_char(t.REQTIME, 'yyyy-mm-dd hh24:mi:ss') REQTIME," +
  580. " t.RECIVERNAME," +
  581. " t.CARDTYPEID," +
  582. " t.CARDNUM," +
  583. " t.PHONENUM," +
  584. " t.TAKEMODE," +
  585. " decode(t.takemode, 3, t.address, u.address) address," +
  586. " t.TAKEREMARK," +
  587. " t.TAKEORDERSTATUS," +
  588. " t.AUDITER," +
  589. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  590. " to_char(t.CONFIRMTIME, 'yyyy-mm-dd hh24:mi:ss') CONFIRMTIME," +
  591. " t.CHECKREMARK," +
  592. " t.TRADEDATE," +
  593. " t.MARKETID," +
  594. " t.HANDLESTATUS," +
  595. " t.AMOUNT," +
  596. " decode(t.takemode, 3, t.COUNTRYID, u.countryid) COUNTRYID," +
  597. " decode(t.takemode, 3, t.PROVINCEID, u.provinceid) PROVINCEID," +
  598. " decode(t.takemode, 3, t.CITYID, u.cityid) CITYID," +
  599. " decode(t.takemode, 3, t.DISTRICTID, u.districtid) DISTRICTID," +
  600. " k.PICKUPGOODSID," +
  601. " k.GOODSAGREEUNIT," +
  602. " k.PICKUPGOODSAGREEUNIT," +
  603. " k.PICKUPRATIO," +
  604. " k.PICKUPGOODSQTY," +
  605. " k.GOODSQTY," +
  606. " k.PREPAREDAYS," +
  607. " g.PICKUPGOODSNAME," +
  608. " g.PICKUPGOODSUNITID," +
  609. " g2.goodsname," +
  610. " g2.decimalplace," +
  611. " g2.qtydecimalplace," +
  612. " g2.goodscode," +
  613. " u2.userinfotype," +
  614. " u2.mobile," +
  615. " tmp.logincode" +
  616. " FROM TRADE_GOODSPICKUP t" +
  617. " LEFT JOIN TRADE_GOODSPICKUPDETAIL k" +
  618. " on t.takeorderid = k.takeorderid" +
  619. " LEFT JOIN PICKUPGOODS g" +
  620. " on k.pickupgoodsid = g.pickupgoodsid" +
  621. " LEFT JOIN GOODS g2" +
  622. " on t.goodsid = g2.goodsid" +
  623. " LEFT JOIN USERINFO u" +
  624. " on t.storeuserid = u.userid" +
  625. " LEFT JOIN USERINFO u2" +
  626. " on t.userid = u2.userid" +
  627. " LEFT JOIN tmp on t.userid=tmp.userid" +
  628. " WHERE 1 = 1"
  629. // 获取角色=20组织的角色数据, 判断机构类型
  630. m := QhjAreaRole{USERID: r.USERID, ROLETYPE: 20}
  631. d, _ := m.GetData()
  632. if len(d) > 0 {
  633. v := d[0]
  634. if v.SUBORGTYPE == 0 {
  635. // 机构(企业) 查所有, 即不过淲userid
  636. } else if v.SUBORGTYPE == 2 {
  637. // 门店查询
  638. sqlId.And("t.storeuserid", r.USERID)
  639. } else {
  640. sqlId.And("t.USERID", r.USERID)
  641. }
  642. } else {
  643. sqlId.And("t.USERID", r.USERID)
  644. }
  645. sqlId.AndEx("t.TAKEORDERSTATUS", r.TAKEORDERSTATUS, r.TAKEORDERSTATUS > 0)
  646. return sqlId.String()
  647. }
  648. // GetDataEx 获取提货单
  649. func (r *QhjTradeGoodsPickup) GetDataEx() (interface{}, error) {
  650. sData := make([]QhjTradeGoodsPickup, 0)
  651. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  652. for i := range sData {
  653. sData[i].calc()
  654. }
  655. return sData, err
  656. }
  657. // QhjPickGoods 提货商品
  658. type QhjPickGoods struct {
  659. PICKUPGOODSID string `json:"pickupgoodsid" xorm:"PICKUPGOODSID"` // 提货商品ID
  660. PICKUPGOODSNAME string `json:"pickupgoodsname" xorm:"PICKUPGOODSNAME"` // 提货商品名称
  661. PICKUPGOODSUNITID int32 `json:"pickupgoodsunitid" xorm:"PICKUPGOODSUNITID"` // 单位ID
  662. PICKUPGOODSAGREEUNIT float64 `json:"pickupgoodsagreeunit" xorm:"PICKUPGOODSAGREEUNIT"` // 合约乘数
  663. PICKUPGOODSDESC string `json:"pickupgoodsdesc" xorm:"PICKUPGOODSDESC"` // 描述
  664. IMAGEADDRESS string `json:"imageaddress" xorm:"IMAGEADDRESS"` // 图片
  665. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  666. MODIFYSRC int32 `json:"modifysrc" xorm:"MODIFYSRC"` // 修改来源 - 1:管理端 2:终端
  667. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 修改人
  668. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  669. PREPAREDAYS int32 `json:"preparedays" xorm:"PREPAREDAYS"` // 备货期(天)
  670. PICKUPGOODSSTATUS int32 `json:"pickupgoodsstatus" xorm:"PICKUPGOODSSTATUS"` // 状态 - 1:正常 2:停用 3:注销
  671. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品id
  672. PICKUPRATIO float64 `json:"pickupratio" xorm:"'PICKUPRATIO'"` // 提货系数
  673. MODIFIERNAME string `json:"modifiername"` // 修改人名称
  674. FilterStatus string `json:"-"` // 状态过淲
  675. ENUMDICNAME string `json:"enumdicname"` // 单位名称(提货商品)
  676. }
  677. func (r *QhjPickGoods) calc() {
  678. if r.MODIFYSRC == 1 {
  679. r.MODIFIERNAME = mtpcache.GetSystemmangerLoginCode(r.MODIFIERID)
  680. } else {
  681. r.MODIFIERNAME = mtpcache.GetLoginCodeByLoginId(r.MODIFIERID)
  682. }
  683. if r.MODIFIERNAME == "" {
  684. r.MODIFIERNAME = mtpcache.GetUserNameByUserId(r.MODIFIERID)
  685. }
  686. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.PICKUPGOODSUNITID)
  687. }
  688. func (r *QhjPickGoods) buildSql() string {
  689. var sqlId utils.SQLVal = "SELECT t.PICKUPGOODSID," +
  690. " t.PICKUPGOODSNAME," +
  691. " t.PICKUPGOODSUNITID," +
  692. " t.PICKUPGOODSAGREEUNIT," +
  693. " to_char(t.PICKUPGOODSDESC) PICKUPGOODSDESC," +
  694. " to_char(t.IMAGEADDRESS) IMAGEADDRESS," +
  695. " t.REMARK," +
  696. " t.MODIFYSRC," +
  697. " t.MODIFIERID," +
  698. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  699. " t.PREPAREDAYS," +
  700. " t.PICKUPGOODSSTATUS," +
  701. " c.goodsid," +
  702. " c.pickupratio" +
  703. " FROM PICKUPGOODS t" +
  704. " INNER JOIN GOODSPICKUPCONFIG c on t.pickupgoodsid=c.pickupgoodsid" +
  705. " WHERE 1 = 1"
  706. sqlId.AndEx("c.goodsid", r.GOODSID, r.GOODSID > 0)
  707. if len(r.FilterStatus) > 0 {
  708. sqlId.Join(fmt.Sprintf(" and t.PICKUPGOODSSTATUS in(%v)", r.FilterStatus))
  709. }
  710. return sqlId.String()
  711. }
  712. // GetDataEx 获取提货商品
  713. func (r *QhjPickGoods) GetDataEx() (interface{}, error) {
  714. sData := make([]QhjPickGoods, 0)
  715. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  716. for i := range sData {
  717. sData[i].calc()
  718. }
  719. return sData, err
  720. }
  721. // QhjPickArea 提货门店
  722. type QhjPickArea struct {
  723. ISRETURNSCORE int32 `json:"-" xorm:"ISRETURNSCORE"` // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
  724. ORGTYPE int32 `json:"-" xorm:"ORGTYPE"` // 组织机构类型 1:机构\分支节点 2:交易员\叶子节点 3:部门\分支节点
  725. ROLETYPE int32 `json:"-" xorm:"ROLETYPE"` // 角色类型
  726. SUBORGTYPE int32 `json:"suborgtype" xorm:"SUBORGTYPE"` // 子机构类型(千海金) - 0:机构 1:代理 2:门店
  727. CREATORID int64 `json:"-" xorm:"CREATORID"` // 创建人ID
  728. FROMUSERID int64 `json:"fromuserid" xorm:"FROMUSERID"` // 所属机构(组织机构)( OrgType = 1时为自己, = 2\3时取上级机构的所属机构)
  729. MODIFIERID int64 `json:"-" xorm:"MODIFIERID"` // 修改人ID
  730. PARENTUSERID int64 `json:"-" xorm:"PARENTUSERID"` // 上级组织机构(组织机构)
  731. ROOTUSERID int64 `json:"-" xorm:"ROOTUSERID"` // 顶级组织机构用户ID(组织机构)
  732. TRADEACCOUNTID int64 `json:"-" xorm:"TRADEACCOUNTID"` // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号) - 作废, 使用UserReckonAccount
  733. USERID int64 `json:"userid" xorm:"USERID"` // 机构用户ID 其他做市关系,都设置为 1
  734. CREATETIME string `json:"-" xorm:"CREATETIME"` // 创建时间
  735. MODIFYTIME string `json:"-" xorm:"MODIFYTIME"` // 修改时间
  736. OUTUSERID string `json:"-" xorm:"OUTUSERID"` // 外部账户[场外期权做市商]
  737. SHOPPASSWORD string `json:"-" xorm:"SHOPPASSWORD"` // 商城店铺登陆密码(商城店铺角色使用)
  738. SUBLEVELPATH string `json:"-" xorm:"SUBLEVELPATH"` // 组织机构层级路径(逗号分隔,首尾加逗号)
  739. TRANSURL string `json:"-" xorm:"TRANSURL"` // 物流地址(物流机构)
  740. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  741. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  742. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  743. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  744. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 详细地址
  745. USERNAME string `json:"username"` // 机构用户名称(门店门称)
  746. FROMUSERNAME string `json:"fromusername"` // 所属机构名称
  747. COUNTRYNAME string `json:"countryname"` // 国家名称
  748. CITYNAME string `json:"cityname"` // 城市名称
  749. PROVINCENAME string `json:"provincename"` // 省名称
  750. DISTRICTNAME string `json:"districtname"` // 地区名称
  751. }
  752. func (r *QhjPickArea) calc() {
  753. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  754. r.FROMUSERNAME = mtpcache.GetUserNameByUserId(r.FROMUSERID)
  755. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  756. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  757. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  758. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  759. }
  760. func (r *QhjPickArea) buildSql() string {
  761. var sqlId utils.SQLVal = "SELECT distinct t.FROMUSERID," +
  762. " t.SUBORGTYPE," +
  763. " t.USERID," +
  764. " t.ROLETYPE," +
  765. " t.TRADEACCOUNTID," +
  766. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  767. " t.CREATORID," +
  768. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  769. " t.MODIFIERID," +
  770. " t.SHOPPASSWORD," +
  771. " t.ISRETURNSCORE," +
  772. " t.TRANSURL," +
  773. " t.OUTUSERID," +
  774. " t.PARENTUSERID," +
  775. " t.ROOTUSERID," +
  776. " t.SUBLEVELPATH," +
  777. " t.ORGTYPE," +
  778. " u.countryid," +
  779. " u.provinceid," +
  780. " u.cityid," +
  781. " u.districtid," +
  782. " u.address" +
  783. " FROM AREAROLE t" +
  784. " LEFT JOIN USERINFO u on t.userid=u.userid" +
  785. " WHERE 1 = 1"
  786. sqlId.And("t.SUBORGTYPE", 2)
  787. sqlId.And("t.roletype", 99)
  788. return sqlId.String()
  789. }
  790. // GetDataEx 获取机构角色
  791. func (r *QhjPickArea) GetDataEx() (interface{}, error) {
  792. sData := make([]QhjPickArea, 0)
  793. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  794. for i := range sData {
  795. sData[i].calc()
  796. }
  797. return sData, err
  798. }
  799. // QhjBankAccountSign 签约银行
  800. type QhjBankAccountSign struct {
  801. ACCOUNTTYPE int32 `json:"accounttype" xorm:"ACCOUNTTYPE"` // 账户类型(UserType)
  802. BANKACCOUNTTYPE int32 `json:"bankaccounttype" xorm:"BANKACCOUNTTYPE"` // 银行账户类型 - 1-对私; 2-对公
  803. BANKCARDTYPE int32 `json:"bankcardtype" xorm:"BANKCARDTYPE"` // 银行卡类型
  804. DIRECT int32 `json:"direct" xorm:"DIRECT"` // 方向(可以判断那方先发起的签约)
  805. SIGNSTATUS int32 `json:"signstatus" xorm:"SIGNSTATUS"` // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中 10:审核拒绝 11:换签待审核
  806. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  807. ACCOUNTCODE string `json:"accountcode" xorm:"ACCOUNTCODE"` // 资金账号
  808. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 资金账号对应的账号名(UserName)
  809. APPLICATIONTIME string `json:"applicationtime" xorm:"APPLICATIONTIME"` // 最后一次更新的时间
  810. APPLYEXCHTICKET string `json:"applyexchticket" xorm:"APPLYEXCHTICKET"` // 申请流水
  811. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  812. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 签约银行卡账号名
  813. BANKACCOUNTNO string `json:"bankaccountno" xorm:"BANKACCOUNTNO"` // 银行卡号
  814. BANKCHILDACCOUNT string `json:"bankchildaccount" xorm:"BANKCHILDACCOUNT"` // 银行子账号(签约成功后,很多银行会返回对应的这个虚拟账号)
  815. BANKCITY string `json:"bankcity" xorm:"BANKCITY"` // 开户行城市
  816. BANKID string `json:"bankid" xorm:"BANKID"` // 签约银行ID
  817. BANKPROVINCE string `json:"bankprovince" xorm:"BANKPROVINCE"` // 开户行省份
  818. BRANCHBANKID string `json:"branchbankid" xorm:"BRANCHBANKID"` // 签约银行支行号
  819. BRANCHBANKNAME string `json:"branchbankname" xorm:"BRANCHBANKNAME"` // 签约银行支行名称
  820. CARDNO string `json:"cardno" xorm:"CARDNO"` // 证件号码
  821. CARDTYPE string `json:"cardtype" xorm:"CARDTYPE"` // 证件类型
  822. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  823. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号
  824. EXCHTICKET string `json:"exchticket" xorm:"EXCHTICKET"` // 最后一次签约成功的流水号
  825. EXTENDINFO string `json:"extendinfo" xorm:"EXTENDINFO"` // 扩展信息(JSON字符串)
  826. MOBILEPHONE string `json:"mobilephone" xorm:"MOBILEPHONE"` // 手机号
  827. NETADDR string `json:"netaddr" xorm:"NETADDR"` // 调转网址
  828. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间(签解约更新时间)
  829. RELATEDUSERID int64 `json:"relateduserid" xorm:"'RELATEDUSERID'"` // 关联使用者userid
  830. BANKNAME string `json:"bankname" xorm:"'BANKNAME'"` // 签约银行名称
  831. ACCOUNTNAME2 string `json:"accountname2"` // 资金账号对应的账号名(UserName) - 密文
  832. BANKACCOUNTNAME2 string `json:"bankaccountname2"` // 签约银行卡账号名 - 密文
  833. CARDNO2 string `json:"cardno2"` // 证件号码 - 密文
  834. BANKACCOUNTNO2 string `json:"bankaccountno2"` // 银行卡号 - 密文
  835. MOBILEPHONE2 string `json:"mobilephone2"` // 手机号 - 密文
  836. }
  837. func (r *QhjBankAccountSign) calc() {
  838. r.ACCOUNTNAME2 = r.ACCOUNTNAME
  839. r.BANKACCOUNTNAME2 = r.BANKACCOUNTNAME
  840. r.CARDNO2 = r.CARDNO
  841. r.BANKACCOUNTNO2 = r.BANKACCOUNTNO
  842. r.MOBILEPHONE2 = r.MOBILEPHONE
  843. r.ACCOUNTNAME = DecryptField(r.ACCOUNTNAME)
  844. r.BANKACCOUNTNAME = DecryptField(r.BANKACCOUNTNAME)
  845. r.CARDNO = DecryptField(r.CARDNO)
  846. r.BANKACCOUNTNO = DecryptField(r.BANKACCOUNTNO)
  847. r.MOBILEPHONE = DecryptField(r.MOBILEPHONE)
  848. }
  849. func (r *QhjBankAccountSign) buildSql() string {
  850. var sqlId utils.SQLVal = "SELECT t.ACCOUNTCODE," +
  851. " t.CUSBANKID," +
  852. " t.SIGNSTATUS," +
  853. " t.CURRENCY," +
  854. " t.ACCOUNTTYPE," +
  855. " t.ACCOUNTNAME," +
  856. " t.BANKCARDTYPE," +
  857. " t.BANKACCOUNTNO," +
  858. " t.BANKACCOUNTTYPE," +
  859. " t.BANKCHILDACCOUNT," +
  860. " t.BANKID," +
  861. " t.BRANCHBANKID," +
  862. " t.BRANCHBANKNAME," +
  863. " t.BANKACCOUNTNAME," +
  864. " t.CARDTYPE," +
  865. " t.CARDNO," +
  866. " t.BANKPROVINCE," +
  867. " t.BANKCITY," +
  868. " t.DIRECT," +
  869. " t.MOBILEPHONE," +
  870. " t.EXTENDINFO," +
  871. " t.EXCHTICKET," +
  872. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  873. " to_char(t.APPLICATIONTIME, 'yyyy-mm-dd hh24:mi:ss') APPLICATIONTIME," +
  874. " t.NETADDR," +
  875. " t.AUDITID," +
  876. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  877. " t.APPLYEXCHTICKET," +
  878. " ta.accountid," +
  879. " ta.relateduserid," +
  880. " b.bankname" +
  881. " FROM BANK_ACCOUNTSIGN t" +
  882. " INNER JOIN TAACCOUNT ta" +
  883. " on t.accountcode = to_char(ta.accountid)" +
  884. " LEFT JOIN BANK_BANKINFO b on t.bankid=b.bankid" +
  885. " WHERE 1 = 1" +
  886. " and ta.taaccounttype = 2"
  887. sqlId.And("ta.RELATEDUSERID", r.RELATEDUSERID)
  888. return sqlId.String()
  889. }
  890. // GetDataEx 获取签约银行
  891. func (r *QhjBankAccountSign) GetDataEx() (interface{}, error) {
  892. sData := make([]QhjBankAccountSign, 0)
  893. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  894. for i := range sData {
  895. sData[i].calc()
  896. }
  897. return sData, err
  898. }
  899. // QhjBankInfo 银行信息列表
  900. type QhjBankInfo struct {
  901. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 0:正常 1:注销
  902. ORDERINDEX int64 `json:"orderindex" xorm:"ORDERINDEX"` // 排序顺序
  903. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  904. BANKNAME string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  905. CLEARBANKNO string `json:"clearbankno" xorm:"CLEARBANKNO"` // 清算系统银行编号
  906. }
  907. func (r *QhjBankInfo) calc() {
  908. }
  909. func (r *QhjBankInfo) buildSql() string {
  910. 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"
  911. return sqlId.String()
  912. }
  913. // GetData 获取银行信息列表
  914. func (r *QhjBankInfo) GetData() ([]QhjBankInfo, error) {
  915. sData := make([]QhjBankInfo, 0)
  916. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  917. for i := range sData {
  918. sData[i].calc()
  919. }
  920. return sData, err
  921. }
  922. // GetDataEx 获取银行信息列表
  923. func (r *QhjBankInfo) GetDataEx() (interface{}, error) {
  924. return r.GetData()
  925. }
  926. // QhjReckonPriceLog 结算价(定投价)
  927. type QhjReckonPriceLog struct {
  928. LASTRECKONPRICE float64 `json:"lastreckonprice" xorm:"LASTRECKONPRICE"` // 上日结算价
  929. NEXTDNLIMITPRICE float64 `json:"nextdnlimitprice" xorm:"NEXTDNLIMITPRICE"` // 下个交易日跌停价
  930. NEXTUPLIMITPRICE float64 `json:"nextuplimitprice" xorm:"NEXTUPLIMITPRICE"` // 下个交易日涨停价
  931. RECKONPRICE float64 `json:"reckonprice" xorm:"RECKONPRICE"` // 今日结算价(定投价)
  932. UPDOWNRATE float64 `json:"updownrate" xorm:"UPDOWNRATE"` // 今日涨跌幅
  933. UPDOWNRATE_2D float64 `json:"updownrate_2d" xorm:"UPDOWNRATE_2D"` // 连续两日涨跌幅
  934. UPDOWNRATE_3D float64 `json:"updownrate_3d" xorm:"UPDOWNRATE_3D"` // 连续三日涨跌幅
  935. TOTALHOLDERQTY int32 `json:"totalholderqty" xorm:"TOTALHOLDERQTY"` // 总持仓数
  936. TOTALSTOCK int32 `json:"totalstock" xorm:"TOTALSTOCK"` // 总库存
  937. UPDOWNCOUNT int32 `json:"updowncount" xorm:"UPDOWNCOUNT"` // 连续涨(跌)停天数 (涨跌停标志变为0时值归0,变成涨停或是跌停时值为1,连续涨停天数+1,连续跌停天数+1)
  938. UPDOWNFLAG int32 `json:"updownflag" xorm:"UPDOWNFLAG"` // 连续涨跌停标志 - 0:无涨跌停 -1:跌停 1:涨停
  939. GOODSID int64 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  940. NEXTTRADE string `json:"nexttrade" xorm:"NEXTTRADE"` // 下个交易日
  941. RECKONTIME string `json:"reckontime" xorm:"RECKONTIME"` // 结算时间
  942. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日
  943. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  944. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  945. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  946. }
  947. func (r *QhjReckonPriceLog) calc() {
  948. }
  949. func (r *QhjReckonPriceLog) buildSql() string {
  950. var sqlId utils.SQLVal = "SELECT t.TRADEDATE," +
  951. " t.GOODSID," +
  952. " to_char(t.RECKONTIME, 'yyyy-mm-dd hh24:mi:ss') RECKONTIME," +
  953. " t.LASTRECKONPRICE," +
  954. " t.RECKONPRICE," +
  955. " t.UPDOWNRATE," +
  956. " t.UPDOWNFLAG," +
  957. " t.UPDOWNCOUNT," +
  958. " t.UPDOWNRATE_2D," +
  959. " t.UPDOWNRATE_3D," +
  960. " t.NEXTTRADE," +
  961. " t.NEXTUPLIMITPRICE," +
  962. " t.NEXTDNLIMITPRICE," +
  963. " t.TOTALHOLDERQTY," +
  964. " t.TOTALSTOCK," +
  965. " g.goodsname," +
  966. " g.decimalplace," +
  967. " g.goodscode" +
  968. " FROM RECKON_PRICELOG t" +
  969. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  970. " INNER JOIN MARKET m on g.marketid=g.marketid" +
  971. " WHERE 1 = 1 and m.marketid=69201"
  972. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  973. if r.TRADEDATE != "" {
  974. sqlId.AndEx("t.TRADEDATE", r.TRADEDATE, len(r.TRADEDATE) > 0)
  975. } else {
  976. sqlId.JoinFormat(" and t.TRADEDATE = (select max(TRADEDATE) from RECKON_PRICELOG)")
  977. }
  978. return sqlId.String()
  979. }
  980. // GetDataEx 获取结算价(定投价)
  981. func (r *QhjReckonPriceLog) GetDataEx() (interface{}, error) {
  982. sData := make([]QhjReckonPriceLog, 0)
  983. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  984. for i := range sData {
  985. sData[i].calc()
  986. }
  987. return sData, err
  988. }
  989. // QhjCustomer 客户资料
  990. type QhjCustomer struct {
  991. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户ID
  992. MEMBERUSERID int64 `json:"memberuserid" xorm:"'MEMBERUSERID'"` // 所属机构ID(所属会员)
  993. PARENTUSERID int64 `json:"parentuserid" xorm:"'PARENTUSERID'"` // 上级机构(所属机构)
  994. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型 1-个人 2-企业
  995. CUSTOMERNAME string `json:"customername" xorm:"'CUSTOMERNAME'"` // 客户名称
  996. CARDTYPE int32 `json:"cardtype" xorm:"'CARDTYPE'"` // 证件类型
  997. CARDNUM string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码
  998. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  999. TELPHONE string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话
  1000. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 通讯地址
  1001. REMARK string `json:"remark" xorm:"'REMARK'"` // 备注
  1002. STATUS int32 `json:"status" xorm:"'STATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
  1003. STATUSDESC string `json:"statusdesc"` // 账户状态中文描述
  1004. ATTACHMENT1 string `json:"attachment1" xorm:"'ATTACHMENT1'"` // 附件1
  1005. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"'CARDFRONTPHOTOURL'"` // 证件正面图片地址
  1006. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"'CARDBACKPHOTOURL'"` // 证件反面图片地址
  1007. PROXYSTATEMENTURL string `json:"proxystatementurl" xorm:"'PROXYSTATEMENTURL'"` // 授权委托书
  1008. COUNTRYID int32 `json:"countryid" xorm:"'COUNTRYID'"` // 国家
  1009. PROVINCEID int32 `json:"provinceid" xorm:"'PROVINCEID'"` // 省
  1010. CITYID int32 `json:"cityid" xorm:"'CITYID'"` // 市
  1011. DISTRICTID int32 `json:"districtid" xorm:"'DISTRICTID'"` // 区域
  1012. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  1013. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  1014. AUDITTIME string `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
  1015. NICKNAME string `json:"nickname" xorm:"'NICKNAME'"` // 昵称
  1016. TAXPAYERNUM string `json:"taxpayernum" xorm:"'taxpayernum'"` // 纳税人识别号
  1017. LEGALPERSONNAME string `json:"legalpersonname" xorm:"'legalpersonname'"` // 法人姓名(企业)
  1018. CONTACTNAME string `json:"contactname" xorm:"'contactname'"` // 联系人
  1019. EMAIL string `json:"email" xorm:"'EMAIL'"` // 邮件
  1020. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  1021. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 登录账号(代码)
  1022. COUNTRYNAME string `json:"countryname"` // 国家名称
  1023. CITYNAME string `json:"cityname"` // 城市名称
  1024. PROVINCENAME string `json:"provincename"` // 省名称
  1025. DISTRICTNAME string `json:"districtname"` // 地区名称
  1026. CARDTYPENAME string `json:"cardtypename"` // 证件类型名称
  1027. MEMBERUSERNAME string `json:"memberusername"` // 所属会员名称
  1028. PARENTUSERNAME string `json:"parentusername"` //所属机构名称
  1029. QUERYTYPE int32 `json:"-"` // 查询类型(1:未提交(网上开户表) 2:待审核(网上开户表) 3:正常 4:停用)
  1030. IncludeSub int32 `json:"-"` // 包子机构客户 1-包含
  1031. }
  1032. func (r *QhjCustomer) calc() {
  1033. r.MEMBERUSERNAME = mtpcache.GetUserNameByUserId(r.MEMBERUSERID)
  1034. if len(r.USERNAME) == 0 {
  1035. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  1036. }
  1037. r.PARENTUSERNAME = mtpcache.GetUserNameByUserId(r.PARENTUSERID)
  1038. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  1039. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  1040. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  1041. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  1042. switch r.QUERYTYPE {
  1043. case 1, 2: // 网上开户表
  1044. r.ADDRESS = DecryptField(r.ADDRESS)
  1045. r.TELPHONE = DecryptField(r.TELPHONE)
  1046. case 3, 4: // 正式表
  1047. r.TELPHONE = DecryptField(r.TELPHONE)
  1048. }
  1049. r.CARDNUM = DecryptField(r.CARDNUM)
  1050. r.MOBILE = DecryptField(r.MOBILE)
  1051. r.EMAIL = DecryptField(r.EMAIL)
  1052. if len(r.LOGINCODE) == 0 {
  1053. r.LOGINCODE = r.MOBILE
  1054. }
  1055. }
  1056. func (r *QhjCustomer) level() int32 {
  1057. if r.IncludeSub > 0 {
  1058. // 层级, 最多20层
  1059. return 20
  1060. }
  1061. return 1
  1062. }
  1063. func (r *QhjCustomer) buildSql() string {
  1064. if r.QUERYTYPE == 1 || r.QUERYTYPE == 2 {
  1065. return r.buildSqlWskh()
  1066. }
  1067. return r.buildSqlNormal()
  1068. }
  1069. func (r *QhjCustomer) buildSqlWskh() string {
  1070. var sqlId utils.SQLVal = "with tmp as" +
  1071. " (select t.userid, wm_concat(t.logincode) logincode" +
  1072. " from loginaccount t" +
  1073. " group by t.userid)" +
  1074. "select a.*" +
  1075. " from (select t.userid," +
  1076. " t.memberareaid MEMBERUSERID," +
  1077. " t.USERINFOTYPE," +
  1078. " t.username," +
  1079. " t.CUSTOMERNAME," +
  1080. " t.NICKNAME," +
  1081. " t.CARDTYPE," +
  1082. " t.CARDNUM," +
  1083. " t.mobilephone MOBILE," +
  1084. " t.TELPHONE," +
  1085. " t.cardaddress ADDRESS," +
  1086. " t.REMARK," +
  1087. " t.ATTACHMENT1," +
  1088. " t.CARDFRONTPHOTOURL," +
  1089. " t.CARDBACKPHOTOURL," +
  1090. " t.proxystatementurl," +
  1091. " t.userstate status," +
  1092. " t.countryid," +
  1093. " t.provinceid," +
  1094. " t.districtid," +
  1095. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  1096. " t.cityid," +
  1097. " to_char(t.modifiedtime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  1098. " to_char(t.auditime, 'yyyy-mm-dd hh24:mi:ss') audittime," +
  1099. " t.taxpayernum," +
  1100. " t.legalpersonname," +
  1101. " t.contactname," +
  1102. " t.email," +
  1103. " t.areaid parentuserid," +
  1104. " t.logincode" +
  1105. " from wskh_userinfo t" +
  1106. " start with t.areaid = %v" +
  1107. " connect by prior t.userid = t.areaid" +
  1108. " and t.usertype in(2,6)" +
  1109. " and level <= %v) a" +
  1110. " left join tmp k" +
  1111. " on a.userid = k.userid" +
  1112. " where 1 = 1 and a.status in(%v)"
  1113. status := DecodeStr(r.QUERYTYPE == 1, "1", "2,4,5")
  1114. sqlId.FormatParam(r.USERID, r.level(), status)
  1115. sqlId.AndEx("a.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  1116. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and a.customername like '%%%v%%'`, r.CUSTOMERNAME))
  1117. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and a.nickname like '%%%v%%'`, r.NICKNAME))
  1118. return sqlId.String()
  1119. }
  1120. func (r *QhjCustomer) buildSqlNormal() string {
  1121. var sqlId utils.SQLVal = "with tmp as" +
  1122. " (select t.userid, wm_concat(t.logincode) logincode" +
  1123. " from loginaccount t" +
  1124. " group by t.userid)" +
  1125. "select a.*," +
  1126. " k.logincode," +
  1127. " u.USERINFOTYPE," +
  1128. " u.CUSTOMERNAME," +
  1129. " u.NICKNAME," +
  1130. " u.CARDTYPEID CARDTYPE," +
  1131. " u.CARDNUM," +
  1132. " u.MOBILE," +
  1133. " u.TELPHONE," +
  1134. " u.ADDRESS," +
  1135. " u.REMARK," +
  1136. " u.ATTACHMENT1," +
  1137. " u.CARDFRONTPHOTOURL," +
  1138. " u.CARDBACKPHOTOURL," +
  1139. " u.proxystatementurl," +
  1140. " u.countryid," +
  1141. " u.provinceid," +
  1142. " u.districtid," +
  1143. " u.taxpayernum," +
  1144. " u.legalpersonname," +
  1145. " u.contactname," +
  1146. " u.email," +
  1147. " u.cityid" +
  1148. " from (select t.userid," +
  1149. " t.usertype," +
  1150. " t.parentuserid," +
  1151. " t.memberuserid," +
  1152. " t.accountstatus status," +
  1153. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  1154. " to_char(t.modifytime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  1155. " to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') audittime" +
  1156. " from useraccount t" +
  1157. " start with t.usertype=6 and t.parentuserid = %v" +
  1158. " connect by prior t.userid = t.parentuserid" +
  1159. " and t.usertype = 6" +
  1160. " and level <= %v) a" +
  1161. " left join tmp k" +
  1162. " on a.userid = k.userid" +
  1163. " left join userinfo u" +
  1164. " on a.userid = u.userid" +
  1165. " where 1=1 and a.status in(%v)"
  1166. status := DecodeStr(r.QUERYTYPE == 3, "4", "6")
  1167. sqlId.FormatParam(r.USERID, r.level(), status)
  1168. sqlId.AndEx("u.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  1169. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and u.customername like '%%%v%%'`, r.CUSTOMERNAME))
  1170. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and u.nickname like '%%%v%%'`, r.NICKNAME))
  1171. return sqlId.String()
  1172. }
  1173. // GetDataEx 获取客户资料
  1174. func (r *QhjCustomer) GetDataEx() (interface{}, error) {
  1175. sData := make([]QhjCustomer, 0)
  1176. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1177. for i := range sData {
  1178. sData[i].QUERYTYPE = r.QUERYTYPE
  1179. sData[i].calc()
  1180. }
  1181. return sData, err
  1182. }
  1183. // QhjCusBankInfo 托管银行信息
  1184. type QhjCusBankInfo struct {
  1185. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号(对应清算中心TRAN_NO)
  1186. CUSBANKNAME string `json:"cusbankname" xorm:"CUSBANKNAME"` // 银行业务名称
  1187. CUSBANKSHORTNAME string `json:"cusbankshortname" xorm:"CUSBANKSHORTNAME"` // 银行业务简称
  1188. EXCHBANKID string `json:"exchbankid" xorm:"EXCHBANKID"` // 交易所开户银行ID
  1189. EXCHPAYBANKACCNO string `json:"exchpaybankaccno" xorm:"EXCHPAYBANKACCNO"` // 交易所支出结算账户
  1190. EXCHPAYBANKACCNAME string `json:"exchpaybankaccname" xorm:"EXCHPAYBANKACCNAME"` // 交易所支出结算账户户名
  1191. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  1192. CANSIGN int32 `json:"cansign" xorm:"CANSIGN"` // 是否可签约 - 0:不可 1:可以
  1193. CANRELEASE int32 `json:"canrelease" xorm:"CANRELEASE"` // 是否可解约 - 0:不可 1:可以
  1194. CANINAMOUNT int32 `json:"caninamount" xorm:"CANINAMOUNT"` // 是否可入金 - 0:不可 1:可以
  1195. CANOUTAMOUNT int32 `json:"canoutamount" xorm:"CANOUTAMOUNT"` // 是否可出金 - 0:不可 1:可以
  1196. RISKINFO string `json:"riskinfo" xorm:"RISKINFO"` // 签约风险提示书
  1197. CANSIGN2 int32 `json:"cansign2" xorm:"CANSIGN2"` // 是否可签约(网银端) - 0:不可 1:可以
  1198. CANRELEASE2 int32 `json:"canrelease2" xorm:"CANRELEASE2"` // 是否可解约(网银端) - 0:不可 1:可以
  1199. CANINAMOUNT2 int32 `json:"caninamount2" xorm:"CANINAMOUNT2"` // 是否可入金(网银端) - 0:不可 1:可以
  1200. CANOUTAMOUNT2 int32 `json:"canoutamount2" xorm:"CANOUTAMOUNT2"` // 是否可出金(网银端) - 0:不可 1:可以
  1201. CANBINDCARD int32 `json:"canbindcard" xorm:"CANBINDCARD"` // 是否可绑卡与解卡 - 0:不可 1:可以
  1202. ISNEEDCLEAR int32 `json:"isneedclear" xorm:"ISNEEDCLEAR"` // 是否需要清算 - 0:不需要 1:需要
  1203. CANMODIFYPHONE int32 `json:"canmodifyphone" xorm:"CANMODIFYPHONE"` // 是否可修改手机号 - 0:不可 1:可以
  1204. CANMODIFYSIGNINFO int32 `json:"canmodifysigninfo" xorm:"CANMODIFYSIGNINFO"` // 是否可修改签约信息 - 0:不可 1:可以
  1205. ISNEEDCHECK int32 `json:"isneedcheck" xorm:"ISNEEDCHECK"` // 是否需要对账 - 0:需要 1:不需要 [不需要界面配置]
  1206. CANMODIFYBANKCARD int32 `json:"canmodifybankcard" xorm:"CANMODIFYBANKCARD"` // 是否可修改银行卡号 - 0:不可 1:可以
  1207. CANALLOT int32 `json:"canallot" xorm:"CANALLOT"` // 是否支持跨行调拨 - 0:不支持 1:支持
  1208. CANALLOTQUERY int32 `json:"canallotquery" xorm:"CANALLOTQUERY"` // 是否支持跨行调拨查询 - 0:不支持 1:支持
  1209. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1210. SIGNSTATUS int32 `json:"signstatus" xorm:"SIGNSTATUS"` // 当前签到/签退状态 - 1:签到 2:签退
  1211. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 当前签到/签退更新时间
  1212. LASTSIGNINTIME string `json:"lastsignintime" xorm:"LASTSIGNINTIME"` // 最后签到时间
  1213. LASTSIGNOUTTIME string `json:"lastsignouttime" xorm:"LASTSIGNOUTTIME"` // 最后签退时间
  1214. LASTCHECKTIME string `json:"lastchecktime" xorm:"LASTCHECKTIME"` // 最后对账时间
  1215. LASTCHECKSTATUS int32 `json:"lastcheckstatus" xorm:"LASTCHECKSTATUS"` // 最后对账状态 - 对账状态 - 1:未对账 2:对账成功 3:对账失败
  1216. LASTCLEARTIME string `json:"lastcleartime" xorm:"LASTCLEARTIME"` // 最后清算时间
  1217. LASTCLEARSTATUS int32 `json:"lastclearstatus" xorm:"LASTCLEARSTATUS"` // 最后清算状态 - 1:未清算 2:清算成功 3:清算失败 4:清算部分成功
  1218. }
  1219. func (r *QhjCusBankInfo) calc() {
  1220. }
  1221. func (r *QhjCusBankInfo) buildSql() string {
  1222. var sqlId utils.SQLVal = "with tmp as" +
  1223. " (select *" +
  1224. " from (select row_number() over(partition by t.cusbankid order by t.tradedate desc) cn," +
  1225. " t.CUSBANKID id2," +
  1226. " t.TRADEDATE," +
  1227. " t.SIGNSTATUS," +
  1228. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1229. " to_char(t.LASTSIGNINTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNINTIME," +
  1230. " to_char(t.LASTSIGNOUTTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNOUTTIME," +
  1231. " to_char(t.LASTCHECKTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCHECKTIME," +
  1232. " t.LASTCHECKSTATUS," +
  1233. " to_char(t.LASTCLEARTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCLEARTIME," +
  1234. " t.LASTCLEARSTATUS" +
  1235. " from bank_cusbankstatus t)" +
  1236. " where cn = 1)" +
  1237. "SELECT t.CUSBANKID," +
  1238. " t.CUSBANKNAME," +
  1239. " t.CUSBANKSHORTNAME," +
  1240. " t.EXCHBANKID," +
  1241. " t.EXCHPAYBANKACCNO," +
  1242. " t.EXCHPAYBANKACCNAME," +
  1243. " t.CURRENCY," +
  1244. " t.CANSIGN," +
  1245. " t.CANRELEASE," +
  1246. " t.CANINAMOUNT," +
  1247. " t.CANOUTAMOUNT," +
  1248. " to_char(t.RISKINFO) RISKINFO," +
  1249. " t.CANSIGN2," +
  1250. " t.CANRELEASE2," +
  1251. " t.CANINAMOUNT2," +
  1252. " t.CANOUTAMOUNT2," +
  1253. " t.CANBINDCARD," +
  1254. " t.ISNEEDCLEAR," +
  1255. " t.CANMODIFYPHONE," +
  1256. " t.CANMODIFYSIGNINFO," +
  1257. " t.ISNEEDCHECK," +
  1258. " t.CANMODIFYBANKCARD," +
  1259. " t.CANALLOT," +
  1260. " t.CANALLOTQUERY," +
  1261. " tmp.*" +
  1262. " FROM BANK_CUSBANKINFO t" +
  1263. " LEFT JOIN tmp" +
  1264. " on t.cusbankid = tmp.id2" +
  1265. " WHERE 1 = 1"
  1266. return sqlId.String()
  1267. }
  1268. // GetData 获取托管银行信息
  1269. func (r *QhjCusBankInfo) GetData() ([]QhjCusBankInfo, error) {
  1270. sData := make([]QhjCusBankInfo, 0)
  1271. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1272. for i := range sData {
  1273. sData[i].calc()
  1274. }
  1275. return sData, err
  1276. }
  1277. // GetDataEx 获取托管银行信息
  1278. func (r *QhjCusBankInfo) GetDataEx() (interface{}, error) {
  1279. return r.GetData()
  1280. }
  1281. // QhjCusBankSignBank 托管银行签约关系
  1282. type QhjCusBankSignBank struct {
  1283. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行ID
  1284. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  1285. }
  1286. func (r *QhjCusBankSignBank) calc() {
  1287. }
  1288. func (r *QhjCusBankSignBank) buildSql() string {
  1289. var sqlId utils.SQLVal = "select * from bank_cusbanksignbank"
  1290. return sqlId.String()
  1291. }
  1292. // GetData 获取托管银行签约关系
  1293. func (r *QhjCusBankSignBank) GetData() ([]QhjCusBankSignBank, error) {
  1294. sData := make([]QhjCusBankSignBank, 0)
  1295. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1296. for i := range sData {
  1297. sData[i].calc()
  1298. }
  1299. return sData, err
  1300. }
  1301. // GetDataEx 获取托管银行签约关系
  1302. func (r *QhjCusBankSignBank) GetDataEx() (interface{}, error) {
  1303. return r.GetData()
  1304. }
  1305. // QhjCusBankSignBankEx 托管银行签约银行详细
  1306. type QhjCusBankSignBankEx struct {
  1307. QhjCusBankInfo
  1308. Banklst []QhjBankInfo // 银行列表
  1309. }
  1310. // GetDataEx 获取托管银行签约银行详细
  1311. func (r *QhjCusBankSignBankEx) GetDataEx() (interface{}, error) {
  1312. sData := make([]QhjCusBankSignBankEx, 0)
  1313. a := QhjCusBankSignBank{}
  1314. relateData, _ := a.GetData()
  1315. if len(relateData) == 0 {
  1316. return sData, nil
  1317. }
  1318. b := QhjCusBankInfo{}
  1319. bData, _ := b.GetData()
  1320. c := QhjBankInfo{}
  1321. cData, _ := c.GetData()
  1322. for _, vb := range bData {
  1323. // 托管银行
  1324. v := QhjCusBankSignBankEx{QhjCusBankInfo: vb, Banklst: make([]QhjBankInfo, 0)}
  1325. for _, vr := range relateData {
  1326. // 托管关系
  1327. if vb.CUSBANKID == vr.CUSBANKID {
  1328. for _, vc := range cData {
  1329. if vc.BANKID == vr.BANKID {
  1330. v.Banklst = append(v.Banklst, vc)
  1331. }
  1332. }
  1333. }
  1334. }
  1335. if len(v.Banklst) > 0 {
  1336. sData = append(sData, v)
  1337. }
  1338. }
  1339. return sData, nil
  1340. }
  1341. // QhjSiteColumnDetail 资讯
  1342. type QhjSiteColumnDetail struct {
  1343. ID int64 `json:"id" xorm:"ID"` // ID(SEQ_SITE_COLUMNDETAIL)
  1344. COLUMNID int64 `json:"columnid" xorm:"COLUMNID"` // 所属栏目
  1345. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID(默认为0, 核心为为机构用户ID)
  1346. TITLE string `json:"title" xorm:"TITLE"` // 标题
  1347. COVERIMAGE string `json:"coverimage" xorm:"COVERIMAGE"` // 封面图片
  1348. AUTHOR string `json:"author" xorm:"AUTHOR"` // 作者
  1349. BRIEF string `json:"brief" xorm:"BRIEF"` // 简介
  1350. CONTEXT string `json:"context" xorm:"CONTEXT"` // 内容
  1351. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 1:暂存 10:待审核 20:审核通过 30:审核拒绝
  1352. ISTOP int32 `json:"istop" xorm:"ISTOP"` // 是否置顶 - 0:不置 1:置顶
  1353. HITS int64 `json:"hits" xorm:"HITS"` // 点击数
  1354. PUBLISHDATE string `json:"publishdate" xorm:"PUBLISHDATE"` // 发布日期
  1355. CREAEDATE string `json:"creaedate" xorm:"CREAEDATE"` // 创建时间
  1356. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人
  1357. UPDATEDATE string `json:"updatedate" xorm:"UPDATEDATE"` // 修改时间
  1358. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 操作人
  1359. ISSHOW int32 `json:"isshow" xorm:"ISSHOW"` // 是否展示 - 0:不展示 1:展示
  1360. USERNAME string `json:"username"` // 用户名称
  1361. }
  1362. func (r *QhjSiteColumnDetail) calc() {
  1363. if r.USERID > 0 {
  1364. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  1365. }
  1366. }
  1367. func (r *QhjSiteColumnDetail) buildSql() string {
  1368. var sqlId utils.SQLVal = "SELECT t.ID," +
  1369. " t.COLUMNID," +
  1370. " t.USERID," +
  1371. " t.TITLE," +
  1372. " t.COVERIMAGE," +
  1373. " t.AUTHOR," +
  1374. " t.BRIEF," +
  1375. " to_char(t.CONTEXT) CONTEXT," +
  1376. " t.STATUS," +
  1377. " t.ISTOP," +
  1378. " t.HITS," +
  1379. " to_char(t.PUBLISHDATE, 'yyyy-mm-dd hh24:mi:ss') PUBLISHDATE," +
  1380. " to_char(t.CREAEDATE, 'yyyy-mm-dd hh24:mi:ss') CREAEDATE," +
  1381. " t.CREATORID," +
  1382. " to_char(t.UPDATEDATE, 'yyyy-mm-dd hh24:mi:ss') UPDATEDATE," +
  1383. " t.MODIFIERID," +
  1384. " t.ISSHOW" +
  1385. " FROM SITE_COLUMNDETAIL t" +
  1386. " WHERE 1 = 1"
  1387. sqlId.And("t.USERID", r.USERID)
  1388. return sqlId.String()
  1389. }
  1390. // GetDataEx 获取资讯
  1391. func (r *QhjSiteColumnDetail) GetDataEx() (interface{}, error) {
  1392. sData := make([]QhjSiteColumnDetail, 0)
  1393. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1394. for i := range sData {
  1395. sData[i].calc()
  1396. }
  1397. return sData, err
  1398. }
  1399. // QhjAccountOutInApply 充值提现(出入金)
  1400. type QhjAccountOutInApply struct {
  1401. EXECUTETYPE int32 `json:"executetype" xorm:"EXECUTETYPE"` // 申请类型 - 1:出金 2:入金 3: 单边账调整:入金; 4:单边账调整:出金 5:外部母账户调整:入金 6:外部母账户调整:出金 7:外部子账户:入金 8:外部子账户:出金
  1402. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额
  1403. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  1404. CHARGE float64 `json:"charge" xorm:"CHARGE"` // 手续费
  1405. ACCOUNTPWD string `json:"accountpwd" xorm:"ACCOUNTPWD"` // 资金密码
  1406. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间(申请时间)
  1407. BANKID string `json:"bankid" xorm:"BANKID"` // 银行编号
  1408. BRANCHBANKID string `json:"branchbankid" xorm:"BRANCHBANKID"` // 银行支行号
  1409. BRANCHBANKNAME string `json:"branchbankname" xorm:"BRANCHBANKNAME"` // 银行支行名称
  1410. BANKACCOUNTNO string `json:"bankaccountno" xorm:"BANKACCOUNTNO"` // 银行卡号
  1411. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 银行账户名
  1412. EXTENDINFO string `json:"extendinfo" xorm:"EXTENDINFO"` // 扩展信息
  1413. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  1414. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1415. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1416. NETADDR string `json:"netaddr" xorm:"NETADDR"` // 调转网址
  1417. ACCOUNTTICKET string `json:"accountticket" xorm:"ACCOUNTTICKET"` // 最新账户服务流水号
  1418. CHECKERRORFLAG int32 `json:"checkerrorflag" xorm:"CHECKERRORFLAG"` // 对账差错标志 - 1:为单边账;其它为正常出入金
  1419. REMARK2 string `json:"remark2" xorm:"REMARK2"` // 备注(失败原因)
  1420. REAUDITID int64 `json:"reauditid" xorm:"REAUDITID"` // 复审人
  1421. REAUDITTIME string `json:"reaudittime" xorm:"REAUDITTIME"` // 复审时间
  1422. REAUDITREMARK string `json:"reauditremark" xorm:"REAUDITREMARK"` // 复审备注
  1423. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  1424. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID"` // 三方关联ID
  1425. CAPAMOUNTOUT float64 `json:"capamountout" xorm:"CAPAMOUNTOUT"` // 出金(劣后本金) - 外部子账户
  1426. INFAMOUNT float64 `json:"infamount" xorm:"INFAMOUNT"` // 劣后金额(自有)
  1427. PRIAMOUNT float64 `json:"priamount" xorm:"PRIAMOUNT"` // 优先金额(授信)
  1428. BANK_APPLY_TICKET string `json:"bank_apply_ticket" xorm:"BANK_APPLY_TICKET"` // 银行申请流水
  1429. CERTIFICATEPHOTOURL string `json:"certificatephotourl" xorm:"CERTIFICATEPHOTOURL"` // 凭证地址
  1430. SOUCREAMOUNT float64 `json:"soucreamount" xorm:"SOUCREAMOUNT"` // 原始出入金金额
  1431. SOUCRECURRENCYID int64 `json:"soucrecurrencyid" xorm:"SOUCRECURRENCYID"` // 原始出入金币种
  1432. ACCOUNTCODE string `json:"accountcode" xorm:"ACCOUNTCODE"` // 资金账号
  1433. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号
  1434. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1435. EXCHTICKET string `json:"exchticket" xorm:"EXCHTICKET"` // 银行服务流水号
  1436. EXTOPERATEID int64 `json:"extoperateid" xorm:"EXTOPERATEID"` // 交易服务流水号
  1437. BANKTICKET string `json:"bankticket" xorm:"BANKTICKET"` // 银行流水
  1438. 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: 复审通过,账户冻结金额检查中;
  1439. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1440. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 登录账号(账号)
  1441. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 账户类型 1-个人 2-企业
  1442. ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 用户名称(名称)
  1443. MOBILE string `json:"-" xorm:"'MOBILE'"` // 手机号
  1444. BeginDate string `json:"-"` // 开始日期(yyyymmdd)
  1445. EndDate string `json:"-"` // 结束日期(yyyymmdd)
  1446. FilterName string `json:"-"` // 账户(模糊匹配)
  1447. }
  1448. func (r *QhjAccountOutInApply) calc() {
  1449. r.BANKACCOUNTNAME = DecryptField(r.BANKACCOUNTNAME)
  1450. r.BANKACCOUNTNO = DecryptField(r.BANKACCOUNTNO)
  1451. if len(r.LOGINCODE) == 0 {
  1452. r.LOGINCODE = DecryptField(r.MOBILE)
  1453. }
  1454. }
  1455. func (r *QhjAccountOutInApply) buildSql() string {
  1456. var sqlId utils.SQLVal = "with tmp as(select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  1457. "SELECT t.EXECUTETYPE," +
  1458. " t.AMOUNT," +
  1459. " t.CURRENCY," +
  1460. " t.CHARGE," +
  1461. " t.ACCOUNTPWD," +
  1462. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1463. " t.BANKID," +
  1464. " t.BRANCHBANKID," +
  1465. " t.BRANCHBANKNAME," +
  1466. " t.BANKACCOUNTNO," +
  1467. " t.BANKACCOUNTNAME," +
  1468. " t.EXTENDINFO," +
  1469. " t.AUDITID," +
  1470. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  1471. " t.REMARK," +
  1472. " t.NETADDR," +
  1473. " t.ACCOUNTTICKET," +
  1474. " t.CHECKERRORFLAG," +
  1475. " t.REMARK2," +
  1476. " t.REAUDITID," +
  1477. " to_char(t.REAUDITTIME, 'yyyy-mm-dd hh24:mi:ss') REAUDITTIME," +
  1478. " t.REAUDITREMARK," +
  1479. " t.APPLYREMARK," +
  1480. " t.RELATEDORDERID," +
  1481. " t.CAPAMOUNTOUT," +
  1482. " t.INFAMOUNT," +
  1483. " t.PRIAMOUNT," +
  1484. " t.BANK_APPLY_TICKET," +
  1485. " to_char(t.CERTIFICATEPHOTOURL) CERTIFICATEPHOTOURL," +
  1486. " t.SOUCREAMOUNT," +
  1487. " t.SOUCRECURRENCYID," +
  1488. " t.ACCOUNTCODE," +
  1489. " t.CUSBANKID," +
  1490. " t.TRADEDATE," +
  1491. " t.EXCHTICKET," +
  1492. " t.EXTOPERATEID," +
  1493. " t.BANKTICKET," +
  1494. " t.APPLYSTATUS," +
  1495. " u.userid," +
  1496. " u.accountname," +
  1497. " ui.userinfotype," +
  1498. " ui.mobile," +
  1499. " tmp.logincode" +
  1500. " FROM BANK_ACCOUNTOUTINAPPLY t" +
  1501. " INNER JOIN TAACCOUNT ta on t.accountcode=to_char(ta.accountid)" +
  1502. " INNER JOIN USERACCOUNT u on ta.relateduserid=u.userid" +
  1503. " INNER JOIN USERINFO ui on u.userid=ui.userid" +
  1504. " LEFT JOIN tmp on u.userid=tmp.userid" +
  1505. " WHERE 1 = 1"
  1506. sqlId.And("u.userid", r.USERID)
  1507. if len(r.BeginDate) > 0 {
  1508. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME >= to_date(%v,'yyyymmdd')", r.BeginDate))
  1509. }
  1510. if len(r.EndDate) > 0 {
  1511. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME <= to_date(%v,'yyyymmdd')", r.EndDate))
  1512. }
  1513. if len(r.FilterName) > 0 {
  1514. sqlId.Join(fmt.Sprintf(" and (tmp.logincode like '%%%v%%' or u.accountname like '%%%v%%')", r.FilterName, r.FilterName))
  1515. }
  1516. return sqlId.String()
  1517. }
  1518. // GetDataEx 获取充值提现(出入金)
  1519. func (r *QhjAccountOutInApply) GetDataEx() (interface{}, error) {
  1520. sData := make([]QhjAccountOutInApply, 0)
  1521. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1522. for i := range sData {
  1523. sData[i].calc()
  1524. }
  1525. return sData, err
  1526. }
  1527. type DBINT64 int64
  1528. func (r *DBINT64) FromDB(bytes []byte) error {
  1529. d, err := strconv.ParseInt(string(bytes), 10, 64)
  1530. if err == nil {
  1531. *r = DBINT64(d)
  1532. }
  1533. return err
  1534. }
  1535. func (r *DBINT64) ToDB() ([]byte, error) {
  1536. d := strconv.FormatInt(int64(*r), 10)
  1537. return []byte(d), nil
  1538. }
  1539. // QhjPayOrder 待付款单据
  1540. type QhjPayOrder struct {
  1541. OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE"` // 买委托操作类型 - 1:正常下单 16:融资买入
  1542. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  1543. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1544. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  1545. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  1546. BUYORDERID string `json:"buyorderid" xorm:"BUYORDERID"` // 买方委托单号
  1547. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID[报价币种]
  1548. SELLORDERID string `json:"sellorderid" xorm:"SELLORDERID"` // 卖方委托单号
  1549. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID[报价币种]
  1550. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额(优惠后金额)
  1551. TRADECHARGE float64 `json:"tradecharge" xorm:"TRADECHARGE"` // 成交手续费(买方)
  1552. PAYFLAG int32 `json:"payflag" xorm:"PAYFLAG"` // 付款标识 - 1:未支付 2:已支付 3:已过期 4:已撤销 5:结算过期 6:预售终止
  1553. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1554. PAYTIME string `json:"paytime" xorm:"PAYTIME"` // 付款时间
  1555. PAYLIMITEDTIME string `json:"paylimitedtime" xorm:"PAYLIMITEDTIME"` // 支付期限
  1556. OFFAMOUNT float64 `json:"offamount" xorm:"OFFAMOUNT"` // 优惠金额
  1557. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  1558. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  1559. PAYAMOUNT float64 `json:"payamount" xorm:"PAYAMOUNT"` // 支付金额
  1560. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  1561. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  1562. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 商品单位id
  1563. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  1564. QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  1565. ADVANCERATIO float64 `json:"advanceratio" xorm:"ADVANCERATIO"` // 首付比率
  1566. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  1567. FilterPayFlag string `json:"-"` // 付款标识筛选
  1568. }
  1569. func (r *QhjPayOrder) calc() {
  1570. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  1571. zoomFun := NewZoomFun(r.QTYDECIMALPLACE)
  1572. zoomFun(&r.TRADEQTY)
  1573. }
  1574. func (r *QhjPayOrder) buildSql() string {
  1575. var sqlId utils.SQLVal = "SELECT t.OPERATETYPE," +
  1576. " to_char(t.TRADEID) TRADEID," +
  1577. " t.TRADEDATE," +
  1578. " t.MARKETID," +
  1579. " t.GOODSID," +
  1580. " to_char(t.BUYORDERID) BUYORDERID," +
  1581. " t.BUYACCOUNTID," +
  1582. " to_char(t.SELLORDERID) SELLORDERID," +
  1583. " t.SELLACCOUNTID," +
  1584. " t.TRADEAMOUNT," +
  1585. " t.TRADECHARGE," +
  1586. " t.PAYFLAG," +
  1587. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  1588. " to_char(t.PAYTIME, 'yyyy-mm-dd hh24:mi:ss') PAYTIME," +
  1589. " to_char(t.PAYLIMITEDTIME, 'yyyy-mm-dd hh24:mi:ss') PAYLIMITEDTIME," +
  1590. " t.OFFAMOUNT," +
  1591. " t.TRADEPRICE," +
  1592. " t.TRADEQTY," +
  1593. " t.PAYAMOUNT," +
  1594. " t.ADVANCERATIO," +
  1595. " g.goodscode," +
  1596. " g.decimalplace," +
  1597. " g.qtydecimalplace," +
  1598. " g.goodunitid," +
  1599. " g.goodsname" +
  1600. " FROM TRADE_PAYORDER t" +
  1601. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  1602. " WHERE 1 = 1"
  1603. sqlId.AndEx("t.BUYACCOUNTID", r.BUYACCOUNTID, r.BUYACCOUNTID > 0)
  1604. sqlId.AndEx("t.TRADEID", r.TRADEID, len(r.TRADEID) > 0)
  1605. //sqlId.AndEx("t.PAYFLAG", r.PAYFLAG, r.PAYFLAG > 0)
  1606. sqlId.JoinEx(r.FilterPayFlag != "", fmt.Sprintf(" and t.PAYFLAG in(%v)", r.FilterPayFlag))
  1607. return sqlId.String()
  1608. }
  1609. // GetDataEx 获取待付款单据
  1610. func (r *QhjPayOrder) GetDataEx() (interface{}, error) {
  1611. sData := make([]QhjPayOrder, 0)
  1612. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1613. for i := range sData {
  1614. sData[i].calc()
  1615. }
  1616. return sData, err
  1617. }
  1618. // Qhjgoodsex 交易商品扩展表(千海金)
  1619. type Qhjgoodsex struct {
  1620. Goodsid int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID(自增ID SEQ_GOODS)
  1621. Minamount float64 `json:"minamount" xorm:"MINAMOUNT"` // 最小购买金额
  1622. Canfinance int32 `json:"canfinance" xorm:"CANFINANCE"` // 是否支持融资 - 0:不支持 1:支持【69:铂金宝】
  1623. Canregularlybuy int32 `json:"canregularlybuy" xorm:"CANREGULARLYBUY"` // 是否支持定投 - 0:不支持 1:支持【69:铂金宝】
  1624. Regularlybuyminqty float64 `json:"regularlybuyminqty" xorm:"REGULARLYBUYMINQTY"` // 定投最小数量
  1625. Regularlybuyminamount float64 `json:"regularlybuyminamount" xorm:"REGULARLYBUYMINAMOUNT"` // 定投最小金额
  1626. Deliverygoodsid int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1627. Wrstandardid int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1628. Spotgoodsbrandid int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID"
  1629. Defaulttradeuserid int64 `json:"defaulttradeuserid" xorm:"DEFAULTTRADEUSERID"` // 默认交易用户ID
  1630. VISIBILITYFORPERSONAL int32 `json:"visibilityforpersonal" xorm:"'VISIBILITYFORPERSONAL'"` // 个人客户是否可见 - 0:不可见 1:可见
  1631. VISIBILITYFORENTERPRISE int32 `json:"visibilityforenterprise" xorm:"'VISIBILITYFORENTERPRISE'"` // 企业客户是否可见 - 0:不可见 1:可见
  1632. }
  1633. func (r *Qhjgoodsex) calc() {
  1634. }
  1635. func (r *Qhjgoodsex) buildSql() string {
  1636. var sqlId utils.SQLVal = "SELECT t.GOODSID," +
  1637. " t.MINAMOUNT," +
  1638. " t.CANFINANCE," +
  1639. " t.CANREGULARLYBUY," +
  1640. " t.REGULARLYBUYMINQTY / power(10,nvl(g.qtydecimalplace,0)) REGULARLYBUYMINQTY," +
  1641. " t.REGULARLYBUYMINAMOUNT," +
  1642. " t.DELIVERYGOODSID," +
  1643. " t.WRSTANDARDID," +
  1644. " t.SPOTGOODSBRANDID," +
  1645. " t.DEFAULTTRADEUSERID," +
  1646. " t.VISIBILITYFORPERSONAL," +
  1647. " t.VISIBILITYFORENTERPRISE" +
  1648. " FROM QHJ_GOODSEX t" +
  1649. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  1650. " WHERE 1 = 1"
  1651. sqlId.AndEx("t.GOODSID", r.Goodsid, r.Goodsid > 0)
  1652. return sqlId.String()
  1653. }
  1654. // GetDataEx 获取交易商品扩展表(千海金)
  1655. func (r *Qhjgoodsex) GetDataEx() (interface{}, error) {
  1656. sData := make([]Qhjgoodsex, 0)
  1657. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1658. for i := range sData {
  1659. sData[i].calc()
  1660. }
  1661. return sData, err
  1662. }
  1663. // QhjParentAreaList 所属机构列表
  1664. type QhjParentAreaList struct {
  1665. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  1666. USERTYPE int32 `json:"usertype" xorm:"USERTYPE"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
  1667. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 账户名称(机构名称)
  1668. }
  1669. func (r *QhjParentAreaList) calc() {
  1670. }
  1671. func (r *QhjParentAreaList) buildSql() string {
  1672. var sqlId utils.SQLVal = "select t.userid, t.accountname, t.usertype" +
  1673. " from useraccount t" +
  1674. " where 1 = 1" +
  1675. " and t.accountstatus = 4" +
  1676. " and t.usertype = 2" +
  1677. " and t.rootuserid = %v" +
  1678. " or t.userid = %v"
  1679. sqlId.FormatParam(r.USERID, r.USERID)
  1680. return sqlId.String()
  1681. }
  1682. // GetDataEx 获取所属机构列表
  1683. func (r *QhjParentAreaList) GetDataEx() (interface{}, error) {
  1684. sData := make([]QhjParentAreaList, 0)
  1685. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1686. for i := range sData {
  1687. sData[i].calc()
  1688. }
  1689. return sData, err
  1690. }
  1691. // QhjAreaFinanceConfig 企业配置表
  1692. type QhjAreaFinanceConfig struct {
  1693. ADDITIONALRATIO float64 `json:"additionalratio" xorm:"ADDITIONALRATIO" form:"additionalratio"` // 追加款比例
  1694. ADVANCERATIO float64 `json:"advanceratio" xorm:"ADVANCERATIO" form:"advanceratio"` // 预付款比例
  1695. ALARMRATIO float64 `json:"alarmratio" xorm:"ALARMRATIO" form:"alarmratio"` // 告警比例
  1696. CONSUMPTIONDIRECTREWARD float64 `json:"consumptiondirectreward" xorm:"CONSUMPTIONDIRECTREWARD" form:"consumptiondirectreward"` // 消费直推奖励值
  1697. CONSUMPTIONINDIRECTREWARD float64 `json:"consumptionindirectreward" xorm:"CONSUMPTIONINDIRECTREWARD" form:"consumptionindirectreward"` // 消费间推奖励值
  1698. DAYINTERESTRATE float64 `json:"dayinterestrate" xorm:"DAYINTERESTRATE" form:"dayinterestrate"` // 日利率
  1699. PROMOTIONVALUE float64 `json:"promotionvalue" xorm:"PROMOTIONVALUE" form:"promotionvalue"` // 推广奖励值(固定)
  1700. CONSUMPTIONENABLED int32 `json:"consumptionenabled" xorm:"CONSUMPTIONENABLED" form:"consumptionenabled"` // 是否启用消费奖励 - 0:不启用 1:启用
  1701. CONSUMPTIONMODEL int32 `json:"consumptionmodel" xorm:"CONSUMPTIONMODEL" form:"consumptionmodel"` // 消费奖励方式 - 1:比率 2:固定
  1702. MODIFYSRC int32 `json:"modifysrc" xorm:"MODIFYSRC" form:"modifysrc"` // 审核来源 - 1:管理端 2:终端
  1703. SCORECONFIGVALUE1 int32 `json:"scoreconfigvalue1" xorm:"SCORECONFIGVALUE1" form:"scoreconfigvalue1"` // 提货积分配置1
  1704. SCORECONFIGVALUE2 int32 `json:"scoreconfigvalue2" xorm:"SCORECONFIGVALUE2" form:"scoreconfigvalue2"` // 提货积分配置2
  1705. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID" form:"modifierid"` // 修改人ID
  1706. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 机构用户ID其他做市关系,都设置为 1
  1707. CUSTOMERSERVICENUM string `json:"customerservicenum" xorm:"CUSTOMERSERVICENUM" form:"customerservicenum"` // 客服电话
  1708. DISABLECONSUMPTIONTIPS string `json:"disableconsumptiontips" xorm:"DISABLECONSUMPTIONTIPS" form:"disableconsumptiontips"` // 关闭消费奖励提示
  1709. MODIFYTIME string `json:"modifytime" xorm:"MODIFYTIME" form:"modifytime"` // 修改时间
  1710. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  1711. }
  1712. func (r *QhjAreaFinanceConfig) calc() {
  1713. }
  1714. func (r *QhjAreaFinanceConfig) buildSql() string {
  1715. var sqlId utils.SQLVal = "SELECT t.CUSTOMERSERVICENUM," +
  1716. " t.SCORECONFIGVALUE1," +
  1717. " t.SCORECONFIGVALUE2," +
  1718. " t.CONSUMPTIONENABLED," +
  1719. " t.PROMOTIONVALUE," +
  1720. " t.CONSUMPTIONMODEL," +
  1721. " t.CONSUMPTIONDIRECTREWARD," +
  1722. " t.CONSUMPTIONINDIRECTREWARD," +
  1723. " t.DISABLECONSUMPTIONTIPS," +
  1724. " t.USERID," +
  1725. " t.ADVANCERATIO," +
  1726. " t.ALARMRATIO," +
  1727. " t.ADDITIONALRATIO," +
  1728. " t.DAYINTERESTRATE," +
  1729. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  1730. " t.MODIFIERID," +
  1731. " t.MODIFYSRC," +
  1732. " u.accountname username" +
  1733. " FROM AREAFINANCECONFIG t" +
  1734. " LEFT JOIN USERACCOUNT u on t.userid=u.userid" +
  1735. " WHERE 1 = 1"
  1736. if r.USERID > 0 {
  1737. if r.USERID == 1 {
  1738. // =1 ,其他做市关系
  1739. sqlId.AndEx("t.userid", r.USERID, r.USERID > 0)
  1740. } else {
  1741. areaUserId := mtpcache.GetAreaUserId(r.USERID, 0)
  1742. sqlId.AndEx("t.userid", areaUserId, areaUserId > 0)
  1743. }
  1744. }
  1745. return sqlId.String()
  1746. }
  1747. // GetDataEx 获取企业配置表
  1748. func (r *QhjAreaFinanceConfig) GetDataEx() (interface{}, error) {
  1749. sData := make([]QhjAreaFinanceConfig, 0)
  1750. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1751. for i := range sData {
  1752. sData[i].calc()
  1753. }
  1754. return sData, err
  1755. }
  1756. // QhjMyTeamEx 我的团队(含层次结构)
  1757. type QhjMyTeamEx struct {
  1758. QhjMyTeam
  1759. SubList []QhjMyTeamEx
  1760. }
  1761. func (r *QhjMyTeamEx) addSub(lst []QhjMyTeam) {
  1762. for i := range lst {
  1763. if r.USERID == lst[i].REFEREEUSERID {
  1764. v := QhjMyTeamEx{QhjMyTeam: lst[i], SubList: make([]QhjMyTeamEx, 0)}
  1765. v.addSub(lst)
  1766. r.SubList = append(r.SubList, v)
  1767. }
  1768. }
  1769. }
  1770. // QhjMyTeam 我的团队
  1771. type QhjMyTeam struct {
  1772. LEVEL int32 `json:"-" xorm:"'LEVEL'"` // 层级
  1773. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1774. ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 用户名称
  1775. REFEREEUSERID int64 `json:"refereeuserid" xorm:"'REFEREEUSERID'"` // 推荐人id
  1776. REFERNUM string `json:"refernum" xorm:"'REFERNUM'"` // 推荐码
  1777. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  1778. ACCOUNTSTATUS int32 `json:"accountstatus" xorm:"'ACCOUNTSTATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:停用(注销) 7:注销(删除)
  1779. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  1780. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  1781. }
  1782. func (r *QhjMyTeam) calc() {
  1783. r.MOBILE = DecryptField(r.MOBILE)
  1784. }
  1785. func (r *QhjMyTeam) buildSql() string {
  1786. var sqlId utils.SQLVal = "select level," +
  1787. " t.userid," +
  1788. " t.accountname," +
  1789. " t.refereeuserid," +
  1790. " t.refernum," +
  1791. " to_char(t.createtime, 'yyyy-dd-mm hh24:mi:ss') createtime," +
  1792. " t.accountstatus," +
  1793. " ui.mobile," +
  1794. " ui.userinfotype" +
  1795. " from useraccount t" +
  1796. " left join userinfo ui" +
  1797. " on t.userid = ui.userid" +
  1798. " start with t.userid = %v" +
  1799. "connect by prior t.userid = t.refereeuserid" +
  1800. " and level <= 3" +
  1801. " order by level"
  1802. sqlId.FormatParam(r.USERID)
  1803. return sqlId.String()
  1804. }
  1805. // GetDataEx 获取我的团队
  1806. func (r *QhjMyTeam) GetDataEx() (interface{}, error) {
  1807. sData := make([]QhjMyTeam, 0)
  1808. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1809. for i := range sData {
  1810. sData[i].calc()
  1811. }
  1812. sDataEx := make([]QhjMyTeamEx, 0)
  1813. // 构建顶层
  1814. for i := range sData {
  1815. if sData[i].LEVEL == 1 {
  1816. v := QhjMyTeamEx{QhjMyTeam: sData[i], SubList: make([]QhjMyTeamEx, 0)}
  1817. sDataEx = append(sDataEx, v)
  1818. }
  1819. }
  1820. // 递归构建层级
  1821. for i := range sDataEx {
  1822. sDataEx[i].addSub(sData)
  1823. }
  1824. return sDataEx, err
  1825. }
  1826. // QhjTeamOrder 团队订单
  1827. type QhjTeamOrder struct {
  1828. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 方向 - 0:买 1:卖
  1829. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1830. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 账户ID[报价币种]
  1831. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  1832. TRADETIME string `json:"tradetime" xorm:"TRADETIME" form:"tradetime"` // 成交时间
  1833. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格
  1834. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY" form:"tradeqty"` // 成交数量
  1835. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT" form:"tradeamount"` // 成交金额[账户币种,用于所有权]
  1836. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1837. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME" form:"accountname"` // 账户名称
  1838. REFEREEUSERID int64 `json:"refereeuserid" xorm:"REFEREEUSERID" form:"refereeuserid"` // 推荐人ID
  1839. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  1840. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE" form:"goodscode"` // 商品代码(内部)
  1841. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME" form:"goodsname"` // 商品名称
  1842. GOODUNITID int32 `json:"goodunitid" xorm:"GOODUNITID" form:"goodunitid"` // 报价单位ID
  1843. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT" form:"agreeunit"` // 合约乘数
  1844. DECIMALPLACE int32 `json:"decimalplace" xorm:"DECIMALPLACE" form:"decimalplace"` // 报价小数位
  1845. QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"QTYDECIMALPLACE" form:"qtydecimalplace"` // 成交量小数位
  1846. MARKETNAME string `json:"marketname" xorm:"MARKETNAME" form:"marketname"` // 市场名称
  1847. TRADEMODE int32 `json:"trademode" xorm:"TRADEMODE" form:"trademode"` // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
  1848. ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位名称
  1849. PageEx `xorm:"extends"` // 页码信息
  1850. FilterName string `json:"-" form:"filtername"` // 名称(模糊匹配)
  1851. }
  1852. func (r *QhjTeamOrder) calc() {
  1853. }
  1854. func (r *QhjTeamOrder) buildSql() string {
  1855. var sqlId utils.SQLVal = "select t.accountid," +
  1856. " t.goodsid," +
  1857. " t.tradedate," +
  1858. " t.tradeprice," +
  1859. " t.tradeqty / power(10, nvl(g.qtydecimalplace, 0)) tradeqty," +
  1860. " t.tradeamount," +
  1861. " to_char(t.tradetime, 'yyyy-mm-dd hh24:mi:ss') tradetime," +
  1862. " t.buyorsell," +
  1863. " u.userid," +
  1864. " u.accountname," +
  1865. " u.refereeuserid," +
  1866. " g.goodscode," +
  1867. " g.goodsname," +
  1868. " g.marketid," +
  1869. " g.goodunitid," +
  1870. " g.qtydecimalplace," +
  1871. " g.decimalplace," +
  1872. " g.agreeunit," +
  1873. " m.marketname," +
  1874. " m.trademode," +
  1875. " e.enumdicname" +
  1876. " from %v t" +
  1877. " inner join taaccount ta" +
  1878. " on t.accountid = ta.accountid" +
  1879. " inner join useraccount u" +
  1880. " on ta.relateduserid = u.userid" +
  1881. " left join goods g" +
  1882. " on t.goodsid = g.goodsid" +
  1883. " left join market m" +
  1884. " on g.marketid = m.marketid" +
  1885. " left join enumdicitem e" +
  1886. " on g.goodunitid = e.enumitemname" +
  1887. " and e.enumdiccode = 'goodsunit'" +
  1888. " where 1 = 1"
  1889. sqlId.AndEx("u.refereeuserid", r.USERID, r.USERID > 0)
  1890. sqlId.AndEx("m.trademode", r.TRADEMODE, r.TRADEMODE > 0)
  1891. sqlCur := fmt.Sprintf(sqlId.String(), "trade_tradedetail")
  1892. sqlHis := fmt.Sprintf(sqlId.String(), "his_trade_tradedetail")
  1893. if len(r.FilterName) > 0 {
  1894. sqlCur += fmt.Sprintf(" and u.accountname like '%%%v%%'", r.FilterName)
  1895. sqlHis += fmt.Sprintf(" and u.accountname like '%%%v%%'", r.FilterName)
  1896. }
  1897. sqlHis += " and t.isvaliddata=1"
  1898. strSql := sqlCur + " union all " + sqlHis
  1899. strSql += " order by tradetime desc"
  1900. sqlId = utils.SQLVal(strSql)
  1901. sqlId.Page(r.Page, r.PageSize)
  1902. return sqlId.String()
  1903. }
  1904. // GetDataEx 获取团队订单
  1905. func (r *QhjTeamOrder) GetDataEx() (interface{}, error) {
  1906. sData := make([]QhjTeamOrder, 0)
  1907. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1908. for i := range sData {
  1909. sData[i].calc()
  1910. }
  1911. return sData, err
  1912. }
  1913. // GetDataByPage 获取团队订单
  1914. func (r *QhjTeamOrder) GetDataByPage() (interface{}, error, int, int, int) {
  1915. sData := make([]QhjTeamOrder, 0)
  1916. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1917. total := 0
  1918. for i := range sData {
  1919. sData[i].calc()
  1920. total = sData[i].Total
  1921. }
  1922. return sData, err, r.Page, r.PageSize, total
  1923. }
  1924. // QhjBrokerRewardLog 我的奖励
  1925. type QhjBrokerRewardLog struct {
  1926. LOGID string `json:"logid" xorm:"LOGID" form:"logid"` // 奖励流水ID(912+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  1927. REWARDTYPE int32 `json:"rewardtype" xorm:"REWARDTYPE" form:"rewardtype"` // 奖励类型 - 1:推广 2:消费1级 3:消费2级
  1928. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 经纪人用户ID
  1929. REWARDAMOUNT float64 `json:"rewardamount" xorm:"REWARDAMOUNT" form:"rewardamount"` // 奖励金额
  1930. SRCUSERID string `json:"srcuserid" xorm:"SRCUSERID" form:"srcuserid"` // 来源用户ID(推广账户)
  1931. SRCTRADEID string `json:"srctradeid" xorm:"SRCTRADEID" form:"srctradeid"` // 来源成交单ID [消费奖励] - 排除提货成交
  1932. SRCGOODSID string `json:"srcgoodsid" xorm:"SRCGOODSID" form:"srcgoodsid"` // 来源商品ID [消费奖励]
  1933. SRCAMOUNT float64 `json:"srcamount" xorm:"SRCAMOUNT" form:"srcamount"` // 成交金额 [消费奖励] (金额)
  1934. SRCTIME string `json:"srctime" xorm:"SRCTIME" form:"srctime"` // 来源时间 (成交时间) [消费奖励]
  1935. REWARDMODEL int32 `json:"rewardmodel" xorm:"REWARDMODEL" form:"rewardmodel"` // 消费奖励方式 - 1:比率 2:固定
  1936. REWARDVALUE float64 `json:"rewardvalue" xorm:"REWARDVALUE" form:"rewardvalue"` // 配置奖励值
  1937. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1938. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1939. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间(时间)
  1940. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 资金账号ID
  1941. MMUSERID string `json:"mmuserid" xorm:"MMUSERID" form:"mmuserid"` // 做市商用户ID
  1942. MMACCOUNTID string `json:"mmaccountid" xorm:"MMACCOUNTID" form:"mmaccountid"` // 做市商资金账号ID
  1943. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS" form:"handlestatus"` // 处理状态
  1944. SRCUSERNAME string `json:"srcusername" xorm:"'SRCUSERNAME'"` // 推广账户名称
  1945. BeginDate string `json:"-" form:"begindate"` // 开始交易日
  1946. EndDate string `json:"-" form:"enddate"` // 结束交易日
  1947. }
  1948. func (r *QhjBrokerRewardLog) calc() {
  1949. }
  1950. func (r *QhjBrokerRewardLog) buildSql() string {
  1951. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  1952. " t.REWARDTYPE," +
  1953. " t.USERID," +
  1954. " t.REWARDAMOUNT," +
  1955. " t.SRCUSERID," +
  1956. " to_char(t.SRCTRADEID) SRCTRADEID," +
  1957. " t.SRCGOODSID," +
  1958. " t.SRCAMOUNT," +
  1959. " to_char(t.SRCTIME, 'yyyy-mm-dd hh24:mi:ss') SRCTIME," +
  1960. " t.REWARDMODEL," +
  1961. " t.REWARDVALUE," +
  1962. " t.TRADEDATE," +
  1963. " t.MARKETID," +
  1964. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  1965. " t.ACCOUNTID," +
  1966. " t.MMUSERID," +
  1967. " t.MMACCOUNTID," +
  1968. " t.HANDLESTATUS," +
  1969. " u.accountname SRCUSERNAME" +
  1970. " FROM BROKERREWARDLOG t" +
  1971. " LEFT JOIN USERACCOUNT u on t.srcuserid=u.userid" +
  1972. " WHERE 1 = 1"
  1973. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  1974. if r.BeginDate != "" {
  1975. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') >= '%v'", r.BeginDate)
  1976. }
  1977. if r.EndDate != "" {
  1978. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') <= '%v'", r.EndDate)
  1979. }
  1980. return sqlId.String()
  1981. }
  1982. // GetDataEx 获取我的奖励
  1983. func (r *QhjBrokerRewardLog) GetDataEx() (interface{}, error) {
  1984. sData := make([]QhjBrokerRewardLog, 0)
  1985. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1986. for i := range sData {
  1987. sData[i].calc()
  1988. }
  1989. return sData, err
  1990. }
  1991. // QhjScoreLog 积分流水
  1992. type QhjScoreLog struct {
  1993. LOGID string `json:"logid" xorm:"LOGID" form:"logid"` // 流水ID(211+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  1994. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1995. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  1996. SCORETYPE int32 `json:"scoretype" xorm:"SCORETYPE" form:"scoretype"` // 积分类型 - 1:提货积分
  1997. SCOREVALUE float64 `json:"scorevalue" xorm:"SCOREVALUE" form:"scorevalue"` // 积分
  1998. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID" form:"relatedorderid"` // 关联单号(ScoreType=1为Trade_GoodsPickup)
  1999. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT" form:"relatedamount"` // 关联金额
  2000. SCORECONFIGVALUE1 int32 `json:"scoreconfigvalue1" xorm:"SCORECONFIGVALUE1" form:"scoreconfigvalue1"` // 积分配置1
  2001. SCORECONFIGVALUE2 int32 `json:"scoreconfigvalue2" xorm:"SCORECONFIGVALUE2" form:"scoreconfigvalue2"` // 积分配置1
  2002. GOODSID int64 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  2003. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 账户ID
  2004. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  2005. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间(时间)
  2006. HASUPLOADED int32 `json:"hasuploaded" xorm:"HASUPLOADED" form:"hasuploaded"` // 是否已同步(千海金) 0:未同步 1;已同步
  2007. UPLOADEDTIME string `json:"uploadedtime" xorm:"UPLOADEDTIME" form:"uploadedtime"` // 同步时间
  2008. BeginDate string `json:"-" form:"begindate"` // 开始交易日
  2009. EndDate string `json:"-" form:"enddate"` // 结束交易日
  2010. LastNum int `json:"-" form:"lastnum"` // 最近多少条
  2011. }
  2012. func (r *QhjScoreLog) calc() {
  2013. }
  2014. func (r *QhjScoreLog) buildSql() string {
  2015. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  2016. " t.TRADEDATE," +
  2017. " t.USERID," +
  2018. " t.SCORETYPE," +
  2019. " t.SCOREVALUE," +
  2020. " to_char(t.RELATEDORDERID) RELATEDORDERID," +
  2021. " t.RELATEDAMOUNT," +
  2022. " t.SCORECONFIGVALUE1," +
  2023. " t.SCORECONFIGVALUE2," +
  2024. " t.GOODSID," +
  2025. " t.ACCOUNTID," +
  2026. " t.MARKETID," +
  2027. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  2028. " t.HASUPLOADED," +
  2029. " to_char(t.UPLOADEDTIME, 'yyyy-mm-dd hh24:mi:ss') UPLOADEDTIME" +
  2030. " FROM QHJ_SCORELOG t" +
  2031. " WHERE 1 = 1"
  2032. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  2033. if r.BeginDate != "" {
  2034. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') >= '%v'", r.BeginDate)
  2035. }
  2036. if r.EndDate != "" {
  2037. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') <= '%v'", r.EndDate)
  2038. }
  2039. sqlId.Join(" order by t.CREATETIME desc")
  2040. if r.LastNum > 0 {
  2041. sqlId.Page(1, r.LastNum)
  2042. }
  2043. return sqlId.String()
  2044. }
  2045. // GetDataEx 获取积分流水
  2046. func (r *QhjScoreLog) GetDataEx() (interface{}, error) {
  2047. sData := make([]QhjScoreLog, 0)
  2048. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2049. for i := range sData {
  2050. sData[i].calc()
  2051. }
  2052. return sData, err
  2053. }
  2054. // QhjContractRemainAmount 融资额
  2055. type QhjContractRemainAmount struct {
  2056. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账号
  2057. REMAINACOUNT float64 `json:"remainacount" xorm:"'REMAINACOUNT'"` // 融资额(合同剩余金额)
  2058. FilterAccId string `json:"-"` // 资金账号列表
  2059. }
  2060. func (r *QhjContractRemainAmount) calc() {
  2061. }
  2062. func (r *QhjContractRemainAmount) buildSql() string {
  2063. var sqlId utils.SQLVal = "select t.borroweraccountid accountid, sum(s.remainamount) remainamount" +
  2064. " from scf_contract t" +
  2065. " inner join scf_contractinfo s" +
  2066. " on t.scfcontractid = s.scfcontractid" +
  2067. " where 1 = 1 and t.scfcontracttype=5"
  2068. sqlId.JoinEx(r.FilterAccId != "", fmt.Sprintf(" and t.borroweraccountid in (%v)", r.FilterAccId))
  2069. sqlId.Join(" group by t.borroweraccountid")
  2070. return sqlId.String()
  2071. }
  2072. // GetDataEx 获取融资额
  2073. func (r *QhjContractRemainAmount) GetData() ([]QhjContractRemainAmount, error) {
  2074. sData := make([]QhjContractRemainAmount, 0)
  2075. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2076. for i := range sData {
  2077. sData[i].calc()
  2078. }
  2079. return sData, err
  2080. }
  2081. // QhjBrokerApply 经济人申请表
  2082. type QhjBrokerApply struct {
  2083. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC" form:"applysrc"` // 申请来源 - 1:管理端 2:终端
  2084. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS" form:"applystatus"` // 申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
  2085. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC" form:"auditsrc"` // 审核来源 - 1:管理端 2:终端
  2086. APPLICANTID int64 `json:"applicantid" xorm:"APPLICANTID" form:"applicantid"` // 申请人
  2087. AUDITORID int64 `json:"auditorid" xorm:"AUDITORID" form:"auditorid"` // 审核人
  2088. BROKERAPPLYID int64 `json:"brokerapplyid" xorm:"BROKERAPPLYID" form:"brokerapplyid"` // 申请ID(SEQ_BROKERAPPLY)
  2089. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 申请人用户ID
  2090. APPLYTIME string `json:"applytime" xorm:"APPLYTIME" form:"applytime"` // 申请时间
  2091. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK" form:"auditremark"` // 审核备注
  2092. AUDITTIME string `json:"audittime" xorm:"AUDITTIME" form:"audittime"` // 审核时间
  2093. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE" form:"audittradedate"` // 审核交易日(yyyyMMdd)
  2094. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"CARDBACKPHOTOURL" form:"cardbackphotourl"` // 证件背面图片地址
  2095. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"CARDFRONTPHOTOURL" form:"cardfrontphotourl"` // 证件正面图片地址
  2096. CARDNUM string `json:"cardnum" xorm:"CARDNUM" form:"cardnum"` // 证件号码(加密存储) 注:数据库没存证件类型字段,产品说类型固定为身份证
  2097. CUSTOMERNAME string `json:"customername" xorm:"CUSTOMERNAME" form:"customername"` // 姓名
  2098. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 备注
  2099. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2100. BrokerExInfo `xorm:"extends"`
  2101. FilterStatus string `json:"-" form:"filterstatus"` // 筛选条件
  2102. }
  2103. func (r *QhjBrokerApply) calc() {
  2104. r.MOBILE = DecryptField(r.MOBILE)
  2105. r.CARDNUM = DecryptField(r.CARDNUM)
  2106. if r.LOGINCODE == "" {
  2107. r.LOGINCODE = r.MOBILE
  2108. }
  2109. }
  2110. func (r *QhjBrokerApply) buildSql() string {
  2111. var sqlId utils.SQLVal = "with k as (select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  2112. "SELECT t.CUSTOMERNAME," +
  2113. " t.CARDNUM," +
  2114. " t.CARDFRONTPHOTOURL," +
  2115. " t.CARDBACKPHOTOURL," +
  2116. " t.BROKERAPPLYID," +
  2117. " t.USERID," +
  2118. " t.TRADEDATE," +
  2119. " t.APPLYSRC," +
  2120. " t.APPLICANTID," +
  2121. " t.REMARK," +
  2122. " to_char(t.APPLYTIME, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME," +
  2123. " t.APPLYSTATUS," +
  2124. " t.AUDITTRADEDATE," +
  2125. " t.AUDITORID," +
  2126. " t.AUDITSRC," +
  2127. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  2128. " t.AUDITREMARK," +
  2129. " u.accountname USERNAME," +
  2130. " u.parentuserid," +
  2131. " u.refereeuserid," +
  2132. " u.refernum," +
  2133. " ui.userinfotype," +
  2134. " ui.mobile," +
  2135. " u2.accountname PARENTUSERNAME," +
  2136. " k.logincode," +
  2137. " u.subarealevelpath" +
  2138. " FROM BROKERAPPLY t" +
  2139. " INNER JOIN USERACCOUNT u on t.userid=u.userid" +
  2140. " INNER JOIN USERINFO ui on t.userid=ui.userid" +
  2141. " LEFT JOIN k on t.userid=k.userid" +
  2142. " LEFT JOIN USERACCOUNT u2 on u.parentuserid=u2.userid" +
  2143. " WHERE 1 = 1"
  2144. sqlId.And("u.USERID", r.USERID)
  2145. sqlId.JoinEx(r.FilterStatus != "", fmt.Sprintf(" and t.APPLYSTATUS in(%v)", r.FilterStatus))
  2146. sqlId.Join(" order by t.APPLYTIME desc")
  2147. sqlId.Page(1, 1) // 按申请时间倒序后取最近一条
  2148. return sqlId.String()
  2149. }
  2150. // GetData 获取经济人申请表
  2151. func (r *QhjBrokerApply) GetData() ([]QhjBrokerApply, error) {
  2152. sData := make([]QhjBrokerApply, 0)
  2153. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2154. for i := range sData {
  2155. sData[i].calc()
  2156. }
  2157. return sData, err
  2158. }
  2159. // GetDataEx 获取经济人申请表
  2160. func (r *QhjBrokerApply) GetDataEx() (interface{}, error) {
  2161. sData := make([]QhjBrokerApply, 0)
  2162. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2163. for i := range sData {
  2164. sData[i].calc()
  2165. }
  2166. return sData, err
  2167. }
  2168. // QhjBrokerInfo 经纪人信息
  2169. type QhjBrokerInfo struct {
  2170. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  2171. REFERNUM string `json:"refernum" xorm:"'REFERNUM'"` // 推荐码
  2172. CANRECOMMEND int32 `json:"canrecommend" xorm:"'CANRECOMMEND'"` // 是否经纪人 0-不是 1-是
  2173. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  2174. }
  2175. func (r *QhjBrokerInfo) buildSql() string {
  2176. var sqlId utils.SQLVal = "select t.userid, t.refernum, t.canrecommend, ui.userinfotype" +
  2177. " from useraccount t" +
  2178. " inner join userinfo ui" +
  2179. " on t.userid = ui.userid" +
  2180. " where 1 = 1"
  2181. sqlId.And("t.userid", r.USERID)
  2182. return sqlId.String()
  2183. }
  2184. // GetData 获取经济人信息
  2185. func (r *QhjBrokerInfo) GetData() ([]QhjBrokerInfo, error) {
  2186. sData := make([]QhjBrokerInfo, 0)
  2187. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2188. return sData, err
  2189. }
  2190. // QhjBrokerApplyEx 经纪人信息和申请纪录
  2191. type QhjBrokerApplyEx struct {
  2192. QhjBrokerInfo
  2193. APPLYLIST []QhjBrokerApply `json:"applylist"` // 经纪人申请记录(只返回最新一条)
  2194. }
  2195. // GetDataEx 获取经纪人信息和申请纪录
  2196. func (r *QhjBrokerApplyEx) GetDataEx() (interface{}, error) {
  2197. sData := make([]QhjBrokerApplyEx, 0)
  2198. if sInfo, err := r.QhjBrokerInfo.GetData(); err == nil && len(sInfo) > 0 {
  2199. vInfo := sInfo[0]
  2200. val := QhjBrokerApplyEx{QhjBrokerInfo: vInfo, APPLYLIST: make([]QhjBrokerApply, 0)}
  2201. m := QhjBrokerApply{USERID: r.USERID}
  2202. if sApply, err := m.GetData(); err == nil {
  2203. val.APPLYLIST = append(val.APPLYLIST, sApply...)
  2204. }
  2205. sData = append(sData, val)
  2206. }
  2207. return sData, nil
  2208. }