From a904aa32e66688ba76c9e4b71b6738b0ba5f5d4f Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期四, 25 七月 2024 11:44:09 +0800 Subject: [PATCH] 添加字段,工种添加工种编码,用于计算工资(id无法固定工种信息) --- controllers/attendance_controller.go | 102 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 85 insertions(+), 17 deletions(-) diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go index 709151e..984b09a 100644 --- a/controllers/attendance_controller.go +++ b/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(¶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 @@ -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, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") 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 } -- Gitblit v1.8.0