From a5435e6664093cd4b2ead49409cb41e301e46514 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期二, 30 四月 2024 14:07:04 +0800
Subject: [PATCH] 薪资计算2

---
 task/salary_statistics.go |   52 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/task/salary_statistics.go b/task/salary_statistics.go
index 07e1a1e..254e306 100644
--- a/task/salary_statistics.go
+++ b/task/salary_statistics.go
@@ -11,6 +11,23 @@
 )
 
 func SalaryStatistics() {
+	//鍔犻攣锛屽彧闇�瑕佷竴涓繘绋嬭繍琛屾浠诲姟
+	var (
+		lockName  = "SalaryStatistics"
+		serviceID = "silkServer"
+	)
+	err := models.NewLockSearch().AcquireLock(lockName, serviceID)
+	if err != nil {
+		logx.Errorf("MonthStats AcquireLock err:%v", err)
+		return
+	}
+	defer func() {
+		err := models.NewLockSearch().ReleaseLock(lockName, serviceID)
+		if err != nil {
+			logx.Errorf("MonthStats ReleaseLock err:%v", err)
+		}
+	}()
+
 	lastMonthStart, lastMonthEnd := GetLastMonthPeriod()
 	month := lastMonthStart.Format("2006-01")
 
@@ -24,19 +41,23 @@
 	}
 
 	var reportForms []*models.SalaryReportForm
+	reportMap := make(map[string]*models.SalaryReportForm)
 	workTypeIdMap := make(map[uint]uint)
 	dataMap := make(map[string]utils.SalaryCalculateData)
 	for _, attendance := range attendances {
-		var rf models.SalaryReportForm
+		if _, ok := reportMap[attendance.WorkerId]; !ok {
+			var rf models.SalaryReportForm
+			rf.WorkerId = attendance.WorkerId
+			rf.WorkerName = attendance.WorkerName
+			rf.WorkTypeId = attendance.WorkTypeId
+			rf.Month = month
+			rf.Phone = attendance.PhoneNum
+			reportMap[attendance.WorkerId] = &rf
+		}
 		var data utils.SalaryCalculateData
 		if _, ok := dataMap[attendance.WorkerId]; ok {
 			data = dataMap[attendance.WorkerId]
 		}
-		rf.WorkerId = attendance.WorkerId
-		rf.WorkerName = attendance.WorkerName
-		rf.WorkTypeId = attendance.WorkTypeId
-		rf.Month = month
-		rf.Phone = attendance.PhoneNum
 		if attendance.WorkTypeId > 0 {
 			workTypeIdMap[attendance.WorkTypeId] = attendance.WorkTypeId
 		}
@@ -47,7 +68,9 @@
 			data.TotalAttendanceDays = data.TotalAttendanceDays + 1
 		}
 		dataMap[attendance.WorkerId] = data
-		reportForms = append(reportForms, &rf)
+	}
+	for _, v := range reportMap {
+		reportForms = append(reportForms, v)
 	}
 	workTypeIds := make([]uint, 0)
 	for _, v := range workTypeIdMap {
@@ -61,7 +84,7 @@
 		return
 	}
 	for _, form := range reportForms {
-		details := make([]models.SalaryDetails, 0)
+		details := make([]*models.SalaryDetails, 0)
 		issueSalary := decimal.NewFromInt(0)
 		for _, manage := range workTypeManages {
 			if form.WorkTypeId == manage.ID {
@@ -76,16 +99,15 @@
 						data, err = GetDailySilkProduction(startStr, endStr, form.WorkerId, data)
 						if err != nil {
 							logx.Error("SalaryStatistics 缁熻钖祫鍑洪敊 err: " + err.Error())
-						} else {
-							amount, err = utils.CalculateSalary(data, formula)
-							if err != nil {
-								logx.Error("SalaryStatistics 璁$畻钖祫鍑洪敊 err: " + err.Error())
-							}
 						}
+					}
+					amount, err = utils.CalculateSalary(data, formula)
+					if err != nil {
+						logx.Error("SalaryStatistics 璁$畻钖祫鍑洪敊 err: " + err.Error())
 					}
 					detail.Amount = amount
 					issueSalary = issueSalary.Add(amount)
-					details = append(details, detail)
+					details = append(details, &detail)
 				}
 			}
 		}
@@ -155,7 +177,7 @@
 	//鏌ヨ绾ゅ害鐧昏琛�
 	var fineness []models.FinenessRegister
 	markets := make([]string, 0)
-	err = models.NewFinenessRegisterSearch().Orm.Table("silk_fineness_register").Where("workshop in (?) and workshop_group "+
+	err = models.NewFinenessRegisterSearch().Orm.Table("silk_fineness_register").Where("workshop_number in (?) and workshop_group "+
 		"in (?) and finish_date >= ? and finish_date <= ?", workshops, groups, start, end).Find(&fineness).Error
 	if err != nil {
 		return data, err

--
Gitblit v1.8.0