From 1fab8f0f684d28ac8b996b345402b45e116eaed9 Mon Sep 17 00:00:00 2001
From: liujiandao <274878379@qq.com>
Date: 星期二, 30 四月 2024 17:30:51 +0800
Subject: [PATCH] 薪资报表查询与修改

---
 task/salary_statistics.go                   |   27 +++++---
 controllers/request/report_forms_request.go |    9 +++
 models/salary_report_form.go                |   29 +++++++++
 controllers/report_forms_controller.go      |   35 +++++++++++
 models/salary_details.go                    |   16 +++++
 router/router.go                            |    8 ++
 6 files changed, 112 insertions(+), 12 deletions(-)

diff --git a/controllers/report_forms_controller.go b/controllers/report_forms_controller.go
index 42d20ff..719eb0d 100644
--- a/controllers/report_forms_controller.go
+++ b/controllers/report_forms_controller.go
@@ -15,7 +15,7 @@
 // SalaryReportForms
 //
 //	@Tags		鎶ヨ〃绠$悊
-//	@Summary	钖祫鎶ヨ〃
+//	@Summary	鑾峰彇钖祫鎶ヨ〃
 //	@Produce	application/json
 //	@Param		object	body		request.SalaryReportForms	true	"鍙傛暟"
 //	@Param     	Authorization	header string true "token"
@@ -28,7 +28,8 @@
 		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
 		return
 	}
-	reportForms, total, err := models.NewSalaryReportFormSearch().SetPage(params.Page, params.PageSize).SetKeyword(params.Keyword).SetPreload(true).Find()
+	reportForms, total, err := models.NewSalaryReportFormSearch().SetPage(params.Page, params.PageSize).SetKeyword(params.Keyword).
+		SetMonth(params.Month).SetPreload(true).Find()
 	if err != nil {
 		util.ResponseFormat(c, code.RequestParamError, err)
 		return
@@ -54,3 +55,33 @@
 	}
 	util.ResponseFormatList(c, code.Success, data, total)
 }
+
+// UpdateSalaryReportForms
+//
+//	@Tags		鎶ヨ〃绠$悊
+//	@Summary	淇敼钖祫鎶ヨ〃
+//	@Produce	application/json
+//	@Param		object	body		request.UpdateSalaryReportForms	true	"鍙傛暟"
+//	@Param     	Authorization	header string true "token"
+//	@Success	200		{object}	util.Response		"鎴愬姛"
+//	@Router		/api-jl/v1/forms/updateSalaryReportForms [post]
+func (slf ReportFormsController) UpdateSalaryReportForms(c *gin.Context) {
+	var params request.UpdateSalaryReportForms
+	err := c.BindJSON(&params)
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
+		return
+	}
+	first, err := models.NewSalaryReportFormSearch().SetMonth(params.Month).SetWorkerId(params.WorkerId).First()
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err)
+		return
+	}
+	err = models.NewSalaryDetailsSearch().SetSalaryTypeId(params.SalaryTypeId).SetSalaryReportFormId(first.ID).
+		UpdateByMap(map[string]interface{}{"amount": params.Amount})
+	if err != nil {
+		util.ResponseFormat(c, code.RequestParamError, "鏇存柊澶辫触")
+		return
+	}
+	util.ResponseFormat(c, code.RequestParamError, "鏇存柊鎴愬姛")
+}
diff --git a/controllers/request/report_forms_request.go b/controllers/request/report_forms_request.go
index 399ade5..b92e026 100644
--- a/controllers/request/report_forms_request.go
+++ b/controllers/request/report_forms_request.go
@@ -1,7 +1,16 @@
 package request
 
+import "github.com/shopspring/decimal"
+
 type SalaryReportForms struct {
 	PageInfo
 	Month   string `json:"month"`
 	Keyword string `json:"keyword"`
 }
