From 1572f45e72cc0fa15c029f9ee2a08474104435e6 Mon Sep 17 00:00:00 2001 From: selfcheer <selfcheer@gmail.com> Date: 星期五, 19 七月 2024 00:48:43 +0800 Subject: [PATCH] 采购单产品列表去掉过滤重复产品的逻辑 --- proto/purchase_wms/server.go | 133 +++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 129 insertions(+), 4 deletions(-) diff --git a/proto/purchase_wms/server.go b/proto/purchase_wms/server.go index 6eabcf6..523a7b8 100644 --- a/proto/purchase_wms/server.go +++ b/proto/purchase_wms/server.go @@ -20,8 +20,12 @@ if req.Number == "" { return nil, errors.New("閲囪喘缂栧彿涓嶈兘涓虹┖") } - err := global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", req.Number). - Updates(map[string]interface{}{"status": purchase.OrderStatusStored}).Error + m := make(map[string]interface{}) + m["status"] = purchase.OrderStatusStored + if req.Status > 0 { + m["status"] = req.Status + } + err := global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", req.Number).Updates(m).Error return new(UpdatePurchaseStatusResponse), err } @@ -139,15 +143,39 @@ if err != nil { return nil, err } + purchaseIds := make([]uint, 0) + for _, p := range ps { + purchaseIds = append(purchaseIds, p.ID) + } + if len(purchaseIds) == 0 { + return nil, errors.New("娌℃湁鏌ュ埌閲囪喘鍗�") + } + pps := make([]*purchase.PurchaseProducts, 0) + err = global.GVA_DB.Model(&purchase.PurchaseProducts{}).Where("purchase_id in (?)", purchaseIds).Preload("Product").Find(&pps).Error + if err != nil { + return nil, err + } infos := make([]*PurchaseInfo, 0) for _, p := range ps { var info PurchaseInfo info.PurchaseNumber = p.Number info.PurchaseName = p.Name info.SupplierName = p.Supplier.Name - info.Amount = p.Quantity.IntPart() info.Status = int64(p.Status) - infos = append(infos, &info) + if p.Status == purchase.OrderStatusStored || p.Status == purchase.OrderStatusCompleted { + info.FinishAmount = info.Amount + } + for _, pp := range pps { + if int(p.ID) == pp.PurchaseId { + ni := info + ni.ProductId = pp.Product.Number + ni.ProductName = pp.Product.Name + ni.Specs = pp.Product.Specifications + ni.Unit = pp.Product.Unit + ni.Amount = pp.Amount.IntPart() + infos = append(infos, &ni) + } + } } resp := new(GetPurchaseInfoResponse) resp.Infos = infos @@ -181,3 +209,100 @@ resp.Exist = true return resp, nil } + +func (s *Server) CreatePurchaseByAps(ctx context.Context, req *CreatePurchaseByApsRequest) (*CreatePurchaseByWmsResponse, error) { + if len(req.Req) == 0 { + return nil, errors.New("浜у搧id涓虹┖") + } + productIds := make([]string, 0) + amount := int64(0) + numMap := make(map[string]int64) + for _, request := range req.Req { + productIds = append(productIds, request.ProductId) + numMap[request.ProductId] = request.Amount + amount += request.Amount + } + var products []test.SupplierMaterial + var newProducts []test.SupplierMaterial + err := global.GVA_DB.Model(&test.SupplierMaterial{}).Where("number in (?)", productIds).Order("id desc").Find(&products).Error + if err != nil { + return nil, err + } + for _, id := range productIds { + flag := false + for _, product := range products { + if id == product.Number { + newProducts = append(newProducts, product) + flag = true + break + } + } + if !flag { + var material test.Material + var product test.SupplierMaterial + err = global.GVA_DB.Model(&test.Material{}).Where("id = ?", id).First(&material).Error + if err != nil { + return nil, err + } + product.Name = material.Name + product.Number = material.ID + product.Unit = material.Unit + product.PurchasePrice = material.PurchasePrice.InexactFloat64() + product.Specifications = material.Specs + product.ModelNumber = material.Type + err = global.GVA_DB.Create(&product).Error + if err != nil { + return nil, err + } + newProducts = append(newProducts, product) + } + } + + //閲囪喘鍗� + var purchaseRecord purchase.Purchase + purchaseRecord.OrderSource = "APS鎺ㄩ��" + purchaseRecord.Name = "APS閲囪喘" + purchaseRecord.ID = 0 + purchaseRecord.Status = purchase.OrderStatusConfirmed + purchaseRecord.HandledBy = "admin" + purchaseRecord.Creator = "admin" + purchaseRecord.Number = fmt.Sprintf("CG%v", time.Now().Unix()) + purchaseRecord.Principal = "admin" + purchaseRecord.OrderType = "閲囪喘璁㈠崟" + purchaseRecord.Quantity = decimal.NewFromInt(amount) + purchaseRecord.SourceOrder = req.SourceOrder + + price := float64(0) + var pps []purchase.PurchaseProducts + for _, product := range newProducts { + //浜у搧 + var pp purchase.PurchaseProducts + pp.ProductId = int(product.ID) + pp.Amount = decimal.NewFromInt(numMap[product.Number]) + pp.Price = decimal.NewFromFloat(product.PurchasePrice) + price += product.PurchasePrice + pp.Total = pp.Amount.Mul(pp.Price) + pp.Remark = "APS閲囪喘" + pps = append(pps, pp) + } + purchaseRecord.TotalPrice = purchaseRecord.Quantity.Mul(decimal.NewFromFloat(price)) + purchaseRecord.UnInvoiceAmount = purchaseRecord.TotalPrice + purchaseRecord.ShouldPayAmount = purchaseRecord.TotalPrice + + err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { + err = tx.Create(&purchaseRecord).Error + if err != nil { + return err + } + for i := 0; i < len(pps); i++ { + pps[i].PurchaseId = int(purchaseRecord.ID) + } + return tx.Create(&pps).Error + }) + if err != nil { + return nil, err + } + resp := new(CreatePurchaseByWmsResponse) + resp.PurchaseNumber = purchaseRecord.Number + return resp, nil +} -- Gitblit v1.8.0