enterprise/worker/approval.go

171 lines
4.2 KiB
Go
Raw Normal View History

2024-01-07 18:53:21 +08:00
package worker
import (
"enterprise/common/dao"
"enterprise/common/model"
2024-08-09 13:57:03 +08:00
"git.u8t.cn/open/gosdk/qyweixin"
2024-01-07 18:53:21 +08:00
log "github.com/sirupsen/logrus"
2025-03-05 23:03:21 +08:00
"github.com/spf13/cast"
2024-01-07 18:53:21 +08:00
"time"
)
type Approval struct {
2025-01-08 12:35:29 +08:00
corp *model.Corp
corpConfig *model.CorpConfig
2024-01-07 18:53:21 +08:00
}
2025-03-04 23:14:09 +08:00
func NewApproval(corpId int64) *Approval {
corp, _ := dao.NewCorpDao().Get(corpId)
2025-01-08 12:35:29 +08:00
return &Approval{
corp: corp,
corpConfig: corp.GetConfig(),
}
}
2024-01-07 22:54:33 +08:00
func (s *Approval) getTemplateId(tp string) string {
if tp == model.ApprovalTypeCheckin {
2025-01-08 12:35:29 +08:00
return s.corpConfig.TplIdCheckin
2024-01-07 22:54:33 +08:00
} else if tp == model.ApprovalTypeRefund {
2025-01-08 12:35:29 +08:00
return s.corpConfig.TplIdRefund
2024-01-07 22:54:33 +08:00
} else if tp == model.ApprovalTypeVacation {
2025-01-08 12:35:29 +08:00
return s.corpConfig.TplIdVacation
} else if tp == model.ApprovalTypePayment {
return s.corpConfig.TplIdPayment
2024-01-07 22:54:33 +08:00
}
return ""
}
2025-03-05 23:06:46 +08:00
func (s *Approval) Sync(month, tp string) {
corp, err := dao.NewCorpDao().Get(s.corp.Id)
2025-03-04 23:14:09 +08:00
if err != nil {
log.Errorf("db error:%s", err.Error())
return
}
corpConfig := corp.GetConfig()
2024-01-07 22:54:33 +08:00
templateId := s.getTemplateId(tp)
2025-03-04 23:14:09 +08:00
approve := qyweixin.NewAppApprove(&qyweixin.AppConfig{Corpid: corpConfig.CorpId, Secret: corpConfig.ApproveSecret, Agent: corpConfig.ApproveAgent})
2024-01-07 18:53:21 +08:00
startTime, _ := time.ParseInLocation("200601", month, time.Local)
endTime := startTime.AddDate(0, 1, 0)
spNos, err := approve.GetList(startTime.Unix(), endTime.Unix()-1, templateId)
if err != nil {
log.Errorf("approve getlist error :%s", err.Error())
return
}
2024-01-07 22:54:33 +08:00
2024-01-07 18:53:21 +08:00
for _, spNo := range spNos {
detail, err := approve.GetDetail(spNo)
if err != nil {
log.Errorf("approve GetDetail error :%s", err.Error())
continue
}
2024-01-24 17:39:05 +08:00
if detail.SpStatus != 2 {
continue
}
2024-01-07 22:54:33 +08:00
if tp == model.ApprovalTypeCheckin {
s.saveCheckin(detail)
} else if tp == model.ApprovalTypeRefund {
s.saveRefund(detail)
} else if tp == model.ApprovalTypeVacation {
s.saveVacation(detail)
2025-01-08 12:35:29 +08:00
} else if tp == model.ApprovalTypePayment {
2025-01-08 12:59:56 +08:00
s.savePayment(detail)
2024-01-07 22:54:33 +08:00
}
}
2024-01-07 18:53:21 +08:00
2024-01-07 22:54:33 +08:00
return
}
2024-01-07 18:53:21 +08:00
2025-01-08 12:59:56 +08:00
func (s *Approval) savePayment(detail *qyweixin.ApproveDetail) {
dbDao := dao.NewApprovalPaymentDao()
newData := new(model.ApprovalPayment)
newData.From(detail)
2025-03-14 18:22:08 +08:00
newData.CorpId = s.corp.Id
2025-01-08 12:59:56 +08:00
old, err := dbDao.GetBySpNo(s.corp.Id, detail.SpNo)
if err != nil {
log.Errorf("db error :%s", err.Error())
return
}
if old == nil {
_, err = dbDao.Create(newData)
} else {
newData.Id = old.Id
newData.CreateTime = old.CreateTime
err = dbDao.Update(newData)
}
if err != nil {
log.Errorf("db error :%s", err.Error())
}
}
2024-01-22 23:21:37 +08:00
func (s *Approval) saveCheckin(detail *qyweixin.ApproveDetail) {
2024-01-07 22:54:33 +08:00
dbDao := dao.NewApprovalCheckinDao()
2024-01-22 23:21:37 +08:00
newData := new(model.ApprovalCheckin)
newData.From(detail)
2025-03-14 18:22:08 +08:00
newData.CorpId = s.corp.Id
2025-01-08 12:59:56 +08:00
old, err := dbDao.GetBySpNo(s.corp.Id, detail.SpNo)
2024-01-07 22:54:33 +08:00
if err != nil {
log.Errorf("db error :%s", err.Error())
return
}
if old == nil {
_, err = dbDao.Create(newData)
} else {
newData.Id = old.Id
newData.CreateTime = old.CreateTime
err = dbDao.Update(newData)
}
if err != nil {
log.Errorf("db error :%s", err.Error())
}
}
2024-01-07 18:53:21 +08:00
2024-01-22 23:21:37 +08:00
func (s *Approval) saveRefund(detail *qyweixin.ApproveDetail) {
2024-01-07 22:54:33 +08:00
dbDao := dao.NewApprovalRefundDao()
2024-01-22 23:21:37 +08:00
newData := new(model.ApprovalRefund)
newData.From(detail)
2025-03-05 23:58:12 +08:00
newData.CorpId = s.corp.Id
2025-01-08 12:59:56 +08:00
old, err := dbDao.GetBySpNo(s.corp.Id, detail.SpNo)
2024-01-07 22:54:33 +08:00
if err != nil {
log.Errorf("db error :%s", err.Error())
return
}
2024-01-24 17:39:05 +08:00
if old != nil {
2025-03-05 23:47:14 +08:00
newData.Id = old.Id
err = dbDao.Update(newData)
if err != nil {
log.Errorf("db error :%s", err.Error())
}
2024-01-24 17:39:05 +08:00
return
2024-01-07 22:54:33 +08:00
}
2024-01-24 17:39:05 +08:00
_, err = dbDao.Create(newData)
2024-01-07 22:54:33 +08:00
if err != nil {
log.Errorf("db error :%s", err.Error())
}
}
2024-01-22 23:21:37 +08:00
func (s *Approval) saveVacation(detail *qyweixin.ApproveDetail) {
2024-01-07 22:54:33 +08:00
dbDao := dao.NewApprovalVacationDao()
2024-01-22 23:21:37 +08:00
newData := new(model.ApprovalVacation)
2025-03-05 23:22:28 +08:00
newData.CorpId = s.corp.Id
2024-01-22 23:21:37 +08:00
newData.From(detail)
2025-03-05 23:12:55 +08:00
newData.VacationDuration = newData.VacationDuration / (cast.ToFloat64(s.corpConfig.WorkerHouer) * float64(3600))
2025-03-05 23:03:21 +08:00
2025-01-08 12:59:56 +08:00
old, err := dbDao.GetBySpNo(s.corp.Id, detail.SpNo)
2024-01-07 22:54:33 +08:00
if err != nil {
log.Errorf("db error :%s", err.Error())
return
}
2024-01-24 17:39:05 +08:00
if old != nil {
2025-03-05 23:27:02 +08:00
newData.Id = old.Id
2025-03-05 23:17:25 +08:00
err = dbDao.Update(newData)
if err != nil {
log.Errorf("db error :%s", err.Error())
}
2024-01-24 17:39:05 +08:00
return
2024-01-07 22:54:33 +08:00
}
2024-01-24 17:39:05 +08:00
_, err = dbDao.Create(newData)
2024-01-07 22:54:33 +08:00
if err != nil {
log.Errorf("db error :%s", err.Error())
2024-01-07 18:53:21 +08:00
}
}