From edf3066724ad442d6929210c830cb67c17277690 Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期四, 01 八月 2024 11:46:33 +0800
Subject: [PATCH] 添加工资计算自动任务
---
controllers/fineness.go | 171 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 147 insertions(+), 24 deletions(-)
diff --git a/controllers/fineness.go b/controllers/fineness.go
index b675bcf..0eaa33d 100644
--- a/controllers/fineness.go
+++ b/controllers/fineness.go
@@ -3,6 +3,7 @@
import (
"errors"
"github.com/gin-gonic/gin"
+ "github.com/shopspring/decimal"
"gorm.io/gorm"
"silkserver/controllers/request"
"silkserver/controllers/response"
@@ -13,6 +14,7 @@
"silkserver/pkg/logx"
"silkserver/pkg/structx"
"silkserver/service"
+ "strings"
)
type FinenessController struct{}
@@ -43,33 +45,74 @@
util.ResponseFormat(c, code.RequestParamError, err.Error())
return
}
- err := models.WithTransaction(func(db *gorm.DB) error {
+
+ specArr := strings.Split(params.Spec, "/")
+ start, _ := decimal.NewFromString(specArr[0])
+ end, _ := decimal.NewFromString(specArr[1])
+ silkStandard, err := service.GetSilkRankStandard(start, end)
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, err.Error())
+ return
+ }
+
+ endCarMap, err := service.GetWorkshopEndCarMap(params.WorkshopNumber, params.WorkshopGroup)
+ if len(endCarMap) == 0 {
+ util.ResponseFormat(c, code.RequestParamError, "璇ヨ溅闂存湭閰嶇疆杞﹀彿锛岃鍦ㄨ溅闂寸鐞嗕腑閰嶇疆!")
+ return
+ }
+
+ isNew := params.ID == 0
+
+ err = models.WithTransaction(func(db *gorm.DB) error {
search := models.NewFinenessRegisterSearch().SetOrm(db)
- if params.ID != 0 {
+ if !isNew { // id涓嶄负绌�
if err := models.NewFinenessItemSearch().SetOrm(db).SetFinenessRegisterID(params.ID).Delete(); err != nil {
return err
}
return search.Save(¶ms)
- } else {
- return search.Create(¶ms)
}
+ return search.Create(¶ms)
})
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "淇濆瓨澶辫触")
+ return
}
- err = service.FinenessCheck(¶ms)
+ err = service.FinenessCheck(¶ms, silkStandard, endCarMap, isNew)
if err != nil {
logx.Errorf("service.FinenessCheck err:%v, finenessRegister:%+v", err, params)
util.ResponseFormat(c, code.RequestParamError, "鐢熸垚妫�楠岃〃澶辫触")
return
}
- util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
+ util.ResponseFormat(c, code.Success, params)
}
func (slf FinenessController) ParamsCheck(params models.FinenessRegister) (err error) {
+ if params.Spec == "" || !strings.Contains(params.Spec, "/") {
+ return errors.New("瑙勬牸鏍煎紡涓嶆纭�")
+ }
+
+ specArr := strings.Split(params.Spec, "/")
+
+ _, err = decimal.NewFromString(specArr[0])
+ if err != nil {
+ return errors.New("瑙勬牸鏍煎紡涓嶆纭�")
+ }
+ _, err = decimal.NewFromString(specArr[1])
+ if err != nil {
+ return errors.New("瑙勬牸鏍煎紡涓嶆纭�")
+ }
+
+ if params.WorkshopNumber == "" || params.WorkshopGroup == 0 {
+ return errors.New("杞﹂棿杞︾粍鍙傛暟缂哄け")
+ }
+
+ if len(params.FinenessList) == 0 {
+ return errors.New("绾ゅ害鍒楄〃缂哄け")
+ }
+
if params.ID == 0 {
_, err = models.NewFinenessRegisterSearch().SetNumber(params.Number).First()
if err != gorm.ErrRecordNotFound {
@@ -101,7 +144,7 @@
return
}
- list, total, err := models.NewFinenessRegisterSearch().SetKeyword(params.Keyword).SetPage(params.Page, params.PageSize).Find()
+ list, total, err := models.NewFinenessRegisterSearch().SetKeyword(params.Keyword).SetPage(params.Page, params.PageSize).SetOrder("id desc").Find()
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
return
@@ -157,12 +200,17 @@
util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
return
}
-
- err := models.NewFinenessRegisterSearch().SetID(id).Delete()
+ err := models.WithTransaction(func(db *gorm.DB) error {
+ if err := models.NewFinenessItemSearch().SetOrm(db).SetFinenessRegisterID(id).Delete(); err != nil {
+ return err
+ }
+ return models.NewFinenessRegisterSearch().SetOrm(db).SetID(id).Delete()
+ })
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鍒犻櫎澶辫触")
return
}
+
util.ResponseFormat(c, code.UpdateSuccess, "鍒犻櫎鎴愬姛")
}
@@ -180,7 +228,7 @@
return
}
- list, total, err := models.NewFinenessCheckSearch().SetPage(params.Page, params.PageSize).Find()
+ list, total, err := models.NewFinenessCheckSearch().SetPage(params.Page, params.PageSize).SetPreload().SetOrder("id desc").Find()
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
return
@@ -193,7 +241,7 @@
// @Tags 绾ゅ害妫�楠�
// @Summary 绾ゅ害妫�楠岃鎯�
// @Produce application/json
-// @Param id path string true "瀛楀吀淇℃伅"
+// @Param id path string true "绾ゅ害妫�楠孖D"
// @Success 200 {object} util.ResponseList{data=response.FinenessCheckInfo} "鎴愬姛"
// @Router /api-jl/v1/fineness/check/{id} [get]
func (slf FinenessController) CheckInfo(c *gin.Context) {
@@ -219,6 +267,42 @@
resp.Items, err = models.NewFinenessCheckItemSearch().SetFinenessRegisterID(info.FinenessRegisterID).FindAll()
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "鏌ユ壘澶辫触")
+ return
+ }
+
+ util.ResponseFormat(c, code.Success, resp)
+}
+
+// CheckInfoByFinenessID
+// @Tags 绾ゅ害妫�楠�
+// @Summary 鏍规嵁绾ゅ害鐧昏ID鑾峰彇绾ゅ害妫�楠岃鎯�
+// @Produce application/json
+// @Param id path string true "绾ゅ害鐧昏ID"
+// @Success 200 {object} util.ResponseList{data=response.FinenessCheckInfo} "鎴愬姛"
+// @Router /api-jl/v1/fineness/checkFinenessID/{id} [get]
+func (slf FinenessController) CheckInfoByFinenessID(c *gin.Context) {
+ idStr := c.Param("id")
+ if idStr == "0" || idStr == "" {
+ util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
+ return
+ }
+
+ id := convertx.StringToUInt(idStr)
+ if id == 0 {
+ util.ResponseFormat(c, code.RequestParamError, "绌虹殑璁板綍id")
+ return
+ }
+
+ info, err := models.NewFinenessCheckSearch().SetFinenessRegisterID(id).SetPreload().First()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "妫�鏌ヨ〃鏌ユ壘澶辫触")
+ return
+ }
+ resp := new(response.FinenessCheckInfo)
+ resp.Info = info
+ resp.Items, err = models.NewFinenessCheckItemSearch().SetFinenessRegisterID(info.FinenessRegisterID).FindAll()
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, "妫�鏌ヨ鎯呰〃鏌ユ壘澶辫触")
return
}
@@ -270,33 +354,72 @@
// @Tags 绾ゅ害妫�楠�
// @Summary 绾ゅ害妫�楠屼慨鏀�
// @Produce application/json
-// @Param object body models.FinenessCheck true "瀛楀吀淇℃伅"
+// @Param object body response.FinenessCheckInfo true "鍙傛暟"
+// @Param Authorization header string true "token"
// @Success 200 {object} util.Response "鎴愬姛"
-// @Router /api-jl/v1/fineness/check [post]
+// @Router /api-jl/v1/fineness/check [PUT]
func (slf FinenessController) CheckEdit(c *gin.Context) {
- var params models.FinenessCheck
+ var params response.FinenessCheckInfo
if err := c.BindJSON(¶ms); err != nil {
util.ResponseFormat(c, code.RequestParamError, "鍙傛暟瑙f瀽澶辫触锛屾暟鎹被鍨嬮敊璇�")
return
}
+ if params.Info == nil || params.Info.FinenessRegisterID == 0 || len(params.Items) == 0 {
+ util.ResponseFormat(c, code.RequestParamError, "鍙傛暟缂哄け")
+ return
+ }
- _, err := models.NewFinenessCheckSearch().SetID(params.ID).First()
+ _, err := models.NewFinenessCheckSearch().SetID(params.Info.ID).First()
if err != nil {
util.ResponseFormat(c, code.RequestParamError, "妫�楠岃褰曚笉瀛樺湪")
return
}
-
- err = service.FinenessReCheck(¶ms)
+ check := params.Info
+ finenessRegister, err := models.NewFinenessRegisterSearch().SetID(check.FinenessRegisterID).First()
if err != nil {
- logx.Errorf("service.FinenessReCheck err:%v, finenessCheck:%+v", err, params)
- util.ResponseFormat(c, code.RequestParamError, "妫�楠屽け璐�")
+ util.ResponseFormat(c, code.RequestParamError, "绾ゅ害鐧昏涓嶅瓨鍦�")
+ return
+ }
+ specArr := strings.Split(finenessRegister.Spec, "/")
+ start, _ := decimal.NewFromString(specArr[0])
+ end, _ := decimal.NewFromString(specArr[1])
+ standardMap, err := service.GetSilkRankStandard(start, end)
+ if err != nil {
+ util.ResponseFormat(c, code.RequestParamError, err.Error())
+ return
+ }
+ check.FinenessGrade = service.CalcFinenessGrade(check.Deviation, check.TotalDeviation, check.Cleanliness, check.Purity, check.TwiceChange, standardMap)
+
+ items := params.Items
+
+ for _, item := range items {
+ if item.FinenessGrade != "" {
+ item.FinenessGrade = service.CalcFinenessGrade(item.Deviation, item.TotalDeviation, item.Cleanliness, item.Purity, item.TwiceChange, standardMap)
+ }
+ }
+
+ err = models.WithTransaction(func(db *gorm.DB) error {
+ err = models.NewFinenessCheckSearch().SetOrm(db).Save(params.Info)
+ if err != nil {
+ return err
+ }
+
+ for _, item := range items {
+ if item.FinenessGrade == "" {
+ continue
+ }
+ err = models.NewFinenessCheckItemSearch().SetOrm(db).SetID(item.ID).UpdateByMap(map[string]interface{}{"fineness_grade": item.FinenessGrade})
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+ })
+
+ if err != nil {
+ util.ResponseFormat(c, code.SaveFail, "淇濆瓨澶辫触")
return
}
- err = models.NewFinenessCheckSearch().Save(¶ms)
- if err != nil {
- util.ResponseFormat(c, code.RequestParamError, "淇濆瓨澶辫触")
- return
- }
util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛")
}
--
Gitblit v1.8.0