bank.go 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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. BankCode string `json:"bankcode"` // 银行代码 - 混合支付
  89. }
  90. func GetAmtInByPaid(accountId int, exchticket string, channelMode string) (rsp *GetAmtInByPaidUrlRsp, err error) {
  91. engine := db.GetEngine()
  92. var has bool
  93. // 尝试 ChillPay
  94. if channelMode == "chillpay" || channelMode == "" {
  95. var rec Chillpayamtinrec
  96. has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  97. if err != nil {
  98. return
  99. }
  100. if has {
  101. rsp = &GetAmtInByPaidUrlRsp{
  102. ChannelMode: "chillpay",
  103. URL: rec.PAYMENTURL,
  104. }
  105. return
  106. }
  107. }
  108. // 尝试 PayerMax
  109. if channelMode == "payermax" || channelMode == "" {
  110. var rec Payermaxamtinrec
  111. has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  112. if err != nil {
  113. return
  114. }
  115. if has {
  116. rsp = &GetAmtInByPaidUrlRsp{
  117. ChannelMode: "payermax",
  118. URL: rec.REDIRECTURL,
  119. }
  120. return
  121. }
  122. }
  123. // 尝试 Asia Pay
  124. // if channelMode == "asiapay" || channelMode == "" {
  125. // var rec Asiapayamtinrec
  126. // has, err = engine.Where("accountid = ? and exch_seq = ? and deal_status = 2", accountId, exchticket).Get(&rec)
  127. // if err != nil {
  128. // return
  129. // }
  130. // if has {
  131. // rsp = &GetAmtInByPaidUrlRsp{
  132. // ChannelMode: "asiapay",
  133. // URL: rec.REDIRECTURL,
  134. // Params: rec.REDIRECTPARAMS,
  135. // }
  136. // return
  137. // }
  138. // }
  139. // 尝试混合支付
  140. if channelMode == "hybrid" || channelMode == "" {
  141. var rec Hybridamtrec
  142. has, err = engine.Where("TRADE_ACCT = ? and exch_seq = ? and deal_status = 2 and out_in_flag = 1", accountId, exchticket).Get(&rec)
  143. if err != nil {
  144. return
  145. }
  146. if has {
  147. rsp = &GetAmtInByPaidUrlRsp{
  148. ChannelMode: "hybrid",
  149. URL: rec.PAYMENT_URL,
  150. BankCode: rec.BANK_CODE,
  151. }
  152. return
  153. }
  154. }
  155. return
  156. }
  157. func GetCusBankInfos() ([]Bankcusbankinfo, error) {
  158. engine := db.GetEngine()
  159. infos := make([]Bankcusbankinfo, 0)
  160. if err := engine.Find(&infos); err != nil {
  161. return nil, err
  162. }
  163. return infos, nil
  164. }
  165. // PaymentCenterHybridConfig 支付中心混合支付渠道配置信息
  166. type PaymentCenterHybridConfig struct {
  167. CHANNEL_CODE string `json:"channel_code"` // 渠道代码
  168. CHANNEL_NAME string `json:"channel_name"` // 渠道名称
  169. CAN_AMT_IN int32 `json:"can_amt_in"` // 入金是否可用 0-不可用 1-可用
  170. CAN_AMT_OUT int32 `json:"can_amt_out"` // 出金是否可用 0-不可用 1-可用
  171. InBankInfos map[string][]Hybridbankinfo `json:"in_bank_infos"` // 入金银行信息列表
  172. OutBankInfos map[string][]Hybridbankinfo `json:"out_bank_infos"` // 出金银行信息列表
  173. }
  174. func GetPaymentCenterHybridConfig() (paymentCenterHybridConfigs []PaymentCenterHybridConfig, err error) {
  175. engine := db.GetEngine()
  176. paymentCenterHybridConfigs = make([]PaymentCenterHybridConfig, 0)
  177. hybridchannelconfigs := make([]Hybridchannelconfig, 0)
  178. if err = engine.Find(&hybridchannelconfigs); err != nil {
  179. return
  180. }
  181. for _, item := range hybridchannelconfigs {
  182. paymentCenterHybridConfig := PaymentCenterHybridConfig{
  183. CHANNEL_CODE: item.CHANNEL_CODE,
  184. CHANNEL_NAME: item.CHANNEL_NAME,
  185. CAN_AMT_IN: item.CAN_AMT_IN,
  186. CAN_AMT_OUT: item.CAN_AMT_OUT,
  187. }
  188. // 入金银行信息
  189. in_datas := make([]Hybridbankinfo, 0)
  190. if err = engine.Where("CHANNEL_CODE = ? AND OUT_IN_FLAG = 1 AND IS_ENABLED = 1", item.CHANNEL_CODE).Find(&in_datas); err != nil {
  191. return
  192. }
  193. in := make(map[string][]Hybridbankinfo)
  194. for _, data := range in_datas {
  195. in[data.METHOD_TYPE] = append(in[data.METHOD_TYPE], data)
  196. }
  197. paymentCenterHybridConfig.InBankInfos = in
  198. // 出金银行信息
  199. out_datas := make([]Hybridbankinfo, 0)
  200. if err = engine.Where("CHANNEL_CODE = ? AND OUT_IN_FLAG = 0 AND IS_ENABLED = 1", item.CHANNEL_CODE).Find(&out_datas); err != nil {
  201. return
  202. }
  203. out := make(map[string][]Hybridbankinfo)
  204. for _, data := range out_datas {
  205. out[data.METHOD_TYPE] = append(out[data.METHOD_TYPE], data)
  206. }
  207. paymentCenterHybridConfig.OutBankInfos = out
  208. paymentCenterHybridConfigs = append(paymentCenterHybridConfigs, paymentCenterHybridConfig)
  209. }
  210. return
  211. }
  212. // Hybridreceiveronboard 混合支付出金接收者表
  213. type Hybridreceiveronboard struct {
  214. CHANNEL_CODE string `json:"channel_code" xorm:"CHANNEL_CODE"` // 渠道代码
  215. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账户ID
  216. RECEIVERTYPE string `json:"receiver_type" xorm:"RECEIVERTYPE"` // 接收者类型 // 个人-Individual 企业-Organization
  217. NAME string `json:"name" xorm:"NAME"` // 名称 / 企业名称
  218. TAXID string `json:"cert_no" xorm:"TAXID"` // 证件号码
  219. TELNUMBER string `json:"phone_number" xorm:"TELNUMBER"` // 电话号码
  220. BANK string `json:"bank_code" xorm:"BANK"` // 银行代码
  221. BANKACCOUNT string `json:"bank_account" xorm:"BANKACCOUNT"` // 银行卡号
  222. BANKBRANCH string `json:"bankbranch" xorm:"BANKBRANCH"` // 银行支行名称
  223. BANK_NAME string `json:"bank_name" xorm:"BANK_NAME"` // 银行名称
  224. METHOD_TYPE string `json:"method_type" xorm:"METHOD_TYPE"` // 银行卡号
  225. USERID int64 `json:"-" xorm:"-"` // 用户ID
  226. }
  227. func (r *Hybridreceiveronboard) calc() {
  228. if r.CHANNEL_CODE == "mypay" {
  229. r.BANK_NAME = r.BANK
  230. }
  231. }
  232. func (r *Hybridreceiveronboard) buildSql() string {
  233. var sqlId utils.SQLVal = `
  234. select
  235. t.channel_code,
  236. t.accountid,
  237. t.id,
  238. t.receivertype,
  239. t.name,
  240. t.taxid,
  241. t.telnumber,
  242. t.bank,
  243. t.bankaccount,
  244. t.email,
  245. t.datecreated,
  246. t.datemodified,
  247. t.relationship,
  248. t.status,
  249. t.bankbranch,
  250. b.bank_name,
  251. b.method_type
  252. from HYBRID_RECEIVERONBOARD t
  253. left join HYBRID_BANKINFO b on b.channel_code = t.channel_code and b.bank_code = t.bank and b.out_in_flag = 0
  254. inner join taaccount ta on ta.accountid = t.accountid
  255. inner join useraccount u on u.userid = ta.userid
  256. `
  257. sqlId.And("u.userid", r.USERID)
  258. return sqlId.String()
  259. }
  260. func (r *Hybridreceiveronboard) GetDataEx() (interface{}, error) {
  261. sData := make([]Hybridreceiveronboard, 0)
  262. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  263. for i := range sData {
  264. sData[i].calc()
  265. }
  266. return sData, err
  267. }