| | |
| | | |
| | | import ( |
| | | "github.com/gin-gonic/gin" |
| | | "github.com/shopspring/decimal" |
| | | "github.com/xuri/excelize/v2" |
| | | "silkserver/constvar" |
| | | "silkserver/controllers/request" |
| | |
| | | } |
| | | 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 { |
| | |
| | | } |
| | | } |
| | | } |
| | | 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 { |
| | |
| | | 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 |
| | |
| | | } |
| | | 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, "保存成功") |
| | | } |