bank.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package models
  2. import (
  3. "mtp2_if/db"
  4. "mtp2_if/utils"
  5. )
  6. // Bankcusbankextendconfig 托管银行扩展配置表
  7. type Bankcusbankextendconfig struct {
  8. CUSBANKID string `json:"cusbankid" xorm:"CUSBANKID" form:"cusbankid" binding:"required"` // 托管银行编号
  9. EXTENDBIZTYPE int32 `json:"extendbiztype" xorm:"EXTENDBIZTYPE" form:"extendbiztype"` // 扩展业务类型 - 1:签约 2:入金 3:出金 4:签约信息修改
  10. FIELDID int64 `json:"fieldid" xorm:"FIELDID"` // 字段ID
  11. ISMANDATORY int32 `json:"ismandatory" xorm:"ISMANDATORY"` // 是否必填 - 0:不必填 1:必填
  12. FIELDCODE string `json:"fieldcode" xorm:"FIELDCODE"` // 字段代码
  13. FIELDNAME string `json:"fieldname" xorm:"FIELDNAME"` // 字段名称
  14. STATUS int32 `json:"status" xorm:"STATUS"` // 状态 - 0:正常 1:注销
  15. FIELDTYPE int32 `json:"fieldtype" xorm:"FIELDTYPE"` // 字段类型 - 1:扩展字段 2:协议字段
  16. USABLETYPE int32 `json:"usabletype" xorm:"USABLETYPE"` // 可用类型 - 1:通用 2:机构专用 3:投资者专用
  17. }
  18. func (r *Bankcusbankextendconfig) calc() {}
  19. func (r *Bankcusbankextendconfig) buildSql() string {
  20. var sqlId utils.SQLVal = `
  21. SELECT
  22. t.cusbankid,
  23. t.extendbiztype,
  24. t.fieldid,
  25. t.ismandatory,
  26. e.fieldcode,
  27. e.fieldname,
  28. e.status,
  29. e.fieldtype,
  30. e.usabletype
  31. FROM Bank_Cusbankextendconfig t
  32. LEFT JOIN BANK_EXTENDFIELD e ON
  33. e.fieldid = t.fieldid
  34. WHERE 1=1
  35. `
  36. sqlId.And("t.cusbankid", r.CUSBANKID)
  37. sqlId.AndEx("t.extendbiztype", r.EXTENDBIZTYPE, r.EXTENDBIZTYPE > 0)
  38. sqlId.OrderBy("t.fieldid")
  39. return sqlId.String()
  40. }
  41. // GetDataEx 获取掉期商品订单详情(交易确认书)
  42. func (r *Bankcusbankextendconfig) GetDataEx() (interface{}, error) {
  43. sData := make([]Bankcusbankextendconfig, 0)
  44. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  45. for i := range sData {
  46. sData[i].calc()
  47. }
  48. return sData, err
  49. }
  50. // Bankbranchnuminfo 银行支行联行号信息表
  51. type Bankbranchnuminfo struct {
  52. BRANCHNUM string `json:"branchnum" xorm:"BRANCHNUM"` // 支行行号
  53. BRANCHNAME string `json:"branchname" xorm:"BRANCHNAME" form:"branchname" binding:"required"` // 支行名称
  54. BRANCHPROVINCE string `json:"branchprovince" xorm:"BRANCHPROVINCE"` // 省份
  55. BRANCHCITY string `json:"branchcity" xorm:"BRANCHCITY"` // 市县
  56. ISEXPIRED string `json:"isexpired" xorm:"ISEXPIRED"` // 是否过期
  57. PageEx `xorm:"extends"` // 页码信息
  58. }
  59. func (r *Bankbranchnuminfo) calc() {
  60. }
  61. func (r *Bankbranchnuminfo) buildSql() string {
  62. var sqlId utils.SQLVal = `
  63. select t.branchnum,
  64. t.branchname,
  65. t.branchprovince,
  66. t.branchcity
  67. from BANK_BRANCHNUMINFO t
  68. where t.branchname like '%%%v%%'
  69. `
  70. sqlId.FormatParam(r.BRANCHNAME)
  71. sqlId.Page(r.Page, r.PageSize)
  72. return sqlId.String()
  73. }
  74. func (r *Bankbranchnuminfo) GetDataByPage() (interface{}, error, int, int, int) {
  75. sData := make([]Bankbranchnuminfo, 0)
  76. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  77. total := 0
  78. for i := range sData {
  79. sData[i].calc()
  80. total = sData[i].Total
  81. }
  82. return sData, err, r.Page, r.PageSize, total
  83. }
  84. type GetAmtInByPaidUrlRsp struct {
  85. ChannelMode string `json:"channelmode"` // 渠道类型:ChillPay,PayerMax,AsiaPay
  86. URL string `json:"url"` // 支付跳转地址
  87. Params string `json:"params"` // 支付参数,只有 AsiaPay 渠道需要
  88. }
  89. func GetAmtInByPaid(accountId int, exchticket string, channelMode string) (rsp *GetAmtInByPaidUrlRsp, err error) {
  90. engine := db.GetEngine()
  91. var has bool
  92. // 尝试 ChillPay
  93. if channelMode == "ChillPay" || channelMode == "" {
  94. var rec Chillpayamtinrec
  95. has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  96. if err != nil {
  97. return
  98. }
  99. if has {
  100. rsp = &GetAmtInByPaidUrlRsp{
  101. ChannelMode: "ChillPay",
  102. URL: rec.PAYMENTURL,
  103. }
  104. return
  105. }
  106. }
  107. // 尝试 PayerMax
  108. if channelMode == "PayerMax" || channelMode == "" {
  109. var rec Payermaxamtinrec
  110. has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  111. if err != nil {
  112. return
  113. }
  114. if has {
  115. rsp = &GetAmtInByPaidUrlRsp{
  116. ChannelMode: "PayerMax",
  117. URL: rec.REDIRECTURL,
  118. }
  119. return
  120. }
  121. }
  122. // 尝试 Asia Pay
  123. if channelMode == "AsiaPay" || channelMode == "" {
  124. var rec Asiapayamtinrec
  125. has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  126. if err != nil {
  127. return
  128. }
  129. if has {
  130. rsp = &GetAmtInByPaidUrlRsp{
  131. ChannelMode: "AsiaPay",
  132. URL: rec.REDIRECTURL,
  133. Params: rec.REDIRECTPARAMS,
  134. }
  135. return
  136. }
  137. }
  138. return
  139. }
  140. func GetCusBankInfos() ([]Bankcusbankinfo, error) {
  141. engine := db.GetEngine()
  142. infos := make([]Bankcusbankinfo, 0)
  143. if err := engine.Find(&infos); err != nil {
  144. return nil, err
  145. }
  146. return infos, nil
  147. }
  148. // PaymentCenterHybridConfig 支付中心混合支付渠道配置信息
  149. type PaymentCenterHybridConfig struct {
  150. CHANNEL_CODE string `json:"channel_code"` // 渠道代码
  151. CHANNEL_NAME string `json:"channel_name"` // 渠道名称
  152. CAN_AMT_IN int32 `json:"can_amt_in"` // 入金是否可用 0-不可用 1-可用
  153. CAN_AMT_OUT int32 `json:"can_amt_out"` // 出金是否可用 0-不可用 1-可用
  154. BankInfos []Hybridbankinfo `json:"bank_infos"` // 混合支付银行信息列表
  155. }
  156. func GetPaymentCenterHybridConfig() (paymentCenterHybridConfigs []PaymentCenterHybridConfig, err error) {
  157. engine := db.GetEngine()
  158. paymentCenterHybridConfigs = make([]PaymentCenterHybridConfig, 0)
  159. hybridchannelconfigs := make([]Hybridchannelconfig, 0)
  160. if err = engine.Find(&hybridchannelconfigs); err != nil {
  161. return
  162. }
  163. for _, item := range hybridchannelconfigs {
  164. paymentCenterHybridConfig := PaymentCenterHybridConfig{
  165. CHANNEL_CODE: item.CHANNEL_CODE,
  166. CHANNEL_NAME: item.CHANNEL_NAME,
  167. CAN_AMT_IN: item.CAN_AMT_IN,
  168. CAN_AMT_OUT: item.CAN_AMT_OUT,
  169. }
  170. hybridbankinfos := make([]Hybridbankinfo, 0)
  171. if err = engine.Where("CHANNEL_CODE = ? AND IS_ENABLED = 1", item.CHANNEL_CODE).Find(&hybridbankinfos); err != nil {
  172. return
  173. }
  174. paymentCenterHybridConfig.BankInfos = hybridbankinfos
  175. paymentCenterHybridConfigs = append(paymentCenterHybridConfigs, paymentCenterHybridConfig)
  176. }
  177. return
  178. }
  179. // Hybridreceiveronboard 混合支付出金接收者表
  180. type Hybridreceiveronboard struct {
  181. CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE"` // 渠道代码
  182. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账户ID
  183. RECEIVERTYPE string `json:"receiver_type" xorm:"RECEIVERTYPE"` // 接收者类型 // 个人-Individual 企业-Organization
  184. NAME string `json:"name" xorm:"NAME"` // 名称 / 企业名称
  185. TAXID string `json:"cert_no" xorm:"TAXID"` // 证件号码
  186. TELNUMBER string `json:"phone_number" xorm:"TELNUMBER"` // 电话号码
  187. BANK string `json:"bank_code" xorm:"BANK"` // 银行代码
  188. BANKACCOUNT string `json:"bank_account" xorm:"BANKACCOUNT"` // 银行卡号
  189. BANK_NAME string `json:"bank_name" xorm:"BANK_NAME"` // 银行名称
  190. USERID int64 `json:"-" xorm:"-"` // 用户ID
  191. }
  192. func (r *Hybridreceiveronboard) calc() {}
  193. func (r *Hybridreceiveronboard) buildSql() string {
  194. var sqlId utils.SQLVal = `
  195. select
  196. t.channel_code,
  197. t.accountid,
  198. t.id,
  199. t.receivertype,
  200. t.name,
  201. t.taxid,
  202. t.telnumber,
  203. t.bank,
  204. t.bankaccount,
  205. t.email,
  206. t.datecreated,
  207. t.datemodified,
  208. t.relationship,
  209. t.status,
  210. b.bank_name
  211. from HYBRID_RECEIVERONBOARD t
  212. inner join HYBRID_BANKINFO b on b.channel_code = t.channel_code
  213. inner join taaccount ta on ta.accountid = t.accountid
  214. inner join useraccount u on u.userid = ta.userid
  215. `
  216. sqlId.And("u.userid", r.USERID)
  217. return sqlId.String()
  218. }
  219. func (r *Hybridreceiveronboard) GetDataEx() (interface{}, error) {
  220. sData := make([]Hybridreceiveronboard, 0)
  221. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  222. for i := range sData {
  223. sData[i].calc()
  224. }
  225. return sData, err
  226. }