qnc-server-old/service/lawsuitQuery.go

299 lines
8.4 KiB
Go
Raw Permalink Normal View History

2024-09-14 10:48:09 +08:00
package service
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"net/url"
"qnc-server/config"
"qnc-server/db"
"qnc-server/model/model"
"qnc-server/model/request"
"qnc-server/model/response"
"qnc-server/utils"
)
type LawsuitQueryService struct {
}
func (l *LawsuitQueryService) QueryList(reqData request.LawsuitQueryReq) (data []response.CaseDetail, err error) {
baseURL := config.ConfigData.LawsuitQuery.ListURL
appCode := config.ConfigData.LawsuitQuery.AppCode
// 创建查询参数
params := url.Values{}
params.Add("sign", utils.GenerateMD5())
params.Add("entityName", reqData.Name)
params.Add("entityId", reqData.CardNo)
params.Add("needBranch", "1")
params.Add("fl", "1")
// 构建完整的请求 URL
requestURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
// 创建请求
reqBody := bytes.NewBuffer([]byte{})
req, err := http.NewRequest("POST", requestURL, reqBody)
if err != nil {
log.Printf("failed 创建请求: %v", err)
return
}
// 设置请求头
req.Header.Set("Authorization", "APPCODE "+appCode)
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Printf("failed 发送请求: %v", err)
return
}
defer resp.Body.Close()
// 读取响应体
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("failed 读取响应体: %v", err)
return
}
var queryResp response.LawsuitQueryListResponse
err = json.Unmarshal(body, &queryResp)
if err != nil {
log.Printf("query list failed to unmarshal response: %v", err)
return
}
switch queryResp.Rc {
case "0000":
var respData response.LawsuitQueryListData
queryRespBytes, err := json.Marshal(queryResp.Data)
if err != nil {
log.Printf("queryResp Marshal Error: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
err = json.Unmarshal(queryRespBytes, &respData)
if err != nil {
log.Printf("sxr queryResp Unmarshal Error: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
return respData.List, nil
case "0001":
log.Printf("涉诉专业版查询成功无数据: %v", queryResp.Msg)
return data, nil
case "1000":
log.Printf("apikey校验失败: %v", err)
return data, fmt.Errorf("响应错误,请稍后再试")
default:
log.Printf("未知响应代码: %s", queryResp.Rc)
return data, fmt.Errorf("响应错误,请稍后再试")
}
}
func (l *LawsuitQueryService) QuerySxrList(reqData request.LawsuitQueryReq) (data []response.SxrDetail, err error) {
baseURL := config.ConfigData.LawsuitQuery.SxrURL
appCode := config.ConfigData.LawsuitQuery.AppCode
// 创建查询参数
params := url.Values{}
params.Add("sign", utils.GenerateMD5())
params.Add("entityName", reqData.Name)
params.Add("entityId", reqData.CardNo)
params.Add("btype", "1")
params.Add("related", "0")
// 构建完整的请求 URL
requestURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
// 创建请求
reqBody := bytes.NewBuffer([]byte{})
req, err := http.NewRequest("POST", requestURL, reqBody)
if err != nil {
log.Printf("failed 创建请求: %v", err)
return
}
// 设置请求头
req.Header.Set("Authorization", "APPCODE "+appCode)
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Printf("failed 发送请求: %v", err)
return
}
defer resp.Body.Close()
// 读取响应体
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("failed 读取响应体: %v", err)
return
}
var queryResp response.LawsuitQueryListResponse
err = json.Unmarshal(body, &queryResp)
if err != nil {
log.Printf("sxr failed to unmarshal response: %v", err)
return
}
switch queryResp.Rc {
case "0000":
var respData []response.SxrDetail
queryRespBytes, err := json.Marshal(queryResp.Data)
if err != nil {
log.Printf("queryResp Marshal Error: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
err = json.Unmarshal(queryRespBytes, &respData)
if err != nil {
log.Printf("sxr queryResp Unmarshal Error: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
return respData, nil
case "0001":
return data, nil
case "1000":
log.Printf("apikey校验失败: %v", err)
return data, fmt.Errorf("响应错误,请稍后再试")
default:
log.Printf("未知响应代码: %s", queryResp.Rc)
return data, fmt.Errorf("响应错误,请稍后再试")
}
}
func (l *LawsuitQueryService) QueryLimitHighList(reqData request.LawsuitQueryReq) (data []response.LimitHightDetail, err error) {
baseURL := config.ConfigData.LawsuitQuery.LimitHightURL
appCode := config.ConfigData.LawsuitQuery.AppCode
// 创建查询参数
params := url.Values{}
params.Add("name", reqData.Name)
params.Add("idcard_number", reqData.CardNo)
params.Add("mobile_number", reqData.Mobile)
// 创建请求
reqBody := bytes.NewBufferString(params.Encode())
req, err := http.NewRequest("POST", baseURL, reqBody)
if err != nil {
log.Printf("failed 创建请求: %v", err)
return
}
// 设置请求头
req.Header.Set("Authorization", "APPCODE "+appCode)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
// 发送请求
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Printf("failed 发送请求: %v", err)
return
}
defer resp.Body.Close()
// 读取响应体
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Printf("failed 读取响应体: %v", err)
return
}
var queryResp response.LawsuitLimitHightQueryListResponse
err = json.Unmarshal(body, &queryResp)
if err != nil {
log.Printf("limit hight failed to unmarshal response: %v", err)
return
}
switch queryResp.Code {
case 200:
var respData response.LimitHightData
queryRespBytes, err := json.Marshal(queryResp.Data)
if err != nil {
log.Printf("limit hight Marshal Error: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
err = json.Unmarshal(queryRespBytes, &respData)
if err != nil {
log.Printf("limit hight failed to unmarshal data: %v", err)
return nil, fmt.Errorf("响应错误,请稍后再试")
}
return respData.CaseList, nil
case 400:
return data, nil
default:
log.Printf("%s响应错误: %s", params.Encode(), queryResp.Msg)
return data, fmt.Errorf("请求错误:%s", queryResp.Msg)
}
}
func (l *LawsuitQueryService) SaveLawsuit(userid uint, reqBody request.LawsuitQueryReq, orderID uint, combinedResponse response.CombinedResponse) (err error) {
ListRespMarshal, err := json.Marshal(combinedResponse.ListResp)
if err != nil {
return err
}
SxrRespMarshal, err := json.Marshal(combinedResponse.SxrResp)
if err != nil {
return err
}
LimitHightRespMarshal, err := json.Marshal(combinedResponse.LimitHightResp)
if err != nil {
return err
}
err = db.DB.Create(&model.Lawsuit{
UserID: userid,
CardNo: reqBody.CardNo,
Name: reqBody.Name,
Mobile: reqBody.Mobile,
ListResp: string(ListRespMarshal),
SxrResp: string(SxrRespMarshal),
LimitHightResp: string(LimitHightRespMarshal),
OrderID: orderID,
}).Error
if err != nil {
return err
}
return
}
func (l *LawsuitQueryService) CheckPayment(userid uint) (payment bool, err error) {
var lawsuits []model.Lawsuit
err = db.DB.Where("userid = ?", userid).Order("id desc").Limit(2).Find(&lawsuits).Error
if err != nil {
return false, err
}
if len(lawsuits) == 0 {
return true, nil
}
checkFields := func(lawsuit model.Lawsuit) bool {
return (lawsuit.ListResp == "" || lawsuit.ListResp == "null") &&
(lawsuit.SxrResp == "" || lawsuit.SxrResp == "null") &&
(lawsuit.LimitHightResp == "" || lawsuit.LimitHightResp == "null")
}
if len(lawsuits) == 1 {
if checkFields(lawsuits[0]) {
return false, nil
}
}
if len(lawsuits) == 2 {
if checkFields(lawsuits[0]) && !checkFields(lawsuits[1]) {
return false, nil
}
}
return true, nil
}
2024-12-25 11:59:33 +08:00
func (a *LawsuitQueryService) LawsuitDataAnalysis(respString string) (data []map[string]interface{}, err error) {
var resp model.YuShanResponse[[]map[string]interface{}]
err = json.Unmarshal([]byte(respString), &resp)
if err != nil {
log.Printf("Lawsuit Unmarshal error%v", err)
return nil, utils.ErrSystemError
}
if resp.Retcode == RetCodeSuccess {
data = resp.Retdata
return data, nil
} else if resp.Retcode == RetCodeEmpty {
log.Printf("Lawsuit resp empty%s", resp.Retmsg)
return data, utils.ErrNoRecord
} else {
log.Printf("Lawsuit resp error%s", resp.Retmsg)
return data, utils.ErrSystemError
}
}