liujiandao
2024-04-30 a5435e6664093cd4b2ead49409cb41e301e46514
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 {
      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
      }
@@ -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())
                     }
                  }
               }
               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