From 20af882d5a8b59f4c4a5645fd2e4fd4a244609f2 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期一, 22 四月 2024 16:40:45 +0800 Subject: [PATCH] 考勤统计 --- controllers/attendance_controller.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 55 insertions(+), 0 deletions(-) diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go index 6a88958..e63e361 100644 --- a/controllers/attendance_controller.go +++ b/controllers/attendance_controller.go @@ -6,12 +6,14 @@ "github.com/xuri/excelize/v2" "silkserver/constvar" "silkserver/controllers/request" + "silkserver/controllers/response" "silkserver/extend/code" "silkserver/extend/util" "silkserver/middleware" "silkserver/models" "silkserver/pkg/logx" "silkserver/pkg/timex" + "strings" "time" ) @@ -185,6 +187,59 @@ util.ResponseFormatList(c, code.Success, manages, total) } +// GetAttendanceStatistic +// +// @Tags 鑰冨嫟绠$悊 +// @Summary 鑾峰彇鑰冨嫟缁熻 +// @Produce application/json +// @Param object body request.GetAttendanceStatistic true "鍙傛暟" +// @Param Authorization header string true "token" +// @Success 200 {object} util.Response{data=response.AttendanceList} "鎴愬姛" +// @Router /api-jl/v1/attendance/getAttendanceStatistic [post] +func (slf AttendanceController) GetAttendanceStatistic(c *gin.Context) { + var params request.GetAttendanceStatistic + err := c.BindJSON(¶ms) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�") + return + } + if params.Month == "" { + util.ResponseFormat(c, code.RequestParamError, "鍙傛暟涓嶈兘涓虹┖") + return + } + manages, err := models.NewAttendanceManageSearch().SetMonth(params.Month).SetPreload(true).FindNotTotal() + if err != nil { + util.ResponseFormat(c, code.RequestParamError, err) + return + } + m := make(map[string]response.AttendanceStatistic) + for _, manage := range manages { + var as response.AttendanceStatistic + if _, ok := m[manage.WorkerId]; ok { + as = m[manage.WorkerId] + } else { + as.WorkerId = manage.WorkerId + as.WorkerName = manage.WorkerName + as.WorkType = manage.WorkType.WorkName + as.Month = params.Month + } + as.WeekdayOverTime = as.WeekdayOverTime.Add(manage.OverTimeDuration) + as.ActualAttendanceDays = as.ActualAttendanceDays + 1 + var ad response.AttendanceDetail + ad.Date = strings.ReplaceAll(manage.Date, params.Month+"-", "") + ad.Status = manage.Status + as.Details = append(as.Details, ad) + + m[manage.WorkerId] = as + } + var list response.AttendanceList + for _, statistic := range m { + list.List = append(list.List, statistic) + } + + util.ResponseFormat(c, code.Success, list) +} + // DeleteAttendanceInfo // // @Tags 鑰冨嫟绠$悊 -- Gitblit v1.8.0