From b94bef381946e22fd1038f24e6d9de911d194640 Mon Sep 17 00:00:00 2001
From: yinbentan <yinbentan@live.com>
Date: 星期三, 31 七月 2024 23:33:48 +0800
Subject: [PATCH] 功能修改,工资计算调整,通过前端配置公式进行计算
---
models/payroll_working_hours.go | 92 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 91 insertions(+), 1 deletions(-)
diff --git a/models/payroll_working_hours.go b/models/payroll_working_hours.go
index d9f04da..caff2b4 100644
--- a/models/payroll_working_hours.go
+++ b/models/payroll_working_hours.go
@@ -4,8 +4,10 @@
"fmt"
"github.com/shopspring/decimal"
"gorm.io/gorm"
+ "math/rand"
"silkserver/constvar"
"silkserver/pkg/mysqlx"
+ "silkserver/utils"
)
// 宸ユ椂缁熻
@@ -19,7 +21,7 @@
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
+ WorkshopId uint `json:"workshopId" gorm:"type:int(11);comment:杞﹂棿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:杞﹀彴鍙峰紑濮�"` // 杞﹀彴鍙峰垪琛�
@@ -321,3 +323,91 @@
return records, nil
}
+
+type GroupWorker struct {
+ Cycle string `json:"cycle"` // 缁熻鍛ㄦ湡锛堝勾鏈堟棩锛�
+ WorkTypeCode constvar.JobType `json:"workTypeCode"` // 宸ョ缂栫爜
+ WorkshopNumber string `json:"workshopNumber"` // 杞﹂棿缂栧彿
+ GroupNumber int `json:"groupNumber"` // 缁勫埆
+ WorkerIds string `json:"workerIds"` // 鍛樺伐ID
+ WorkerCount int `json:"workerCount"` // 鎸¤溅宸ユ暟閲�
+}
+
+// GroupWorker 姣忓ぉ灏忕粍浜哄憳
+func (slf *PayrollWorkingHoursSearch) GroupWorker(monthly string, workTypeCode constvar.JobType) ([]*GroupWorker, error) {
+ var (
+ records = make([]*GroupWorker, 0)
+ db = slf.Orm.Table(slf.TableName())
+ )
+ db.Select("cycle, work_type_code, workshop_number, group_number, group_concat(worker_id) as worker_ids, count(id) as worker_count")
+ db.Where("cycle like ?", monthly+"%")
+ if workTypeCode != "" {
+ db.Where("work_type_code = ?", workTypeCode)
+ }
+ db.Group("cycle, work_type_code, workshop_number, group_number")
+
+ return records, db.Find(&records).Error
+}
+
+// InitDefaultData 鍒濆鍖栨暟鎹�
+func (slf *PayrollWorkingHoursSearch) InitDefaultData() error {
+ var (
+ db = slf.Orm.Table(slf.TableName())
+ total int64 = 0
+ )
+
+ firstDay, lastDay := utils.GetLastMonthPeriod(utils.GetMonthByOffset(-1))
+
+ for i := 0; i < (lastDay.Day()); i++ {
+ date := firstDay.AddDate(0, 0, i)
+ if err := db.Where("cycle = ?", date.Format("2006-01-02")).Count(&total).Error; err != nil {
+ return err
+ }
+ if total != 0 {
+ return nil
+ }
+
+ data := make([]*PayrollWorkingHours, 0)
+ workers, _ := NewWorkerSearch().FindNotTotal()
+ workshop := rand.Intn(10)
+ for _, record := range workers {
+ round := rand.Intn(10)
+ info := PayrollWorkingHours{
+ Cycle: date.Format("2006-01-02"),
+ WorkTypeID: uint(round + 1),
+ WorkTypeCode: constvar.JobTypeArr[round],
+ WorkerID: record.ID,
+ WorkshopId: uint(workshop + 1),
+ WorkshopNumber: fmt.Sprintf("100%v", workshop),
+ GroupNumber: round,
+ StartCarNumber: round*10 + 1,
+ EndCarNumber: (round + 1) * 10,
+ ShiftTime: "08:00-18:00",
+ ShiftCrossDay: false,
+ ShiftClockInTime: fmt.Sprintf("07:5%v", round),
+ ShiftClockOutTime: fmt.Sprintf("20:0%v", round),
+ }
+ //if info.WorkTypeCode == constvar.JobTypeWeavers {
+ // info.StartCarNumber = i*10 + 1
+ // info.EndCarNumber = (i + 1) * 10
+ //}
+
+ if date.Weekday() == 0 {
+ info.OvertimeType = constvar.ShiftOvertimeTypeOvertime
+ info.OvertimeDuration = decimal.NewFromInt32(1)
+ info.OvertimePay = decimal.NewFromInt32(1 * 90)
+ } else {
+ info.OvertimeType = constvar.ShiftOvertimeTypeTimeout
+ info.OvertimeDuration = decimal.NewFromInt32(int32(workshop))
+ info.OvertimePay = decimal.NewFromInt32(int32(workshop * 12))
+ }
+ data = append(data, &info)
+ }
+
+ if err := slf.CreateBatch(data); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
--
Gitblit v1.8.0