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 |  381 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 371 insertions(+), 10 deletions(-)

diff --git a/controllers/salary_plan_controller.go b/controllers/salary_plan_controller.go
index 150a07c..177aab0 100644
--- a/controllers/salary_plan_controller.go
+++ b/controllers/salary_plan_controller.go
@@ -1,7 +1,9 @@
 package controllers
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"github.com/shopspring/decimal"
 	"gorm.io/gorm"
 	"silkserver/constvar"
 	"silkserver/controllers/request"
@@ -9,6 +11,7 @@
 	"silkserver/extend/util"
 	"silkserver/middleware"
 	"silkserver/models"
+	"silkserver/pkg/structx"
 	"silkserver/pkg/timex"
 	"strconv"
 	"time"
@@ -71,7 +74,7 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).Find()
+	find, total, err := models.NewSalaryPlanSearch().SetPage(params.Page, params.PageSize).SetPreload(true).Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
 		return
@@ -127,23 +130,76 @@
 		util.ResponseFormat(c, code.RequestParamError, "绫诲瀷涓嶈兘涓虹┖")
 		return
 	}
-	types := make([]*models.MiniDict, 0)
-	for _, value := range params.Values {
+	miniDicts, err := models.NewMiniDictSearch().SetType(params.Type).FindNotTotal()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err)
+		return
+	}
+	dicts := params.Values
+	add := make([]*models.MiniDict, 0)
+	del := make([]uint, 0)
+	update := make([]*models.MiniDict, 0)
+	for _, mini := range miniDicts {
+		flag := true
+		for i, value := range dicts {
+			var dict models.MiniDict
+			dict.Name = value.Name
+			dict.IsDefault = value.IsDefault
+			dict.Type = params.Type
+			if value.Id == 0 {
+				add = append(add, &dict)
+				flag = false
+				if i < len(dicts)-1 {
+					dicts = append(dicts[:i], dicts[i+1:]...)
+				} else {
+					dicts = dicts[:i]
+				}
+				break
+			} else if value.Id == mini.ID {
+				dict.ID = mini.ID
+				update = append(update, &dict)
+				flag = false
+				if i < len(dicts)-1 {
+					dicts = append(dicts[:i], dicts[i+1:]...)
+				} else {
+					dicts = dicts[:i]
+				}
+				break
+			}
+		}
+		if flag {
+			del = append(del, mini.ID)
+		}
+	}
+	//鏂板鐨�
+	for _, value := range dicts {
 		var dict models.MiniDict
 		dict.Name = value.Name
 		dict.IsDefault = value.IsDefault
 		dict.Type = params.Type
-		types = append(types, &dict)
+		add = append(add, &dict)
 	}
+
 	err = models.WithTransaction(func(db *gorm.DB) error {
-		err = models.NewMiniDictSearch().SetOrm(db).SetType(params.Type).Delete()
-		if err != nil {
-			return err
+		if len(del) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).SetIds(del).Delete()
+			if err != nil {
+				return err
+			}
 		}
-		err = models.NewMiniDictSearch().SetOrm(db).CreateBatch(types)
-		if err != nil {
-			return err
+		if len(update) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).SaveBatch(update)
+			if err != nil {
+				return err
+			}
 		}
+		if len(add) > 0 {
+			err = models.NewMiniDictSearch().SetOrm(db).CreateBatch(add)
+			if err != nil {
+				return err
+			}
+		}
+
 		return nil
 	})
 	if err != nil {
@@ -180,3 +236,308 @@
 	}
 	util.ResponseFormat(c, code.Success, dicts)
 }
