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