163 lines
5.3 KiB
Go
163 lines
5.3 KiB
Go
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 NewStaff() *Staff {
|
|
return &Staff{}
|
|
}
|
|
func (s *Staff) MontorWorkAge(corpId int64) {
|
|
staffs, _, err := dao.NewStaffUserDao().Query(1, -1, 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(1, -1, 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())
|
|
}
|
|
}
|
|
|
|
}
|