| | |
| | | "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(¶ms); 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 |
| | |
| | | for _, worker := range workers { |
| | | if attendance.WorkerId == worker.ID { |
| | | attendance.WorkTypeId = worker.WorkTypeId |
| | | attendance.PhoneNum = worker.PhoneNum |
| | | break |
| | | } |
| | | } |
| | |
| | | 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 |
| | |
| | | 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, "更新成功") |
| | | } |
| | | |
| | |
| | | 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) |
| | |
| | | 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 |
| | | } |