+
+// GetPayrollProductionCarList
+//
+//	@Tags		鍛樺伐钖祫/钖叕鏂规
+//	@Summary	鑾峰彇杞﹀彴姣忓ぉ鐨勪骇閲忓垪琛�
+//	@Produce	application/json
+//	@Param     	Authorization	header string true "token"
+//	@Param     	object  query    request.PayrollProductionCar true  "鏌ヨ鍙傛暟"
+//	@Success	200		{object}	util.ResponseList{data=[]models.PayrollProductionCar}	"鎴愬姛"
+//	@Router		/api-jl/v1/salary/getPayrollProductionCarList [get]
+func (slf SalaryPlanController) GetPayrollProductionCarList(c *gin.Context) {
+	var params request.PayrollProductionCar
+	if err := c.ShouldBindQuery(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+
+	carSearch := models.NewPayrollProductionCarSearch()
+	if len(params.Cycle) == 0 && len(params.Monthly) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇锋鏌ユ煡璇㈠懆鏈�,蹇呴』杈撳叆鎸夊ぉ鏌ヨ鎴栨寜鏈堟煡璇€�傛牸寮忥細Cycle锛坹yyy-MM-dd锛� 鎴� Monthly锛坹yyy-MM锛�")
+		return
+	}
+	carSearch.SetPage(params.Page, params.PageSize)
+	carSearch.SetWorkshopNumber(params.WorkshopNumber).SetGroupNumber(params.GroupNumber).SetCarNumber(params.CarNumber).SetMarketNumber(params.MarketNumber).SetSpec(params.Spec)
+	list, total, err := carSearch.Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		return
+	}
+
+	util.ResponseFormatList(c, code.Success, list, total)
+}
+
+// GetPayrollProductionGroupList
+//
+//	@Tags		鍛樺伐钖祫/钖叕鏂规
+//	@Summary	鑾峰彇灏忕粍姣忓ぉ鐨勪骇閲忓垪琛�
+//	@Produce	application/json
+//	@Param     	Authorization	header string true "token"
+//	@Param     	object  query    request.PayrollProductionGroup true  "鏌ヨ鍙傛暟"
+//	@Success	200		{object}	util.ResponseList{data=[]models.PayrollProductionGroup}	"鎴愬姛"
+//	@Router		/api-jl/v1/salary/getPayrollProductionGroupList [get]
+func (slf SalaryPlanController) GetPayrollProductionGroupList(c *gin.Context) {
+	var params request.PayrollProductionGroup
+	if err := c.ShouldBindQuery(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+	//params = request.PayrollProductionGroup{
+	//	Cycle:          c.Query("cycle"),
+	//	Monthly:        c.Query("monthly"),
+	//	WorkshopNumber: c.Query("workshopNumber"),
+	//}
+	//params.GroupNumber, _ = strconv.Atoi(c.Query("groupNumber"))
+	//params.Page, _ = strconv.Atoi(c.Query("page"))
+	//params.PageSize, _ = strconv.Atoi(c.Query("pageSize"))
+
+	if len(params.Cycle) == 0 && len(params.Monthly) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇锋鏌ユ煡璇㈠懆鏈�,蹇呴』杈撳叆鎸夊ぉ鏌ヨ鎴栨寜鏈堟煡璇€�傛牸寮忥細Cycle锛坹yyy-MM-dd锛� 鎴� Monthly锛坹yyy-MM锛�")
+		return
+	}
+	list, total, err := models.NewPayrollProductionGroupSearch().SetPage(params.Page, params.PageSize).
+		SetCycle(params.Cycle).SetMonthly(params.Monthly).SetWorkshopNumber(params.WorkshopNumber).SetGroupNumber(params.GroupNumber).
+		Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		return
+	}
+
+	util.ResponseFormatList(c, code.Success, list, total)
+}
+
+// GetPayrollSalaryPlanList
+//
+//	@Tags		鍛樺伐钖祫/钖叕鏂规
+//	@Summary	鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�
+//	@Produce	application/json
+//	@Param     	Authorization	header string true "token"
+//	@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 {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+
+	if len(params.Cycle) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇锋鏌ユ煡璇㈠懆鏈熴�傛牸寮忥細Cycle锛坹yyy-MM-dd锛�")
+		return
+	}
+	list, total, err := models.NewPayrollSalaryPlanSearch().SetPage(params.Page, params.PageSize).
+		SetCycle(params.Cycle).SetWorkerID(params.WorkerID).SetKeyword(params.Keyword).SetWorkTypeID(uint(params.WorkTypeID)).SetWorkTypeCode(constvar.JobType(params.WorkTypeCode)).
+		Find()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+		return
+	}
+
+	util.ResponseFormatList(c, code.Success, list, total)
+}
+
+// SavePayrollConstitute
+//
+//	@Tags		鍛樺伐钖祫/钖叕鏂规
+//	@Summary	钖叕鏁伴璋冩暣
+//	@Produce	application/json
+//	@Param		object	body	request.SavePayrollConstitute	true	"鍙傛暟"
+//	@Param     	Authorization	header string true "token"
+//	@Success	200		{object}	util.Response		"鎴愬姛"
+//	@Router		/api-jl/v1/salary/savePayrollConstitute [post]
+func (slf SalaryPlanController) SavePayrollConstitute(c *gin.Context) {
+	var params request.SavePayrollConstitute
+	var constitute models.PayrollConstitute
+	err := c.BindJSON(&params)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+	err = structx.AssignTo(params, &constitute)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏁版嵁杞崲澶辫触")
+		return
+	}
+	if len(constitute.Cycle) < 7 {
+		util.ResponseFormat(c, code.RequestParamError, "鍛ㄦ湡鍙傛暟涓虹┖鎴栨牸寮忛敊璇�")
+	}
+	if len(constitute.WorkerID) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "鍛樺伐ID鍙傛暟涓虹┖")
+	}
+	if constitute.SalaryPlanId == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "钖祫鏂规ID鍙傛暟涓虹┖")
+	}
+
+	info := middleware.GetUserInfo(c)
+	if info == nil || info.NickName == "" {
+		util.ResponseFormat(c, code.RequestParamError, "鐢ㄦ埛鏈櫥褰�")
+	}
+	constitute.CreatedBy = info.NickName
+
+	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
+	}
+
+	if constitute.ID > 0 {
+		err = models.NewPayrollConstituteSearch().Save(&constitute)
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "鏇存柊澶辫触")
+			return
+		}
+	} else {
+		err = models.NewPayrollConstituteSearch().Create(&constitute)
+		if err != nil {
+			util.ResponseFormat(c, code.RequestParamError, "淇濆瓨澶辫触")
+			return
+		}
+	}
+
+	util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
+}
+
+// GetPayrollConstituteList
+//
+//	@Tags		鍛樺伐钖祫/钖叕鏂规
+//	@Summary	鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�
+//	@Produce	application/json
+//	@Param     	Authorization	header string true "token"
+//	@Param     	object  query    request.PayrollConstitute true  "鏌ヨ鍙傛暟"
+//	@Success	200		{object}	util.ResponseList{data=map[string]interface{}}	"鎴愬姛"
+//	@Router		/api-jl/v1/salary/getPayrollConstituteList [get]
+func (slf SalaryPlanController) GetPayrollConstituteList(c *gin.Context) {
+
+	var params request.PayrollConstitute
+	if err := c.ShouldBindQuery(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+	if len(params.Cycle) == 0 {
+		util.ResponseFormat(c, code.RequestParamError, "璇锋鏌ユ煡璇㈠懆鏈熴�傛牸寮忥細Cycle锛坹yyy-MM锛�")
+		return
+	}
+
+	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, 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
+		}*/
+
+	// 宸ヨ祫鏂规
+	salaryPlans, err := models.NewSalaryPlanSearch().FindNotTotal()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘钖祫鏂规澶辫触")
+	}
+	salaryPlanMap := make(map[uint]*models.SalaryPlan)
+	for _, plan := range salaryPlans {
+		salaryPlanMap[plan.ID] = plan
+	}
+
+	// 宸ヨ祫鍗曢」
+	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
+	}
+	constituteMap := make(map[string]*models.PayrollConstitute)
+	for _, v := range constituteList {
+		key := fmt.Sprintf("%v%v%v", v.Cycle, v.WorkerID, v.SalaryPlanId)
+		constituteMap[key] = v
+	}
+
+	var list []map[string]interface{}
+
+	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 { // 浜哄憳淇℃伅
+			result["worker"] = workerMap[workerId]
+		}
+		amount := decimal.NewFromInt(0)
+		constituteList := make([]map[string]interface{}, 0)
+		for _, v := range group {
+			temp := make(map[string]interface{})
+			if _, ok := salaryPlanMap[v.SalaryPlanId]; ok {
+				temp["salaryPlan"] = salaryPlanMap[v.SalaryPlanId]
+			}
+
+			key := fmt.Sprintf("%v%v%v", v.Cycle, v.WorkerID, v.SalaryPlanId)
+			if _, ok := constituteMap[key]; ok {
+				temp["amount"] = constituteMap[key].Amount
+				amount = amount.Add(constituteMap[key].Amount)
+			}
+			constituteList = append(constituteList, temp)
+		}
+		result["amount"] = amount       // 搴斿彂宸ヨ祫
+		result["list"] = constituteList // 宸ヨ祫璇︽儏
+		result["remark"] = "澶囨敞淇℃伅"       // 澶囨敞淇℃伅
+
+		list = append(list, result)
+	}*/
+
+	util.ResponseFormatList(c, code.Success, list, total)
+
+}

--
Gitblit v1.8.0