From 7d06c6472f1acea6b2e49e7b8837bf555e94e219 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 07 五月 2024 16:21:06 +0800
Subject: [PATCH] fox

---
 task/salary_statistics.go |   80 +++++++++++++++++++++++++++------------
 1 files changed, 55 insertions(+), 25 deletions(-)

diff --git a/task/salary_statistics.go b/task/salary_statistics.go
index 07e1a1e..348c763 100644
--- a/task/salary_statistics.go
+++ b/task/salary_statistics.go
@@ -1,6 +1,7 @@
 package task
 
 import (
+	"errors"
 	"github.com/shopspring/decimal"
 	"silkserver/constvar"
 	"silkserver/models"
@@ -11,6 +12,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")
 
@@ -22,21 +40,29 @@
 		logx.Error("SalaryStatistics 鏌ヨ鑰冨嫟缁熻 err: " + err.Error())
 		return
 	}
+	if len(attendances) == 0 {
+		logx.Warn("SalaryStatistics 鏌ヨ鑰冨嫟缁熻 empty result")
+		return
+	}
 
 	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 +73,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 {
@@ -60,8 +88,11 @@
 		logx.Error("SalaryStatistics 鏌ヨ宸ョ鐨勮柂璧勬柟妗堝拰鏂板绫诲瀷 err: " + err.Error())
 		return
 	}
+	if len(workTypeManages) == 0 {
+		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 +107,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)
 				}
 			}
 		}
@@ -105,8 +135,8 @@
 	var cars []models.WorkerPosition
 	err := models.NewWorkerPositionSearch().Orm.Table("silk_worker_position").Where("worker_id = ? and start_date >= ? and "+
 		"end_date <= ?", workerId, start, end).Find(&cars).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(cars) == 0 {
+		return data, errors.New("鏌ヨ鏈哄彴绠$悊鍑洪敊")
 	}
 	endCarMap := make(map[int]int)
 	groupMap := make(map[int]int)
@@ -133,8 +163,8 @@
 	var yield []models.YieldRegister
 	err = models.NewYieldRegisterSearch().Orm.Table("silk_yield_register").Where("workshop_number in (?) and group_number "+
 		"in (?) and create_time >= ? and create_time <= ?", workshops, groups, start, end).Find(&yield).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(yield) == 0 {
+		return data, errors.New("鏌ヨ浜ч噺鐧昏琛ㄥ嚭閿�")
 	}
 	yieldRegisterIds := make([]uint, 0)
 	for _, register := range yield {
@@ -142,8 +172,8 @@
 	}
 	yieldMap := make(map[string]decimal.Decimal)
 	items, err := models.NewYieldRegisterItemSearch().SetYieldRegisterIds(yieldRegisterIds).SetCarNumbers(endCars).FindNotTotal()
-	if err != nil {
-		return data, err
+	if err != nil || len(items) == 0 {
+		return data, errors.New("鏌ヨ浜ч噺鐧昏璇︽儏琛ㄥ嚭閿�")
 	}
 	for _, register := range yield {
 		for _, item := range items {
@@ -155,10 +185,10 @@
 	//鏌ヨ绾ゅ害鐧昏琛�
 	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
+	if err != nil || len(fineness) == 0 {
+		return data, errors.New("鏌ヨ绾ゅ害鐧昏琛ㄥ嚭閿�")
 	}
 	finenessIds := make([]uint, 0)
 	for _, register := range fineness {
@@ -168,8 +198,8 @@
 	var checkItems []models.FinenessCheckItem
 	err = models.NewFinenessCheckItemSearch().Orm.Table("silk_fineness_check_item").Where("fineness_register_id in (?) and "+
 		"position in (?)", finenessIds, endCars).Find(&checkItems).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(checkItems) == 0 {
+		return data, errors.New("鏌ヨ绾ゅ害鐧昏璇︽儏琛ㄥ嚭閿�")
 	}
 	checkMap := make(map[string]string)
 	marketMap := make(map[string]string)

--
Gitblit v1.8.0