liujiandao
2024-04-22 0f8093693d0cd3b8da71abac95c617aa850f4819
controllers/attendance_controller.go
@@ -2,6 +2,7 @@
import (
   "github.com/gin-gonic/gin"
   "github.com/shopspring/decimal"
   "github.com/xuri/excelize/v2"
   "silkserver/constvar"
   "silkserver/controllers/request"
@@ -71,12 +72,31 @@
      }
      am.AddPeople = info.NickName
      am.CreateTime = timex.TimeToString2(time.Now())
      am.Status = constvar.Normal
      attendances = append(attendances, &am)
   }
   for K, _ := range idMap {
      workerIds = append(workerIds, K)
   }
   //查询人员工种
   workers, err := models.NewWorkerSearch().SetIds(workerIds).FindNotTotal()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   for _, attendance := range attendances {
      for _, worker := range workers {
         if attendance.WorkerId == worker.ID {
            attendance.WorkTypeId = worker.WorkTypeId
            break
         }
      }
   }
   //查询加班规则
   rule, _ := models.NewAttendanceRuleSearch().First()
   //查询班次信息
   schedules, err := models.NewShiftScheduleSearch().SetResourceIDs(workerIds).SetResourceType(constvar.ResourceTypeWorker).FindNotTotal()
   if err != nil {
@@ -95,6 +115,11 @@
         }
      }
   }
   var overTime int64 = 0
   hour := decimal.NewFromInt(3600)
   if rule.WeekdayRule == 2 {
      overTime = rule.OverTimeStart.Mul(hour).IntPart()
   }
   for _, attendance := range attendances {
      for _, schedule := range schedules {
         if attendance.WorkerId == schedule.ResourceID {
@@ -104,6 +129,23 @@
                  t := schedule.Shift[0].ShiftTime[0]
                  attendance.ClassesStartTime = t.StartTime
                  attendance.ClassesEndTime = t.EndTime
                  //判断打卡时间
                  t1, _ := timex.StringToClock(attendance.EndWorkTime)
                  t2, _ := timex.StringToClock(t.EndTime)
                  endWork := t1.Unix()
                  endClasses := t2.Unix()
                  if endWork < endClasses {
                     attendance.Status = constvar.Abnormal
                  } else if endWork > endClasses {
                     //判断加班
                     if rule.WeekdayRule == 2 {
                        ot := endWork - endClasses
                        if ot > overTime {
                           attendance.OverTimeDuration = decimal.NewFromInt(ot).DivRound(hour, 2)
                           attendance.Status = constvar.Overtime
                        }
                     }
                  }
               }
            }
            break
@@ -166,3 +208,44 @@
   }
   util.ResponseFormat(c, code.Success, "删除成功")
}
// GetAttendanceRule
//
//   @Tags      考勤管理
//   @Summary   获取加班规则
//   @Produce   application/json
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.Response      "成功"
//   @Router      /api-jl/v1/attendance/getAttendanceRule [get]
func (slf AttendanceController) GetAttendanceRule(c *gin.Context) {
   rule, err := models.NewAttendanceRuleSearch().First()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   util.ResponseFormat(c, code.Success, rule)
}
// SaveAttendanceRule
//
//   @Tags      考勤管理
//   @Summary   保存加班规则
//   @Produce   application/json
//   @Param      object   body      models.AttendanceRule   true   "参数"
//   @Param        Authorization   header string true "token"
//   @Success   200      {object}   util.Response      "成功"
//   @Router      /api-jl/v1/attendance/saveAttendanceRule [post]
func (slf AttendanceController) SaveAttendanceRule(c *gin.Context) {
   var rule models.AttendanceRule
   err := c.BindJSON(&rule)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   err = models.NewAttendanceRuleSearch().Save(&rule)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   util.ResponseFormat(c, code.Success, "保存成功")
}