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 | 144 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 141 insertions(+), 3 deletions(-) diff --git a/service/purchase/purchase.go b/service/purchase/purchase.go index de89020..aeba8f3 100644 --- a/service/purchase/purchase.go +++ b/service/purchase/purchase.go @@ -11,6 +11,8 @@ purchaserequest "srm/model/purchase/request" "srm/proto/qualityinspect" "srm/service/test" + "srm/utils" + "time" ) type PurchaseService struct{} @@ -118,6 +120,11 @@ 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 @@ -130,12 +137,13 @@ var ids []uint var purchaseList = make([]*purchase.Purchase, 0) if 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 ?", "%"+info.Keyword+"%"). - Or("srm_supplier_material.name like ?", "%"+info.Keyword+"%"). - Or("srm_supplier.name like ?", "%"+info.Keyword+"%") + 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 @@ -291,3 +299,133 @@ 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