yinbentan
2024-08-30 cc7c2094568ea8f9d1697da5ed0a2c759ca81abd
方法修改,修改薪资列表,添加分页查询
3个文件已修改
149 ■■■■ 已修改文件
controllers/salary_plan_controller.go 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/payroll_constitute.go 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/payroll_salary_plan.go 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/salary_plan_controller.go
@@ -317,6 +317,8 @@
//    @Param         object  query    request.PayrollSalaryPlan true  "查询参数"
//    @Success    200        {object}    util.ResponseList{data=[]models.PayrollSalaryPlan}    "成功"
//    @Router        /api-jl/v1/salary/getPayrollSalaryPlanList [get]
//
// Deprecated: 此方法将在未来版本中删除
func (slf SalaryPlanController) GetPayrollSalaryPlanList(c *gin.Context) {
    var params request.PayrollSalaryPlan
    if err := c.ShouldBindQuery(&params); err != nil {
@@ -377,7 +379,7 @@
    }
    constitute.CreatedBy = info.NickName
    if payrollConstitute, err := models.NewPayrollConstituteSearch().SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetSalaryPlanId(params.SalaryPlanId).First(); err != nil && payrollConstitute != nil {
    if payrollConstitute, err := models.NewPayrollConstituteSearch().SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetSalaryPlanId(params.SalaryPlanId).First(); err == nil && payrollConstitute != nil {
        constitute.ID = payrollConstitute.ID
        constitute.CreatedAt = payrollConstitute.CreatedAt
    }
@@ -385,7 +387,7 @@
    if constitute.ID > 0 {
        err = models.NewPayrollConstituteSearch().Save(&constitute)
        if err != nil {
            util.ResponseFormat(c, code.RequestParamError, "保存失败")
            util.ResponseFormat(c, code.RequestParamError, "更新失败")
            return
        }
    } else {
@@ -416,33 +418,40 @@
        return
    }
    if len(params.Cycle) == 0 {
        util.ResponseFormat(c, code.RequestParamError, "请检查查询周期。格式:Cycle(yyyy-MM-dd)")
        util.ResponseFormat(c, code.RequestParamError, "请检查查询周期。格式:Cycle(yyyy-MM)")
        return
    }
    groupList, err := models.NewPayrollConstituteSearch().ConstituteGroup(&models.ConstituteGroup{Cycle: params.Cycle})
    groupSearch := &models.ConstituteGroupSearch{PageNum: params.Page, PageSize: params.PageSize}
    groupSearch.Cycle = params.Cycle
    groupSearch.WorkerID = params.WorkerID
    groupSearch.WorkTypeCode = constvar.JobType(params.WorkTypeCode)
    groupList, err := models.NewPayrollConstituteSearch().ConstituteGroup(groupSearch)
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "查找工资分类失败")
        return
    }
    groupMap := make(map[string][]*models.ConstituteGroup, 0)
    workerIds := make([]string, 0)
    for _, group := range groupList {
        if _, ok := groupMap[group.WorkerID]; ok {
            groupMap[group.WorkerID] = append(groupMap[group.WorkerID], group)
        } else {
            groupMap[group.WorkerID] = []*models.ConstituteGroup{group}
        }
        workerIds = append(workerIds, group.WorkerID)
    }
    // 员工信息
    workers, err := models.NewWorkerSearch().FindNotTotal()
    workers, total, err := models.NewWorkerSearch().SetOrder("id").SetPage(params.Page, params.PageSize).SetIds(workerIds).Find()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "查找用户失败")
    }
    workerMap := make(map[string]*models.Worker)
    for _, worker := range workers {
        workerMap[worker.ID] = worker
    }
    /*    workerMap := make(map[string]*models.Worker)
        for _, worker := range workers {
            workerMap[worker.ID] = worker
        }*/
    // 工资方案
    salaryPlans, err := models.NewSalaryPlanSearch().FindNotTotal()
