You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.3KB

  1. package services
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/tal-tech/go-zero/core/logx"
  6. "job_risk_third/config"
  7. "job_risk_third/internal/proto"
  8. "job_risk_third/model"
  9. "job_risk_third/pkg/utils"
  10. )
  11. //职务风险防范系统第三方请求业务模块
  12. type JobRiskThirdServices interface {
  13. //PushFeatureDeal 接收风险特征处置结果接口
  14. PushFeatureDeal(req proto.PushFeatureDealRequest) error
  15. //PushUserInfo 获取用户信息接口
  16. PushUserInfo(req proto.PushUserInfoRequest) error
  17. //PushFeatureInfo 推送的风险结果信息
  18. PushFeatureInfo(req proto.PushFeatureInfoRequest) error
  19. // HealthCheck check service health status
  20. HealthCheck() bool
  21. }
  22. type ServiceMiddleware func(JobRiskThirdServices) JobRiskThirdServices
  23. type JobRiskThirdService struct {
  24. }
  25. // HealthCheck implement Service method
  26. // 用于检查服务的健康状态,这里仅仅返回true。
  27. func (s JobRiskThirdService) HealthCheck() bool {
  28. return true
  29. }
  30. //PushFeatureDeal 接收风险特征处置结果接口
  31. func (s JobRiskThirdService) PushFeatureDeal(req proto.PushFeatureDealRequest) error {
  32. jsBody, _ := json.Marshal(req)
  33. body, err := RequestSign(jsBody, proto.PushFeatureDeal)
  34. if err != nil {
  35. return err
  36. }
  37. res := new(proto.ZyResponse)
  38. err = json.Unmarshal(body, res)
  39. if err != nil {
  40. logx.Errorf("PushFeatureDeal call error: %s", err)
  41. return err
  42. }
  43. if res.Status != 200 {
  44. logx.Errorf("PushFeatureDeal call error: %s", res.Message)
  45. return fmt.Errorf(res.Message)
  46. }
  47. return nil
  48. }
  49. //PushUserInfo 获取用户信息接口
  50. func (s JobRiskThirdService) PushUserInfo(req proto.PushUserInfoRequest) error {
  51. jsBody, _ := json.Marshal(req)
  52. body, err := RequestSign(jsBody, proto.PushUserInfo)
  53. if err != nil {
  54. return err
  55. }
  56. res := new(proto.ZyResponse)
  57. err = json.Unmarshal(body, res)
  58. if err != nil {
  59. logx.Errorf("PushUserInfo call error: %s", err)
  60. return err
  61. }
  62. if res.Status != 200 {
  63. logx.Errorf("PushUserInfo call error: %s", res.Message)
  64. return fmt.Errorf(res.Message)
  65. }
  66. return nil
  67. }
  68. //PushFeatureInfo 推送的风险结果信息
  69. func (s JobRiskThirdService) PushFeatureInfo(req proto.PushFeatureInfoRequest) error {
  70. jsBody, _ := json.Marshal(req)
  71. body, err := RequestSign(jsBody, proto.PushFeatureInfo)
  72. if err != nil {
  73. return err
  74. }
  75. res := new(proto.ZyResponse)
  76. err = json.Unmarshal(body, res)
  77. if err != nil {
  78. logx.Errorf("PushFeatureInfo call error: %s", err)
  79. return err
  80. }
  81. if res.Status != 200 {
  82. logx.Errorf("PushFeatureInfo call error: %s", res.Message)
  83. return fmt.Errorf(res.Message)
  84. }
  85. return nil
  86. }
  87. func RequestSign(data []byte, url string) (body []byte, err error) {
  88. item := new(model.TbRequestThirdLog)
  89. reqMap := make(map[string]string)
  90. reqMap["obj"] = string(data)
  91. headerMap := make(map[string]string)
  92. headerMap["Content-Type"] = "application/x-www-form-urlencoded"
  93. b, err := utils.HttpDo(config.Cfg.GetString("sign_server.url"), "POST", reqMap, headerMap)
  94. if err != nil {
  95. logx.Error(err)
  96. return nil, err
  97. }
  98. item.SourceData = string(data)
  99. item.CryptoData = string(b)
  100. signResponse := new(proto.SignResponse)
  101. err = json.Unmarshal(b, signResponse)
  102. if err != nil {
  103. logx.Error(err)
  104. return nil, err
  105. }
  106. requestStruct := new(proto.ZyBaseRequest)
  107. err = json.Unmarshal([]byte(signResponse.Data), requestStruct)
  108. if err != nil {
  109. logx.Error(err)
  110. return nil, err
  111. }
  112. requestMap := make(map[string]string)
  113. requestId := utils.NewId()
  114. requestMap["data"] = requestStruct.Data
  115. requestMap["key"] = requestStruct.Key
  116. requestMap["salt"] = requestStruct.Salt
  117. requestMap["sign"] = requestStruct.Sign
  118. requestMap["source"] = requestStruct.Source
  119. //decryptMap := make(map[string]string)
  120. //decryptMap["reqData"]=string(b)
  121. //b, err = utils.HttpDo("http://sign.ningdatech.com/decrypt","POST",decryptMap,headerMap)
  122. //if err!= nil{
  123. // logx.Error(err)
  124. //}
  125. //logx.Info(string(b))
  126. headerMap["Content-Type"] = "application/json"
  127. resBody, err := utils.HttpDo(fmt.Sprintf("%s:%d%s", config.Cfg.GetString("zy_host.address"),
  128. config.Cfg.GetInt("zy_host.port"), url), "POST", requestMap, headerMap)
  129. if err != nil {
  130. logx.Error(err)
  131. return nil, err
  132. }
  133. item.RequestId = requestId
  134. item.RequestUri = fmt.Sprintf("%s:%d%s", config.Cfg.GetString("zy_host.address"),
  135. config.Cfg.GetInt("zy_host.port"), url)
  136. item.ResultData = string(resBody)
  137. go model.DB.Create(item)
  138. return resBody, err
  139. }