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(&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锛坹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