liujiandao
2024-04-19 04e3c197ea38fe242769057276914bf78c93b3ff
考勤导入
7个文件已添加
8个文件已修改
1397 ■■■■■ 已修改文件
constvar/const.go 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/attendance_controller.go 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/request/attendance_request.go 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/salary_plan_controller.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/work_type_manage_controller.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/worker_controller.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/attendance_manage.go 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/db.go 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/shift.go 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/shift_schedule.go 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/shift_schedule_shift.go 248 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/shift_time.go 229 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
router/router.go 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constvar/const.go
@@ -70,3 +70,19 @@
    OutsourcingSupplierRange                               //供货范围
    SalaryType                                             //嘉联薪资类型
)
// ShiftType 班次类型
type ShiftType string
const (
    ShiftTypeRegular ShiftType = "regular" // 固定班次
    ShiftTypeCycle   ShiftType = "cycle"   // 循环班次
)
// ResourceType 订单类型
type ResourceType int
const (
    ResourceTypeDevice ResourceType = iota + 1 // 设备
    ResourceTypeWorker                         // 人员
)
controllers/attendance_controller.go
New file
@@ -0,0 +1,168 @@
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(&params)
    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(&params)
    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, "删除成功")
}
controllers/request/attendance_request.go
New file
@@ -0,0 +1,10 @@
package request
type GetAttendanceList struct {
    PageInfo
    Keyword string `json:"keyword"`
}
type DeleteAttendanceInfo struct {
    Ids []uint `json:"ids"`
}
controllers/salary_plan_controller.go
@@ -84,7 +84,7 @@
//    @Tags        员工薪资/薪酬方案
//    @Summary    删除薪酬方案
//    @Produce    application/json
//    @Param        number    path        string            true    "id"
//    @Param        id    path        string            true    "id"
//    @Param         Authorization    header string true "token"
//    @Success    200        {object}    util.Response        "成功"
//    @Router        /api-jl/v1/salary/deleteSalaryPlanInfo/{id} [delete]
controllers/work_type_manage_controller.go
@@ -82,7 +82,7 @@
//    @Tags        员工管理/工种信息
//    @Summary    删除工种信息
//    @Produce    application/json
//    @Param        number    path        string            true    "id"
//    @Param        id    path        string            true    "id"
//    @Param         Authorization    header string true "token"
//    @Success    200        {object}    util.Response        "成功"
//    @Router        /api-jl/v1/worker/deleteWorkTypeInfo/{id} [delete]
controllers/worker_controller.go
@@ -114,7 +114,7 @@
//    @Tags        员工管理/员工信息
//    @Summary    删除人员信息
//    @Produce    application/json
//    @Param        number    path        string            true    "id"
//    @Param        id    path        string            true    "id"
//    @Param         Authorization    header string true "token"
//    @Success    200        {object}    util.Response        "成功"
//    @Router        /api-jl/v1/worker/deleteWorkerInfo/{id} [delete]
go.mod
@@ -13,6 +13,7 @@
    github.com/swaggo/files v1.0.1
    github.com/swaggo/gin-swagger v1.6.0
    github.com/swaggo/swag v1.16.3
    github.com/xuri/excelize/v2 v2.8.1
    go.uber.org/zap v1.27.0
    golang.org/x/crypto v0.20.0
    google.golang.org/grpc v1.62.0
@@ -55,10 +56,12 @@
    github.com/mitchellh/mapstructure v1.5.0 // indirect
    github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
    github.com/modern-go/reflect2 v1.0.2 // indirect
    github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
    github.com/pelletier/go-toml/v2 v2.1.0 // indirect
    github.com/richardlehane/mscfb v1.0.4 // indirect
    github.com/richardlehane/msoleps v1.0.3 // indirect
    github.com/sagikazarmark/locafero v0.4.0 // indirect
    github.com/sagikazarmark/slog-shim v0.1.0 // indirect
    github.com/shopspring/decimal v1.3.1 // indirect
    github.com/sourcegraph/conc v0.3.0 // indirect
    github.com/spf13/afero v1.11.0 // indirect
    github.com/spf13/cast v1.6.0 // indirect
