From 1bd58eb901da8ca32d15c121effa7e22cc89e1bd Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期四, 25 七月 2024 11:47:12 +0800
Subject: [PATCH] 添加功能,工资计算(根据历史工资excel给定的规则进行编写)
---
controllers/salary_plan_controller.go | 102 +
models/payroll_production_car.go | 409 +++++
models/payroll_salary_plan.go | 361 ++++
docs/swagger.yaml | 466 ++++++
docs/docs.go | 681 ++++++++
docs/swagger.json | 681 ++++++++
router/router.go | 13
controllers/request/salary_plan.go | 30
models/payroll_working_hours.go | 323 ++++
models/payroll_production_group.go | 290 +++
models/payroll_production_weavers.go | 322 ++++
models/payroll_other_subsidies.go | 299 +++
models/db.go | 7
service/salary_plan.go | 499 ++++++
14 files changed, 4,461 insertions(+), 22 deletions(-)
diff --git a/controllers/request/salary_plan.go b/controllers/request/salary_plan.go
new file mode 100644
index 0000000..20c927e
--- /dev/null
+++ b/controllers/request/salary_plan.go
@@ -0,0 +1,30 @@
+package request
+
+type PayrollProductionCar struct {
+ PageInfo
+ Cycle string `json:"cycle" form:"cycle"` // 缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級
+ Monthly string `json:"monthly" form:"monthly"` // 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ WorkshopNumber string `json:"workshopNumber" form:"workshopNumber"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber" form:"groupNumber"` // 缁勫埆
+ CarNumber int `json:"carNumber" form:"carNumber"` // 杞﹀彴鍙�
+ MarketNumber string `json:"marketNumber" form:"marketNumber"` // 搴勫彛缂栧彿
+ Spec string `json:"spec" form:"spec"` // 瑙勬牸
+ FinishLevel string `json:"finishLevel" form:"finishLevel"` // 绛夌骇
+}
+
+type PayrollProductionGroup struct {
+ PageInfo
+ Cycle string `json:"cycle" form:"cycle"` // 缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級
+ Monthly string `json:"monthly" form:"monthly"` // 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ WorkshopNumber string `json:"workshopNumber" form:"workshopNumber"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber" form:"groupNumber"` // 缁勫埆
+}
+
+type PayrollSalaryPlan struct {
+ PageInfo
+ Cycle string `json:"cycle" form:"cycle"` // 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ WorkerID string `json:"workerID" form:"workerID"` // 鍛樺伐ID
+ WorkTypeID int `json:"workTypeID" form:"workTypeID"` // 宸ョID
+ WorkTypeCode string `json:"workTypeCode" form:"workTypeCode"` // 宸ョ缂栫爜
+ Keyword string `json:"keyword" form:"keyword"` // 鍏抽敭瀛�
+}
diff --git a/controllers/salary_plan_controller.go b/controllers/salary_plan_controller.go
index 0212979..461b326 100644
--- a/controllers/salary_plan_controller.go
+++ b/controllers/salary_plan_controller.go
@@ -233,3 +233,105 @@
}
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(¶ms); 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(¶ms); 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]
+func (slf SalaryPlanController) GetPayrollSalaryPlanList(c *gin.Context) {
+ var params request.PayrollSalaryPlan
+ if err := c.ShouldBindQuery(¶ms); 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)
+}
diff --git a/docs/docs.go b/docs/docs.go
index d5e5cd8..14b0afe 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -357,6 +357,12 @@
"summary": "绾ゅ害妫�楠屽垪琛�",
"parameters": [
{
+ "type": "integer",
+ "description": "绾ゅ害鐧昏琛↖D",
+ "name": "finenessRegisterID",
+ "in": "query"
+ },
+ {
"type": "string",
"name": "keyword",
"in": "query"
@@ -446,7 +452,7 @@
"parameters": [
{
"type": "string",
- "description": "瀛楀吀淇℃伅",
+ "description": "绾ゅ害妫�楠孖D",
"name": "id",
"in": "path",
"required": true
@@ -495,6 +501,46 @@
"description": "鎴愬姛",
"schema": {
"$ref": "#/definitions/util.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/fineness/checkFinenessID/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "绾ゅ害妫�楠�"
+ ],
+ "summary": "鏍规嵁绾ゅ害鐧昏ID鑾峰彇绾ゅ害妫�楠岃鎯�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "绾ゅ害鐧昏ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/response.FinenessCheckInfo"
+ }
+ }
+ }
+ ]
}
}
}
@@ -625,6 +671,12 @@
],
"summary": "绾ゅ害鐧昏鍒楄〃",
"parameters": [
+ {
+ "type": "integer",
+ "description": "绾ゅ害鐧昏琛↖D",
+ "name": "finenessRegisterID",
+ "in": "query"
+ },
{
"type": "string",
"name": "keyword",
@@ -1084,6 +1136,273 @@
}
}
},
+ "/api-jl/v1/salary/getPayrollProductionCarList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇杞﹀彴姣忓ぉ鐨勪骇閲忓垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "杞﹀彴鍙�",
+ "name": "carNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "绛夌骇",
+ "name": "finishLevel",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "缁勫埆",
+ "name": "groupNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "搴勫彛缂栧彿",
+ "name": "marketNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "monthly",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "瑙勬牸",
+ "name": "spec",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "杞﹂棿缂栧彿",
+ "name": "workshopNumber",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollProductionCar"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/salary/getPayrollProductionGroupList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇灏忕粍姣忓ぉ鐨勪骇閲忓垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "缁勫埆",
+ "name": "groupNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "monthly",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "杞﹂棿缂栧彿",
+ "name": "workshopNumber",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollProductionGroup"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/salary/getPayrollSalaryPlanList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "鍏抽敭瀛�",
+ "name": "keyword",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "宸ョ缂栫爜",
+ "name": "workTypeCode",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "宸ョID",
+ "name": "workTypeID",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "鍛樺伐ID",
+ "name": "workerID",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollSalaryPlan"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-jl/v1/salary/getSalaryPlanList": {
"post": {
"produces": [
@@ -1328,23 +1647,26 @@
"parameters": [
{
"enum": [
- 0,
1,
2,
- 3
+ 3,
+ 4,
+ 5
],
"type": "integer",
"x-enum-comments": {
"DictTypeColor": "棰滆壊",
"DictTypeMarket": "搴勫彛",
"DictTypeSpec": "瑙勬牸",
+ "DictTypeSubsidy": "琛ヨ创",
"DictTypeWorkshop": "杞﹂棿"
},
"x-enum-varnames": [
"DictTypeMarket",
"DictTypeWorkshop",
"DictTypeColor",
- "DictTypeSpec"
+ "DictTypeSpec",
+ "DictTypeSubsidy"
],
"description": "瀛楀吀绫诲瀷",
"name": "dictType",
@@ -2465,22 +2787,25 @@
"constvar.DictType": {
"type": "integer",
"enum": [
- 0,
1,
2,
- 3
+ 3,
+ 4,
+ 5
],
"x-enum-comments": {
"DictTypeColor": "棰滆壊",
"DictTypeMarket": "搴勫彛",
"DictTypeSpec": "瑙勬牸",
+ "DictTypeSubsidy": "琛ヨ创",
"DictTypeWorkshop": "杞﹂棿"
},
"x-enum-varnames": [
"DictTypeMarket",
"DictTypeWorkshop",
"DictTypeColor",
- "DictTypeSpec"
+ "DictTypeSpec",
+ "DictTypeSubsidy"
]
},
"constvar.FileTemplateCategory": {
@@ -2496,6 +2821,45 @@
"x-enum-varnames": [
"FileTemplateCategory_Selfmade",
"FileTemplateCategory_Output"
+ ]
+ },
+ "constvar.JobType": {
+ "type": "string",
+ "enum": [
+ "weavers",
+ "car_head",
+ "maintenance",
+ "boiled",
+ "scoop",
+ "transport",
+ "cleaner",
+ "machine_cleaner",
+ "all-powerful",
+ "monitor"
+ ],
+ "x-enum-comments": {
+ "JobTypeAllPowerful": "鍏ㄨ兘鏈哄姩",
+ "JobTypeBoiled": "鐓導宸�",
+ "JobTypeCarHead": "杞﹀ご宸�",
+ "JobTypeCleaner": "娓呮磥宸�",
+ "JobTypeMachineCleaner": "鎰熺煡鍣ㄦ竻娲楀伐",
+ "JobTypeMaintenance": "淇濆叏宸�",
+ "JobTypeMonitor": "鐝暱",
+ "JobTypeScoop": "鑸�鑼у伐",
+ "JobTypeTransport": "閫佽導宸�",
+ "JobTypeWeavers": "鎸¤溅宸�"
+ },
+ "x-enum-varnames": [
+ "JobTypeWeavers",
+ "JobTypeCarHead",
+ "JobTypeMaintenance",
+ "JobTypeBoiled",
+ "JobTypeScoop",
+ "JobTypeTransport",
+ "JobTypeCleaner",
+ "JobTypeMachineCleaner",
+ "JobTypeAllPowerful",
+ "JobTypeMonitor"
]
},
"constvar.MiniDictType": {
@@ -2860,6 +3224,7 @@
"type": "number"
},
"finenessRegisterID": {
+ "description": "绾ゅ害鐧昏ID",
"type": "integer"
},
"id": {
@@ -2915,6 +3280,10 @@
"market": {
"description": "搴勫彛鍚嶇О",
"type": "string"
+ },
+ "marketId": {
+ "description": "搴勫彛ID",
+ "type": "integer"
},
"marketNumber": {
"description": "搴勫彛缂栧彿",
@@ -3032,6 +3401,287 @@
}
}
},
+ "models.PayrollProductionCar": {
+ "type": "object",
+ "properties": {
+ "badSilkQuantity": {
+ "description": "閲庣氦鏁伴噺",
+ "type": "number"
+ },
+ "badSilkTotalAmount": {
+ "description": "閲庣氦鎬讳环",
+ "type": "number"
+ },
+ "badSilkTotalAvgAmount": {
+ "description": "閲庣氦浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "badSilkType": {
+ "description": "閲庣氦绫诲瀷",
+ "type": "string"
+ },
+ "badSilkUnitAmount": {
+ "description": "閲庣氦鍗曚环",
+ "type": "number"
+ },
+ "carNumber": {
+ "description": "杞﹀彴鍙�",
+ "type": "integer"
+ },
+ "carWorkIds": {
+ "description": "杞﹀彴鍏宠仈鎸¤溅宸D",
+ "type": "string"
+ },
+ "carWorkQuantity": {
+ "description": "杞﹀彴鍏宠仈浜哄憳鏁伴噺",
+ "type": "integer"
+ },
+ "cycle": {
+ "description": "缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�",
+ "type": "string"
+ },
+ "desiredLevel": {
+ "description": "鏈熸湜绛夌骇",
+ "type": "string"
+ },
+ "fallingSilkBucket": {
+ "description": "钀戒笣妗舵暟",
+ "type": "number"
+ },
+ "finishLevel": {
+ "description": "鎴愬搧绛夌骇",
+ "type": "string"
+ },
+ "finishTotalAmount": {
+ "description": "鎴愬搧閲戦",
+ "type": "number"
+ },
+ "finishTotalAvgAmount": {
+ "description": "鎴愬搧浜哄钩鍧囬噾棰�",
+ "type": "number"
+ },
+ "groupNumber": {
+ "description": "缁勫埆",
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "marketId": {
+ "description": "搴勫彛缂栧彿",
+ "type": "integer"
+ },
+ "marketName": {
+ "description": "搴勫彛鍚嶇О",
+ "type": "string"
+ },
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
+ "type": "string"
+ },
+ "silkAvgQuantity": {
+ "description": "浜哄钩鍧囦笣閲�",
+ "type": "number"
+ },
+ "silkQuantity": {
+ "description": "涓濋噺",
+ "type": "number"
+ },
+ "silkTotalAmount": {
+ "description": "涓濋噺鎬讳环",
+ "type": "number"
+ },
+ "silkTotalAvgAmount": {
+ "description": "涓濋噺浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "silkUnitAmount": {
+ "description": "涓濆崟浠�",
+ "type": "number"
+ },
+ "spec": {
+ "description": "瑙勬牸",
+ "type": "string"
+ },
+ "workshopNumber": {
+ "description": "杞﹂棿缂栧彿",
+ "type": "string"
+ }
+ }
+ },
+ "models.PayrollProductionGroup": {
+ "type": "object",
+ "properties": {
+ "badSilkQuantity": {
+ "description": "閲庣氦鏁伴噺",
+ "type": "number"
+ },
+ "badSilkTotalAmount": {
+ "description": "閲庣氦鎬讳环",
+ "type": "number"
+ },
+ "badSilkTotalAvgAmount": {
+ "description": "閲庣氦浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "cycle": {
+ "description": "缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�",
+ "type": "string"
+ },
+ "fallingSilkBucket": {
+ "type": "number"
+ },
+ "finishTotalAmount": {
+ "description": "鎴愬搧閲戦",
+ "type": "number"
+ },
+ "finishTotalAvgAmount": {
+ "description": "鎴愬搧浜哄钩鍧囬噾棰�",
+ "type": "number"
+ },
+ "groupNumber": {
+ "description": "缁勫埆",
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "silkAvgQuantity": {
+ "description": "浜哄钩鍧囦笣閲�",
+ "type": "number"
+ },
+ "silkQuantity": {
+ "description": "涓濋噺",
+ "type": "number"
+ },
+ "silkTotalAmount": {
+ "description": "涓濋噺鎬讳环",
+ "type": "number"
+ },
+ "silkTotalAvgAmount": {
+ "description": "涓濋噺浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "workshopName": {
+ "description": "杞﹂棿鍚嶇О",
+ "type": "string"
+ },
+ "workshopNumber": {
+ "description": "杞﹂棿缂栧彿",
+ "type": "string"
+ }
+ }
+ },
+ "models.PayrollSalaryPlan": {
+ "type": "object",
+ "properties": {
+ "amount": {
+ "description": "搴斿彂宸ヨ祫",
+ "type": "number"
+ },
+ "baseSalaryAmount": {
+ "description": "涓嶈揪淇濆簳",
+ "type": "number"
+ },
+ "cycle": {
+ "description": "鏈堜唤",
+ "type": "string"
+ },
+ "dailyInspectionAmount": {
+ "description": "鏃ュ父妫�鏌�/濂栫綒3",
+ "type": "number"
+ },
+ "downtimeAmount": {
+ "description": "鍋滄満琛ヨ创",
+ "type": "number"
+ },
+ "heatAmount": {
+ "description": "濂栫綒2/娓呭噳琛ヨ创",
+ "type": "number"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "longTermAmount": {
+ "description": "婊″嫟",
+ "type": "number"
+ },
+ "masterApprenticeAmount": {
+ "description": "甯﹀緬琛ヨ创",
+ "type": "number"
+ },
+ "overtimeAmount": {
+ "description": "鍔犵彮宸ヨ祫",
+ "type": "number"
+ },
+ "positionAmount": {
+ "description": "宀椾綅琛ヨ创",
+ "type": "number"
+ },
+ "productionAmount": {
+ "description": "鐢熶骇宸ヨ祫",
+ "type": "number"
+ },
+ "qualityStandardsAmount": {
+ "description": "璐ㄩ噺濂�",
+ "type": "number"
+ },
+ "quantity": {
+ "description": "浜ч噺",
+ "type": "number"
+ },
+ "remark": {
+ "description": "澶囨敞",
+ "type": "string"
+ },
+ "seniorityAmount": {
+ "description": "宸ラ緞琛ヨ创",
+ "type": "number"
+ },
+ "socialSecurityAmount": {
+ "description": "绀句繚琛ヨ创",
+ "type": "number"
+ },
+ "substandardQualityAmount": {
+ "description": "濂栫綒1",
+ "type": "number"
+ },
+ "timeoutAmount": {
+ "description": "瓒呮椂宸ヨ祫",
+ "type": "number"
+ },
+ "trafficAmount": {
+ "description": "浜ら�氳ˉ璐�",
+ "type": "number"
+ },
+ "workTypeCode": {
+ "description": "宸ョ浠g爜",
+ "allOf": [
+ {
+ "$ref": "#/definitions/constvar.JobType"
+ }
+ ]
+ },
+ "workTypeID": {
+ "description": "宸ョID",
+ "type": "integer"
+ },
+ "workTypeName": {
+ "description": "宸ョ鍚嶇О",
+ "type": "string"
+ },
+ "worker": {
+ "$ref": "#/definitions/models.Worker"
+ },
+ "workerId": {
+ "description": "鍛樺伐ID",
+ "type": "string"
+ },
+ "workerName": {
+ "type": "string"
+ }
+ }
+ },
"models.RawSilkPriceStandard": {
"type": "object",
"properties": {
@@ -3048,6 +3698,9 @@
"type": "integer"
},
"marketName": {
+ "type": "string"
+ },
+ "marketNumber": {
"type": "string"
},
"notes": {
@@ -3118,6 +3771,9 @@
"addPeople": {
"type": "string"
},
+ "code": {
+ "$ref": "#/definitions/constvar.JobType"
+ },
"createTime": {
"type": "string"
},
@@ -3185,6 +3841,9 @@
},
"workType": {
"type": "string"
+ },
+ "workTypeCode": {
+ "$ref": "#/definitions/constvar.JobType"
},
"workTypeId": {
"type": "integer"
@@ -3371,6 +4030,10 @@
},
"marketName": {
"description": "搴勫彛鍚�",
+ "type": "string"
+ },
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
"type": "string"
},
"number": {
@@ -4341,6 +5004,10 @@
"description": "搴勫彛id",
"type": "integer"
},
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
+ "type": "string"
+ },
"number": {
"description": "缂栧彿",
"type": "string"
diff --git a/docs/swagger.json b/docs/swagger.json
index 6237fc6..71bc2ef 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -346,6 +346,12 @@
"summary": "绾ゅ害妫�楠屽垪琛�",
"parameters": [
{
+ "type": "integer",
+ "description": "绾ゅ害鐧昏琛↖D",
+ "name": "finenessRegisterID",
+ "in": "query"
+ },
+ {
"type": "string",
"name": "keyword",
"in": "query"
@@ -435,7 +441,7 @@
"parameters": [
{
"type": "string",
- "description": "瀛楀吀淇℃伅",
+ "description": "绾ゅ害妫�楠孖D",
"name": "id",
"in": "path",
"required": true
@@ -484,6 +490,46 @@
"description": "鎴愬姛",
"schema": {
"$ref": "#/definitions/util.Response"
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/fineness/checkFinenessID/{id}": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "绾ゅ害妫�楠�"
+ ],
+ "summary": "鏍规嵁绾ゅ害鐧昏ID鑾峰彇绾ゅ害妫�楠岃鎯�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "绾ゅ害鐧昏ID",
+ "name": "id",
+ "in": "path",
+ "required": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "$ref": "#/definitions/response.FinenessCheckInfo"
+ }
+ }
+ }
+ ]
}
}
}
@@ -614,6 +660,12 @@
],
"summary": "绾ゅ害鐧昏鍒楄〃",
"parameters": [
+ {
+ "type": "integer",
+ "description": "绾ゅ害鐧昏琛↖D",
+ "name": "finenessRegisterID",
+ "in": "query"
+ },
{
"type": "string",
"name": "keyword",
@@ -1073,6 +1125,273 @@
}
}
},
+ "/api-jl/v1/salary/getPayrollProductionCarList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇杞﹀彴姣忓ぉ鐨勪骇閲忓垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "integer",
+ "description": "杞﹀彴鍙�",
+ "name": "carNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "绛夌骇",
+ "name": "finishLevel",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "缁勫埆",
+ "name": "groupNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "搴勫彛缂栧彿",
+ "name": "marketNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "monthly",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "瑙勬牸",
+ "name": "spec",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "杞﹂棿缂栧彿",
+ "name": "workshopNumber",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollProductionCar"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/salary/getPayrollProductionGroupList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇灏忕粍姣忓ぉ鐨勪骇閲忓垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "缁勫埆",
+ "name": "groupNumber",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "monthly",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "杞﹂棿缂栧彿",
+ "name": "workshopNumber",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollProductionGroup"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "/api-jl/v1/salary/getPayrollSalaryPlanList": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "tags": [
+ "鍛樺伐钖祫/钖叕鏂规"
+ ],
+ "summary": "鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�",
+ "parameters": [
+ {
+ "type": "string",
+ "description": "token",
+ "name": "Authorization",
+ "in": "header",
+ "required": true
+ },
+ {
+ "type": "string",
+ "description": "缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級",
+ "name": "cycle",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "鍏抽敭瀛�",
+ "name": "keyword",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "椤电爜",
+ "name": "page",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "姣忛〉澶у皬",
+ "name": "pageSize",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "宸ョ缂栫爜",
+ "name": "workTypeCode",
+ "in": "query"
+ },
+ {
+ "type": "integer",
+ "description": "宸ョID",
+ "name": "workTypeID",
+ "in": "query"
+ },
+ {
+ "type": "string",
+ "description": "鍛樺伐ID",
+ "name": "workerID",
+ "in": "query"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "鎴愬姛",
+ "schema": {
+ "allOf": [
+ {
+ "$ref": "#/definitions/util.ResponseList"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "data": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/models.PayrollSalaryPlan"
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
"/api-jl/v1/salary/getSalaryPlanList": {
"post": {
"produces": [
@@ -1317,23 +1636,26 @@
"parameters": [
{
"enum": [
- 0,
1,
2,
- 3
+ 3,
+ 4,
+ 5
],
"type": "integer",
"x-enum-comments": {
"DictTypeColor": "棰滆壊",
"DictTypeMarket": "搴勫彛",
"DictTypeSpec": "瑙勬牸",
+ "DictTypeSubsidy": "琛ヨ创",
"DictTypeWorkshop": "杞﹂棿"
},
"x-enum-varnames": [
"DictTypeMarket",
"DictTypeWorkshop",
"DictTypeColor",
- "DictTypeSpec"
+ "DictTypeSpec",
+ "DictTypeSubsidy"
],
"description": "瀛楀吀绫诲瀷",
"name": "dictType",
@@ -2454,22 +2776,25 @@
"constvar.DictType": {
"type": "integer",
"enum": [
- 0,
1,
2,
- 3
+ 3,
+ 4,
+ 5
],
"x-enum-comments": {
"DictTypeColor": "棰滆壊",
"DictTypeMarket": "搴勫彛",
"DictTypeSpec": "瑙勬牸",
+ "DictTypeSubsidy": "琛ヨ创",
"DictTypeWorkshop": "杞﹂棿"
},
"x-enum-varnames": [
"DictTypeMarket",
"DictTypeWorkshop",
"DictTypeColor",
- "DictTypeSpec"
+ "DictTypeSpec",
+ "DictTypeSubsidy"
]
},
"constvar.FileTemplateCategory": {
@@ -2485,6 +2810,45 @@
"x-enum-varnames": [
"FileTemplateCategory_Selfmade",
"FileTemplateCategory_Output"
+ ]
+ },
+ "constvar.JobType": {
+ "type": "string",
+ "enum": [
+ "weavers",
+ "car_head",
+ "maintenance",
+ "boiled",
+ "scoop",
+ "transport",
+ "cleaner",
+ "machine_cleaner",
+ "all-powerful",
+ "monitor"
+ ],
+ "x-enum-comments": {
+ "JobTypeAllPowerful": "鍏ㄨ兘鏈哄姩",
+ "JobTypeBoiled": "鐓導宸�",
+ "JobTypeCarHead": "杞﹀ご宸�",
+ "JobTypeCleaner": "娓呮磥宸�",
+ "JobTypeMachineCleaner": "鎰熺煡鍣ㄦ竻娲楀伐",
+ "JobTypeMaintenance": "淇濆叏宸�",
+ "JobTypeMonitor": "鐝暱",
+ "JobTypeScoop": "鑸�鑼у伐",
+ "JobTypeTransport": "閫佽導宸�",
+ "JobTypeWeavers": "鎸¤溅宸�"
+ },
+ "x-enum-varnames": [
+ "JobTypeWeavers",
+ "JobTypeCarHead",
+ "JobTypeMaintenance",
+ "JobTypeBoiled",
+ "JobTypeScoop",
+ "JobTypeTransport",
+ "JobTypeCleaner",
+ "JobTypeMachineCleaner",
+ "JobTypeAllPowerful",
+ "JobTypeMonitor"
]
},
"constvar.MiniDictType": {
@@ -2849,6 +3213,7 @@
"type": "number"
},
"finenessRegisterID": {
+ "description": "绾ゅ害鐧昏ID",
"type": "integer"
},
"id": {
@@ -2904,6 +3269,10 @@
"market": {
"description": "搴勫彛鍚嶇О",
"type": "string"
+ },
+ "marketId": {
+ "description": "搴勫彛ID",
+ "type": "integer"
},
"marketNumber": {
"description": "搴勫彛缂栧彿",
@@ -3021,6 +3390,287 @@
}
}
},
+ "models.PayrollProductionCar": {
+ "type": "object",
+ "properties": {
+ "badSilkQuantity": {
+ "description": "閲庣氦鏁伴噺",
+ "type": "number"
+ },
+ "badSilkTotalAmount": {
+ "description": "閲庣氦鎬讳环",
+ "type": "number"
+ },
+ "badSilkTotalAvgAmount": {
+ "description": "閲庣氦浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "badSilkType": {
+ "description": "閲庣氦绫诲瀷",
+ "type": "string"
+ },
+ "badSilkUnitAmount": {
+ "description": "閲庣氦鍗曚环",
+ "type": "number"
+ },
+ "carNumber": {
+ "description": "杞﹀彴鍙�",
+ "type": "integer"
+ },
+ "carWorkIds": {
+ "description": "杞﹀彴鍏宠仈鎸¤溅宸D",
+ "type": "string"
+ },
+ "carWorkQuantity": {
+ "description": "杞﹀彴鍏宠仈浜哄憳鏁伴噺",
+ "type": "integer"
+ },
+ "cycle": {
+ "description": "缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�",
+ "type": "string"
+ },
+ "desiredLevel": {
+ "description": "鏈熸湜绛夌骇",
+ "type": "string"
+ },
+ "fallingSilkBucket": {
+ "description": "钀戒笣妗舵暟",
+ "type": "number"
+ },
+ "finishLevel": {
+ "description": "鎴愬搧绛夌骇",
+ "type": "string"
+ },
+ "finishTotalAmount": {
+ "description": "鎴愬搧閲戦",
+ "type": "number"
+ },
+ "finishTotalAvgAmount": {
+ "description": "鎴愬搧浜哄钩鍧囬噾棰�",
+ "type": "number"
+ },
+ "groupNumber": {
+ "description": "缁勫埆",
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "marketId": {
+ "description": "搴勫彛缂栧彿",
+ "type": "integer"
+ },
+ "marketName": {
+ "description": "搴勫彛鍚嶇О",
+ "type": "string"
+ },
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
+ "type": "string"
+ },
+ "silkAvgQuantity": {
+ "description": "浜哄钩鍧囦笣閲�",
+ "type": "number"
+ },
+ "silkQuantity": {
+ "description": "涓濋噺",
+ "type": "number"
+ },
+ "silkTotalAmount": {
+ "description": "涓濋噺鎬讳环",
+ "type": "number"
+ },
+ "silkTotalAvgAmount": {
+ "description": "涓濋噺浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "silkUnitAmount": {
+ "description": "涓濆崟浠�",
+ "type": "number"
+ },
+ "spec": {
+ "description": "瑙勬牸",
+ "type": "string"
+ },
+ "workshopNumber": {
+ "description": "杞﹂棿缂栧彿",
+ "type": "string"
+ }
+ }
+ },
+ "models.PayrollProductionGroup": {
+ "type": "object",
+ "properties": {
+ "badSilkQuantity": {
+ "description": "閲庣氦鏁伴噺",
+ "type": "number"
+ },
+ "badSilkTotalAmount": {
+ "description": "閲庣氦鎬讳环",
+ "type": "number"
+ },
+ "badSilkTotalAvgAmount": {
+ "description": "閲庣氦浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "cycle": {
+ "description": "缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�",
+ "type": "string"
+ },
+ "fallingSilkBucket": {
+ "type": "number"
+ },
+ "finishTotalAmount": {
+ "description": "鎴愬搧閲戦",
+ "type": "number"
+ },
+ "finishTotalAvgAmount": {
+ "description": "鎴愬搧浜哄钩鍧囬噾棰�",
+ "type": "number"
+ },
+ "groupNumber": {
+ "description": "缁勫埆",
+ "type": "integer"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "silkAvgQuantity": {
+ "description": "浜哄钩鍧囦笣閲�",
+ "type": "number"
+ },
+ "silkQuantity": {
+ "description": "涓濋噺",
+ "type": "number"
+ },
+ "silkTotalAmount": {
+ "description": "涓濋噺鎬讳环",
+ "type": "number"
+ },
+ "silkTotalAvgAmount": {
+ "description": "涓濋噺浜哄钩鍧囨�讳环",
+ "type": "number"
+ },
+ "workshopName": {
+ "description": "杞﹂棿鍚嶇О",
+ "type": "string"
+ },
+ "workshopNumber": {
+ "description": "杞﹂棿缂栧彿",
+ "type": "string"
+ }
+ }
+ },
+ "models.PayrollSalaryPlan": {
+ "type": "object",
+ "properties": {
+ "amount": {
+ "description": "搴斿彂宸ヨ祫",
+ "type": "number"
+ },
+ "baseSalaryAmount": {
+ "description": "涓嶈揪淇濆簳",
+ "type": "number"
+ },
+ "cycle": {
+ "description": "鏈堜唤",
+ "type": "string"
+ },
+ "dailyInspectionAmount": {
+ "description": "鏃ュ父妫�鏌�/濂栫綒3",
+ "type": "number"
+ },
+ "downtimeAmount": {
+ "description": "鍋滄満琛ヨ创",
+ "type": "number"
+ },
+ "heatAmount": {
+ "description": "濂栫綒2/娓呭噳琛ヨ创",
+ "type": "number"
+ },
+ "id": {
+ "type": "integer"
+ },
+ "longTermAmount": {
+ "description": "婊″嫟",
+ "type": "number"
+ },
+ "masterApprenticeAmount": {
+ "description": "甯﹀緬琛ヨ创",
+ "type": "number"
+ },
+ "overtimeAmount": {
+ "description": "鍔犵彮宸ヨ祫",
+ "type": "number"
+ },
+ "positionAmount": {
+ "description": "宀椾綅琛ヨ创",
+ "type": "number"
+ },
+ "productionAmount": {
+ "description": "鐢熶骇宸ヨ祫",
+ "type": "number"
+ },
+ "qualityStandardsAmount": {
+ "description": "璐ㄩ噺濂�",
+ "type": "number"
+ },
+ "quantity": {
+ "description": "浜ч噺",
+ "type": "number"
+ },
+ "remark": {
+ "description": "澶囨敞",
+ "type": "string"
+ },
+ "seniorityAmount": {
+ "description": "宸ラ緞琛ヨ创",
+ "type": "number"
+ },
+ "socialSecurityAmount": {
+ "description": "绀句繚琛ヨ创",
+ "type": "number"
+ },
+ "substandardQualityAmount": {
+ "description": "濂栫綒1",
+ "type": "number"
+ },
+ "timeoutAmount": {
+ "description": "瓒呮椂宸ヨ祫",
+ "type": "number"
+ },
+ "trafficAmount": {
+ "description": "浜ら�氳ˉ璐�",
+ "type": "number"
+ },
+ "workTypeCode": {
+ "description": "宸ョ浠g爜",
+ "allOf": [
+ {
+ "$ref": "#/definitions/constvar.JobType"
+ }
+ ]
+ },
+ "workTypeID": {
+ "description": "宸ョID",
+ "type": "integer"
+ },
+ "workTypeName": {
+ "description": "宸ョ鍚嶇О",
+ "type": "string"
+ },
+ "worker": {
+ "$ref": "#/definitions/models.Worker"
+ },
+ "workerId": {
+ "description": "鍛樺伐ID",
+ "type": "string"
+ },
+ "workerName": {
+ "type": "string"
+ }
+ }
+ },
"models.RawSilkPriceStandard": {
"type": "object",
"properties": {
@@ -3037,6 +3687,9 @@
"type": "integer"
},
"marketName": {
+ "type": "string"
+ },
+ "marketNumber": {
"type": "string"
},
"notes": {
@@ -3107,6 +3760,9 @@
"addPeople": {
"type": "string"
},
+ "code": {
+ "$ref": "#/definitions/constvar.JobType"
+ },
"createTime": {
"type": "string"
},
@@ -3174,6 +3830,9 @@
},
"workType": {
"type": "string"
+ },
+ "workTypeCode": {
+ "$ref": "#/definitions/constvar.JobType"
},
"workTypeId": {
"type": "integer"
@@ -3360,6 +4019,10 @@
},
"marketName": {
"description": "搴勫彛鍚�",
+ "type": "string"
+ },
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
"type": "string"
},
"number": {
@@ -4330,6 +4993,10 @@
"description": "搴勫彛id",
"type": "integer"
},
+ "marketNumber": {
+ "description": "搴勫彛缂栧彿",
+ "type": "string"
+ },
"number": {
"description": "缂栧彿",
"type": "string"
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index d383d84..5c36380 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -49,21 +49,24 @@
- CheckItemMaxDeviation
constvar.DictType:
enum:
- - 0
- 1
- 2
- 3
+ - 4
+ - 5
type: integer
x-enum-comments:
DictTypeColor: 棰滆壊
DictTypeMarket: 搴勫彛
DictTypeSpec: 瑙勬牸
+ DictTypeSubsidy: 琛ヨ创
DictTypeWorkshop: 杞﹂棿
x-enum-varnames:
- DictTypeMarket
- DictTypeWorkshop
- DictTypeColor
- DictTypeSpec
+ - DictTypeSubsidy
constvar.FileTemplateCategory:
enum:
- 1
@@ -75,6 +78,41 @@
x-enum-varnames:
- FileTemplateCategory_Selfmade
- FileTemplateCategory_Output
+ constvar.JobType:
+ enum:
+ - weavers
+ - car_head
+ - maintenance
+ - boiled
+ - scoop
+ - transport
+ - cleaner
+ - machine_cleaner
+ - all-powerful
+ - monitor
+ type: string
+ x-enum-comments:
+ JobTypeAllPowerful: 鍏ㄨ兘鏈哄姩
+ JobTypeBoiled: 鐓導宸�
+ JobTypeCarHead: 杞﹀ご宸�
+ JobTypeCleaner: 娓呮磥宸�
+ JobTypeMachineCleaner: 鎰熺煡鍣ㄦ竻娲楀伐
+ JobTypeMaintenance: 淇濆叏宸�
+ JobTypeMonitor: 鐝暱
+ JobTypeScoop: 鑸�鑼у伐
+ JobTypeTransport: 閫佽導宸�
+ JobTypeWeavers: 鎸¤溅宸�
+ x-enum-varnames:
+ - JobTypeWeavers
+ - JobTypeCarHead
+ - JobTypeMaintenance
+ - JobTypeBoiled
+ - JobTypeScoop
+ - JobTypeTransport
+ - JobTypeCleaner
+ - JobTypeMachineCleaner
+ - JobTypeAllPowerful
+ - JobTypeMonitor
constvar.MiniDictType:
enum:
- 1
@@ -334,6 +372,7 @@
description: 绾ゅ害
type: number
finenessRegisterID:
+ description: 绾ゅ害鐧昏ID
type: integer
id:
type: integer
@@ -373,6 +412,9 @@
market:
description: 搴勫彛鍚嶇О
type: string
+ marketId:
+ description: 搴勫彛ID
+ type: integer
marketNumber:
description: 搴勫彛缂栧彿
type: string
@@ -452,6 +494,211 @@
value:
type: string
type: object
+ models.PayrollProductionCar:
+ properties:
+ badSilkQuantity:
+ description: 閲庣氦鏁伴噺
+ type: number
+ badSilkTotalAmount:
+ description: 閲庣氦鎬讳环
+ type: number
+ badSilkTotalAvgAmount:
+ description: 閲庣氦浜哄钩鍧囨�讳环
+ type: number
+ badSilkType:
+ description: 閲庣氦绫诲瀷
+ type: string
+ badSilkUnitAmount:
+ description: 閲庣氦鍗曚环
+ type: number
+ carNumber:
+ description: 杞﹀彴鍙�
+ type: integer
+ carWorkIds:
+ description: 杞﹀彴鍏宠仈鎸¤溅宸D
+ type: string
+ carWorkQuantity:
+ description: 杞﹀彴鍏宠仈浜哄憳鏁伴噺
+ type: integer
+ cycle:
+ description: 缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ type: string
+ desiredLevel:
+ description: 鏈熸湜绛夌骇
+ type: string
+ fallingSilkBucket:
+ description: 钀戒笣妗舵暟
+ type: number
+ finishLevel:
+ description: 鎴愬搧绛夌骇
+ type: string
+ finishTotalAmount:
+ description: 鎴愬搧閲戦
+ type: number
+ finishTotalAvgAmount:
+ description: 鎴愬搧浜哄钩鍧囬噾棰�
+ type: number
+ groupNumber:
+ description: 缁勫埆
+ type: integer
+ id:
+ type: integer
+ marketId:
+ description: 搴勫彛缂栧彿
+ type: integer
+ marketName:
+ description: 搴勫彛鍚嶇О
+ type: string
+ marketNumber:
+ description: 搴勫彛缂栧彿
+ type: string
+ silkAvgQuantity:
+ description: 浜哄钩鍧囦笣閲�
+ type: number
+ silkQuantity:
+ description: 涓濋噺
+ type: number
+ silkTotalAmount:
+ description: 涓濋噺鎬讳环
+ type: number
+ silkTotalAvgAmount:
+ description: 涓濋噺浜哄钩鍧囨�讳环
+ type: number
+ silkUnitAmount:
+ description: 涓濆崟浠�
+ type: number
+ spec:
+ description: 瑙勬牸
+ type: string
+ workshopNumber:
+ description: 杞﹂棿缂栧彿
+ type: string
+ type: object
+ models.PayrollProductionGroup:
+ properties:
+ badSilkQuantity:
+ description: 閲庣氦鏁伴噺
+ type: number
+ badSilkTotalAmount:
+ description: 閲庣氦鎬讳环
+ type: number
+ badSilkTotalAvgAmount:
+ description: 閲庣氦浜哄钩鍧囨�讳环
+ type: number
+ cycle:
+ description: 缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ type: string
+ fallingSilkBucket:
+ type: number
+ finishTotalAmount:
+ description: 鎴愬搧閲戦
+ type: number
+ finishTotalAvgAmount:
+ description: 鎴愬搧浜哄钩鍧囬噾棰�
+ type: number
+ groupNumber:
+ description: 缁勫埆
+ type: integer
+ id:
+ type: integer
+ silkAvgQuantity:
+ description: 浜哄钩鍧囦笣閲�
+ type: number
+ silkQuantity:
+ description: 涓濋噺
+ type: number
+ silkTotalAmount:
+ description: 涓濋噺鎬讳环
+ type: number
+ silkTotalAvgAmount:
+ description: 涓濋噺浜哄钩鍧囨�讳环
+ type: number
+ workshopName:
+ description: 杞﹂棿鍚嶇О
+ type: string
+ workshopNumber:
+ description: 杞﹂棿缂栧彿
+ type: string
+ type: object
+ models.PayrollSalaryPlan:
+ properties:
+ amount:
+ description: 搴斿彂宸ヨ祫
+ type: number
+ baseSalaryAmount:
+ description: 涓嶈揪淇濆簳
+ type: number
+ cycle:
+ description: 鏈堜唤
+ type: string
+ dailyInspectionAmount:
+ description: 鏃ュ父妫�鏌�/濂栫綒3
+ type: number
+ downtimeAmount:
+ description: 鍋滄満琛ヨ创
+ type: number
+ heatAmount:
+ description: 濂栫綒2/娓呭噳琛ヨ创
+ type: number
+ id:
+ type: integer
+ longTermAmount:
+ description: 婊″嫟
+ type: number
+ masterApprenticeAmount:
+ description: 甯﹀緬琛ヨ创
+ type: number
+ overtimeAmount:
+ description: 鍔犵彮宸ヨ祫
+ type: number
+ positionAmount:
+ description: 宀椾綅琛ヨ创
+ type: number
+ productionAmount:
+ description: 鐢熶骇宸ヨ祫
+ type: number
+ qualityStandardsAmount:
+ description: 璐ㄩ噺濂�
+ type: number
+ quantity:
+ description: 浜ч噺
+ type: number
+ remark:
+ description: 澶囨敞
+ type: string
+ seniorityAmount:
+ description: 宸ラ緞琛ヨ创
+ type: number
+ socialSecurityAmount:
+ description: 绀句繚琛ヨ创
+ type: number
+ substandardQualityAmount:
+ description: 濂栫綒1
+ type: number
+ timeoutAmount:
+ description: 瓒呮椂宸ヨ祫
+ type: number
+ trafficAmount:
+ description: 浜ら�氳ˉ璐�
+ type: number
+ workTypeCode:
+ allOf:
+ - $ref: '#/definitions/constvar.JobType'
+ description: 宸ョ浠g爜
+ workTypeID:
+ description: 宸ョID
+ type: integer
+ workTypeName:
+ description: 宸ョ鍚嶇О
+ type: string
+ worker:
+ $ref: '#/definitions/models.Worker'
+ workerId:
+ description: 鍛樺伐ID
+ type: string
+ workerName:
+ type: string
+ type: object
models.RawSilkPriceStandard:
properties:
createdAt:
@@ -463,6 +710,8 @@
marketId:
type: integer
marketName:
+ type: string
+ marketNumber:
type: string
notes:
type: string
@@ -509,6 +758,8 @@
properties:
addPeople:
type: string
+ code:
+ $ref: '#/definitions/constvar.JobType'
createTime:
type: string
createdAt:
@@ -554,6 +805,8 @@
$ref: '#/definitions/constvar.WorkerStatus'
workType:
type: string
+ workTypeCode:
+ $ref: '#/definitions/constvar.JobType'
workTypeId:
type: integer
type: object
@@ -677,6 +930,9 @@
type: integer
marketName:
description: 搴勫彛鍚�
+ type: string
+ marketNumber:
+ description: 搴勫彛缂栧彿
type: string
number:
type: string
@@ -1347,6 +1603,9 @@
marketId:
description: 搴勫彛id
type: integer
+ marketNumber:
+ description: 搴勫彛缂栧彿
+ type: string
number:
description: 缂栧彿
type: string
@@ -1851,6 +2110,10 @@
/api-jl/v1/fineness/check:
get:
parameters:
+ - description: 绾ゅ害鐧昏琛↖D
+ in: query
+ name: finenessRegisterID
+ type: integer
- in: query
name: keyword
type: string
@@ -1922,7 +2185,7 @@
- 绾ゅ害妫�楠�
get:
parameters:
- - description: 瀛楀吀淇℃伅
+ - description: 绾ゅ害妫�楠孖D
in: path
name: id
required: true
@@ -1940,6 +2203,29 @@
$ref: '#/definitions/response.FinenessCheckInfo'
type: object
summary: 绾ゅ害妫�楠岃鎯�
+ tags:
+ - 绾ゅ害妫�楠�
+ /api-jl/v1/fineness/checkFinenessID/{id}:
+ get:
+ parameters:
+ - description: 绾ゅ害鐧昏ID
+ in: path
+ name: id
+ required: true
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ $ref: '#/definitions/response.FinenessCheckInfo'
+ type: object
+ summary: 鏍规嵁绾ゅ害鐧昏ID鑾峰彇绾ゅ害妫�楠岃鎯�
tags:
- 绾ゅ害妫�楠�
/api-jl/v1/fineness/deleteYieldRegister/{number}:
@@ -2013,6 +2299,10 @@
/api-jl/v1/fineness/register:
get:
parameters:
+ - description: 绾ゅ害鐧昏琛↖D
+ in: query
+ name: finenessRegisterID
+ type: integer
- in: query
name: keyword
type: string
@@ -2303,6 +2593,173 @@
summary: 鍒犻櫎钖叕鏂规
tags:
- 鍛樺伐钖祫/钖叕鏂规
+ /api-jl/v1/salary/getPayrollProductionCarList:
+ get:
+ parameters:
+ - description: token
+ in: header
+ name: Authorization
+ required: true
+ type: string
+ - description: 杞﹀彴鍙�
+ in: query
+ name: carNumber
+ type: integer
+ - description: 缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級
+ in: query
+ name: cycle
+ type: string
+ - description: 绛夌骇
+ in: query
+ name: finishLevel
+ type: string
+ - description: 缁勫埆
+ in: query
+ name: groupNumber
+ type: integer
+ - description: 搴勫彛缂栧彿
+ in: query
+ name: marketNumber
+ type: string
+ - description: 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ in: query
+ name: monthly
+ type: string
+ - description: 椤电爜
+ in: query
+ name: page
+ type: integer
+ - description: 姣忛〉澶у皬
+ in: query
+ name: pageSize
+ type: integer
+ - description: 瑙勬牸
+ in: query
+ name: spec
+ type: string
+ - description: 杞﹂棿缂栧彿
+ in: query
+ name: workshopNumber
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ items:
+ $ref: '#/definitions/models.PayrollProductionCar'
+ type: array
+ type: object
+ summary: 鑾峰彇杞﹀彴姣忓ぉ鐨勪骇閲忓垪琛�
+ tags:
+ - 鍛樺伐钖祫/钖叕鏂规
+ /api-jl/v1/salary/getPayrollProductionGroupList:
+ get:
+ parameters:
+ - description: token
+ in: header
+ name: Authorization
+ required: true
+ type: string
+ - description: 缁熻鍛ㄦ湡锛堝勾-鏈�-鏃ワ級
+ in: query
+ name: cycle
+ type: string
+ - description: 缁勫埆
+ in: query
+ name: groupNumber
+ type: integer
+ - description: 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ in: query
+ name: monthly
+ type: string
+ - description: 椤电爜
+ in: query
+ name: page
+ type: integer
+ - description: 姣忛〉澶у皬
+ in: query
+ name: pageSize
+ type: integer
+ - description: 杞﹂棿缂栧彿
+ in: query
+ name: workshopNumber
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ items:
+ $ref: '#/definitions/models.PayrollProductionGroup'
+ type: array
+ type: object
+ summary: 鑾峰彇灏忕粍姣忓ぉ鐨勪骇閲忓垪琛�
+ tags:
+ - 鍛樺伐钖祫/钖叕鏂规
+ /api-jl/v1/salary/getPayrollSalaryPlanList:
+ get:
+ parameters:
+ - description: token
+ in: header
+ name: Authorization
+ required: true
+ type: string
+ - description: 缁熻鍛ㄦ湡鎸夋湀鏌ヨ锛堝勾-鏈堬級
+ in: query
+ name: cycle
+ type: string
+ - description: 鍏抽敭瀛�
+ in: query
+ name: keyword
+ type: string
+ - description: 椤电爜
+ in: query
+ name: page
+ type: integer
+ - description: 姣忛〉澶у皬
+ in: query
+ name: pageSize
+ type: integer
+ - description: 宸ョ缂栫爜
+ in: query
+ name: workTypeCode
+ type: string
+ - description: 宸ョID
+ in: query
+ name: workTypeID
+ type: integer
+ - description: 鍛樺伐ID
+ in: query
+ name: workerID
+ type: string
+ produces:
+ - application/json
+ responses:
+ "200":
+ description: 鎴愬姛
+ schema:
+ allOf:
+ - $ref: '#/definitions/util.ResponseList'
+ - properties:
+ data:
+ items:
+ $ref: '#/definitions/models.PayrollSalaryPlan'
+ type: array
+ type: object
+ summary: 鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�
+ tags:
+ - 鍛樺伐钖祫/钖叕鏂规
/api-jl/v1/salary/getSalaryPlanList:
post:
parameters:
@@ -2453,10 +2910,11 @@
parameters:
- description: 瀛楀吀绫诲瀷
enum:
- - 0
- 1
- 2
- 3
+ - 4
+ - 5
in: query
name: dictType
type: integer
@@ -2464,12 +2922,14 @@
DictTypeColor: 棰滆壊
DictTypeMarket: 搴勫彛
DictTypeSpec: 瑙勬牸
+ DictTypeSubsidy: 琛ヨ创
DictTypeWorkshop: 杞﹂棿
x-enum-varnames:
- DictTypeMarket
- DictTypeWorkshop
- DictTypeColor
- DictTypeSpec
+ - DictTypeSubsidy
- description: 鎼滅储鍏抽敭瀛�
in: query
name: keyword
diff --git a/models/db.go b/models/db.go
index 4226418..bc0b521 100644
--- a/models/db.go
+++ b/models/db.go
@@ -94,6 +94,12 @@
SalaryReportForm{},
SalaryDetails{},
Lock{},
+ PayrollWorkingHours{},
+ PayrollProductionCar{},
+ PayrollProductionWeavers{},
+ PayrollProductionGroup{},
+ PayrollOtherSubsidies{},
+ PayrollSalaryPlan{},
)
return err
}
@@ -105,6 +111,7 @@
func InsertDefaultData() {
models := []interface{}{
NewAttendanceRuleSearch(),
+ //NewPayrollSalaryPlanSearch(),
}
for _, model := range models {
if id, ok := model.(InitDefaultData); ok {
diff --git a/models/payroll_other_subsidies.go b/models/payroll_other_subsidies.go
new file mode 100644
index 0000000..f90429c
--- /dev/null
+++ b/models/payroll_other_subsidies.go
@@ -0,0 +1,299 @@
+package models
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/constvar"
+ "silkserver/pkg/mysqlx"
+)
+
+type (
+ // PayrollOtherSubsidies 鍏跺畠琛ヨ创銆佸鎯�
+ PayrollOtherSubsidies struct {
+ BaseModelInt
+ Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:缁熻鍛ㄦ湡"` //鏈堜唤
+ WorkerID string `json:"workerId" gorm:"size:200;not null;comment:鍛樺伐ID"` //鍛樺伐ID
+ Worker Worker `json:"worker" gorm:"foreignKey:WorkerID;references:ID"`
+ WorkTypeID uint `json:"workTypeID" gorm:"type:bigint(20);not null;comment:宸ョID"` //宸ョID
+ WorkTypeCode constvar.JobType `json:"workTypeCode" gorm:"size:255;not null;comment:宸ョ浠g爜"` //宸ョ浠g爜
+ WorkTypeName string `json:"workTypeName" gorm:"size:255;not null;comment:宸ョ鍚嶇О"` //宸ョ鍚嶇О
+ SubsidyType constvar.PayrollSubsidyType `json:"subsidyType" gorm:"size:50;not null;comment:琛ヨ创绫诲瀷"` // 琛ヨ创绫诲瀷
+ SubsidyTypeName string `json:"subsidyTypeName" gorm:"size:255;comment:琛ヨ创绫诲瀷鍚嶇О"` // 琛ヨ创绫诲瀷鍚嶇О
+ Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);comment:閲戦"` // 閲戦
+ }
+
+ PayrollOtherSubsidiesSearch struct {
+ PayrollOtherSubsidies
+ Monthly string
+ Order string
+ PageNum int
+ PageSize int
+ Preload bool
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollOtherSubsidies) TableName() string {
+ return "silk_payroll_other_subsidies"
+}
+
+// NewPayrollOtherSubsidiesSearch 鍏跺畠琛ヨ创
+func NewPayrollOtherSubsidiesSearch() *PayrollOtherSubsidiesSearch {
+ return &PayrollOtherSubsidiesSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetOrm(tx *gorm.DB) *PayrollOtherSubsidiesSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetPage(page, size int) *PayrollOtherSubsidiesSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetOrder(order string) *PayrollOtherSubsidiesSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetID(id uint) *PayrollOtherSubsidiesSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetCycle(cycle string) *PayrollOtherSubsidiesSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetMonthly(monthly string) *PayrollOtherSubsidiesSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetWorkTypeID(workTypeID uint) *PayrollOtherSubsidiesSearch {
+ slf.WorkTypeID = workTypeID
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetWorkerID(workerID string) *PayrollOtherSubsidiesSearch {
+ slf.WorkerID = workerID
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) SetSubsidyType(subsidyType constvar.PayrollSubsidyType) *PayrollOtherSubsidiesSearch {
+ slf.SubsidyType = subsidyType
+ return slf
+}
+
+func (slf *PayrollOtherSubsidiesSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.Preload {
+ db = db.Model(&PayrollOtherSubsidies{}).Preload("Worker")
+ }
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkTypeID > 0 {
+ db = db.Where("work_type_id = ?", slf.WorkTypeID)
+ }
+
+ if slf.WorkerID != "" {
+ db = db.Where("worker_id = ?", slf.WorkerID)
+ }
+
+ if slf.SubsidyType != "" {
+ db = db.Where("subsidy_type = ?", slf.SubsidyType)
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollOtherSubsidiesSearch) Create(record *PayrollOtherSubsidies) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollOtherSubsidiesSearch) CreateBatch(records []*PayrollOtherSubsidies) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollOtherSubsidiesSearch) Save(record *PayrollOtherSubsidies) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollOtherSubsidiesSearch) SaveBatch(record []*PayrollOtherSubsidies) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollOtherSubsidiesSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollOtherSubsidiesSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollOtherSubsidiesSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollOtherSubsidies{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollOtherSubsidiesSearch) First() (*PayrollOtherSubsidies, error) {
+ var (
+ record = new(PayrollOtherSubsidies)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollOtherSubsidiesSearch) Find() ([]*PayrollOtherSubsidies, int64, error) {
+ var (
+ records = make([]*PayrollOtherSubsidies, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollOtherSubsidiesSearch) FindNotTotal() ([]*PayrollOtherSubsidies, error) {
+ var (
+ records = make([]*PayrollOtherSubsidies, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollOtherSubsidiesSearch) FindByQuery(query string, args []interface{}) ([]*PayrollOtherSubsidies, int64, error) {
+ var (
+ records = make([]*PayrollOtherSubsidies, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollOtherSubsidiesSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollOtherSubsidies, error) {
+ var (
+ records = make([]*PayrollOtherSubsidies, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
diff --git a/models/payroll_production_car.go b/models/payroll_production_car.go
new file mode 100644
index 0000000..51f6e17
--- /dev/null
+++ b/models/payroll_production_car.go
@@ -0,0 +1,409 @@
+package models
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/pkg/mysqlx"
+)
+
+type ProductionItemsType int
+
+const (
+ ProductionItemsTypeSilk ProductionItemsType = iota + 1 // 姝e父绾�
+ ProductionItemsTypeBadSilk // 閲庣氦
+)
+
+type (
+ // PayrollProductionCar 宸ヨ祫璁$畻-杞﹀彴姣忓ぉ鐨勪骇閲忕粺璁�
+ PayrollProductionCar struct {
+ BaseModelInt
+ Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�"` //缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ WorkshopNumber string `json:"workshopNumber" gorm:"size:255;not null;comment:杞﹂棿缂栧彿"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber" gorm:"size:11;not null;comment:缁勫埆"` // 缁勫埆
+ CarNumber int `json:"carNumber" gorm:"size:11;not null;comment:杞﹀彴鍙�"` // 杞﹀彴鍙�
+
+ CarWorkQuantity int `json:"carWorkQuantity" gorm:"size:11;default:1;comment:杞﹀彴鍏宠仈浜哄憳鏁伴噺"` // 杞﹀彴鍏宠仈浜哄憳鏁伴噺
+ CarWorkIds string `json:"carWorkIds" gorm:"size:255;comment:杞﹀彴鍏宠仈鎸¤溅宸D"` // 杞﹀彴鍏宠仈鎸¤溅宸D
+
+ MarketId uint `json:"marketId" gorm:"type:int(11);not null;comment:搴勫彛ID" ` //搴勫彛缂栧彿
+ MarketNumber string `json:"marketNumber" gorm:"size:50;not null;comment:搴勫彛缂栧彿" ` //搴勫彛缂栧彿
+ MarketName string `json:"marketName" gorm:"size:255;comment:搴勫彛鍚嶇О" ` //搴勫彛鍚嶇О
+ FallingSilkBucket decimal.Decimal `json:"fallingSilkBucket" gorm:"type:decimal(12,2);comment:钀戒笣妗舵暟"` // 钀戒笣妗舵暟
+ Spec string `json:"spec" gorm:"size:50;not null;comment:瑙勬牸" ` //瑙勬牸
+
+ DesiredLevel string `json:"desiredLevel" gorm:"size:50;comment:鏈熸湜绛夌骇"` // 鏈熸湜绛夌骇
+ FinishLevel string `json:"finishLevel" gorm:"size:50;not null;comment:鎴愬搧绛夌骇"` // 鎴愬搧绛夌骇
+ SilkQuantity decimal.Decimal `json:"silkQuantity" gorm:"type:decimal(12,4);comment:涓濋噺"` // 涓濋噺
+ SilkAvgQuantity decimal.Decimal `json:"silkAvgQuantity" gorm:"type:decimal(12,4);comment:浜哄钩鍧囦笣閲�"` // 浜哄钩鍧囦笣閲�
+ SilkUnitAmount decimal.Decimal `json:"silkUnitAmount" gorm:"type:decimal(12,2);comment:涓濆崟浠�"` // 涓濆崟浠�
+ SilkTotalAmount decimal.Decimal `json:"silkTotalAmount" gorm:"type:decimal(12,4);comment:涓濋噺鎬讳环"` // 涓濋噺鎬讳环
+ SilkTotalAvgAmount decimal.Decimal `json:"silkTotalAvgAmount" gorm:"type:decimal(12,4);comment:涓濋噺浜哄钩鍧囨�讳环"` // 涓濋噺浜哄钩鍧囨�讳环
+
+ BadSilkType string `json:"badSilkType" gorm:"size:50;comment:閲庣氦绫诲瀷"` // 閲庣氦绫诲瀷
+ BadSilkQuantity decimal.Decimal `json:"badSilkQuantity" gorm:"type:decimal(12,4);comment:閲庣氦鏁伴噺"` // 閲庣氦鏁伴噺
+ BadSilkAvgQuantity decimal.Decimal `json:"badSilkAvgQuantity" gorm:"type:decimal(12,4);comment:閲庣氦骞冲潎鏁伴噺"` // 閲庣氦骞冲潎鏁伴噺
+ BadSilkUnitAmount decimal.Decimal `json:"badSilkUnitAmount" gorm:"type:decimal(12,2);comment:閲庣氦鍗曚环"` // 閲庣氦鍗曚环
+ BadSilkTotalAmount decimal.Decimal `json:"badSilkTotalAmount" gorm:"type:decimal(12,4);comment:閲庣氦鎬讳环"` // 閲庣氦鎬讳环
+ BadSilkTotalAvgAmount decimal.Decimal `json:"badSilkTotalAvgAmount" gorm:"type:decimal(12,4);comment:閲庣氦浜哄钩鍧囨�讳环"` // 閲庣氦浜哄钩鍧囨�讳环
+ FinishTotalAvgAmount decimal.Decimal `json:"finishTotalAvgAmount" gorm:"type:decimal(12,4);comment:鎴愬搧浜哄钩鍧囬噾棰�"` // 鎴愬搧浜哄钩鍧囬噾棰�
+
+ FinishTotalAmount decimal.Decimal `json:"finishTotalAmount" gorm:"type:decimal(12,4);comment:鎴愬搧閲戦"` // 鎴愬搧閲戦
+ }
+
+ SilkItem struct {
+ Type string `json:"badSilkType" gorm:"size:50;not null;comment:绫诲瀷"` // 绫诲瀷
+ Quantity decimal.Decimal `json:"badSilkQuantity" gorm:"type:decimal(12,4);comment:閲庣氦鏁伴噺"` // 鏁伴噺
+ UnitAmount decimal.Decimal `json:"badSilkUnitAmount" gorm:"type:decimal(12,2);comment:閲庣氦鍗曚环"` // 鍗曚环
+ }
+
+ PayrollProductionCarSearch struct {
+ PayrollProductionCar
+ Monthly string
+ Order string
+ PageNum int
+ PageSize int
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollProductionCar) TableName() string {
+ return "silk_payroll_production_car"
+}
+
+// NewPayrollProductionCarSearch 杞﹀彴姣忓ぉ鐨勪骇閲忕粺璁�
+func NewPayrollProductionCarSearch() *PayrollProductionCarSearch {
+ return &PayrollProductionCarSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollProductionCarSearch) SetOrm(tx *gorm.DB) *PayrollProductionCarSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetPage(page, size int) *PayrollProductionCarSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetOrder(order string) *PayrollProductionCarSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetID(id uint) *PayrollProductionCarSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetCycle(cycle string) *PayrollProductionCarSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetMonthly(monthly string) *PayrollProductionCarSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetWorkshopNumber(workshopNumber string) *PayrollProductionCarSearch {
+ slf.WorkshopNumber = workshopNumber
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetGroupNumber(groupNumber int) *PayrollProductionCarSearch {
+ slf.GroupNumber = groupNumber
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetMarketNumber(marketNumber string) *PayrollProductionCarSearch {
+ slf.MarketNumber = marketNumber
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetMarketName(marketName string) *PayrollProductionCarSearch {
+ slf.MarketName = marketName
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetCarNumber(carNumber int) *PayrollProductionCarSearch {
+ slf.CarNumber = carNumber
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetSpec(spec string) *PayrollProductionCarSearch {
+ slf.Spec = spec
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetDesiredLevel(desiredLevel string) *PayrollProductionCarSearch {
+ slf.DesiredLevel = desiredLevel
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetFinishLevel(finishLevel string) *PayrollProductionCarSearch {
+ slf.FinishLevel = finishLevel
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) SetBadSilkType(badSilkType string) *PayrollProductionCarSearch {
+ slf.BadSilkType = badSilkType
+ return slf
+}
+
+func (slf *PayrollProductionCarSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkshopNumber != "" {
+ db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+ }
+
+ if slf.GroupNumber > 0 {
+ db = db.Where("group_number = ?", slf.GroupNumber)
+ }
+
+ if slf.CarNumber > 0 {
+ db = db.Where("car_number = ?", slf.CarNumber)
+ }
+
+ if slf.MarketNumber != "" {
+ db = db.Where("market_number = ?", slf.MarketNumber)
+ }
+
+ if slf.MarketName != "" {
+ db = db.Where("market_name like ?", "%"+slf.MarketName+"%")
+ }
+
+ if slf.Spec != "" {
+ db = db.Where("spec = ?", slf.Spec)
+ }
+
+ if slf.DesiredLevel != "" {
+ db = db.Where("desired_level = ?", slf.DesiredLevel)
+ }
+
+ if slf.FinishLevel != "" {
+ db = db.Where("finish_level = ?", slf.FinishLevel)
+ }
+
+ if slf.BadSilkType != "" {
+ db = db.Where("bad_silk_type = ?", slf.BadSilkType)
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollProductionCarSearch) Create(record *PayrollProductionCar) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollProductionCarSearch) CreateBatch(records []*PayrollProductionCar) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollProductionCarSearch) Save(record *PayrollProductionCar) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollProductionCarSearch) SaveBatch(record []*PayrollProductionCar) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollProductionCarSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollProductionCarSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollProductionCarSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollProductionCar{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollProductionCarSearch) First() (*PayrollProductionCar, error) {
+ var (
+ record = new(PayrollProductionCar)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionCarSearch) Find() ([]*PayrollProductionCar, int64, error) {
+ var (
+ records = make([]*PayrollProductionCar, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollProductionCarSearch) FindNotTotal() ([]*PayrollProductionCar, error) {
+ var (
+ records = make([]*PayrollProductionCar, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionCarSearch) FindByQuery(query string, args []interface{}) ([]*PayrollProductionCar, int64, error) {
+ var (
+ records = make([]*PayrollProductionCar, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollProductionCarSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollProductionCar, error) {
+ var (
+ records = make([]*PayrollProductionCar, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
+
+// InitDefaultData 鍒濆鍖栨暟鎹�
+func (slf *PayrollProductionCarSearch) InitDefaultData() error {
+ var (
+ db = slf.Orm.Table(slf.TableName())
+ total int64 = 0
+ )
+ date := "2024-06"
+ if err := db.Where("cycle = ?", date).Count(&total).Error; err != nil {
+ return err
+ }
+ if total != 0 {
+ return nil
+ }
+ data := make([]*PayrollProductionCar, 0)
+
+ //workers, _ := NewWorkerSearch().FindNotTotal()
+ //
+ //for _, record := range workers {
+ // data = append(data, &PayrollProductionCar{
+ // Cycle: date,
+ // })
+ //}
+
+ err := slf.CreateBatch(data)
+ return err
+}
diff --git a/models/payroll_production_group.go b/models/payroll_production_group.go
new file mode 100644
index 0000000..03a5da8
--- /dev/null
+++ b/models/payroll_production_group.go
@@ -0,0 +1,290 @@
+package models
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/pkg/mysqlx"
+)
+
+type (
+ // PayrollProductionGroup 宸ヨ祫璁$畻-灏忕粍姣忓ぉ鐨勪骇閲忕粺璁�
+ PayrollProductionGroup struct {
+ BaseModelInt
+ Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:缁熻鍛ㄦ湡"` //缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ WorkshopNumber string `json:"workshopNumber" gorm:"size:50;not null;comment:杞﹂棿缂栧彿"` // 杞﹂棿缂栧彿
+ WorkshopName string `json:"workshopName" gorm:"size:50;comment:杞﹂棿鍚嶇О"` // 杞﹂棿鍚嶇О
+ GroupNumber int `json:"groupNumber" gorm:"size:11;not null;comment:缁勫埆"` // 缁勫埆
+
+ FallingSilkBucket decimal.Decimal `json:"fallingSilkBucket" gorm:"type:decimal(12,2);comment:钀戒笣妗舵暟"`
+ SilkQuantity decimal.Decimal `json:"silkQuantity" gorm:"type:decimal(12,4);comment:涓濋噺"` // 涓濋噺
+ SilkAvgQuantity decimal.Decimal `json:"silkAvgQuantity" gorm:"type:decimal(12,4);comment:浜哄钩鍧囦笣閲�"` // 浜哄钩鍧囦笣閲�
+ SilkTotalAmount decimal.Decimal `json:"silkTotalAmount" gorm:"type:decimal(12,4);comment:涓濋噺鎬讳环"` // 涓濋噺鎬讳环
+ SilkTotalAvgAmount decimal.Decimal `json:"silkTotalAvgAmount" gorm:"type:decimal(12,4);comment:涓濋噺浜哄钩鍧囨�讳环"` // 涓濋噺浜哄钩鍧囨�讳环
+ BadSilkQuantity decimal.Decimal `json:"badSilkQuantity" gorm:"type:decimal(12,4);comment:閲庣氦鏁伴噺"` // 閲庣氦鏁伴噺
+ BadSilkTotalAmount decimal.Decimal `json:"badSilkTotalAmount" gorm:"type:decimal(12,4);comment:閲庣氦鎬讳环"` // 閲庣氦鎬讳环
+ BadSilkTotalAvgAmount decimal.Decimal `json:"badSilkTotalAvgAmount" gorm:"type:decimal(12,4);comment:閲庣氦浜哄钩鍧囨�讳环"` // 閲庣氦浜哄钩鍧囨�讳环
+ FinishTotalAmount decimal.Decimal `json:"finishTotalAmount" gorm:"type:decimal(12,4);comment:鎴愬搧閲戦"` // 鎴愬搧閲戦
+ FinishTotalAvgAmount decimal.Decimal `json:"finishTotalAvgAmount" gorm:"type:decimal(12,4);comment:鎴愬搧浜哄钩鍧囬噾棰�"` // 鎴愬搧浜哄钩鍧囬噾棰�
+ }
+
+ PayrollProductionGroupSearch struct {
+ PayrollProductionGroup
+ Monthly string
+ Order string
+ PageNum int
+ PageSize int
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollProductionGroup) TableName() string {
+ return "silk_payroll_production_group"
+}
+
+// NewPayrollProductionGroupSearch 灏忕粍姣忓ぉ鐨勪骇閲忕粺璁�
+func NewPayrollProductionGroupSearch() *PayrollProductionGroupSearch {
+ return &PayrollProductionGroupSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollProductionGroupSearch) SetOrm(tx *gorm.DB) *PayrollProductionGroupSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetPage(page, size int) *PayrollProductionGroupSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetOrder(order string) *PayrollProductionGroupSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetID(id uint) *PayrollProductionGroupSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetCycle(cycle string) *PayrollProductionGroupSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetMonthly(monthly string) *PayrollProductionGroupSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetWorkshopNumber(workshopNumber string) *PayrollProductionGroupSearch {
+ slf.WorkshopNumber = workshopNumber
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) SetGroupNumber(groupNumber int) *PayrollProductionGroupSearch {
+ slf.GroupNumber = groupNumber
+ return slf
+}
+
+func (slf *PayrollProductionGroupSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkshopNumber != "" {
+ db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+ }
+
+ if slf.GroupNumber > 0 {
+ db = db.Where("group_number = ?", slf.GroupNumber)
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollProductionGroupSearch) Create(record *PayrollProductionGroup) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollProductionGroupSearch) CreateBatch(records []*PayrollProductionGroup) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollProductionGroupSearch) Save(record *PayrollProductionGroup) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollProductionGroupSearch) SaveBatch(record []*PayrollProductionGroup) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollProductionGroupSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollProductionGroupSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollProductionGroupSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollProductionGroup{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollProductionGroupSearch) First() (*PayrollProductionGroup, error) {
+ var (
+ record = new(PayrollProductionGroup)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionGroupSearch) Find() ([]*PayrollProductionGroup, int64, error) {
+ var (
+ records = make([]*PayrollProductionGroup, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollProductionGroupSearch) FindNotTotal() ([]*PayrollProductionGroup, error) {
+ var (
+ records = make([]*PayrollProductionGroup, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionGroupSearch) FindByQuery(query string, args []interface{}) ([]*PayrollProductionGroup, int64, error) {
+ var (
+ records = make([]*PayrollProductionGroup, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollProductionGroupSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollProductionGroup, error) {
+ var (
+ records = make([]*PayrollProductionGroup, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
diff --git a/models/payroll_production_weavers.go b/models/payroll_production_weavers.go
new file mode 100644
index 0000000..9698f75
--- /dev/null
+++ b/models/payroll_production_weavers.go
@@ -0,0 +1,322 @@
+package models
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/pkg/mysqlx"
+)
+
+type (
+ // PayrollProductionWeavers 宸ヨ祫璁$畻-鎸¤溅宸ユ瘡澶╃殑浜ч噺銆侀噾棰濈粺璁�
+ PayrollProductionWeavers struct {
+ BaseModelInt
+ Cycle string `json:"index;cycle" gorm:"size:20;not null;comment:缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�"` //缁熻鍛ㄦ湡
+ WorkTypeID uint `json:"workTypeID" gorm:"type:bigint(20);not null;comment:宸ョID"` //宸ョID
+ WorkType WorkTypeManage `json:"workType" gorm:"foreignKey:WorkTypeID;references:ID"`
+ WorkerID string `json:"workerId" gorm:"size:200;not null;comment:鍛樺伐ID"` //鍛樺伐ID
+ Worker Worker `json:"worker" gorm:"foreignKey:WorkerID;references:ID"`
+ WorkshopNumber string `json:"workshopNumber" gorm:"size:255;not null;comment:杞﹂棿缂栧彿"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber" gorm:"size:11;not null;comment:缁勫埆"` // 缁勫埆
+ CarNumbers string `json:"carNumbers" gorm:"size:255;not null;comment:杞﹀彴鍙�"` // 杞﹀彴鍙�
+
+ SilkQuantity decimal.Decimal `json:"silkQuantity" gorm:"type:decimal(12,4);comment:涓濋噺"` // 涓濋噺
+ SilkTotalAmount decimal.Decimal `json:"silkTotalAmount" gorm:"type:decimal(12,4);comment:涓濋噺鎬讳环"` // 涓濋噺鎬讳环
+ BadSilkQuantity decimal.Decimal `json:"badSilkQuantity" gorm:"type:decimal(12,4);comment:閲庣氦鏁伴噺"` // 閲庣氦鏁伴噺
+ BadSilkTotalAmount decimal.Decimal `json:"badSilkTotalAmount" gorm:"type:decimal(12,4);comment:閲庣氦鎬讳环"` // 閲庣氦鎬讳环
+ FinishTotalAmount decimal.Decimal `json:"finishTotalAmount" gorm:"type:decimal(12,4);comment:鎴愬搧閲戦"` // 鎴愬搧閲戦
+ }
+
+ PayrollProductionWeaversSearch struct {
+ PayrollProductionWeavers
+ Monthly string
+
+ Order string
+ PageNum int
+ PageSize int
+ Preload bool
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollProductionWeavers) TableName() string {
+ return "silk_payroll_production_employee"
+}
+
+// NewPayrollProductionWeaversSearch 鍛樺伐姣忓ぉ鐨勪骇閲忕粺璁�
+func NewPayrollProductionWeaversSearch() *PayrollProductionWeaversSearch {
+ return &PayrollProductionWeaversSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollProductionWeaversSearch) SetOrm(tx *gorm.DB) *PayrollProductionWeaversSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetPage(page, size int) *PayrollProductionWeaversSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetOrder(order string) *PayrollProductionWeaversSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetID(id uint) *PayrollProductionWeaversSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetCycle(cycle string) *PayrollProductionWeaversSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetMonthly(monthly string) *PayrollProductionWeaversSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetWorkTypeID(workTypeID uint) *PayrollProductionWeaversSearch {
+ slf.WorkTypeID = workTypeID
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetWorkerID(workerID string) *PayrollProductionWeaversSearch {
+ slf.WorkerID = workerID
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetWorkshopNumber(workshopNumber string) *PayrollProductionWeaversSearch {
+ slf.WorkshopNumber = workshopNumber
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetGroupNumber(groupNumber int) *PayrollProductionWeaversSearch {
+ slf.GroupNumber = groupNumber
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) SetCarNumbers(carNumbers string) *PayrollProductionWeaversSearch {
+ slf.CarNumbers = carNumbers
+ return slf
+}
+
+func (slf *PayrollProductionWeaversSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.Preload {
+ db = db.Model(&PayrollProductionWeavers{}).Preload("Worker")
+ }
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkTypeID > 0 {
+ db = db.Where("work_type_id = ?", slf.WorkTypeID)
+ }
+
+ if slf.WorkerID != "" {
+ db = db.Where("worker_id = ?", slf.WorkerID)
+ }
+
+ if slf.WorkshopNumber != "" {
+ db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+ }
+
+ if slf.GroupNumber > 0 {
+ db = db.Where("group_number = ?", slf.GroupNumber)
+ }
+
+ if slf.CarNumbers != "" {
+ db = db.Where("car_numbers like ?", "%"+slf.CarNumbers+"%")
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollProductionWeaversSearch) Create(record *PayrollProductionWeavers) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollProductionWeaversSearch) CreateBatch(records []*PayrollProductionWeavers) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollProductionWeaversSearch) Save(record *PayrollProductionWeavers) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollProductionWeaversSearch) SaveBatch(record []*PayrollProductionWeavers) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollProductionWeaversSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollProductionWeaversSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollProductionWeaversSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollProductionWeavers{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollProductionWeaversSearch) First() (*PayrollProductionWeavers, error) {
+ var (
+ record = new(PayrollProductionWeavers)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionWeaversSearch) Find() ([]*PayrollProductionWeavers, int64, error) {
+ var (
+ records = make([]*PayrollProductionWeavers, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollProductionWeaversSearch) FindNotTotal() ([]*PayrollProductionWeavers, error) {
+ var (
+ records = make([]*PayrollProductionWeavers, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollProductionWeaversSearch) FindByQuery(query string, args []interface{}) ([]*PayrollProductionWeavers, int64, error) {
+ var (
+ records = make([]*PayrollProductionWeavers, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollProductionWeaversSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollProductionWeavers, error) {
+ var (
+ records = make([]*PayrollProductionWeavers, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
diff --git a/models/payroll_salary_plan.go b/models/payroll_salary_plan.go
new file mode 100644
index 0000000..990672d
--- /dev/null
+++ b/models/payroll_salary_plan.go
@@ -0,0 +1,361 @@
+package models
+
+// 姣忔湀宸ヨ祫缁撶畻
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/constvar"
+ "silkserver/pkg/mysqlx"
+)
+
+type (
+ // PayrollSalaryPlan 姣忔湀宸ヨ祫缁撶畻
+ PayrollSalaryPlan struct {
+ BaseModelInt
+ Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:缁熻鍛ㄦ湡锛堟湀浠斤級"` //鏈堜唤
+ WorkerID string `json:"workerId" gorm:";type:varchar(191);not null;comment:鍛樺伐ID"` //鍛樺伐ID
+ Worker Worker `json:"worker" gorm:"foreignKey:WorkerID;references:ID"`
+ WorkerName string `json:"workerName" gorm:"index;type:varchar(191);comment:鍛樺伐濮撳悕"`
+ WorkTypeID uint `json:"workTypeID" gorm:"type:bigint(20);comment:宸ョID"` //宸ョID
+ WorkTypeCode constvar.JobType `json:"workTypeCode" gorm:"size:255;comment:宸ョ浠g爜"` //宸ョ浠g爜
+ WorkTypeName string `json:"workTypeName" gorm:"size:11;comment:宸ョ鍚嶇О"` //宸ョ鍚嶇О
+
+ Quantity decimal.Decimal `json:"quantity" gorm:"type:decimal(12,4);comment:浜ч噺"` // 浜ч噺
+ ProductionAmount decimal.Decimal `json:"productionAmount" gorm:"type:decimal(12,4);comment:鐢熶骇宸ヨ祫"` // 鐢熶骇宸ヨ祫
+ LongTermAmount decimal.Decimal `json:"longTermAmount" gorm:"type:decimal(12,4);comment:婊″嫟"` // 婊″嫟
+ TimeoutAmount decimal.Decimal `json:"timeoutAmount" gorm:"type:decimal(12,4);comment:瓒呮椂宸ヨ祫"` // 瓒呮椂宸ヨ祫
+ OvertimeAmount decimal.Decimal `json:"overtimeAmount" gorm:"type:decimal(12,4);comment:鍔犵彮宸ヨ祫"` // 鍔犵彮宸ヨ祫
+ TrafficAmount decimal.Decimal `json:"trafficAmount" gorm:"type:decimal(12,4);comment:浜ら�氳ˉ璐�"` // 浜ら�氳ˉ璐�
+ MasterApprenticeAmount decimal.Decimal `json:"masterApprenticeAmount" gorm:"type:decimal(12,4);comment:甯﹀緬琛ヨ创"` // 甯﹀緬琛ヨ创
+ PositionAmount decimal.Decimal `json:"positionAmount" gorm:"type:decimal(12,4);comment:宀椾綅琛ヨ创"` // 宀椾綅琛ヨ创
+ SocialSecurityAmount decimal.Decimal `json:"socialSecurityAmount" gorm:"type:decimal(12,4);comment:绀句繚琛ヨ创"` // 绀句繚琛ヨ创
+ SeniorityAmount decimal.Decimal `json:"seniorityAmount" gorm:"type:decimal(12,4);comment:宸ラ緞琛ヨ创"` // 宸ラ緞琛ヨ创
+ BaseSalaryAmount decimal.Decimal `json:"baseSalaryAmount" gorm:"type:decimal(12,4);comment:涓嶈揪淇濆簳"` // 涓嶈揪淇濆簳
+ QualityStandardsAmount decimal.Decimal `json:"qualityStandardsAmount" gorm:"type:decimal(12,4);comment:璐ㄩ噺濂�"` // 璐ㄩ噺濂�
+ SubstandardQualityAmount decimal.Decimal `json:"substandardQualityAmount" gorm:"type:decimal(12,4);comment:濂栫綒"` // 濂栫綒1
+ HeatAmount decimal.Decimal `json:"heatAmount" gorm:"type:decimal(12,4);comment:娓呭噳琛ヨ创"` // 濂栫綒2/娓呭噳琛ヨ创
+ DailyInspectionAmount decimal.Decimal `json:"dailyInspectionAmount" gorm:"type:decimal(12,4);comment:鏃ュ父妫�鏌�"` // 鏃ュ父妫�鏌�/濂栫綒3
+ DowntimeAmount decimal.Decimal `json:"downtimeAmount" gorm:"type:decimal(12,4);comment:鍋滄満琛ヨ创"` // 鍋滄満琛ヨ创
+ Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);comment:搴斿彂宸ヨ祫"` // 搴斿彂宸ヨ祫
+ Remark string `json:"remark" gorm:"type:varchar(500);comment:澶囨敞"` // 澶囨敞
+ }
+
+ PayrollSalaryPlanSearch struct {
+ PayrollSalaryPlan
+ Monthly string
+ Keyword string
+
+ Order string
+ PageNum int
+ PageSize int
+ Preload bool
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollSalaryPlan) TableName() string {
+ return "silk_payroll_salary_plan"
+}
+
+// NewPayrollSalaryPlanSearch 鍏跺畠琛ヨ创
+func NewPayrollSalaryPlanSearch() *PayrollSalaryPlanSearch {
+ return &PayrollSalaryPlanSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollSalaryPlanSearch) SetOrm(tx *gorm.DB) *PayrollSalaryPlanSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetPage(page, size int) *PayrollSalaryPlanSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetOrder(order string) *PayrollSalaryPlanSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetID(id uint) *PayrollSalaryPlanSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetCycle(cycle string) *PayrollSalaryPlanSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetMonthly(monthly string) *PayrollSalaryPlanSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetWorkTypeID(workTypeID uint) *PayrollSalaryPlanSearch {
+ slf.WorkTypeID = workTypeID
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetWorkerID(workerID string) *PayrollSalaryPlanSearch {
+ slf.WorkerID = workerID
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetWorkTypeCode(workTypeCode constvar.JobType) *PayrollSalaryPlanSearch {
+ slf.WorkTypeCode = workTypeCode
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) SetKeyword(keyword string) *PayrollSalaryPlanSearch {
+ slf.Keyword = keyword
+ return slf
+}
+
+func (slf *PayrollSalaryPlanSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.Preload {
+ db = db.Model(&PayrollSalaryPlan{}).Preload("Worker")
+ }
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkTypeID > 0 {
+ db = db.Where("work_type_id = ?", slf.WorkTypeID)
+ }
+
+ if slf.WorkerID != "" {
+ db = db.Where("worker_id = ?", slf.WorkerID)
+ }
+
+ if slf.WorkTypeCode != "" {
+ db = db.Where("work_type_code = ?", slf.WorkTypeCode)
+ }
+
+ if slf.Keyword != "" {
+ str := "%" + slf.Keyword + "%"
+ db = db.Where("worker_name like ? or work_type_name like ? or remark like ?", str, str, str)
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollSalaryPlanSearch) Create(record *PayrollSalaryPlan) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollSalaryPlanSearch) CreateBatch(records []*PayrollSalaryPlan) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollSalaryPlanSearch) Save(record *PayrollSalaryPlan) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollSalaryPlanSearch) SaveBatch(record []*PayrollSalaryPlan) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollSalaryPlanSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollSalaryPlanSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollSalaryPlanSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollSalaryPlan{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollSalaryPlanSearch) First() (*PayrollSalaryPlan, error) {
+ var (
+ record = new(PayrollSalaryPlan)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollSalaryPlanSearch) Find() ([]*PayrollSalaryPlan, int64, error) {
+ var (
+ records = make([]*PayrollSalaryPlan, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollSalaryPlanSearch) FindNotTotal() ([]*PayrollSalaryPlan, error) {
+ var (
+ records = make([]*PayrollSalaryPlan, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollSalaryPlanSearch) FindByQuery(query string, args []interface{}) ([]*PayrollSalaryPlan, int64, error) {
+ var (
+ records = make([]*PayrollSalaryPlan, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollSalaryPlanSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollSalaryPlan, error) {
+ var (
+ records = make([]*PayrollSalaryPlan, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
+
+// InitDefaultData 鍒濆鍖栨暟鎹�
+func (slf *PayrollSalaryPlanSearch) InitDefaultData() error {
+ /*var (
+ db = slf.Orm.Table(slf.TableName())
+ total int64 = 0
+ )
+ date := "2024-06"
+ if err := db.Where("cycle = ?", date).Count(&total).Error; err != nil {
+ return err
+ }
+ if total != 0 {return nil}
+ data := make([]*PayrollSalaryPlan, 0)
+ workers, _ := NewWorkerSearch().FindNotTotal()
+ for _, record := range workers {
+ r := rand.Intn(10)
+ data = append(data, &PayrollSalaryPlan{
+ Cycle: date,
+ WorkerID: record.ID,
+ WorkerName: record.Name,
+ WorkTypeID: uint(r + 1),
+ WorkTypeCode: constvar.JobTypeArr[r],
+ WorkTypeName: constvar.JobTypeMap[constvar.JobTypeArr[r]],
+ Remark: "娴嬭瘯鏁版嵁",
+ })
+ }
+ err := slf.CreateBatch(data)
+ if err != nil {return err}*/
+
+ return nil
+}
diff --git a/models/payroll_working_hours.go b/models/payroll_working_hours.go
new file mode 100644
index 0000000..d9f04da
--- /dev/null
+++ b/models/payroll_working_hours.go
@@ -0,0 +1,323 @@
+package models
+
+import (
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/constvar"
+ "silkserver/pkg/mysqlx"
+)
+
+// 宸ユ椂缁熻
+type (
+ // PayrollWorkingHours 宸ヨ祫璁$畻-鍛樺伐鐨勫伐鏃剁粺璁�
+ PayrollWorkingHours struct {
+ BaseModelInt
+ Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�"` //缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ WorkTypeID uint `json:"workTypeID" gorm:"type:bigint(20);not null;comment:宸ョID"` //宸ョID
+ WorkTypeCode constvar.JobType `json:"workTypeCode" gorm:"size:255;not null;comment:宸ョ缂栫爜"` //宸ョ缂栫爜
+ WorkType WorkTypeManage `json:"workType" gorm:"foreignKey:WorkTypeID;references:ID"`
+ WorkerID string `json:"workerId" gorm:"size:200;not null;comment:鍛樺伐ID"` //鍛樺伐ID
+ Worker Worker `json:"worker" gorm:"foreignKey:WorkerID;references:ID"`
+ WorkshopId uint `json:"workshopId" gorm:"size:11;comment:杞﹂棿ID"` // 杞﹂棿ID
+ WorkshopNumber string `json:"workshopNumber" gorm:"size:255;not null;comment:杞﹂棿缂栧彿"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber" gorm:"size:11;not null;comment:缁勫埆"` // 缁勫埆
+ StartCarNumber int `json:"startCarNumbers" gorm:"size:11;comment:杞﹀彴鍙峰紑濮�"` // 杞﹀彴鍙峰垪琛�
+ EndCarNumber int `json:"endCarNumbers" gorm:"size:11;comment:杞﹀彴鍙风粨鏉�"` // 杞﹀彴鍙峰垪琛�
+ ShiftTime string `json:"shiftStartTime" gorm:"size:100;comment:鐝鏃堕棿娈�" ` // 鐝鏃堕棿娈�
+ ShiftCrossDay bool `json:"shiftCrossDay" gorm:"size:1;comment:鏄惁涓鸿法澶╃彮娆�" ` // 鏄惁涓鸿法澶╃彮娆�
+ ShiftClockInTime string `json:"shiftClockInTime" gorm:"size:50;comment:涓婄彮鎵撳崱鏃堕棿" ` // 涓婄彮鎵撳崱鏃堕棿
+ ShiftClockOutTime string `json:"shiftClockOutTime" gorm:"size:50;comment:涓嬬彮鎵撳崱鏃堕棿" ` // 涓嬬彮鎵撳崱鏃堕棿
+ OvertimeType constvar.ShiftOvertimeType `json:"overtimeType" gorm:"size:50;comment:鍔犵彮绫诲瀷" ` // 鍔犵彮绫诲瀷
+ OvertimeDuration decimal.Decimal `json:"overtimeDuration" gorm:"type:decimal(12,4);comment:鍔犵彮鏃堕暱" ` // 鍔犵彮鏃堕暱
+ OvertimePay decimal.Decimal `json:"overtimePay" gorm:"type:decimal(12,4);comment:鍔犵彮宸ヨ祫"` // 鍔犵彮宸ヨ祫
+ }
+
+ PayrollWorkingHoursSearch struct {
+ PayrollWorkingHours
+ Monthly string
+ Order string
+ PageNum int
+ PageSize int
+ Preload bool
+ Orm *gorm.DB
+ }
+)
+
+func (slf PayrollWorkingHours) TableName() string {
+ return "silk_payroll_working_hours"
+}
+
+// NewPayrollWorkingHoursSearch 鍛樺伐鐨勫伐鏃剁粺璁�
+func NewPayrollWorkingHoursSearch() *PayrollWorkingHoursSearch {
+ return &PayrollWorkingHoursSearch{Orm: mysqlx.GetDB()}
+}
+
+func (slf *PayrollWorkingHoursSearch) SetOrm(tx *gorm.DB) *PayrollWorkingHoursSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetPage(page, size int) *PayrollWorkingHoursSearch {
+ slf.PageNum, slf.PageSize = page, size
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetOrder(order string) *PayrollWorkingHoursSearch {
+ slf.Order = order
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetID(id uint) *PayrollWorkingHoursSearch {
+ slf.ID = id
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetCycle(cycle string) *PayrollWorkingHoursSearch {
+ slf.Cycle = cycle
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetMonthly(monthly string) *PayrollWorkingHoursSearch {
+ slf.Monthly = monthly
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetWorkTypeID(workTypeID uint) *PayrollWorkingHoursSearch {
+ slf.WorkTypeID = workTypeID
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetWorkTypeCode(workTypeCode constvar.JobType) *PayrollWorkingHoursSearch {
+ slf.WorkTypeCode = workTypeCode
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetWorkerID(workerID string) *PayrollWorkingHoursSearch {
+ slf.WorkerID = workerID
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetWorkshopNumber(workshopNumber string) *PayrollWorkingHoursSearch {
+ slf.WorkshopNumber = workshopNumber
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) SetGroupNumber(groupNumber int) *PayrollWorkingHoursSearch {
+ slf.GroupNumber = groupNumber
+ return slf
+}
+
+func (slf *PayrollWorkingHoursSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.Preload {
+ db = db.Model(&PayrollWorkingHours{}).Preload("Worker").Preload("WorkTypeManage")
+ }
+
+ if slf.ID > 0 {
+ db = db.Where("id = ?", slf.ID)
+ }
+
+ if slf.Cycle != "" {
+ db = db.Where("cycle = ?", slf.Cycle)
+ }
+
+ if slf.Monthly != "" {
+ db = db.Where("cycle like ?", slf.Monthly+"%")
+ }
+
+ if slf.WorkTypeID > 0 {
+ db = db.Where("work_type_id = ?", slf.WorkTypeID)
+ }
+
+ if slf.WorkerID != "" {
+ db = db.Where("worker_id = ?", slf.WorkerID)
+ }
+
+ if slf.WorkshopNumber != "" {
+ db = db.Where("workshop_number = ?", slf.WorkshopNumber)
+ }
+
+ if slf.GroupNumber > 0 {
+ db = db.Where("group_number = ?", slf.GroupNumber)
+ }
+
+ db.Where("1 = 1")
+ if slf.Order != "" {
+ db = db.Order(slf.Order)
+ }
+
+ return db
+}
+
+// Create 鍗曟潯鎻掑叆
+func (slf *PayrollWorkingHoursSearch) Create(record *PayrollWorkingHours) error {
+ var db = slf.build()
+
+ if err := db.Create(record).Error; err != nil {
+ return fmt.Errorf("create err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// CreateBatch 鎵归噺鎻掑叆
+func (slf *PayrollWorkingHoursSearch) CreateBatch(records []*PayrollWorkingHours) error {
+ var db = slf.build()
+
+ if err := db.Create(&records).Error; err != nil {
+ return fmt.Errorf("create batch err: %v, records: %+v", err, records)
+ }
+
+ return nil
+}
+
+// Save 鍗曟潯鏇存柊
+func (slf *PayrollWorkingHoursSearch) Save(record *PayrollWorkingHours) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// SaveBatch 鎵归噺鏇存柊
+func (slf *PayrollWorkingHoursSearch) SaveBatch(record []*PayrollWorkingHours) error {
+ var db = slf.build()
+
+ if err := db.Omit("CreatedAt").Save(record).Error; err != nil {
+ return fmt.Errorf("save err: %v, record: %+v", err, record)
+ }
+
+ return nil
+}
+
+// UpdateByMap 鍗曟潯鏇存柊
+func (slf *PayrollWorkingHoursSearch) UpdateByMap(upMap map[string]interface{}) error {
+ var (
+ db = slf.build()
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by map err: %v, upMap: %+v", err, upMap)
+ }
+
+ return nil
+}
+
+// UpdateByQuery 鎵归噺鏇存柊
+func (slf *PayrollWorkingHoursSearch) UpdateByQuery(query string, args []interface{}, upMap map[string]interface{}) error {
+ var (
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Updates(upMap).Error; err != nil {
+ return fmt.Errorf("update by query err: %v, query: %s, args: %+v, upMap: %+v", err, query, args, upMap)
+ }
+
+ return nil
+}
+
+// Delete 鍒犻櫎
+func (slf *PayrollWorkingHoursSearch) Delete() error {
+ var db = slf.build()
+
+ if err := db.Unscoped().Delete(&PayrollWorkingHours{}).Error; err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// First 鏍规嵁鏉′欢鏌ヨ涓�鏉¤褰�
+func (slf *PayrollWorkingHoursSearch) First() (*PayrollWorkingHours, error) {
+ var (
+ record = new(PayrollWorkingHours)
+ db = slf.build()
+ )
+
+ if err := db.First(record).Error; err != nil {
+ return record, err
+ }
+
+ return record, nil
+}
+
+// Find 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollWorkingHoursSearch) Find() ([]*PayrollWorkingHours, int64, error) {
+ var (
+ records = make([]*PayrollWorkingHours, 0)
+ total int64
+ db = slf.build()
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, total, nil
+}
+
+// FindNotTotal 鎸囧畾鏉′欢鏌ヨ
+func (slf *PayrollWorkingHoursSearch) FindNotTotal() ([]*PayrollWorkingHours, error) {
+ var (
+ records = make([]*PayrollWorkingHours, 0)
+ db = slf.build()
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
+
+// FindByQuery 鎸囧畾鏉′欢鏌ヨ锛堝寘鍚�绘潯鏁帮級
+func (slf *PayrollWorkingHoursSearch) FindByQuery(query string, args []interface{}) ([]*PayrollWorkingHours, int64, error) {
+ var (
+ records = make([]*PayrollWorkingHours, 0)
+ total int64
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if err := db.Count(&total).Error; err != nil {
+ return records, total, fmt.Errorf("find by query count err: %v", err)
+ }
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, total, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, total, nil
+}
+
+// FindByQueryNotTotal 鎸囧畾鏉′欢鏌ヨ&涓嶆煡璇㈡�绘潯鏁�.
+func (slf *PayrollWorkingHoursSearch) FindByQueryNotTotal(query string, args []interface{}) ([]*PayrollWorkingHours, error) {
+ var (
+ records = make([]*PayrollWorkingHours, 0)
+ db = slf.Orm.Table(slf.TableName()).Where(query, args...)
+ )
+
+ if slf.PageNum*slf.PageSize > 0 {
+ db = db.Offset((slf.PageNum - 1) * slf.PageSize).Limit(slf.PageSize)
+ }
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find by query records err: %v, query: %s, args: %+v", err, query, args)
+ }
+
+ return records, nil
+}
diff --git a/router/router.go b/router/router.go
index 7789777..b4fa13b 100644
--- a/router/router.go
+++ b/router/router.go
@@ -96,11 +96,14 @@
salaryApi := r.Group(urlPrefix + "/salary")
salaryPlanController := new(controllers.SalaryPlanController)
{
- salaryApi.POST("saveSalaryPlan", salaryPlanController.SaveSalaryPlan) //淇濆瓨钖叕鏂规
- salaryApi.POST("getSalaryPlanList", salaryPlanController.GetSalaryPlanList) //鑾峰彇钖叕鏂规鍒楄〃
- salaryApi.DELETE("deleteSalaryPlanInfo/:id", salaryPlanController.DeleteSalaryPlanInfo) //鍒犻櫎钖叕鏂规
- salaryApi.GET("getSalaryTypeList/:type", salaryPlanController.GetSalaryTypeList) //鑾峰彇钖祫绫诲瀷鍒楄〃
- salaryApi.POST("saveSalaryType", salaryPlanController.SaveSalaryType) //淇濆瓨钖祫绫诲瀷
+ salaryApi.POST("saveSalaryPlan", salaryPlanController.SaveSalaryPlan) //淇濆瓨钖叕鏂规
+ salaryApi.POST("getSalaryPlanList", salaryPlanController.GetSalaryPlanList) //鑾峰彇钖叕鏂规鍒楄〃
+ salaryApi.DELETE("deleteSalaryPlanInfo/:id", salaryPlanController.DeleteSalaryPlanInfo) //鍒犻櫎钖叕鏂规
+ salaryApi.GET("getSalaryTypeList/:type", salaryPlanController.GetSalaryTypeList) //鑾峰彇钖祫绫诲瀷鍒楄〃
+ salaryApi.POST("saveSalaryType", salaryPlanController.SaveSalaryType) //淇濆瓨钖祫绫诲瀷
+ salaryApi.GET("getPayrollProductionCarList", salaryPlanController.GetPayrollProductionCarList) //鑾峰彇杞﹀彴姣忓ぉ鐨勪骇閲忓垪琛�
+ salaryApi.GET("getPayrollProductionGroupList", salaryPlanController.GetPayrollProductionGroupList) //鑾峰彇灏忕粍姣忓ぉ鐨勪骇閲忓垪琛�
+ salaryApi.GET("getPayrollSalaryPlanList", salaryPlanController.GetPayrollSalaryPlanList) //鑾峰彇浜哄憳姣忔湀鐨勮柂璧勫垪琛�
}
//鑰冨嫟绠$悊
diff --git a/service/salary_plan.go b/service/salary_plan.go
new file mode 100644
index 0000000..df0f491
--- /dev/null
+++ b/service/salary_plan.go
@@ -0,0 +1,499 @@
+package service
+
+import (
+ "errors"
+ "fmt"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+ "silkserver/constvar"
+ "silkserver/models"
+ "strconv"
+ "strings"
+)
+
+type WeaversAmount struct {
+ WorkerID string `json:"workerID"`
+ Amount decimal.Decimal `json:"amount"`
+}
+
+// 钖祫璁$畻
+// 绾ゅ害鐧昏锛歴ilk_fineness_register silk_fineness_register_item
+// 绾ゅ害妫�楠岋細silk_fineness_check silk_fineness_check_item
+// 浜ч噺鐧昏鐧昏锛歴ilk_yield_register_circle
+
+// WorkingHours 瀛樿〃锛氬伐鏃惰绠楋紙鏃ユ湡锛堝勾鏈堟棩锛夈�佸伐绉嶃�佸憳宸ュ鍚嶃�佸皬缁勩�佽溅鍙般�佷骇閲忓伐璧勩�佷笂鐝秴鏃讹紙灏忔椂锛夈�佷笂鐝秴鏃讹紙澶╋級銆佸姞鐝紙鍗曠嫭锛夈�佸姞鐝紙鍏ㄨ溅闂达級銆佸嚭鍕わ紙澶╋級銆佸甫寰掞紙澶╋級銆佷骇閲忥紙KG锛夈�佸叾瀹冿級
+func WorkingHours(date string) error {
+ // 浜哄憳淇℃伅
+ workers, err := models.NewWorkerSearch().FindNotTotal()
+ if err != nil {
+ return err
+ }
+
+ // 鎺掔彮淇℃伅(鍔熻兘缂哄け)
+ // 鎵撳崱淇℃伅锛堥�氳繃浜哄憳鍏宠仈锛�
+ attendances, err := models.NewAttendanceManageSearch().SetDate(date).FindNotTotal()
+
+ // 杞﹀彴淇℃伅锛堥�氳繃浜哄憳鍏宠仈锛�
+ workerPositions, err := models.NewWorkerPositionSearch().SetOverlappingDate(date, date).FindAll()
+
+ list := make([]*models.PayrollWorkingHours, 0)
+ for _, worker := range workers {
+ workingHours := models.PayrollWorkingHours{
+ Cycle: date,
+ WorkTypeID: worker.WorkTypeId,
+ WorkTypeCode: worker.WorkTypeCode,
+ WorkerID: worker.ID,
+ }
+
+ for _, attendance := range attendances {
+ if worker.ID == attendance.WorkerId {
+ workingHours.ShiftTime = fmt.Sprintf("%v-%v", attendance.ClassesStartTime, attendance.ClassesEndTime)
+ if attendance.ClassesStartTime != "" && attendance.ClassesEndTime != "" {
+ startH, _ := strconv.Atoi(strings.Split(attendance.ClassesStartTime, ":")[0])
+ endH, _ := strconv.Atoi(strings.Split(attendance.ClassesEndTime, ":")[0])
+ if startH > endH {
+ workingHours.ShiftCrossDay = true
+ }
+ }
+ workingHours.ShiftClockInTime = attendance.StartWorkTime
+ workingHours.ShiftClockOutTime = attendance.EndWorkTime
+ workingHours.OvertimeType = constvar.ShiftOvertimeTypeTimeout
+ workingHours.OvertimeDuration = attendance.OverTimeDuration
+ }
+ }
+ for _, position := range workerPositions {
+ if worker.ID == position.WorkerId {
+ //workingHours.WorkshopId = position.Workshop
+ workingHours.WorkshopNumber = position.Workshop
+ workingHours.GroupNumber = position.WorkshopGroup
+ //workingHours.CarNumbers = fmt.Sprintf("%v-%v", position.StartWorkerPosition, position.EndWorkerPosition)
+ workingHours.StartCarNumber = position.StartWorkerPosition
+ workingHours.EndCarNumber = position.EndWorkerPosition
+ continue
+ }
+ }
+
+ list = append(list, &workingHours)
+ }
+
+ err = models.WithTransaction(func(db *gorm.DB) error {
+
+ models.NewPayrollWorkingHoursSearch().SetOrm(db).SetCycle(date).Delete()
+
+ models.NewPayrollWorkingHoursSearch().SetOrm(db).CreateBatch(list)
+ return nil
+ })
+
+ return nil
+}
+
+// ProductionCar 瀛樿〃锛氳溅鍙版瘡鏃ヤ骇閲忕粺璁� 锛堟棩鏈燂紙骞存湀鏃ワ級銆佽溅闂淬�佽溅鍙般�佸簞鍙c�佹湡鏈涚瓑绾с�佹垚鍝佺瓑绾с�佷笣閲忋�佷笣鍗曚环锛坖son锛夈�侀噹绾ゃ�侀噹绾ゅ崟浠凤紙json锛夈�佷笣閲忛噾棰濄�侀噹绾ら噾棰濄�佹垚鍝侀噾棰�(涓濋噺閲戦-閲庣氦閲戦)锛�
+func ProductionCar(date string) error {
+ yieldRegisters, err := models.NewYieldRegisterSearch().SetCreateTime(date).FindNotTotal() // 浜ч噺鐧昏
+ if err != nil {
+ return err
+ }
+ finenesss, err := models.NewFinenessRegisterSearch().SetFinishDate(date).FindAll() // 绾ゅ害鐧昏
+ if err != nil {
+ return err
+ }
+ finenessIds := make([]uint, len(finenesss))
+ for i, fineness := range finenesss {
+ finenessIds[i] = fineness.ID
+ }
+ finenessChecks, err := models.NewFinenessCheckSearch().SetFinenessRegisterIDs(finenessIds).FindAll() // 绾ゅ害妫�楠�
+ if err != nil {
+ return err
+ }
+
+ priceStandards, _ := models.NewRawSilkPriceStandardSearch().FindNotTotal() // 鐢熶笣瀹氫环
+ priceStandardMap := make(map[string]decimal.Decimal) // map[搴勫彛\鏍囧彿]瀹氫环
+ for _, price := range priceStandards {
+ key := fmt.Sprintf("%d%s", price.MarketNumber, price.RawSilkGrade)
+ priceStandardMap[key] = price.PayStandard
+ }
+
+ workingHours, err := models.NewPayrollWorkingHoursSearch().SetWorkTypeCode(constvar.JobTypeWeavers).SetCycle(date).FindNotTotal() // 鍛樺伐鐨勫伐鏃剁粺璁�
+ if err != nil {
+ return err
+ }
+
+ // 杞﹀彴鎸¤溅宸ラ噸澶嶄汉鍛樻爣璁�
+ carEmployeeMap := make(map[string]map[string]bool) // map[杞﹂棿\缁勫埆\杞﹀彿]map[浜哄憳]true
+ for _, yield := range yieldRegisters {
+ for _, workingHour := range workingHours {
+ if yield.WorkshopNumber == workingHour.WorkshopNumber && yield.GroupNumber == workingHour.GroupNumber {
+ for _, circle := range yield.Circles {
+ if circle.CarNumber >= workingHour.StartCarNumber && circle.CarNumber <= workingHour.EndCarNumber {
+ key := fmt.Sprintf("%v%v%v", workingHour.WorkshopNumber, workingHour.GroupNumber, circle.CarNumber)
+ tempMap := carEmployeeMap[key]
+ tempMap[workingHour.WorkerID] = true
+ carEmployeeMap[key] = tempMap
+ }
+ }
+ }
+ }
+ }
+
+ productionCar := make([]*models.PayrollProductionCar, 0)
+ for _, yield := range yieldRegisters {
+ info := models.PayrollProductionCar{
+ Cycle: date,
+ WorkshopNumber: yield.WorkshopNumber,
+ GroupNumber: yield.GroupNumber,
+ MarketId: yield.MarketId,
+ MarketNumber: yield.MarketNumber,
+ MarketName: yield.MarketName,
+ FallingSilkBucket: yield.FallingSilkBucketOne.Add(yield.FallingSilkBucketTwo).Add(yield.FallingSilkBucketThree),
+ Spec: yield.Spec,
+ CarWorkQuantity: 1,
+ }
+
+ for _, check := range finenessChecks {
+ // 搴勫彛銆佽溅闂淬�佺粍鍒�
+ if yield.MarketId == check.FinenessRegister.MarketId &&
+ yield.WorkshopNumber == check.FinenessRegister.WorkshopNumber &&
+ yield.GroupNumber == check.FinenessRegister.WorkshopGroup {
+
+ info.FinishLevel = check.FinenessGrade
+
+ key := fmt.Sprintf("%v%v", info.MarketNumber, info.FinishLevel)
+ if payStandard, ok := priceStandardMap[key]; ok {
+ info.SilkUnitAmount = payStandard
+ }
+ continue
+ }
+ }
+
+ silkQuantityMap := make(map[int]decimal.Decimal) // map[杞﹀彿]鏁伴噺 涓濋噺
+ for _, circle := range yield.Circles {
+ if yield.ID == circle.YieldRegisterId {
+ silkQuantityMap[circle.CarNumber] = silkQuantityMap[circle.CarNumber].Add(circle.Value)
+ }
+ }
+
+ // 閲庣氦缁熻
+ badSilkQuantityMap := make(map[int]map[string]int) // map[杞﹀彿]map[绾ゅ害绛夌骇]鏁伴噺
+ for _, check := range finenessChecks {
+ if yield.MarketId == check.FinenessRegister.MarketId &&
+ yield.WorkshopNumber == check.FinenessRegister.WorkshopNumber &&
+ yield.GroupNumber == check.FinenessRegister.WorkshopGroup {
+
+ if strings.Contains(check.FinenessGrade, "閲�") {
+ temp := badSilkQuantityMap[check.FinenessRegister.Position]
+ temp[check.FinenessGrade] = temp[check.FinenessGrade] + 1
+ badSilkQuantityMap[check.FinenessRegister.Position] = temp
+ }
+ }
+ }
+
+ for carNumber := range silkQuantityMap {
+ result := info
+ result.CarNumber = carNumber
+ // 涓�杞﹀浜猴紝绠楀钩鍧�
+ key := fmt.Sprintf("%v%v%v", yield.WorkshopNumber, yield.GroupNumber, carNumber)
+ if workIdMap, ok := carEmployeeMap[key]; ok {
+ result.CarWorkQuantity = len(workIdMap)
+ for workId := range workIdMap {
+ result.CarWorkIds += workId + ","
+ }
+ }
+ // 閲庣氦
+ if bad, ok := badSilkQuantityMap[carNumber]; ok {
+ quantityTmp := 0
+ totalAmount := decimal.NewFromInt32(0)
+ for s := range bad {
+ quantityTmp = quantityTmp + bad[s]
+ for _, price := range priceStandards {
+ if price.MarketId == result.MarketId && price.RawSilkGrade == s {
+ result.BadSilkUnitAmount = price.PayStandard
+ totalAmount = totalAmount.Add(result.BadSilkUnitAmount.Mul(decimal.NewFromInt32(int32(bad[s]))))
+ continue
+ }
+ }
+ result.BadSilkType += s + ","
+ }
+
+ result.BadSilkQuantity = decimal.NewFromInt32(int32(quantityTmp))
+ result.BadSilkAvgQuantity = result.BadSilkQuantity.Div(decimal.NewFromInt32(int32(result.CarWorkQuantity)))
+ result.BadSilkTotalAmount = totalAmount
+ result.BadSilkTotalAvgAmount = totalAmount.Div(decimal.NewFromInt32(int32(result.CarWorkQuantity)))
+ }
+ result.SilkQuantity = silkQuantityMap[carNumber]
+ result.SilkAvgQuantity = result.SilkQuantity.Div(decimal.NewFromInt32(int32(result.CarWorkQuantity)))
+ result.SilkTotalAmount = result.SilkQuantity.Mul(result.SilkUnitAmount)
+ result.SilkTotalAvgAmount = result.SilkQuantity.Mul(result.SilkUnitAmount).Div(decimal.NewFromInt32(int32(result.CarWorkQuantity)))
+ result.FinishTotalAmount = result.SilkTotalAmount.Sub(result.BadSilkTotalAmount)
+
+ productionCar = append(productionCar, &result)
+ }
+
+ }
+ err = models.WithTransaction(func(db *gorm.DB) error {
+ err := models.NewPayrollProductionCarSearch().SetOrm(db).SetCycle(date).Delete()
+ if err != nil {
+ return err
+ }
+ err = models.NewPayrollProductionCarSearch().SetOrm(db).CreateBatch(productionCar)
+ if err != nil {
+ return err
+ }
+ return nil
+ })
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// ProductionGroup 瀛樿〃锛氬皬缁勬瘡澶╃殑浜ч噺鐧昏
+func ProductionGroup(date string) error {
+ productionCars, err := models.NewPayrollProductionCarSearch().SetOrder("workshop_number, group_number").
+ SetCycle(date).FindNotTotal() // 杞﹀彴姣忓ぉ鐨勪骇閲忕粺璁�
+ if err != nil {
+ return err
+ }
+
+ productionGroupList := make([]*models.PayrollProductionGroup, 0)
+ var counter int
+ for i := 0; i < len(productionCars); i++ {
+ counter = 0
+ silkQuantity := decimal.NewFromInt32(0)
+ silkAvgQuantity := decimal.NewFromInt32(0)
+ silkTotalAmount := decimal.NewFromInt32(0)
+ silkTotalAvgAmount := decimal.NewFromInt32(0)
+ badSilkQuantity := decimal.NewFromInt32(0)
+ badSilkTotalAmount := decimal.NewFromInt32(0)
+ badSilkTotalAvgAmount := decimal.NewFromInt32(0)
+ finishTotalAmount := decimal.NewFromInt32(0)
+ finishTotalAvgAmount := decimal.NewFromInt32(0)
+ fallingSilkBucket := decimal.NewFromInt32(0)
+
+ for j := i; j < len(productionCars); j++ {
+ if productionCars[i].WorkshopNumber == productionCars[j].WorkshopNumber &&
+ productionCars[i].GroupNumber == productionGroupList[j].GroupNumber {
+ // 涓�杞﹀浜猴紝绠楀钩鍧�
+ //population := decimal.NewFromInt32(int32(productionCars[j].CarWorkQuantity))
+ silkQuantity = silkQuantity.Add(productionCars[j].SilkQuantity)
+ silkAvgQuantity = silkAvgQuantity.Add(productionCars[j].SilkAvgQuantity)
+ silkTotalAmount = silkTotalAmount.Add(productionCars[j].SilkTotalAmount)
+ silkTotalAvgAmount = silkTotalAvgAmount.Add(productionCars[j].SilkTotalAvgAmount)
+ badSilkQuantity = badSilkQuantity.Add(productionCars[j].BadSilkQuantity)
+ badSilkTotalAmount = badSilkTotalAmount.Add(productionCars[j].BadSilkTotalAmount)
+ badSilkTotalAvgAmount = badSilkTotalAvgAmount.Add(productionCars[j].BadSilkTotalAvgAmount)
+ finishTotalAmount = finishTotalAmount.Add(productionCars[j].FinishTotalAmount)
+ finishTotalAvgAmount = finishTotalAvgAmount.Add(productionCars[j].FinishTotalAvgAmount)
+ fallingSilkBucket = fallingSilkBucket.Add(productionCars[j].FallingSilkBucket)
+
+ counter += 1
+ // 璺宠繃閲嶅椤�
+ if i != j {
+ i += 1
+ }
+ }
+
+ }
+ counterD := decimal.NewFromInt32(int32(counter))
+ productionGroupList = append(productionGroupList, &models.PayrollProductionGroup{
+ Cycle: date,
+ WorkshopNumber: productionCars[i].WorkshopNumber,
+ GroupNumber: productionCars[i].GroupNumber,
+ FallingSilkBucket: fallingSilkBucket,
+ SilkQuantity: silkQuantity,
+ SilkAvgQuantity: silkAvgQuantity.Div(counterD),
+ SilkTotalAmount: silkTotalAmount,
+ SilkTotalAvgAmount: silkTotalAmount.Div(counterD),
+ BadSilkQuantity: badSilkQuantity,
+ BadSilkTotalAmount: badSilkTotalAmount,
+ BadSilkTotalAvgAmount: badSilkTotalAmount.Div(counterD),
+ FinishTotalAmount: finishTotalAmount,
+ FinishTotalAvgAmount: finishTotalAmount.Div(counterD),
+ })
+ }
+
+ err = models.WithTransaction(func(db *gorm.DB) error {
+ err := models.NewPayrollProductionGroupSearch().SetOrm(db).SetCycle(date).Delete()
+ if err != nil {
+ return err
+ }
+ err = models.NewPayrollProductionGroupSearch().SetOrm(db).CreateBatch(productionGroupList)
+ if err != nil {
+ return err
+ }
+ return nil
+ })
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// 鏍规嵁涓婃姤璁$畻锛�
+// 1銆佽溅鍙板綋鏈堝叏绛夌骇涓濇�婚噺锛�
+// 2銆佽溅鍙板綋鏈堝悇绛夌骇涓濇�婚噺锛�
+// 3銆佽溅鍙版瘡鏈堢瓑绾у崰姣�=杞﹀彴褰撴湀鍚勭瓑绾т笣鎬婚噺/杞﹀彴褰撴湀鍏ㄧ瓑绾т笣鎬婚噺锛�
+// 4銆佽溅鍙版瘡鏈堟瘡浜哄钩鍧囦笣閲�=杞﹀彴褰撴湀鍏ㄧ瓑绾т笣鎬婚噺/杞﹀彴鎸¤溅宸ヤ汉鏁帮紱
+// 5銆佽溅鍙板綋鏈堝叏閲庣氦鎵i櫎閲戦锛�
+// 6銆佽溅鍙版瘡鏈堟瘡浜哄钩鍧囬噹绾ゆ墸闄ら噾棰�=褰撴湀鍏ㄩ噹绾ゆ墸闄ら噾棰�/杞﹀彴鎸¤溅宸ヤ汉鏁帮紱
+// 7銆佽溅鍙版瘡鏈堜笣閲忔�婚噾棰�
+// 8銆佽溅鍙版瘡鏈堜笣閲忔垚鍝侀噾棰�
+// 9銆佽溅鍙版瘡鏈堟瘡浜哄钩鍧囦笣閲忛噾棰�=杞﹀彴姣忔湀涓濋噺鎴愬搧閲戦/杞﹀彴鎸¤溅宸ヤ汉鏁�
+
+// ProductionEmployee 瀛樿〃锛� 姣忎汉姣忓ぉ鐨勪骇閲忕粺璁$櫥璁�
+func ProductionWeavers(date string) error {
+ workingHours, err := models.NewPayrollWorkingHoursSearch().SetWorkTypeCode(constvar.JobTypeWeavers).SetCycle(date).FindNotTotal() // 鍛樺伐鐨勫伐鏃剁粺璁�
+ if err != nil {
+ return err
+ }
+
+ productionCars, err := models.NewPayrollProductionCarSearch().SetCycle(date).FindNotTotal()
+ if err != nil {
+ return err
+ }
+
+ productionEmployee := make([]*models.PayrollProductionWeavers, 0)
+ for _, worker := range workingHours {
+ info := models.PayrollProductionWeavers{
+ Cycle: date,
+ WorkTypeID: worker.WorkTypeID,
+ WorkerID: worker.WorkerID,
+ WorkshopNumber: worker.WorkshopNumber,
+ GroupNumber: worker.GroupNumber,
+ }
+ for _, car := range productionCars {
+ if car.WorkshopNumber == worker.WorkshopNumber && car.GroupNumber == worker.GroupNumber &&
+ car.CarNumber >= worker.StartCarNumber && car.CarNumber <= worker.EndCarNumber {
+ info.CarNumbers += fmt.Sprintf("%d,", car.CarNumber)
+ info.SilkQuantity = info.SilkQuantity.Add(car.SilkAvgQuantity)
+ info.SilkTotalAmount = info.SilkTotalAmount.Add(car.SilkTotalAvgAmount)
+ info.BadSilkQuantity = info.BadSilkQuantity.Add(car.BadSilkAvgQuantity)
+ info.BadSilkTotalAmount = info.BadSilkTotalAmount.Add(car.BadSilkTotalAvgAmount)
+ info.FinishTotalAmount = info.FinishTotalAmount.Add(car.FinishTotalAvgAmount)
+ }
+ }
+ productionEmployee = append(productionEmployee, &info)
+ }
+
+ err = models.WithTransaction(func(db *gorm.DB) error {
+ err := models.NewPayrollProductionWeaversSearch().SetOrm(db).SetCycle(date).Delete()
+ if err != nil {
+ return err
+ }
+ err = models.NewPayrollProductionWeaversSearch().SetOrm(db).CreateBatch(productionEmployee)
+ if err != nil {
+ return err
+ }
+ return nil
+ })
+
+ return nil
+}
+
+// 瀛樿〃锛氬伐璧勮绠楋紙鏃ユ湡锛堝勾鏈堬級銆佸伐绉嶃�佸憳宸ュ鍚嶃�佸皬缁勩�佽溅鍙般�佺敓浜у伐璧勩�佹弧鍕ゅ锛�=閰嶇疆锛夈�佽秴鏃跺伐璧勶紙=涓婄彮瓒呮椂灏忔椂*5+涓婄彮瓒呮椂澶�*6锛夈�佸姞鐝伐璧勶紙=鍗曠嫭鍔犵彮*80+鍏ㄨ溅闂村姞鐝�*75锛夈�佷氦閫氳ˉ璐达紙=1*鍑哄嫟澶╂暟锛夈�佸甫寰掕ˉ璐达紙=5*甯﹀緬澶╂暟锛夈��
+// 宀椾綅琛ヨ创锛�=閰嶇疆锛夈�佺ぞ淇濊ˉ璐达紙=閰嶇疆锛夈�佸伐榫勮ˉ璐达紙=閰嶇疆锛夈�佷笉杈句繚搴曪紙=閰嶇疆淇濆簳锛夈�佽川閲忓銆佸缃�1銆佸缃�2/娓呭噳琛ヨ创銆佸缃�3/鏃ュ父妫�鏌ャ�佸仠鏈鸿ˉ璐淬�佸簲鍙戝伐璧勩�佸娉級
+
+// OtherSubsidies 瀛樿〃锛� 鍏跺畠琛ヨ创
+func OtherSubsidies(date string) error {
+
+ models.NewPayrollOtherSubsidiesSearch() // 鍏跺畠琛ヨ创
+
+ return nil
+}
+
+// 瀛樿〃锛氳嚜鍔ㄧ极杞﹂棿鍚勬尅杞︺�佽溅澶淬�佷繚鍏ㄧ敓浜у伐璧勮绠� 锛堟棩鏈燂紙骞存湀锛夈�佽溅闂淬�佺粍鍒�佽溅鍙般�佷釜浜轰骇閲忥紙杞﹀彴姣忔湀姣忎汉骞冲潎涓濋噺锛夈�佹尅杞﹀伐宸ヨ祫锛堣溅鍙版瘡鏈堟瘡浜哄钩鍧囦笣閲忛噾棰濓級锛�
+// 鏍规嵁涓婃姤璁$畻锛�
+// 1銆佹尅杞﹀伐骞冲潎宸ヨ祫锛堜互缁勪负鍗曚綅锛�= 姣忔湀灏忕粍姣忚溅澶村伐璧勪箣鍜�/6锛�70缁級
+// 2銆佽溅澶村伐宸ヨ祫锛堜互缁勪负鍗曚綅锛�= 鎸¤溅宸ュ钩鍧囧伐璧�*1.09锛�1.09涓烘寚瀹氱郴鏁帮級
+// 3銆佷繚鍏ㄥ伐宸ヨ祫锛堜互缁勪负鍗曚綅锛�= 锛堟尅杞﹀伐骞冲潎宸ヨ祫+杞﹀ご宸ュ伐璧勶級/2*1.2锛�1.2涓烘寚瀹氱郴鏁帮級
+// 4銆佹姌100缁尅杞﹀钩鍧囧伐璧勶紙浠ョ粍涓哄崟浣嶏級= 姣忔湀灏忕粍姣忚溅澶村伐璧勪箣鍜�/4锛�100缁級
+
+// SalaryPlan 鐢熶骇宸ヨ祫璁$畻
+func SalaryPlan(date string) error {
+ if len(date) < 7 {
+ return errors.New("璇蜂紶鍏ユ纭殑鏌ヨ鏃堕棿锛�")
+ } else {
+ date = date[:7]
+ }
+
+ hours, err := models.NewPayrollWorkingHoursSearch().SetMonthly(date).FindNotTotal() // 鍛樺伐鐨勫伐鏃剁粺璁�
+ if err != nil {
+ return err
+ }
+ groups, err := models.NewPayrollProductionGroupSearch().SetOrder("workshop_number,groupnumber").
+ SetMonthly(date).FindNotTotal() // 灏忕粍姣忓ぉ鐨勪骇閲忕粺璁�
+ if err != nil {
+ return err
+ }
+ // 姣忎釜灏忕粍鐨勫钩鍧囬噾棰�
+ groupAvgAmountMap := make(map[string]decimal.Decimal) // map[杞﹂棿灏忕粍]骞冲潎閲戦
+ fallingSilkBucketMap := make(map[string]decimal.Decimal) // map[杞﹂棿灏忕粍] FallingSilkBucket
+ var counter int
+ for i := 0; i < len(groups); i++ {
+ counter = 0
+ groupAvgAmount := decimal.NewFromInt32(0)
+ fallingSilkBucket := decimal.NewFromInt32(0)
+ for j := i; j < len(groups); j++ {
+ if groups[i].WorkshopNumber == groups[j].WorkshopNumber && groups[i].GroupNumber == groups[j].GroupNumber {
+ groupAvgAmount = groupAvgAmount.Add(groups[j].FinishTotalAvgAmount)
+ fallingSilkBucket = fallingSilkBucket.Add(groups[j].FallingSilkBucket)
+ counter += 1
+ if i != j {
+ i += 1
+ }
+ }
+ }
+ key := fmt.Sprintf("%v%v", groups[i].WorkshopNumber, groups[i].GroupNumber)
+ groupAvgAmountMap[key] = groupAvgAmount.Div(decimal.NewFromInt32(int32(counter)))
+ fallingSilkBucketMap[key] = fallingSilkBucket
+ }
+
+ // 鎸¤溅宸ュ伐璧�
+ models.NewPayrollProductionWeaversSearch().Orm.Model(&models.PayrollProductionWeavers{}).
+ Select("worker_id,sum()").Where("cycle like ?", date+"%")
+
+ // 鏌ヨ鍗曚环
+ for _, hour := range hours {
+ key := fmt.Sprintf("%v%v", hour.WorkshopNumber, hour.GroupNumber)
+
+ ready70 := decimal.NewFromInt32(6)
+ ready100 := decimal.NewFromInt32(4)
+ coefficient := decimal.NewFromInt32(1)
+ switch hour.WorkTypeCode {
+ case constvar.JobTypeWeavers: // 鏃ヤ骇閲忓伐璧�=锛堢敓涓濆崟浠�*鏃ヤ骇涓濋噺锛�-锛堥噹绾ゆ暟閲�*閲庣氦鍗曚环锛� 鏈堜骇閲忓伐璧�=鏃ヤ骇閲忓伐璧勪箣鍜�
+ coefficient.Mul(coefficient).Sub(coefficient.Mul(coefficient))
+
+ case constvar.JobTypeCarHead: // 鏈堝伐璧�=70缁尅杞﹀伐鏈堝钩鍧囧伐璧�*绯绘暟
+ groupAvgAmountMap[key].Div(ready70).Mul(coefficient)
+
+ case constvar.JobTypeMaintenance: // 鏈堝伐璧�=锛�70缁尅杞﹀伐鏈堝钩鍧囧伐璧勶級+杞﹀ご宸ュ伐璧勶級/2*绯绘暟 锛燂紵锛燂紵 excel涓婄殑鏄�愭尅杞﹀伐鏈堝钩鍧囧伐璧�*绯绘暟銆�
+ groupAvgAmountMap[key].Div(ready70).Mul(coefficient)
+
+ case constvar.JobTypeBoiled: // 鏃ュ伐璧�=妗舵暟*鐓導鍗曚环 鏈堝伐璧�=鏃ュ伐璧勪箣鍜�
+ fallingSilkBucketMap[key].Mul(coefficient)
+
+ case constvar.JobTypeScoop: // 鏃ュ伐璧�=妗舵暟*鑸�鑼у崟浠� 鏈堝伐璧�=鏃ュ伐璧勪箣鍜�
+ fallingSilkBucketMap[key].Mul(coefficient)
+
+ case constvar.JobTypeTransport: // 鏃ュ伐璧�=妗舵暟*閫佽導鍗曚环 鏈堝伐璧�=鏃ュ伐璧勪箣鍜�
+ fallingSilkBucketMap[key].Mul(coefficient)
+
+ case constvar.JobTypeCleaner: // 鏈堝伐璧�=鍥哄畾宸ヨ祫*鍑哄嫟澶╂暟
+ coefficient.Mul(coefficient)
+
+ case constvar.JobTypeMachineCleaner: // 鏈堝伐璧�=鍥哄畾宸ヨ祫*鍑哄嫟澶╂暟
+ coefficient.Mul(coefficient)
+
+ case constvar.JobTypeAllPowerful: // 鏈堝伐璧�=鍥哄畾宸ヨ祫*鍑哄嫟澶╂暟
+ coefficient.Mul(coefficient)
+
+ case constvar.JobTypeMonitor: // 100缁尅杞﹀伐骞冲潎宸ヨ祫*绯绘暟
+ groupAvgAmountMap[key].Div(ready100).Mul(coefficient)
+
+ }
+
+ }
+
+ return nil
+}
--
Gitblit v1.8.0