From 1572f45e72cc0fa15c029f9ee2a08474104435e6 Mon Sep 17 00:00:00 2001
From: selfcheer <selfcheer@gmail.com>
Date: 星期五, 19 七月 2024 00:48:43 +0800
Subject: [PATCH] 采购单产品列表去掉过滤重复产品的逻辑
---
api/v1/purchase/purchase.go | 213 +++++++++++++++++++++++++++++++++++++----------------
1 files changed, 149 insertions(+), 64 deletions(-)
diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index ebcaad4..398c153 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -10,6 +10,7 @@
"srm/model/common/response"
"srm/model/purchase"
purchaserequest "srm/model/purchase/request"
+ "srm/proto/common"
"srm/proto/purchase_wms"
"strconv"
"strings"
@@ -226,7 +227,7 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
-// @Param id path int true "閲囪喘鍗旾D"
+// @Param data body purchaserequest.SubmitPurchase true "鍙傛暟"
// @Success 200 {object} response.Response{msg=string} "鎻愪氦閲囪喘鍗�"
// @Router /purchase/submit [post]
func (e *PurchaseApi) Submit(c *gin.Context) {
@@ -238,13 +239,13 @@
return
}
warehouse := ""
+ data, err := service.NewPurchaseService().GetPurchase(uint(params.Id))
+ if err != nil {
+ global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+ response.FailWithMessage("鑾峰彇澶辫触", c)
+ return
+ }
if params.Status == purchase.OrderStatusReceived {
- data, err := service.NewPurchaseService().GetPurchase(uint(params.Id))
- if err != nil {
- global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
- response.FailWithMessage("鑾峰彇澶辫触", c)
- return
- }
productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(params.Id))
if err != nil {
global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
@@ -260,10 +261,12 @@
}
client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
resp, err := client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
- Number: data.Number,
- SupplierName: data.Supplier.Name,
- Product: product,
- Source: "SRM_PURCHASE",
+ Number: data.Number,
+ SupplierName: data.Supplier.Name,
+ Product: product,
+ Source: "SRM_PURCHASE",
+ OperationSource: common.OperationSource_OperationSourcePurchase,
+ SalesDetailsNumber: data.SourceOrder,
})
if err != nil {
global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -366,13 +369,20 @@
response.FailWithMessage("鍙傛暟缂哄け", c)
return
}
- data, err := service.NewPurchaseService().GetPurchase(uint(id))
+ server := service.NewPurchaseService()
+ data, err := server.GetPurchase(uint(id))
if err != nil {
global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
response.FailWithMessage("鑾峰彇澶辫触", c)
return
}
- productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(id))
+ productList, err := server.GetPurchaseProductList(uint(id))
+ if err != nil {
+ global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+ response.FailWithMessage("鑾峰彇澶辫触", c)
+ return
+ }
+ confirmInfo, err := server.GetPurchaseProductConfirmInfo(data.Number)
if err != nil {
global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
response.FailWithMessage("鑾峰彇澶辫触", c)
@@ -386,34 +396,78 @@
return
}
- operationInfos := make([]purchaseRes.OperationInfo, 0)
- for _, operation := range info.Operations {
- var oi purchaseRes.OperationInfo
- oi.Number = operation.ProductId
- oi.Name = operation.ProductName
- oi.OperationNumber = operation.Number
- oi.Status = operation.Status
- oi.Principal = data.Principal
- oi.WarehouseName = data.Warehouse
- if operation.OverTime != "" {
- oi.OverTime = operation.OverTime
- oi.OverAmount = operation.Amount
- } else {
- oi.SendAmount = operation.Amount
- }
- for _, products := range productList {
- if products.Product.Number == operation.ProductId {
- oi.Amount = products.Amount
- oi.PurchasePrice = products.Price
- oi.Total = products.Total
- oi.Unit = products.Product.Unit
- oi.Specifications = products.Product.Specifications
- oi.ModelNumber = products.Product.ModelNumber
- break
+ var operationInfos purchaseRes.OperationInfo
+ productInfos := make([]purchaseRes.ProductInfo, 0)
+ inWarehouseInfos := make([]purchaseRes.InWarehouseInfo, 0)
+ //productMap := make(map[string]*purchaseRes.ProductInfo)
+ if len(info.Operations) > 0 {
+ for _, operation := range info.Operations {
+ var pi purchaseRes.ProductInfo
+ var iwi purchaseRes.InWarehouseInfo
+ //if p, ok := productMap[operation.ProductId]; ok {
+ // pi = *p
+ //}
+ pi.Number = operation.ProductId
+ pi.Name = operation.ProductName
+ iwi.Number = operation.ProductId
+ iwi.Name = operation.ProductName
+ iwi.OperationNumber = operation.Number
+ iwi.Status = operation.Status
+ iwi.Principal = data.Principal
+ iwi.WarehouseName = data.Warehouse
+ if operation.OverTime != "" && operation.Status == 4 {
+ iwi.OverTime = operation.OverTime
+ iwi.OverAmount = operation.Amount
+ pi.OverAmount = pi.OverAmount + operation.Amount
}
+ for _, products := range productList {
+ if products.Product.Number == operation.ProductId {
+ pi.Amount = products.Amount
+ pi.PurchasePrice = products.Price
+ pi.Total = products.Total
+ pi.Unit = products.Product.Unit
+ pi.Specifications = products.Product.Specifications
+ pi.ModelNumber = products.Product.ModelNumber
+ break
+ }
+ }
+ for _, confirm := range confirmInfo {
+ if operation.ProductId == confirm.ProductId {
+ pi.SendAmount = confirm.OverReceiveAmount.IntPart()
+ break
+ }
+ }
+ inWarehouseInfos = append(inWarehouseInfos, iwi)
+ //productMap[operation.ProductId] = &pi
+ productInfos = append(productInfos, pi)
}
- operationInfos = append(operationInfos, oi)
+ } else {
+ for _, products := range productList {
+ var pi purchaseRes.ProductInfo
+ pi.Number = products.Product.Number
+ pi.Name = products.Product.Name
+ pi.Amount = products.Amount
+ pi.PurchasePrice = products.Price
+ pi.Total = products.Total
+ pi.Unit = products.Product.Unit
+ pi.Specifications = products.Product.Specifications
+ pi.ModelNumber = products.Product.ModelNumber
+ for _, confirm := range confirmInfo {
+ if products.Product.Number == confirm.ProductId {
+ pi.SendAmount = confirm.OverReceiveAmount.IntPart()
+ break
+ }
+ }
+ //productMap[pi.Number] = &pi
+ productInfos = append(productInfos, pi)
+ }
}
+ //for _, productInfo := range productMap {
+ // productInfos = append(productInfos, *productInfo)
+ //}
+ operationInfos.InWarehouseInfos = inWarehouseInfos
+ operationInfos.ProductInfos = productInfos
+
response.OkWithData(operationInfos, c)
}
@@ -423,22 +477,39 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
-// @Param id path int true "閲囪喘鍗旾D" true "閲囪喘鍗旾D"
+// @Param data body purchaserequest.SubmitPurchase true "鍙傛暟"
// @Success 200 {object} response.Response{msg=string} "鏂扮増鎻愪氦"
-// @Router /purchase/newSubmit/{id} [get]
+// @Router /purchase/newSubmit [post]
func (e *PurchaseApi) NewSubmit(c *gin.Context) {
- id, _ := strconv.Atoi(c.Param("id"))
+ var params purchaserequest.SubmitPurchase
+ err := c.ShouldBindJSON(¶ms)
+ if err != nil {
+ global.GVA_LOG.Error("Submit failed", zap.Error(err))
+ response.FailWithMessage(err.Error(), c)
+ return
+ }
+ id := uint(params.Id)
if id == 0 {
response.FailWithMessage("鍙傛暟缂哄け", c)
return
}
- data, err := service.NewPurchaseService().GetPurchase(uint(id))
+ if params.Status == purchase.OrderStatusCanceled {
+ err = service.NewPurchaseService().Submit(params.Id, params.Status, "")
+ if err != nil {
+ global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err))
+ response.FailWithMessage("鎻愪氦澶辫触", c)
+ return
+ }
+ response.OkWithMessage("鎻愪氦鎴愬姛", c)
+ return
+ }
+ data, err := service.NewPurchaseService().GetPurchase(id)
if err != nil {
global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
response.FailWithMessage("鑾峰彇澶辫触", c)
return
}
- productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(id))
+ productList, err := service.NewPurchaseService().GetPurchaseProductList(id)
if err != nil {
global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
response.FailWithMessage("鑾峰彇澶辫触", c)
@@ -461,7 +532,7 @@
ppc.SurplusReceiveAmount = products.Amount
list = append(list, &ppc)
}
- err = service.NewPurchaseService().SavePurchaseProductConfirm(list)
+ err = service.NewPurchaseService().SavePurchaseProductConfirm(list, true)
if err != nil {
global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err))
@@ -519,7 +590,7 @@
}
server := service.NewPurchaseService()
- err = server.SavePurchaseProductConfirm(list)
+ err = server.SavePurchaseProductConfirm(list, false)
if err != nil {
global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
@@ -614,12 +685,14 @@
}
client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
- Number: purchaseData.Number,
- SupplierName: purchaseData.Supplier.Name,
- SupplierId: int64(purchaseData.SupplierId),
- Product: product,
- Source: "SRM_PURCHASE",
- WarehouseName: purchaseData.Warehouse,
+ Number: purchaseData.Number,
+ SupplierName: purchaseData.Supplier.Name,
+ SupplierId: int64(purchaseData.SupplierId),
+ Product: product,
+ Source: "SRM_PURCHASE",
+ WarehouseName: purchaseData.Warehouse,
+ OperationSource: common.OperationSource_OperationSourcePurchase,
+ SalesDetailsNumber: purchaseData.SourceOrder,
})
if err != nil {
global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -648,8 +721,8 @@
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
-// @Param data body purchaserequest.SaveQualityInspectionInfo true "鍙傛暟"
-// @Success 200 {object} response.Response{data=[]purchase.PurchaseProductConfirm} "鑾峰彇纭淇℃伅"
+// @Param data body purchaserequest.PurchaseProductConfirmInfo true "鍙傛暟"
+// @Success 200 {object} response.Response{} "鑾峰彇纭淇℃伅"
// @Router /purchase/allProductInWarehouse [post]
func (e *PurchaseApi) AllProductInWarehouse(c *gin.Context) {
var params []*purchaserequest.PurchaseProductConfirmInfo
@@ -666,7 +739,7 @@
}
server := service.NewPurchaseService()
- err = server.SavePurchaseProductConfirm(list)
+ err = server.SavePurchaseProductConfirm(list, false)
if err != nil {
global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
@@ -687,21 +760,27 @@
}
product := make([]*purchase_wms.PurchaseProduct, 0)
ids := make([]int, 0)
+ productMap := make(map[string]int64)
for _, inspection := range inspectionList {
- var p purchase_wms.PurchaseProduct
- p.Id = inspection.ProductId
- p.Amount = inspection.Amount.IntPart()
- product = append(product, &p)
+ productMap[inspection.ProductId] = inspection.Amount.IntPart()
ids = append(ids, int(inspection.ID))
+ }
+ for k, v := range productMap {
+ var p purchase_wms.PurchaseProduct
+ p.Id = k
+ p.Amount = v
+ product = append(product, &p)
}
client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
_, err = client.PurchaseToWms(context.Background(), &purchase_wms.PurchaseToWmsRequest{
- Number: purchaseData.Number,
- SupplierName: purchaseData.Supplier.Name,
- SupplierId: int64(purchaseData.SupplierId),
- Product: product,
- Source: "SRM_PURCHASE",
- WarehouseName: purchaseData.Warehouse,
+ Number: purchaseData.Number,
+ SupplierName: purchaseData.Supplier.Name,
+ SupplierId: int64(purchaseData.SupplierId),
+ Product: product,
+ Source: "SRM_PURCHASE",
+ WarehouseName: purchaseData.Warehouse,
+ OperationSource: common.OperationSource_OperationSourcePurchase,
+ SalesDetailsNumber: purchaseData.SourceOrder,
})
if err != nil {
global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
@@ -714,5 +793,11 @@
response.FailWithMessage("璐ㄦ澶辫触", c)
return
}
+ err = server.UpdatePurchaseStatus(purchaseData.Number, purchase.WaitInspection)
+ if err != nil {
+ global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err))
+ response.FailWithMessage("璐ㄦ澶辫触", c)
+ return
+ }
response.OkWithMessage("璐ㄦ鎴愬姛", c)
}
--
Gitblit v1.8.0