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(¶ms) 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(¶ms) + 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(¶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 + } + 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(¶ms) + 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(¶ms) + 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(¶ms) + 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(¶ms) + 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