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