yinbentan
2024-08-02 3032034d254fc15f06a1d4260f35c49f0ef1e12f
models/payroll_constitute.go
@@ -4,12 +4,13 @@
   "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)"` //月份
@@ -18,10 +19,10 @@
      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)
   }
@@ -29,6 +30,8 @@
   PayrollConstituteSearch struct {
      PayrollConstitute
      Monthly  string
      Keyword string
      Order    string
      PageNum  int
      PageSize int
@@ -41,7 +44,7 @@
   return "silk_payroll_constitute"
}
// NewPayrollConstituteSearch 其它补贴
// NewPayrollConstituteSearch 薪资分类项
func NewPayrollConstituteSearch() *PayrollConstituteSearch {
   return &PayrollConstituteSearch{Orm: mysqlx.GetDB()}
}
@@ -81,6 +84,16 @@
   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
@@ -114,16 +127,25 @@
      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")
@@ -304,3 +326,68 @@
   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
}