|
@@ -10,15 +10,12 @@ import com.huaxu.evaluation.enums.EvaluationCycleEnums;
|
|
|
import com.huaxu.evaluation.enums.EvaluationItemEnums;
|
|
|
import com.huaxu.evaluation.vo.EvaluationItemValueVo;
|
|
|
import com.huaxu.evaluation.vo.EvaluationItemVo;
|
|
|
-import com.huaxu.evaluation.vo.EvaluationResultTaskDetailsVo;
|
|
|
import com.huaxu.exception.ServiceException;
|
|
|
-import com.huaxu.model.AjaxMessage;
|
|
|
import com.huaxu.order.dao.WorkOrderManageMapper;
|
|
|
import com.huaxu.order.dto.WorkOrderManageDto;
|
|
|
import com.huaxu.task.entity.UserEntity;
|
|
|
import com.huaxu.util.DatesUtil;
|
|
|
import com.huaxu.utils.EvaluationUtil;
|
|
|
-import io.swagger.models.auth.In;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
@@ -31,7 +28,6 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @ClassName EvaluationResultJob
|
|
@@ -86,13 +82,13 @@ public class EvaluationResultJob {
|
|
|
|
|
|
|
|
|
/***
|
|
|
- * @Scheduled(cron = "0/5 * * * * ?")
|
|
|
- * 异步启动定时任务
|
|
|
+ *
|
|
|
+ * 异步启动定时任务,每天凌晨4点
|
|
|
* @Author lihui
|
|
|
* @Date 18:26 2021/5/17
|
|
|
* @return void
|
|
|
**/
|
|
|
-
|
|
|
+ @Scheduled(cron="0 0 4 * * ?")
|
|
|
@Async
|
|
|
public void run(){
|
|
|
if (lock){
|
|
@@ -102,8 +98,9 @@ public class EvaluationResultJob {
|
|
|
log.info("============绩效考评数据生成begin=====================");
|
|
|
String startTime = null;
|
|
|
String endTime = null;
|
|
|
+ int today = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
|
|
|
EvaluationCycleEntity queryEntity = new EvaluationCycleEntity();
|
|
|
- queryEntity.setEvaluationDay(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
|
|
|
+ queryEntity.setEvaluationDay(today);
|
|
|
// 首先查询当天哪些公司设置了绩效考评
|
|
|
List<EvaluationCycleEntity> evaluationCycleEntities = evaluationCycleMapper.findList(queryEntity);
|
|
|
try {
|
|
@@ -114,8 +111,8 @@ public class EvaluationResultJob {
|
|
|
continue;
|
|
|
}
|
|
|
// 根据类型(0月度 1季度 2年度)得到当前的开始时间和结束时间,如果是按季度,当月必须是1,4,7,10
|
|
|
- startTime = EvaluationUtil.getStartTime(evaluationCycleEntity.getType(), queryEntity.getEvaluationDay());
|
|
|
- endTime = EvaluationUtil.getEndTime(evaluationCycleEntity.getType(), queryEntity.getEvaluationDay());
|
|
|
+ startTime = EvaluationUtil.getStartTime(evaluationCycleEntity.getType(), today);
|
|
|
+ endTime = EvaluationUtil.getEndTime(evaluationCycleEntity.getType(), today);
|
|
|
if (startTime == null || endTime == null) {
|
|
|
continue;
|
|
|
}
|
|
@@ -126,7 +123,8 @@ public class EvaluationResultJob {
|
|
|
} finally {
|
|
|
// 用完直接clear
|
|
|
itemMap.clear();
|
|
|
- //lock = false;
|
|
|
+ userInfoMap.clear();
|
|
|
+ lock = false;
|
|
|
}
|
|
|
log.info("============绩效考评数据生成end=====================");
|
|
|
}
|
|
@@ -149,9 +147,9 @@ public class EvaluationResultJob {
|
|
|
return;
|
|
|
}
|
|
|
for (UserEntity userEntity : userEntityList) {
|
|
|
- itemEntityList = findItem(userEntity);
|
|
|
// 1.获取部门考评项设置,如果未设置直接过滤
|
|
|
// 2.判断部门考评项目设置里面有没有设置对应的考评周期,没有就直接过滤
|
|
|
+ itemEntityList = findItem(userEntity);
|
|
|
if (CollectionUtil.isEmpty(itemEntityList) || !EvaluationUtil.containsType(itemEntityList, cycle)) {
|
|
|
continue;
|
|
|
}
|
|
@@ -183,20 +181,28 @@ public class EvaluationResultJob {
|
|
|
}
|
|
|
|
|
|
|
|
|
- /**
|
|
|
- * @Author lihui
|
|
|
- * @Description 保存用户考评结果
|
|
|
- * @Date 10:26 2021/5/11
|
|
|
- * @Param [userEntity, itemEntityList, startTime, endTime, cycle]
|
|
|
- * @return void
|
|
|
- **/
|
|
|
+ /***
|
|
|
+ * 1.计算用户完成任务情况
|
|
|
+ * 2.组装考评结果数据
|
|
|
+ * 3.保存考评结果
|
|
|
+ * 4.计算得分范围,保存考评结果详情
|
|
|
+ * @author lihui
|
|
|
+ * @date 15:38 2021/5/21
|
|
|
+ * @param userEntity :
|
|
|
+ * @param itemEntityList :
|
|
|
+ * @param startTime :
|
|
|
+ * @param endTime :
|
|
|
+ * @param cycle :
|
|
|
+ * @return void
|
|
|
+ **/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void saveEvaluationResultInfo(UserEntity userEntity, List<EvaluationItemVo> itemEntityList, String startTime, String endTime, Integer cycle){
|
|
|
+ // 条件值
|
|
|
+ BigDecimal evaluationValue = null;
|
|
|
// 计算用户完成任务情况
|
|
|
- EvaluationResultTaskEntity taskDetailsVo = calculationTaskInfo(userEntity.getId().intValue(), userEntity.getTenantId(), startTime, endTime, getValueCondition(itemEntityList));
|
|
|
- // 组装考评结果数据
|
|
|
+ EvaluationResultTaskEntity taskDetailsVo = calculationTaskInfo(userEntity.getId().intValue(), userEntity.getTenantId(),
|
|
|
+ startTime, endTime, getValueCondition(itemEntityList));
|
|
|
EvaluationResultEntity resultEntity = packagesEvaluationResultEntity(userEntity, cycle, startTime, endTime);
|
|
|
- // 保存考评结果
|
|
|
if (evaluationResultMapper.insertEvaluationResult(resultEntity) != 1) {
|
|
|
throw new ServiceException(500, "保存考评结果出错,退出。");
|
|
|
}
|
|
@@ -206,8 +212,9 @@ public class EvaluationResultJob {
|
|
|
evaluationResultTaskMapper.insertEvaluationResultTask(taskDetailsVo);
|
|
|
BigDecimal completeCount = new BigDecimal(taskDetailsVo.getCompleteCount()) ;
|
|
|
// 按时完成率
|
|
|
- BigDecimal completionRate = EvaluationUtil.divide(taskDetailsVo.getCompleteCount() - taskDetailsVo.getDelayCompleteCount(), taskDetailsVo.getTotalCount());
|
|
|
- BigDecimal evaluationValue = null;
|
|
|
+ BigDecimal completionRate = EvaluationUtil.onTimeCompletionRate(taskDetailsVo.getCompleteCount(),
|
|
|
+ taskDetailsVo.getDelayCompleteCount(), taskDetailsVo.getTotalCount());
|
|
|
+ // 保存考评分数
|
|
|
for (EvaluationItemVo item : itemEntityList) {
|
|
|
// 不是当前季度的,过滤
|
|
|
if (item.getCycle().indexOf(cycle.toString()) == -1 || item.getType() == null) {
|
|
@@ -226,18 +233,23 @@ public class EvaluationResultJob {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @Author lihui
|
|
|
- * @Description 计算用户完成任务情况
|
|
|
- * @Date 17:38 2021/5/10
|
|
|
- * @Param [userId, tenantId, startTime, endTime,valueCondition:延期时间多少分钟内算正常]
|
|
|
- * @return void
|
|
|
- **/
|
|
|
+ /***
|
|
|
+ * 计算用户完成任务情况
|
|
|
+ * @author lihui
|
|
|
+ * @date 15:51 2021/5/21
|
|
|
+ * @param userId : 用户ID
|
|
|
+ * @param tenantId : 租户ID
|
|
|
+ * @param startTime : 开始时间
|
|
|
+ * @param endTime : 结束时间
|
|
|
+ * @param valueCondition : 条件值
|
|
|
+ * @return com.huaxu.evaluation.entity.EvaluationResultTaskEntity
|
|
|
+ **/
|
|
|
private EvaluationResultTaskEntity calculationTaskInfo(Integer userId, String tenantId, String startTime, String endTime, BigDecimal valueCondition) {
|
|
|
int page = 1;
|
|
|
+ boolean completedBoolean = false;
|
|
|
IPage<WorkOrderManageDto> iPage = null;
|
|
|
+ int conditionInt = valueCondition == null ? 0 : valueCondition.intValue();
|
|
|
EvaluationResultTaskEntity taskEntity = new EvaluationResultTaskEntity();
|
|
|
- boolean completedBoolean = false;
|
|
|
while (true) {
|
|
|
iPage = new Page<>(page, 200);
|
|
|
// 查询该用户的工单和任务
|
|
@@ -251,15 +263,15 @@ public class EvaluationResultJob {
|
|
|
taskEntity.setCompleteCount(taskEntity.getCompleteCount() + (completedBoolean ? 1 : 0));
|
|
|
taskEntity.setNoCompleteCount(taskEntity.getNoCompleteCount() + (!completedBoolean ? 1 : 0));
|
|
|
// 计算完成的是否属于延期完成
|
|
|
- if (completedBoolean && isDelay(dto, EvaluationUtil.minute(dto.getDateLimit()) + valueCondition.intValue())) {
|
|
|
+ if (completedBoolean && isDelay(dto, EvaluationUtil.minute(dto.getDateLimit()) + conditionInt)) {
|
|
|
taskEntity.setDelayCompleteCount(taskEntity.getDelayCompleteCount() + 1);
|
|
|
}
|
|
|
}
|
|
|
page ++;
|
|
|
}
|
|
|
// 计算完成率和延期率
|
|
|
- taskEntity.setCompletionRate(EvaluationUtil.divide(taskEntity.getCompleteCount(),taskEntity.getTotalCount()));
|
|
|
- taskEntity.setDelayRate(EvaluationUtil.divide(taskEntity.getDelayCompleteCount(),taskEntity.getTotalCount()));
|
|
|
+ taskEntity.setCompletionRate(EvaluationUtil.divide(taskEntity.getCompleteCount(),taskEntity.getTotalCount(), 4));
|
|
|
+ taskEntity.setDelayRate(EvaluationUtil.divide(taskEntity.getDelayCompleteCount(),taskEntity.getTotalCount(), 4));
|
|
|
taskEntity.setTenantId(tenantId);
|
|
|
taskEntity.setStatus(1);
|
|
|
taskEntity.setDateCreate(new Date());
|
|
@@ -278,8 +290,8 @@ public class EvaluationResultJob {
|
|
|
* 完成时间:finish_date
|
|
|
* @author lihui
|
|
|
* @date 10:56 2021/5/20
|
|
|
- * @param dto :
|
|
|
- * @param addMinute :
|
|
|
+ * @param dto : 请求参数
|
|
|
+ * @param addMinute : 增加的分钟数
|
|
|
* @return boolean
|
|
|
**/
|
|
|
private boolean isDelay(WorkOrderManageDto dto, int addMinute){
|
|
@@ -348,14 +360,6 @@ public class EvaluationResultJob {
|
|
|
return resultEntity;
|
|
|
}
|
|
|
|
|
|
- private Map<Long, UserEntity> toMap(List<Integer> userIds){
|
|
|
- List<UserEntity> userEntities = userCenterClient.findUserIdsByUserIds(EvaluationUtil.toLong(userIds));
|
|
|
- if (CollectionUtil.isEmpty(userEntities)){
|
|
|
- return null;
|
|
|
- }
|
|
|
- return userEntities.stream().collect(Collectors.toMap(UserEntity::getId, a -> a,(k1, k2)->k1));
|
|
|
- }
|
|
|
-
|
|
|
/***
|
|
|
* 获取对应的分数
|
|
|
* @Author lihui
|
|
@@ -410,4 +414,5 @@ public class EvaluationResultJob {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|