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