package logic import ( "context" "fmt" "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 GetStockCheckLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewGetStockCheckLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetStockCheckLogic { return &GetStockCheckLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *GetStockCheckLogic) GetStockCheck(in *pb.GetStockCheckReq) (*pb.StockCheckInfo, error) { check, err := l.svcCtx.StockCheckModel.FindOneByCheckId(l.ctx, in.CheckId) if err != nil { return nil, status.Error(codes.NotFound, "stock check not found") } details, err := l.svcCtx.CheckDetailModel.FindByCheckId(l.ctx, in.CheckId) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } pbDetails := make([]*pb.StockCheckDetailInfo, 0, len(details)) for _, d := range details { productName := "" product, err := l.svcCtx.ProductModel.FindOneByProductId(l.ctx, d.ProductId) if err == nil { productName = product.ProductName } pbDetails = append(pbDetails, &pb.StockCheckDetailInfo{ DetailId: d.DetailId, CheckId: d.CheckId, ProductId: d.ProductId, ProductName: productName, SystemQuantity: fmt.Sprintf("%.2f", d.SystemQuantity), ActualQuantity: fmt.Sprintf("%.2f", d.ActualQuantity), DiffQuantity: fmt.Sprintf("%.2f", d.DiffQuantity), DiffAmount: fmt.Sprintf("%.2f", d.DiffAmount), Remark: d.Remark.String, }) } return &pb.StockCheckInfo{ CheckId: check.CheckId, CheckNo: check.CheckNo, CheckDate: check.CheckDate.Format("2006-01-02"), Checker: check.Checker, Status: check.Status, Remark: check.Remark.String, CreatedAt: check.CreatedAt.Format("2006-01-02 15:04:05"), UpdatedAt: check.UpdatedAt.Format("2006-01-02 15:04:05"), Details: pbDetails, }, nil }