From cc7c2094568ea8f9d1697da5ed0a2c759ca81abd Mon Sep 17 00:00:00 2001 From: yinbentan <yinbentan@live.com> Date: 星期五, 30 八月 2024 17:18:30 +0800 Subject: [PATCH] 方法修改,修改薪资列表,添加分页查询 --- controllers/salary_plan_controller.go | 70 +++++++++++++++++++---- models/payroll_salary_plan.go | 13 +++- models/payroll_constitute.go | 66 +++++++++++++++------ 3 files changed, 112 insertions(+), 37 deletions(-) diff --git a/controllers/salary_plan_controller.go b/controllers/salary_plan_controller.go index 17fa659..177aab0 100644 --- a/controllers/salary_plan_controller.go +++ b/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锛坹yyy-MM-dd锛�") + util.ResponseFormat(c, code.RequestParamError, "璇锋鏌ユ煡璇㈠懆鏈熴�傛牸寮忥細Cycle锛坹yyy-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) } diff --git a/models/payroll_constitute.go b/models/payroll_constitute.go index 4c1d179..38cf0fa 100644 --- a/models/payroll_constitute.go +++ b/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"` //宸ョ浠g爜 - SalaryPlanId uint `json:"salaryPlanId"` //钖祫鏂规ID -} +type ( + ConstituteGroup struct { + Cycle string `json:"cycle"` //鏈堜唤 + WorkerID string `json:"workerId"` //鍛樺伐ID + WorkTypeCode constvar.JobType `json:"workTypeCode"` //宸ョ浠g爜 + 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", }) diff --git a/models/payroll_salary_plan.go b/models/payroll_salary_plan.go index 990672d..05c189d 100644 --- a/models/payroll_salary_plan.go +++ b/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 } -- Gitblit v1.8.0