| | |
| | | package task |
| | | |
| | | import ( |
| | | "errors" |
| | | "github.com/shopspring/decimal" |
| | | "silkserver/constvar" |
| | | "silkserver/models" |
| | |
| | | ) |
| | | |
| | | 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") |
| | | |
| | |
| | | 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 |
| | | } |
| | |
| | | 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 { |
| | |
| | | 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 { |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | |
| | | 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) |
| | |
| | | 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 { |
| | |
| | | } |
| | | 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 { |
| | |
| | | //查询纤度登记表 |
| | | 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 { |
| | |
| | | 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) |