From a904aa32e66688ba76c9e4b71b6738b0ba5f5d4f Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期四, 25 七月 2024 11:44:09 +0800
Subject: [PATCH] 添加字段,工种添加工种编码,用于计算工资(id无法固定工种信息)

---
 controllers/attendance_controller.go |   70 +++++++++++++++++++++++++++--------
 1 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go
index ed10c34..984b09a 100644
--- a/controllers/attendance_controller.go
+++ b/controllers/attendance_controller.go
@@ -12,6 +12,7 @@
 	"silkserver/middleware"
 	"silkserver/models"
 	"silkserver/pkg/logx"
+	"silkserver/pkg/structx"
 	"silkserver/pkg/timex"
 	"time"
 )
@@ -113,6 +114,7 @@
 		for _, worker := range workers {
 			if attendance.WorkerId == worker.ID {
 				attendance.WorkTypeId = worker.WorkTypeId
+				attendance.PhoneNum = worker.PhoneNum
 				break
 			}
 		}
@@ -201,7 +203,7 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	manages, total, err := models.NewAttendanceManageSearch().SetPage(params.Page, params.PageSize).Find()
+	manages, total, err := models.NewAttendanceManageSearch().SetPage(params.Page, params.PageSize).SetOrder("created_at desc").Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, err)
 		return
@@ -229,14 +231,37 @@
 		util.ResponseFormat(c, code.RequestParamError, "浜哄憳id鍜岃�冨嫟鏃ユ湡涓嶈兘涓虹┖")
 		return
 	}
-	m := make(map[string]interface{})
-	m["status"] = params.Status
-	m["overTimeDuration"] = params.OverTimeDuration
-	err = models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).UpdateByMap(m)
+	count, err := models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).Count()
 	if err != nil {
-		util.ResponseFormat(c, code.RequestParamError, "鏇存柊澶辫触")
+		util.ResponseFormat(c, code.RequestParamError, err)
 		return
 	}
+	if count > 0 {
+		m := make(map[string]interface{})
+		m["status"] = params.Status
+		m["over_time_duration"] = params.OverTimeDuration
+		err = models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).UpdateByMap(m)
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "鏇存柊澶辫触")
+			return
+		}
+	} else {
+		var manage models.AttendanceManage
+		err = structx.AssignTo(params, &manage)
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲澶辫触")
+			return
+		}
+		info := middleware.GetUserInfo(c)
+		manage.AddPeople = info.NickName
+		manage.CreateTime = timex.TimeToString2(time.Now())
+		err = models.NewAttendanceManageSearch().Create(&manage)
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "鏇存柊澶辫触")
+			return
+		}
+	}
+
 	util.ResponseFormat(c, code.Success, "鏇存柊鎴愬姛")
 }
 
@@ -261,25 +286,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)
-	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)
-	}
+	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)
@@ -292,6 +319,17 @@
 			as.WorkerName = manage.WorkerName
 			as.WorkType = manage.WorkType.WorkName
 			as.Month = params.Month
+			as.WorkTypeId = manage.WorkTypeId
+			var details []response.AttendanceDetail
+			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
 		}
 		as.WeekdayOverTime = as.WeekdayOverTime.Add(manage.OverTimeDuration)

--
Gitblit v1.8.0