Files
lone-services/services/product/internal/logic/editapplylogic.go
T
gjs be8f89f449
CI / changes (push) Successful in 5s
CI / docker-bff (push) Failing after 7s
CI / docker-product (push) Failing after 5s
CI / docker-admin (push) Failing after 4s
CI / docker-user (push) Failing after 6s
change layout
2026-08-20 15:41:44 +08:00

110 lines
3.1 KiB
Go

package logic
import (
"context"
"lone-services/pkg/log"
"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 {
log.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 {
log.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 {
log.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 {
log.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
}
log.Errorf("edit apply pass: %v", err)
return failResponse(utils.Fail), nil
}
return okResponse(utils.StringEmpty), nil
}