ht_account_service.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package facade
  2. import (
  3. "eta/eta_mini_ht_api/api"
  4. logger "eta/eta_mini_ht_api/common/component/log"
  5. "eta/eta_mini_ht_api/common/exception"
  6. permissionService "eta/eta_mini_ht_api/domian/config"
  7. userService "eta/eta_mini_ht_api/domian/user"
  8. "eta/eta_mini_ht_api/service/product"
  9. "eta/eta_mini_ht_api/service/user"
  10. "fmt"
  11. "strconv"
  12. "strings"
  13. )
  14. var (
  15. htApi = api.GetInstance()
  16. )
  17. const (
  18. RiskUnTest = 432
  19. RiskNotMatch = 433
  20. RiskExpired = 434
  21. )
  22. func SyncRiskInfo(mobile string) (info string, err error) {
  23. return "", nil
  24. }
  25. func CheckUserRiskLevel(templateUserId int, productId int, officialUser userService.OfficialUserDTO) (code int, err error) {
  26. //是否完成风测
  27. //风测是否过期
  28. //风测等级是否符合
  29. if productId <= 0 {
  30. logger.Error("产品id异常:%v", productId)
  31. code = 200
  32. err = exception.New(exception.IllegalProductId)
  33. return
  34. }
  35. if templateUserId <= 0 {
  36. logger.Error("用户id异常:%v", templateUserId)
  37. code = 200
  38. err = exception.New(exception.IllegalTemplateUserId)
  39. return
  40. }
  41. productInfo, err := product.GetProductInfoById(productId)
  42. if err != nil {
  43. logger.Error("获取产品信息失败:%v", err)
  44. code = 200
  45. err = exception.New(exception.ProductInfoError)
  46. return
  47. }
  48. userInfo, userErr := user.GetUserProfile(templateUserId)
  49. if userErr != nil {
  50. logger.Error("获取临时用户信息失败:%v,userId:%v", userErr, templateUserId)
  51. }
  52. customerInfo, err := htApi.GetCustomerRiskLevelInfo(api.ClientSuitInfoReq{
  53. ClientName: officialUser.RealName,
  54. IdKind: officialUser.IdKind,
  55. IdNo: officialUser.IdNo,
  56. })
  57. if err != nil {
  58. logger.Error("api获取客户风险信息失败:%v", err)
  59. if userInfo.RiskLevelStatus == user.RiskUnTest {
  60. logger.Error("客户风险等级未测试,mobile:%v", userInfo.Mobile)
  61. code = RiskUnTest
  62. err = exception.New(exception.RiskUnTestError)
  63. return
  64. }
  65. if userInfo.RiskLevelStatus == user.RiskExpired {
  66. logger.Error("客户风险等级已过期,mobile:%v", userInfo.Mobile)
  67. code = RiskExpired
  68. err = exception.New(exception.RiskExpiredError)
  69. return
  70. }
  71. mapping, mappingErr := permissionService.GetRiskMappingByCustomerRiskLevel(userInfo.RiskLevel)
  72. if mappingErr != nil {
  73. logger.Error("查询产品风险等级映射失败:%v", mappingErr)
  74. code = 200
  75. err = exception.New(exception.QueryRiskMappingError)
  76. return
  77. }
  78. return compareRisk(mapping.ProductRiskLevel, productInfo.RiskLevel)
  79. }
  80. var mapping permissionService.CustomerProductRiskMappingDTO
  81. var mappingErr error
  82. if customerInfo.RiskInfo.CorpRiskLevel == "" {
  83. mapping, mappingErr = permissionService.GetRiskMappingByCustomerRiskLevel(userInfo.RiskLevel)
  84. } else {
  85. mapping, mappingErr = permissionService.GetRiskMappingByCustomerRiskLevel(customerInfo.RiskInfo.CorpRiskLevel)
  86. }
  87. if mappingErr != nil {
  88. logger.Error("查询产品风险等级映射失败:%v", mappingErr)
  89. code = 200
  90. err = exception.NewWithException(exception.QueryRiskMappingError, err.Error())
  91. return
  92. }
  93. return compareRisk(mapping.ProductRiskLevel, productInfo.RiskLevel)
  94. }
  95. func parseRiskLevel(level string) (int, error) {
  96. parts := strings.Split(level, "R")
  97. if len(parts) < 2 {
  98. return 0, fmt.Errorf("无效的风险等级: %s", level)
  99. }
  100. numberStr := parts[1]
  101. number, err := strconv.Atoi(numberStr)
  102. if err != nil {
  103. return 0, fmt.Errorf("无法将风险等级转换为数字: %s", err)
  104. }
  105. return number, nil
  106. }
  107. func compareRisk(cusPdRisk string, pdRisk string) (code int, err error) {
  108. riskLevelNum, err := parseRiskLevel(cusPdRisk)
  109. if err != nil {
  110. logger.Error("客户风险等级映射风险等级解析失败:%v,risk:%v", err, cusPdRisk)
  111. code = 200
  112. err = exception.New(exception.QueryRiskMappingError)
  113. return
  114. }
  115. pRiskNum, riskErr := parseRiskLevel(pdRisk)
  116. if riskErr != nil {
  117. logger.Error("产品风险等级解析失败:risk:%v", pdRisk)
  118. code = 200
  119. err = exception.New(exception.QueryRiskMappingError)
  120. return
  121. }
  122. if pRiskNum > riskLevelNum {
  123. code = RiskNotMatch
  124. err = exception.New(exception.RiskUnMatchError)
  125. return
  126. }
  127. return
  128. }
  129. func GetRiskTestToken(templateUserId int, mobile string) (token string, err error) {
  130. officalUser, err := user.GetUserByTemplateUserId(templateUserId)
  131. if err != nil {
  132. logger.Error("获取用户信息失败:%v", err)
  133. token, err = htApi.EnCodeData(api.CustomerRiskReq{
  134. MobileTel: mobile,
  135. LoginType: "1",
  136. })
  137. } else {
  138. token, err = htApi.EnCodeData(api.CustomerRiskReq{
  139. MobileTel: mobile,
  140. LoginType: "1",
  141. IdNo: officalUser.IdNo,
  142. ClientName: officalUser.RealName,
  143. IdKind: officalUser.IdKind,
  144. })
  145. }
  146. if err != nil {
  147. err = exception.NewWithException(exception.GenerateRiskTestTokenFailed, err.Error())
  148. }
  149. return
  150. }