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, "删除成功")
|
}
|