account.go 83 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568
  1. package models
  2. import (
  3. "encoding/hex"
  4. "errors"
  5. "fmt"
  6. "mtp2_if/db"
  7. "mtp2_if/global/e"
  8. "mtp2_if/utils"
  9. "strconv"
  10. "time"
  11. )
  12. // Loginaccount 登录账户表
  13. type Loginaccount struct {
  14. Loginid int64 `json:"loginid" xorm:"LOGINID" binding:"required"` // 登陆账号
  15. Userid int64 `json:"userid" xorm:"USERID"` // 用户ID
  16. Loginfailnum int32 `json:"loginfailnum" xorm:"LOGINFAILNUM"` // 连续登录失败次数(登录成功时清零)
  17. Password string `json:"-" xorm:"PASSWORD"` // 登陆密码
  18. Loginusertype int32 `json:"loginusertype" xorm:"LOGINUSERTYPE"` // 登录账号类型 - 1:投资者 2:机构交易员
  19. Loginstatus int32 `json:"loginstatus" xorm:"LOGINSTATUS"` // 登录账号状态 1:正常 2:冻结(停用) 3:无效(注销)
  20. Lastlogintime time.Time `json:"lastlogintime" xorm:"LASTLOGINTIME"` // 最新登录时间
  21. Lastloginmode int32 `json:"lastloginmode" xorm:"LASTLOGINMODE"` // 最新登录方式(客户端类型) - 0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
  22. Lastloginip string `json:"-" xorm:"LASTLOGINIP"` // 最新登录地址
  23. Loginport int32 `json:"-" xorm:"LOGINPORT"` // 最新登录端口
  24. Lastloginremark string `json:"-" xorm:"LASTLOGINREMARK"` // 最新登录描述
  25. Modifytime time.Time `json:"-" xorm:"MODIFYTIME"` // 修改时间
  26. Modifierid int64 `json:"-" xorm:"MODIFIERID"` // 修改人
  27. Pwdwrongcount int32 `json:"pwdwrongcount" xorm:"PWDWRONGCOUNT"` // 密码错误次数
  28. Unfreezetime time.Time `json:"unfreezetime" xorm:"UNFREEZETIME"` // 账户解冻时间
  29. Haslogined int32 `json:"haslogined" xorm:"HASLOGINED"` // 是否已登录 - 0:未登录 1:已登录
  30. Hasupdatedpwd int32 `json:"hasupdatedpwd" xorm:"HASUPDATEDPWD"` // 是否已更改密码 - 0:未修改 1:已修改
  31. Logincode string `json:"logincode" xorm:"LOGINCODE"` // 登录代码
  32. Canoutin int32 `json:"canoutin" xorm:"CANOUTIN"` // 是否可出入金 - 0:不可 1:可
  33. Clientroleid int32 `json:"-" xorm:"CLIENTROLEID"` // 终端角色ID
  34. Taaccountrighttype int32 `json:"taaccountrighttype" xorm:"TAACCOUNTRIGHTTYPE"` // 资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限
  35. Mobile string `json:"mobile" xorm:"MOBILE"` // 手机号码(加密存储)
  36. Accountname string `json:"-" xorm:"ACCOUNTNAME"` // 账户名称
  37. Modifysrc int32 `json:"-" xorm:"MODIFYSRC"` // 审核来源 - 1:管理端 2:终端
  38. Relateduserid int64 `json:"relateduserid" xorm:"RELATEDUSERID"` // 关联用户ID(机构)
  39. }
  40. // TableName is LOGINACCOUNT
  41. func (Loginaccount) TableName() string {
  42. return "LOGINACCOUNT"
  43. }
  44. // Taaccount 资金账户表 - 导历史
  45. type Taaccount struct {
  46. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账户ID
  47. Userid int64 `json:"userid" xorm:"'USERID'" binding:"required"` // 用户ID
  48. Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 货币ID
  49. Changeflag int32 `json:"changeflag" xorm:"'CHANGEFLAG'"` // 变动标志(当前账户资金有任何变动更新为1系统结算时更新0;供清算时使用) 0:无变动 1:有变动
  50. // Password string `json:"password" xorm:"'PASSWORD'"` // 资金密码
  51. Password string `json:"-" xorm:"'PASSWORD'"` // 资金密码
  52. Tradestatus int32 `json:"tradestatus" xorm:"'TRADESTATUS'"` // 交易状态 - 1:正常 2:受限 3:冻结 4:禁止建仓(人工受限) 5:禁止交易(人工冻结) 6:待激活 7:已注销
  53. Signstatus int32 `json:"signstatus" xorm:"'SIGNSTATUS'"` // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中
  54. Ismain int32 `json:"ismain" xorm:"'ISMAIN'"` // 是否母账号 0:不是母账户 1:是母账户
  55. Parentaccountid int64 `json:"parentaccountid" xorm:"'PARENTACCOUNTID'"` // 所属根账号
  56. Relateduserid int64 `json:"relateduserid" xorm:"'RELATEDUSERID'"` // 关联用户
  57. Relatedaccountstatus int32 `json:"relatedaccountstatus" xorm:"'RELATEDACCOUNTSTATUS'"` // 关联用户交易权限状态 - 1:正常(可交易) 2:受限(可平仓,不可建仓) 3:冻结(不可交易)
  58. Taaccounttype int32 `json:"taaccounttype" xorm:"'TAACCOUNTTYPE'"` // 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
  59. Isreckonaccount int32 `json:"isreckonaccount" xorm:"'ISRECKONACCOUNT'"` // 是否机构分润账号 0:不是 1:是
  60. Ismarketaccount int32 `json:"ismarketaccount" xorm:"'ISMARKETACCOUNT'"` // 是否机构接单账号 0:不是 1:是
  61. Balance float64 `json:"balance" xorm:"'BALANCE'"` // 期初余额
  62. Orifreezemargin float64 `json:"orifreezemargin" xorm:"'ORIFREEZEMARGIN'"` // 期初冻结保证金
  63. Oriusedmargin float64 `json:"oriusedmargin" xorm:"'ORIUSEDMARGIN'"` // 期初占用保证金
  64. Oriotherfreezemargin float64 `json:"oriotherfreezemargin" xorm:"'ORIOTHERFREEZEMARGIN'"` // 期初其他冻结保证金(出金冻结资金 交割买方冻结 申购冻结 全款买入 商城买入)
  65. Orifreezecharge float64 `json:"orifreezecharge" xorm:"'ORIFREEZECHARGE'"` // 期初手续费冻结
  66. Orimortgagecredit float64 `json:"orimortgagecredit" xorm:"'ORIMORTGAGECREDIT'"` // 期初授信金额
  67. Oriothercredit float64 `json:"oriothercredit" xorm:"'ORIOTHERCREDIT'"` // 期初其它授信金额
  68. Orioutamountfreeze float64 `json:"orioutamountfreeze" xorm:"'ORIOUTAMOUNTFREEZE'"` // 期初出金冻结
  69. Currentbalance float64 `json:"currentbalance" xorm:"'CURRENTBALANCE'"` // 期末余额
  70. Freezemargin float64 `json:"freezemargin" xorm:"'FREEZEMARGIN'"` // 冻结保证金
  71. Usedmargin float64 `json:"usedmargin" xorm:"'USEDMARGIN'"` // 占用保证金
  72. Otherfreezemargin float64 `json:"otherfreezemargin" xorm:"'OTHERFREEZEMARGIN'"` // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
  73. Freezecharge float64 `json:"freezecharge" xorm:"'FREEZECHARGE'"` // 手续费冻结
  74. Mortgagecredit float64 `json:"mortgagecredit" xorm:"'MORTGAGECREDIT'"` // 授信金额
  75. Othercredit float64 `json:"othercredit" xorm:"'OTHERCREDIT'"` // 其它授信金额
  76. Outamountfreeze float64 `json:"outamountfreeze" xorm:"'OUTAMOUNTFREEZE'"` // 出金冻结
  77. Inamount float64 `json:"inamount" xorm:"'INAMOUNT'"` // 今日入金金额(包括三方入金)
  78. Outamount float64 `json:"outamount" xorm:"'OUTAMOUNT'"` // 今日出金金额(包括三方出金)
  79. Paycharge float64 `json:"paycharge" xorm:"'PAYCHARGE'"` // 今日手续费支出
  80. Closepl float64 `json:"closepl" xorm:"'CLOSEPL'"` // 今日平仓盈亏
  81. Creditincrease float64 `json:"creditincrease" xorm:"'CREDITINCREASE'"` // 今日授信增加
  82. Creditdecrease float64 `json:"creditdecrease" xorm:"'CREDITDECREASE'"` // 今日授信减少
  83. Othercreditincrease float64 `json:"othercreditincrease" xorm:"'OTHERCREDITINCREASE'"` // 今日其它授信增加
  84. Othercreditdecrease float64 `json:"othercreditdecrease" xorm:"'OTHERCREDITDECREASE'"` // 今日其它授信减少
  85. Transferamount float64 `json:"transferamount" xorm:"'TRANSFERAMOUNT'"` // 今日划转金额(母子账号资金划转,从划入账号为正,从账号划出为负)
  86. Otherpay float64 `json:"otherpay" xorm:"'OTHERPAY'"` // 其他支出(交割付款 申购付款 全款买入 商城买入 卖家退货)
  87. Otherincome float64 `json:"otherincome" xorm:"'OTHERINCOME'"` // 其他收入(交割收款 申购收款 全款卖出 商城卖出 买家退货 会员手续费收入)
  88. Outthreshold float64 `json:"outthreshold" xorm:"'OUTTHRESHOLD'"` // 出金阈值
  89. Tradestatuschangetime time.Time `json:"tradestatuschangetime" xorm:"'TRADESTATUSCHANGETIME'"` // 激活时间
  90. Changetime time.Time `json:"changetime" xorm:"'CHANGETIME'"` // 账户状态变更时间
  91. Thirdinamount float64 `json:"thirdinamount" xorm:"'THIRDINAMOUNT'"` // 今日三方入金
  92. Thirdoutamount float64 `json:"thirdoutamount" xorm:"'THIRDOUTAMOUNT'"` // 今日三方出金
  93. Capitalbalance float64 `json:"capitalbalance" xorm:"'CAPITALBALANCE'"` // 本金余额[外部子账户实际出入金余额]
  94. Fromaccountid int64 `json:"fromaccountid" xorm:"'FROMACCOUNTID'"` // 所属上级账户
  95. Sublevelpath string `json:"sublevelpath" xorm:"'SUBLEVELPATH'"` // 账号层级路径(逗号分隔,首尾加逗号)
  96. Serivcegroup int64 `json:"serivcegroup" xorm:"'SERIVCEGROUP'"` // 服务分组
  97. Accountname string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 账户名称
  98. Accountflag int32 `json:"accountflag" xorm:"'ACCOUNTFLAG'"` // 账户标识 - 0\1 (默认为0, 当上级账户与本账户的关联用户均为自己时更新为1)
  99. REMAINAMOUNT float64 `json:"remainamount" xorm:"-"` // 融资额(从融资合同中统计)
  100. CURAMOUNT float64 `json:"curamount" xorm:"-"` // 总市值(从持仓中统计)
  101. }
  102. // TableName is TAACCOUNT
  103. func (Taaccount) TableName() string {
  104. return "TAACCOUNT"
  105. }
  106. // Hedgeouttaaccount 对冲外部资金账户表 - 导历史
  107. type Hedgeouttaaccount struct {
  108. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账号[外部母账户]
  109. Hedgeaccountcode string `json:"hedgeaccountcode" xorm:"'HEDGEACCOUNTCODE'"` // 对冲账号
  110. Tradedate string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
  111. Prebalance float64 `json:"prebalance" xorm:"'PREBALANCE'"` // 期初余额
  112. Balance float64 `json:"balance" xorm:"'BALANCE'"` // 期末余额
  113. Usedmargin float64 `json:"usedmargin" xorm:"'USEDMARGIN'"` // 占用保证金
  114. Freezemargin float64 `json:"freezemargin" xorm:"'FREEZEMARGIN'"` // 冻结保证金
  115. Freezecharge float64 `json:"freezecharge" xorm:"'FREEZECHARGE'"` // 手续费冻结
  116. Otherfreezemargin float64 `json:"otherfreezemargin" xorm:"'OTHERFREEZEMARGIN'"` // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
  117. Inamount float64 `json:"inamount" xorm:"'INAMOUNT'"` // 今日入金金额(包括三方入金)
  118. Outamount float64 `json:"outamount" xorm:"'OUTAMOUNT'"` // 今日出金金额(包括三方出金)
  119. Paycharge float64 `json:"paycharge" xorm:"'PAYCHARGE'"` // 今日手续费支出
  120. Closepl float64 `json:"closepl" xorm:"'CLOSEPL'"` // 今日平仓盈亏
  121. Positionprofit float64 `json:"positionprofit" xorm:"'POSITIONPROFIT'"` // 结算盈亏
  122. }
  123. // TableName is HEDGE_OUTTAACCOUNT
  124. func (Hedgeouttaaccount) TableName() string {
  125. return "HEDGE_OUTTAACCOUNT"
  126. }
  127. // Logintaaccount 登录账户资金权限表 - 自营会员
  128. type Logintaaccount struct {
  129. Loginid int64 `json:"loginid" xorm:"'LOGINID'" binding:"required"` // 登录账号ID
  130. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
  131. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  132. Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人
  133. }
  134. // TableName is LOGINTAACCOUNT
  135. func (Logintaaccount) TableName() string {
  136. return "LOGINTAACCOUNT"
  137. }
  138. // Arearolemarket 机构角色市场权限表
  139. type Arearolemarket struct {
  140. Areauserid int64 `json:"areauserid" xorm:"'AREAUSERID'" binding:"required"` // 机构用户ID
  141. Roletype int32 `json:"roletype" xorm:"'ROLETYPE'" binding:"required"` // 角色类型 - 6:自营会员 7:经纪会员
  142. Marketid int32 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 市场ID
  143. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  144. Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人ID
  145. Spotrighttype int32 `json:"spotrighttype" xorm:"'SPOTRIGHTTYPE'"` // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
  146. Buyspotrighttype int32 `json:"buyspotrighttype" xorm:"'BUYSPOTRIGHTTYPE'"` // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
  147. }
  148. // TableName is AREAROLEMARKET
  149. func (Arearolemarket) TableName() string {
  150. return "AREAROLEMARKET"
  151. }
  152. // Taaccountmarket 资金账号市场权限表
  153. type Taaccountmarket struct {
  154. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
  155. Marketid int32 `json:"marketid" xorm:"'MARKETID'" binding:"required"` // 市场ID
  156. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  157. Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人
  158. Spotrighttype int32 `json:"spotrighttype" xorm:"'SPOTRIGHTTYPE'"` // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
  159. Buyspotrighttype int32 `json:"buyspotrighttype" xorm:"'BUYSPOTRIGHTTYPE'"` // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
  160. }
  161. // TableName is TAACCOUNTMARKET
  162. func (Taaccountmarket) TableName() string {
  163. return "TAACCOUNTMARKET"
  164. }
  165. // Useraccount 用户表
  166. type Useraccount struct {
  167. Userid int64 `json:"userid" xorm:"USERID" binding:"required"` // 用户ID
  168. Usertype int32 `json:"usertype" xorm:"USERTYPE"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
  169. Modifystatus int32 `json:"modifystatus" xorm:"MODIFYSTATUS"` // 变更状态 1 未变更 2 变更中 3 变更待审核 4 变更待复核(投资者)
  170. Accountname string `json:"accountname" xorm:"ACCOUNTNAME"` // 账户名称(机构名称)
  171. Parentuserid int64 `json:"parentuserid" xorm:"PARENTUSERID"` // 所属机构ID
  172. Broker int64 `json:"broker" xorm:"BROKER"` // 所属经纪人ID
  173. Subarealevelpath string `json:"subarealevelpath" xorm:"SUBAREALEVELPATH"` // 子机构层级路径(逗号分隔,首尾加逗号)
  174. Refereeuserid int64 `json:"refereeuserid" xorm:"REFEREEUSERID"` // 推荐人ID
  175. Memberuserid int64 `json:"memberuserid" xorm:"MEMBERUSERID"` // 所属会员ID
  176. Accountstatus int32 `json:"accountstatus" xorm:"ACCOUNTSTATUS"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:停用(注销) 7:注销(删除)
  177. Reckonaccountid int64 `json:"reckonaccountid" xorm:"RECKONACCOUNTID"` // 默认结算资金账号ID(机构分润使用) 作废
  178. Createtime time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  179. Creatorid int64 `json:"-" xorm:"CREATORID"` // 创建人
  180. Audittime time.Time `json:"-" xorm:"AUDITTIME"` // 审核时间
  181. Audituserid int64 `json:"-" xorm:"AUDITUSERID"` // 审核人
  182. Auditremark string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  183. Canceltime time.Time `json:"-" xorm:"CANCELTIME"` // 销户时间
  184. Canceluserid int64 `json:"-" xorm:"CANCELUSERID"` // 销户人
  185. Modifytime time.Time `json:"-" xorm:"MODIFYTIME"` // 修改时间
  186. Modifierid int64 `json:"-" xorm:"MODIFIERID"` // 修改人
  187. Modifyremark string `json:"modifyremark" xorm:"MODIFYREMARK"` // 变更备注
  188. Maxinvestornum int64 `json:"maxinvestornum" xorm:"MAXINVESTORNUM"` // 最大用户数(经纪会员下投资者个数)
  189. Hasauth int32 `json:"hasauth" xorm:"HASAUTH"` // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
  190. Refercount int32 `json:"refercount" xorm:"REFERCOUNT"` // 推荐总人数
  191. Refernum string `json:"refernum" xorm:"REFERNUM"` // 推荐码
  192. Isanonymous int32 `json:"isanonymous" xorm:"ISANONYMOUS"` // 是否匿名下单 - 0:否 1:是
  193. Parenttopuser string `json:"parenttopuser" xorm:"PARENTTOPUSER"` // 上级顶级机构 [092=0,1时,默认为1, 092=2时若自已为顶级,则填入自己,自己不为顶级,填入ParentUserID的"ParentTopUser"]
  194. Subaccountlevel int32 `json:"subaccountlevel" xorm:"SUBACCOUNTLEVEL"` // 子账户层数
  195. Applysrc int32 `json:"-" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  196. Auditsrc int32 `json:"-" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  197. Rootuserid int64 `json:"rootuserid" xorm:"ROOTUSERID"` // 根用户ID
  198. Canrecommend int32 `json:"canrecommend" xorm:"CANRECOMMEND"` // 是否可推荐 - 0:不可 1;可
  199. LineCSAccount string `json:"linecsaccount" xorm:"LINECSACCOUNT"` // Line客服账号
  200. TodayRefercount int `json:"todayrefercount" xorm:"-"` // 今日推荐人数
  201. CURSCORE int64 `json:"curscore" xorm:"-"` // 积分
  202. IsSigned bool `json:"issigned" xorm:"-"` // 今日是否已签到
  203. MemberLineCSAccount string `json:"memberlinecsaccount" xorm:"-"` // 所属会员Line客服账号
  204. }
  205. // TableName is USERACCOUNT
  206. func (Useraccount) TableName() string {
  207. return "USERACCOUNT"
  208. }
  209. // Userinfo 用户信息表
  210. type Userinfo struct {
  211. Userid int64 `json:"userid" xorm:"'USERID'" binding:"required"` // 用户ID
  212. Userinfotype int32 `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 用户信息类型 - 1:个人 2:企业
  213. Customername string `json:"customername" xorm:"'CUSTOMERNAME'"` // 客户名称(企业名称)
  214. Userstatus int32 `json:"userstatus" xorm:"'USERSTATUS'"` // 用户状态 - 1:正常 2:注销
  215. Usertype int32 `json:"usertype" xorm:"'USERTYPE'"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
  216. Openmode int32 `json:"openmode" xorm:"'OPENMODE'"` // 开户方式 - 1:管理端开户 2:网上开户注册(会员官网) 3:微信开户 4:网页交易端注册 5:安卓手机端注册 6:苹果手机端注册 7:PC交易端注册 8:微信快速开户 9:支付宝快速开户 10:手机号快速开户
  217. Cardtypeid int32 `json:"cardtypeid" xorm:"'CARDTYPEID'"` // 证件类型ID
  218. Cardnum string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码(加密存储)
  219. Halfbodyphotourl string `json:"halfbodyphotourl" xorm:"'HALFBODYPHOTOURL'"` // 半身照地址
  220. Cardfrontphotourl string `json:"cardfrontphotourl" xorm:"'CARDFRONTPHOTOURL'"` // 证件正面图片地址
  221. Cardbackphotourl string `json:"cardbackphotourl" xorm:"'CARDBACKPHOTOURL'"` // 证件背面图片地址
  222. Biznature int32 `json:"biznature" xorm:"'BIZNATURE'"` // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
  223. Bizscope string `json:"bizscope" xorm:"'BIZSCOPE'"` // 企业经营范围(企业)
  224. Legalpersonname string `json:"legalpersonname" xorm:"'LEGALPERSONNAME'"` // 法人姓名(企业)
  225. Contactname string `json:"contactname" xorm:"'CONTACTNAME'"` // 联系人
  226. Sex int32 `json:"sex" xorm:"'SEX'"` // 用户性别 0: 女 1: 男
  227. Telphone string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话(加密存储)
  228. Mobile string `json:"mobile" xorm:"'MOBILE'"` // 手机号码(加密存储)
  229. Fax string `json:"fax" xorm:"'FAX'"` // 传真(加密存储)
  230. Email string `json:"email" xorm:"'EMAIL'"` // 邮件(加密存储)
  231. Qq string `json:"qq" xorm:"'QQ'"` // QQ(加密存储
  232. Wechat string `json:"wechat" xorm:"'WECHAT'"` // 微信(加密存储)
  233. Countryid int32 `json:"countryid" xorm:"'COUNTRYID'"` // 国家
  234. Provinceid int32 `json:"provinceid" xorm:"'PROVINCEID'"` // 省ID
  235. Cityid int32 `json:"cityid" xorm:"'CITYID'"` // 市ID
  236. Districtid int32 `json:"districtid" xorm:"'DISTRICTID'"` // 地区ID
  237. Company string `json:"company" xorm:"'COMPANY'"` // 公司(个人)
  238. Address string `json:"address" xorm:"'ADDRESS'"` // 地址
  239. Postalcode string `json:"postalcode" xorm:"'POSTALCODE'"` // 邮政编码
  240. Createtime time.Time `json:"-" xorm:"'CREATETIME'"` // 创建时间
  241. Creatorid int64 `json:"-" xorm:"'CREATORID'"` // 创建人
  242. Modifiertime time.Time `json:"-" xorm:"'MODIFIERTIME'"` // 修改时间
  243. Modifierid int64 `json:"-" xorm:"'MODIFIERID'"` // 修改人
  244. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  245. Wskhinfo string `json:"wskhinfo" xorm:"'WSKHINFO'"` // 开户申请信息(JSON)
  246. Signpdfurl string `json:"signpdfurl" xorm:"'SIGNPDFURL'"` // 签约pdf文件
  247. Legalcardfrontphotourl string `json:"legalcardfrontphotourl" xorm:"'LEGALCARDFRONTPHOTOURL'"` // 法人身份证正面照地址
  248. Legalcardbackphotourl string `json:"legalcardbackphotourl" xorm:"'LEGALCARDBACKPHOTOURL'"` // 法人身份证背面照地址
  249. Otherurl string `json:"otherurl" xorm:"'OTHERURL'"` // 其它图片地址[使用分号分隔]
  250. Hasencrypt int32 `json:"hasencrypt" xorm:"'HASENCRYPT'"` // 数据是否已加密 - 0:未加密 1:已加密
  251. Bankname string `json:"bankname" xorm:"'BANKNAME'"` // 银行名称
  252. Bankaccount string `json:"bankaccount" xorm:"'BANKACCOUNT'"` // 银行帐号 (加密存储)
  253. Bankcardfrontphotourl string `json:"bankcardfrontphotourl" xorm:"'BANKCARDFRONTPHOTOURL'"` // 银行卡正面照地址
  254. Needinvoice int32 `json:"needinvoice" xorm:"'NEEDINVOICE'"` // 是否需要发票 - 0:不需要 1:需要
  255. Bankid string `json:"bankid" xorm:"'BANKID'"` // 银行编码
  256. Attachment1 string `json:"attachment1" xorm:"'ATTACHMENT1'"` // 附件1
  257. Attachment2 string `json:"attachment2" xorm:"'ATTACHMENT2'"` // 附件2
  258. Bankaccountname string `json:"bankaccountname" xorm:"'BANKACCOUNTNAME'"` // 收款人名称
  259. Headurl string `json:"headurl" xorm:"'HEADURL'"` // 头像地址
  260. Nickname string `json:"nickname" xorm:"'NICKNAME'"` // 昵称:默认为名称脱敏(张**) 或 手机号脱敏(139****9999)
  261. Mobile2 string `json:"mobile2" xorm:"'MOBILE2'"` // 手机号码[明文-尚志]
  262. Province string `json:"province" xorm:"'PROVINCE'"` // 省
  263. City string `json:"city" xorm:"'CITY'"` // 市
  264. District string `json:"district" xorm:"'DISTRICT'"` // 地区
  265. Bankbankname string `json:"bankbankname" xorm:"'BANKBANKNAME'"` // 银行名称(bankid关联查询的name)
  266. }
  267. // TableName is USERINFO
  268. func (Userinfo) TableName() string {
  269. return "USERINFO"
  270. }
  271. // Quoter 报价商表
  272. type Quoter struct {
  273. Quoterid int64 `json:"quoterid" xorm:"'QUOTERID'" binding:"required"` // 报价商ID(自增ID)
  274. Quotername string `json:"quotername" xorm:"'QUOTERNAME'" binding:"required"` // 报价商名称
  275. Areauserid int64 `json:"areauserid" xorm:"'AREAUSERID'" binding:"required"` // 所属机构ID
  276. Tradeproperty int32 `json:"tradeproperty" xorm:"'TRADEPROPERTY'"` // 交易属性
  277. Defaultmakerid int64 `json:"defaultmakerid" xorm:"'DEFAULTMAKERID'"` // 默认做市商ID(UserID)
  278. Quoterstatus int32 `json:"quoterstatus" xorm:"'QUOTERSTATUS'"` // 报价商状态 - 1:正常 2:注销
  279. Modifierid int64 `json:"modifierid" xorm:"'MODIFIERID'"` // 修改人
  280. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  281. Matchmode int32 `json:"matchmode" xorm:"'MATCHMODE'"` // 对手模式: 1-经纪会员自接 2:按对手关系[收益权用]
  282. }
  283. // TableName is QUOTER
  284. func (Quoter) TableName() string {
  285. return "QUOTER"
  286. }
  287. // Arearole 机构角色表
  288. type Arearole struct {
  289. Userid int64 `json:"userid" xorm:"USERID" binding:"required"` // 机构用户ID其他做市关系,都设置为 1
  290. Roletype int32 `json:"roletype" xorm:"ROLETYPE" binding:"required"` // 角色类型 - 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:门店
  291. Tradeaccountid int64 `json:"tradeaccountid" xorm:"TRADEACCOUNTID"` // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号) - 作废, 使用UserReckonAccount
  292. Createtime time.Time `json:"-" xorm:"CREATETIME"` // 创建时间
  293. Creatorid int64 `json:"-" xorm:"CREATORID"` // 创建人ID
  294. Modifytime time.Time `json:"-" xorm:"MODIFYTIME"` // 修改时间
  295. Modifierid int64 `json:"-" xorm:"MODIFIERID"` // 修改人ID
  296. Shoppassword string `json:"shoppassword" xorm:"SHOPPASSWORD"` // 商城店铺登陆密码(商城店铺角色使用)
  297. Isreturnscore int32 `json:"isreturnscore" xorm:"ISRETURNSCORE"` // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
  298. Transurl string `json:"transurl" xorm:"TRANSURL"` // 物流地址(物流机构)
  299. Outuserid string `json:"outuserid" xorm:"OUTUSERID"` // 外部账户[场外期权做市商]
  300. Parentuserid int64 `json:"parentuserid" xorm:"PARENTUSERID"` // 上级组织机构(组织机构)
  301. Rootuserid int64 `json:"rootuserid" xorm:"ROOTUSERID"` // 顶级组织机构用户ID(组织机构)
  302. Sublevelpath string `json:"sublevelpath" xorm:"SUBLEVELPATH"` // 组织机构层级路径(逗号分隔,首尾加逗号)
  303. Orgtype int32 `json:"orgtype" xorm:"ORGTYPE"` // 组织机构类型 1:机构\分支节点 2:交易员\叶子节点 3:部门\分支节点
  304. Fromuserid int64 `json:"fromuserid" xorm:"FROMUSERID"` // 所属机构(组织机构)( OrgType = 1时为自己, = 2\3时取上级机构的所属机构)
  305. Suborgtype int32 `json:"suborgtype" xorm:"SUBORGTYPE"` // 子机构类型(千海金) - 0:机构 1:代理 2:门店
  306. }
  307. // TableName is AREAROLE
  308. func (Arearole) TableName() string {
  309. return "AREAROLE"
  310. }
  311. // 获取目标账号的相关角色信息
  312. func (r *Arearole) GetAreaRolesByUserID(UserID int) ([]Arearole, error) {
  313. areaRoles := make([]Arearole, 0)
  314. if err := db.GetEngine().Where("USERID = ?", UserID).Find(&areaRoles); err != nil {
  315. return nil, err
  316. }
  317. return areaRoles, nil
  318. }
  319. // 获取目标账号的相关角色信息
  320. func (r *Arearole) GetAreaRoles(UserID int, RoleType int) ([]Arearole, error) {
  321. areaRoles := make([]Arearole, 0)
  322. session := db.GetEngine().Where("USERID = ?", UserID)
  323. if RoleType > 0 {
  324. session = session.And("ROLETYPE = ?", RoleType)
  325. }
  326. if err := session.Find(&areaRoles); err != nil {
  327. return nil, err
  328. }
  329. return areaRoles, nil
  330. }
  331. // Taaccountlog 资金账户记账流水表 - 导历史
  332. type Taaccountlog struct {
  333. Autoid int64 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
  334. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账户ID
  335. Relationorderid string `json:"relationorderid" xorm:"'RELATIONORDERID'"` // 关联单号
  336. Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  337. Goodsid int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  338. Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种ID
  339. Amount float64 `json:"amount" xorm:"'AMOUNT'" binding:"required"` // 资金金额
  340. Amountadjusttype int32 `json:"amountadjusttype" xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) - 0:系统 1:单边账调整 2:人工调整
  341. Balance float64 `json:"balance" xorm:"'BALANCE'" binding:"required"` // 期初余额
  342. Currentbalance float64 `json:"currentbalance" xorm:"'CURRENTBALANCE'" binding:"required"` // 期末余额(变动后金额)
  343. Createtime time.Time `json:"createtime" xorm:"'CREATETIME'" binding:"required"` // 发生时间
  344. Operatetype int32 `json:"operatetype" xorm:"'OPERATETYPE'" binding:"required"` // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻 601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
  345. Moneyticket int64 `json:"moneyticket" xorm:"'MONEYTICKET'"` // 资金流水号:银行端流水号
  346. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  347. Businesscode int32 `json:"businesscode" xorm:"'BUSINESSCODE'"` // 业务编号
  348. }
  349. // TableName is TAACCOUNTLOG
  350. func (Taaccountlog) TableName() string {
  351. return "TAACCOUNTLOG"
  352. }
  353. // Histaaccountlog 历史资金账户记账流水表
  354. type Histaaccountlog struct {
  355. Autoid int64 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
  356. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'" binding:"required"` // 资金账户ID
  357. Relationorderid string `json:"relationorderid" xorm:"'RELATIONORDERID'"` // 关联单号
  358. Marketid int32 `json:"marketid" xorm:"'MARKETID'"` // 市场ID
  359. Goodsid int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品ID
  360. Currencyid int64 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种ID
  361. Amount float64 `json:"amount" xorm:"'AMOUNT'" binding:"required"` // 资金金额
  362. Amountadjusttype int32 `json:"amountadjusttype" xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) - 0:系统 1:单边账调整 2:人工调整
  363. Balance float64 `json:"balance" xorm:"'BALANCE'" binding:"required"` // 期初余额
  364. Currentbalance float64 `json:"currentbalance" xorm:"'CURRENTBALANCE'" binding:"required"` // 期末余额(变动后金额)
  365. Createtime time.Time `json:"createtime" xorm:"'CREATETIME'" binding:"required"` // 发生时间
  366. Operatetype int32 `json:"operatetype" xorm:"'OPERATETYPE'" binding:"required"` // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻 601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
  367. Moneyticket int64 `json:"moneyticket" xorm:"'MONEYTICKET'"` // 资金流水号:银行端流水号
  368. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  369. Businesscode int32 `json:"businesscode" xorm:"'BUSINESSCODE'"` // 业务编号
  370. Histradedate string `json:"histradedate" xorm:"'HISTRADEDATE'" binding:"required"` // 历史交易日
  371. Isvaliddata int32 `json:"isvaliddata" xorm:"'ISVALIDDATA'"` // 是否有效 - 0:无效 1:有效
  372. }
  373. // TableName is HIS_TAACCOUNTLOG
  374. func (Histaaccountlog) TableName() string {
  375. return "HIS_TAACCOUNTLOG"
  376. }
  377. // Userfavoritegoods 用户商品收藏表
  378. type Userfavoritegoods struct {
  379. Userid int64 `json:"-" xorm:"'USERID'" binding:"required"` // 用户
  380. Goodsid int64 `json:"goodsid" xorm:"'GOODSID'" binding:"required"` // 商品ID
  381. Marketid int32 `json:"-" xorm:"'MARKETID'"` // 市场ID
  382. Modifytime time.Time `json:"-" xorm:"'MODIFYTIME'"` // 修改时间
  383. }
  384. // TableName is USERFAVORITEGOODS
  385. func (Userfavoritegoods) TableName() string {
  386. return "USERFAVORITEGOODS"
  387. }
  388. // Messageboard 留言簿表
  389. type Messageboard struct {
  390. Messageboardid int64 `json:"messageboardid" xorm:"'MESSAGEBOARDID'" binding:"required"` // 留言簿ID(SEQ_MessageBoard)
  391. Userid int64 `json:"userid" xorm:"'USERID'"` // 用户ID
  392. Message string `json:"message" xorm:"'MESSAGE'"` // 留言信息
  393. Createtime time.Time `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  394. Contactnum string `json:"contactnum" xorm:"'CONTACTNUM'"` // 联系电话
  395. }
  396. // TableName is MESSAGEBOARD
  397. func (Messageboard) TableName() string {
  398. return "MESSAGEBOARD"
  399. }
  400. // Wskhuserinfo 网上开户用户表 (开户成功删除记录)
  401. type Wskhuserinfo struct {
  402. Userid int64 `json:"userid" xorm:"USERID" binding:"required"` // 用户ID(自增ID)SEQ_WSKH_USERINFO
  403. Username string `json:"username" xorm:"USERNAME"` // 用户姓名
  404. Sex int32 `json:"sex" xorm:"SEX"` // 性别 - 0:女 1:男
  405. Cardtype int32 `json:"cardtype" xorm:"CARDTYPE"` // 证件类型
  406. Cardnum string `json:"cardnum" xorm:"CARDNUM"` // 证件号码 (加密存储)
  407. Cardaddress string `json:"cardaddress" xorm:"CARDADDRESS"` // 证件地址 (加密存储)
  408. Mobilephone string `json:"mobilephone" xorm:"MOBILEPHONE"` // 手机号码 (加密存储)
  409. Wechat string `json:"wechat" xorm:"WECHAT"` // 微信号 (加密存储)
  410. Email string `json:"email" xorm:"EMAIL"` // Email地址(加密存储)
  411. Ipaddress string `json:"ipaddress" xorm:"IPADDRESS"` // IP地址
  412. Halfbodyphotourl string `json:"halfbodyphotourl" xorm:"HALFBODYPHOTOURL"` // 半身照地址
  413. Cardfrontphotourl string `json:"cardfrontphotourl" xorm:"CARDFRONTPHOTOURL"` // 正面证件照地址
  414. Cardbackphotourl string `json:"cardbackphotourl" xorm:"CARDBACKPHOTOURL"` // 背面证件照地址
  415. Bankid string `json:"bankid" xorm:"BANKID"` // 银行编码
  416. Bankname string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  417. Bankaccount string `json:"bankaccount" xorm:"BANKACCOUNT"` // 银行帐号 (加密存储)
  418. Bankcardfrontphotourl string `json:"bankcardfrontphotourl" xorm:"BANKCARDFRONTPHOTOURL"` // 银行卡正面照地址
  419. Bankcardbackphotourl string `json:"bankcardbackphotourl" xorm:"BANKCARDBACKPHOTOURL"` // 银行卡背面照地址
  420. Areacode string `json:"areacode" xorm:"AREACODE"` // 机构代码
  421. Areaid int64 `json:"areaid" xorm:"AREAID"` // 机构Id
  422. Memberareaid int64 `json:"memberareaid" xorm:"MEMBERAREAID"` // 所属会员ID
  423. Brokerid string `json:"brokerid" xorm:"BROKERID"` // 经纪人ID(加密存储)
  424. Accountid int64 `json:"accountid" xorm:"ACCOUNTID"` // 交易系统帐号Id (加密存储)
  425. Logincode string `json:"logincode" xorm:"LOGINCODE"` // 登录帐号 (加密存储)
  426. Openmode int32 `json:"openmode" xorm:"OPENMODE"` // 开户方式 - 1:管理端开户 2:网上开户注册(会员官网-手机号) 3:微信开户 4:网页交易端注册 5:安卓手机端注册 6:苹果手机端注册 7:PC交易端注册 8:微信快速开户 9:支付宝快速开户 10:手机号快速开户 11:网上开户注册(会员官网-微信认证) 12:网上开户注册(会员官网-支付宝认证)
  427. Userstate int32 `json:"userstate" xorm:"USERSTATE"` // 开户状态 - 1:未提交 2: 待初审 3:初审拒绝 4:待复审 5:复审拒绝 6:测评不通过
  428. Remark string `json:"remark" xorm:"REMARK"` // 备注
  429. Isvalidate string `json:"isvalidate" xorm:"ISVALIDATE"` // 是否有效 (删除后标记为失效) - 0:无效 1:有效
  430. Createtime time.Time `json:"createtime" xorm:"CREATETIME"` // 开户申请时间
  431. Modifiedtime time.Time `json:"modifiedtime" xorm:"MODIFIEDTIME"` // 修改时间
  432. Modifiedby int64 `json:"modifiedby" xorm:"MODIFIEDBY"` // 修改人帐号
  433. Removebeforestatus int32 `json:"removebeforestatus" xorm:"REMOVEBEFORESTATUS"` // REMOVEBEFORESTATUS
  434. Cusbankid string `json:"cusbankid" xorm:"CUSBANKID"` // 签约类型
  435. Cusbankname string `json:"cusbankname" xorm:"CUSBANKNAME"` // 签约类型名称
  436. Signpdfurl string `json:"signpdfurl" xorm:"SIGNPDFURL"` // 签约pdf文件
  437. Referral string `json:"referral" xorm:"REFERRAL"` // 推荐人编码
  438. Subbranch string `json:"subbranch" xorm:"SUBBRANCH"` // 开户支行
  439. Bankpictureurl string `json:"bankpictureurl" xorm:"BANKPICTUREURL"` // 银行卡正面地址
  440. Auditime time.Time `json:"auditime" xorm:"AUDITIME"` // 审核时间
  441. Auditedby time.Time `json:"auditedby" xorm:"AUDITEDBY"` // 审核人
  442. Videourl string `json:"videourl" xorm:"VIDEOURL"` // 视频地址
  443. Signedstatus int32 `json:"signedstatus" xorm:"SIGNEDSTATUS"` // 账户一号签签约状态
  444. Userinfotype int32 `json:"userinfotype" xorm:"USERINFOTYPE"` // 用户信息类型 - 1:个人 2:企业
  445. Customername string `json:"customername" xorm:"CUSTOMERNAME"` // 客户名称(企业名称)
  446. Biznature int32 `json:"biznature" xorm:"BIZNATURE"` // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
  447. Bizscope string `json:"bizscope" xorm:"BIZSCOPE"` // 企业经营范围(企业)
  448. Legalpersonname string `json:"legalpersonname" xorm:"LEGALPERSONNAME"` // 法人姓名(企业)
  449. Contactname string `json:"contactname" xorm:"CONTACTNAME"` // 联系人
  450. Countryid int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  451. Provinceid int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  452. Cityid int32 `json:"cityid" xorm:"CITYID"` // 市
  453. Districtid int32 `json:"districtid" xorm:"DISTRICTID"` // 地区
  454. Postalcode string `json:"postalcode" xorm:"POSTALCODE"` // 邮政编码
  455. Company string `json:"company" xorm:"COMPANY"` // 公司(个人)
  456. Legalcardfrontphotourl string `json:"legalcardfrontphotourl" xorm:"LEGALCARDFRONTPHOTOURL"` // 法人身份证正面照地址
  457. Legalcardbackphotourl string `json:"legalcardbackphotourl" xorm:"LEGALCARDBACKPHOTOURL"` // 法人身份证背面照地址
  458. Otherurl string `json:"otherurl" xorm:"OTHERURL"` // 其它图片地址[使用分号分隔]
  459. Usertype int32 `json:"usertype" xorm:"USERTYPE"` // 用户类型 - 1:投资者 2:机构
  460. Qq string `json:"qq" xorm:"QQ"` // QQ(加密存储
  461. Telphone string `json:"telphone" xorm:"TELPHONE"` // 联系电话(加密存储)
  462. Attachment1 string `json:"attachment1" xorm:"ATTACHMENT1"` // 附件1
  463. Attachment2 string `json:"attachment2" xorm:"ATTACHMENT2"` // 附件2
  464. Bankaccountname string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 收款人名称
  465. Nickname string `json:"nickname" xorm:"NICKNAME"` // 昵称:默认为手机号脱敏(139****9999) 或 名称脱敏(张**)
  466. Headurl string `json:"headurl" xorm:"HEADURL"` // 头像地址
  467. Mobile2 string `json:"mobile2" xorm:"MOBILE2"` // 手机号码[明文-尚志]
  468. Biztype int32 `json:"biztype" xorm:"BIZTYPE"` // 企业类型 - 1:进口/生产 2:销售 3:零售 4:运输 5:仓储
  469. Proxystatementurl string `json:"proxystatementurl" xorm:"PROXYSTATEMENTURL"` // 授权委托书
  470. Contactcardfrontphotourl string `json:"contactcardfrontphotourl" xorm:"CONTACTCARDFRONTPHOTOURL"` // 联系人证件正面图片地址
  471. Contactcardbackphotourl string `json:"contactcardbackphotourl" xorm:"CONTACTCARDBACKPHOTOURL"` // 联系人证件背面图片地址
  472. Attachment3 string `json:"attachment3" xorm:"ATTACHMENT3"` // 附件3
  473. Attachment4 string `json:"attachment4" xorm:"ATTACHMENT4"` // 附件4
  474. Attachment5 string `json:"attachment5" xorm:"ATTACHMENT5"` // 附件5
  475. Auditsrc int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  476. Taxpayernum string `json:"taxpayernum" xorm:"TAXPAYERNUM"` // 纳税人识别号
  477. }
  478. // TableName is WSKH_USERINFO
  479. func (Wskhuserinfo) TableName() string {
  480. return "WSKH_USERINFO"
  481. }
  482. // Systemmanager 系统管理员表
  483. type Systemmanager struct {
  484. Autoid int32 `json:"autoid" xorm:"'AUTOID'" binding:"required"` // 自增ID
  485. Reletype int32 `json:"reletype" xorm:"'RELETYPE'"` // 用户类型 - 1- 交易所管理员 2- 机构管理员 3-子机构管理员
  486. Logincode string `json:"logincode" xorm:"'LOGINCODE'"` // 用户登录账号,唯一索引
  487. Username string `json:"username" xorm:"'USERNAME'"` // 用户姓名
  488. Password string `json:"password" xorm:"'PASSWORD'"` // 加密方式采用 用户名+密码 ,采用 SHA 算法
  489. Areauserid int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构ID
  490. Pwdexpdate time.Time `json:"pwdexpdate" xorm:"'PWDEXPDATE'"` // 密码失效日期
  491. Managerstatus int32 `json:"managerstatus" xorm:"'MANAGERSTATUS'"` // 用户状态: 1启用 2停用 3锁定(密码错误时锁定)
  492. Loginstatus int32 `json:"loginstatus" xorm:"'LOGINSTATUS'"` // 登录状态:1未登录 2已登录
  493. Isdefault int32 `json:"isdefault" xorm:"'ISDEFAULT'"` // 是否默认管理员 - 0:不是默认 1:默认管理员
  494. Logintime time.Time `json:"logintime" xorm:"'LOGINTIME'"` // 登录时间
  495. Loginip string `json:"loginip" xorm:"'LOGINIP'"` // 登录IP
  496. Loginport int64 `json:"loginport" xorm:"'LOGINPORT'"` // 登录端口
  497. Loginfailnum int64 `json:"loginfailnum" xorm:"'LOGINFAILNUM'"` // 登录失败次数
  498. Uploginid int64 `json:"uploginid" xorm:"'UPLOGINID'"` // 修改人ID
  499. Modifytime time.Time `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  500. Remark string `json:"remark" xorm:"'REMARK'"` // 备注
  501. Onymac int32 `json:"onymac" xorm:"'ONYMAC'"` // 是否启用MAC地址 - 0:否 1:是
  502. Managertype int32 `json:"managertype" xorm:"'MANAGERTYPE'"` // 账号类型 - 1:管理员 2:交易员
  503. }
  504. // TableName is SYSTEMMANAGER
  505. func (Systemmanager) TableName() string {
  506. return "SYSTEMMANAGER"
  507. }
  508. // GetLoginAccount 获取登录账户信息
  509. func GetLoginAccount(loginID int) (*Loginaccount, error) {
  510. var loginaccount Loginaccount
  511. // var loginaccount Loginaccount
  512. has, err := db.GetEngine().Where("LOGINID = ?", loginID).Get(&loginaccount)
  513. if err != nil {
  514. return nil, err
  515. }
  516. if !has {
  517. return nil, nil
  518. }
  519. return &loginaccount, nil
  520. }
  521. // GetLoginAccountByLoginCode 通过登录代码查询登录账号信息
  522. func GetLoginAccountByLoginCode(loginCode string) (*Loginaccount, error) {
  523. engine := db.GetEngine()
  524. // 如果要使用 *Loginaccount, 则应初始化后再使用
  525. // var loginaccount *Loginaccount
  526. loginaccount := &Loginaccount{}
  527. // var loginaccount Loginaccount
  528. has, err := engine.Where("LOGINCODE = ?", loginCode).Get(loginaccount)
  529. if err != nil {
  530. return nil, err
  531. }
  532. if has {
  533. return loginaccount, nil
  534. }
  535. return nil, nil
  536. }
  537. // GetLoginAccountByMobile2 通过手机号码查询登录账号信息(三方认证表 userauthinfo)
  538. func GetLoginAccountByMobile2(mobile string) (*Loginaccount, error) {
  539. engine := db.GetEngine()
  540. var loginaccount Loginaccount
  541. var has bool
  542. // 手机号码需要AES加密
  543. key, _ := hex.DecodeString(utils.AESSecretKey)
  544. if mobileEncrypted, err := utils.AESEncrypt([]byte(mobile), key); err == nil {
  545. // 加密成功后进行查询
  546. has, err = engine.Join("INNER", "USERAUTHINFO", "USERAUTHINFO.LOGINID = LOGINACCOUNT.LOGINID").
  547. Where("USERAUTHINFO.AUTHID = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
  548. if err != nil {
  549. return nil, err
  550. }
  551. }
  552. if has {
  553. return &loginaccount, nil
  554. }
  555. return nil, nil
  556. }
  557. // GetLoginAccountByMobile 通过手机号码查询登录账号信息
  558. func GetLoginAccountByMobile(mobile string) (*Loginaccount, error) {
  559. engine := db.GetEngine()
  560. var loginaccount Loginaccount
  561. var has bool
  562. // 手机号码需要AES加密
  563. key, _ := hex.DecodeString(utils.AESSecretKey)
  564. if mobileEncrypted, err := utils.AESEncrypt([]byte(mobile), key); err == nil {
  565. // 加密成功后进行查询
  566. has, err = engine.Join("INNER", "USERINFO", "USERINFO.USERID = LOGINACCOUNT.USERID").
  567. Where("USERINFO.USERSTATUS = 1 and USERINFO.MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
  568. if err != nil {
  569. return nil, err
  570. }
  571. }
  572. if has {
  573. return &loginaccount, nil
  574. }
  575. return nil, nil
  576. }
  577. // GetLoginAccountByMobile 通过手机号码查询登录账号信息
  578. func GetLoginAccount2(mobile string) (*Loginaccount, error) {
  579. engine := db.GetEngine()
  580. var loginaccount Loginaccount
  581. var has bool
  582. // 手机号码需要AES加密
  583. key, _ := hex.DecodeString(utils.AESSecretKey)
  584. if mobileEncrypted, err := utils.AESEncrypt([]byte(mobile), key); err == nil {
  585. // 加密成功后进行查询
  586. has, err = engine.Where("LOGINSTATUS = 1 and MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
  587. if err != nil {
  588. return nil, err
  589. }
  590. }
  591. if has {
  592. return &loginaccount, nil
  593. }
  594. return nil, nil
  595. }
  596. // GetUserAccount 获取用户账户信息
  597. func GetUserAccount(userID int) (*Useraccount, error) {
  598. engine := db.GetEngine()
  599. var userAccount Useraccount
  600. has, err := engine.Where("USERID = ?", userID).Get(&userAccount)
  601. if err != nil {
  602. // 查询失败
  603. return nil, err
  604. }
  605. if !has {
  606. return nil, nil
  607. }
  608. // 统计今日推荐人数
  609. type tmp struct {
  610. TodayRefercount int `xorm:"TODAYREFERCOUNT"`
  611. }
  612. t := new(tmp)
  613. sql := fmt.Sprintf("select count(t.userid) TODAYREFERCOUNT from useraccount t where to_char(t.createtime, 'yyyymmdd') = to_char(sysdate, 'yyyymmdd') and t.REFEREEUSERID = %v", userAccount.Userid)
  614. if _, err := engine.SQL(sql).Get(t); err != nil {
  615. return nil, err
  616. }
  617. userAccount.TodayRefercount = t.TodayRefercount
  618. // 当前积分
  619. type tmp1 struct {
  620. CURSCORE int64 `json:"curscore" xorm:"CURSCORE"` // 期末积分
  621. }
  622. t1 := new(tmp1)
  623. sql = fmt.Sprintf("select t.CURSCORE from THJ_USERSCORE t where t.USERID = %v", userAccount.Userid)
  624. if _, err := engine.SQL(sql).Get(t1); err != nil {
  625. return nil, err
  626. }
  627. userAccount.CURSCORE = t1.CURSCORE
  628. // 今日是否已签到
  629. p := new(Thjsignin)
  630. userAccount.IsSigned, _ = engine.Where("userid = ?", userAccount.Userid).And("tradedate = to_char(sysdate, 'yyyymmdd')").Get(p)
  631. // 所属会员Line客服账号
  632. var p1 Useraccount
  633. _, err = engine.Where("USERID = ?", userAccount.Memberuserid).Get(&p1)
  634. if err == nil {
  635. // 查询到有所属会员
  636. userAccount.MemberLineCSAccount = p1.LineCSAccount
  637. }
  638. return &userAccount, nil
  639. }
  640. // GetUserInfo 获取用户信息
  641. func GetUserInfo(userID int) (*Userinfo, error) {
  642. engine := db.GetEngine()
  643. var userInfo Userinfo
  644. userinfos := make([]Userinfo, 0)
  645. err := engine.Table("USERINFO U").
  646. Select(`
  647. U.*,
  648. D1.DIVISIONNAME PROVINCE,
  649. D2.DIVISIONNAME CITY,
  650. D3.DIVISIONNAME DISTRICT,
  651. BB.BANKNAME BANKBANKNAME
  652. `).
  653. Join("LEFT", "DIVISION D1", "D1.AUTOID = U.PROVINCEID").
  654. Join("LEFT", "DIVISION D2", "D2.AUTOID = U.CITYID").
  655. Join("LEFT", "DIVISION D3", "D3.AUTOID = U.DISTRICTID").
  656. Join("LEFT", "BANK_BANKINFO BB", "BB.BANKID = U.BANKID").
  657. Where("u.USERID = ?", userID).Find(&userinfos)
  658. if err != nil {
  659. // 查询失败
  660. return nil, err
  661. }
  662. if len(userinfos) > 0 {
  663. userInfo = userinfos[0]
  664. } else {
  665. return nil, errors.New("无目标用户信息")
  666. }
  667. // 解密手机号码
  668. key, _ := hex.DecodeString(utils.AESSecretKey)
  669. if len(userInfo.Mobile) > 0 {
  670. if s1, err := hex.DecodeString(userInfo.Mobile); err == nil { // hex -> []byte
  671. if s2, err := utils.AESDecrypt(s1, key); err == nil {
  672. // FIXME: - 临时操作 - 解决导入数据手机号码被加密两次的问题
  673. if h, err := hex.DecodeString(string(s2)); err == nil {
  674. if s3, err := utils.AESDecrypt(h, key); err == nil {
  675. userInfo.Mobile2 = string(s3)
  676. } else {
  677. userInfo.Mobile2 = string(s2)
  678. }
  679. } else {
  680. userInfo.Mobile2 = string(s2)
  681. }
  682. }
  683. }
  684. }
  685. return &userInfo, nil
  686. }
  687. // GetUserInfoByLoginID 通过登录账号获取用户信息的方法
  688. func GetUserInfoByLoginID(loginID int) (*Userinfo, error) {
  689. engine := db.GetEngine()
  690. var userInfo Userinfo
  691. _, err := engine.Table("USERINFO U").Join("INNER", "LOGINACCOUNT L", "L.USERID = U.USERID").Where("L.LOGINID = ?", loginID).Get(&userInfo)
  692. if err != nil {
  693. // 查询失败
  694. return nil, err
  695. }
  696. return &userInfo, nil
  697. }
  698. // GetUserInfoByIdCardNo 通过身份证(加密后)获取用户信息的方法
  699. func GetUserInfoByIdCardNo(idCardNo string) ([]Userinfo, error) {
  700. engine := db.GetEngine()
  701. infos := make([]Userinfo, 0)
  702. err := engine.Where("CARDNUM", idCardNo).In("USERSTATUS", []int64{1, 3}).Find(&infos)
  703. return infos, err
  704. }
  705. // GetUserInfoByMobile 通过手机号码(加密后)获取用户信息的方法
  706. func GetUserInfoByMobile(mobile string) ([]Userinfo, error) {
  707. engine := db.GetEngine()
  708. infos := make([]Userinfo, 0)
  709. err := engine.Where("MOBILE", mobile).In("USERSTATUS", []int64{1, 3}).Find(&infos)
  710. return infos, err
  711. }
  712. // GetUserInfoByIDS 批量获取用户信息.
  713. func GetUserInfoByIDS(userids []int64) ([]Userinfo, error) {
  714. engine := db.GetEngine()
  715. infos := make([]Userinfo, 0)
  716. err := engine.In("USERID", userids).Find(&infos)
  717. return infos, err
  718. }
  719. // GetUserAccountByAccountID 通过资金账户获取账户信息
  720. func GetUserAccountByAccountID(accountID int) (*Useraccount, error) {
  721. engine := db.GetEngine()
  722. infos := make([]Useraccount, 0)
  723. if err := engine.Table("USERACCOUNT U").
  724. Join("INNER", "TAACCOUNT TA", "TA.RELATEDUSERID = U.USERID").
  725. Where("TA.ACCOUNTID = ?", accountID).Find(&infos); err != nil {
  726. return nil, err
  727. }
  728. if len(infos) > 0 {
  729. return &infos[0], nil
  730. }
  731. return nil, nil
  732. }
  733. // GetUserInfoByAccountID 通过资金账户获取用户信息
  734. func GetUserInfoByAccountID(accountID int) (*Userinfo, error) {
  735. engine := db.GetEngine()
  736. infos := make([]Userinfo, 0)
  737. if err := engine.Table("USERINFO U").
  738. Join("INNER", "TAACCOUNT TA", "TA.RELATEDUSERID = U.USERID").
  739. Where("TA.ACCOUNTID = ?", accountID).Find(&infos); err != nil {
  740. return nil, err
  741. }
  742. if len(infos) > 0 {
  743. return &infos[0], nil
  744. }
  745. return nil, nil
  746. }
  747. // GetUserFavoriteGoodses 获取用户商品收藏信息
  748. func GetUserFavoriteGoodses(userID int) ([]Userfavoritegoods, error) {
  749. engine := db.GetEngine()
  750. favoriteGoodses := make([]Userfavoritegoods, 0)
  751. if err := engine.Where("USERID = ?", userID).Find(&favoriteGoodses); err != nil {
  752. return nil, err
  753. }
  754. return favoriteGoodses, nil
  755. }
  756. // InsertUserFavoriteGoods 新增用户商品收藏信息
  757. func InsertUserFavoriteGoods(userID int, goodsID int) error {
  758. engine := db.GetEngine()
  759. userfavoritegoods := &Userfavoritegoods{
  760. Userid: int64(userID),
  761. Goodsid: int64(goodsID),
  762. }
  763. has, err := engine.Get(userfavoritegoods)
  764. if err != nil {
  765. return err
  766. }
  767. if !has {
  768. // 不存在时则插入一条新记录
  769. // userfavoritegoods.Modifytime = time.Now()
  770. if _, err := engine.Insert(userfavoritegoods); err != nil {
  771. return err
  772. }
  773. }
  774. return nil
  775. }
  776. // DelUserFavoriteGoods 删除用户商品收藏信息
  777. func DelUserFavoriteGoods(userID int, goodsID int) error {
  778. engine := db.GetEngine()
  779. userfavoritegoods := &Userfavoritegoods{
  780. Userid: int64(userID),
  781. Goodsid: int64(goodsID),
  782. }
  783. if _, err := engine.Delete(userfavoritegoods); err != nil {
  784. return err
  785. }
  786. return nil
  787. }
  788. // GetMessageBoard 获取用户留言板信息
  789. func GetMessageBoard(userID int) ([]Messageboard, error) {
  790. engine := db.GetEngine()
  791. messageBoards := make([]Messageboard, 0)
  792. if err := engine.Where("USERID = ?", userID).Desc("CREATETIME").Find(&messageBoards); err != nil {
  793. return nil, err
  794. }
  795. return messageBoards, nil
  796. }
  797. // InsertMessageBoard 新增用户留言板信息
  798. func InsertMessageBoard(userID int, message, contactNum string) int {
  799. engine := db.GetEngine()
  800. // 一天最多只能新增3条留言
  801. messageBoard := new(Messageboard)
  802. total, err := engine.Where("USERID = ? and (CREATETIME >=TRUNC(SYSDATE) and CREATETIME < TRUNC(SYSDATE)+1)", userID).Count(messageBoard)
  803. if err != nil {
  804. return e.ERROR_OPERATION_FAILED
  805. }
  806. if total >= 3 {
  807. return e.ERROR_ADD_MAX_3
  808. }
  809. // 由于XORM对ORACLE支持不行,有时间字段更新的直接使用SQL语句执行
  810. sql := fmt.Sprintf("insert into MESSAGEBOARD (MESSAGEBOARDID, USERID, MESSAGE, CONTACTNUM ,CREATETIME) values (SEQ_MessageBoard.nextval, %d, '%s', '%s', (select sysdate from dual))", userID, message, contactNum)
  811. if _, err := engine.Exec(sql); err != nil {
  812. return e.ERROR_OPERATION_FAILED
  813. }
  814. return 0
  815. }
  816. // GetUsersByUserType 获取批量指定类型的用户信息
  817. // 输入 userType int 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
  818. func GetUsersByUserType(userType int) ([]Userinfo, error) {
  819. engine := db.GetEngine()
  820. userInfos := make([]Userinfo, 0)
  821. if err := engine.Where("USERTYPE = ?", userType).Find(&userInfos); err != nil {
  822. return nil, err
  823. }
  824. return userInfos, nil
  825. }
  826. // GetTaAccountsByType 获取指定用户的资金账户列表
  827. // 输入 userID int 关联用户ID
  828. // 输入 taAccountType int 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
  829. func GetTaAccountsByType(userID, taAccountType int) ([]Taaccount, error) {
  830. engine := db.GetEngine()
  831. taAccounts := make([]Taaccount, 0)
  832. session := engine.Where("TRADESTATUS <> 7 and RELATEDUSERID = ?", userID)
  833. if taAccountType != 0 {
  834. session = session.And("TAACCOUNTTYPE = ?", taAccountType)
  835. }
  836. if err := session.Find(&taAccounts); err != nil {
  837. return nil, err
  838. }
  839. return taAccounts, nil
  840. }
  841. // GetTaAccountsByLoginID 通过登录账号获取对应资金账户列表的方法,一般用于获取自己的资金账号时使用
  842. // 输入 loginID int 登录账号
  843. // 输入 taAccountType int 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
  844. func GetTaAccountsByLoginID(loginID, taAccountType int) ([]Taaccount, error) {
  845. engine := db.GetEngine()
  846. taAccounts := make([]Taaccount, 0)
  847. // 注意:获取自身的资金账号列表,先要从LoginTAAccount表中判断是否有关联关系,如没配置关系则直接从TaAccount表中获取
  848. loginTaAccounts := make([]Logintaaccount, 0)
  849. if err := engine.Where("LOGINID = ?", loginID).Find(&loginTaAccounts); err != nil {
  850. return nil, err
  851. }
  852. if len(loginTaAccounts) > 0 {
  853. // 获取资金账号ID列表
  854. accountIDs := ""
  855. for _, v := range loginTaAccounts {
  856. if len(accountIDs) == 0 {
  857. accountIDs = strconv.Itoa(int(v.Accountid))
  858. } else {
  859. accountIDs += "," + strconv.Itoa(int(v.Accountid))
  860. }
  861. }
  862. // 获取资金账号列表
  863. session := engine.Where(fmt.Sprintf("TRADESTATUS <> 7 and ACCOUNTID in (%s)", accountIDs))
  864. if taAccountType != 0 {
  865. session = session.And("TAACCOUNTTYPE = ?", taAccountType)
  866. }
  867. if err := session.Find(&taAccounts); err != nil {
  868. return nil, err
  869. }
  870. } else {
  871. // 获取登录账户信息
  872. loginAccount, err := GetLoginAccount(loginID)
  873. if err != nil {
  874. return nil, err
  875. }
  876. if loginAccount == nil {
  877. return make([]Taaccount, 0), nil
  878. }
  879. // 资金账号权限类型 - 1:不选默认为所有权限 2:不选默认为无权限
  880. if loginAccount.Taaccountrighttype == 2 {
  881. return make([]Taaccount, 0), nil
  882. }
  883. // 直接从TaAccount表中获取
  884. session := engine.Table("TAACCOUNT").
  885. Join("INNER", "LOGINACCOUNT L", "L.USERID = TAACCOUNT.RELATEDUSERID and TAACCOUNT.TRADESTATUS <> 7").
  886. Where("L.LOGINID = ?", loginID)
  887. if taAccountType != 0 {
  888. session = session.And("TAACCOUNT.TAACCOUNTTYPE = ?", taAccountType)
  889. }
  890. if err := session.Find(&taAccounts); err != nil {
  891. return nil, err
  892. }
  893. }
  894. return taAccounts, nil
  895. }
  896. // GetTaAccountByID 通过AccountID获取资金账户信息
  897. func GetTaAccountByID(accountID int) (*Taaccount, error) {
  898. engine := db.GetEngine()
  899. var taaccount Taaccount
  900. has, err := engine.Where("TRADESTATUS <> 7 and ACCOUNTID = ?", accountID).Get(&taaccount)
  901. if err != nil {
  902. return nil, err
  903. }
  904. if !has {
  905. return nil, nil
  906. }
  907. return &taaccount, nil
  908. }
  909. // GetTaAccountByUserID 通过UserID获取资金账户信息
  910. func GetTaAccountByUserID(userID int) (*Taaccount, error) {
  911. engine := db.GetEngine()
  912. var taaccount Taaccount
  913. has, err := engine.Where("TRADESTATUS <> 7 and USERID = ?", userID).Get(&taaccount)
  914. if err != nil {
  915. return nil, err
  916. }
  917. if !has {
  918. return nil, nil
  919. }
  920. return &taaccount, nil
  921. }
  922. // InsertWSKHUserInfo 新增网上开户账户信息(客户资料申请)
  923. func InsertWSKHUserInfo(userinfo Wskhuserinfo) error {
  924. engine := db.GetEngine()
  925. // 加密数据
  926. key, _ := hex.DecodeString(utils.AESSecretKey)
  927. // 证件号码
  928. if len(userinfo.Cardnum) > 0 {
  929. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Cardnum), key); err == nil {
  930. userinfo.Cardnum = hex.EncodeToString(encrypted)
  931. }
  932. }
  933. // 证件地址
  934. if len(userinfo.Cardaddress) > 0 {
  935. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Cardaddress), key); err == nil {
  936. userinfo.Cardaddress = hex.EncodeToString(encrypted)
  937. }
  938. }
  939. // 手机
  940. if len(userinfo.Mobilephone) > 0 {
  941. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Mobilephone), key); err == nil {
  942. userinfo.Mobilephone = hex.EncodeToString(encrypted)
  943. }
  944. }
  945. // 微信
  946. if len(userinfo.Wechat) > 0 {
  947. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Wechat), key); err == nil {
  948. userinfo.Wechat = hex.EncodeToString(encrypted)
  949. }
  950. }
  951. // 邮件
  952. if len(userinfo.Email) > 0 {
  953. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Email), key); err == nil {
  954. userinfo.Email = hex.EncodeToString(encrypted)
  955. }
  956. }
  957. // 银行帐号
  958. if len(userinfo.Bankaccount) > 0 {
  959. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Bankaccount), key); err == nil {
  960. userinfo.Bankaccount = hex.EncodeToString(encrypted)
  961. }
  962. }
  963. // 经纪人ID
  964. if len(userinfo.Brokerid) > 0 {
  965. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Brokerid), key); err == nil {
  966. userinfo.Brokerid = hex.EncodeToString(encrypted)
  967. }
  968. }
  969. // 登录帐号
  970. if len(userinfo.Logincode) > 0 {
  971. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Logincode), key); err == nil {
  972. userinfo.Logincode = hex.EncodeToString(encrypted)
  973. }
  974. }
  975. // 自增ID
  976. seqMap, err := engine.QueryString("SELECT SEQ_WSKH_USERINFO.nextval USERID FROM dual")
  977. if err != nil {
  978. return err
  979. }
  980. if len(seqMap) <= 0 {
  981. return errors.New("获取自增ID错误")
  982. }
  983. userID, _ := strconv.Atoi(seqMap[0]["USERID"])
  984. userinfo.Userid = int64(userID)
  985. // 插入数据
  986. if _, err = engine.Insert(&userinfo); err != nil {
  987. return err
  988. }
  989. return nil
  990. }
  991. // UpdateWSKHUserInfo 修改网上开户账户信息(客户资料申请)
  992. func UpdateWSKHUserInfo(userinfo Wskhuserinfo) error {
  993. engine := db.GetEngine()
  994. // 加密数据
  995. key, _ := hex.DecodeString(utils.AESSecretKey)
  996. // 证件号码
  997. if len(userinfo.Cardnum) > 0 {
  998. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Cardnum), key); err == nil {
  999. userinfo.Cardnum = hex.EncodeToString(encrypted)
  1000. }
  1001. }
  1002. // 证件地址
  1003. if len(userinfo.Cardaddress) > 0 {
  1004. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Cardaddress), key); err == nil {
  1005. userinfo.Cardaddress = hex.EncodeToString(encrypted)
  1006. }
  1007. }
  1008. // 手机
  1009. if len(userinfo.Mobilephone) > 0 {
  1010. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Mobilephone), key); err == nil {
  1011. userinfo.Mobilephone = hex.EncodeToString(encrypted)
  1012. }
  1013. }
  1014. // 微信
  1015. if len(userinfo.Wechat) > 0 {
  1016. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Wechat), key); err == nil {
  1017. userinfo.Wechat = hex.EncodeToString(encrypted)
  1018. }
  1019. }
  1020. // 邮件
  1021. if len(userinfo.Email) > 0 {
  1022. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Email), key); err == nil {
  1023. userinfo.Email = hex.EncodeToString(encrypted)
  1024. }
  1025. }
  1026. // 银行帐号
  1027. if len(userinfo.Bankaccount) > 0 {
  1028. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Bankaccount), key); err == nil {
  1029. userinfo.Bankaccount = hex.EncodeToString(encrypted)
  1030. }
  1031. }
  1032. // 经纪人ID
  1033. if len(userinfo.Brokerid) > 0 {
  1034. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Brokerid), key); err == nil {
  1035. userinfo.Brokerid = hex.EncodeToString(encrypted)
  1036. }
  1037. }
  1038. // 登录帐号
  1039. if len(userinfo.Logincode) > 0 {
  1040. if encrypted, err := utils.AESEncrypt([]byte(userinfo.Logincode), key); err == nil {
  1041. userinfo.Logincode = hex.EncodeToString(encrypted)
  1042. }
  1043. }
  1044. // 修改数据
  1045. // 由于表的主键未定义成ID,所以这里需要用where来过滤
  1046. userID := userinfo.Userid
  1047. userinfo.Userid = 0
  1048. // m := make(map[string]interface{})
  1049. // j, _ := json.Marshal(userinfo)
  1050. // json.Unmarshal(j, &m)
  1051. // delete(m, "USERID")
  1052. if _, err := engine.Where("USERID = ?", userID).Update(&userinfo); err != nil {
  1053. return err
  1054. }
  1055. return nil
  1056. }
  1057. // DeleteWSKHUserInfo 删除网上开户账户信息(客户资料申请)
  1058. func DeleteWSKHUserInfo(userID int) error {
  1059. if userID == 0 {
  1060. return errors.New("userID为0")
  1061. }
  1062. sql := fmt.Sprintf("DELETE FROM WSKH_USERINFO WHERE USERSTATE = 1 AND USERID = %d", userID)
  1063. if _, err := db.GetEngine().Exec(sql); err != nil {
  1064. return err
  1065. }
  1066. return nil
  1067. }
  1068. // GetWSKHUserInfos 获取开户信息列表
  1069. func GetWSKHUserInfos(userName string) ([]Wskhuserinfo, error) {
  1070. engine := db.GetEngine()
  1071. userInfos := make([]Wskhuserinfo, 0)
  1072. session := engine.Table("WSKH_USERINFO")
  1073. if len(userName) > 0 {
  1074. session = session.Where(fmt.Sprintf("USERNAME like '%%%s%%'", userName))
  1075. }
  1076. if err := session.Find(&userInfos); err != nil {
  1077. return nil, err
  1078. }
  1079. return userInfos, nil
  1080. }
  1081. // GetUserInfos 获取用户信息
  1082. // 输入 userName string 客户名称,支持模糊查询
  1083. func GetUserInfos(userName string) ([]Userinfo, error) {
  1084. engine := db.GetEngine()
  1085. userInfos := make([]Userinfo, 0)
  1086. session := engine.Table("USERINFO")
  1087. if len(userName) > 0 {
  1088. session = session.Where(fmt.Sprintf("CUSTOMERNAME like '%%%s%%'", userName))
  1089. }
  1090. if err := session.Find(&userInfos); err != nil {
  1091. return nil, err
  1092. }
  1093. return userInfos, nil
  1094. }
  1095. // UpdateUserAccountStatus 更新用户
  1096. func UpdateUserAccountStatus(userID, accountStatus int) error {
  1097. engine := db.GetEngine()
  1098. if accountStatus != 4 && accountStatus != 6 {
  1099. return errors.New("错误的状态值")
  1100. }
  1101. // 要同时改UserAccount表和UserInfo表的状态
  1102. useraccount := Useraccount{Accountstatus: int32(accountStatus)}
  1103. if _, err := engine.Table("USERACCOUNT").
  1104. Where("USERID = ?", userID).
  1105. Update(&useraccount); err != nil {
  1106. return err
  1107. }
  1108. // UserInfo表的状态为1-正常;2-注销; 3-停用
  1109. userStatus := 1
  1110. if accountStatus == 6 {
  1111. userStatus = 3
  1112. }
  1113. userinfo := Userinfo{Userstatus: int32(userStatus)}
  1114. if _, err := engine.Table("USERINFO").
  1115. Where("USERID = ?", userID).
  1116. Update(&userinfo); err != nil {
  1117. return err
  1118. }
  1119. // Loginaccount表的状态为1-正常;2-冻结(停用);3-无效(注销)
  1120. loginStatus := 1
  1121. if accountStatus == 6 {
  1122. loginStatus = 2
  1123. }
  1124. Loginaccount := Loginaccount{Loginstatus: int32(loginStatus)}
  1125. if _, err := engine.Table("LOGINACCOUNT").
  1126. Where("USERID = ?", userID).
  1127. Update(&Loginaccount); err != nil {
  1128. return err
  1129. }
  1130. return nil
  1131. }
  1132. // GetSysteMmanagerByLoginCode 通过LoginCode获取管理端账号
  1133. func GetSysteMmanagerByLoginCode(loginCode string) (*Systemmanager, error) {
  1134. tmp := make([]Systemmanager, 0)
  1135. if err := db.GetEngine().Where("LOGINCODE = ?", loginCode).Find(&tmp); err != nil {
  1136. return nil, err
  1137. }
  1138. if len(tmp) == 0 {
  1139. return nil, nil
  1140. }
  1141. return &tmp[0], nil
  1142. }
  1143. // GetHedgeOutTaAccount 母账户资金账户获取对冲外部资金账户信息
  1144. func GetHedgeOutTaAccount(accountID int) (*Hedgeouttaaccount, error) {
  1145. var rst Hedgeouttaaccount
  1146. has, err := db.GetEngine().Where("ACCOUNTID = ?", accountID).Get(&rst)
  1147. if err != nil {
  1148. return nil, err
  1149. }
  1150. if !has {
  1151. return nil, nil
  1152. }
  1153. return &rst, nil
  1154. }
  1155. type RelatedTaAccount struct {
  1156. Accountid int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账户ID
  1157. Relateduserid int64 `json:"-" xorm:"'RELATEDUSERID'" form:"relateduserid"` // 关联用户
  1158. }
  1159. func (r *RelatedTaAccount) calc() {
  1160. }
  1161. func (r *RelatedTaAccount) buildSql() string {
  1162. var sqlId utils.SQLVal = `
  1163. select t.accountid
  1164. from taaccount t
  1165. where t.RELATEDUSERID = %v
  1166. `
  1167. sqlId.FormatParam(r.Relateduserid)
  1168. return sqlId.String()
  1169. }
  1170. // GetDataEx
  1171. func (r *RelatedTaAccount) GetDataEx() (interface{}, error) {
  1172. sData := make([]RelatedTaAccount, 0)
  1173. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1174. for i := range sData {
  1175. sData[i].calc()
  1176. }
  1177. return sData, err
  1178. }
  1179. // UpdateUserHeadUrl 更新用户头像地址
  1180. func UpdateUserHeadUrl(userID int, headurl string) error {
  1181. engine := db.GetEngine()
  1182. userinfo := Userinfo{Headurl: headurl}
  1183. if _, err := engine.Table("USERINFO").
  1184. Where("USERID = ?", userID).
  1185. Update(&userinfo); err != nil {
  1186. return err
  1187. }
  1188. return nil
  1189. }
  1190. // UpdateUserInfoWechatAndEmail 更新用户微信号和邮箱地址
  1191. func UpdateUserInfoWechatAndEmail(wechat, email *string, userid int) (err error) {
  1192. if wechat == nil && email == nil {
  1193. return
  1194. }
  1195. w := ""
  1196. if wechat != nil && len(*wechat) > 0 {
  1197. w, err = EncryptField(*wechat)
  1198. if err != nil {
  1199. return
  1200. }
  1201. }
  1202. u := ""
  1203. if email != nil && len(*email) > 0 {
  1204. u, err = EncryptField(*email)
  1205. if err != nil {
  1206. return
  1207. }
  1208. }
  1209. sql := "UPDATE userinfo SET"
  1210. if wechat != nil {
  1211. sql += fmt.Sprintf(" wechat='%v'", w)
  1212. }
  1213. if wechat == nil && email != nil {
  1214. sql += fmt.Sprintf(" email='%v'", u)
  1215. } else if wechat != nil && email != nil {
  1216. sql += fmt.Sprintf(" ,email='%v'", u)
  1217. }
  1218. sql += fmt.Sprintf(" WHERE userid=%v", userid)
  1219. _, err = db.GetEngine().Exec(sql)
  1220. return
  1221. }
  1222. // Gtwithholdsigninfo 代扣签约信息表
  1223. type Gtwithholdsigninfo struct {
  1224. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账户ID
  1225. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  1226. ACCOUNTSIGNSTATUS int32 `json:"accountsignstatus" xorm:"ACCOUNTSIGNSTATUS"` // 账户签约状态 - 1:未签约 3:签约中 4:已签约 6:解约中 7:已解约
  1227. JFXMBH string `json:"jfxmbh" xorm:"JFXMBH"` // 缴费项目编号(变更\解约)
  1228. JFHM string `json:"jfhm" xorm:"JFHM"` // 用户编号(变更\解约)
  1229. KHMC string `json:"khmc" xorm:"KHMC"` // 客户名称
  1230. RWJGH string `json:"rwjgh" xorm:"RWJGH"` // 入网机构号
  1231. KHHHH string `json:"khhhh" xorm:"KHHHH"` // 开户行行号
  1232. ZHLX string `json:"zhlx" xorm:"ZHLX"` // 账户类型
  1233. KKZH string `json:"kkzh" xorm:"KKZH"` // 扣款账号
  1234. YCKFXE float64 `json:"yckfxe" xorm:"YCKFXE"` // 一次扣费限额
  1235. XYQSRQ string `json:"xyqsrq" xorm:"XYQSRQ"` // 协议签署日期(yyyy-mm-dd)
  1236. XYSXRQ string `json:"xysxrq" xorm:"XYSXRQ"` // 协议生效日(yyyy-mm-dd)
  1237. XYDQRQ string `json:"xydqrq" xorm:"XYDQRQ"` // 协议到期日期(yyyy-mm-dd)
  1238. JFRMC string `json:"jfrmc" xorm:"JFRMC"` // 缴费人名称
  1239. JFRZJLX string `json:"jfrzjlx" xorm:"JFRZJLX"` // 缴费人证件类型
  1240. JFRZJHM string `json:"jfrzjhm" xorm:"JFRZJHM"` // 缴费人证件号码
  1241. LXDH string `json:"lxdh" xorm:"LXDH"` // 联系电话
  1242. ADDR string `json:"addr" xorm:"ADDR"` // 地址
  1243. KKSJDW string `json:"kksjdw" xorm:"KKSJDW"` // 扣款时间单位(TU00:年,TU01:月,TU002:日)
  1244. KKSJBC string `json:"kksjbc" xorm:"KKSJBC"` // 扣款时间步长(无限额默认填99)
  1245. KKZQNKFXE float64 `json:"kkzqnkfxe" xorm:"KKZQNKFXE"` // 扣款周期内扣费限额(无限额默认填 0)
  1246. KKZQNXZBS int32 `json:"kkzqnxzbs" xorm:"KKZQNXZBS"` // 扣款周期内限制笔数(无限额默认填 0)
  1247. FILEDNAME string `json:"filedname" xorm:"FILEDNAME"` // 协议附件名称(变更\解约) - 协议签约
  1248. XYDRRQ string `json:"xydrrq" xorm:"XYDRRQ"` // 协议导入时间(变更\解约) - 协议签约
  1249. DXYZM string `json:"dxyzm" xorm:"DXYZM"` // 短信验证码 - 短信签约
  1250. DXSQH string `json:"dxsqh" xorm:"DXSQH"` // 申请号 - 短信签约
  1251. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  1252. CZRMC string `json:"czrmc" xorm:"CZRMC"` // 操作人名称(变更\解约)
  1253. DGJFHM string `json:"dgjfhm" xorm:"DGJFHM"` // 缴费号码(变更\解约)
  1254. DGJFMC string `json:"dgjfmc" xorm:"DGJFMC"` // 缴费名称(变更\解约)
  1255. BYZD2 string `json:"byzd2" xorm:"BYZD2"` // 备用字段2(变更\解约)
  1256. BYZD3 string `json:"byzd3" xorm:"BYZD3"` // 备用字段3(变更\解约)
  1257. BYZD4 string `json:"byzd4" xorm:"BYZD4"` // 备用字段4(变更\解约)
  1258. BYZD5 string `json:"byzd5" xorm:"BYZD5"` // 备用字段5(变更\解约)
  1259. QYZT string `json:"qyzt" xorm:"QYZT"` // 签约状态 - 00- 签约成功 01- 签约失败 10- 解约成功 11- 解约失败 20- 变更成功 21- 变更失败
  1260. QYXYH string `json:"qyxyh" xorm:"QYXYH"` // 签约协议号
  1261. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1262. }
  1263. func (r *Gtwithholdsigninfo) calc() {
  1264. }
  1265. func (r *Gtwithholdsigninfo) buildSql() string {
  1266. var sqlId utils.SQLVal = `
  1267. select
  1268. t.accountid,
  1269. t.userid,
  1270. t.accountsignstatus,
  1271. t.jfxmbh,
  1272. t.jfhm,
  1273. t.khmc,
  1274. t.rwjgh,
  1275. t.khhhh,
  1276. t.zhlx,
  1277. t.kkzh,
  1278. t.yckfxe,
  1279. t.xyqsrq,
  1280. t.xysxrq,
  1281. t.xydqrq,
  1282. t.jfrmc,
  1283. t.jfrzjlx,
  1284. t.jfrzjhm,
  1285. t.lxdh,
  1286. t.addr,
  1287. t.kksjdw,
  1288. t.kksjbc,
  1289. t.kkzqnkfxe,
  1290. t.kkzqnxzbs,
  1291. t.filedname,
  1292. t.xydrrq,
  1293. t.dxyzm,
  1294. t.dxsqh,
  1295. t.remark,
  1296. t.czrmc,
  1297. t.dgjfhm,
  1298. t.dgjfmc,
  1299. t.byzd2,
  1300. t.byzd3,
  1301. t.byzd4,
  1302. t.byzd5,
  1303. t.qyzt,
  1304. t.qyxyh,
  1305. t.updatetime
  1306. from GT_WithholdSignInfo t
  1307. where t.userid = %v
  1308. order by t.updatetime desc
  1309. `
  1310. sqlId.FormatParam(r.USERID)
  1311. return sqlId.String()
  1312. }
  1313. // GetDataEx 从数据库中查询数据
  1314. func (r *Gtwithholdsigninfo) GetDataEx() (interface{}, error) {
  1315. e := db.GetEngine()
  1316. s := e.SQL(r.buildSql())
  1317. sData := make([]Gtwithholdsigninfo, 0)
  1318. if err := s.Find(&sData); err != nil {
  1319. return nil, err
  1320. }
  1321. for i := range sData {
  1322. sData[i].calc()
  1323. }
  1324. return sData, nil
  1325. }
  1326. // Gtwithholddepositapply 代扣入金申请表
  1327. type Gtwithholddepositapply struct {
  1328. AUTOID int64 `json:"autoid" xorm:"AUTOID"` // 自增ID(SEQ_GT_WITHHOLDDEPOSITAPPLY)
  1329. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账户ID
  1330. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 用户ID
  1331. JFXMBH string `json:"jfxmbh" xorm:"JFXMBH"` // 缴费项目编号
  1332. TRANDATE string `json:"trandate" xorm:"TRANDATE"` // 交易日期(yyyymmdd)
  1333. TRANTIME string `json:"trantime" xorm:"TRANTIME"` // 交易时间(hhmmss)
  1334. DEDUCTIONBNUM string `json:"deductionbnum" xorm:"DEDUCTIONBNUM"` // 扣费批次号(缴费项目编号_YYYYMMDD_01)
  1335. BILLINGSNUM string `json:"billingsnum" xorm:"BILLINGSNUM"` // 收费单位流水号(生成唯一的流水号)
  1336. DGJFHM string `json:"dgjfhm" xorm:"DGJFHM"` // 缴费号码
  1337. BILLAMOUNT string `json:"billamount" xorm:"BILLAMOUNT"` // 账单金额
  1338. CZRMC string `json:"czrmc" xorm:"CZRMC"` // 操作人名称
  1339. CODE string `json:"code" xorm:"CODE"` // 状态码 0-解析成功 1-解析失败
  1340. MESSAGE string `json:"message" xorm:"MESSAGE"` // 状态码描述
  1341. CREATETIME time.Time `json:"createtime" xorm:"CREATETIME"` // 创建时间
  1342. BILLRESULT string `json:"billresult" xorm:"BILLRESULT" form:"billresult"` // 批扣结果 - 0-扣费成功、1-扣费失败
  1343. UPDATETIME time.Time `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  1344. CLIENTSERIALNO string `json:"clientserialno" xorm:"CLIENTSERIALNO"` // 客户端流水号
  1345. BILLRESULTREMARK string `json:"billresultremark" xorm:"BILLRESULTREMARK"` // 批扣结果描述
  1346. BeginDate string `json:"-" xorm:"-" form:"begindate"` // 开始交易日
  1347. EndDate string `json:"-" xorm:"-" form:"enddate"` // 结束交易日
  1348. PageEx `xorm:"extends"` // 页码信息
  1349. }
  1350. func (r *Gtwithholddepositapply) calc() {
  1351. }
  1352. func (r *Gtwithholddepositapply) buildSql() string {
  1353. var sqlId utils.SQLVal = `
  1354. select
  1355. t.autoid,
  1356. t.accountid,
  1357. t.userid,
  1358. t.jfxmbh,
  1359. t.trandate,
  1360. t.trantime,
  1361. t.deductionbnum,
  1362. t.billingsnum,
  1363. t.dgjfhm,
  1364. t.billamount,
  1365. t.czrmc,
  1366. t.code,
  1367. t.message,
  1368. t.createtime,
  1369. t.billresult,
  1370. t.updatetime,
  1371. t.clientserialno,
  1372. t.billresultremark
  1373. from GT_WithholdDepositApply t
  1374. where t.userid = %v
  1375. `
  1376. sqlId.FormatParam(r.USERID)
  1377. if r.BeginDate != "" && r.EndDate != "" {
  1378. sqlId.JoinFormat(" AND (t.trandate >= '%v' AND t.trandate <= '%v')", r.BeginDate, r.EndDate)
  1379. }
  1380. sqlId.AndEx("t.billresult", r.BILLRESULT, r.BILLRESULT != "")
  1381. sqlId.OrderByDesc("t.createtime")
  1382. sqlId.Page(r.Page, r.PageSize)
  1383. return sqlId.String()
  1384. }
  1385. func (r *Gtwithholddepositapply) GetDataByPage() (interface{}, error, int, int, int) {
  1386. sData := make([]Gtwithholddepositapply, 0)
  1387. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1388. total := 0
  1389. for i := range sData {
  1390. sData[i].calc()
  1391. total = sData[i].Total
  1392. }
  1393. return sData, err, r.Page, r.PageSize, total
  1394. }