From 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 01 七月 2024 22:32:34 +0800
Subject: [PATCH] 月度统计出入库按类型汇总报表定时任务和手动跑任务接口

---
 proto/product_inventory/server.go |   62 ++++++++++++++++++++++++++----
 1 files changed, 53 insertions(+), 9 deletions(-)

diff --git a/proto/product_inventory/server.go b/proto/product_inventory/server.go
index 70fdaa1..41e54d1 100644
--- a/proto/product_inventory/server.go
+++ b/proto/product_inventory/server.go
@@ -5,6 +5,7 @@
 	"errors"
 	"fmt"
 	"github.com/shopspring/decimal"
+	"gorm.io/gorm"
 	"strconv"
 	"strings"
 	"time"
@@ -174,7 +175,8 @@
 	operation.ReceiverPhone = req.Phone
 	operation.ReceiverAddr = req.Address
 	operation.Source = req.Source
-	operation.CompanyID = int(req.ClientId)
+	operation.OperationSource = constvar.OperationSource(req.OperationSource)
+	operation.CompanyID = strconv.FormatInt(req.ClientId, 10)
 	operation.CompanyName = req.ClientName
 	if req.DeliverType == 1 {
 		for _, product := range req.ProductList {
@@ -232,7 +234,7 @@
 			"wms_operation.number,wms_operation.waybill_number, logistic_company.name, wms_operation.base_operation_type, wms_operation.status, wms_operation.created_at").
 		Joins("left join wms_operation on wms_operation.id = wms_operation_details.operation_id").
 		Joins("left join logistic_company on logistic_company.id = wms_operation.logistic_company_id").
-		Where("wms_operation.source_number = ?", req.Number).
+		Where("wms_operation.sales_details_number = ?", req.Number).
 		Where("wms_operation.base_operation_type in ?", []constvar.BaseOperationType{
 			constvar.BaseOperationTypeIncoming, constvar.BaseOperationTypeOutgoing}).
 		Where("wms_operation.status in ?", []constvar.OperationStatus{constvar.OperationStatus_Ready, constvar.OperationStatus_Finish})
@@ -330,6 +332,7 @@
 }
 
 func (s *Server) OrderProductOutput(ctx context.Context, req *OrderProductOutputRequest) (resp *OrderProductOutputResponse, err error) {
+	resp = new(OrderProductOutputResponse)
 	if req.OrderNumber == "" || len(req.Products) == 0 {
 		return nil, errors.New("鍙傛暟缂哄け")
 	}
@@ -348,6 +351,9 @@
 	inputLocationAmountMap := make(map[int64]map[string]decimal.Decimal)
 	outputLocationAmountMap := make(map[int64]map[string]decimal.Decimal)
 	for _, v := range outputList {
+		if req.WarehouseId != 0 && v.WareHouseID != req.WarehouseId {
+			continue
+		}
 		if outputProductMap[v.Number] == nil {
 			simpleInfo := &OutputSimpleInfo{
 				Number: v.Number,
@@ -361,6 +367,9 @@
 		}
 	}
 	for _, v := range inputList {
+		if req.WarehouseId != 0 && v.WareHouseID != req.WarehouseId {
+			continue
+		}
 		if inputProductMap[v.Number] == nil {
 			storeInfo := &StoreInfo{
 				Number: v.Number,
@@ -399,6 +408,9 @@
 
 	LocationIDWarehouseIDMap := make(map[int64]int64)
 	for _, output := range outputList {
+		if req.WarehouseId != 0 && output.WareHouseID != req.WarehouseId {
+			continue
+		}
 		if outputLocationAmountMap[output.LocationID] == nil {
 			outputLocationAmountMap[output.LocationID] = make(map[string]decimal.Decimal)
 		}
@@ -406,6 +418,9 @@
 		outputLocationAmountMap[output.LocationID][output.Number] = outputAmount
 	}
 	for _, input := range inputList {
+		if req.WarehouseId != 0 && input.WareHouseID != req.WarehouseId {
+			continue
+		}
 		LocationIDWarehouseIDMap[input.LocationID] = input.WareHouseID
 
 		if inputLocationAmountMap[input.LocationID] == nil {
@@ -445,21 +460,50 @@
 			productHasSendAmount[productNumber] = productHasSendAmount[productNumber].Add(locationSendAmount)
 		}
 		outputInfoList = append(outputInfoList, &service.OutputInfo{
-			LocationID:   int(locationID),
-			WarehouseID:  int(LocationIDWarehouseIDMap[locationID]),
-			Products:     productInfoList,
-			OperationID:  0,
-			SourceNumber: req.OrderNumber,
+			LocationID:        int(locationID),
+			WarehouseID:       int(LocationIDWarehouseIDMap[locationID]),
+			Products:          productInfoList,
+			OperationID:       0,
+			SourceNumber:      req.OrderNumber,
+			SaleDetailsNumber: req.OrderNumber,
 		})
 	}
 
 	err = service.AddOutputOperations(outputInfoList)
 
 	if err != nil {
+		logx.Errorf("OrderProductOutput AddOutputOperations err:%v", err)
 		return nil, err
 	}
-
 	resp.Code = 1
 	resp.Msg = "success"
-	return nil, nil
+	return resp, nil
+}
+
+func (s *Server) GetOutputOperationInfo(ctx context.Context, req *GetOutputOperationInfoRequest) (*GetOutputOperationInfoResponse, error) {
+	if req.Number == "" {
+		return nil, errors.New("鍙傛暟涓嶈兘涓虹┖")
+	}
+	result := new(GetOutputOperationInfoResponse)
+	first, err := models.NewOperationSearch().SetSourceNumber(req.Number).SetBaseOperationType(constvar.BaseOperationTypeOutgoing).SetStatus(constvar.OperationStatus_Finish).First()
+	if err != nil {
+		if err == gorm.ErrRecordNotFound {
+			return result, nil
+		}
+		return nil, err
+	}
+	details, err := models.NewOperationDetailsSearch().SetOperationId(first.Id).FindNotTotal()
+	if err != nil {
+		return nil, err
+	}
+	list := make([]*OutputProduct, 0)
+	for _, detail := range details {
+		var op OutputProduct
+		op.Number = detail.ProductId
+		op.Amount = detail.Amount.String()
+		list = append(list, &op)
+	}
+	result.Products = list
+
+	return result, nil
 }

--
Gitblit v1.8.0