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:工种代码"` //工种代码
|
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
|
}
|