+
+type UpdateSalaryReportForms struct {
+	WorkerId     string          `json:"workerId"`
+	SalaryTypeId uint            `json:"salaryTypeId"`
+	Amount       decimal.Decimal `json:"amount"`
+	Month        string          `json:"month"`
+}
diff --git a/models/salary_details.go b/models/salary_details.go
index 9427d3c..2375126 100644
--- a/models/salary_details.go
+++ b/models/salary_details.go
@@ -48,12 +48,28 @@
 	return slf
 }
 
+func (slf *SalaryDetailsSearch) SetSalaryReportFormId(salaryReportFormId uint) *SalaryDetailsSearch {
+	slf.SalaryReportFormId = salaryReportFormId
+	return slf
+}
+
+func (slf *SalaryDetailsSearch) SetSalaryTypeId(salaryTypeId uint) *SalaryDetailsSearch {
+	slf.SalaryTypeId = salaryTypeId
+	return slf
+}
+
 func (slf *SalaryDetailsSearch) build() *gorm.DB {
 	var db = slf.Orm.Table(slf.TableName())
 
 	if slf.Preload {
 		db = db.Model(SalaryDetails{}).Preload("SalaryType")
 	}
+	if slf.SalaryReportFormId != 0 {
+		db = db.Where("salary_report_form_id = ?", slf.SalaryReportFormId)
+	}
+	if slf.SalaryTypeId != 0 {
+		db = db.Where("salary_type_id = ?", slf.SalaryTypeId)
+	}
 
 	return db
 }
diff --git a/models/salary_report_form.go b/models/salary_report_form.go
index a03738b..4c2c08e 100644
--- a/models/salary_report_form.go
+++ b/models/salary_report_form.go
@@ -59,6 +59,16 @@
 	return slf
 }
 
+func (slf *SalaryReportFormSearch) SetMonth(month string) *SalaryReportFormSearch {
+	slf.Month = month
+	return slf
+}
+
+func (slf *SalaryReportFormSearch) SetWorkerId(workerId string) *SalaryReportFormSearch {
+	slf.WorkerId = workerId
+	return slf
+}
+
 func (slf *SalaryReportFormSearch) build() *gorm.DB {
 	var db = slf.Orm.Table(slf.TableName())
 
@@ -67,6 +77,12 @@
 	}
 	if slf.Keyword != "" {
 		db = db.Where("worker_name like ? or worker_id like ?", "%"+slf.Keyword+"%", "%"+slf.Keyword+"%")
+	}
+	if slf.Month != "" {
+		db = db.Where("month = ?", slf.Month)
+	}
+	if slf.WorkerId != "" {
+		db = db.Where("worker_id = ?", slf.WorkerId)
 	}
 
 	return db
@@ -159,6 +175,19 @@
 	return records, nil
 }
 
+func (slf *SalaryReportFormSearch) First() (*SalaryReportForm, error) {
+	var (
+		record = new(SalaryReportForm)
+		db     = slf.build()
+	)
+
+	if err := db.First(record).Error; err != nil {
+		return record, err
+	}
+
+	return record, nil
+}
+
 func (slf *SalaryReportFormSearch) Count() (int64, error) {
 	var (
 		total int64
diff --git a/router/router.go b/router/router.go
index c325619..db4e582 100644
--- a/router/router.go
+++ b/router/router.go
@@ -133,5 +133,13 @@
 		wpApi.DELETE("deleteWorkerPositionInfo/:id", wpCtl.DeleteWorkerPositionInfo) //鍒犻櫎鏈哄彴淇℃伅
 	}
 
+	//鎶ヨ〃绠$悊
+	formsApi := r.Group(urlPrefix + "/forms")
+	formsCtl := new(controllers.ReportFormsController)
+	{
+		formsApi.POST("salaryReportForms", formsCtl.SalaryReportForms)             //鑾峰彇钖祫鎶ヨ〃
+		formsApi.POST("updateSalaryReportForms", formsCtl.UpdateSalaryReportForms) //淇敼钖祫鎶ヨ〃
+	}
+
 	return r
 }
