package web_hook import ( logger "eta/eta_mini_ht_api/common/component/log" "eta/eta_mini_ht_api/common/exception" "eta/eta_mini_ht_api/controllers" userService "eta/eta_mini_ht_api/domian/user" "fmt" "time" ) type HTFuturesAccountController struct { controllers.WebHookController } // //// SyncCustomerRiskLevel 风险测评同步接口 //// @Summary 风险测评同步接口 //// @Description 风险测评同步接口 //// @Success 200 {object} controllers.BaseResponse //// @router /riskLevel [post] //func (h *UserController) SyncCustomerRiskLevel() { // controllers.Wrap(&h.BaseController, func() (result *controllers.WrapData, err error) { // result = h.InitWrapData("同步风险等级") // htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig) // webhookRequest := new(WebhookRequest) // h.GetPostParams(webhookRequest) // privateKey, err := authUtils.ParsePrivateKey(htConfig.GetWebhookPrivateKey()) // if err != nil { // err = exception.NewWithException(exception.SysError, err.Error()) // logger.Error("解析私钥失败: %v", err) // h.FailedResult("解析私钥失败", result) // return // } // decodeData, err := authUtils.DecryptWithRSA(privateKey, webhookRequest.Data) // if err != nil { // err = exception.NewWithException(exception.SysError, err.Error()) // logger.Error("解密请求体失败: %v", err) // h.FailedResult("解密请求体失败", result) // return // } // syncCustomerRiskLevelReq := new(SyncCustomerRiskLevelReq) // err = json.Unmarshal(decodeData, syncCustomerRiskLevelReq) // if err != nil { // err = exception.NewWithException(exception.SyncRiskError, err.Error()) // logger.Error("解析请求体失败: %v", err) // h.FailedResult("解析请求体失败", result) // return // } // custInfo := syncCustomerRiskLevelReq.CustInfo // riskInfo := syncCustomerRiskLevelReq.RiskInfo // if custInfo.ClientName == "" { // err = exception.New(exception.SyncRiskError) // h.FailedResult("用户名字不能为空", result) // return // } // if custInfo.MobileTel == "" { // err = exception.New(exception.SyncRiskError) // h.FailedResult("手机号码不能为空", result) // return // } // if custInfo.IdNo == "" { // err = exception.New(exception.SyncRiskError) // h.FailedResult("身份证号不能为空", result) // return // } // //if !utils.IsValidIDCard(custInfo.IdNo) && !utils.IsValidOldIDCard(custInfo.IdNo) { // // err = exception.New(exception.SyncRiskError) // // h.FailedResult("身份证号不合法", result) // // return // //} // if riskInfo.CorpRiskLevel == "" { // err = exception.New(exception.SyncRiskError) // h.FailedResult("风险等级不能为空", result) // return // } // if riskInfo.CorpEndDate == "" { // err = exception.New(exception.SyncRiskError) // h.FailedResult("风险测评有效结束日期不能为空", result) // return // } // err = userService.UpdateRiskLevelInfo(userService.RiskLevelInfoDTO{ // Name: custInfo.ClientName, // PhoneNumber: custInfo.MobileTel, // RiskLevel: riskInfo.CorpRiskLevel, // RiskValidEndDate: riskInfo.CorpEndDate, // }) // if err != nil { // logger.ErrorWithTraceId(h.Ctx, err.Error()) // h.FailedResult(err.Error(), result) // err = exception.New(exception.SyncRiskError) // return // } // logger.InfoWithTraceId(h.Ctx, err.Error()) // result = h.InitWrapData("同步风险等级成功") // h.SuccessResult("success", syncCustomerRiskLevelReq, result) // return // }) //} // SyncCustomerRiskLevel 风险测评同步接口 // @Summary 风险测评同步接口 // @Description 风险测评同步接口 // @Success 200 {object} controllers.BaseResponse // @router /v1/syncRiskLevel/ [post] func (h *HTFuturesAccountController) SyncCustomerRiskLevel() { controllers.WrapWebhook(&h.WebHookController, func() (result *controllers.WrapData, err error) { result = h.InitWrapData("同步风险等级") syncCustomerRiskLevelReq := new(SyncCustomerRiskLevelReq) h.GetPostParams(syncCustomerRiskLevelReq) custInfo := syncCustomerRiskLevelReq.CustInfo riskInfo := syncCustomerRiskLevelReq.RiskInfo if custInfo.ClientName == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("用户名字不能为空", result) return } if custInfo.DealMobileTel == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("手机号码不能为空", result) return } if custInfo.IdNo == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("身份证号不能为空", result) return } if custInfo.MobileTel != "" && custInfo.DealMobileTel != custInfo.MobileTel { err = exception.New(exception.SyncRiskError) h.FailedResult(fmt.Sprintf("柜台预留手机号码不一致,测评手机:%s,柜台预留手机:%s", custInfo.DealMobileTel, custInfo.MobileTel), result) return } if riskInfo.CorpRiskLevel == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("风险等级不能为空", result) return } if riskInfo.CorpEndDate == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("风险测评有效结束日期不能为空", result) return } riskEndDate, parseErr := time.Parse("20060102", riskInfo.CorpEndDate) if parseErr != nil { err = exception.New(exception.SyncRiskError) h.FailedResult("风险测评有效结束日期不合法["+riskInfo.CorpEndDate+"]", result) return } err = userService.UpdateRiskLevelInfo(userService.RiskLevelInfoDTO{ Name: custInfo.ClientName, PhoneNumber: custInfo.DealMobileTel, RiskLevel: fmt.Sprintf("C%s", riskInfo.CorpRiskLevel), RiskValidEndDate: riskEndDate.Format(time.DateOnly), }) if err != nil { logger.ErrorWithTraceId(h.Ctx, err.Error()) h.FailedResult(err.Error(), result) err = exception.New(exception.SyncRiskError) return } result = h.InitWrapData("同步风险等级成功") h.SuccessResult("success", syncCustomerRiskLevelReq, result) return }) } // SyncCustomerAccountInfo 开户信息同步接口 // @Summary 开户信息同步接口 // @Description 开户信息同步接口 // @Success 200 {object} controllers.BaseResponse // @router /v1/syncAccountInfo/ [post] func (h *HTFuturesAccountController) SyncCustomerAccountInfo() { controllers.WrapWebhook(&h.WebHookController, func() (result *controllers.WrapData, err error) { result = h.InitWrapData("同步风险等级") syncCustomerRiskLevelReq := new(SyncCustomerRiskLevelReq) h.GetPostParams(syncCustomerRiskLevelReq) custInfo := syncCustomerRiskLevelReq.CustInfo riskInfo := syncCustomerRiskLevelReq.RiskInfo if custInfo.ClientName == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("用户名字不能为空", result) return } if custInfo.MobileTel == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("手机号码不能为空", result) return } if custInfo.IdNo == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("身份证号不能为空", result) return } //if !utils.IsValidIDCard(custInfo.IdNo) && !utils.IsValidOldIDCard(custInfo.IdNo) { // err = exception.New(exception.SyncRiskError) // h.FailedResult("身份证号不合法", result) // return //} if riskInfo.CorpRiskLevel == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("风险等级不能为空", result) return } if riskInfo.CorpEndDate == "" { err = exception.New(exception.SyncRiskError) h.FailedResult("风险测评有效结束日期不能为空", result) return } err = userService.UpdateRiskLevelInfo(userService.RiskLevelInfoDTO{ Name: custInfo.ClientName, PhoneNumber: custInfo.MobileTel, RiskLevel: fmt.Sprintf("C%s", riskInfo.CorpRiskLevel), RiskValidEndDate: riskInfo.CorpEndDate, }) if err != nil { logger.ErrorWithTraceId(h.Ctx, err.Error()) h.FailedResult(err.Error(), result) err = exception.New(exception.SyncRiskError) return } logger.InfoWithTraceId(h.Ctx, err.Error()) result = h.InitWrapData("同步风险等级成功") h.SuccessResult("success", syncCustomerRiskLevelReq, result) return }) } type SyncCustomerRiskLevelReq struct { CustInfo CustInfo `json:"custInfo"` RiskInfo RiskInfo `json:"riskInfo"` } type CustInfo struct { MobileTel string `json:"mobile_tel"` DealMobileTel string `json:"deal_mobile_tel"` ClientName string `json:"client_name"` IdKind string `json:"id_kind"` IdNo string `json:"id_no"` } type RiskInfo struct { CorpBeginDate string `json:"corp_begin_date"` CorpEndDate string `json:"corp_end_date"` UserInvestTerm string `json:"user_invest_term"` UserInvestKind string `json:"user_invest_kind"` CorpRiskLevel string `json:"corp_risk_level"` } type SyncCustomerAccountInfoReq struct { CustInfo CustInfo `json:"custInfo"` RiskInfo RiskInfo `json:"riskInfo"` }