From ab9212db94528e1a0b70868ab3808761ef94d25b Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期六, 30 三月 2024 17:09:31 +0800
Subject: [PATCH] 修正已入库数量

---
 api/v1/purchase/purchase.go |  580 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 561 insertions(+), 19 deletions(-)

diff --git a/api/v1/purchase/purchase.go b/api/v1/purchase/purchase.go
index 1d220d6..1066c6c 100644
--- a/api/v1/purchase/purchase.go
+++ b/api/v1/purchase/purchase.go
@@ -1,18 +1,18 @@
 package purchase
 
 import (
+	"context"
 	"github.com/gin-gonic/gin"
-	"github.com/mitchellh/mapstructure"
+	"github.com/shopspring/decimal"
 	"go.uber.org/zap"
 	"gorm.io/gorm"
 	"srm/global"
-	"srm/model/common/request"
 	"srm/model/common/response"
 	"srm/model/purchase"
 	purchaserequest "srm/model/purchase/request"
+	"srm/proto/purchase_wms"
 	"strconv"
 	"strings"
-
 	//"srm/model/purchase"
 
 	//"srm/model/purchase"
@@ -29,24 +29,41 @@
 // @Security  ApiKeyAuth
 // @accept    application/json
 // @Produce   application/json
-// @Param     data  body     purchaserequest.AddPurchase   true  "閲囪喘鍗曠敤鎴峰悕, 閲囪喘鍗曟墜鏈哄彿鐮�"
+// @Param     data  body     purchaserequest.AddPurchase   true  "閲囪喘鍗�,閲囪喘鍗曚骇鍝�"
 // @Success   200   {object}  response.Response{msg=string}  "鍒涘缓閲囪喘鍗�"
 // @Router    /purchase/purchase [post]
 func (e *PurchaseApi) CreatePurchase(c *gin.Context) {
 	var params purchaserequest.AddPurchase
 	err := c.ShouldBindJSON(&params)
 	if err != nil {
+		global.GVA_LOG.Error("Add Purchase failed", zap.Error(err))
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
 
 	var purchaseRecord purchase.Purchase
-	if err := mapstructure.Decode(params.Purchase, &purchaseRecord); err != nil {
+	if err := utils.AssignTo(params.Purchase, &purchaseRecord); err != nil {
+		global.GVA_LOG.Error("Add Purchase failed", zap.Error(err))
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
 
 	purchaseRecord.ID = 0
+	purchaseRecord.Status = purchase.OrderStatusConfirmed
+	purchaseRecord.HandledBy = "admin"
+	purchaseRecord.Creator = "admin"
+	purchaseRecord.OrderType = "閲囪喘璁㈠崟"
+
+	if !purchaseRecord.WholeDiscountType.IsValid(purchaseRecord.TotalPrice, purchaseRecord.WholeDiscount) {
+		response.FailWithMessage("鏁村崟鎶樻墸鏁板�间笉姝g‘", c)
+		return
+	}
+
+	if !purchaseRecord.PriceAdjustmentType.IsValid(purchaseRecord.TotalPrice, purchaseRecord.PriceAdjustment) {
+		response.FailWithMessage("浠锋牸璋冩暣鏁板�间笉姝g‘", c)
+		return
+	}
+
 	err = service.NewPurchaseService().CreatePurchase(&purchaseRecord, params.ProductList)
 
 	if err != nil {
@@ -55,7 +72,7 @@
 			return
 		}
 		global.GVA_LOG.Error("鍒涘缓澶辫触!", zap.Error(err))
-		response.FailWithMessage("鍒涘缓澶辫触", c)
+		response.FailWithMessage(err.Error(), c)
 		return
 	}
 	response.OkWithMessage("鍒涘缓鎴愬姛", c)
@@ -103,11 +120,13 @@
 	}
 
 	var purchaseRecord purchase.Purchase
-	if err := mapstructure.Decode(params.Purchase, &purchaseRecord); err != nil {
+	if err := utils.AssignTo(params.Purchase, &purchaseRecord); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
 
+	purchaseRecord.HandledBy = "admin"
+	purchaseRecord.Creator = "admin"
 	err = service.NewPurchaseService().UpdatePurchase(&purchaseRecord, params.ProductList)
 	if err != nil {
 		global.GVA_LOG.Error("鏇存柊澶辫触!", zap.Error(err))
@@ -144,7 +163,26 @@
 		response.FailWithMessage("鑾峰彇澶辫触", c)
 		return
 	}
-	response.OkWithDetailed(purchaseRes.PurchaseResponse{Purchase: data, ProductList: productList}, "鑾峰彇鎴愬姛", c)
+	respProductList := make([]*purchaseRes.PurchaseProducts, len(productList))
+	err = utils.AssignTo(productList, &respProductList)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
+	for k, item := range productList {
+		respProductList[k].Amount = item.Amount
+		respProductList[k].Price = item.Price
+		respProductList[k].Total = item.Total
+		err = utils.AssignTo(item.Product, &respProductList[k])
+		if err != nil {
+			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+			response.FailWithMessage("鑾峰彇澶辫触", c)
+			return
+		}
+	}
+
+	response.OkWithDetailed(purchaseRes.PurchaseResponse{Purchase: data, ProductList: respProductList}, "鑾峰彇鎴愬姛", c)
 }
 
 // GetPurchaseList
@@ -153,11 +191,11 @@
 // @Security  ApiKeyAuth
 // @accept    application/json
 // @Produce   application/json
-// @Param     data  query     request.PageInfo                                        true  "椤电爜, 姣忛〉澶у皬"
+// @Param     data  query     purchaserequest.PurchaseSearch                                        true  "鍙傛暟"
 // @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "鍒嗛〉鑾峰彇閲囪喘鍗曞垪琛�,杩斿洖鍖呮嫭鍒楄〃,鎬绘暟,椤电爜,姣忛〉鏁伴噺"
 // @Router    /purchase/purchaseList [get]
 func (e *PurchaseApi) GetPurchaseList(c *gin.Context) {
-	var pageInfo request.PageInfo
+	var pageInfo purchaserequest.PurchaseSearch
 	err := c.ShouldBindQuery(&pageInfo)
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
@@ -168,14 +206,14 @@
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	PurchaseList, total, err := service.NewPurchaseService().GetPurchaseList(pageInfo)
+	purchaseList, total, err := service.NewPurchaseService().GetPurchaseList(pageInfo)
 	if err != nil {
 		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
 		response.FailWithMessage("鑾峰彇澶辫触"+err.Error(), c)
 		return
 	}
 	response.OkWithDetailed(response.PageResult{
-		List:     PurchaseList,
+		List:     purchaseList,
 		Total:    total,
 		Page:     pageInfo.Page,
 		PageSize: pageInfo.PageSize,
@@ -188,16 +226,56 @@
 // @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/{id} [post]
+// @Router    /purchase/submit [post]
 func (e *PurchaseApi) Submit(c *gin.Context) {
-	id, _ := strconv.Atoi(c.Param("id"))
-	if id == 0 {
-		response.FailWithMessage("鍙傛暟缂哄け", c)
+	var params purchaserequest.SubmitPurchase
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		global.GVA_LOG.Error("Submit failed", zap.Error(err))
+		response.FailWithMessage(err.Error(), c)
 		return
 	}
-	err := service.NewPurchaseService().Submit(uint(id))
+	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 {
+		productList, err := service.NewPurchaseService().GetPurchaseProductList(uint(params.Id))
+		if err != nil {
+			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+			response.FailWithMessage("鑾峰彇澶辫触", c)
+			return
+		}
+		product := make([]*purchase_wms.PurchaseProduct, 0)
+		for _, products := range productList {
+			var p purchase_wms.PurchaseProduct
+			p.Id = products.Product.Number
+			p.Amount = products.Amount.IntPart()
+			product = append(product, &p)
+		}
+		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",
+			OperationSource:    purchase_wms.OperationSource_OperationSourcePurchase,
+			SalesDetailsNumber: data.SourceOrder,
+		})
+		if err != nil {
+			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+			response.FailWithMessage("grpc璋冪敤澶辫触", c)
+			return
+		}
+		warehouse = resp.Warehouse
+	}
+
+	err = service.NewPurchaseService().Submit(params.Id, params.Status, warehouse)
 	if err != nil {
 		global.GVA_LOG.Error("鏇存柊澶辫触!", zap.Error(err))
 		response.FailWithMessage("鏇存柊澶辫触", c)
@@ -224,7 +302,7 @@
 	}
 
 	purchaseTypeList := make([]*purchase.PurchaseType, 0, len(params))
-	if err := mapstructure.Decode(params, &purchaseTypeList); err != nil {
+	if err := utils.AssignTo(params, &purchaseTypeList); err != nil {
 		response.FailWithMessage(err.Error(), c)
 		return
 	}
@@ -256,3 +334,467 @@
 	}
 	response.OkWithDetailed(list, "鑾峰彇鎴愬姛", c)
 }
+
+// GetWarehouseInfo
+// @Tags      Purchase
+// @Summary   鑾峰彇浠撳簱鍒楄〃
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Success   200   {object}  response.Response{data=[]purchase_wms.SrmGetWarehouseInfoResponse}  "鑾峰彇閲囪喘绫诲瀷鍒楄〃"
+// @Router    /purchase/getWarehouseInfo [get]
+func (e *PurchaseApi) GetWarehouseInfo(c *gin.Context) {
+	client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
+	info, err := client.SrmGetWarehouseInfo(context.Background(), &purchase_wms.SrmGetWarehouseInfoRequest{})
+	if err != nil {
+		global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+		response.FailWithMessage("grpc璋冪敤澶辫触", c)
+		return
+	}
+	response.OkWithData(info, c)
+}
+
+// GetOperationInfo
+// @Tags      Purchase
+// @Summary   鑾峰彇鎿嶄綔淇℃伅
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Success   200   {object}  response.Response{data=[]purchaseRes.OperationInfo}  "鑾峰彇鎿嶄綔淇℃伅"
+// @Router    /purchase/getOperationInfo/{id} [get]
+func (e *PurchaseApi) GetOperationInfo(c *gin.Context) {
+	id, _ := strconv.Atoi(c.Param("id"))
+	if id == 0 {
+		response.FailWithMessage("鍙傛暟缂哄け", c)
+		return
+	}
+	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 := 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)
+		return
+	}
+	client := purchase_wms.NewPurchaseServiceClient(purchase_wms.PurchaseConn)
+	info, err := client.SrmGetOperationInfo(context.Background(), &purchase_wms.SrmGetOperationInfoRequest{Number: data.Number})
+	if err != nil {
+		global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+		response.FailWithMessage("grpc璋冪敤澶辫触", c)
+		return
+	}
+
+	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
+		}
+	} 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
+		}
+	}
+	for _, productInfo := range productMap {
+		productInfos = append(productInfos, *productInfo)
+	}
+	operationInfos.InWarehouseInfos = inWarehouseInfos
+	operationInfos.ProductInfos = productInfos
+
+	response.OkWithData(operationInfos, c)
+}
+
+// NewSubmit
+// @Tags      Purchase
+// @Summary   鏂扮増鎻愪氦
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  body     purchaserequest.SubmitPurchase   true  "鍙傛暟"
+// @Success   200   {object}  response.Response{msg=string}  "鏂扮増鎻愪氦"
+// @Router    /purchase/newSubmit [post]
+func (e *PurchaseApi) NewSubmit(c *gin.Context) {
+	var params purchaserequest.SubmitPurchase
+	err := c.ShouldBindJSON(&params)
+	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
+	}
+	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(id)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
+	list := make([]*purchase.PurchaseProductConfirm, 0)
+	for _, products := range productList {
+		var ppc purchase.PurchaseProductConfirm
+		ppc.PurchaseNumber = data.Number
+		ppc.Principal = data.Principal
+		ppc.ProductId = products.Product.Number
+		ppc.ProductName = products.Product.Name
+		ppc.Unit = products.Product.Unit
+		ppc.Specs = products.Product.Specifications
+		ppc.Type = products.Product.ModelNumber
+		ppc.Amount = products.Amount
+		ppc.OverReceiveAmount = decimal.NewFromInt(0)
+		ppc.NotReceiveAmount = products.Amount
+		ppc.NowReceiveAmount = decimal.NewFromInt(0)
+		ppc.SurplusReceiveAmount = products.Amount
+		list = append(list, &ppc)
+	}
+	err = service.NewPurchaseService().SavePurchaseProductConfirm(list, true)
+
+	if err != nil {
+		global.GVA_LOG.Error("鎻愪氦澶辫触!", zap.Error(err))
+		response.FailWithMessage("鎻愪氦澶辫触", c)
+		return
+	}
+	response.OkWithMessage("鎻愪氦鎴愬姛", c)
+}
+
+// GetPurchaseProductConfirmInfo
+// @Tags      Purchase
+// @Summary   鑾峰彇纭淇℃伅
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     number  path     string   true  "閲囪喘鍗曠紪鐮�"
+// @Success   200   {object}  response.Response{data=[]purchase.PurchaseProductConfirm}  "鑾峰彇纭淇℃伅"
+// @Router    /purchase/getPurchaseProductConfirmInfo/{number} [get]
+func (e *PurchaseApi) GetPurchaseProductConfirmInfo(c *gin.Context) {
+	number := c.Param("number")
+	if number == "" {
+		response.FailWithMessage("鍙傛暟缂哄け", c)
+		return
+	}
+	info, err := service.NewPurchaseService().GetPurchaseProductConfirmInfo(number)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇纭淇℃伅澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇纭淇℃伅澶辫触", c)
+		return
+	}
+	response.OkWithData(info, c)
+}
+
+// SavePurchaseProductConfirm
+// @Tags      Purchase
+// @Summary   纭鏀惰揣
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  body     []purchaserequest.PurchaseProductConfirmInfo   true  "list"
+// @Success   200   {object}  response.Response{msg=string}  "纭鏀惰揣"
+// @Router    /purchase/savePurchaseProductConfirm [post]
+func (e *PurchaseApi) SavePurchaseProductConfirm(c *gin.Context) {
+	var params []*purchaserequest.PurchaseProductConfirmInfo
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	list := make([]*purchase.PurchaseProductConfirm, 0, len(params))
+	if err := utils.AssignTo(params, &list); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	server := service.NewPurchaseService()
+	err = server.SavePurchaseProductConfirm(list, false)
+
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	_, err = server.SavePurchaseQualityInspection(list)
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	response.OkWithMessage("淇濆瓨鎴愬姛", c)
+}
+
+// GetPurchaseQualityInspectionInfo
+// @Tags      Purchase
+// @Summary   鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  body     purchaserequest.GetQualityInspectionInfo   true  "鍙傛暟"
+// @Success   200   {object}  response.Response{data=[]purchase.PurchaseProductConfirm}  "鑾峰彇纭淇℃伅"
+// @Router    /purchase/getPurchaseQualityInspectionInfo [post]
+func (e *PurchaseApi) GetPurchaseQualityInspectionInfo(c *gin.Context) {
+	var params purchaserequest.GetQualityInspectionInfo
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if params.PurchaseNumber == "" {
+		response.FailWithMessage("閲囪喘鍗曠紪鐮佷笉鑳戒负绌�", c)
+		return
+	}
+	infos, err := service.NewPurchaseService().GetPurchaseQualityInspection(params)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇閲囪喘璐ㄦ淇℃伅淇℃伅", c)
+		return
+	}
+	response.OkWithData(infos, c)
+}
+
+// SavePurchaseQualityInspectionInfo
+// @Tags      Purchase
+// @Summary   淇濆瓨閲囪喘璐ㄦ淇℃伅淇℃伅
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @Param     data  body     purchaserequest.SaveQualityInspectionInfo   true  "鍙傛暟"
+// @Success   200   {object}  response.Response{data=[]purchase.PurchaseProductConfirm}  "鑾峰彇纭淇℃伅"
+// @Router    /purchase/savePurchaseQualityInspectionInfo [post]
+func (e *PurchaseApi) SavePurchaseQualityInspectionInfo(c *gin.Context) {
+	var params purchaserequest.SaveQualityInspectionInfo
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if params.PurchaseId == 0 || len(params.Ids) == 0 {
+		response.FailWithMessage("閲囪喘鍗曠紪鐮佸拰id涓嶈兘涓虹┖", c)
+		return
+	}
+	server := service.PurchaseService{}
+	purchaseData, err := server.GetPurchase(params.PurchaseId)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
+	if params.Status == purchase.Unqualified {
+		err := server.UpdatePurchaseQualityInspection(params.Ids, params.Status)
+		if err != nil {
+			global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err))
+			response.FailWithMessage("璐ㄦ澶辫触", c)
+			return
+		}
+	} else if params.Status == purchase.InWarehouse {
+		inspectionList, err := server.GetPurchaseQualityInspectionList(params.Ids)
+		if err != nil {
+			global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+			response.FailWithMessage("鑾峰彇澶辫触", c)
+			return
+		}
+		product := make([]*purchase_wms.PurchaseProduct, 0)
+		for _, inspection := range inspectionList {
+			var p purchase_wms.PurchaseProduct
+			p.Id = inspection.ProductId
+			p.Amount = inspection.Amount.IntPart()
+			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,
+			OperationSource:    purchase_wms.OperationSource_OperationSourcePurchase,
+			SalesDetailsNumber: purchaseData.SourceOrder,
+		})
+		if err != nil {
+			global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+			response.FailWithMessage("grpc璋冪敤澶辫触", c)
+			return
+		}
+		err = server.UpdatePurchaseQualityInspection(params.Ids, params.Status)
+		if err != nil {
+			global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err))
+			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)
+}
+
+// AllProductInWarehouse
+// @Tags      Purchase
+// @Summary   鍏ㄩ儴鍚堟牸鍏ュ簱
+// @Security  ApiKeyAuth
+// @accept    application/json
+// @Produce   application/json
+// @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
+	err := c.ShouldBindJSON(&params)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	list := make([]*purchase.PurchaseProductConfirm, 0, len(params))
+	if err := utils.AssignTo(params, &list); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	server := service.NewPurchaseService()
+	err = server.SavePurchaseProductConfirm(list, false)
+
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	inspectionList, err := server.SavePurchaseQualityInspection(list)
+	if err != nil {
+		global.GVA_LOG.Error("淇濆瓨澶辫触!", zap.Error(err))
+		response.FailWithMessage("淇濆瓨澶辫触", c)
+		return
+	}
+	purchaseData, err := server.GetPurchaseByNumber(list[0].PurchaseNumber)
+	if err != nil {
+		global.GVA_LOG.Error("鑾峰彇澶辫触!", zap.Error(err))
+		response.FailWithMessage("鑾峰彇澶辫触", c)
+		return
+	}
+	product := make([]*purchase_wms.PurchaseProduct, 0)
+	ids := make([]int, 0)
+	productMap := make(map[string]int64)
+	for _, inspection := range inspectionList {
+		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,
+		OperationSource:    purchase_wms.OperationSource_OperationSourcePurchase,
+		SalesDetailsNumber: purchaseData.SourceOrder,
+	})
+	if err != nil {
+		global.GVA_LOG.Error("grpc璋冪敤澶辫触!", zap.Error(err))
+		response.FailWithMessage("grpc璋冪敤澶辫触", c)
+		return
+	}
+	err = server.UpdatePurchaseQualityInspection(ids, purchase.InWarehouse)
+	if err != nil {
+		global.GVA_LOG.Error("璐ㄦ澶辫触!", zap.Error(err))
+		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