| | |
| | | "fmt" |
| | | "github.com/shopspring/decimal" |
| | | "gorm.io/gorm" |
| | | "math/rand" |
| | | "silkserver/constvar" |
| | | "silkserver/pkg/mysqlx" |
| | | ) |
| | | |
| | | type ( |
| | | // PayrollConstitute 其它补贴、奖惩 |
| | | // PayrollConstitute 薪资分类项 |
| | | PayrollConstitute struct { |
| | | BaseModelInt |
| | | Cycle string `json:"cycle" gorm:"index;size:20;not null;comment:统计周期(yyyy-MM)"` //月份 |
| | |
| | | WorkTypeID uint `json:"workTypeID" gorm:"type:bigint(20);not null;comment:工种ID"` //工种ID |
| | | WorkType WorkTypeManage `json:"workType" gorm:"foreignKey:WorkTypeID;references:ID"` //工种ID |
| | | WorkTypeCode constvar.JobType `json:"workTypeCode" gorm:"size:255;not null;comment:工种代码"` //工种代码 |
| | | WorkTypeName string `json:"workTypeName" gorm:"size:255;not null;comment:工种名称"` //工种名称 |
| | | WorkTypeName string `json:"workTypeName" gorm:"size:255;comment:工种名称"` //工种名称 |
| | | SalaryPlanId uint `json:"salaryPlanId" gorm:"type:bigint(20);not null;comment:薪资方案ID"` //薪资方案ID |
| | | SalaryPlan SalaryPlan `json:"subsidyTypeName" gorm:"foreignKey:SalaryPlanId;references:ID"` //薪资方案 |
| | | SalaryFormula string `json:"salaryFormula" gorm:"size:255;not null;comment:薪资方案(翻译)"` //薪资方案 |
| | | SalaryFormula string `json:"salaryFormula" gorm:"size:255;comment:薪资方案(翻译)"` //薪资方案 |
| | | Amount decimal.Decimal `json:"amount" gorm:"type:decimal(12,4);comment:金额"` // 金额 |
| | | CreatedBy string `json:"createdBy" gorm:"size:255;not null;comment:添加者"` // 添加者(auto,用户id) |
| | | } |
| | |
| | | PayrollConstituteSearch struct { |
| | | PayrollConstitute |
| | | Monthly string |
| | | Keyword string |
| | | |
| | | Order string |
| | | PageNum int |
| | | PageSize int |
| | |
| | | return "silk_payroll_constitute" |
| | | } |
| | | |
| | | // NewPayrollConstituteSearch 其它补贴 |
| | | // NewPayrollConstituteSearch 薪资分类项 |
| | | func NewPayrollConstituteSearch() *PayrollConstituteSearch { |
| | | return &PayrollConstituteSearch{Orm: mysqlx.GetDB()} |
| | | } |
| | |
| | | return slf |
| | | } |
| | | |
| | | func (slf *PayrollConstituteSearch) SetWorkTypeCode(workTypeCode string) *PayrollConstituteSearch { |
| | | slf.WorkTypeCode = constvar.JobType(workTypeCode) |
| | | return slf |
| | | } |
| | | |
| | | func (slf *PayrollConstituteSearch) SetSalaryPlanId(salaryPlanId uint) *PayrollConstituteSearch { |
| | | slf.SalaryPlanId = salaryPlanId |
| | | return slf |
| | | } |
| | | |
| | | func (slf *PayrollConstituteSearch) SetWorkerID(workerID string) *PayrollConstituteSearch { |
| | | slf.WorkerID = workerID |
| | | return slf |
| | |
| | | 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.WorkerID != "" { |
| | | db = db.Where("worker_id = ?", slf.WorkerID) |
| | | } |
| | | |
| | | if slf.SalaryPlanId > 0 { |
| | | db = db.Where("salary_plan_id = ?", slf.SalaryPlanId) |
| | | } |
| | | |
| | | if slf.CreatedBy != "" { |
| | | db = db.Where("created_by = ?", slf.SalaryPlanId) |
| | | db = db.Where("created_by = ?", slf.CreatedBy) |
| | | } |
| | | |
| | | if slf.Keyword != "" { |
| | | key := "%" + slf.Keyword + "%" |
| | | db = db.Where("work_type_name like ?", key) |
| | | } |
| | | |
| | | db.Where("1 = 1") |
| | |
| | | |
| | | return records, nil |
| | | } |
| | | |
| | | type ConstituteGroup struct { |
| | | Cycle string `json:"cycle"` //月份 |
| | | WorkerID string `json:"workerId"` //员工ID |
| | | WorkTypeCode constvar.JobType `json:"workTypeCode"` //工种代码 |
| | | SalaryPlanId uint `json:"salaryPlanId"` //薪资方案ID |
| | | } |
| | | |
| | | // ConstituteGroup 本月统计了工资的人员 |
| | | func (slf *PayrollConstituteSearch) ConstituteGroup(cg *ConstituteGroup) ([]*ConstituteGroup, error) { |
| | | var ( |
| | | records = make([]*ConstituteGroup, 0) |
| | | db = slf.Orm.Table(slf.TableName()) |
| | | ) |
| | | db.Select("cycle,worker_id,work_type_code,salary_plan_id") |
| | | db.Where("cycle = ?", cg.Cycle) |
| | | if cg.WorkerID != "" { |
| | | db.Where("worker_id = ?", cg.WorkerID) |
| | | } |
| | | if cg.WorkTypeCode != "" { |
| | | db.Where("work_type_code = ?", cg.WorkTypeCode) |
| | | } |
| | | if cg.SalaryPlanId > 0 { |
| | | db.Where("salary_plan_id = ?", cg.SalaryPlanId) |
| | | } |
| | | db.Group("cycle,worker_id,work_type_code,salary_plan_id") |
| | | |
| | | return records, db.Find(&records).Error |
| | | } |
| | | |
| | | // InitDefaultData 初始化数据 |
| | | func (slf *PayrollConstituteSearch) 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([]*PayrollConstitute, 0) |
| | | workers, _ := NewWorkerSearch().FindNotTotal() |
| | | for _, record := range workers { |
| | | r := rand.Intn(10) |
| | | data = append(data, &PayrollConstitute{ |
| | | Cycle: date, |
| | | WorkerID: record.ID, |
| | | WorkTypeID: uint(r + 1), |
| | | WorkTypeCode: constvar.JobTypeArr[r], |
| | | WorkTypeName: constvar.JobTypeMap[constvar.JobTypeArr[r]], |
| | | SalaryPlanId: 7, |
| | | Amount: decimal.NewFromInt32(int32(r * 100)), |
| | | CreatedBy: "auto", |
| | | }) |
| | | } |
| | | err := slf.CreateBatch(data) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | |
| | | return nil |
| | | } |