qhj.go 122 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538
  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. DEALSTATUS int32 `json:"dealstatus" xorm:"'DEALSTATUS'"` // Log处理状态
  832. REMARK string `json:"remark" xorm:"'REMARK'"` // Log备注
  833. CUSBANKNAME string `json:"cusbankname" xorm:"CUSBANKNAME"` // 托管银行名称
  834. ACCOUNTNAME2 string `json:"accountname2"` // 资金账号对应的账号名(UserName) - 密文
  835. BANKACCOUNTNAME2 string `json:"bankaccountname2"` // 签约银行卡账号名 - 密文
  836. CARDNO2 string `json:"cardno2"` // 证件号码 - 密文
  837. BANKACCOUNTNO2 string `json:"bankaccountno2"` // 银行卡号 - 密文
  838. MOBILEPHONE2 string `json:"mobilephone2"` // 手机号 - 密文
  839. }
  840. func (r *QhjBankAccountSign) calc() {
  841. r.ACCOUNTNAME2 = r.ACCOUNTNAME
  842. r.BANKACCOUNTNAME2 = r.BANKACCOUNTNAME
  843. r.CARDNO2 = r.CARDNO
  844. r.BANKACCOUNTNO2 = r.BANKACCOUNTNO
  845. r.MOBILEPHONE2 = r.MOBILEPHONE
  846. r.ACCOUNTNAME = DecryptField(r.ACCOUNTNAME)
  847. r.BANKACCOUNTNAME = DecryptField(r.BANKACCOUNTNAME)
  848. r.CARDNO = DecryptField(r.CARDNO)
  849. r.BANKACCOUNTNO = DecryptField(r.BANKACCOUNTNO)
  850. r.MOBILEPHONE = DecryptField(r.MOBILEPHONE)
  851. }
  852. func (r *QhjBankAccountSign) buildSql() string {
  853. var sqlId utils.SQLVal = `SELECT t.ACCOUNTCODE,
  854. t.CUSBANKID,
  855. t.SIGNSTATUS,
  856. t.CURRENCY,
  857. t.ACCOUNTTYPE,
  858. t.ACCOUNTNAME,
  859. t.BANKCARDTYPE,
  860. t.BANKACCOUNTNO,
  861. t.BANKACCOUNTTYPE,
  862. t.BANKCHILDACCOUNT,
  863. t.BANKID,
  864. t.BRANCHBANKID,
  865. t.BRANCHBANKNAME,
  866. t.BANKACCOUNTNAME,
  867. t.CARDTYPE,
  868. t.CARDNO,
  869. t.BANKPROVINCE,
  870. t.BANKCITY,
  871. t.DIRECT,
  872. t.MOBILEPHONE,
  873. t.EXTENDINFO,
  874. t.EXCHTICKET,
  875. to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME,
  876. to_char(t.APPLICATIONTIME, 'yyyy-mm-dd hh24:mi:ss') APPLICATIONTIME,
  877. t.NETADDR,
  878. t.AUDITID,
  879. to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME,
  880. t.APPLYEXCHTICKET,
  881. ta.accountid,
  882. ta.relateduserid,
  883. b.bankname,
  884. ci.cusbankname,
  885. slog.dealstatus DEALSTATUS,
  886. slog.remark REMARK
  887. FROM BANK_ACCOUNTSIGN t
  888. INNER JOIN TAACCOUNT ta
  889. on t.accountcode = to_char(ta.accountid)
  890. LEFT JOIN BANK_BANKINFO b on t.bankid=b.bankid
  891. LEFT JOIN bank_cusbankinfo ci ON ci.cusbankid = t.CUSBANKID
  892. LEFT JOIN (SELECT b.*, ROW_NUMBER() OVER (PARTITION BY b.exchticket ORDER BY b.createtime DESC) AS row_num
  893. FROM BANK_ACCOUNTSIGNLOG b) slog ON slog.exchticket = t.applyexchticket AND slog.row_num = 1
  894. WHERE 1 = 1
  895. and ta.taaccounttype = 2`
  896. sqlId.And("ta.RELATEDUSERID", r.RELATEDUSERID)
  897. sqlId.OrderByDesc("t.APPLICATIONTIME")
  898. return sqlId.String()
  899. }
  900. // GetDataEx 获取签约银行
  901. func (r *QhjBankAccountSign) GetDataEx() (interface{}, error) {
  902. sData := make([]QhjBankAccountSign, 0)
  903. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  904. for i := range sData {
  905. sData[i].calc()
  906. }
  907. return sData, err
  908. }
  909. // QhjBankInfo 银行信息列表
  910. type QhjBankInfo struct {
  911. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 0:正常 1:注销
  912. ORDERINDEX int64 `json:"orderindex" xorm:"ORDERINDEX"` // 排序顺序
  913. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  914. BANKNAME string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  915. CLEARBANKNO string `json:"clearbankno" xorm:"CLEARBANKNO"` // 清算系统银行编号
  916. }
  917. func (r *QhjBankInfo) calc() {
  918. }
  919. func (r *QhjBankInfo) buildSql() string {
  920. 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 order by t.orderindex"
  921. return sqlId.String()
  922. }
  923. // GetData 获取银行信息列表
  924. func (r *QhjBankInfo) GetData() ([]QhjBankInfo, error) {
  925. sData := make([]QhjBankInfo, 0)
  926. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  927. for i := range sData {
  928. sData[i].calc()
  929. }
  930. return sData, err
  931. }
  932. // GetDataEx 获取银行信息列表
  933. func (r *QhjBankInfo) GetDataEx() (interface{}, error) {
  934. return r.GetData()
  935. }
  936. func (r *QhjBankInfo) buildSql2(cusbankid string) string {
  937. var sqlId utils.SQLVal = "SELECT t.BANKID,t.BANKNAME,t.CLEARBANKNO,t.STATUS,t.ORDERINDEX FROM BANK_BANKINFO t WHERE 1=1" +
  938. " and t.status=0 and t.bankid in (select bankid from bank_cusbanksignbank b where b.cusbankid='%v')" +
  939. " order by t.orderindex"
  940. sqlId.FormatParam(cusbankid)
  941. return sqlId.String()
  942. }
  943. // GetDataByID 获取银行信息列表By渠道ID
  944. func (r *QhjBankInfo) GetDataByID(cusbankid string) ([]QhjBankInfo, error) {
  945. sData := make([]QhjBankInfo, 0)
  946. err := db.GetEngine().SQL(r.buildSql2(cusbankid)).Find(&sData)
  947. for i := range sData {
  948. sData[i].calc()
  949. }
  950. return sData, err
  951. }
  952. // QhjReckonPriceLog 结算价(定投价)
  953. type QhjReckonPriceLog struct {
  954. LASTRECKONPRICE float64 `json:"lastreckonprice" xorm:"LASTRECKONPRICE"` // 上日结算价
  955. NEXTDNLIMITPRICE float64 `json:"nextdnlimitprice" xorm:"NEXTDNLIMITPRICE"` // 下个交易日跌停价
  956. NEXTUPLIMITPRICE float64 `json:"nextuplimitprice" xorm:"NEXTUPLIMITPRICE"` // 下个交易日涨停价
  957. RECKONPRICE float64 `json:"reckonprice" xorm:"RECKONPRICE"` // 今日结算价(定投价)
  958. UPDOWNRATE float64 `json:"updownrate" xorm:"UPDOWNRATE"` // 今日涨跌幅
  959. UPDOWNRATE_2D float64 `json:"updownrate_2d" xorm:"UPDOWNRATE_2D"` // 连续两日涨跌幅
  960. UPDOWNRATE_3D float64 `json:"updownrate_3d" xorm:"UPDOWNRATE_3D"` // 连续三日涨跌幅
  961. TOTALHOLDERQTY int32 `json:"totalholderqty" xorm:"TOTALHOLDERQTY"` // 总持仓数
  962. TOTALSTOCK int32 `json:"totalstock" xorm:"TOTALSTOCK"` // 总库存
  963. UPDOWNCOUNT int32 `json:"updowncount" xorm:"UPDOWNCOUNT"` // 连续涨(跌)停天数 (涨跌停标志变为0时值归0,变成涨停或是跌停时值为1,连续涨停天数+1,连续跌停天数+1)
  964. UPDOWNFLAG int32 `json:"updownflag" xorm:"UPDOWNFLAG"` // 连续涨跌停标志 - 0:无涨跌停 -1:跌停 1:涨停
  965. GOODSID int64 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  966. NEXTTRADE string `json:"nexttrade" xorm:"NEXTTRADE"` // 下个交易日
  967. RECKONTIME string `json:"reckontime" xorm:"RECKONTIME"` // 结算时间
  968. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日
  969. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  970. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  971. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  972. }
  973. func (r *QhjReckonPriceLog) calc() {
  974. }
  975. func (r *QhjReckonPriceLog) buildSql() string {
  976. var sqlId utils.SQLVal = "SELECT t.TRADEDATE," +
  977. " t.GOODSID," +
  978. " to_char(t.RECKONTIME, 'yyyy-mm-dd hh24:mi:ss') RECKONTIME," +
  979. " t.LASTRECKONPRICE," +
  980. " t.RECKONPRICE," +
  981. " t.UPDOWNRATE," +
  982. " t.UPDOWNFLAG," +
  983. " t.UPDOWNCOUNT," +
  984. " t.UPDOWNRATE_2D," +
  985. " t.UPDOWNRATE_3D," +
  986. " t.NEXTTRADE," +
  987. " t.NEXTUPLIMITPRICE," +
  988. " t.NEXTDNLIMITPRICE," +
  989. " t.TOTALHOLDERQTY," +
  990. " t.TOTALSTOCK," +
  991. " g.goodsname," +
  992. " g.decimalplace," +
  993. " g.goodscode" +
  994. " FROM RECKON_PRICELOG t" +
  995. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  996. " INNER JOIN MARKET m on g.marketid=g.marketid" +
  997. " WHERE 1 = 1 and m.marketid=69201"
  998. sqlId.AndEx("t.GOODSID", r.GOODSID, r.GOODSID > 0)
  999. if r.TRADEDATE != "" {
  1000. sqlId.AndEx("t.TRADEDATE", r.TRADEDATE, len(r.TRADEDATE) > 0)
  1001. } else {
  1002. sqlId.JoinFormat(" and t.TRADEDATE = (select max(TRADEDATE) from RECKON_PRICELOG)")
  1003. }
  1004. return sqlId.String()
  1005. }
  1006. // GetDataEx 获取结算价(定投价)
  1007. func (r *QhjReckonPriceLog) GetDataEx() (interface{}, error) {
  1008. sData := make([]QhjReckonPriceLog, 0)
  1009. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1010. for i := range sData {
  1011. sData[i].calc()
  1012. }
  1013. return sData, err
  1014. }
  1015. // QhjCustomer 客户资料
  1016. type QhjCustomer struct {
  1017. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户ID
  1018. MEMBERUSERID int64 `json:"memberuserid" xorm:"'MEMBERUSERID'"` // 所属机构ID(所属会员)
  1019. PARENTUSERID int64 `json:"parentuserid" xorm:"'PARENTUSERID'"` // 上级机构(所属机构)
  1020. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型 1-个人 2-企业
  1021. CUSTOMERNAME string `json:"customername" xorm:"'CUSTOMERNAME'"` // 客户名称
  1022. CARDTYPE int32 `json:"cardtype" xorm:"'CARDTYPE'"` // 证件类型
  1023. CARDNUM string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码
  1024. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  1025. TELPHONE string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话
  1026. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 通讯地址
  1027. REMARK string `json:"remark" xorm:"'REMARK'"` // 备注
  1028. STATUS int32 `json:"status" xorm:"'STATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
  1029. STATUSDESC string `json:"statusdesc"` // 账户状态中文描述
  1030. ATTACHMENT1 string `json:"attachment1" xorm:"'ATTACHMENT1'"` // 附件1
  1031. ATTACHMENT2 string `json:"attachment2" xorm:"'ATTACHMENT2'"` // 附件2
  1032. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"'CARDFRONTPHOTOURL'"` // 证件正面图片地址
  1033. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"'CARDBACKPHOTOURL'"` // 证件反面图片地址
  1034. PROXYSTATEMENTURL string `json:"proxystatementurl" xorm:"'PROXYSTATEMENTURL'"` // 授权委托书
  1035. COUNTRYID int32 `json:"countryid" xorm:"'COUNTRYID'"` // 国家
  1036. PROVINCEID int32 `json:"provinceid" xorm:"'PROVINCEID'"` // 省
  1037. CITYID int32 `json:"cityid" xorm:"'CITYID'"` // 市
  1038. DISTRICTID int32 `json:"districtid" xorm:"'DISTRICTID'"` // 区域
  1039. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  1040. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  1041. AUDITTIME string `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
  1042. NICKNAME string `json:"nickname" xorm:"'NICKNAME'"` // 昵称
  1043. TAXPAYERNUM string `json:"taxpayernum" xorm:"'taxpayernum'"` // 纳税人识别号
  1044. LEGALPERSONNAME string `json:"legalpersonname" xorm:"'legalpersonname'"` // 法人姓名(企业)
  1045. CONTACTNAME string `json:"contactname" xorm:"'contactname'"` // 联系人
  1046. EMAIL string `json:"email" xorm:"'EMAIL'"` // 邮件
  1047. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  1048. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 登录账号(代码)
  1049. COUNTRYNAME string `json:"countryname"` // 国家名称
  1050. CITYNAME string `json:"cityname"` // 城市名称
  1051. PROVINCENAME string `json:"provincename"` // 省名称
  1052. DISTRICTNAME string `json:"districtname"` // 地区名称
  1053. CARDTYPENAME string `json:"cardtypename"` // 证件类型名称
  1054. MEMBERUSERNAME string `json:"memberusername"` // 所属会员名称
  1055. PARENTUSERNAME string `json:"parentusername"` //所属机构名称
  1056. QUERYTYPE int32 `json:"-"` // 查询类型(1:未提交(网上开户表) 2:待审核(网上开户表) 3:正常 4:停用)
  1057. IncludeSub int32 `json:"-"` // 包子机构客户 1-包含
  1058. }
  1059. func (r *QhjCustomer) calc() {
  1060. r.MEMBERUSERNAME = mtpcache.GetUserNameByUserId(r.MEMBERUSERID)
  1061. if len(r.USERNAME) == 0 {
  1062. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  1063. }
  1064. r.PARENTUSERNAME = mtpcache.GetUserNameByUserId(r.PARENTUSERID)
  1065. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  1066. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  1067. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  1068. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  1069. switch r.QUERYTYPE {
  1070. case 1, 2: // 网上开户表
  1071. r.ADDRESS = DecryptField(r.ADDRESS)
  1072. r.TELPHONE = DecryptField(r.TELPHONE)
  1073. case 3, 4: // 正式表
  1074. r.TELPHONE = DecryptField(r.TELPHONE)
  1075. }
  1076. r.CARDNUM = DecryptField(r.CARDNUM)
  1077. r.MOBILE = DecryptField(r.MOBILE)
  1078. r.EMAIL = DecryptField(r.EMAIL)
  1079. if len(r.LOGINCODE) == 0 {
  1080. r.LOGINCODE = r.MOBILE
  1081. }
  1082. }
  1083. func (r *QhjCustomer) level() int32 {
  1084. if r.IncludeSub > 0 {
  1085. // 层级, 最多20层
  1086. return 20
  1087. }
  1088. return 1
  1089. }
  1090. func (r *QhjCustomer) buildSql() string {
  1091. if r.QUERYTYPE == 1 || r.QUERYTYPE == 2 {
  1092. return r.buildSqlWskh()
  1093. }
  1094. return r.buildSqlNormal()
  1095. }
  1096. func (r *QhjCustomer) buildSqlWskh() string {
  1097. var sqlId utils.SQLVal = "with tmp as" +
  1098. " (select t.userid, wm_concat(t.logincode) logincode" +
  1099. " from loginaccount t" +
  1100. " group by t.userid)" +
  1101. "select a.*" +
  1102. " from (select t.userid," +
  1103. " t.memberareaid MEMBERUSERID," +
  1104. " t.USERINFOTYPE," +
  1105. " t.username," +
  1106. " t.CUSTOMERNAME," +
  1107. " t.NICKNAME," +
  1108. " t.CARDTYPE," +
  1109. " t.CARDNUM," +
  1110. " t.mobilephone MOBILE," +
  1111. " t.TELPHONE," +
  1112. " t.cardaddress ADDRESS," +
  1113. " t.REMARK," +
  1114. " t.ATTACHMENT1," +
  1115. " t.ATTACHMENT2," +
  1116. " t.CARDFRONTPHOTOURL," +
  1117. " t.CARDBACKPHOTOURL," +
  1118. " t.proxystatementurl," +
  1119. " t.userstate status," +
  1120. " t.countryid," +
  1121. " t.provinceid," +
  1122. " t.districtid," +
  1123. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  1124. " t.cityid," +
  1125. " to_char(t.modifiedtime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  1126. " to_char(t.auditime, 'yyyy-mm-dd hh24:mi:ss') audittime," +
  1127. " t.taxpayernum," +
  1128. " t.legalpersonname," +
  1129. " t.contactname," +
  1130. " t.email," +
  1131. " t.areaid parentuserid," +
  1132. " t.logincode" +
  1133. " from wskh_userinfo t" +
  1134. " start with t.areaid = %v" +
  1135. " connect by prior t.userid = t.areaid" +
  1136. " and t.usertype in(2,6)" +
  1137. " and level <= %v) a" +
  1138. " left join tmp k" +
  1139. " on a.userid = k.userid" +
  1140. " where 1 = 1 and a.status in(%v)"
  1141. status := DecodeStr(r.QUERYTYPE == 1, "1", "2,4,5")
  1142. sqlId.FormatParam(r.USERID, r.level(), status)
  1143. sqlId.AndEx("a.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  1144. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and a.customername like '%%%v%%'`, r.CUSTOMERNAME))
  1145. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and a.nickname like '%%%v%%'`, r.NICKNAME))
  1146. return sqlId.String()
  1147. }
  1148. func (r *QhjCustomer) buildSqlNormal() string {
  1149. var sqlId utils.SQLVal = "with tmp as" +
  1150. " (select t.userid, wm_concat(t.logincode) logincode" +
  1151. " from loginaccount t" +
  1152. " group by t.userid)" +
  1153. "select a.*," +
  1154. " k.logincode," +
  1155. " u.USERINFOTYPE," +
  1156. " u.CUSTOMERNAME," +
  1157. " u.NICKNAME," +
  1158. " u.CARDTYPEID CARDTYPE," +
  1159. " e.enumdicname CARDTYPENAME," +
  1160. " u.CARDNUM," +
  1161. " u.MOBILE," +
  1162. " u.TELPHONE," +
  1163. " u.ADDRESS," +
  1164. " u.REMARK," +
  1165. " u.ATTACHMENT1," +
  1166. " u.ATTACHMENT2," +
  1167. " u.CARDFRONTPHOTOURL," +
  1168. " u.CARDBACKPHOTOURL," +
  1169. " u.proxystatementurl," +
  1170. " u.countryid," +
  1171. " u.provinceid," +
  1172. " u.districtid," +
  1173. " u.taxpayernum," +
  1174. " u.legalpersonname," +
  1175. " u.contactname," +
  1176. " u.email," +
  1177. " u.cityid" +
  1178. " from (select t.userid," +
  1179. " t.usertype," +
  1180. " t.parentuserid," +
  1181. " t.memberuserid," +
  1182. " t.accountstatus status," +
  1183. " to_char(t.createtime, 'yyyy-mm-dd hh24:mi:ss') createtime," +
  1184. " to_char(t.modifytime, 'yyyy-mm-dd hh24:mi:ss') modifytime," +
  1185. " to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') audittime" +
  1186. " from useraccount t" +
  1187. " start with t.usertype=6 and t.parentuserid = %v" +
  1188. " connect by prior t.userid = t.parentuserid" +
  1189. " and t.usertype = 6" +
  1190. " and level <= %v) a" +
  1191. " left join tmp k" +
  1192. " on a.userid = k.userid" +
  1193. " left join userinfo u" +
  1194. " on a.userid = u.userid" +
  1195. " left join enumdicitem e" +
  1196. " on u.cardtypeid = e.enumitemname" +
  1197. " and e.enumdiccode = 'certificatetype'" +
  1198. " where 1=1 and a.status in(%v)"
  1199. status := DecodeStr(r.QUERYTYPE == 3, "4", "6")
  1200. sqlId.FormatParam(r.USERID, r.level(), status)
  1201. sqlId.AndEx("u.USERINFOTYPE", r.USERINFOTYPE, r.USERINFOTYPE > 0)
  1202. sqlId.JoinEx(len(r.CUSTOMERNAME) > 0, fmt.Sprintf(` and u.customername like '%%%v%%'`, r.CUSTOMERNAME))
  1203. sqlId.JoinEx(len(r.NICKNAME) > 0, fmt.Sprintf(` and u.nickname like '%%%v%%'`, r.NICKNAME))
  1204. return sqlId.String()
  1205. }
  1206. // GetDataEx 获取客户资料
  1207. func (r *QhjCustomer) GetDataEx() (interface{}, error) {
  1208. sData := make([]QhjCustomer, 0)
  1209. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1210. for i := range sData {
  1211. sData[i].QUERYTYPE = r.QUERYTYPE
  1212. sData[i].calc()
  1213. }
  1214. return sData, err
  1215. }
  1216. // QhjCusBankInfo 托管银行信息
  1217. type QhjCusBankInfo struct {
  1218. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号(对应清算中心TRAN_NO)
  1219. CUSBANKNAME string `json:"cusbankname" xorm:"CUSBANKNAME"` // 银行业务名称
  1220. CUSBANKSHORTNAME string `json:"cusbankshortname" xorm:"CUSBANKSHORTNAME"` // 银行业务简称
  1221. EXCHBANKID string `json:"exchbankid" xorm:"EXCHBANKID"` // 交易所开户银行ID
  1222. EXCHPAYBANKACCNO string `json:"exchpaybankaccno" xorm:"EXCHPAYBANKACCNO"` // 交易所支出结算账户
  1223. EXCHPAYBANKACCNAME string `json:"exchpaybankaccname" xorm:"EXCHPAYBANKACCNAME"` // 交易所支出结算账户户名
  1224. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  1225. CANSIGN int32 `json:"cansign" xorm:"CANSIGN"` // 是否可签约 - 0:不可 1:可以
  1226. CANRELEASE int32 `json:"canrelease" xorm:"CANRELEASE"` // 是否可解约 - 0:不可 1:可以
  1227. CANINAMOUNT int32 `json:"caninamount" xorm:"CANINAMOUNT"` // 是否可入金 - 0:不可 1:可以
  1228. CANOUTAMOUNT int32 `json:"canoutamount" xorm:"CANOUTAMOUNT"` // 是否可出金 - 0:不可 1:可以
  1229. RISKINFO string `json:"riskinfo" xorm:"RISKINFO"` // 签约风险提示书
  1230. CANSIGN2 int32 `json:"cansign2" xorm:"CANSIGN2"` // 是否可签约(网银端) - 0:不可 1:可以
  1231. CANRELEASE2 int32 `json:"canrelease2" xorm:"CANRELEASE2"` // 是否可解约(网银端) - 0:不可 1:可以
  1232. CANINAMOUNT2 int32 `json:"caninamount2" xorm:"CANINAMOUNT2"` // 是否可入金(网银端) - 0:不可 1:可以
  1233. CANOUTAMOUNT2 int32 `json:"canoutamount2" xorm:"CANOUTAMOUNT2"` // 是否可出金(网银端) - 0:不可 1:可以
  1234. CANBINDCARD int32 `json:"canbindcard" xorm:"CANBINDCARD"` // 是否可绑卡与解卡 - 0:不可 1:可以
  1235. ISNEEDCLEAR int32 `json:"isneedclear" xorm:"ISNEEDCLEAR"` // 是否需要清算 - 0:不需要 1:需要
  1236. CANMODIFYPHONE int32 `json:"canmodifyphone" xorm:"CANMODIFYPHONE"` // 是否可修改手机号 - 0:不可 1:可以
  1237. CANMODIFYSIGNINFO int32 `json:"canmodifysigninfo" xorm:"CANMODIFYSIGNINFO"` // 是否可修改签约信息 - 0:不可 1:可以
  1238. ISNEEDCHECK int32 `json:"isneedcheck" xorm:"ISNEEDCHECK"` // 是否需要对账 - 0:需要 1:不需要 [不需要界面配置]
  1239. CANMODIFYBANKCARD int32 `json:"canmodifybankcard" xorm:"CANMODIFYBANKCARD"` // 是否可修改银行卡号 - 0:不可 1:可以
  1240. CANALLOT int32 `json:"canallot" xorm:"CANALLOT"` // 是否支持跨行调拨 - 0:不支持 1:支持
  1241. CANALLOTQUERY int32 `json:"canallotquery" xorm:"CANALLOTQUERY"` // 是否支持跨行调拨查询 - 0:不支持 1:支持
  1242. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1243. SIGNSTATUS int32 `json:"signstatus" xorm:"SIGNSTATUS"` // 当前签到/签退状态 - 1:签到 2:签退
  1244. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 当前签到/签退更新时间
  1245. LASTSIGNINTIME string `json:"lastsignintime" xorm:"LASTSIGNINTIME"` // 最后签到时间
  1246. LASTSIGNOUTTIME string `json:"lastsignouttime" xorm:"LASTSIGNOUTTIME"` // 最后签退时间
  1247. LASTCHECKTIME string `json:"lastchecktime" xorm:"LASTCHECKTIME"` // 最后对账时间
  1248. LASTCHECKSTATUS int32 `json:"lastcheckstatus" xorm:"LASTCHECKSTATUS"` // 最后对账状态 - 对账状态 - 1:未对账 2:对账成功 3:对账失败
  1249. LASTCLEARTIME string `json:"lastcleartime" xorm:"LASTCLEARTIME"` // 最后清算时间
  1250. LASTCLEARSTATUS int32 `json:"lastclearstatus" xorm:"LASTCLEARSTATUS"` // 最后清算状态 - 1:未清算 2:清算成功 3:清算失败 4:清算部分成功
  1251. }
  1252. func (r *QhjCusBankInfo) calc() {
  1253. }
  1254. func (r *QhjCusBankInfo) buildSql() string {
  1255. var sqlId utils.SQLVal = "with tmp as" +
  1256. " (select *" +
  1257. " from (select row_number() over(partition by t.cusbankid order by t.tradedate desc) cn," +
  1258. " t.CUSBANKID id2," +
  1259. " t.TRADEDATE," +
  1260. " t.SIGNSTATUS," +
  1261. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1262. " to_char(t.LASTSIGNINTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNINTIME," +
  1263. " to_char(t.LASTSIGNOUTTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNOUTTIME," +
  1264. " to_char(t.LASTCHECKTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCHECKTIME," +
  1265. " t.LASTCHECKSTATUS," +
  1266. " to_char(t.LASTCLEARTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCLEARTIME," +
  1267. " t.LASTCLEARSTATUS" +
  1268. " from bank_cusbankstatus t)" +
  1269. " where cn = 1)" +
  1270. "SELECT t.CUSBANKID," +
  1271. " t.CUSBANKNAME," +
  1272. " t.CUSBANKSHORTNAME," +
  1273. " t.EXCHBANKID," +
  1274. " t.EXCHPAYBANKACCNO," +
  1275. " t.EXCHPAYBANKACCNAME," +
  1276. " t.CURRENCY," +
  1277. " t.CANSIGN," +
  1278. " t.CANRELEASE," +
  1279. " t.CANINAMOUNT," +
  1280. " t.CANOUTAMOUNT," +
  1281. " to_char(t.RISKINFO) RISKINFO," +
  1282. " t.CANSIGN2," +
  1283. " t.CANRELEASE2," +
  1284. " t.CANINAMOUNT2," +
  1285. " t.CANOUTAMOUNT2," +
  1286. " t.CANBINDCARD," +
  1287. " t.ISNEEDCLEAR," +
  1288. " t.CANMODIFYPHONE," +
  1289. " t.CANMODIFYSIGNINFO," +
  1290. " t.ISNEEDCHECK," +
  1291. " t.CANMODIFYBANKCARD," +
  1292. " t.CANALLOT," +
  1293. " t.CANALLOTQUERY," +
  1294. " tmp.*" +
  1295. " FROM BANK_CUSBANKINFO t" +
  1296. " LEFT JOIN tmp" +
  1297. " on t.cusbankid = tmp.id2" +
  1298. " WHERE 1 = 1"
  1299. return sqlId.String()
  1300. }
  1301. // GetData 获取托管银行信息
  1302. func (r *QhjCusBankInfo) GetData() ([]QhjCusBankInfo, error) {
  1303. sData := make([]QhjCusBankInfo, 0)
  1304. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1305. for i := range sData {
  1306. sData[i].calc()
  1307. }
  1308. return sData, err
  1309. }
  1310. // GetDataEx 获取托管银行信息
  1311. func (r *QhjCusBankInfo) GetDataEx() (interface{}, error) {
  1312. return r.GetData()
  1313. }
  1314. func (r *QhjCusBankInfo) buildSql2(areauserid int64, configtype int) string {
  1315. var sqlId utils.SQLVal = "with tmp as" +
  1316. " (select *" +
  1317. " from (select row_number() over(partition by t.cusbankid order by t.tradedate desc) cn," +
  1318. " t.CUSBANKID id2," +
  1319. " t.TRADEDATE," +
  1320. " t.SIGNSTATUS," +
  1321. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1322. " to_char(t.LASTSIGNINTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNINTIME," +
  1323. " to_char(t.LASTSIGNOUTTIME, 'yyyy-mm-dd hh24:mi:ss') LASTSIGNOUTTIME," +
  1324. " to_char(t.LASTCHECKTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCHECKTIME," +
  1325. " t.LASTCHECKSTATUS," +
  1326. " to_char(t.LASTCLEARTIME, 'yyyy-mm-dd hh24:mi:ss') LASTCLEARTIME," +
  1327. " t.LASTCLEARSTATUS" +
  1328. " from bank_cusbankstatus t)" +
  1329. " where cn = 1)" +
  1330. "SELECT t.CUSBANKID," +
  1331. " t.CUSBANKNAME," +
  1332. " t.CUSBANKSHORTNAME," +
  1333. " t.EXCHBANKID," +
  1334. " t.EXCHPAYBANKACCNO," +
  1335. " t.EXCHPAYBANKACCNAME," +
  1336. " t.CURRENCY," +
  1337. " t.CANSIGN," +
  1338. " t.CANRELEASE," +
  1339. " t.CANINAMOUNT," +
  1340. " t.CANOUTAMOUNT," +
  1341. " to_char(t.RISKINFO) RISKINFO," +
  1342. " t.CANSIGN2," +
  1343. " t.CANRELEASE2," +
  1344. " t.CANINAMOUNT2," +
  1345. " t.CANOUTAMOUNT2," +
  1346. " t.CANBINDCARD," +
  1347. " t.ISNEEDCLEAR," +
  1348. " t.CANMODIFYPHONE," +
  1349. " t.CANMODIFYSIGNINFO," +
  1350. " t.ISNEEDCHECK," +
  1351. " t.CANMODIFYBANKCARD," +
  1352. " t.CANALLOT," +
  1353. " t.CANALLOTQUERY," +
  1354. " tmp.*" +
  1355. " FROM BANK_CUSBANKINFO t" +
  1356. " LEFT JOIN tmp on t.cusbankid = tmp.id2" +
  1357. " INNER JOIN tce_areacusbankconfig ta on t.cusbankid = ta.cusbankid" +
  1358. " WHERE 1 = 1"
  1359. sqlId.And("ta.areauserid", areauserid)
  1360. sqlId.And("ta.configtype", configtype)
  1361. return sqlId.String()
  1362. }
  1363. // GetAreaData 获取机构托管银行信息
  1364. func (r *QhjCusBankInfo) GetAreaData(areauserid int64, configtype int) ([]QhjCusBankInfo, error) {
  1365. sData := make([]QhjCusBankInfo, 0)
  1366. err := db.GetEngine().SQL(r.buildSql2(areauserid, configtype)).Find(&sData)
  1367. return sData, err
  1368. }
  1369. // QhjCusBankSignBank 托管银行签约关系
  1370. type QhjCusBankSignBank struct {
  1371. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行ID
  1372. BANKID string `json:"bankid" xorm:"BANKID"` // 银行ID
  1373. }
  1374. func (r *QhjCusBankSignBank) calc() {
  1375. }
  1376. func (r *QhjCusBankSignBank) buildSql() string {
  1377. var sqlId utils.SQLVal = "select t.* from bank_cusbanksignbank t left join Bank_BankInfo c on t.bankid = c.bankid order by t.cusbankid, c.orderindex"
  1378. return sqlId.String()
  1379. }
  1380. // GetData 获取托管银行签约关系
  1381. func (r *QhjCusBankSignBank) GetData() ([]QhjCusBankSignBank, error) {
  1382. sData := make([]QhjCusBankSignBank, 0)
  1383. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1384. for i := range sData {
  1385. sData[i].calc()
  1386. }
  1387. return sData, err
  1388. }
  1389. // GetDataEx 获取托管银行签约关系
  1390. func (r *QhjCusBankSignBank) GetDataEx() (interface{}, error) {
  1391. return r.GetData()
  1392. }
  1393. // QhjCusBankSignBankEx 托管银行签约银行详细
  1394. type QhjCusBankSignBankEx struct {
  1395. QhjCusBankInfo
  1396. Banklst []QhjBankInfo // 银行列表
  1397. }
  1398. // GetDataEx 获取托管银行签约银行详细
  1399. func (r *QhjCusBankSignBankEx) GetDataEx() (interface{}, error) {
  1400. sData := make([]QhjCusBankSignBankEx, 0)
  1401. a := QhjCusBankSignBank{}
  1402. relateData, _ := a.GetData()
  1403. if len(relateData) == 0 {
  1404. return sData, nil
  1405. }
  1406. b := QhjCusBankInfo{}
  1407. bData, _ := b.GetData()
  1408. c := QhjBankInfo{}
  1409. cData, _ := c.GetData()
  1410. for _, vb := range bData {
  1411. // 托管银行
  1412. v := QhjCusBankSignBankEx{QhjCusBankInfo: vb, Banklst: make([]QhjBankInfo, 0)}
  1413. for _, vr := range relateData {
  1414. // 托管关系
  1415. if vb.CUSBANKID == vr.CUSBANKID {
  1416. for _, vc := range cData {
  1417. if vc.BANKID == vr.BANKID {
  1418. v.Banklst = append(v.Banklst, vc)
  1419. }
  1420. }
  1421. }
  1422. }
  1423. if len(v.Banklst) > 0 {
  1424. sData = append(sData, v)
  1425. }
  1426. }
  1427. return sData, nil
  1428. }
  1429. // MemberCusBankInfo 机构托管银行签约银行详细
  1430. type MemberCusBankInfo struct {
  1431. QhjCusBankInfo
  1432. Banklst []QhjBankInfo // 银行列表
  1433. MEMBERUSERID int64 `json:"-" form:"MEMBERUSERID"` // 所属机构ID
  1434. CONFIGTYPE int `json:"-" form:"CONFIGTYPE"` // 配置类型
  1435. }
  1436. // GetDataEx 获取机构托管银行签约银行详细
  1437. func (r *MemberCusBankInfo) GetDataEx() (interface{}, error) {
  1438. sData := make([]MemberCusBankInfo, 0)
  1439. // 获取机构渠道配置
  1440. b := QhjCusBankInfo{}
  1441. bData, _ := b.GetAreaData(r.MEMBERUSERID, r.CONFIGTYPE)
  1442. for _, vb := range bData {
  1443. // 托管银行
  1444. v := MemberCusBankInfo{QhjCusBankInfo: vb}
  1445. // 获取渠道对应银行
  1446. c := QhjBankInfo{}
  1447. cData, _ := c.GetDataByID(vb.CUSBANKID)
  1448. v.Banklst = cData
  1449. sData = append(sData, v)
  1450. }
  1451. return sData, nil
  1452. }
  1453. // QhjSiteColumnDetail 资讯
  1454. type QhjSiteColumnDetail struct {
  1455. ID int64 `json:"id" xorm:"ID"` // ID(SEQ_SITE_COLUMNDETAIL)
  1456. COLUMNID int64 `json:"columnid" xorm:"COLUMNID"` // 所属栏目
  1457. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID(默认为0, 核心为为机构用户ID)
  1458. TITLE string `json:"title" xorm:"TITLE"` // 标题
  1459. COVERIMAGE string `json:"coverimage" xorm:"COVERIMAGE"` // 封面图片
  1460. AUTHOR string `json:"author" xorm:"AUTHOR"` // 作者
  1461. BRIEF string `json:"brief" xorm:"BRIEF"` // 简介
  1462. CONTEXT string `json:"context" xorm:"CONTEXT"` // 内容
  1463. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 1:暂存 10:待审核 20:审核通过 30:审核拒绝
  1464. ISTOP int32 `json:"istop" xorm:"ISTOP"` // 是否置顶 - 0:不置 1:置顶
  1465. HITS int64 `json:"hits" xorm:"HITS"` // 点击数
  1466. PUBLISHDATE string `json:"publishdate" xorm:"PUBLISHDATE"` // 发布日期
  1467. CREAEDATE string `json:"creaedate" xorm:"CREAEDATE"` // 创建时间
  1468. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人
  1469. UPDATEDATE string `json:"updatedate" xorm:"UPDATEDATE"` // 修改时间
  1470. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 操作人
  1471. ISSHOW int32 `json:"isshow" xorm:"ISSHOW"` // 是否展示 - 0:不展示 1:展示
  1472. SRCID string `json:"srcid" xorm:"SRCID"` // 来源ID
  1473. SRCNAME string `json:"srcname" xorm:"SRCNAME"` // 来源名称
  1474. SRCURL string `json:"srcurl" xorm:"SRCURL"` // 来源网址
  1475. SRCLOGO string `json:"srclogo" xorm:"SRCLOGO"` // 来源LOGO
  1476. USERNAME string `json:"username"` // 用户名称
  1477. }
  1478. func (r *QhjSiteColumnDetail) calc() {
  1479. if r.USERID > 0 {
  1480. r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
  1481. }
  1482. }
  1483. func (r *QhjSiteColumnDetail) buildSql() string {
  1484. var sqlId utils.SQLVal = "SELECT t.ID," +
  1485. " t.COLUMNID," +
  1486. " t.USERID," +
  1487. " t.TITLE," +
  1488. " t.COVERIMAGE," +
  1489. " t.AUTHOR," +
  1490. " t.BRIEF," +
  1491. " to_char(t.CONTEXT) CONTEXT," +
  1492. " t.STATUS," +
  1493. " t.ISTOP," +
  1494. " t.HITS," +
  1495. " to_char(t.PUBLISHDATE, 'yyyy-mm-dd hh24:mi:ss') PUBLISHDATE," +
  1496. " to_char(t.CREAEDATE, 'yyyy-mm-dd hh24:mi:ss') CREAEDATE," +
  1497. " t.CREATORID," +
  1498. " to_char(t.UPDATEDATE, 'yyyy-mm-dd hh24:mi:ss') UPDATEDATE," +
  1499. " t.MODIFIERID," +
  1500. " GM.MEMBERID SRCID," +
  1501. " GM.MEMBERNAME SRCNAME," +
  1502. " GM.MEMBERTAGS SRCURL," +
  1503. " GM.IMAGEURL SRCLOGO," +
  1504. " t.ISSHOW" +
  1505. " FROM SITE_COLUMNDETAIL t" +
  1506. " LEFT JOIN GZ_MEMBERINFO GM ON T.SRCID = GM.MEMBERID" +
  1507. " WHERE 1 = 1"
  1508. sqlId.And("t.USERID", r.USERID)
  1509. return sqlId.String()
  1510. }
  1511. // GetDataEx 获取资讯
  1512. func (r *QhjSiteColumnDetail) GetDataEx() (interface{}, error) {
  1513. sData := make([]QhjSiteColumnDetail, 0)
  1514. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1515. for i := range sData {
  1516. sData[i].calc()
  1517. }
  1518. return sData, err
  1519. }
  1520. // QhjAccountOutInApply 充值提现(出入金)
  1521. type QhjAccountOutInApply struct {
  1522. EXECUTETYPE int32 `json:"executetype" xorm:"EXECUTETYPE"` // 申请类型 - 1:出金 2:入金 3: 单边账调整:入金; 4:单边账调整:出金 5:外部母账户调整:入金 6:外部母账户调整:出金 7:外部子账户:入金 8:外部子账户:出金
  1523. AMOUNT float64 `json:"amount" xorm:"AMOUNT"` // 金额
  1524. CURRENCY string `json:"currency" xorm:"CURRENCY"` // 币种
  1525. CHARGE float64 `json:"charge" xorm:"CHARGE"` // 手续费
  1526. ACCOUNTPWD string `json:"accountpwd" xorm:"ACCOUNTPWD"` // 资金密码
  1527. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间(申请时间)
  1528. BANKID string `json:"bankid" xorm:"BANKID"` // 银行编号
  1529. BRANCHBANKID string `json:"branchbankid" xorm:"BRANCHBANKID"` // 银行支行号
  1530. BRANCHBANKNAME string `json:"branchbankname" xorm:"BRANCHBANKNAME"` // 银行支行名称
  1531. BANKACCOUNTNO string `json:"bankaccountno" xorm:"BANKACCOUNTNO"` // 银行卡号
  1532. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 银行账户名
  1533. EXTENDINFO string `json:"extendinfo" xorm:"EXTENDINFO"` // 扩展信息
  1534. AUDITID int64 `json:"auditid" xorm:"AUDITID"` // 审核人
  1535. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  1536. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1537. NETADDR string `json:"netaddr" xorm:"NETADDR"` // 调转网址
  1538. ACCOUNTTICKET string `json:"accountticket" xorm:"ACCOUNTTICKET"` // 最新账户服务流水号
  1539. CHECKERRORFLAG int32 `json:"checkerrorflag" xorm:"CHECKERRORFLAG"` // 对账差错标志 - 1:为单边账;其它为正常出入金
  1540. REMARK2 string `json:"remark2" xorm:"REMARK2"` // 备注(失败原因)
  1541. REAUDITID int64 `json:"reauditid" xorm:"REAUDITID"` // 复审人
  1542. REAUDITTIME string `json:"reaudittime" xorm:"REAUDITTIME"` // 复审时间
  1543. REAUDITREMARK string `json:"reauditremark" xorm:"REAUDITREMARK"` // 复审备注
  1544. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  1545. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID"` // 三方关联ID
  1546. CAPAMOUNTOUT float64 `json:"capamountout" xorm:"CAPAMOUNTOUT"` // 出金(劣后本金) - 外部子账户
  1547. INFAMOUNT float64 `json:"infamount" xorm:"INFAMOUNT"` // 劣后金额(自有)
  1548. PRIAMOUNT float64 `json:"priamount" xorm:"PRIAMOUNT"` // 优先金额(授信)
  1549. BANK_APPLY_TICKET string `json:"bank_apply_ticket" xorm:"BANK_APPLY_TICKET"` // 银行申请流水
  1550. CERTIFICATEPHOTOURL string `json:"certificatephotourl" xorm:"CERTIFICATEPHOTOURL"` // 凭证地址
  1551. SOUCREAMOUNT float64 `json:"soucreamount" xorm:"SOUCREAMOUNT"` // 原始出入金金额
  1552. SOUCRECURRENCYID int64 `json:"soucrecurrencyid" xorm:"SOUCRECURRENCYID"` // 原始出入金币种
  1553. ACCOUNTCODE string `json:"accountcode" xorm:"ACCOUNTCODE"` // 资金账号
  1554. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID"` // 托管银行编号
  1555. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1556. EXCHTICKET string `json:"exchticket" xorm:"EXCHTICKET"` // 银行服务流水号
  1557. EXTOPERATEID int64 `json:"extoperateid" xorm:"EXTOPERATEID"` // 交易服务流水号
  1558. BANKTICKET string `json:"bankticket" xorm:"BANKTICKET"` // 银行流水
  1559. 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: 复审通过,账户冻结金额检查中;
  1560. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1561. LOGINCODE string `json:"logincode" xorm:"'LOGINCODE'"` // 登录账号(账号)
  1562. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 账户类型 1-个人 2-企业
  1563. ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 用户名称(名称)
  1564. MOBILE string `json:"-" xorm:"'MOBILE'"` // 手机号
  1565. BANKNAME string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  1566. CUSBANKNAME string `json:"cusbankname" xorm:"CUSBANKNAME"` // 托管银行名称
  1567. CUSBANKSHORTNAME string `json:"cusbankshortname" xorm:"CUSBANKSHORTNAME"` // 托管银行简称
  1568. BeginDate string `json:"-"` // 开始日期(yyyymmdd)
  1569. EndDate string `json:"-"` // 结束日期(yyyymmdd)
  1570. FilterName string `json:"-"` // 账户(模糊匹配)
  1571. QUERYTYPE int32 `json:"-"` // 查询类型 1-提现 2-充值
  1572. STATUS int32 `json:"-"` // 查询状态 1-待审核 2-审核通过 3-审核拒绝
  1573. }
  1574. func (r *QhjAccountOutInApply) calc() {
  1575. r.BANKACCOUNTNAME = DecryptField(r.BANKACCOUNTNAME)
  1576. r.BANKACCOUNTNO = DecryptField(r.BANKACCOUNTNO)
  1577. if len(r.LOGINCODE) == 0 {
  1578. r.LOGINCODE = DecryptField(r.MOBILE)
  1579. }
  1580. }
  1581. func (r *QhjAccountOutInApply) buildSql() string {
  1582. var sqlId utils.SQLVal = "with tmp as(select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  1583. "SELECT t.EXECUTETYPE," +
  1584. " t.AMOUNT," +
  1585. " t.CURRENCY," +
  1586. " t.CHARGE," +
  1587. " t.ACCOUNTPWD," +
  1588. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  1589. " t.BANKID," +
  1590. " t.BRANCHBANKID," +
  1591. " t.BRANCHBANKNAME," +
  1592. " t.BANKACCOUNTNO," +
  1593. " t.BANKACCOUNTNAME," +
  1594. " t.EXTENDINFO," +
  1595. " t.AUDITID," +
  1596. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  1597. " t.REMARK," +
  1598. " t.NETADDR," +
  1599. " t.ACCOUNTTICKET," +
  1600. " t.CHECKERRORFLAG," +
  1601. " t.REMARK2," +
  1602. " t.REAUDITID," +
  1603. " to_char(t.REAUDITTIME, 'yyyy-mm-dd hh24:mi:ss') REAUDITTIME," +
  1604. " t.REAUDITREMARK," +
  1605. " t.APPLYREMARK," +
  1606. " t.RELATEDORDERID," +
  1607. " t.CAPAMOUNTOUT," +
  1608. " t.INFAMOUNT," +
  1609. " t.PRIAMOUNT," +
  1610. " t.BANK_APPLY_TICKET," +
  1611. " to_char(t.CERTIFICATEPHOTOURL) CERTIFICATEPHOTOURL," +
  1612. " t.SOUCREAMOUNT," +
  1613. " t.SOUCRECURRENCYID," +
  1614. " t.ACCOUNTCODE," +
  1615. " t.CUSBANKID," +
  1616. " t.TRADEDATE," +
  1617. " t.EXCHTICKET," +
  1618. " t.EXTOPERATEID," +
  1619. " t.BANKTICKET," +
  1620. " t.APPLYSTATUS," +
  1621. " u.userid," +
  1622. " u.accountname," +
  1623. " ui.userinfotype," +
  1624. " ui.mobile," +
  1625. " tmp.logincode," +
  1626. " bb.bankname," +
  1627. " bc.CUSBANKNAME," +
  1628. " bc.CUSBANKSHORTNAME" +
  1629. " FROM BANK_ACCOUNTOUTINAPPLY t" +
  1630. " INNER JOIN TAACCOUNT ta on t.accountcode=to_char(ta.accountid)" +
  1631. " INNER JOIN USERACCOUNT u on ta.relateduserid=u.userid" +
  1632. " INNER JOIN USERINFO ui on u.userid=ui.userid" +
  1633. " INNER JOIN BANK_CUSBANKINFO bc on bc.cusbankid=t.CUSBANKID" +
  1634. " LEFT JOIN tmp on u.userid=tmp.userid" +
  1635. " LEFT JOIN bank_bankinfo bb ON bb.bankid=t.bankid" +
  1636. " WHERE 1 = 1"
  1637. sqlId.And("u.userid", r.USERID)
  1638. sqlId.AndEx("t.EXECUTETYPE", r.QUERYTYPE, r.QUERYTYPE > 0)
  1639. switch r.STATUS {
  1640. case 1:
  1641. sqlId.JoinFormat(" and t.APPLYSTATUS in(%v)", InStr(1, 2))
  1642. case 2:
  1643. sqlId.JoinFormat(" and t.APPLYSTATUS in(%v)", InStr(11, 18, 24, 25))
  1644. case 3:
  1645. sqlId.JoinFormat(" and t.APPLYSTATUS in(%v)", InStr(3, 12, 21))
  1646. }
  1647. if len(r.BeginDate) > 0 {
  1648. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME >= to_date(%v,'yyyymmdd')", r.BeginDate))
  1649. }
  1650. if len(r.EndDate) > 0 {
  1651. sqlId.Join(fmt.Sprintf(" and t.UPDATETIME <= to_date(%v,'yyyymmdd')", r.EndDate))
  1652. }
  1653. if len(r.FilterName) > 0 {
  1654. sqlId.Join(fmt.Sprintf(" and (tmp.logincode like '%%%v%%' or u.accountname like '%%%v%%')", r.FilterName, r.FilterName))
  1655. }
  1656. sqlId.OrderByDesc("t.updatetime")
  1657. return sqlId.String()
  1658. }
  1659. // GetDataEx 获取充值提现(出入金)
  1660. func (r *QhjAccountOutInApply) GetDataEx() (interface{}, error) {
  1661. sData := make([]QhjAccountOutInApply, 0)
  1662. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1663. for i := range sData {
  1664. sData[i].calc()
  1665. }
  1666. return sData, err
  1667. }
  1668. type DBINT64 int64
  1669. func (r *DBINT64) FromDB(bytes []byte) error {
  1670. d, err := strconv.ParseInt(string(bytes), 10, 64)
  1671. if err == nil {
  1672. *r = DBINT64(d)
  1673. }
  1674. return err
  1675. }
  1676. func (r *DBINT64) ToDB() ([]byte, error) {
  1677. d := strconv.FormatInt(int64(*r), 10)
  1678. return []byte(d), nil
  1679. }
  1680. // QhjPayOrder 待付款单据
  1681. type QhjPayOrder struct {
  1682. OPERATETYPE int32 `json:"operatetype" xorm:"OPERATETYPE"` // 买委托操作类型 - 1:正常下单 16:融资买入
  1683. TRADEID string `json:"tradeid" xorm:"TRADEID"` // 成交单号(101+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  1684. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  1685. MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
  1686. GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID
  1687. BUYORDERID string `json:"buyorderid" xorm:"BUYORDERID"` // 买方委托单号
  1688. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID[报价币种]
  1689. SELLORDERID string `json:"sellorderid" xorm:"SELLORDERID"` // 卖方委托单号
  1690. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID[报价币种]
  1691. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额(优惠后金额)
  1692. TRADECHARGE float64 `json:"tradecharge" xorm:"TRADECHARGE"` // 成交手续费(买方)
  1693. PAYFLAG int32 `json:"payflag" xorm:"PAYFLAG"` // 付款标识 - 1:未支付 2:已支付 3:已过期 4:已撤销 5:结算过期 6:预售终止
  1694. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1695. PAYTIME string `json:"paytime" xorm:"PAYTIME"` // 付款时间
  1696. PAYLIMITEDTIME string `json:"paylimitedtime" xorm:"PAYLIMITEDTIME"` // 支付期限
  1697. OFFAMOUNT float64 `json:"offamount" xorm:"OFFAMOUNT"` // 优惠金额
  1698. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  1699. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  1700. PAYAMOUNT float64 `json:"payamount" xorm:"PAYAMOUNT"` // 支付金额
  1701. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品代码
  1702. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  1703. GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 商品单位id
  1704. DECIMALPLACE int32 `json:"decimalplace" xorm:"'DECIMALPLACE'"` // 商品报价小数位
  1705. QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
  1706. ADVANCERATIO float64 `json:"advanceratio" xorm:"ADVANCERATIO"` // 首付比率
  1707. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  1708. FilterPayFlag string `json:"-"` // 付款标识筛选
  1709. }
  1710. func (r *QhjPayOrder) calc() {
  1711. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
  1712. zoomFun := NewZoomFun(r.QTYDECIMALPLACE)
  1713. zoomFun(&r.TRADEQTY)
  1714. }
  1715. func (r *QhjPayOrder) buildSql() string {
  1716. var sqlId utils.SQLVal = "SELECT t.OPERATETYPE," +
  1717. " to_char(t.TRADEID) TRADEID," +
  1718. " t.TRADEDATE," +
  1719. " t.MARKETID," +
  1720. " t.GOODSID," +
  1721. " to_char(t.BUYORDERID) BUYORDERID," +
  1722. " t.BUYACCOUNTID," +
  1723. " to_char(t.SELLORDERID) SELLORDERID," +
  1724. " t.SELLACCOUNTID," +
  1725. " t.TRADEAMOUNT," +
  1726. " t.TRADECHARGE," +
  1727. " t.PAYFLAG," +
  1728. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  1729. " to_char(t.PAYTIME, 'yyyy-mm-dd hh24:mi:ss') PAYTIME," +
  1730. " to_char(t.PAYLIMITEDTIME, 'yyyy-mm-dd hh24:mi:ss') PAYLIMITEDTIME," +
  1731. " t.OFFAMOUNT," +
  1732. " t.TRADEPRICE," +
  1733. " t.TRADEQTY," +
  1734. " t.PAYAMOUNT," +
  1735. " t.ADVANCERATIO," +
  1736. " g.goodscode," +
  1737. " g.decimalplace," +
  1738. " g.qtydecimalplace," +
  1739. " g.goodunitid," +
  1740. " g.goodsname" +
  1741. " FROM TRADE_PAYORDER t" +
  1742. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  1743. " WHERE 1 = 1"
  1744. sqlId.AndEx("t.BUYACCOUNTID", r.BUYACCOUNTID, r.BUYACCOUNTID > 0)
  1745. sqlId.AndEx("t.TRADEID", r.TRADEID, len(r.TRADEID) > 0)
  1746. //sqlId.AndEx("t.PAYFLAG", r.PAYFLAG, r.PAYFLAG > 0)
  1747. sqlId.JoinEx(r.FilterPayFlag != "", fmt.Sprintf(" and t.PAYFLAG in(%v)", r.FilterPayFlag))
  1748. return sqlId.String()
  1749. }
  1750. // GetDataEx 获取待付款单据
  1751. func (r *QhjPayOrder) GetDataEx() (interface{}, error) {
  1752. sData := make([]QhjPayOrder, 0)
  1753. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1754. for i := range sData {
  1755. sData[i].calc()
  1756. }
  1757. return sData, err
  1758. }
  1759. // Qhjgoodsex 交易商品扩展表(千海金)
  1760. type Qhjgoodsex struct {
  1761. Goodsid int32 `json:"goodsid" xorm:"GOODSID"` // 商品ID(自增ID SEQ_GOODS)
  1762. Minamount float64 `json:"minamount" xorm:"MINAMOUNT"` // 最小购买金额
  1763. Canfinance int32 `json:"canfinance" xorm:"CANFINANCE"` // 是否支持融资 - 0:不支持 1:支持【69:铂金宝】
  1764. Canregularlybuy int32 `json:"canregularlybuy" xorm:"CANREGULARLYBUY"` // 是否支持定投 - 0:不支持 1:支持【69:铂金宝】
  1765. Regularlybuyminqty float64 `json:"regularlybuyminqty" xorm:"REGULARLYBUYMINQTY"` // 定投最小数量
  1766. Regularlybuyminamount float64 `json:"regularlybuyminamount" xorm:"REGULARLYBUYMINAMOUNT"` // 定投最小金额
  1767. Deliverygoodsid int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  1768. Wrstandardid int32 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
  1769. Spotgoodsbrandid int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID - 存“DGFactoryItem”表"DGFactoryItemID"
  1770. Defaulttradeuserid int64 `json:"defaulttradeuserid" xorm:"DEFAULTTRADEUSERID"` // 默认交易用户ID
  1771. VISIBILITYFORPERSONAL int32 `json:"visibilityforpersonal" xorm:"'VISIBILITYFORPERSONAL'"` // 个人客户是否可见 - 0:不可见 1:可见
  1772. VISIBILITYFORENTERPRISE int32 `json:"visibilityforenterprise" xorm:"'VISIBILITYFORENTERPRISE'"` // 企业客户是否可见 - 0:不可见 1:可见
  1773. }
  1774. func (r *Qhjgoodsex) calc() {
  1775. }
  1776. func (r *Qhjgoodsex) buildSql() string {
  1777. var sqlId utils.SQLVal = "SELECT t.GOODSID," +
  1778. " t.MINAMOUNT," +
  1779. " t.CANFINANCE," +
  1780. " t.CANREGULARLYBUY," +
  1781. " t.REGULARLYBUYMINQTY / power(10,nvl(g.qtydecimalplace,0)) REGULARLYBUYMINQTY," +
  1782. " t.REGULARLYBUYMINAMOUNT," +
  1783. " t.DELIVERYGOODSID," +
  1784. " t.WRSTANDARDID," +
  1785. " t.SPOTGOODSBRANDID," +
  1786. " t.DEFAULTTRADEUSERID," +
  1787. " t.VISIBILITYFORPERSONAL," +
  1788. " t.VISIBILITYFORENTERPRISE" +
  1789. " FROM QHJ_GOODSEX t" +
  1790. " LEFT JOIN GOODS g on t.goodsid=g.goodsid" +
  1791. " WHERE 1 = 1"
  1792. sqlId.AndEx("t.GOODSID", r.Goodsid, r.Goodsid > 0)
  1793. return sqlId.String()
  1794. }
  1795. // GetDataEx 获取交易商品扩展表(千海金)
  1796. func (r *Qhjgoodsex) GetDataEx() (interface{}, error) {
  1797. sData := make([]Qhjgoodsex, 0)
  1798. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1799. for i := range sData {
  1800. sData[i].calc()
  1801. }
  1802. return sData, err
  1803. }
  1804. // QhjParentAreaList 所属机构列表
  1805. type QhjParentAreaList struct {
  1806. USERID int64 `json:"userid" xorm:"USERID"` // 用户ID
  1807. USERTYPE int32 `json:"usertype" xorm:"USERTYPE"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
  1808. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME"` // 账户名称(机构名称)
  1809. }
  1810. func (r *QhjParentAreaList) calc() {
  1811. }
  1812. func (r *QhjParentAreaList) buildSql() string {
  1813. var sqlId utils.SQLVal = "select t.userid, t.accountname, t.usertype" +
  1814. " from useraccount t" +
  1815. " where 1 = 1" +
  1816. " and t.accountstatus = 4" +
  1817. " and t.usertype = 2"
  1818. sqlId.JoinFormat(" and t.subarealevelpath like '%%,%v,%%'", r.USERID)
  1819. sqlId.Join(" order by t.userid")
  1820. return sqlId.String()
  1821. }
  1822. // GetDataEx 获取所属机构列表
  1823. func (r *QhjParentAreaList) GetDataEx() (interface{}, error) {
  1824. sData := make([]QhjParentAreaList, 0)
  1825. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1826. for i := range sData {
  1827. sData[i].calc()
  1828. }
  1829. return sData, err
  1830. }
  1831. // QhjAreaFinanceConfig 企业配置表
  1832. type QhjAreaFinanceConfig struct {
  1833. ADDITIONALRATIO float64 `json:"additionalratio" xorm:"ADDITIONALRATIO" form:"additionalratio"` // 追加款比例
  1834. ADVANCERATIO float64 `json:"advanceratio" xorm:"ADVANCERATIO" form:"advanceratio"` // 预付款比例
  1835. ALARMRATIO float64 `json:"alarmratio" xorm:"ALARMRATIO" form:"alarmratio"` // 告警比例
  1836. CONSUMPTIONDIRECTREWARD float64 `json:"consumptiondirectreward" xorm:"CONSUMPTIONDIRECTREWARD" form:"consumptiondirectreward"` // 消费直推奖励值
  1837. CONSUMPTIONINDIRECTREWARD float64 `json:"consumptionindirectreward" xorm:"CONSUMPTIONINDIRECTREWARD" form:"consumptionindirectreward"` // 消费间推奖励值
  1838. DAYINTERESTRATE float64 `json:"dayinterestrate" xorm:"DAYINTERESTRATE" form:"dayinterestrate"` // 日利率
  1839. PROMOTIONVALUE float64 `json:"promotionvalue" xorm:"PROMOTIONVALUE" form:"promotionvalue"` // 推广奖励值(固定)
  1840. CONSUMPTIONENABLED int32 `json:"consumptionenabled" xorm:"CONSUMPTIONENABLED" form:"consumptionenabled"` // 是否启用消费奖励 - 0:不启用 1:启用
  1841. CONSUMPTIONMODEL int32 `json:"consumptionmodel" xorm:"CONSUMPTIONMODEL" form:"consumptionmodel"` // 消费奖励方式 - 1:比率 2:固定
  1842. MODIFYSRC int32 `json:"modifysrc" xorm:"MODIFYSRC" form:"modifysrc"` // 审核来源 - 1:管理端 2:终端
  1843. SCORECONFIGVALUE1 int32 `json:"scoreconfigvalue1" xorm:"SCORECONFIGVALUE1" form:"scoreconfigvalue1"` // 提货积分配置1
  1844. SCORECONFIGVALUE2 int32 `json:"scoreconfigvalue2" xorm:"SCORECONFIGVALUE2" form:"scoreconfigvalue2"` // 提货积分配置2
  1845. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID" form:"modifierid"` // 修改人ID
  1846. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 机构用户ID其他做市关系,都设置为 1
  1847. CUSTOMERSERVICENUM string `json:"customerservicenum" xorm:"CUSTOMERSERVICENUM" form:"customerservicenum"` // 客服电话
  1848. DISABLECONSUMPTIONTIPS string `json:"disableconsumptiontips" xorm:"DISABLECONSUMPTIONTIPS" form:"disableconsumptiontips"` // 关闭消费奖励提示
  1849. MODIFYTIME string `json:"modifytime" xorm:"MODIFYTIME" form:"modifytime"` // 修改时间
  1850. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  1851. }
  1852. func (r *QhjAreaFinanceConfig) calc() {
  1853. }
  1854. func (r *QhjAreaFinanceConfig) buildSql() string {
  1855. var sqlId utils.SQLVal = "SELECT t.CUSTOMERSERVICENUM," +
  1856. " t.SCORECONFIGVALUE1," +
  1857. " t.SCORECONFIGVALUE2," +
  1858. " t.CONSUMPTIONENABLED," +
  1859. " t.PROMOTIONVALUE," +
  1860. " t.CONSUMPTIONMODEL," +
  1861. " t.CONSUMPTIONDIRECTREWARD," +
  1862. " t.CONSUMPTIONINDIRECTREWARD," +
  1863. " t.DISABLECONSUMPTIONTIPS," +
  1864. " t.USERID," +
  1865. " t.ADVANCERATIO," +
  1866. " t.ALARMRATIO," +
  1867. " t.ADDITIONALRATIO," +
  1868. " t.DAYINTERESTRATE," +
  1869. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  1870. " t.MODIFIERID," +
  1871. " t.MODIFYSRC," +
  1872. " u.accountname username" +
  1873. " FROM AREAFINANCECONFIG t" +
  1874. " LEFT JOIN USERACCOUNT u on t.userid=u.userid" +
  1875. " WHERE 1 = 1"
  1876. if r.USERID > 0 {
  1877. if r.USERID == 1 {
  1878. // =1 ,其他做市关系
  1879. sqlId.AndEx("t.userid", r.USERID, r.USERID > 0)
  1880. } else {
  1881. areaUserId := mtpcache.GetAreaUserId(r.USERID, 0)
  1882. sqlId.AndEx("t.userid", areaUserId, areaUserId > 0)
  1883. }
  1884. }
  1885. return sqlId.String()
  1886. }
  1887. // GetDataEx 获取企业配置表
  1888. func (r *QhjAreaFinanceConfig) GetDataEx() (interface{}, error) {
  1889. sData := make([]QhjAreaFinanceConfig, 0)
  1890. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1891. for i := range sData {
  1892. sData[i].calc()
  1893. }
  1894. return sData, err
  1895. }
  1896. // QhjMyTeamEx 我的团队(含层次结构)
  1897. type QhjMyTeamEx struct {
  1898. QhjMyTeam
  1899. SubList []QhjMyTeamEx
  1900. }
  1901. func (r *QhjMyTeamEx) addSub(lst []QhjMyTeam) {
  1902. for i := range lst {
  1903. if r.USERID == lst[i].REFEREEUSERID {
  1904. v := QhjMyTeamEx{QhjMyTeam: lst[i], SubList: make([]QhjMyTeamEx, 0)}
  1905. v.addSub(lst)
  1906. r.SubList = append(r.SubList, v)
  1907. }
  1908. }
  1909. }
  1910. // QhjMyTeam 我的团队
  1911. type QhjMyTeam struct {
  1912. LEVEL int32 `json:"-" xorm:"'LEVEL'"` // 层级
  1913. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1914. ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 用户名称
  1915. REFEREEUSERID int64 `json:"refereeuserid" xorm:"'REFEREEUSERID'"` // 推荐人id
  1916. REFERNUM string `json:"refernum" xorm:"'REFERNUM'"` // 推荐码
  1917. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  1918. ACCOUNTSTATUS int32 `json:"accountstatus" xorm:"'ACCOUNTSTATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:停用(注销) 7:注销(删除)
  1919. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  1920. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  1921. }
  1922. func (r *QhjMyTeam) calc() {
  1923. r.MOBILE = DecryptField(r.MOBILE)
  1924. }
  1925. func (r *QhjMyTeam) buildSql() string {
  1926. var sqlId utils.SQLVal = "select level," +
  1927. " t.userid," +
  1928. " t.accountname," +
  1929. " t.refereeuserid," +
  1930. " t.refernum," +
  1931. " to_char(t.createtime, 'yyyy-dd-mm hh24:mi:ss') createtime," +
  1932. " t.accountstatus," +
  1933. " ui.mobile," +
  1934. " ui.userinfotype" +
  1935. " from useraccount t" +
  1936. " left join userinfo ui" +
  1937. " on t.userid = ui.userid" +
  1938. " start with t.userid = %v" +
  1939. "connect by prior t.userid = t.refereeuserid" +
  1940. " and level <= 3" +
  1941. " order by level"
  1942. sqlId.FormatParam(r.USERID)
  1943. return sqlId.String()
  1944. }
  1945. // GetDataEx 获取我的团队
  1946. func (r *QhjMyTeam) GetDataEx() (interface{}, error) {
  1947. sData := make([]QhjMyTeam, 0)
  1948. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1949. for i := range sData {
  1950. sData[i].calc()
  1951. }
  1952. sDataEx := make([]QhjMyTeamEx, 0)
  1953. // 构建顶层
  1954. for i := range sData {
  1955. if sData[i].LEVEL == 1 {
  1956. v := QhjMyTeamEx{QhjMyTeam: sData[i], SubList: make([]QhjMyTeamEx, 0)}
  1957. sDataEx = append(sDataEx, v)
  1958. }
  1959. }
  1960. // 递归构建层级
  1961. for i := range sDataEx {
  1962. sDataEx[i].addSub(sData)
  1963. }
  1964. return sDataEx, err
  1965. }
  1966. // QhjTeamOrder 团队订单
  1967. type QhjTeamOrder struct {
  1968. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 方向 - 0:买 1:卖
  1969. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1970. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 账户ID[报价币种]
  1971. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  1972. TRADETIME string `json:"tradetime" xorm:"TRADETIME" form:"tradetime"` // 成交时间
  1973. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格
  1974. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY" form:"tradeqty"` // 成交数量
  1975. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT" form:"tradeamount"` // 成交金额[账户币种,用于所有权]
  1976. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1977. ACCOUNTNAME string `json:"accountname" xorm:"ACCOUNTNAME" form:"accountname"` // 账户名称
  1978. REFEREEUSERID int64 `json:"refereeuserid" xorm:"REFEREEUSERID" form:"refereeuserid"` // 推荐人ID
  1979. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  1980. GOODSCODE string `json:"goodscode" xorm:"GOODSCODE" form:"goodscode"` // 商品代码(内部)
  1981. GOODSNAME string `json:"goodsname" xorm:"GOODSNAME" form:"goodsname"` // 商品名称
  1982. GOODUNITID int32 `json:"goodunitid" xorm:"GOODUNITID" form:"goodunitid"` // 报价单位ID
  1983. AGREEUNIT float64 `json:"agreeunit" xorm:"AGREEUNIT" form:"agreeunit"` // 合约乘数
  1984. DECIMALPLACE int32 `json:"decimalplace" xorm:"DECIMALPLACE" form:"decimalplace"` // 报价小数位
  1985. QTYDECIMALPLACE int32 `json:"qtydecimalplace" xorm:"QTYDECIMALPLACE" form:"qtydecimalplace"` // 成交量小数位
  1986. MARKETNAME string `json:"marketname" xorm:"MARKETNAME" form:"marketname"` // 市场名称
  1987. TRADEMODE int32 `json:"trademode" xorm:"TRADEMODE" form:"trademode"` // 交易模式 - 10:做市 13:竞价 15:通道交易 16:挂牌点选 17:仓单贸易 18:期权 19:竞拍-降价式 20:竞拍-竞价式 21:竞拍-大宗式 22:受托竞价
  1988. ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位名称
  1989. PageEx `xorm:"extends"` // 页码信息
  1990. FilterName string `json:"-" form:"filtername"` // 名称(模糊匹配)
  1991. }
  1992. func (r *QhjTeamOrder) calc() {
  1993. }
  1994. func (r *QhjTeamOrder) buildSql() string {
  1995. var sqlId utils.SQLVal = "select t.accountid," +
  1996. " t.goodsid," +
  1997. " t.tradedate," +
  1998. " t.tradeprice," +
  1999. " t.tradeqty / power(10, nvl(g.qtydecimalplace, 0)) tradeqty," +
  2000. " t.tradeamount," +
  2001. " to_char(t.tradetime, 'yyyy-mm-dd hh24:mi:ss') tradetime," +
  2002. " t.buyorsell," +
  2003. " u.userid," +
  2004. " u.accountname," +
  2005. " u.refereeuserid," +
  2006. " g.goodscode," +
  2007. " g.goodsname," +
  2008. " g.marketid," +
  2009. " g.goodunitid," +
  2010. " g.qtydecimalplace," +
  2011. " g.decimalplace," +
  2012. " g.agreeunit," +
  2013. " m.marketname," +
  2014. " m.trademode," +
  2015. " e.enumdicname" +
  2016. " from %v t" +
  2017. " inner join taaccount ta" +
  2018. " on t.accountid = ta.accountid" +
  2019. " inner join useraccount u" +
  2020. " on ta.relateduserid = u.userid" +
  2021. " left join goods g" +
  2022. " on t.goodsid = g.goodsid" +
  2023. " left join market m" +
  2024. " on g.marketid = m.marketid" +
  2025. " left join enumdicitem e" +
  2026. " on g.goodunitid = e.enumitemname" +
  2027. " and e.enumdiccode = 'goodsunit'" +
  2028. " where 1 = 1"
  2029. sqlId.Join(" and t.tradetype <> 28") // tradetype 28-提货成交, 过滤掉
  2030. sqlId.AndEx("u.refereeuserid", r.USERID, r.USERID > 0)
  2031. sqlId.AndEx("m.trademode", r.TRADEMODE, r.TRADEMODE > 0)
  2032. sqlCur := fmt.Sprintf(sqlId.String(), "trade_tradedetail")
  2033. sqlHis := fmt.Sprintf(sqlId.String(), "his_trade_tradedetail")
  2034. if len(r.FilterName) > 0 {
  2035. sqlCur += fmt.Sprintf(" and u.accountname like '%%%v%%'", r.FilterName)
  2036. sqlHis += fmt.Sprintf(" and u.accountname like '%%%v%%'", r.FilterName)
  2037. }
  2038. sqlHis += " and t.isvaliddata=1"
  2039. strSql := sqlCur + " union all " + sqlHis
  2040. strSql += " order by tradetime desc"
  2041. sqlId = utils.SQLVal(strSql)
  2042. sqlId.Page(r.Page, r.PageSize)
  2043. return sqlId.String()
  2044. }
  2045. // GetDataEx 获取团队订单
  2046. func (r *QhjTeamOrder) GetDataEx() (interface{}, error) {
  2047. sData := make([]QhjTeamOrder, 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. // GetDataByPage 获取团队订单
  2055. func (r *QhjTeamOrder) GetDataByPage() (interface{}, error, int, int, int) {
  2056. sData := make([]QhjTeamOrder, 0)
  2057. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2058. total := 0
  2059. for i := range sData {
  2060. sData[i].calc()
  2061. total = sData[i].Total
  2062. }
  2063. return sData, err, r.Page, r.PageSize, total
  2064. }
  2065. // QhjBrokerRewardLog 我的奖励
  2066. type QhjBrokerRewardLog struct {
  2067. LOGID string `json:"logid" xorm:"LOGID" form:"logid"` // 奖励流水ID(912+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  2068. REWARDTYPE int32 `json:"rewardtype" xorm:"REWARDTYPE" form:"rewardtype"` // 奖励类型 - 1:推广 2:消费1级 3:消费2级
  2069. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 经纪人用户ID
  2070. REWARDAMOUNT float64 `json:"rewardamount" xorm:"REWARDAMOUNT" form:"rewardamount"` // 奖励金额
  2071. SRCUSERID string `json:"srcuserid" xorm:"SRCUSERID" form:"srcuserid"` // 来源用户ID(推广账户)
  2072. SRCTRADEID string `json:"srctradeid" xorm:"SRCTRADEID" form:"srctradeid"` // 来源成交单ID [消费奖励] - 排除提货成交
  2073. SRCGOODSID string `json:"srcgoodsid" xorm:"SRCGOODSID" form:"srcgoodsid"` // 来源商品ID [消费奖励]
  2074. SRCAMOUNT float64 `json:"srcamount" xorm:"SRCAMOUNT" form:"srcamount"` // 成交金额 [消费奖励] (金额)
  2075. SRCTIME string `json:"srctime" xorm:"SRCTIME" form:"srctime"` // 来源时间 (成交时间) [消费奖励]
  2076. REWARDMODEL int32 `json:"rewardmodel" xorm:"REWARDMODEL" form:"rewardmodel"` // 消费奖励方式 - 1:比率 2:固定
  2077. REWARDVALUE float64 `json:"rewardvalue" xorm:"REWARDVALUE" form:"rewardvalue"` // 配置奖励值
  2078. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2079. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  2080. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间(时间)
  2081. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 资金账号ID
  2082. MMUSERID string `json:"mmuserid" xorm:"MMUSERID" form:"mmuserid"` // 做市商用户ID
  2083. MMACCOUNTID string `json:"mmaccountid" xorm:"MMACCOUNTID" form:"mmaccountid"` // 做市商资金账号ID
  2084. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS" form:"handlestatus"` // 处理状态
  2085. SRCUSERNAME string `json:"srcusername" xorm:"'SRCUSERNAME'"` // 推广账户名称
  2086. BeginDate string `json:"-" form:"begindate"` // 开始交易日
  2087. EndDate string `json:"-" form:"enddate"` // 结束交易日
  2088. }
  2089. func (r *QhjBrokerRewardLog) calc() {
  2090. }
  2091. func (r *QhjBrokerRewardLog) buildSql() string {
  2092. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  2093. " t.REWARDTYPE," +
  2094. " t.USERID," +
  2095. " t.REWARDAMOUNT," +
  2096. " t.SRCUSERID," +
  2097. " to_char(t.SRCTRADEID) SRCTRADEID," +
  2098. " t.SRCGOODSID," +
  2099. " t.SRCAMOUNT," +
  2100. " to_char(t.SRCTIME, 'yyyy-mm-dd hh24:mi:ss') SRCTIME," +
  2101. " t.REWARDMODEL," +
  2102. " t.REWARDVALUE," +
  2103. " t.TRADEDATE," +
  2104. " t.MARKETID," +
  2105. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  2106. " t.ACCOUNTID," +
  2107. " t.MMUSERID," +
  2108. " t.MMACCOUNTID," +
  2109. " t.HANDLESTATUS," +
  2110. " u.accountname SRCUSERNAME" +
  2111. " FROM BROKERREWARDLOG t" +
  2112. " LEFT JOIN USERACCOUNT u on t.srcuserid=u.userid" +
  2113. " WHERE 1 = 1"
  2114. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  2115. if r.BeginDate != "" {
  2116. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') >= '%v'", r.BeginDate)
  2117. }
  2118. if r.EndDate != "" {
  2119. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') <= '%v'", r.EndDate)
  2120. }
  2121. return sqlId.String()
  2122. }
  2123. // GetDataEx 获取我的奖励
  2124. func (r *QhjBrokerRewardLog) GetDataEx() (interface{}, error) {
  2125. sData := make([]QhjBrokerRewardLog, 0)
  2126. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2127. for i := range sData {
  2128. sData[i].calc()
  2129. }
  2130. return sData, err
  2131. }
  2132. // QhjScoreLog 积分流水
  2133. type QhjScoreLog struct {
  2134. LOGID string `json:"logid" xorm:"LOGID" form:"logid"` // 流水ID(211+Unix秒时间戳(10位)+2位(MarketServiceID)+xxxx)
  2135. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2136. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  2137. SCORETYPE int32 `json:"scoretype" xorm:"SCORETYPE" form:"scoretype"` // 积分类型 - 1:提货积分
  2138. SCOREVALUE float64 `json:"scorevalue" xorm:"SCOREVALUE" form:"scorevalue"` // 积分
  2139. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID" form:"relatedorderid"` // 关联单号(ScoreType=1为Trade_GoodsPickup)
  2140. RELATEDAMOUNT float64 `json:"relatedamount" xorm:"RELATEDAMOUNT" form:"relatedamount"` // 关联金额
  2141. SCORECONFIGVALUE1 int32 `json:"scoreconfigvalue1" xorm:"SCORECONFIGVALUE1" form:"scoreconfigvalue1"` // 积分配置1
  2142. SCORECONFIGVALUE2 int32 `json:"scoreconfigvalue2" xorm:"SCORECONFIGVALUE2" form:"scoreconfigvalue2"` // 积分配置1
  2143. GOODSID int64 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 商品ID
  2144. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 账户ID
  2145. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  2146. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间(时间)
  2147. HASUPLOADED int32 `json:"hasuploaded" xorm:"HASUPLOADED" form:"hasuploaded"` // 是否已同步(千海金) 0:未同步 1;已同步
  2148. UPLOADEDTIME string `json:"uploadedtime" xorm:"UPLOADEDTIME" form:"uploadedtime"` // 同步时间
  2149. BeginDate string `json:"-" form:"begindate"` // 开始交易日
  2150. EndDate string `json:"-" form:"enddate"` // 结束交易日
  2151. LastNum int `json:"-" form:"lastnum"` // 最近多少条
  2152. }
  2153. func (r *QhjScoreLog) calc() {
  2154. }
  2155. func (r *QhjScoreLog) buildSql() string {
  2156. var sqlId utils.SQLVal = "SELECT t.LOGID," +
  2157. " t.TRADEDATE," +
  2158. " t.USERID," +
  2159. " t.SCORETYPE," +
  2160. " t.SCOREVALUE," +
  2161. " to_char(t.RELATEDORDERID) RELATEDORDERID," +
  2162. " t.RELATEDAMOUNT," +
  2163. " t.SCORECONFIGVALUE1," +
  2164. " t.SCORECONFIGVALUE2," +
  2165. " t.GOODSID," +
  2166. " t.ACCOUNTID," +
  2167. " t.MARKETID," +
  2168. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  2169. " t.HASUPLOADED," +
  2170. " to_char(t.UPLOADEDTIME, 'yyyy-mm-dd hh24:mi:ss') UPLOADEDTIME" +
  2171. " FROM QHJ_SCORELOG t" +
  2172. " WHERE 1 = 1"
  2173. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  2174. if r.BeginDate != "" {
  2175. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') >= '%v'", r.BeginDate)
  2176. }
  2177. if r.EndDate != "" {
  2178. sqlId.JoinFormat(" and to_char(t.CREATETIME, 'yyyymmdd') <= '%v'", r.EndDate)
  2179. }
  2180. sqlId.Join(" order by t.CREATETIME desc")
  2181. if r.LastNum > 0 {
  2182. sqlId.Page(1, r.LastNum)
  2183. }
  2184. return sqlId.String()
  2185. }
  2186. // GetDataEx 获取积分流水
  2187. func (r *QhjScoreLog) GetDataEx() (interface{}, error) {
  2188. sData := make([]QhjScoreLog, 0)
  2189. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2190. for i := range sData {
  2191. sData[i].calc()
  2192. }
  2193. return sData, err
  2194. }
  2195. // QhjContractRemainAmount 融资额
  2196. type QhjContractRemainAmount struct {
  2197. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账号
  2198. REMAINACOUNT float64 `json:"remainacount" xorm:"'REMAINACOUNT'"` // 融资额(合同剩余金额)
  2199. FilterAccId string `json:"-"` // 资金账号列表
  2200. }
  2201. func (r *QhjContractRemainAmount) calc() {
  2202. }
  2203. func (r *QhjContractRemainAmount) buildSql() string {
  2204. var sqlId utils.SQLVal = "select t.borroweraccountid accountid, sum(s.remainamount) remainamount" +
  2205. " from scf_contract t" +
  2206. " inner join scf_contractinfo s" +
  2207. " on t.scfcontractid = s.scfcontractid" +
  2208. " where 1 = 1 and t.scfcontracttype=5"
  2209. sqlId.JoinEx(r.FilterAccId != "", fmt.Sprintf(" and t.borroweraccountid in (%v)", r.FilterAccId))
  2210. sqlId.Join(" group by t.borroweraccountid")
  2211. return sqlId.String()
  2212. }
  2213. // GetDataEx 获取融资额
  2214. func (r *QhjContractRemainAmount) GetData() ([]QhjContractRemainAmount, error) {
  2215. sData := make([]QhjContractRemainAmount, 0)
  2216. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2217. for i := range sData {
  2218. sData[i].calc()
  2219. }
  2220. return sData, err
  2221. }
  2222. // QhjBrokerApply 经济人申请表
  2223. type QhjBrokerApply struct {
  2224. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC" form:"applysrc"` // 申请来源 - 1:管理端 2:终端
  2225. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS" form:"applystatus"` // 申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
  2226. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC" form:"auditsrc"` // 审核来源 - 1:管理端 2:终端
  2227. APPLICANTID int64 `json:"applicantid" xorm:"APPLICANTID" form:"applicantid"` // 申请人
  2228. AUDITORID int64 `json:"auditorid" xorm:"AUDITORID" form:"auditorid"` // 审核人
  2229. BROKERAPPLYID int64 `json:"brokerapplyid" xorm:"BROKERAPPLYID" form:"brokerapplyid"` // 申请ID(SEQ_BROKERAPPLY)
  2230. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 申请人用户ID
  2231. APPLYTIME string `json:"applytime" xorm:"APPLYTIME" form:"applytime"` // 申请时间
  2232. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK" form:"auditremark"` // 审核备注
  2233. AUDITTIME string `json:"audittime" xorm:"AUDITTIME" form:"audittime"` // 审核时间
  2234. AUDITTRADEDATE string `json:"audittradedate" xorm:"AUDITTRADEDATE" form:"audittradedate"` // 审核交易日(yyyyMMdd)
  2235. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"CARDBACKPHOTOURL" form:"cardbackphotourl"` // 证件背面图片地址
  2236. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"CARDFRONTPHOTOURL" form:"cardfrontphotourl"` // 证件正面图片地址
  2237. CARDNUM string `json:"cardnum" xorm:"CARDNUM" form:"cardnum"` // 证件号码(加密存储) 注:数据库没存证件类型字段,产品说类型固定为身份证
  2238. CUSTOMERNAME string `json:"customername" xorm:"CUSTOMERNAME" form:"customername"` // 姓名
  2239. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 备注
  2240. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2241. BrokerExInfo `xorm:"extends"`
  2242. FilterStatus string `json:"-" form:"filterstatus"` // 筛选条件
  2243. }
  2244. func (r *QhjBrokerApply) calc() {
  2245. r.MOBILE = DecryptField(r.MOBILE)
  2246. r.CARDNUM = DecryptField(r.CARDNUM)
  2247. if r.LOGINCODE == "" {
  2248. r.LOGINCODE = r.MOBILE
  2249. }
  2250. }
  2251. func (r *QhjBrokerApply) buildSql() string {
  2252. var sqlId utils.SQLVal = "with k as (select t.userid, wm_concat(t.logincode) logincode from loginaccount t group by t.userid)" +
  2253. "SELECT t.CUSTOMERNAME," +
  2254. " t.CARDNUM," +
  2255. " t.CARDFRONTPHOTOURL," +
  2256. " t.CARDBACKPHOTOURL," +
  2257. " t.BROKERAPPLYID," +
  2258. " t.USERID," +
  2259. " t.TRADEDATE," +
  2260. " t.APPLYSRC," +
  2261. " t.APPLICANTID," +
  2262. " t.REMARK," +
  2263. " to_char(t.APPLYTIME, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME," +
  2264. " t.APPLYSTATUS," +
  2265. " t.AUDITTRADEDATE," +
  2266. " t.AUDITORID," +
  2267. " t.AUDITSRC," +
  2268. " to_char(t.AUDITTIME, 'yyyy-mm-dd hh24:mi:ss') AUDITTIME," +
  2269. " t.AUDITREMARK," +
  2270. " u.accountname USERNAME," +
  2271. " u.parentuserid," +
  2272. " u.refereeuserid," +
  2273. " u.refernum," +
  2274. " ui.userinfotype," +
  2275. " ui.mobile," +
  2276. " u2.accountname PARENTUSERNAME," +
  2277. " k.logincode," +
  2278. " u.subarealevelpath" +
  2279. " FROM BROKERAPPLY t" +
  2280. " INNER JOIN USERACCOUNT u on t.userid=u.userid" +
  2281. " INNER JOIN USERINFO ui on t.userid=ui.userid" +
  2282. " LEFT JOIN k on t.userid=k.userid" +
  2283. " LEFT JOIN USERACCOUNT u2 on u.parentuserid=u2.userid" +
  2284. " WHERE 1 = 1"
  2285. sqlId.And("u.USERID", r.USERID)
  2286. sqlId.JoinEx(r.FilterStatus != "", fmt.Sprintf(" and t.APPLYSTATUS in(%v)", r.FilterStatus))
  2287. sqlId.Join(" order by t.APPLYTIME desc")
  2288. sqlId.Page(1, 1) // 按申请时间倒序后取最近一条
  2289. return sqlId.String()
  2290. }
  2291. // GetData 获取经济人申请表
  2292. func (r *QhjBrokerApply) GetData() ([]QhjBrokerApply, error) {
  2293. sData := make([]QhjBrokerApply, 0)
  2294. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2295. for i := range sData {
  2296. sData[i].calc()
  2297. }
  2298. return sData, err
  2299. }
  2300. // GetDataEx 获取经济人申请表
  2301. func (r *QhjBrokerApply) GetDataEx() (interface{}, error) {
  2302. sData := make([]QhjBrokerApply, 0)
  2303. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2304. for i := range sData {
  2305. sData[i].calc()
  2306. }
  2307. return sData, err
  2308. }
  2309. // QhjBrokerInfo 经纪人信息
  2310. type QhjBrokerInfo struct {
  2311. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  2312. REFERNUM string `json:"refernum" xorm:"'REFERNUM'"` // 推荐码
  2313. CANRECOMMEND int32 `json:"canrecommend" xorm:"'CANRECOMMEND'"` // 是否经纪人 0-不是 1-是
  2314. USERINFOTYPE int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户类型 1-个人 2-企业
  2315. }
  2316. func (r *QhjBrokerInfo) buildSql() string {
  2317. var sqlId utils.SQLVal = "select t.userid, t.refernum, t.canrecommend, ui.userinfotype" +
  2318. " from useraccount t" +
  2319. " inner join userinfo ui" +
  2320. " on t.userid = ui.userid" +
  2321. " where 1 = 1"
  2322. sqlId.And("t.userid", r.USERID)
  2323. return sqlId.String()
  2324. }
  2325. // GetData 获取经济人信息
  2326. func (r *QhjBrokerInfo) GetData() ([]QhjBrokerInfo, error) {
  2327. sData := make([]QhjBrokerInfo, 0)
  2328. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2329. return sData, err
  2330. }
  2331. // QhjBrokerApplyEx 经纪人信息和申请纪录
  2332. type QhjBrokerApplyEx struct {
  2333. QhjBrokerInfo
  2334. APPLYLIST []QhjBrokerApply `json:"applylist"` // 经纪人申请记录(只返回最新一条)
  2335. }
  2336. // GetDataEx 获取经纪人信息和申请纪录
  2337. func (r *QhjBrokerApplyEx) GetDataEx() (interface{}, error) {
  2338. sData := make([]QhjBrokerApplyEx, 0)
  2339. if sInfo, err := r.QhjBrokerInfo.GetData(); err == nil && len(sInfo) > 0 {
  2340. vInfo := sInfo[0]
  2341. val := QhjBrokerApplyEx{QhjBrokerInfo: vInfo, APPLYLIST: make([]QhjBrokerApply, 0)}
  2342. m := QhjBrokerApply{USERID: r.USERID}
  2343. if sApply, err := m.GetData(); err == nil {
  2344. val.APPLYLIST = append(val.APPLYLIST, sApply...)
  2345. }
  2346. sData = append(sData, val)
  2347. }
  2348. return sData, nil
  2349. }