package logic import ( "context" "lone-services/pkg/modelbase" "lone-services/pkg/utils" "lone-services/pkg/validate" product "lone-services/rpc/product/pb" "lone-services/services/product/internal/apply" "lone-services/services/product/internal/dao" "lone-services/services/product/internal/model" "lone-services/services/product/internal/svc" "lone-services/services/product/validator" "strconv" "github.com/zeromicro/go-zero/core/logx" ) type EditApplyLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewEditApplyLogic(ctx context.Context, svcCtx *svc.ServiceContext) *EditApplyLogic { return &EditApplyLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *EditApplyLogic) EditApply(in *product.EditApplyReq) (*product.Response, error) { var req validator.ProductEditApplyValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return outResponse(utils.ErrorParams, msg), nil } var exist dao.ProductCheckExist err := model.ProductModel{}.Init().GetOne(modelbase.Params{ Eq: map[string]string{"id": strconv.FormatInt(req.Id, 10)}, }, &exist) if err != nil { l.Errorf("edit apply product get: %v", err) return failResponse(utils.Fail), nil } if exist.Id < 1 { return failResponse(utils.ErrorNotFund), nil } adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return failResponse(utils.ErrorNoLoginInfo), nil } adminId := int(adminInfo.ID) info, err := apply.Get(l.ctx, adminId, int(req.Id)) if err != nil { l.Errorf("edit apply get: %v", err) return failResponse(utils.Fail), nil } if info.Status == dao.ApplyStatusWaitPass || info.Status == dao.ApplyStatusDone { return outResponse(utils.Fail, "已经申请过"), nil } if err = apply.Set(l.ctx, adminId, int(req.Id), req.Reason); err != nil { l.Errorf("edit apply set: %v", err) return failResponse(utils.Fail), nil } return okResponse(utils.StringEmpty), nil } // EditApplyPass TODO: 临时接口,企微编辑申请审批对接后删除 func (l *EditApplyLogic) EditApplyPass(in *product.EditApplyPassReq) (*product.Response, error) { var req validator.ProductEditApplyPassValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return outResponse(utils.ErrorParams, msg), nil } var exist dao.ProductCheckExist err := model.ProductModel{}.Init().GetOne(modelbase.Params{ Eq: map[string]string{"id": strconv.FormatInt(req.Id, 10)}, }, &exist) if err != nil { l.Errorf("edit apply pass product get: %v", err) return failResponse(utils.Fail), nil } if exist.Id < 1 { return failResponse(utils.ErrorNotFund), nil } adminInfo := utils.GetUserFromCtx(l.ctx) if adminInfo.ID < utils.NumberOne { return failResponse(utils.ErrorNoLoginInfo), nil } adminId := int(adminInfo.ID) if err = apply.Pass(l.ctx, adminId, int(req.Id)); err != nil { if apply.IsAlreadyHandled(err) { return outResponse(utils.Fail, err.Error()), nil } l.Errorf("edit apply pass: %v", err) return failResponse(utils.Fail), nil } return okResponse(utils.StringEmpty), nil }