ermcpUser.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/1/7 17:31
  4. * @Modify : 2021/1/7 17:31
  5. */
  6. package models
  7. import (
  8. "encoding/hex"
  9. "fmt"
  10. "mtp2_if/db"
  11. "mtp2_if/logger"
  12. "mtp2_if/utils"
  13. )
  14. // ErmcpUserModel 客户资料结构
  15. type ErmcpUserModel struct {
  16. USERID int `json:"userid" xorm:"'USERID'"` // 用户ID
  17. MEMBERUSERID int `json:"memberuserid" xorm:"'MEMBERUSERID'"` // 所属机构ID
  18. USERINFOTYPE string `json:"userinfotype" xorm:"'USERINFOTYPE'"` // 客户类型
  19. CUSTOMERNAME string `json:"customername" xorm:"'CUSTOMERNAME'"` // 企业名称
  20. CARDTYPE int32 `json:"cardtype" xorm:"'CARDTYPE'"` // 证件类型
  21. CARDTYPENAME string `json:"cardtypename" xorm:"'CARDTYPENAME'"` // 证件类型名称
  22. CARDNUM string `json:"cardnum" xorm:"'CARDNUM'"` // 证件号码
  23. MOBILE string `json:"mobile" xorm:"'MOBILE'"` // 手机号码
  24. TELPHONE string `json:"telphone" xorm:"'TELPHONE'"` // 联系电话
  25. ADDRESS string `json:"address" xorm:"'ADDRESS'"` // 通讯地址
  26. REMARK string `json:"remark" xorm:"'REMARK'"` // 备注
  27. STATUS int32 `json:"status" xorm:"'STATUS'"` // 账户状态 - 1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
  28. STATUSDESC string `json:"statusdesc"` // 账户状态中文描述
  29. ATTACHMENT1 string `json:"attachment1" xorm:"'ATTACHMENT1'"` // 附件1
  30. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"'CARDFRONTPHOTOURL'"` // 证件正面图片地址
  31. COUNTRYID int32 `json:"countryid" xorm:"'COUNTRYID'"` // 国家
  32. PROVINCEID int32 `json:"provinceid" xorm:"'PROVINCEID'"` // 省
  33. CITYID int32 `json:"cityid" xorm:"'CITYID'"` // 市
  34. DISTRICTID int32 `json:"districtid" xorm:"'DISTRICTID'"` // 区域
  35. CREATETIME string `json:"createtime" xorm:"'CREATETIME'"` // 创建时间
  36. MODIFYTIME string `json:"modifytime" xorm:"'MODIFYTIME'"` // 修改时间
  37. AUDITTIME string `json:"audittime" xorm:"'AUDITTIME'"` // 审核时间
  38. NICKNAME string `json:"nickname" xorm:"'NICKNAME'"` // 昵称
  39. }
  40. func (r *ErmcpUserModel) buildWskhSql(accStatus string) string {
  41. str := "select t.userid," +
  42. " t.memberareaid MEMBERUSERID," +
  43. " t.USERINFOTYPE," +
  44. " t.CUSTOMERNAME," +
  45. " t.NICKNAME," +
  46. " t.CARDTYPE," +
  47. " e.enumdicname CARDTYPENAME," +
  48. " t.CARDNUM," +
  49. " t.mobilephone MOBILE," +
  50. " t.TELPHONE," +
  51. " t.cardaddress ADDRESS," +
  52. " t.REMARK," +
  53. " t.ATTACHMENT1," +
  54. " t.CARDFRONTPHOTOURL," +
  55. " t.userstate status," +
  56. " t.countryid," +
  57. " t.provinceid," +
  58. " t.districtid," +
  59. " to_char(t.createtime,'yyyy-mm-dd hh24:mi:ss') createtime," +
  60. " t.cityid," +
  61. " to_char(t.modifiedtime,'yyyy-mm-dd hh24:mi:ss') modifytime," +
  62. " to_char(t.auditime,'yyyy-mm-dd hh24:mi:ss') audittime" +
  63. " from wskh_userinfo t" +
  64. " left join enumdicitem e" +
  65. " on t.cardtype = e.enumitemname" +
  66. " and e.enumdiccode = 'certificatetype'" +
  67. " where t.userstate in (%v)" +
  68. " and t.usertype = 6" +
  69. " and t.memberareaid = %v" +
  70. " order by t.modifiedtime desc"
  71. return fmt.Sprintf(str, accStatus, r.MEMBERUSERID)
  72. }
  73. func (r *ErmcpUserModel) buildSql(accStatus string) string {
  74. str := "select t.userid," +
  75. " t.memberuserid," +
  76. " u.USERINFOTYPE," +
  77. " u.CUSTOMERNAME," +
  78. " u.NICKNAME," +
  79. " u.CARDTYPEID CARDTYPE," +
  80. " e.enumdicname CARDTYPENAME," +
  81. " u.CARDNUM," +
  82. " u.MOBILE," +
  83. " u.TELPHONE," +
  84. " u.ADDRESS," +
  85. " u.REMARK," +
  86. " u.ATTACHMENT1," +
  87. " u.CARDFRONTPHOTOURL," +
  88. " t.accountstatus status," +
  89. " u.countryid," +
  90. " u.provinceid," +
  91. " u.districtid," +
  92. " to_char(t.createtime,'yyyy-mm-dd hh24:mi:ss') createtime," +
  93. " to_char(t.modifytime,'yyyy-mm-dd hh24:mi:ss') modifytime," +
  94. " to_char(t.audittime,'yyyy-mm-dd hh24:mi:ss') audittime," +
  95. " u.cityid" +
  96. " from useraccount t" +
  97. " left join userinfo u" +
  98. " on t.userid = u.userid" +
  99. " left join enumdicitem e" +
  100. " on u.cardtypeid = e.enumitemname" +
  101. " and e.enumdiccode = 'certificatetype'" +
  102. " where t.usertype = 6" +
  103. " and t.accountstatus in (%v)" +
  104. " and t.memberuserid = %v"
  105. // 查正常状态,按审核时间排序
  106. if accStatus == "4" {
  107. str += " order by t.audittime desc"
  108. } else if accStatus == "6" {
  109. // 停用状态按修改时间排序
  110. str += " order by t.modifytime desc"
  111. }
  112. return fmt.Sprintf(str, accStatus, r.MEMBERUSERID)
  113. }
  114. // DecryptField 解密卡号和电话号码字段
  115. func (r *ErmcpUserModel) DecryptField(isWskh bool) {
  116. key := "0d299ce2d4105282f7471074cb0f9f9d"
  117. key2, _ := hex.DecodeString(key)
  118. fd := func(str string) string {
  119. if str == "" {
  120. return str
  121. }
  122. d, _ := hex.DecodeString(str)
  123. if dst, err := utils.AESDecrypt(d, key2); err == nil {
  124. return string(dst)
  125. }
  126. return str
  127. }
  128. r.CARDNUM = fd(r.CARDNUM)
  129. r.MOBILE = fd(r.MOBILE)
  130. if !isWskh {
  131. // 正式用户表(非网上开户)需要解密电话号码
  132. r.TELPHONE = fd(r.TELPHONE)
  133. }
  134. if isWskh && len(r.ADDRESS) != 0 { // 地址不为空
  135. r.ADDRESS = fd(r.ADDRESS)
  136. }
  137. }
  138. // DecodeStausName 账户状态名称
  139. func (r *ErmcpUserModel) DecodeStausName(queryType int32) {
  140. if queryType == 1 || queryType == 2 {
  141. // 网上开户状态
  142. if r.STATUS == 1 {
  143. r.STATUSDESC = "未提交"
  144. } else if r.STATUS == 2 || r.STATUS == 4 {
  145. r.STATUSDESC = "待审核"
  146. } else if r.STATUS == 3 || r.STATUS == 5 {
  147. r.STATUSDESC = "审核拒绝"
  148. }
  149. } else if queryType == 3 || queryType == 4 {
  150. if r.STATUS == 4 {
  151. r.STATUSDESC = "正常"
  152. } else if r.STATUS == 6 {
  153. r.STATUSDESC = "已注销"
  154. }
  155. }
  156. }
  157. // GetData 查询客户资料
  158. func (r *ErmcpUserModel) GetData(queryType int32) ([]ErmcpUserModel, error) {
  159. sData := make([]ErmcpUserModel, 0)
  160. e := db.GetEngine()
  161. var sqlId string
  162. var isWskh bool = false
  163. switch queryType {
  164. case 1: //未提交
  165. sqlId = r.buildWskhSql("1")
  166. isWskh = true
  167. case 2: //待审核
  168. sqlId = r.buildWskhSql("2,4,5")
  169. isWskh = true
  170. case 3: //正常
  171. sqlId = r.buildSql("4")
  172. case 4: //已停用
  173. sqlId = r.buildSql("6")
  174. }
  175. s := e.SQL(sqlId)
  176. if err := s.Find(&sData); err != nil {
  177. logger.GetLogger().Errorf("ermcp query fail:%v", err)
  178. return sData, err
  179. }
  180. // 解密
  181. for i := range sData {
  182. sData[i].DecryptField(isWskh)
  183. sData[i].DecodeStausName(queryType)
  184. }
  185. return sData, nil
  186. }