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(&params)
+	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