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