@@ -455,7 +464,10 @@
    }
    // 工资单项
    constituteList, err := models.NewPayrollConstituteSearch().SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetWorkTypeID(uint(params.WorkTypeID)).SetWorkTypeCode(params.WorkTypeCode).FindNotTotal()
    constituteList, err := models.NewPayrollConstituteSearch().
        SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetWorkTypeID(uint(params.WorkTypeID)).SetWorkTypeCode(params.WorkTypeCode).
        SetWorkerIDs(workerIds).
        FindNotTotal()
    if err != nil {
        util.ResponseFormat(c, code.RequestParamError, "查找工资单项失败")
        return
@@ -467,7 +479,38 @@
    }
    var list []map[string]interface{}
    for workerId, group := range groupMap {
    for _, worker := range workers {
        result := make(map[string]interface{})
        result["cycle"] = params.Cycle
        result["worker"] = worker
        amount := decimal.NewFromInt(0)
        constituteList := make([]map[string]interface{}, 0)
        if group, ok := groupMap[worker.ID]; ok { // 人员信息
            for _, v := range group {
                temp := make(map[string]interface{})
                temp["salaryPlanId"] = v.SalaryPlanId
                if _, ok := salaryPlanMap[v.SalaryPlanId]; ok {
                    temp["salaryPlan"] = salaryPlanMap[v.SalaryPlanId] // 薪资方案
                }
                key := fmt.Sprintf("%v%v%v", v.Cycle, v.WorkerID, v.SalaryPlanId)
                if payrollConstitute, ok := constituteMap[key]; ok {
                    temp["amount"] = payrollConstitute.Amount
                    amount = amount.Add(payrollConstitute.Amount)
                }
                constituteList = append(constituteList, temp)
            }
        }
        result["amount"] = amount       // 应发工资
        result["list"] = constituteList // 工资详情
        result["remark"] = "备注信息"       // 备注信息
        list = append(list, result)
    }
    /*    for workerId, group := range groupMap {
        result := make(map[string]interface{})
        result["cycle"] = params.Cycle
        if _, ok := workerMap[workerId]; ok { // 人员信息
@@ -490,10 +533,11 @@
        }
        result["amount"] = amount       // 应发工资
        result["list"] = constituteList // 工资详情
        result["remark"] = "备注信息"       // 备注信息
        list = append(list, result)
    }
    }*/
    util.ResponseFormat(c, code.Success, list)
    util.ResponseFormatList(c, code.Success, list, total)
}
models/payroll_constitute.go
@@ -29,8 +29,9 @@
    PayrollConstituteSearch struct {
        PayrollConstitute
        Monthly string
        Keyword string
        Monthly   string
        WorkerIDs []string
        Keyword   string
        Order    string
        PageNum  int
@@ -99,6 +100,11 @@
    return slf
}
func (slf *PayrollConstituteSearch) SetWorkerIDs(workerIds []string) *PayrollConstituteSearch {
    slf.WorkerIDs = workerIds
    return slf
}
func (slf *PayrollConstituteSearch) SetCreatedBy(createdBy string) *PayrollConstituteSearch {
    slf.CreatedBy = createdBy
    return slf
@@ -108,7 +114,7 @@
    var db = slf.Orm.Table(slf.TableName())
    if slf.Preload {
        db = db.Model(&PayrollConstitute{}).Preload("Worker").Preload("WorkType").Preload("WorkType.SalaryPlan")
        db = db.Model(&PayrollConstitute{}).Preload("Worker").Preload("WorkType.SalaryPlan")
    }
    if slf.ID > 0 {
@@ -121,6 +127,10 @@
    if slf.Monthly != "" {
        db = db.Where("cycle like ?", slf.Monthly+"%")
    }
    if len(slf.WorkerIDs) > 0 {
        db = db.Where("Worker_id in ?", slf.WorkerIDs)
    }
    if slf.WorkTypeID > 0 {
@@ -327,31 +337,47 @@
    return records, nil
}
type ConstituteGroup struct {
    Cycle        string           `json:"cycle"`        //月份
    WorkerID     string           `json:"workerId"`     //员工ID
    WorkTypeCode constvar.JobType `json:"workTypeCode"` //工种代码
    SalaryPlanId uint             `json:"salaryPlanId"` //薪资方案ID
}
type (
    ConstituteGroup struct {
        Cycle        string           `json:"cycle"`        //月份
        WorkerID     string           `json:"workerId"`     //员工ID
        WorkTypeCode constvar.JobType `json:"workTypeCode"` //工种代码
        SalaryPlanId uint             `json:"salaryPlanId"` //薪资方案ID
    }
// ConstituteGroup 本月统计了工资的人员
func (slf *PayrollConstituteSearch) ConstituteGroup(cg *ConstituteGroup) ([]*ConstituteGroup, error) {
    ConstituteGroupSearch struct {
        ConstituteGroup
        WorkerIDs []string `json:"workerIds"`
        PageNum   int      `json:"pageNum"`
        PageSize  int      `json:"pageSize"`
    }
)
// ConstituteGroup 每月统计工资的员工
func (slf *PayrollConstituteSearch) ConstituteGroup(cg *ConstituteGroupSearch) ([]*ConstituteGroup, error) {
    var (
        records = make([]*ConstituteGroup, 0)
        db      = slf.Orm.Table(slf.TableName())
    )
    db.Select("cycle,worker_id,work_type_code,salary_plan_id")
    db.Where("cycle = ?", cg.Cycle)
    db = db.Select("cycle,worker_id,work_type_code,salary_plan_id")
    db = db.Where("cycle = ?", cg.Cycle)
    if cg.WorkerID != "" {
        db.Where("worker_id = ?", cg.WorkerID)
        db = db.Where("worker_id = ?", cg.WorkerID)
    }
    if len(cg.WorkerIDs) > 0 {
        db = db.Where("worker_id in ?", cg.WorkerIDs)
    }
    if cg.WorkTypeCode != "" {
        db.Where("work_type_code = ?", cg.WorkTypeCode)
        db = db.Where("work_type_code = ?", cg.WorkTypeCode)
    }
    if cg.SalaryPlanId > 0 {
        db.Where("salary_plan_id = ?", cg.SalaryPlanId)
        db = db.Where("salary_plan_id = ?", cg.SalaryPlanId)
    }
    db.Group("cycle,worker_id,work_type_code,salary_plan_id")
    db = db.Group("cycle,worker_id,work_type_code,salary_plan_id").Order("salary_plan_id,worker_id")
    /*    if cg.PageNum*cg.PageSize > 0 {
        db = db.Offset((cg.PageNum - 1) * cg.PageSize).Limit(cg.PageSize)
    }*/
    return records, db.Find(&records).Error
}
@@ -362,8 +388,8 @@
        db          = slf.Orm.Table(slf.TableName())
        total int64 = 0
    )
    date := "2024-06"
    if err := db.Where("cycle = ?", date).Count(&total).Error; err != nil {
    date := "2024-07"
    if err := db.Where("cycle = ? and salary_plan_id = 5", date).Count(&total).Error; err != nil {
        return err
    }
    if total != 0 {
@@ -379,7 +405,7 @@
            WorkTypeID:   uint(r + 1),
            WorkTypeCode: constvar.JobTypeArr[r],
            WorkTypeName: constvar.JobTypeMap[constvar.JobTypeArr[r]],
            SalaryPlanId: 7,
            SalaryPlanId: 5,
            Amount:       decimal.NewFromInt32(int32(r * 100)),
            CreatedBy:    "auto",
        })
models/payroll_salary_plan.go
@@ -6,6 +6,7 @@
    "fmt"
    "github.com/shopspring/decimal"
    "gorm.io/gorm"
    "math/rand"
    "silkserver/constvar"
    "silkserver/pkg/mysqlx"
)
@@ -331,15 +332,17 @@
// InitDefaultData 初始化数据
func (slf *PayrollSalaryPlanSearch) InitDefaultData() error {
    /*var (
    var (
        db          = slf.Orm.Table(slf.TableName())
        total int64 = 0
    )
    date := "2024-06"
    date := "2024-07"
    if err := db.Where("cycle = ?", date).Count(&total).Error; err != nil {
        return err
    }
    if total != 0 {return nil}
    if total != 0 {
        return nil
    }
    data := make([]*PayrollSalaryPlan, 0)
    workers, _ := NewWorkerSearch().FindNotTotal()
    for _, record := range workers {
@@ -355,7 +358,9 @@
        })
    }
    err := slf.CreateBatch(data)
    if err != nil {return err}*/
    if err != nil {
        return err
    }
    return nil
}