...
|
...
|
@@ -3,8 +3,11 @@ package service |
|
|
import (
|
|
|
"github.com/linmadan/egglib-go/core/application"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/command"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/service"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/utils"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
...
|
...
|
@@ -26,13 +29,15 @@ func (rs *NodeTaskService) SendEvaluationNode() error { |
|
|
transactionContext.RollbackTransaction()
|
|
|
}()
|
|
|
taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
projectRepository := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
//cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
|
|
|
tasks, err := taskRepository.Find(map[string]interface{}{"now": time.Now().Local()})
|
|
|
if err != nil {
|
|
|
return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
if len(tasks) == 0 {
|
|
|
return nil
|
|
|
}
|
|
|
projectRepository := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
|
|
|
//ttaffAssessRepository := factory.CreateStaffAssessTaskRepository(map[string]interface{}{"transactionContext": transactionContext})
|
|
|
//
|
...
|
...
|
@@ -53,49 +58,114 @@ func (rs *NodeTaskService) SendEvaluationNode() error { |
|
|
cycleIds = append(cycleIds, k)
|
|
|
}
|
|
|
|
|
|
_, projects, err := projectRepository.Find(map[string]interface{}{"ids": projectIds})
|
|
|
_, projects, err := projectRepository.Find(map[string]interface{}{"ids": projectIds}, "template")
|
|
|
if err != nil {
|
|
|
return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
_, cycles, err := cycleRepository.Find(map[string]interface{}{"ids": cycleIds})
|
|
|
if err != nil {
|
|
|
return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
//_, cycles, err := cycleRepository.Find(map[string]interface{}{"ids": cycleIds})
|
|
|
//if err != nil {
|
|
|
// return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
//}
|
|
|
|
|
|
for i := range projects {
|
|
|
projectIdsMap[projects[i].Id] = projects[i]
|
|
|
}
|
|
|
for i := range cycles {
|
|
|
cycleIdsMap[cycles[i].Id] = cycles[i]
|
|
|
}
|
|
|
|
|
|
//staffAssessService := service.NewStaffAssessServeice()
|
|
|
|
|
|
staffAssessTaskMap := map[int64]*command.CreateStaffAssessTask{}
|
|
|
for i := range tasks {
|
|
|
task := tasks[i]
|
|
|
|
|
|
//if project, ok := projectIdsMap[task.ProjectId]; ok {
|
|
|
|
|
|
//csat := &command.CreateStaffAssessTask{
|
|
|
// CompanyId: project.CompanyId,
|
|
|
// EvaluationProjectId: project.Id,
|
|
|
// EvaluationProjectName: project.Name,
|
|
|
// CycleId: project.CycleId,
|
|
|
//}
|
|
|
//
|
|
|
//staffAssessService.CreateStaffAssessTask(csat)
|
|
|
//}
|
|
|
|
|
|
// 下一次发送时间
|
|
|
nextTime := utils.NextTimeInc(task.NextSentAt, task.KpiCycle)
|
|
|
task.NextSentAt = &nextTime
|
|
|
// 如果超出截至时间,则周期置空
|
|
|
if task.NextSentAt.After(*task.EndAt) {
|
|
|
// 项目
|
|
|
project, ok := projectIdsMap[task.ProjectId]
|
|
|
if ok {
|
|
|
|
|
|
// 环节截止时间
|
|
|
maxTime := time.Date(task.TimeEnd.Year(), task.TimeEnd.Month(), task.TimeEnd.Day(), task.TimeEnd.Hour(), task.TimeEnd.Minute(), 0, 0, time.Local)
|
|
|
|
|
|
// 当前周起始时间和截止时间
|
|
|
var cycleTimeStart = task.NextSentAt
|
|
|
var cycleTimeEnd *time.Time
|
|
|
|
|
|
// 下个周期起始时间
|
|
|
nextTime := utils.NextTimeInc(task.NextSentAt, task.KpiCycle)
|
|
|
// 超过截止时间
|
|
|
if nextTime.After(maxTime) {
|
|
|
task.NextSentAt = nil
|
|
|
} else {
|
|
|
task.NextSentAt = &nextTime
|
|
|
}
|
|
|
|
|
|
// 下个周期的起始时间=当前周期的截止时间
|
|
|
if task.NextSentAt == nil {
|
|
|
cycleTimeEnd = &maxTime
|
|
|
} else {
|
|
|
cycleTimeEnd = task.NextSentAt
|
|
|
}
|
|
|
|
|
|
// 格式化周期的起始和截止时间
|
|
|
fmCycleStartTime := cycleTimeStart.Format("2006-1-2 15:04:05")
|
|
|
fmCycleTimeEnd := cycleTimeEnd.Format("2006-1-2 15:04:05")
|
|
|
|
|
|
var csat, staffOk = staffAssessTaskMap[task.ProjectId]
|
|
|
if !staffOk {
|
|
|
csat = &command.CreateStaffAssessTask{
|
|
|
CompanyId: int(project.CompanyId),
|
|
|
EvaluationProjectId: int(project.Id),
|
|
|
EvaluationProjectName: project.Name,
|
|
|
CycleId: project.CycleId,
|
|
|
}
|
|
|
|
|
|
// 周期名称
|
|
|
if cycle, ok := cycleIdsMap[project.CycleId]; ok {
|
|
|
csat.CycleName = cycle.Name
|
|
|
}
|
|
|
|
|
|
// 接收人
|
|
|
csat.ExecutorId = make([]int, 0)
|
|
|
for rIndex := range project.Recipients {
|
|
|
vInt, _ := strconv.Atoi(project.Recipients[rIndex])
|
|
|
csat.ExecutorId = append(csat.ExecutorId, vInt)
|
|
|
}
|
|
|
|
|
|
// FIXME 这里设置时间可能会有歧义,目前原型设计时间均一致,所以直接选取第一个获取到的周期时间,作为本周期的起止和截止时间
|
|
|
csat.BeginTime = fmCycleStartTime
|
|
|
csat.EndTime = fmCycleTimeEnd
|
|
|
|
|
|
staffAssessTaskMap[task.ProjectId] = csat
|
|
|
}
|
|
|
|
|
|
if csat.StepList == nil {
|
|
|
csat.StepList = make([]command.AssessTaskStep, 0)
|
|
|
}
|
|
|
csat.StepList = append(csat.StepList, command.AssessTaskStep{
|
|
|
SortBy: i,
|
|
|
LinkNodeId: int(task.NodeId),
|
|
|
LinkNodeName: task.NodeName,
|
|
|
LinkNodeType: task.NodeType,
|
|
|
BeginTime: fmCycleStartTime,
|
|
|
EndTime: fmCycleTimeEnd,
|
|
|
})
|
|
|
} else {
|
|
|
task.NextSentAt = nil
|
|
|
}
|
|
|
|
|
|
task, err := taskRepository.Insert(task)
|
|
|
if err != nil {
|
|
|
return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
staffAssessService := service.NewStaffAssessServeice()
|
|
|
for i := range staffAssessTaskMap {
|
|
|
staffAssessTask := staffAssessTaskMap[i]
|
|
|
_, err := staffAssessService.CreateStaffAssessTask(staffAssessTask)
|
|
|
if err != nil {
|
|
|
return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if err := transactionContext.CommitTransaction(); err != nil {
|
|
|
return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
|
|
|
}
|
...
|
...
|
|