muyu-apiserver/rpc/inventory/internal/logic/getstockchecklogic.go

73 lines
2.0 KiB
Go
Raw Permalink Normal View History

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
}