From 9c7551a7a752c07db11b0fd23bfba8da1ad062e0 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 21 六月 2024 20:39:12 +0800 Subject: [PATCH] fix 404 --- service/operation.go | 163 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 127 insertions(+), 36 deletions(-) diff --git a/service/operation.go b/service/operation.go index 1d8e8a1..8133d97 100644 --- a/service/operation.go +++ b/service/operation.go @@ -224,6 +224,7 @@ // FinishOperationOutput 瀹屾垚鍑哄簱鎴栨姤搴� func FinishOperationOutput(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) { + var internalInputDetails []*models.OperationDetails //鍐呴儴璋冩嫧浜х敓鐨勫嚭搴撻獙璇佸悗锛岀敓鎴愬叆搴撳崟 for k, v := range listDetails { if v.Product.Amount.LessThan(v.Amount) { return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, v.Product.Amount.String(), v.Amount.String())) @@ -244,39 +245,57 @@ } else { return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱") } + if v.IsInternalOutput { + internalInputDetails = append(internalInputDetails, v) + } + } + if len(internalInputDetails) > 0 { + operation := &models.Operation{ + Number: strconv.FormatInt(time.Now().Unix(), 10), + Status: constvar.OperationStatus_Ready, + OperationDate: time.Now().Format("2006-01-02 15:04:05"), + Comment: "搴撳瓨璋冩嫧鍏ュ簱", + BaseOperationType: constvar.BaseOperationTypeIncoming, + Details: internalInputDetails, + LocationID: internalInputDetails[0].ToLocationID, + OperationTypeName: "搴撳瓨璋冩嫧鍏ュ簱", + } + if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { + return err + } } return nil } -// FinishOperationInternal 瀹屾垚鍐呴儴璋冩嫧 -func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) { +// FinishOperationInternal 楠岃瘉鍐呴儴璋冩嫧鐢熸垚鍑哄簱鍗� +func FinishOperationInternal(tx *gorm.DB, listDetails []*models.OperationDetails) (err error) { + var outputDetails []*models.OperationDetails for _, v := range listDetails { - if fromLocAmount, aok := mapLocAmount[strconv.Itoa(v.FromLocationID)+v.ProductId]; aok { - if fromLocAmount.Amount.LessThan(v.Amount) { - return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, fromLocAmount.Amount.String(), v.Amount.String())) + outputDetails = append(outputDetails, &models.OperationDetails{ + FromLocationID: v.FromLocationID, + ToLocationID: v.ToLocationID, + Amount: v.Amount, + TotalGrossWeight: v.TotalGrossWeight, + TotalNetWeight: v.TotalNetWeight, + AuxiliaryAmount: v.AuxiliaryAmount, + AuxiliaryUnit: v.AuxiliaryUnit, + Remark: v.Remark, + IsInternalOutput: true, + }) + if len(outputDetails) > 0 { + operation := &models.Operation{ + Number: strconv.FormatInt(time.Now().Unix(), 10), + Status: constvar.OperationStatus_Ready, + OperationDate: time.Now().Format("2006-01-02 15:04:05"), + Comment: "搴撳瓨璋冩嫧鍑哄簱", + BaseOperationType: constvar.BaseOperationTypeOutgoing, + Details: outputDetails, + LocationID: outputDetails[0].FromLocationID, + OperationTypeName: "搴撳瓨璋冩嫧鍑哄簱", + IsInternalOutput: true, } - fromLocAmount.Amount = fromLocAmount.Amount.Sub(v.Amount) - if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(fromLocAmount.Id).Update(fromLocAmount); err != nil { - return err - } - } else { - return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱") - } - - if toLocAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok { - toLocAmount.Amount = toLocAmount.Amount.Add(v.Amount) - if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(toLocAmount.Id).Update(toLocAmount); err != nil { - return err - } - } else { - if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ - LocationId: v.ToLocationID, - ProductCategoryID: v.Product.CategoryId, - ProductId: v.ProductId, - Amount: v.Amount, - CreateDate: time.Now().Format("2006-01-02 15:04:05"), - }); err != nil { + if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err } } @@ -286,21 +305,93 @@ } // FinishOperationAdjust 瀹屾垚搴撳瓨璋冩暣 +// 楠岃瘉鍚庣敓鎴愬叆搴撳崟鎴栧嚭搴撳崟锛堝簱瀛樺噺灏戠敓鎴愬嚭搴撳崟锛屽簱瀛樺鍔犵敓鎴愬叆搴撳崟锛� func FinishOperationAdjust(tx *gorm.DB, listDetails []*models.OperationDetails, mapLocAmount map[string]*models.LocationProductAmount) (err error) { + var inputDetails []*models.OperationDetails + var outputDetails []*models.OperationDetails for _, v := range listDetails { if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok { - locAmount.Amount = v.Amount - if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil { - return err + if locAmount.Amount.Equal(v.Amount) { + continue + } + if v.Amount.GreaterThan(locAmount.Amount) { + inputDetails = append(inputDetails, &models.OperationDetails{ + ProductId: v.ProductId, + Amount: v.Amount.Sub(locAmount.Amount), + FromLocationID: v.FromLocationID, + ToLocationID: v.ToLocationID, + TotalGrossWeight: v.TotalGrossWeight, + TotalNetWeight: v.TotalNetWeight, + AuxiliaryAmount: v.AuxiliaryAmount, + AuxiliaryUnit: v.AuxiliaryUnit, + Remark: v.Remark, + }) + } else { + outputDetails = append(outputDetails, &models.OperationDetails{ + ProductId: v.ProductId, + Amount: locAmount.Amount.Sub(v.Amount), + FromLocationID: v.ToLocationID, + ToLocationID: v.FromLocationID, + TotalGrossWeight: v.TotalGrossWeight, + TotalNetWeight: v.TotalNetWeight, + AuxiliaryAmount: v.AuxiliaryAmount, + AuxiliaryUnit: v.AuxiliaryUnit, + Remark: v.Remark, + }) } } else { - if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ - LocationId: v.ToLocationID, - ProductCategoryID: v.Product.CategoryId, - ProductId: v.ProductId, - Amount: v.Amount, - CreateDate: time.Now().Format("2006-01-02 15:04:05"), - }); err != nil { + inputDetails = append(inputDetails, &models.OperationDetails{ + ProductId: v.ProductId, + Amount: v.Amount, + FromLocationID: v.FromLocationID, + ToLocationID: v.ToLocationID, + Remark: v.Remark, + }) + } + //if locAmount, aok := mapLocAmount[strconv.Itoa(v.ToLocationID)+v.ProductId]; aok { + // locAmount.Amount = v.Amount + // if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil { + // return err + // } + //} else { + // if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ + // LocationId: v.ToLocationID, + // ProductCategoryID: v.Product.CategoryId, + // ProductId: v.ProductId, + // Amount: v.Amount, + // CreateDate: time.Now().Format("2006-01-02 15:04:05"), + // }); err != nil { + // return err + // } + //} + + if len(inputDetails) > 0 { + operation := &models.Operation{ + Number: strconv.FormatInt(time.Now().Unix(), 10), + Status: constvar.OperationStatus_Ready, + OperationDate: time.Now().Format("2006-01-02 15:04:05"), + Comment: "搴撳瓨璋冩暣鍏ュ簱", + BaseOperationType: constvar.BaseOperationTypeIncoming, + Details: inputDetails, + LocationID: inputDetails[0].FromLocationID, + OperationTypeName: "搴撳瓨璋冩暣鍏ュ簱", + } + if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { + return err + } + } + if len(outputDetails) > 0 { + operation := &models.Operation{ + Number: strconv.FormatInt(time.Now().Unix(), 10), + Status: constvar.OperationStatus_Ready, + OperationDate: time.Now().Format("2006-01-02 15:04:05"), + Comment: "搴撳瓨璋冩暣鍑哄簱", + BaseOperationType: constvar.BaseOperationTypeOutgoing, + Details: outputDetails, + LocationID: outputDetails[0].FromLocationID, + OperationTypeName: "搴撳瓨璋冩暣鍑哄簱", + } + if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { return err } } -- Gitblit v1.8.0