diff --git a/pkg/service/bundle/bundleBalance.go b/pkg/service/bundle/bundleBalance.go index 2397e11..9820a51 100644 --- a/pkg/service/bundle/bundleBalance.go +++ b/pkg/service/bundle/bundleBalance.go @@ -287,7 +287,7 @@ func WorkAnalysisConfirm(c *gin.Context) { // 确认数据分析并扣除余量 fmt.Println("res:", res) fmt.Println("err:", err) if err != nil { - service.Error(c, errors.New(common.UpdateWorkStatusFailed)) + service.Error(c, errors.New("驳回失败")) return } service.Success(c, res) @@ -338,7 +338,7 @@ func WorkAnalysisConfirm(c *gin.Context) { // 确认数据分析并扣除余量 fmt.Println("res:", res) fmt.Println("err:", err) if err != nil { - service.Error(c, errors.New(common.UpdateWorkStatusFailed)) + service.Error(c, errors.New("确认失败")) return } // 如果是艺人手动确认,确认操作后,自动标记为待阅读状态 diff --git a/pkg/service/cast/report.go b/pkg/service/cast/report.go index 50089e7..3c08ab1 100644 --- a/pkg/service/cast/report.go +++ b/pkg/service/cast/report.go @@ -401,6 +401,8 @@ func UpdateCompetitiveReportStatus(ctx *gin.Context) { } userInfo := login.GetUserInfoFromC(ctx) newCtx := NewCtxWithUserInfo(ctx) + + // 获取竞品报告详情 resp, err := service.CastProvider.GetCompetitiveReport(context.Background(), &cast.GetCompetitiveReportDetailReq{ Uuid: req.Uuid, }) @@ -413,7 +415,8 @@ func UpdateCompetitiveReportStatus(ctx *gin.Context) { service.Error(ctx, errors.New("非本人竞品报告,无法操作")) return } - // 判断 work_action 是否为 1 或 2 + + // 判断 work_action 是否为 1(确认)或 6(阅读) if req.WorkAction != 1 && req.WorkAction != 6 { service.Error(ctx, errors.New("非法操作")) return @@ -422,9 +425,64 @@ func UpdateCompetitiveReportStatus(ctx *gin.Context) { service.Error(ctx, errors.New("非法操作")) return } + + // 当 WorkAction == 1(确认)且 ConfirmStatus == 1(通过)时,需要检查并扣减余额 + if req.WorkAction == 1 && req.ConfirmStatus == 1 { + // 检查竞品报告状态是否为待确认(状态4) + if resp.WorkReportStatus != 4 { + service.Error(ctx, errors.New("非法状态")) + return + } + + // 查询用户余额 + balanceInfoRes, err := service.BundleProvider.GetBundleBalanceByUserId(context.Background(), &bundle.GetBundleBalanceByUserIdReq{ + UserId: int32(userInfo.ID), + }) + if err != nil { + service.Error(ctx, errors.New(common.GetUserBalanceFailed)) + return + } + + if balanceInfoRes.CompetitiveConsumptionNumber >= balanceInfoRes.CompetitiveNumber { + service.Error(ctx, errors.New("竞品报告余额不足")) + return + } + + // 扣减竞品余额 + var addBalanceReq bundle.AddBundleBalanceReq + addBalanceReq.UserId = int32(userInfo.ID) + addBalanceReq.CompetitiveConsumptionNumber = 1 + balanceResp, err := service.BundleProvider.AddBundleBalance(ctx, &addBalanceReq) + if err != nil { + service.Error(ctx, errors.New("扣除余额失败")) + return + } + + // 更新竞品报告状态,记录扣费类型 + req.CostType = balanceResp.UsedType + _, err = service.CastProvider.UpdateCompetitiveReportStatus(newCtx, req) + if err != nil { + service.Error(ctx, errors.New("确认失败")) + return + } + + // 确认操作后,自动标记为已阅读状态 + _, err = service.CastProvider.UpdateCompetitiveReportStatus(newCtx, &cast.UpdateCompetitiveReportStatusReq{ + WorkAction: cast.WorkActionENUM_READ, + Uuid: req.Uuid, + }) + if err != nil { + service.Error(ctx, errors.New("确认失败")) + return + } + service.Success(ctx, nil) + return + } + + // 驳回或其他操作,直接更新状态 _, err = service.CastProvider.UpdateCompetitiveReportStatus(newCtx, req) if err != nil { - service.Error(ctx, err) + service.Error(ctx, errors.New("操作失败")) return } service.Success(ctx, nil)