package controllers import ( "github.com/gin-gonic/gin" "github.com/xuri/excelize/v2" "silkserver/constvar" "silkserver/controllers/request" "silkserver/extend/code" "silkserver/extend/util" "silkserver/middleware" "silkserver/models" "silkserver/pkg/logx" "silkserver/pkg/timex" "time" ) type AttendanceController struct { } // AttendanceInput // // @Tags 考勤管理 // @Summary 考勤导入 // @Produce application/xlsx // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/attendance/attendanceInput [post] func (slf AttendanceController) AttendanceInput(c *gin.Context) { file, _, err := c.Request.FormFile("file") if err != nil { logx.Error(err.Error()) util.ResponseFormat(c, code.RequestParamError, "文件读取失败") return } defer file.Close() //读取excel文件 f, err := excelize.OpenReader(file) if err != nil { logx.Error(err.Error()) util.ResponseFormat(c, code.RequestParamError, err) return } defer f.Close() rows, err := f.GetRows("Sheet1") if err != nil { logx.Error(err.Error()) util.ResponseFormat(c, code.RequestParamError, err) return } if len(rows) <= 1 { logx.Error(err.Error()) util.ResponseFormat(c, code.RequestParamError, "该文件没有数据内容") return } attendances := make([]*models.AttendanceManage, 0) workerIds := make([]string, 0) idMap := make(map[string]interface{}) info := middleware.GetUserInfo(c) for k, row := range rows { if k == 0 { continue } var am models.AttendanceManage am.Date = row[0] am.WorkerId = row[1] am.WorkerName = row[2] am.StartWorkTime = row[3] am.EndWorkTime = row[4] if am.WorkerId != "" { idMap[am.WorkerId] = "" } am.AddPeople = info.NickName am.CreateTime = timex.TimeToString2(time.Now()) attendances = append(attendances, &am) } for K, _ := range idMap { workerIds = append(workerIds, K) } //查询班次信息 schedules, err := models.NewShiftScheduleSearch().SetResourceIDs(workerIds).SetResourceType(constvar.ResourceTypeWorker).FindNotTotal() if err != nil { util.ResponseFormat(c, code.RequestParamError, err) return } scheduleIds := make([]string, 0) for _, schedule := range schedules { scheduleIds = append(scheduleIds, schedule.ID) } shifts, _ := models.NewShiftScheduleShiftSearch().SetShiftScheduleIDs(scheduleIds).SetPreload(true).FindNotTotal() for _, schedule := range schedules { for _, shift := range shifts { if schedule.ID == shift.ShiftScheduleID { schedule.Shift = append(schedule.Shift, &shift.Shift) } } } for _, attendance := range attendances { for _, schedule := range schedules { if attendance.WorkerId == schedule.ResourceID { if len(schedule.Shift) > 0 { attendance.Classes = schedule.Shift[0].Name if len(schedule.Shift[0].ShiftTime) > 0 { t := schedule.Shift[0].ShiftTime[0] attendance.ClassesStartTime = t.StartTime attendance.ClassesEndTime = t.EndTime } } break } } } //插入考勤数据 err = models.NewAttendanceManageSearch().CreateBatch(attendances) if err != nil { util.ResponseFormat(c, code.RequestParamError, err) return } util.ResponseFormat(c, code.Success, "导入成功") } // GetAttendanceList // // @Tags 考勤管理 // @Summary 获取考勤列表 // @Produce application/json // @Param object body request.GetAttendanceList true "参数" // @Param Authorization header string true "token" // @Success 200 {object} util.ResponseList{data=[]models.AttendanceManage} "成功" // @Router /api-jl/v1/attendance/getAttendanceList [post] func (slf AttendanceController) GetAttendanceList(c *gin.Context) { var params request.GetAttendanceList err := c.BindJSON(¶ms) if err != nil { util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") return } manages, total, err := models.NewAttendanceManageSearch().SetPage(params.Page, params.PageSize).Find() if err != nil { util.ResponseFormat(c, code.RequestParamError, err) return } util.ResponseFormatList(c, code.Success, manages, total) } // DeleteAttendanceInfo // // @Tags 考勤管理 // @Summary 删除考勤信息 // @Produce application/json // @Param object body request.DeleteAttendanceInfo true "参数" // @Param Authorization header string true "token" // @Success 200 {object} util.Response "成功" // @Router /api-jl/v1/attendance/deleteAttendanceInfo [delete] func (slf AttendanceController) DeleteAttendanceInfo(c *gin.Context) { var params request.DeleteAttendanceInfo err := c.BindJSON(¶ms) if err != nil { util.ResponseFormat(c, code.RequestParamError, "参数解析失败,数据类型错误") return } err = models.NewAttendanceManageSearch().SetIds(params.Ids).Delete() if err != nil { util.ResponseFormat(c, code.RequestParamError, err) return } util.ResponseFormat(c, code.Success, "删除成功") }