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