package admin_complaint import ( "context" "encoding/json" "strconv" "ycc-server/app/main/api/internal/svc" "ycc-server/app/main/api/internal/types" "ycc-server/app/main/model" "ycc-server/common/xerr" "ycc-server/pkg/lzkit/lzUtils" "github.com/pkg/errors" "github.com/zeromicro/go-zero/core/logx" ) type AdminGetComplaintDetailLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewAdminGetComplaintDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminGetComplaintDetailLogic { return &AdminGetComplaintDetailLogic{ Logger: logx.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *AdminGetComplaintDetailLogic) AdminGetComplaintDetail(req *types.AdminGetComplaintDetailReq) (resp *types.AdminGetComplaintDetailResp, err error) { // 获取投诉主表信息 complaint, err := l.svcCtx.ComplaintMainModel.FindOne(l.ctx, req.Id) if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetComplaintDetail, 查询投诉失败 err: %v", err) } // 构建响应 resp = &types.AdminGetComplaintDetailResp{ Id: complaint.Id, Type: complaint.Type, OrderId: lzUtils.NullStringToString(complaint.OrderId), Name: lzUtils.NullStringToString(complaint.Name), Contact: lzUtils.NullStringToString(complaint.Contact), Content: lzUtils.NullStringToString(complaint.Content), Status: lzUtils.NullStringToString(complaint.Status), StatusDescription: lzUtils.NullStringToString(complaint.StatusDescription), Remark: lzUtils.NullStringToString(complaint.Remark), HandlerId: lzUtils.NullStringToString(complaint.HandlerId), CreateTime: complaint.CreateTime.Format("2006-01-02 15:04:05"), UpdateTime: complaint.UpdateTime.Format("2006-01-02 15:04:05"), } if complaint.HandleTime.Valid { resp.HandleTime = complaint.HandleTime.Time.Format("2006-01-02 15:04:05") } // 获取支付宝投诉详情 if complaint.Type == "alipay" { alipayBuilder := l.svcCtx.ComplaintAlipayModel.SelectBuilder(). Where("complaint_id = ?", complaint.Id) alipayComplaints, err := l.svcCtx.ComplaintAlipayModel.FindAll(l.ctx, alipayBuilder, "") if err != nil && !errors.Is(err, model.ErrNotFound) { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetComplaintDetail, 查询支付宝投诉失败 err: %v", err) } if len(alipayComplaints) > 0 { alipayComplaint := alipayComplaints[0] alipayDetail := &types.AlipayComplaintDetail{ Id: alipayComplaint.Id, AlipayId: alipayComplaint.AlipayId, TaskId: alipayComplaint.TaskId, OppositePid: lzUtils.NullStringToString(alipayComplaint.OppositePid), OppositeName: lzUtils.NullStringToString(alipayComplaint.OppositeName), ComplainContent: lzUtils.NullStringToString(alipayComplaint.ComplainContent), TradeNo: lzUtils.NullStringToString(alipayComplaint.TradeNo), Status: lzUtils.NullStringToString(alipayComplaint.Status), StatusDescription: lzUtils.NullStringToString(alipayComplaint.StatusDescription), ProcessCode: lzUtils.NullStringToString(alipayComplaint.ProcessCode), ProcessMessage: lzUtils.NullStringToString(alipayComplaint.ProcessMessage), ProcessRemark: lzUtils.NullStringToString(alipayComplaint.ProcessRemark), ComplainUrl: lzUtils.NullStringToString(alipayComplaint.ComplainUrl), } if alipayComplaint.ComplainAmount.Valid { alipayDetail.ComplainAmount = strconv.FormatFloat(alipayComplaint.ComplainAmount.Float64, 'f', -1, 64) } if alipayComplaint.GmtComplain.Valid { alipayDetail.GmtComplain = alipayComplaint.GmtComplain.Time.Format("2006-01-02 15:04:05") } if alipayComplaint.GmtProcess.Valid { alipayDetail.GmtProcess = alipayComplaint.GmtProcess.Time.Format("2006-01-02 15:04:05") } if alipayComplaint.GmtRiskFinishTime.Valid { alipayDetail.GmtRiskFinishTime = alipayComplaint.GmtRiskFinishTime.Time.Format("2006-01-02 15:04:05") } // 解析图片列表 if alipayComplaint.ProcessImgUrlList.Valid { var imgList []string if err := json.Unmarshal([]byte(alipayComplaint.ProcessImgUrlList.String), &imgList); err == nil { alipayDetail.ProcessImgUrlList = imgList } } if alipayComplaint.CertifyInfo.Valid { var certifyList []string if err := json.Unmarshal([]byte(alipayComplaint.CertifyInfo.String), &certifyList); err == nil { alipayDetail.CertifyInfo = certifyList } } // 获取交易信息列表 tradeBuilder := l.svcCtx.ComplaintAlipayTradeModel.SelectBuilder(). Where("complaint_id = ?", alipayComplaint.Id) trades, err := l.svcCtx.ComplaintAlipayTradeModel.FindAll(l.ctx, tradeBuilder, "") if err != nil && !errors.Is(err, model.ErrNotFound) { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetComplaintDetail, 查询交易信息失败 err: %v", err) } alipayDetail.TradeInfoList = make([]types.AlipayComplaintTradeInfo, 0, len(trades)) for _, trade := range trades { tradeInfo := types.AlipayComplaintTradeInfo{ Id: trade.Id, TradeNo: lzUtils.NullStringToString(trade.TradeNo), OutNo: lzUtils.NullStringToString(trade.OutNo), Status: lzUtils.NullStringToString(trade.Status), StatusDescription: lzUtils.NullStringToString(trade.StatusDescription), } if trade.AlipayTradeId.Valid { tradeInfo.AlipayTradeId = strconv.FormatInt(trade.AlipayTradeId.Int64, 10) } if trade.AlipayComplaintRecordId.Valid { tradeInfo.AlipayComplaintRecordId = strconv.FormatInt(trade.AlipayComplaintRecordId.Int64, 10) } if trade.GmtTrade.Valid { tradeInfo.GmtTrade = trade.GmtTrade.Time.Format("2006-01-02 15:04:05") } if trade.GmtRefund.Valid { tradeInfo.GmtRefund = trade.GmtRefund.Time.Format("2006-01-02 15:04:05") } if trade.Amount.Valid { tradeInfo.Amount = strconv.FormatFloat(trade.Amount.Float64, 'f', -1, 64) } alipayDetail.TradeInfoList = append(alipayDetail.TradeInfoList, tradeInfo) } resp.AlipayComplaint = alipayDetail } } // 获取主动投诉详情 if complaint.Type == "manual" { manualBuilder := l.svcCtx.ComplaintManualModel.SelectBuilder(). Where("complaint_id = ?", complaint.Id) manualComplaints, err := l.svcCtx.ComplaintManualModel.FindAll(l.ctx, manualBuilder, "") if err != nil && !errors.Is(err, model.ErrNotFound) { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "AdminGetComplaintDetail, 查询主动投诉失败 err: %v", err) } if len(manualComplaints) > 0 { manualComplaint := manualComplaints[0] manualDetail := &types.ManualComplaintDetail{ Id: manualComplaint.Id, UserId: lzUtils.NullStringToString(manualComplaint.UserId), Subject: lzUtils.NullStringToString(manualComplaint.Subject), Priority: lzUtils.NullStringToString(manualComplaint.Priority), Source: lzUtils.NullStringToString(manualComplaint.Source), } // 解析附件URL列表 if manualComplaint.AttachmentUrls.Valid { var urlList []string if err := json.Unmarshal([]byte(manualComplaint.AttachmentUrls.String), &urlList); err == nil { manualDetail.AttachmentUrls = urlList } } resp.ManualComplaint = manualDetail } } return resp, nil }