From 3abb522a610fa41a8d5570b643d88a23030e56db Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 06 五月 2024 17:24:11 +0800
Subject: [PATCH] 执行月度统计前先删除本月记录,防止重复数据

---
 task/month_stats.go |   51 ++++++++++++++++++++++++++++++---------------------
 1 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/task/month_stats.go b/task/month_stats.go
index ee539ea..b89aa88 100644
--- a/task/month_stats.go
+++ b/task/month_stats.go
@@ -4,6 +4,7 @@
 	"encoding/json"
 	"fmt"
 	"github.com/shopspring/decimal"
+	"gorm.io/gorm"
 	"time"
 	"wms/constvar"
 	"wms/models"
@@ -125,32 +126,40 @@
 			}
 		}
 
-		record.BeginMoreUnits = moreUnits
-		err = models.NewMonthStatsSearch().Create(&record)
+		err = models.NewMonthStatsSearch().SetDate(date).Delete()
 		if err != nil {
-			logx.Errorf("NewMonthStatsSearch Create err:%v, record: %+v", err, record)
-			service.SendAlarm("鏈堝害缁熻鍒涘缓鏈湀澶辫触", fmt.Sprintf("NewMonthStatsSearch Create err:%v, record: %+v", err, record))
+			return
 		}
 
-		if oldRecordsMap[productId] != nil && (!inputMap[productId].IsZero() || !outputMap[productId].IsZero()) {
-			record.InputAmount = inputMap[productId]
-			record.InputMoreUnits = inputMoreUnits
-			record.OutputAmount = outputMap[productId]
-			record.OutputMoreUnits = outputMoreUnits
-			m := map[string]interface{}{
-				"input_amount":      inputMap[productId],
-				"input_more_units":  inputMoreUnits,
-				"output_amount":     outputMap[productId],
-				"output_more_units": outputMoreUnits,
-				"end_more_units":    moreUnits,
-				"end_amount":        amount,
-			}
-			err = models.NewMonthStatsSearch().SetID(oldRecordsMap[productId].Id).UpdateByMap(m)
+		record.BeginMoreUnits = moreUnits
+		err = models.WithTransaction(func(db *gorm.DB) error {
+			err = models.NewMonthStatsSearch().SetOrm(db).Create(&record)
 			if err != nil {
-				logx.Errorf("NewMonthStatsSearch UpdateByMap err:%v, id:%v, m:%+v", err, oldRecordsMap[productId].ID, m)
-				service.SendAlarm("鏈堝害缁熻鏇存敼涓婃湀澶辫触", fmt.Sprintf("NewMonthStatsSearch Create err:%v, record: %+v", err, record))
+				logx.Errorf("NewMonthStatsSearch Create err:%v, record: %+v", err, record)
+				service.SendAlarm("鏈堝害缁熻鍒涘缓鏈湀澶辫触", fmt.Sprintf("NewMonthStatsSearch Create err:%v, record: %+v", err, record))
 			}
-		}
+
+			if oldRecordsMap[productId] != nil && (!inputMap[productId].IsZero() || !outputMap[productId].IsZero()) {
+				record.InputAmount = inputMap[productId]
+				record.InputMoreUnits = inputMoreUnits
+				record.OutputAmount = outputMap[productId]
+				record.OutputMoreUnits = outputMoreUnits
+				m := map[string]interface{}{
+					"input_amount":      inputMap[productId],
+					"input_more_units":  inputMoreUnits,
+					"output_amount":     outputMap[productId],
+					"output_more_units": outputMoreUnits,
+					"end_more_units":    moreUnits,
+					"end_amount":        amount,
+				}
+				err = models.NewMonthStatsSearch().SetOrm(db).SetID(oldRecordsMap[productId].Id).UpdateByMap(m)
+				if err != nil {
+					logx.Errorf("NewMonthStatsSearch UpdateByMap err:%v, id:%v, m:%+v", err, oldRecordsMap[productId].ID, m)
+					service.SendAlarm("鏈堝害缁熻鏇存敼涓婃湀澶辫触", fmt.Sprintf("NewMonthStatsSearch Create err:%v, record: %+v", err, record))
+				}
+			}
+			return nil
+		})
 	}
 	return
 }

--
Gitblit v1.8.0