controllers/salary_plan_controller.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/payroll_constitute.go | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/payroll_salary_plan.go | ●●●●● 补丁 | 查看 | 原始文档 | 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(¶ms); 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 }