@@ -66,6 +69,8 @@
    github.com/subosito/gotenv v1.6.0 // indirect
    github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
    github.com/ugorji/go/codec v1.2.11 // indirect
    github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 // indirect
    github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 // indirect
    go.uber.org/multierr v1.10.0 // indirect
    golang.org/x/arch v0.3.0 // indirect
    golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
go.sum
@@ -97,6 +97,8 @@
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE=
@@ -106,6 +108,11 @@
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
@@ -147,6 +154,12 @@
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 h1:Chd9DkqERQQuHpXjR/HSV1jLZA6uaoiwwH3vSuF3IW0=
github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ=
github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE=
github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 h1:qhbILQo1K3mphbwKh1vNm4oGezE1eF9fQWmNiIpSfI4=
github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
@@ -169,6 +182,7 @@
golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
models/attendance_manage.go
New file
@@ -0,0 +1,163 @@
package models
import (
    "fmt"
    "gorm.io/gorm"
    "silkserver/pkg/mysqlx"
)
type (
    //AttendanceManage 考勤管理表
    AttendanceManage struct {
        gorm.Model
        Date             string `json:"date" gorm:"type:varchar(255);comment:考勤时间"`
        WorkerId         string `json:"workerId" gorm:"type:varchar(255);comment:人员id"`
        WorkerName       string `json:"workerName" gorm:"type:varchar(255);comment:人员姓名"`
        StartWorkTime    string `json:"startWorkTime" gorm:"type:varchar(255);comment:上班打卡时间"`
        EndWorkTime      string `json:"endWorkTime" gorm:"type:varchar(255);comment:下班打卡时间"`
        Classes          string `json:"classes" gorm:"type:varchar(255);comment:班次"`
        ClassesStartTime string `json:"classesStartTime" gorm:"type:varchar(255);comment:班次开始时间"`
        ClassesEndTime   string `json:"classesEndTime" gorm:"type:varchar(255);comment:班次下班时间"`
        CreateTime       string `json:"createTime" gorm:"type:varchar(255);comment:添加时间"`
        AddPeople        string `json:"addPeople" gorm:"type:varchar(255);comment:添加人"`
    }
    AttendanceManageSearch struct {
        AttendanceManage
        PageNum  int
        PageSize int
        Ids      []uint
        Orm      *gorm.DB
    }
)
func (slf AttendanceManage) TableName() string {
    return "silk_attendance_manage"
}
func NewAttendanceManageSearch() *AttendanceManageSearch {
    return &AttendanceManageSearch{Orm: mysqlx.GetDB()}
}
func (slf *AttendanceManageSearch) SetOrm(tx *gorm.DB) *AttendanceManageSearch {
    slf.Orm = tx
    return slf
}
func (slf *AttendanceManageSearch) SetPage(page, size int) *AttendanceManageSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *AttendanceManageSearch) SetIds(ids []uint) *AttendanceManageSearch {
    slf.Ids = ids
    return slf
}
func (slf *AttendanceManageSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if len(slf.Ids) > 0 {
        db = db.Where("id in (?)", slf.Ids)
    }
    return db
}
// Create 单条插入
func (slf *AttendanceManageSearch) Create(record *AttendanceManage) error {
    var db = slf.build()
    if err := db.Create(record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
// CreateBatch 批量插入
func (slf *AttendanceManageSearch) CreateBatch(record []*AttendanceManage) error {
    var db = slf.build()
    if err := db.Create(&record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *AttendanceManageSearch) Save(record *AttendanceManage) error {
    var db = slf.build()
    if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *AttendanceManageSearch) UpdateByMap(upMap map[string]interface{}) error {
    var (
        db = slf.build()
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
    }
    return nil
}
func (slf *AttendanceManageSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&AttendanceManage{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *AttendanceManageSearch) Find() ([]*AttendanceManage, int64, error) {
    var (
        records = make([]*AttendanceManage, 0)
        total   int64
        db      = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *AttendanceManageSearch) FindNotTotal() ([]*AttendanceManage, error) {
    var (
        records = make([]*AttendanceManage, 0)
        db      = slf.build()
    )
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
func (slf *AttendanceManageSearch) Count() (int64, error) {
    var (
        total int64
        db    = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return total, fmt.Errorf("find count err: %v", err)
    }
    return total, nil
}
models/db.go
@@ -87,6 +87,7 @@
        Worker{},
        WorkTypeManage{},
        SalaryPlan{},
        AttendanceManage{},
    )
    return err
}
models/shift.go
New file
@@ -0,0 +1,251 @@
package models
import (
    "fmt"
    "github.com/shopspring/decimal"
    "gorm.io/gorm"
    "silkserver/pkg/mysqlx"
)
type (
    // Shift 班次
    Shift struct {
        BaseModelString
        Name          string          `gorm:"unique;type:varchar(191);not null;comment:班次名称" json:"name"`
        ShiftDuration decimal.Decimal `json:"shiftDuration"` // 班次时长
        ShiftTime     []*ShiftTime    `json:"shiftTime"`     // 班次时间
    }
    ShiftSearch struct {
        Shift
        Preload  bool
        Order    string
        PageNum  int
        PageSize int
        Orm      *gorm.DB
    }
)
func (slf Shift) TableName() string {
    return "shift"
}
func NewShiftSearch() *ShiftSearch {
    return &ShiftSearch{Orm: mysqlx.GetDB()}
}
func (slf *ShiftSearch) SetOrm(tx *gorm.DB) *ShiftSearch {
    slf.Orm = tx
    return slf
}
func (slf *ShiftSearch) SetPage(page, size int) *ShiftSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *ShiftSearch) SetOrder(order string) *ShiftSearch {
    slf.Order = order
    return slf
}
func (slf *ShiftSearch) SetID(id string) *ShiftSearch {
    slf.ID = id
    return slf
}
func (slf *ShiftSearch) SetName(name string) *ShiftSearch {
    slf.Name = name
    return slf
}
func (slf *ShiftSearch) SetPreload(preload bool) *ShiftSearch {
    slf.Preload = preload
    return slf
}
func (slf *ShiftSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if slf.ID != "" {
        db = db.Where("id = ?", slf.ID)
    }
    if slf.Name != "" {
        db = db.Where("name = ?", slf.Name)
    }
    if slf.Order != "" {
        db = db.Order(slf.Order)
    }
    if slf.Preload {
        db = db.Model(&Shift{}).Preload("ShiftTime")
    }
    return db
}
// Create 单条插入
func (slf *ShiftSearch) Create(record *Shift) error {
    var db = slf.build()
    if err := db.Create(record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
// CreateBatch 批量插入
func (slf *ShiftSearch) CreateBatch(records []*Shift) error {
    var db = slf.build()
    if err := db.Create(&records).Error; err != nil {
        return fmt.Errorf("create batch err: %v, records: %+v", err, records)
    }
    return nil
}
func (slf *ShiftSearch) Save(record *Shift) error {
    var db = slf.build()
    if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ShiftSearch) UpdateByMap(upMap map[string]interface{}) error {
    var (
        db = slf.build()
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
    }
    return nil
}
func (slf *ShiftSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
    var (
        db = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
    }
    return nil
}
func (slf *ShiftSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&Shift{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *ShiftSearch) First() (*Shift, error) {
    var (
        record = new(Shift)
        db     = slf.build()
    )
    if err := db.First(record).Error; err != nil {
        return record, err
    }
    return record, nil
}
func (slf *ShiftSearch) Find() ([]*Shift, int64, error) {
    var (
        records = make([]*Shift, 0)
        total   int64
        db      = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *ShiftSearch) FindNotTotal() ([]*Shift, error) {
    var (
        records = make([]*Shift, 0)
        db      = slf.build()
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
// FindByQuery 指定条件查询.
func (slf *ShiftSearch) FindByQuery(query string, args []interface{}) ([]*Shift, int64, error) {
    var (
        records = make([]*Shift, 0)
        total   int64
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find by query count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, total, nil
}
// FindByQueryNotTotal 指定条件查询&不查询总条数.
func (slf *ShiftSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*Shift, error) {
    var (
        records = make([]*Shift, 0)
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, nil
}
func (slf *ShiftSearch) FindAll() ([]*Shift, error) {
    var (
        records = make([]*Shift, 0)
        db      = slf.build()
    )
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
models/shift_schedule.go
New file
@@ -0,0 +1,272 @@
package models
import (
    "fmt"
    "gorm.io/gorm"
    "silkserver/constvar"
    "silkserver/pkg/mysqlx"
)
type (
    // ShiftSchedule 排班管理
    ShiftSchedule struct {
        BaseModelString
        ResourceType  constvar.ResourceType `gorm:"type:int(11);comment:资源类型" json:"resourceType"`
        ResourceID    string                `gorm:"index;type:varchar(191);not null;comment:资源ID" json:"resourceId"`
        ResourceName  string                `gorm:"type:varchar(191);comment:资源名称" json:"resourceName"`
        ShiftType     constvar.ShiftType    `gorm:"type:varchar(100);comment:班次类型" json:"shiftType"`
        WorkOnWeekend bool                  `gorm:"type:tinyint(1);comment:休息日无需上班" json:"workOnWeekend"`
        WorkOnHoliday bool                  `gorm:"type:tinyint(1);comment:节假日无需上班" json:"workOnHoliday"`
        ScheduleShift []*ShiftScheduleShift `gorm:"-" json:"-"`     // 班次列表
        Shift         []*Shift              `gorm:"-" json:"shift"` // 班次列表
    }
    ShiftScheduleSearch struct {
        ShiftSchedule
        Keyword     string
        Order       string
        PageNum     int
        PageSize    int
        Orm         *gorm.DB
        ResourceIDs []string
    }
    ShiftScheduleExcel struct {
        ResourceID    string `json:"resourceId"`
        ShiftTypeName string `json:"shiftTypeName"`
        IsWeekendStr  string `json:"isWeekendStr"`
        IsHolidayStr  string `json:"isHolidayStr"`
        ShiftName     string `json:"shiftName"`
    }
)
func (slf ShiftSchedule) TableName() string {
    return "shift_schedule"
}
func NewShiftScheduleSearch() *ShiftScheduleSearch {
    return &ShiftScheduleSearch{Orm: mysqlx.GetDB()}
}
func (slf *ShiftScheduleSearch) SetOrm(tx *gorm.DB) *ShiftScheduleSearch {
    slf.Orm = tx
    return slf
}
func (slf *ShiftScheduleSearch) SetPage(page, size int) *ShiftScheduleSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *ShiftScheduleSearch) SetOrder(order string) *ShiftScheduleSearch {
    slf.Order = order
    return slf
}
func (slf *ShiftScheduleSearch) SetID(id string) *ShiftScheduleSearch {
    slf.ID = id
    return slf
}
func (slf *ShiftScheduleSearch) SetResourceType(resourceType constvar.ResourceType) *ShiftScheduleSearch {
    slf.ResourceType = resourceType
    return slf
}
func (slf *ShiftScheduleSearch) SetResourceID(resourceID string) *ShiftScheduleSearch {
    slf.ResourceID = resourceID
    return slf
}
func (slf *ShiftScheduleSearch) SetResourceIDs(resourceIDs []string) *ShiftScheduleSearch {
    slf.ResourceIDs = resourceIDs
    return slf
}
func (slf *ShiftScheduleSearch) SetKeyword(keyword string) *ShiftScheduleSearch {
    slf.Keyword = keyword
    return slf
}
func (slf *ShiftScheduleSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if slf.ID != "" {
        db = db.Where("id = ?", slf.ID)
    }
    if slf.ResourceID != "" {
        db = db.Where("resource_id = ?", slf.ResourceID)
    }
    if len(slf.ResourceIDs) > 0 {
        db = db.Where("resource_id in (?)", slf.ResourceIDs)
    }
    if slf.ResourceType > 0 {
        db = db.Where("resource_type = ?", slf.ResourceType)
    }
    if slf.Keyword != "" {
        db = db.Where("resource_name LIKE ?", "%"+slf.Keyword+"%")
    }
    if slf.Order != "" {
        db = db.Order(slf.Order)
    }
    return db
}
// Create 单条插入
func (slf *ShiftScheduleSearch) Create(record *ShiftSchedule) error {
    var db = slf.build()
    if err := db.Create(record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
// CreateBatch 批量插入
func (slf *ShiftScheduleSearch) CreateBatch(records []*ShiftSchedule) error {
    var db = slf.build()
    if err := db.Create(&records).Error; err != nil {
        return fmt.Errorf("create batch err: %v, records: %+v", err, records)
    }
    return nil
}
func (slf *ShiftScheduleSearch) Save(record *ShiftSchedule) error {
    var db = slf.build()
    if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ShiftScheduleSearch) UpdateByMap(upMap map[string]interface{}) error {
    var (
        db = slf.build()
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
    }
    return nil
}
func (slf *ShiftScheduleSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
    var (
        db = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
    }
    return nil
}
func (slf *ShiftScheduleSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&ShiftSchedule{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *ShiftScheduleSearch) First() (*ShiftSchedule, error) {
    var (
        record = new(ShiftSchedule)
        db     = slf.build()
    )
    if err := db.First(record).Error; err != nil {
        return record, err
    }
    return record, nil
}
func (slf *ShiftScheduleSearch) Find() ([]*ShiftSchedule, int64, error) {
    var (
        records = make([]*ShiftSchedule, 0)
        total   int64
        db      = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *ShiftScheduleSearch) FindNotTotal() ([]*ShiftSchedule, error) {
    var (
        records = make([]*ShiftSchedule, 0)
        db      = slf.build()
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
// FindByQuery 指定条件查询.
func (slf *ShiftScheduleSearch) FindByQuery(query string, args []interface{}) ([]*ShiftSchedule, int64, error) {
    var (
        records = make([]*ShiftSchedule, 0)
        total   int64
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find by query count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, total, nil
}
// FindByQueryNotTotal 指定条件查询&不查询总条数.
func (slf *ShiftScheduleSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ShiftSchedule, error) {
    var (
        records = make([]*ShiftSchedule, 0)
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, nil
}
models/shift_schedule_shift.go
New file
@@ -0,0 +1,248 @@
package models
import (
    "fmt"
    "gorm.io/gorm"
    "silkserver/pkg/mysqlx"
)
type (
    ShiftScheduleShift struct {
        BaseModelInt
        ShiftScheduleID string `gorm:"index;type:varchar(191);not null;comment:排班管理ID" json:"shiftScheduleId"`
        ShiftID         string `gorm:"type:varchar(191);comment:班次ID" json:"shiftId"`
        Shift           Shift  `json:"shift"`
    }
    ShiftScheduleShiftSearch struct {
        ShiftScheduleShift
        Preload          bool
        Order            string
        PageNum          int
        PageSize         int
        Orm              *gorm.DB
        ShiftScheduleIDs []string
    }
)
func (slf *ShiftScheduleShift) TableName() string {
    return "shift_schedule_shift"
}
func NewShiftScheduleShiftSearch() *ShiftScheduleShiftSearch {
    return &ShiftScheduleShiftSearch{Orm: mysqlx.GetDB()}
}
func (slf *ShiftScheduleShiftSearch) SetOrm(tx *gorm.DB) *ShiftScheduleShiftSearch {
    slf.Orm = tx
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetPage(page, size int) *ShiftScheduleShiftSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetOrder(order string) *ShiftScheduleShiftSearch {
    slf.Order = order
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetShiftScheduleID(shiftScheduleID string) *ShiftScheduleShiftSearch {
    slf.ShiftScheduleID = shiftScheduleID
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetShiftScheduleIDs(shiftScheduleIDs []string) *ShiftScheduleShiftSearch {
    slf.ShiftScheduleIDs = shiftScheduleIDs
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetShiftID(shiftID string) *ShiftScheduleShiftSearch {
    slf.ShiftScheduleID = shiftID
    return slf
}
func (slf *ShiftScheduleShiftSearch) SetPreload(preload bool) *ShiftScheduleShiftSearch {
    slf.Preload = preload
    return slf
}
func (slf *ShiftScheduleShiftSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if slf.ShiftScheduleID != "" {
        db = db.Where("shift_schedule_id = ?", slf.ShiftScheduleID)
    }
    if len(slf.ShiftScheduleIDs) != 0 {
        db = db.Where("shift_schedule_id in ?", slf.ShiftScheduleIDs)
    }
    if slf.ShiftID != "" {
        db = db.Where("shift_id = ?", slf.ShiftID)
    }
    if slf.Preload {
        db = db.Model(&ShiftScheduleShift{}).Preload("Shift").Preload("Shift.ShiftTime")
    }
    if slf.Order != "" {
        db = db.Order(slf.Order)
    }
    return db
}
// Create 单条插入
func (slf *ShiftScheduleShiftSearch) Create(record *ShiftScheduleShift) error {
    var db = slf.build()
    if err := db.Create(record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
// CreateBatch 批量插入
func (slf *ShiftScheduleShiftSearch) CreateBatch(records []*ShiftScheduleShift) error {
    var db = slf.build()
    if err := db.Create(&records).Error; err != nil {
        return fmt.Errorf("create batch err: %v, records: %+v", err, records)
    }
    return nil
}
func (slf *ShiftScheduleShiftSearch) Save(record *ShiftScheduleShift) error {
    var db = slf.build()
    if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ShiftScheduleShiftSearch) UpdateByMap(upMap map[string]interface{}) error {
    var (
        db = slf.build()
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
    }
    return nil
}
func (slf *ShiftScheduleShiftSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
    var (
        db = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
    }
    return nil
}
func (slf *ShiftScheduleShiftSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&ShiftScheduleShift{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *ShiftScheduleShiftSearch) First() (*ShiftScheduleShift, error) {
    var (
        record = new(ShiftScheduleShift)
        db     = slf.build()
    )
    if err := db.First(record).Error; err != nil {
        return record, err
    }
    return record, nil
}
func (slf *ShiftScheduleShiftSearch) Find() ([]*ShiftScheduleShift, int64, error) {
    var (
        records = make([]*ShiftScheduleShift, 0)
        total   int64
        db      = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *ShiftScheduleShiftSearch) FindNotTotal() ([]*ShiftScheduleShift, error) {
    var (
        records = make([]*ShiftScheduleShift, 0)
        db      = slf.build()
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
// FindByQuery 指定条件查询.
func (slf *ShiftScheduleShiftSearch) FindByQuery(query string, args []interface{}) ([]*ShiftScheduleShift, int64, error) {
    var (
        records = make([]*ShiftScheduleShift, 0)
        total   int64
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find by query count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, total, nil
}
// FindByQueryNotTotal 指定条件查询&不查询总条数.
func (slf *ShiftScheduleShiftSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ShiftScheduleShift, error) {
    var (
        records = make([]*ShiftScheduleShift, 0)
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, nil
}
models/shift_time.go
New file
@@ -0,0 +1,229 @@
package models
import (
    "fmt"
    "gorm.io/gorm"
    "silkserver/pkg/mysqlx"
)
type (
    // ShiftTime 班次时间
    ShiftTime struct {
        BaseModelInt
        ShiftID   string `gorm:"index;type:varchar(191);not null;comment:班次ID" json:"shiftId"`
        StartTime string `gorm:"comment:班次开始时间" json:"startTime"`
        EndTime   string `gorm:"comment:班次结束时间" json:"endTime"`
    }
    ShiftTimeSearch struct {
        ShiftTime
        Order    string
        PageNum  int
        PageSize int
        Orm      *gorm.DB
    }
)
func (slf ShiftTime) TableName() string {
    return "shift_time"
}
func NewShiftTimeSearch() *ShiftTimeSearch {
    return &ShiftTimeSearch{Orm: mysqlx.GetDB()}
}
func (slf *ShiftTimeSearch) SetOrm(tx *gorm.DB) *ShiftTimeSearch {
    slf.Orm = tx
    return slf
}
func (slf *ShiftTimeSearch) SetPage(page, size int) *ShiftTimeSearch {
    slf.PageNum, slf.PageSize = page, size
    return slf
}
func (slf *ShiftTimeSearch) SetOrder(order string) *ShiftTimeSearch {
    slf.Order = order
    return slf
}
func (slf *ShiftTimeSearch) SetShiftID(shiftID string) *ShiftTimeSearch {
    slf.ShiftID = shiftID
    return slf
}
func (slf *ShiftTimeSearch) SetID(id uint) *ShiftTimeSearch {
    slf.ID = id
    return slf
}
func (slf *ShiftTimeSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if slf.ID > 0 {
        db = db.Where("id = ?", slf.ID)
    }
    if slf.ShiftID != "" {
        db = db.Where("shift_id = ?", slf.ShiftID)
    }
    if slf.Order != "" {
        db = db.Order(slf.Order)
    }
    return db
}
// Create 单条插入
func (slf *ShiftTimeSearch) Create(record *ShiftTime) error {
    var db = slf.build()
    if err := db.Create(record).Error; err != nil {
        return fmt.Errorf("create err: %v, record: %+v", err, record)
    }
    return nil
}
// CreateBatch 批量插入
func (slf *ShiftTimeSearch) CreateBatch(records []*ShiftTime) error {
    var db = slf.build()
    if err := db.Create(&records).Error; err != nil {
        return fmt.Errorf("create batch err: %v, records: %+v", err, records)
    }
    return nil
}
func (slf *ShiftTimeSearch) Save(record *ShiftTime) error {
    var db = slf.build()
    if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
        return fmt.Errorf("save err: %v, record: %+v", err, record)
    }
    return nil
}
func (slf *ShiftTimeSearch) UpdateByMap(upMap map[string]interface{}) error {
    var (
        db = slf.build()
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
    }
    return nil
}
func (slf *ShiftTimeSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
    var (
        db = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Updates(upMap).Error; err != nil {
        return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
    }
    return nil
}
func (slf *ShiftTimeSearch) Delete() error {
    var db = slf.build()
    if err := db.Unscoped().Delete(&ShiftTime{}).Error; err != nil {
        return err
    }
    return nil
}
func (slf *ShiftTimeSearch) First() (*ShiftTime, error) {
    var (
        record = new(ShiftTime)
        db     = slf.build()
    )
    if err := db.First(record).Error; err != nil {
        return record, err
    }
    return record, nil
}
func (slf *ShiftTimeSearch) Find() ([]*ShiftTime, int64, error) {
    var (
        records = make([]*ShiftTime, 0)
        total   int64
        db      = slf.build()
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find records err: %v", err)
    }
    return records, total, nil
}
func (slf *ShiftTimeSearch) FindNotTotal() ([]*ShiftTime, error) {
    var (
        records = make([]*ShiftTime, 0)
        db      = slf.build()
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find records err: %v", err)
    }
    return records, nil
}
// FindByQuery 指定条件查询.
func (slf *ShiftTimeSearch) FindByQuery(query string, args []interface{}) ([]*ShiftTime, int64, error) {
    var (
        records = make([]*ShiftTime, 0)
        total   int64
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if err := db.Count(&total).Error; err != nil {
        return records, total, fmt.Errorf("find by query count err: %v", err)
    }
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, total, nil
}
// FindByQueryNotTotal 指定条件查询&不查询总条数.
func (slf *ShiftTimeSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*ShiftTime, error) {
    var (
        records = make([]*ShiftTime, 0)
        db      = slf.Orm.Table(slf.TableName()).Where(query, args...)
    )
    if slf.PageNum*slf.PageSize > 0 {
        db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
    }
    if err := db.Find(&records).Error; err != nil {
        return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
    }
    return records, nil
}
router/router.go
@@ -21,7 +21,7 @@
    r.StaticFS(conf.LocalConf.StorePath, http.Dir(conf.LocalConf.StorePath)) // 为用户头像和文件提供静态地址
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    //r.Use(middleware.JWTAuth())
    r.Use(middleware.JWTAuth())
    //r.Use(middleware.VerifyResetPwd())
    urlPrefix := "/api-jl/v1"
@@ -90,6 +90,7 @@
        workerApi.DELETE("deleteWorkTypeInfo/:id", workTypeManageController.DeleteWorkTypeInfo) //删除工种信息
    }
    //薪酬管理
    salaryApi := r.Group(urlPrefix + "/salary")
    salaryPlanController := new(controllers.SalaryPlanController)
    {
@@ -100,5 +101,14 @@
        salaryApi.POST("saveSalaryType", salaryPlanController.SaveSalaryType)                   //保存薪资类型
    }
    //考勤管理
    attendanceApi := r.Group(urlPrefix + "/attendance")
    attendanceController := new(controllers.AttendanceController)
    {
        attendanceApi.POST("attendanceInput", attendanceController.AttendanceInput)             //考勤导入
        attendanceApi.POST("getAttendanceList", attendanceController.GetAttendanceList)         //获取考勤列表
        attendanceApi.DELETE("deleteAttendanceInfo", attendanceController.DeleteAttendanceInfo) //删除考勤信息
    }
    return r
}