From 69f0410081da54e6cea8a04a07fd0119a8edc623 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期六, 30 三月 2024 11:38:42 +0800 Subject: [PATCH] 采购单修改 --- service/purchase/purchase.go | 243 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 191 insertions(+), 52 deletions(-) diff --git a/service/purchase/purchase.go b/service/purchase/purchase.go index ced5939..aeba8f3 100644 --- a/service/purchase/purchase.go +++ b/service/purchase/purchase.go @@ -7,10 +7,12 @@ "github.com/spf13/cast" "gorm.io/gorm" "srm/global" - "srm/model/common/request" "srm/model/purchase" + purchaserequest "srm/model/purchase/request" "srm/proto/qualityinspect" "srm/service/test" + "srm/utils" + "time" ) type PurchaseService struct{} @@ -118,39 +120,47 @@ return } +func (slf *PurchaseService) GetPurchaseByNumber(number string) (purchase purchase.Purchase, err error) { + err = global.GVA_DB.Where("number = ?", number).Preload("Supplier").First(&purchase).Error + return +} + //@function: GetPurchaseList //@description: 鍒嗛〉鑾峰彇閲囪喘鍗曞垪琛� //@param: info request.PageInfo //@return: list interface{}, total int64, err error -func (slf *PurchaseService) GetPurchaseList(info request.PageInfo) (list interface{}, total int64, err error) { +func (slf *PurchaseService) GetPurchaseList(info purchaserequest.PurchaseSearch) (list interface{}, total int64, err error) { limit := info.PageSize offset := info.PageSize * (info.Page - 1) db := global.GVA_DB.Model(&purchase.Purchase{}) var ids []uint var purchaseList = make([]*purchase.Purchase, 0) if info.Keyword != "" { - db.Distinct("purchases.id").Joins("left join purchase_products on purchase_products.purchase_id = purchases.id"). - Joins("left join Product on Product.Id = purchase_products.product_id"). - Joins("left join supplier on supplier.Id = purchases.supplier_id"). - Where("purchases.name like ?", "%"+info.Keyword+"%"). - Or("Product.name like ?", "%"+info.Keyword+"%"). - Or("supplier.name like ?", "%"+info.Keyword+"%") + kw := "%" + info.Keyword + "%" + db.Distinct("srm_purchase.id").Joins("left join srm_purchase_products on srm_purchase_products.purchase_id = srm_purchase.id"). + Joins("left join srm_supplier_material on srm_supplier_material.supplier_id = srm_purchase.id"). + Joins("left join srm_supplier on srm_supplier.Id = srm_purchase.supplier_id"). + Where("srm_purchase.name like ? or srm_purchase.source_order like ? or srm_purchase.number like ?", kw, kw, kw). + Or("srm_supplier_material.name like ?", kw). + Or("srm_supplier.name like ?", kw) err = db.Limit(limit).Offset(offset).Find(&ids).Error if err != nil { return purchaseList, total, err } + } else if info.SupplierId != 0 { + db = db.Where("supplier_id = ?", info.SupplierId) } - err = db.Count(&total).Error - if err != nil { + if err != nil || total == 0 { return purchaseList, total, err } if len(ids) != 0 { db = global.GVA_DB.Model(&purchase.Purchase{}) - err = db.Where("id in (?)", ids).Find(&purchaseList).Error + err = db.Where("id in (?)", ids).Preload("Supplier").Order("updated_at desc").Find(&purchaseList).Error } else { - err = db.Limit(limit).Offset(offset).Find(&purchaseList).Error + //db = global.GVA_DB.Model(&purchase.Purchase{}) + err = db.Limit(limit).Offset(offset).Preload("Supplier").Order("updated_at desc").Find(&purchaseList).Error } return purchaseList, total, err @@ -173,33 +183,38 @@ //@param: id uint //@return: err error -func (slf *PurchaseService) Submit(id uint) (err error) { +func (slf *PurchaseService) Submit(id int, status purchase.OrderStatus, warehouse string) (err error) { - purchaseData, err := slf.GetPurchase(id) - if err != nil { - return err - } - var targetStatus purchase.OrderStatus - switch purchaseData.Status { - case purchase.OrderStatusConfirmed: - targetStatus = purchase.OrderStatusReceived - case purchase.OrderStatusReceived: - targetStatus = purchase.OrderStatusStored - case purchase.OrderStatusStored: - targetStatus = purchase.OrderStatusCompleted - } + //purchaseData, err := slf.GetPurchase(id) + //if err != nil { + // return err + //} + //var targetStatus purchase.OrderStatus + //switch purchaseData.Status { + //case purchase.OrderStatusConfirmed: + // targetStatus = purchase.OrderStatusReceived + //case purchase.OrderStatusReceived: + // targetStatus = purchase.OrderStatusStored + //case purchase.OrderStatusStored: + // targetStatus = purchase.OrderStatusCompleted + //} err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { - err = tx.Where("id = ?", id).Model(&purchase.Purchase{}).Updates(map[string]interface{}{"status": targetStatus}).Error + m := make(map[string]interface{}) + m["status"] = status + if warehouse != "" { + m["warehouse"] = warehouse + } + err = tx.Where("id = ?", id).Model(&purchase.Purchase{}).Updates(m).Error if err != nil { return err } - switch targetStatus { - case purchase.OrderStatusReceived: - return SendInspect(purchaseData) - case purchase.OrderStatusStored: - case purchase.OrderStatusCompleted: - } + //switch targetStatus { + //case purchase.OrderStatusReceived: + // return SendInspect(purchaseData) + //case purchase.OrderStatusStored: + //case purchase.OrderStatusCompleted: + //} return nil }) return err @@ -212,7 +227,7 @@ } productIds := make([]uint, 0, len(productList)) for _, product := range productList { - productIds = append(productIds, uint(product.ProductId)) + productIds = append(productIds, product.ID) } productService := &test.ProductService{} _, productMap, err := productService.GetProducts(productIds) @@ -221,7 +236,7 @@ } inspectOrders := make([]*qualityinspect.QualityInspect, 0, len(productList)) for _, productItem := range productList { - product := productMap[uint(productItem.ProductId)] + product := productMap[productItem.ID] if product == nil { continue } @@ -251,33 +266,21 @@ func (slf *PurchaseService) SavePurchaseType(list []*purchase.PurchaseType) (err error) { ids := make([]uint, 0) - newRecords := make([]*purchase.PurchaseType, 0) for _, item := range list { if item.ID != 0 { ids = append(ids, item.ID) - } else { - newRecords = append(newRecords, item) + item.ID = 0 } } err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { - err = tx.Where("id not in ?", ids).Delete(&purchase.PurchaseType{}).Error + err = tx.Where("id in (?)", ids).Delete(&purchase.PurchaseType{}).Error if err != nil { return err } - if len(newRecords) > 0 { - err = tx.Create(newRecords).Error - if err != nil { - return err - } - } - for _, item := range list { - if item.ID != 0 { - err = tx.Where("id = ?", item.ID).Updates(item).Error - if err != nil { - return err - } - } + err = tx.Create(list).Error + if err != nil { + return err } return nil }) @@ -290,3 +293,139 @@ err = db.Order("pin desc, sort desc, id asc").Find(&list).Error return list, err } + +func (slf *PurchaseService) MaxAutoIncr() (int, error) { + var total int64 + err := global.GVA_DB.Model(&purchase.Purchase{}).Count(&total).Error + return int(total), err +} + +func (slf *PurchaseService) SavePurchaseProductConfirm(list []*purchase.PurchaseProductConfirm, first bool) (err error) { + if len(list) == 0 { + return errors.New("浜у搧鍒楄〃涓嶈兘涓虹┖") + } + purchaseNumber := list[0].PurchaseNumber + var pur purchase.Purchase + err = global.GVA_DB.Where("number = ?", purchaseNumber).First(&pur).Error + if err != nil { + return err + } + + m := make(map[string]interface{}) + if first { + m["status"] = purchase.OrderStatusWaitReceive + } else { + yu := int64(0) + for _, confirm := range list { + confirm.OverReceiveAmount = confirm.OverReceiveAmount.Add(confirm.NowReceiveAmount) + confirm.NotReceiveAmount = confirm.Amount.Sub(confirm.OverReceiveAmount) + if !confirm.SurplusReceiveAmount.IsZero() { + yu = confirm.SurplusReceiveAmount.IntPart() + } + } + if yu > 0 { + m["status"] = purchase.OrderStatusPartReceive + } + if yu == 0 { + m["status"] = purchase.OrderStatusWaitQuality + } + } + + err = global.GVA_DB.Transaction(func(tx *gorm.DB) error { + err = tx.Where("purchase_number = ?", purchaseNumber).Delete(&purchase.PurchaseProductConfirm{}).Error + if err != nil { + return err + } + + err = tx.Create(list).Error + if err != nil { + return err + } + err = tx.Where("number = ?", purchaseNumber).Model(&purchase.Purchase{}).Updates(m).Error + if err != nil { + return err + } + + return nil + }) + return err +} + +func (slf *PurchaseService) GetPurchaseProductConfirmInfo(number string) ([]*purchase.PurchaseProductConfirm, error) { + var list []*purchase.PurchaseProductConfirm + err := global.GVA_DB.Model(&purchase.PurchaseProductConfirm{}).Where("purchase_number = ?", number).Find(&list).Error + return list, err +} + +func (slf *PurchaseService) SavePurchaseQualityInspection(list []*purchase.PurchaseProductConfirm) ([]*purchase.PurchaseQualityInspection, error) { + if len(list) == 0 { + return nil, errors.New("浜у搧鍒楄〃涓嶈兘涓虹┖") + } + purchaseNumber := list[0].PurchaseNumber + qualityList := make([]*purchase.PurchaseQualityInspection, 0) + for _, confirm := range list { + if confirm.NowReceiveAmount.IsZero() { + continue + } + var pqi purchase.PurchaseQualityInspection + pqi.PurchaseNumber = purchaseNumber + pqi.Principal = confirm.Principal + pqi.ProductId = confirm.ProductId + pqi.ProductName = confirm.ProductName + pqi.Amount = confirm.NowReceiveAmount + pqi.Status = purchase.WaitInspection + pqi.CreateTime = utils.TimeToString(time.Now()) + pqi.Unit = confirm.Unit + pqi.Specs = confirm.Specs + pqi.Type = confirm.Type + qualityList = append(qualityList, &pqi) + } + err := global.GVA_DB.Model(purchase.PurchaseQualityInspection{}).Create(qualityList).Error + return qualityList, err +} + +func (slf *PurchaseService) GetPurchaseQualityInspection(params purchaserequest.GetQualityInspectionInfo) ([]*purchase.PurchaseQualityInspection, error) { + var list []*purchase.PurchaseQualityInspection + db := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("purchase_number = ?", params.PurchaseNumber) + if len(params.Status) > 0 { + db = db.Where("status in (?)", params.Status) + } + if len(params.Times) > 0 { + db = db.Where("create_time in (?)", params.Times) + } + err := db.Find(&list).Error + return list, err +} + +func (slf *PurchaseService) UpdatePurchaseQualityInspection(ids []int, status int) error { + err := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("id in (?)", ids).Updates(map[string]interface{}{"status": status}).Error + return err +} + +func (slf *PurchaseService) GetPurchaseQualityInspectionList(ids []int) ([]*purchase.PurchaseQualityInspection, error) { + var list []*purchase.PurchaseQualityInspection + err := global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("id in (?)", ids).Find(&list).Error + return list, err +} + +func (slf *PurchaseService) UpdatePurchaseStatus(number string, status int) error { + var total int64 + err := global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", number).Where("status = ?", purchase.OrderStatusWaitQuality).Count(&total).Error + if err != nil { + return err + } + if total > 0 { + err = global.GVA_DB.Model(&purchase.PurchaseQualityInspection{}).Where("purchase_number = ?", number).Where("status = ?", status).Count(&total).Error + if err != nil { + return err + } + + if total == 0 { + err = global.GVA_DB.Model(&purchase.Purchase{}).Where("number = ?", number).Updates(map[string]interface{}{"status": purchase.OrderStatusReceived}).Error + if err != nil { + return err + } + } + } + return nil +} -- Gitblit v1.8.0