From d6aea9913510936bde157e22a1f7042a0eb33ac3 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期日, 28 四月 2024 10:36:50 +0800
Subject: [PATCH] 时间范围和该工人以往添加记录重复性校验

---
 controllers/attendance_controller.go |  169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 169 insertions(+), 0 deletions(-)

diff --git a/controllers/attendance_controller.go b/controllers/attendance_controller.go
index 6a88958..f7c430f 100644
--- a/controllers/attendance_controller.go
+++ b/controllers/attendance_controller.go
@@ -6,16 +6,41 @@
 	"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/structx"
 	"silkserver/pkg/timex"
 	"time"
 )
 
 type AttendanceController struct {
+}
+
+// GetTemplate
+// @Tags		鑰冨嫟绠$悊
+// @Summary	    鑾峰彇妯$増鍒楄〃
+// @Produce		application/json
+// @Param		object	body		request.TemplateCategoryRequest	true	"鍙傛暟"
+// @Success		200		{object}	util.Response			"鎴愬姛"
+// @Router		/api-jl/v1/attendance/getTemplate [post]
+func (slf AttendanceController) GetTemplate(c *gin.Context) {
+	var params request.TemplateCategoryRequest
+	if err := c.ShouldBind(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err.Error())
+		return
+	}
+
+	list, err := models.NewFileTemplateAttachmentSearch().SetCategory(params.Category).Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		return
+	}
+
+	util.ResponseFormat(c, code.Success, list)
 }
 
 // AttendanceInput
@@ -185,6 +210,150 @@
 	util.ResponseFormatList(c, code.Success, manages, total)
 }
 
+// UpdateAttendance
+//
+//	@Tags		鑰冨嫟绠$悊
+//	@Summary	鏇存柊鑰冨嫟
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateAttendance	true	"鍙傛暟"
+//	@Param     	Authorization	header string true "token"
+//	@Success	200		{object}	util.Response		"鎴愬姛"
+//	@Router		/api-jl/v1/attendance/updateAttendance [post]
+func (slf AttendanceController) UpdateAttendance(c *gin.Context) {
+	var params request.UpdateAttendance
+	err := c.BindJSON(&params)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+	if params.Date == "" || params.WorkerId == "" {
+		util.ResponseFormat(c, code.RequestParamError, "浜哄憳id鍜岃�冨嫟鏃ユ湡涓嶈兘涓虹┖")
+		return
+	}
+	count, err := models.NewAttendanceManageSearch().SetDate(params.Date).SetWorkerId(params.WorkerId).Count()
+	if err != nil {
+		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, "鏇存柊鎴愬姛")
+}
+
+// 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
+	}
+	//鑾峰彇鏈堜唤澶╂暟
+	location, err := time.ParseInLocation("2006-01", params.Month, time.Local)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏈堜唤鏍煎紡閿欒")
+		return
+	}
+	year, month, _ := location.Date()
+	weeks := timex.GetWeeksOfMonth(year, month)
+
+	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)
+	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.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)
+		as.ActualAttendanceDays = as.ActualAttendanceDays + 1
+		time2, _ := timex.StringToTime2(manage.Date)
+		day := time2.Day()
+		detail := as.Details[day-1]
+		detail.Status = manage.Status
+		detail.StartWorkTime = manage.StartWorkTime
+		detail.EndWorkTime = manage.EndWorkTime
+		detail.ClassesStartTime = manage.ClassesStartTime
+		detail.ClassesEndTime = manage.ClassesEndTime
+		detail.Classes = manage.Classes
+		as.Details[day-1] = detail
+
+		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