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