From 634c7f5063b8977775be2a4a3584ce38ff055caa Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期四, 25 四月 2024 18:11:13 +0800
Subject: [PATCH] 考勤统计修改

---
 controllers/attendance_controller.go        |   28 ++++++++++----
 pkg/timex/timex.go                          |   23 +++++++++++
 controllers/response/attendance_response.go |    1 
 docs/swagger.yaml                           |    5 ++
 docs/docs.go                                |    7 +++
 docs/swagger.json                           |    7 +++
 controllers/request/attendance_request.go   |    3 +
 controllers/worker_controller.go            |    2 
 models/attendance_manage.go                 |   10 +++++
 9 files changed, 76 insertions(+), 10 deletions(-)

diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go
index 4a5978d..f7c430f 100644
--- a/controllers/attendance_controller.go
+++ b/controllers/attendance_controller.go
@@ -285,18 +285,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)
+	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)
@@ -311,11 +320,14 @@
 			as.Month = params.Month
 			as.WorkTypeId = manage.WorkTypeId
 			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)
+			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
 		}
diff --git a/controllers/request/attendance_request.go b/controllers/request/attendance_request.go
index 336361b..c4cdcdf 100644
--- a/controllers/request/attendance_request.go
+++ b/controllers/request/attendance_request.go
@@ -19,7 +19,8 @@
 }
 
 type GetAttendanceStatistic struct {
-	Month string `json:"month"` //鏈堜唤
+	Month   string `json:"month"` //鏈堜唤
+	Keyword string `json:"keyword"`
 }
 
 type UpdateAttendance struct {
diff --git a/controllers/response/attendance_response.go b/controllers/response/attendance_response.go
index 09a75c9..d84aa2a 100644
--- a/controllers/response/attendance_response.go
+++ b/controllers/response/attendance_response.go
@@ -24,6 +24,7 @@
 
 type AttendanceDetail struct {
 	Date             int                       `json:"date"`             //鏃ユ湡
+	WeekDay          string                    `json:"weekDay"`          //鏄熸湡
 	Status           constvar.AttendanceStatus `json:"status"`           //鐘舵��
 	StartWorkTime    string                    `json:"startWorkTime"`    //涓婄彮鎵撳崱鏃堕棿
 	EndWorkTime      string                    `json:"endWorkTime"`      //涓嬬彮鎵撳崱鏃堕棿
diff --git a/controllers/worker_controller.go b/controllers/worker_controller.go
index e16a888..2fb8a09 100644
--- a/controllers/worker_controller.go
+++ b/controllers/worker_controller.go
@@ -101,7 +101,7 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	workers, total, err := models.NewWorkerSearch().SetPage(params.Page, params.PageSize).Find()
+	workers, total, err := models.NewWorkerSearch().SetPage(params.Page, params.PageSize).SetOrder("updated_at desc").Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鏌ヨ澶辫触")
 		return
diff --git a/docs/docs.go b/docs/docs.go
index eb82777..17b211f 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -3551,6 +3551,9 @@
         "request.GetAttendanceStatistic": {
             "type": "object",
             "properties": {
+                "keyword": {
+                    "type": "string"
+                },
                 "month": {
                     "description": "鏈堜唤",
                     "type": "string"
@@ -4161,6 +4164,10 @@
                             "$ref": "#/definitions/constvar.AttendanceStatus"
                         }
                     ]
+                },
+                "weekDay": {
+                    "description": "鏄熸湡",
+                    "type": "string"
                 }
             }
         },
diff --git a/docs/swagger.json b/docs/swagger.json
index 741cb43..2e1c8b7 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -3539,6 +3539,9 @@
         "request.GetAttendanceStatistic": {
             "type": "object",
             "properties": {
+                "keyword": {
+                    "type": "string"
+                },
                 "month": {
                     "description": "鏈堜唤",
                     "type": "string"
@@ -4149,6 +4152,10 @@
                             "$ref": "#/definitions/constvar.AttendanceStatus"
                         }
                     ]
+                },
+                "weekDay": {
+                    "description": "鏄熸湡",
+                    "type": "string"
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 9f9d21a..2f13f68 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -901,6 +901,8 @@
     type: object
   request.GetAttendanceStatistic:
     properties:
+      keyword:
+        type: string
       month:
         description: 鏈堜唤
         type: string
@@ -1329,6 +1331,9 @@
         allOf:
         - $ref: '#/definitions/constvar.AttendanceStatus'
         description: 鐘舵��
+      weekDay:
+        description: 鏄熸湡
+        type: string
     type: object
   response.AttendanceList:
     properties:
diff --git a/models/attendance_manage.go b/models/attendance_manage.go
index 6663197..08db86f 100644
--- a/models/attendance_manage.go
+++ b/models/attendance_manage.go
@@ -34,6 +34,7 @@
 		Preload  bool
 		Ids      []uint
 		Month    string
+		Keyword  string
 		Orm      *gorm.DB
 	}
 )
@@ -81,6 +82,11 @@
 	return slf
 }
 
+func (slf *AttendanceManageSearch) SetKeyword(keyword string) *AttendanceManageSearch {
+	slf.Keyword = keyword
+	return slf
+}
+
 func (slf *AttendanceManageSearch) build() *gorm.DB {
 	var db = slf.Orm.Table(slf.TableName())
 
@@ -104,6 +110,10 @@
 		db = db.Where("worker_id = ?", slf.WorkerId)
 	}
 
+	if slf.Keyword != "" {
+		db = db.Where("worker_name like ? or worker_id like ?", "%"+slf.Keyword+"%", "%"+slf.Keyword+"%")
+	}
+
 	return db
 }
 
diff --git a/pkg/timex/timex.go b/pkg/timex/timex.go
index e07e2f9..5fcb5dc 100644
--- a/pkg/timex/timex.go
+++ b/pkg/timex/timex.go
@@ -75,3 +75,26 @@
 	}
 	return day
 }
+
+// 鑾峰彇涓�涓湀鍐呯殑鎵�鏈夋槦鏈�
+func GetWeeksOfMonth(year int, month time.Month) [][]time.Time {
+	firstDay := time.Date(year, month, 1, 0, 0, 0, 0, time.Local)
+	lastDay := firstDay.AddDate(0, 1, -1) // 涓嬩竴涓湀鐨勭涓�澶╁噺涓�锛屽緱鍒版湰鏈堢殑鏈�鍚庝竴澶�
+
+	weeks := make([][]time.Time, 0)
+	currentWeek := make([]time.Time, 0)
+	current := firstDay
+
+	for !current.After(lastDay) {
+		currentWeek = append(currentWeek, current)
+		current = current.AddDate(0, 0, 1) // 澧炲姞涓�澶�
+
+		// 濡傛灉褰撳墠鍛ㄥ凡缁忔弧浜�7澶╋紝鎴栬�呭凡缁忓埌浜嗘湀鐨勬渶鍚庝竴澶╋紝鍒欎繚瀛樿繖涓�鍛�
+		if len(currentWeek) == 7 || current.After(lastDay) {
+			weeks = append(weeks, currentWeek)
+			currentWeek = make([]time.Time, 0) // 閲嶇疆褰撳墠鍛�
+		}
+	}
+
+	return weeks
+}

--
Gitblit v1.8.0