diff --git a/task/salary_statistics.go b/task/salary_statistics.go
index 254e306..98eb269 100644
--- a/task/salary_statistics.go
+++ b/task/salary_statistics.go
@@ -1,6 +1,7 @@
 package task
 
 import (
+	"errors"
 	"github.com/shopspring/decimal"
 	"silkserver/constvar"
 	"silkserver/models"
@@ -37,6 +38,9 @@
 	attendances, err := models.NewAttendanceManageSearch().SetMonth(month).FindNotTotal()
 	if err != nil {
 		logx.Error("SalaryStatistics 鏌ヨ鑰冨嫟缁熻 err: " + err.Error())
+		return
+	}
+	if len(attendances) == 0 {
 		return
 	}
 
@@ -83,6 +87,9 @@
 		logx.Error("SalaryStatistics 鏌ヨ宸ョ鐨勮柂璧勬柟妗堝拰鏂板绫诲瀷 err: " + err.Error())
 		return
 	}
+	if len(workTypeManages) == 0 {
+		return
+	}
 	for _, form := range reportForms {
 		details := make([]*models.SalaryDetails, 0)
 		issueSalary := decimal.NewFromInt(0)
@@ -127,8 +134,8 @@
 	var cars []models.WorkerPosition
 	err := models.NewWorkerPositionSearch().Orm.Table("silk_worker_position").Where("worker_id = ? and start_date >= ? and "+
 		"end_date <= ?", workerId, start, end).Find(&cars).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(cars) == 0 {
+		return data, errors.New("鏌ヨ鏈哄彴绠$悊鍑洪敊")
 	}
 	endCarMap := make(map[int]int)
 	groupMap := make(map[int]int)
@@ -155,8 +162,8 @@
 	var yield []models.YieldRegister
 	err = models.NewYieldRegisterSearch().Orm.Table("silk_yield_register").Where("workshop_number in (?) and group_number "+
 		"in (?) and create_time >= ? and create_time <= ?", workshops, groups, start, end).Find(&yield).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(yield) == 0 {
+		return data, errors.New("鏌ヨ浜ч噺鐧昏琛ㄥ嚭閿�")
 	}
 	yieldRegisterIds := make([]uint, 0)
 	for _, register := range yield {
@@ -164,8 +171,8 @@
 	}
 	yieldMap := make(map[string]decimal.Decimal)
 	items, err := models.NewYieldRegisterItemSearch().SetYieldRegisterIds(yieldRegisterIds).SetCarNumbers(endCars).FindNotTotal()
-	if err != nil {
-		return data, err
+	if err != nil || len(items) == 0 {
+		return data, errors.New("鏌ヨ浜ч噺鐧昏璇︽儏琛ㄥ嚭閿�")
 	}
 	for _, register := range yield {
 		for _, item := range items {
@@ -179,8 +186,8 @@
 	markets := make([]string, 0)
 	err = models.NewFinenessRegisterSearch().Orm.Table("silk_fineness_register").Where("workshop_number in (?) and workshop_group "+
 		"in (?) and finish_date >= ? and finish_date <= ?", workshops, groups, start, end).Find(&fineness).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(fineness) == 0 {
+		return data, errors.New("鏌ヨ绾ゅ害鐧昏琛ㄥ嚭閿�")
 	}
 	finenessIds := make([]uint, 0)
 	for _, register := range fineness {
@@ -190,8 +197,8 @@
 	var checkItems []models.FinenessCheckItem
 	err = models.NewFinenessCheckItemSearch().Orm.Table("silk_fineness_check_item").Where("fineness_register_id in (?) and "+
 		"position in (?)", finenessIds, endCars).Find(&checkItems).Error
-	if err != nil {
-		return data, err
+	if err != nil || len(checkItems) == 0 {
+		return data, errors.New("鏌ヨ绾ゅ害鐧昏璇︽儏琛ㄥ嚭閿�")
 	}
 	checkMap := make(map[string]string)
 	marketMap := make(map[string]string)

--
Gitblit v1.8.0