package worker import ( "enterprise/common/dao" "enterprise/common/global" "enterprise/common/model" "enterprise/service" "fmt" log "github.com/sirupsen/logrus" "github.com/smbrave/goutil" "github.com/spf13/cast" "strings" "time" ) type Staff struct { } func (s *Staff) MontorWorkAge(corpId int64) { staffs, err := dao.NewStaffUserDao().Query(corpId, model.StaffUserStatusOnline) if err != nil { log.Errorf("db error :%s", err.Error()) return } nowDate := time.Now() for _, staff := range staffs { //离职的忽略 if staff.LeaveDate != "" { continue } entryDate, _ := time.ParseInLocation("2006-01-02", staff.EntryDate, time.Local) OfficialDate, _ := time.ParseInLocation("2006-01-02", staff.OfficialDate, time.Local) entryMonth := (nowDate.Year()-entryDate.Year())*12 + int(nowDate.Month()) - int(entryDate.Month()) officalDay := (OfficialDate.Unix() - nowDate.Unix()) / 86400 log.Infof("staff[%s] entryDate[%s] spanMonth[%.1f]", staff.Username, staff.EntryDate, float64(entryMonth)/12.0) salary := staff.GetSalary() if nowDate.Day() == 1 && entryMonth%6 == 0 { message := make([]string, 0) message = append(message, fmt.Sprintf("【员工半年提醒】[%s]", staff.Realname)) message = append(message, fmt.Sprintf("入职时间:%s", staff.EntryDate)) message = append(message, fmt.Sprintf("入职年限:%.1f", float64(entryMonth)/12)) message = append(message, fmt.Sprintf("基本工资:%s", salary.Base)) message = append(message, fmt.Sprintf("绩效工资:%s", salary.Target)) message = append(message, fmt.Sprintf("身份证号:%s", staff.Idno)) if err := global.SendMessage([]string{"jiangyong"}, strings.Join(message, "\n")); err != nil { log.Errorf("send message error :%s", err.Error()) } } if officalDay > 0 && officalDay <= 30 && officalDay%7 == 0 { message := make([]string, 0) message = append(message, fmt.Sprintf("【员工转正提醒】[%s]", staff.Realname)) message = append(message, fmt.Sprintf("入职时间:%s", staff.EntryDate)) message = append(message, fmt.Sprintf("转正时间:%s", staff.OfficialDate)) message = append(message, fmt.Sprintf("基本工资:%s", salary.Base)) message = append(message, fmt.Sprintf("绩效工资:%s", salary.Target)) message = append(message, fmt.Sprintf("身份证号:%s", staff.Idno)) if err := global.SendMessage([]string{"jiangyong"}, strings.Join(message, "\n")); err != nil { log.Errorf("send message error :%s", err.Error()) } } } } func (s *Staff) SendStaffSalaryBill(corpId int64, month string) { staffSalarys, err := dao.NewStaffSalaryDao().Query(corpId, 0, month) if err != nil { log.Errorf("db error :%s", err.Error()) return } for _, staffSalary := range staffSalarys { if staffSalary.Salary < 0.1 { continue } user, err := dao.NewStaffUserDao().Get(staffSalary.UserId) if err != nil { log.Errorf("db error :%s", err.Error()) continue } message := make([]string, 0) message = append(message, fmt.Sprintf("【工资单】[%s][%s]", user.Username, month)) message = append(message, fmt.Sprintf("基本工资:%.2f", staffSalary.Salary)) if staffSalary.AttendSalary >= 0.1 { message = append(message, fmt.Sprintf("出勤工资:%.2f", staffSalary.AttendSalary)) } if staffSalary.AwardSalary >= 0.1 { message = append(message, fmt.Sprintf("奖金收入:%.2f", staffSalary.AwardSalary)) } if staffSalary.OtherSalary >= 0.1 { message = append(message, fmt.Sprintf("其他收入:%.2f", staffSalary.OtherSalary)) } message = append(message, fmt.Sprintf("社保扣除:%.2f", staffSalary.SocialDeduct+staffSalary.HouseDeduct)) message = append(message, fmt.Sprintf("个税扣除:%.2f", staffSalary.PersonalDeduct)) message = append(message, fmt.Sprintf("实发工资:%.2f", staffSalary.GetRealSalary())) if err := global.SendMessage([]string{"jiangyong"}, strings.Join(message, "\n")); err != nil { log.Errorf("send message error :%s", err.Error()) } } } func (s *Staff) SyncStaffSalary(corpId int64, month string) { if month == "" { month = time.Now().AddDate(0, -1, 0).Format("2006-01") } month = strings.ReplaceAll(month, "-", "") staffs, err := dao.NewStaffUserDao().Query(corpId, 0) if err != nil { log.Errorf("query staff db error :%s", err.Error()) return } for _, staff := range staffs { // 已离职的员工不处理 if staff.LeaveDate != "" { leaveTime, _ := time.ParseInLocation("2006-01-02", staff.LeaveDate, time.Local) isLeaveMonth := goutil.If(cast.ToInt(leaveTime.Format("200601")) == cast.ToInt(month), true, false) if !isLeaveMonth { continue } } salary, err := dao.NewStaffSalaryDao().GetBy(corpId, staff.Id, month) if err != nil { log.Errorf("db error :%s", err.Error()) continue } staffService := service.NewStaffSalary(staff) salary, err = staffService.CalcSalary(salary, month) if err != nil { log.Errorf("username[%s] staffService.CalcSalary error :%s", staff.Username, err.Error()) continue } if salary == nil { continue } if salary.Id == 0 { _, err = dao.NewStaffSalaryDao().Create(salary) } else { err = dao.NewStaffSalaryDao().Update(salary) } if err != nil { log.Errorf("db error :%s", err.Error()) } } }