| | |
| | | ) |
| | | |
| | | 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") |
| | | |
| | |
| | | } |
| | | |
| | | 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 { |
| | | if _, ok := reportMap[attendance.WorkerId]; !ok { |
| | | var rf models.SalaryReportForm |
| | | 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 |
| | | reportMap[attendance.WorkerId] = &rf |
| | | } |
| | | var data utils.SalaryCalculateData |
| | | if _, ok := dataMap[attendance.WorkerId]; ok { |
| | | data = dataMap[attendance.WorkerId] |
| | | } |
| | | if attendance.WorkTypeId > 0 { |
| | | workTypeIdMap[attendance.WorkTypeId] = attendance.WorkTypeId |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | 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()) |
| | | } |
| | | } |
| | | } |
| | | detail.Amount = amount |
| | | issueSalary = issueSalary.Add(amount) |
| | | details = append(details, detail) |
| | | details = append(details, &detail) |
| | | } |
| | | } |
| | | } |
| | |
| | | //查询纤度登记表 |
| | | 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 |