package logic import ( "context" "strings" "muyu-apiserver/pkg/tenantctx" "muyu-apiserver/rpc/inventory/internal/svc" "muyu-apiserver/rpc/inventory/pb" "github.com/zeromicro/go-zero/core/logx" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) type DeleteProductBatchLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewDeleteProductBatchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteProductBatchLogic { return &DeleteProductBatchLogic{ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx)} } func (l *DeleteProductBatchLogic) DeleteProductBatch(in *pb.DeleteProductBatchReq) (*pb.Empty, error) { tenantId := tenantctx.ExtractTenantId(l.ctx) batch, err := l.svcCtx.ProductBatchModel.FindOneByProductAndBatchId(l.ctx, tenantId, in.ProductId, in.BatchId) if err != nil { return nil, status.Error(codes.NotFound, "批次不存在") } if strings.HasSuffix(batch.BatchNo, "-B001") { return nil, status.Error(codes.FailedPrecondition, "B001 批次不可删除") } count, err := l.svcCtx.PanModel.CountByBatchId(l.ctx, in.BatchId) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } if count > 0 { return nil, status.Error(codes.FailedPrecondition, "批次已有库存引用,不能删除") } if err := l.svcCtx.ProductBatchModel.SoftDeleteByBatchId(l.ctx, in.BatchId); err != nil { return nil, status.Error(codes.Internal, err.Error()) } return &pb.Empty{}, nil }