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