From 0f8093693d0cd3b8da71abac95c617aa850f4819 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期一, 22 四月 2024 15:44:55 +0800 Subject: [PATCH] 考勤管理 --- controllers/attendance_controller.go | 83 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 83 insertions(+), 0 deletions(-) diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go index 117131c..6a88958 100644 --- a/controllers/attendance_controller.go +++ b/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, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + err = models.NewAttendanceRuleSearch().Save(&rule) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, err) + return + } + util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛") +} -- Gitblit v1.8.0