123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package facade
- import (
- "eta/eta_mini_ht_api/api"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- permissionService "eta/eta_mini_ht_api/domian/config"
- userService "eta/eta_mini_ht_api/domian/user"
- "eta/eta_mini_ht_api/service/product"
- "eta/eta_mini_ht_api/service/user"
- "fmt"
- "strconv"
- "strings"
- )
- var (
- htApi = api.GetInstance()
- )
- const (
- RiskUnTest = 432
- RiskNotMatch = 433
- RiskExpired = 434
- )
- func SyncRiskInfo(mobile string) (info string, err error) {
- return "", nil
- }
- func CheckUserRiskLevel(templateUserId int, productId int, officialUser userService.OfficialUserDTO) (code int, err error) {
- //是否完成风测
- //风测是否过期
- //风测等级是否符合
- if productId <= 0 {
- logger.Error("产品id异常:%v", productId)
- code = 200
- err = exception.New(exception.IllegalProductId)
- return
- }
- if templateUserId <= 0 {
- logger.Error("用户id异常:%v", templateUserId)
- code = 200
- err = exception.New(exception.IllegalTemplateUserId)
- return
- }
- productInfo, err := product.GetProductInfoById(productId)
- if err != nil {
- logger.Error("获取产品信息失败:%v", err)
- code = 200
- err = exception.New(exception.ProductInfoError)
- return
- }
- userInfo, userErr := user.GetUserProfile(templateUserId)
- if userErr != nil {
- logger.Error("获取临时用户信息失败:%v,userId:%v", userErr, templateUserId)
- }
- customerInfo, err := htApi.GetCustomerRiskLevelInfo(api.ClientSuitInfoReq{
- ClientName: officialUser.RealName,
- IdKind: officialUser.IdKind,
- IdNo: officialUser.IdNo,
- })
- if err != nil {
- logger.Error("api获取客户风险信息失败:%v", err)
- if userInfo.RiskLevelStatus == user.RiskUnTest {
- logger.Error("客户风险等级未测试,mobile:%v", userInfo.Mobile)
- code = RiskUnTest
- err = exception.New(exception.RiskUnTestError)
- return
- }
- if userInfo.RiskLevelStatus == user.RiskExpired {
- logger.Error("客户风险等级已过期,mobile:%v", userInfo.Mobile)
- code = RiskExpired
- err = exception.New(exception.RiskExpiredError)
- return
- }
- mapping, mappingErr := permissionService.GetRiskMappingByCustomerRiskLevel(userInfo.RiskLevel)
- if mappingErr != nil {
- logger.Error("查询产品风险等级映射失败:%v", mappingErr)
- code = 200
- err = exception.New(exception.QueryRiskMappingError)
- return
- }
- return compareRisk(mapping.ProductRiskLevel, productInfo.RiskLevel)
- }
- var mapping permissionService.CustomerProductRiskMappingDTO
- var mappingErr error
- if customerInfo.RiskInfo.CorpRiskLevel == "" {
- mapping, mappingErr = permissionService.GetRiskMappingByCustomerRiskLevel(userInfo.RiskLevel)
- } else {
- mapping, mappingErr = permissionService.GetRiskMappingByCustomerRiskLevel(customerInfo.RiskInfo.CorpRiskLevel)
- }
- if mappingErr != nil {
- logger.Error("查询产品风险等级映射失败:%v", mappingErr)
- code = 200
- err = exception.NewWithException(exception.QueryRiskMappingError, err.Error())
- return
- }
- return compareRisk(mapping.ProductRiskLevel, productInfo.RiskLevel)
- }
- func parseRiskLevel(level string) (int, error) {
- parts := strings.Split(level, "R")
- if len(parts) < 2 {
- return 0, fmt.Errorf("无效的风险等级: %s", level)
- }
- numberStr := parts[1]
- number, err := strconv.Atoi(numberStr)
- if err != nil {
- return 0, fmt.Errorf("无法将风险等级转换为数字: %s", err)
- }
- return number, nil
- }
- func compareRisk(cusPdRisk string, pdRisk string) (code int, err error) {
- riskLevelNum, err := parseRiskLevel(cusPdRisk)
- if err != nil {
- logger.Error("客户风险等级映射风险等级解析失败:%v,risk:%v", err, cusPdRisk)
- code = 200
- err = exception.New(exception.QueryRiskMappingError)
- return
- }
- pRiskNum, riskErr := parseRiskLevel(pdRisk)
- if riskErr != nil {
- logger.Error("产品风险等级解析失败:risk:%v", pdRisk)
- code = 200
- err = exception.New(exception.QueryRiskMappingError)
- return
- }
- if pRiskNum > riskLevelNum {
- code = RiskNotMatch
- err = exception.New(exception.RiskUnMatchError)
- return
- }
- return
- }
- func GetRiskTestToken(templateUserId int, mobile string) (token string, err error) {
- officalUser, err := user.GetUserByTemplateUserId(templateUserId)
- if err != nil {
- logger.Error("获取用户信息失败:%v", err)
- token, err = htApi.EnCodeData(api.CustomerRiskReq{
- MobileTel: mobile,
- LoginType: "1",
- })
- } else {
- token, err = htApi.EnCodeData(api.CustomerRiskReq{
- MobileTel: mobile,
- LoginType: "1",
- IdNo: officalUser.IdNo,
- ClientName: officalUser.RealName,
- IdKind: officalUser.IdKind,
- })
- }
- if err != nil {
- err = exception.NewWithException(exception.GenerateRiskTestTokenFailed, err.Error())
- }
- return
- }
|