yinbentan
2024-07-25 a904aa32e66688ba76c9e4b71b6738b0ba5f5d4f
controllers/attendance_controller.go
@@ -12,11 +12,35 @@
   "silkserver/middleware"
   "silkserver/models"
   "silkserver/pkg/logx"
   "silkserver/pkg/structx"
   "silkserver/pkg/timex"
   "time"
)
type AttendanceController struct {
}
// GetTemplate
// @Tags      考勤管理
// @Summary       获取模版列表
// @Produce      application/json
// @Param      object   body      request.TemplateCategoryRequest   true   "参数"
// @Success      200      {object}   util.Response         "成功"
// @Router      /api-jl/v1/attendance/getTemplate [post]
func (slf AttendanceController) GetTemplate(c *gin.Context) {
   var params request.TemplateCategoryRequest
   if err := c.ShouldBind(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   list, err := models.NewFileTemplateAttachmentSearch().SetCategory(params.Category).Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找失败")
      return
   }
   util.ResponseFormat(c, code.Success, list)
}
// AttendanceInput
@@ -90,6 +114,7 @@
      for _, worker := range workers {
         if attendance.WorkerId == worker.ID {
            attendance.WorkTypeId = worker.WorkTypeId
            attendance.PhoneNum = worker.PhoneNum
            break
         }
      }
@@ -178,7 +203,7 @@
      util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误")
      return
   }
   manages, total, err := models.NewAttendanceManageSearch().SetPage(params.Page, params.PageSize).Find()
   manages, total, err := models.NewAttendanceManageSearch().SetPage(params.Page, params.PageSize).SetOrder("created_at desc").Find()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
@@ -206,14 +231,37 @@
      util.ResponseFormat(c, code.RequestParamError, "人员id和考勤日期不能为空")
      return
   }
   m := make(map[string]interface{})
   m["status"] = params.Status
   m["overTimeDuration"] = params.OverTimeDuration
   err = models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).UpdateByMap(m)
   count, err := models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).Count()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "更新失败")
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   if count > 0 {
      m := make(map[string]interface{})
      m["status"] = params.Status
      m["over_time_duration"] = params.OverTimeDuration
      err = models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).UpdateByMap(m)
      if err != nil {
         util.ResponseFormat(c, code.RequestParamError, "更新失败")
         return
      }
   } else {
      var manage models.AttendanceManage
      err = structx.AssignTo(params, &manage)
      if err != nil {
         util.ResponseFormat(c, code.RequestParamError, "数据转换失败")
         return
      }
      info := middleware.GetUserInfo(c)
      manage.AddPeople = info.NickName
      manage.CreateTime = timex.TimeToString2(time.Now())
      err = models.NewAttendanceManageSearch().Create(&manage)
      if err != nil {
         util.ResponseFormat(c, code.RequestParamError, "更新失败")
         return
      }
   }
   util.ResponseFormat(c, code.Success, "更新成功")
}
@@ -238,25 +286,27 @@
      return
   }
   //获取月份天数
   location, err := time.ParseInLocation("2006-01", "2024-04", time.Local)
   location, err := time.ParseInLocation("2006-01", params.Month, time.Local)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "月份格式错误")
      return
   }
   year, month, _ := location.Date()
   date := timex.GetDate(year, month)
   var details []response.AttendanceDetail
   for i := 1; i <= date; i++ {
      var ad response.AttendanceDetail
      ad.Date = i
      ad.Status = constvar.Vacation
      details = append(details, ad)
   }
   weeks := timex.GetWeeksOfMonth(year, month)
   manages, err := models.NewAttendanceManageSearch().SetMonth(params.Month).SetPreload(true).FindNotTotal()
   manages, err := models.NewAttendanceManageSearch().SetMonth(params.Month).SetKeyword(params.Keyword).SetPreload(true).FindNotTotal()
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, err)
      return
   }
   weekMap := map[string]string{
      "Sunday":    "周日",
      "Monday":    "周一",
      "Tuesday":   "周二",
      "Wednesday": "周三",
      "Thursday":  "周四",
      "Friday":    "周五",
      "Saturday":  "周六",
   }
   m := make(map[string]response.AttendanceStatistic)
@@ -269,13 +319,31 @@
         as.WorkerName = manage.WorkerName
         as.WorkType = manage.WorkType.WorkName
         as.Month = params.Month
         as.WorkTypeId = manage.WorkTypeId
         var details []response.AttendanceDetail
         for _, week := range weeks {
            for _, day := range week {
               var ad response.AttendanceDetail
               ad.Date = day.Day()
               ad.WeekDay = weekMap[day.Weekday().String()]
               ad.Status = constvar.Vacation
               details = append(details, ad)
            }
         }
         as.Details = details
      }
      as.WeekdayOverTime = as.WeekdayOverTime.Add(manage.OverTimeDuration)
      as.ActualAttendanceDays = as.ActualAttendanceDays + 1
      time2, _ := timex.StringToTime2(manage.Date)
      day := time2.Day()
      as.Details[day-1].Status = manage.Status
      detail := as.Details[day-1]
      detail.Status = manage.Status
      detail.StartWorkTime = manage.StartWorkTime
      detail.EndWorkTime = manage.EndWorkTime
      detail.ClassesStartTime = manage.ClassesStartTime
      detail.ClassesEndTime = manage.ClassesEndTime
      detail.Classes = manage.Classes
      as.Details[day-1] = detail
      m[manage.WorkerId] = as
   }