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/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 NumberLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewNumberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *NumberLogic { return &NumberLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // Number 服务间增减库存:type=1 增加,type=2 减少 func (l *NumberLogic) Number(in *product.NumberReq) (*product.Response, error) { var req validator.ProductNumberValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return outResponse(utils.ErrorParams, msg), nil } return changeProductNumber(l.Logger, req.Id, req.Type, req.Number) } func changeProductNumber(logger logx.Logger, id int64, typ uint32, number uint32) (*product.Response, error) { var info dao.ProductNumberInfo w := modelbase.Params{ Eq: map[string]string{"id": strconv.FormatInt(id, 10)}, } m := model.ProductModel{}.Init() if err := m.GetOne(w, &info); err != nil { logger.Errorf("product number get: %v", err) return failResponse(utils.Fail), nil } if info.Id < 1 { return failResponse(utils.ErrorNotFund), nil } var ( rows int64 err error ) switch typ { case dao.NumberTypeAdd: rows, err = m.IncrNumber(id, number) case dao.NumberTypeSub: rows, err = m.DecrNumber(id, number) default: return failResponse(utils.ErrorParams), nil } if err != nil { logger.Errorf("product number change: %v", err) return failResponse(utils.Fail), nil } if rows < 1 { if typ == dao.NumberTypeSub { return failResponse(utils.ErrorStockNotEnough), nil } return failResponse(utils.Fail), nil } return okResponse(utils.StringEmpty), nil }