feat(examine): 优化考核任务配置更新和列表查询功能

- 新增 ConfigUpdateDto 类用于封装考核配置更新请求参数
- 在 ExamineTask 中添加 taskEditFlag 字段表示任务编辑状态
- 新增 ExamineTaskDto 类用于封装考核任务列表查询结果
- 优化考核任务列表查询逻辑,支持按用户 ID 查询
-重构考核配置更新方法,支持异步处理和状态更新
dev_1.1.0
chenhao 2025-01-08 15:21:05 +08:00
parent a8692d640f
commit db51747dc7
13 changed files with 195 additions and 9 deletions

View File

@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.*;
import tech.unissense.pms.business.examine.config.domain.ExamineConfig;
import tech.unissense.pms.business.examine.task.domain.ExamineTask;
import tech.unissense.pms.business.examine.task.domain.TaskQueryDto;
import tech.unissense.pms.business.examine.task.dto.ConfigUpdateDto;
import tech.unissense.pms.business.examine.task.service.TaskService;
import tech.unissense.pms.business.project.domain.Project;
import tech.unissense.pms.common.core.controller.BaseController;
@ -43,6 +44,14 @@ public class TaskSetUpController extends BaseController {
return success(taskService.listTask(queryDto));
}
@GetMapping("/listSelf")
public AjaxResult listTaskSelf(TaskQueryDto queryDto) {
if (queryDto.getUserId() == null) {
queryDto.setUserId(getUserId().intValue());
}
return success(taskService.listTaskSelf(queryDto));
}
// 编辑任务
@PutMapping("/update")
public AjaxResult updateTask( @RequestBody ExamineTask updatedTask) {
@ -55,8 +64,8 @@ public class TaskSetUpController extends BaseController {
// 编辑任务
@PutMapping("/config/update")
public AjaxResult updateConfigTask(@RequestBody List<ExamineConfig> list) {
return AjaxResult.success(taskService.updateConfigTask(list));
public AjaxResult updateConfigTask(@RequestBody ConfigUpdateDto dto) {
return AjaxResult.success(taskService.updateConfigTask(dto));
}
// 删除任务

View File

@ -3,7 +3,6 @@ package tech.unissense.pms.business.examine.detail.mapper;
import org.apache.ibatis.annotations.Mapper;
import tech.unissense.pms.business.examine.detail.domain.ExamineDetail;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
@ -77,5 +76,7 @@ public interface ExamineDetailMapper {
List<ExamineDetail> list(ExamineDetail examineDetail);
void deleteByExamineId(List<Integer> collect);
List<ExamineDetail> listByExamineId(List<Integer> idList);
}

View File

@ -4,7 +4,6 @@ import tech.unissense.pms.business.examine.config.domain.ExamineConfig;
import tech.unissense.pms.business.examine.config.enums.ReviewTypeEnum;
import tech.unissense.pms.business.examine.detail.domain.ExamineDetail;
import tech.unissense.pms.business.examine.detail.dto.ExamineDetailRequestDto;
import tech.unissense.pms.business.examine.detail.vo.ExamineConfigDetailVo;
import java.math.BigDecimal;
import java.util.List;
@ -73,4 +72,6 @@ public interface ExamineDetailService {
void deleteByExamineId( List<Integer> collect);
List<ExamineDetail> listByExamineId(List<Integer> taskId);
}

View File

@ -222,4 +222,9 @@ public class ExamineDetailServiceImpl implements ExamineDetailService {
public void deleteByExamineId(List<Integer> collect) {
examineDetailMapper.deleteByExamineId(collect);
}
@Override
public List<ExamineDetail> listByExamineId(List<Integer> idList) {
return examineDetailMapper.listByExamineId(idList);
}
}

View File

@ -37,6 +37,7 @@ public class ExamineTask implements Serializable {
*
*/
private Date endTime;
private Boolean taskEditFlag;
private List<Integer> userIdList;

View File

@ -0,0 +1,48 @@
package tech.unissense.pms.business.examine.task.domain;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* (ExamineTask)
*
* @author makejava
* @since 2025-01-02 10:18:29
*/
@Data
public class ExamineTaskDto implements Serializable {
private static final long serialVersionUID = -72205614757391876L;
private Integer id;
/**
*
*/
private String taskName;
private Integer peopleNumber;
private String peopleNumberDetail;
/**
* 0: 2:
*/
private Integer taskStatus;
/**
*
*/
private Date createTime;
/**
*
*/
private Date endTime;
private List<Integer> userIdList;
private Integer year;
private Integer examineStatusSelf;
private Integer examineId;
}

View File

@ -10,4 +10,5 @@ public class TaskQueryDto extends BaseEntity {
private Integer taskStatus;
private Integer year;
private Integer userId;
}

View File

@ -0,0 +1,25 @@
package tech.unissense.pms.business.examine.task.dto;
import lombok.Data;
import tech.unissense.pms.business.examine.config.domain.ExamineConfig;
import java.util.List;
/**
* @author : ch
* @version : 1.0
* @ClassName : ConfigUpdateDto
* @Description :
* @DATE : Created in 14:27 2025/1/8
* <pre> Copyright: Copyright(c) 2025 </pre>
* <pre> Company : </pre>
* Modification History:
* Date Author Version Discription
* --------------------------------------------------------------------------
* 2025/1/8 ch 1.0 Why & What is modified: <> *
*/
@Data
public class ConfigUpdateDto {
private List<ExamineConfig> examineConfigList;
private Integer taskId;
}

View File

@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Mapper;
import tech.unissense.pms.business.examine.task.domain.ExamineTask;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import tech.unissense.pms.business.examine.task.domain.ExamineTaskDto;
import tech.unissense.pms.business.examine.task.domain.TaskQueryDto;
import java.util.List;
@ -28,5 +29,9 @@ public interface ExamineTaskMapper {
List<ExamineTask> listTask(TaskQueryDto queryDto);
ExamineTask queryById(Integer taskId);
void updateTaskEditFlag(@Param("flag") boolean b, @Param("id") Integer taskId);
List<ExamineTaskDto> listTaskSelf(TaskQueryDto queryDto);
}

View File

@ -2,7 +2,9 @@ package tech.unissense.pms.business.examine.task.service;
import tech.unissense.pms.business.examine.config.domain.ExamineConfig;
import tech.unissense.pms.business.examine.task.domain.ExamineTask;
import tech.unissense.pms.business.examine.task.domain.ExamineTaskDto;
import tech.unissense.pms.business.examine.task.domain.TaskQueryDto;
import tech.unissense.pms.business.examine.task.dto.ConfigUpdateDto;
import java.util.List;
import java.util.Map;
@ -19,6 +21,7 @@ public interface TaskService {
List<ExamineConfig> getTarget(Integer id);
Map<Integer,List<ExamineTask>> listTask(TaskQueryDto queryDto);
Map<Integer,List<ExamineTaskDto>> listTaskSelf(TaskQueryDto queryDto);
List<ExamineConfig> updateConfigTask(List<ExamineConfig> list);
List<ExamineConfig> updateConfigTask(ConfigUpdateDto dto);
}

View File

@ -5,9 +5,14 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tech.unissense.pms.business.examine.config.domain.ExamineConfig;
import tech.unissense.pms.business.examine.config.enums.ReviewTypeEnum;
import tech.unissense.pms.business.examine.config.mapper.ExamineConfigMapper;
import tech.unissense.pms.business.examine.detail.domain.ExamineDetail;
import tech.unissense.pms.business.examine.detail.service.ExamineDetailService;
import tech.unissense.pms.business.examine.task.domain.ExamineTask;
import tech.unissense.pms.business.examine.task.domain.ExamineTaskDto;
import tech.unissense.pms.business.examine.task.domain.TaskQueryDto;
import tech.unissense.pms.business.examine.task.dto.ConfigUpdateDto;
import tech.unissense.pms.business.examine.task.mapper.ExamineTaskMapper;
import tech.unissense.pms.business.examine.task.service.TaskService;
import tech.unissense.pms.business.examine.user.domain.ExamineUser;
@ -16,10 +21,12 @@ import tech.unissense.pms.business.examine.user.service.impl.ExamineUserServiceI
import tech.unissense.pms.common.annotation.DataScope;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
@Slf4j
@ -37,6 +44,8 @@ public class TaskServiceImpl implements TaskService {
@Autowired
private ExamineUserServiceImpl examineUserService;
@Autowired
private ExamineDetailService detailService;
@Override
public ExamineTask addTask(ExamineTask task) {
@ -160,13 +169,71 @@ public class TaskServiceImpl implements TaskService {
}
@Override
public List<ExamineConfig> updateConfigTask(List<ExamineConfig> list) {
for (ExamineConfig examineConfig : list) {
public Map<Integer, List<ExamineTaskDto>> listTaskSelf(TaskQueryDto queryDto) {
List<ExamineTaskDto> examineTasks = examineTaskDao.listTaskSelf(queryDto);
LocalDateTime now = LocalDateTime.now();
for (ExamineTaskDto examineTask : examineTasks) {
// 获取endTime那一天的最大时间
LocalDateTime endTime = examineTask.getEndTime().toInstant().atZone(ZoneId.systemDefault())
.toLocalDate().atTime(LocalTime.MAX);
// 比较当前时间与localDateTime
if (now.isAfter(endTime)) {
// 当前时间大于localDateTime,已过期
examineTask.setTaskStatus(2);
} else {
// 当前时间小于localDateTime,进行中
examineTask.setTaskStatus(0);
}
}
return examineTasks.stream().collect(Collectors.groupingBy(ExamineTaskDto::getTaskStatus));
}
@Override
public List<ExamineConfig> updateConfigTask(ConfigUpdateDto dto) {
for (ExamineConfig examineConfig : dto.getExamineConfigList()) {
if (examineConfig.getId() == null) {
continue;
}
examineConfigMapper.update(examineConfig);
}
return list;
//重新计算分数 修改task
examineTaskDao.updateTaskEditFlag(false, dto.getTaskId());
CompletableFuture.runAsync(() -> {
ExamineUser examineUser = new ExamineUser();
examineUser.setTaskId(dto.getTaskId());
List<ExamineUser> list = userMapper.list(examineUser);
List<ExamineUser> completeList = new ArrayList<>();
List<Integer> idList = new ArrayList<>();
for (ExamineUser user : list) {
if (!"1".equals(user.getExamineStatus())) {
continue;
}
idList.add(user.getId());
completeList.add(user);
}
List<ExamineDetail> examineDetails = detailService.listByExamineId(idList);
Map<Integer, BigDecimal> manageScoreMap = detailService.calculateScoreByDetail(dto.getTaskId(), examineDetails, ReviewTypeEnum.MANAGE);
Map<Integer, BigDecimal> allScoreMap = detailService.calculateScoreByDetail(dto.getTaskId(), examineDetails, ReviewTypeEnum.ALL);
for (ExamineUser user : completeList) {
if ("1".equals(user.getExamineStatus())) {
//计算管理人员分数
BigDecimal manageScore = manageScoreMap.get(user.getId());
user.setManageScore(manageScore);
if ("1".equals(user.getExamineStatusSelf())) {
//计算总分数
BigDecimal allScore = allScoreMap.get(user.getId());
user.setScore(allScore);
}
}
}
userMapper.insertOrUpdateBatch(completeList);
examineTaskDao.updateTaskEditFlag(true, dto.getTaskId());
}).exceptionally(e -> {
log.error("update task edit flag error", e);
examineTaskDao.updateTaskEditFlag(true, dto.getTaskId());
return null;
});
return dto.getExamineConfigList();
}
}

View File

@ -75,6 +75,13 @@
</if>
</where>
</select>
<select id="listByExamineId" resultMap="ExamineDetailMap">
<include refid="base_query"/>
where examine_id in
<foreach collection="idList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">

View File

@ -10,6 +10,7 @@
<result property="taskStatus" column="task_status" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
<result property="taskEditFlag" column="task_edit_flag" jdbcType="BOOLEAN"/>
</resultMap>
<!-- 新增任务 -->
@ -41,7 +42,7 @@
order by create_time desc
</select>
<select id="listTask" resultMap="ExamineTaskMap">
select distinct t1.id,t1.task_name, t1.people_number, t1.people_number_detail, t1.task_status, t1.create_time, t1.end_time
select distinct t1.id,t1.task_name, t1.people_number,t1.task_edit_flag, t1.people_number_detail, t1.task_status, t1.create_time, t1.end_time
from pms_examine_task t1
left join pms_examine_user t2 on t1.id = t2.task_id
left join sys_user t3 on t2.user_id = t3.user_id
@ -71,6 +72,13 @@
SELECT * FROM pms_examine_task
WHERE id = #{id}
</select>
<select id="listTaskSelf" resultType="tech.unissense.pms.business.examine.task.domain.ExamineTaskDto">
select t1.examine_status_self,t1.id as examine_id,
t2.* from pms_examine_user t1
left join pms_examine_task t2
on t1.task_id=t2.id
where user_id=#{userId}
</select>
<update id="updateTask">
UPDATE pms_examine_task
@ -85,6 +93,11 @@
</set>
WHERE id = #{id}
</update>
<update id="updateTaskEditFlag">
update pms_examine_task
set task_edit_flag=#{flag}
where id=#{id}
</update>
<delete id="deleteTask">
DELETE FROM pms_examine_task