From 73b6baf6af3d88cdcb0e2df7932a9bd96b0b85c5 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 01 七月 2024 22:32:34 +0800 Subject: [PATCH] 月度统计出入库按类型汇总报表定时任务和手动跑任务接口 --- service/operation.go | 160 ++++++++++++++++++++++++---------------------------- 1 files changed, 74 insertions(+), 86 deletions(-) diff --git a/service/operation.go b/service/operation.go index 7ec90ce..3b9c43b 100644 --- a/service/operation.go +++ b/service/operation.go @@ -4,6 +4,7 @@ "errors" "fmt" "github.com/gin-gonic/gin" + "github.com/mitchellh/mapstructure" "github.com/shopspring/decimal" "gorm.io/gorm" "strconv" @@ -138,11 +139,11 @@ if locAmount, aok := mapLocAmount[strconv.Itoa(roleProduct.LocationId)+v.ProductId]; aok { locAmount.Amount = locAmount.Amount.Add(v.Amount) - if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { - return res.Error + if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil { + return err } } else { - if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{ + if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ LocationId: roleProduct.LocationId, ProductCategoryID: v.Product.CategoryId, ProductId: v.ProductId, @@ -164,11 +165,11 @@ if locAmount, aok := mapLocAmount[strconv.Itoa(roleCategory.LocationId)+v.ProductId]; aok { locAmount.Amount = locAmount.Amount.Add(v.Amount) - if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { - return res.Error + if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil { + return err } } else { - if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{ + if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ LocationId: roleCategory.LocationId, ProductCategoryID: v.Product.CategoryId, ProductId: v.ProductId, @@ -181,11 +182,11 @@ } else { if locAmount, aok := mapLocAmount[strconv.Itoa(operation.LocationID)+v.ProductId]; aok { locAmount.Amount = locAmount.Amount.Add(v.Amount) - if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { - return res.Error + if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(int(locAmount.ID)).Save(locAmount); err != nil { + return err } } else { - if err := models.NewLocationProductAmountSearch().Create(&models.LocationProductAmount{ + if err := models.NewLocationProductAmountSearch().SetOrm(tx).Create(&models.LocationProductAmount{ LocationId: operation.LocationID, ProductCategoryID: v.Product.CategoryId, ProductId: v.ProductId, @@ -239,14 +240,18 @@ return errors.New(fmt.Sprintf("浜у搧锛�%v,搴撳瓨锛�%v,鍑哄簱锛�%v,鏁伴噺涓嶅锛屾棤娉曞畬鎴愬嚭搴撴搷浣�", v.Product.Name, locAmount.Amount.String(), v.Amount.String())) } locAmount.Amount = locAmount.Amount.Sub(v.Amount) - if err := models.NewLocationProductAmountSearch().SetID(locAmount.Id).Update(locAmount); err != nil { + if err := models.NewLocationProductAmountSearch().SetOrm(tx).SetID(locAmount.Id).Save(locAmount); err != nil { return err } } else { return errors.New("褰撳墠浠撳簱娌℃湁璇ヤ骇鍝�,璇峰厛鍏ュ簱") } if v.IsInternalOutput { - internalInputDetails = append(internalInputDetails, v) + var inputDetail models.OperationDetails + mapstructure.Decode(v, &inputDetail) + inputDetail.Id = 0 + inputDetail.OperationID = 0 + internalInputDetails = append(internalInputDetails, &inputDetail) } } if len(internalInputDetails) > 0 { @@ -291,26 +296,26 @@ Cost: v.Cost, SalePrice: v.SalePrice, }) - if len(outputDetails) > 0 { - opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) - if err != nil { - return err - } - operation := &models.Operation{ - OperationTypeId: opTypeId, - 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, - } - if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { - return err - } + } + if len(outputDetails) > 0 { + opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) + if err != nil { + return err + } + operation := &models.Operation{ + OperationTypeId: opTypeId, + 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, + } + if err := models.NewOperationSearch().SetOrm(tx).Create(operation); err != nil { + return err } } return nil @@ -365,62 +370,45 @@ 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 { - opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming) - if err != nil { - return err - } - operation := &models.Operation{ - OperationTypeId: opTypeId, - 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(inputDetails) > 0 { + opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeIncoming) + if err != nil { + return err } - if len(outputDetails) > 0 { - opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) - if err != nil { - return err - } - operation := &models.Operation{ - OperationTypeId: opTypeId, - 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 - } + operation := &models.Operation{ + OperationTypeId: opTypeId, + 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 { + opTypeId, err := GetTargetOperationTypeIdByOperation(originOperation, constvar.BaseOperationTypeOutgoing) + if err != nil { + return err + } + operation := &models.Operation{ + OperationTypeId: opTypeId, + 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 } } return nil -- Gitblit v1.8.0