feat(todo): 新增问题工单待办数量统计及已读状态管理
- 重构待办事项查询接口,支持返回问题工单待办详情VO - 增加待办事项实体和VO的已读状态字段 - 实现查询待办列表时自动标记未读待办为已读 - 新增接口获取当前用户已读和未读的待办数量 - 对应Mapper添加获取待办数量SQL查询 - 调整控制层提供待办数量的访问接口 - 删除与问题工单待办无关的旧待办项相关代码和依赖
This commit is contained in:
parent
45917f2501
commit
96ab6d14f8
|
|
@ -5,7 +5,8 @@ import com.nflg.qms.admin.service.QmsIssueTicketTodoControllerService;
|
|||
import com.nflg.wms.common.pojo.ApiResult;
|
||||
import com.nflg.wms.common.pojo.PageData;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO;
|
||||
import com.nflg.wms.starter.BaseController;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
|
@ -25,8 +26,16 @@ public class QmsIssueTicketTodoController extends BaseController {
|
|||
* 查询
|
||||
*/
|
||||
@PostMapping("search")
|
||||
public ApiResult<PageData<QmsTodoItemVO>> search(@Valid @RequestBody QmsTodoItemSearchQO request) {
|
||||
IPage<QmsTodoItemVO> page = qmsIssueTicketTodoControllerService.search(request);
|
||||
public ApiResult<PageData<QmsIssueTicketToDoVO>> search(@Valid @RequestBody QmsTodoItemSearchQO request) {
|
||||
IPage<QmsIssueTicketToDoVO> page = qmsIssueTicketTodoControllerService.search(request);
|
||||
return ApiResult.success(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待办数量
|
||||
*/
|
||||
@GetMapping("getCount")
|
||||
public ApiResult<IssueTicketTodoNotReadNumVO> getCount(){
|
||||
return ApiResult.success(qmsIssueTicketTodoControllerService.getCount());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketService;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketToDoService;
|
||||
import com.nflg.wms.repository.service.IQmsTodoItemService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
@ -28,10 +28,11 @@ public class QmsIssueTicketTodoControllerService {
|
|||
/**
|
||||
* 分页查询待办事项列表
|
||||
*/
|
||||
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
||||
IPage<QmsTodoItemVO> pageData = issueTicketToDoService.search(request);
|
||||
public IPage<QmsIssueTicketToDoVO> search(QmsTodoItemSearchQO request) {
|
||||
IPage<QmsIssueTicketToDoVO> pageData = issueTicketToDoService.search(request);
|
||||
if (CollectionUtil.isNotEmpty(pageData.getRecords())) {
|
||||
pageData.getRecords().forEach(item -> {
|
||||
item.setIsRead(true);
|
||||
if (item.getStatus() != 2) {
|
||||
item.setCurrentHandleUserName(
|
||||
StrUtil.join(",",
|
||||
|
|
@ -50,4 +51,8 @@ public class QmsIssueTicketTodoControllerService {
|
|||
}
|
||||
return pageData;
|
||||
}
|
||||
|
||||
public IssueTicketTodoNotReadNumVO getCount() {
|
||||
return issueTicketToDoService.getCount(UserUtil.getUserId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.nflg.wms.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class IssueTicketTodoNotReadNumVO {
|
||||
|
||||
/**
|
||||
* 已读数量
|
||||
*/
|
||||
private Integer readNum;
|
||||
|
||||
/**
|
||||
* 未读数量
|
||||
*/
|
||||
private Integer unreadNum;
|
||||
}
|
||||
|
|
@ -8,7 +8,7 @@ import java.time.LocalDateTime;
|
|||
* 待办事项 信息VO
|
||||
*/
|
||||
@Data
|
||||
public class QmsTodoItemVO {
|
||||
public class QmsIssueTicketToDoVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
|
|
@ -61,4 +61,9 @@ public class QmsTodoItemVO {
|
|||
* 类型:0=处理主工单,1=处理工单子项;2=审核工单子项
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 是否已读
|
||||
*/
|
||||
private Boolean isRead;
|
||||
}
|
||||
|
|
@ -39,4 +39,9 @@ public class QmsIssueTicketToDo implements Serializable {
|
|||
* 处理人ID
|
||||
*/
|
||||
private Long handlerUserId;
|
||||
|
||||
/**
|
||||
* 是否已读
|
||||
*/
|
||||
private Boolean isRead;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketToDo;
|
||||
|
||||
/**
|
||||
|
|
@ -12,5 +13,7 @@ import com.nflg.wms.repository.entity.QmsIssueTicketToDo;
|
|||
*/
|
||||
public interface QmsIssueTicketToDoMapper extends BaseMapper<QmsIssueTicketToDo> {
|
||||
|
||||
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request, Long userId, Page<Object> page);
|
||||
IPage<QmsIssueTicketToDoVO> search(QmsTodoItemSearchQO request, Long userId, Page<Object> page);
|
||||
|
||||
IssueTicketTodoNotReadNumVO getCount(Long userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
package com.nflg.wms.repository.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ package com.nflg.wms.repository.service;
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketToDo;
|
||||
|
||||
/**
|
||||
|
|
@ -14,7 +15,9 @@ public interface IQmsIssueTicketToDoService extends IService<QmsIssueTicketToDo>
|
|||
/**
|
||||
* 分页查询待办事项列表
|
||||
*/
|
||||
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request);
|
||||
IPage<QmsIssueTicketToDoVO> search(QmsTodoItemSearchQO request);
|
||||
|
||||
void processed(Long id);
|
||||
|
||||
IssueTicketTodoNotReadNumVO getCount(Long userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,8 @@
|
|||
package com.nflg.wms.repository.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 待办事项 服务类
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,18 +1,19 @@
|
|||
package com.nflg.wms.repository.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.repository.entity.QmsIssueTicketToDo;
|
||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
||||
import com.nflg.wms.repository.mapper.QmsIssueTicketToDoMapper;
|
||||
import com.nflg.wms.repository.service.IQmsIssueTicketToDoService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 质量问题工单待办 ServiceImpl
|
||||
|
|
@ -23,8 +24,22 @@ public class QmsIssueTicketToDoServiceImpl
|
|||
implements IQmsIssueTicketToDoService {
|
||||
|
||||
@Override
|
||||
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
||||
return baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
||||
public IPage<QmsIssueTicketToDoVO> search(QmsTodoItemSearchQO request) {
|
||||
IPage<QmsIssueTicketToDoVO> pageData = baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
||||
if (CollectionUtil.isNotEmpty(pageData.getRecords())) {
|
||||
List<Long> ticketIds = pageData.getRecords()
|
||||
.stream()
|
||||
.filter(todo -> !todo.getIsRead())
|
||||
.map(QmsIssueTicketToDoVO::getId)
|
||||
.toList();
|
||||
if (CollectionUtil.isNotEmpty(ticketIds)) {
|
||||
lambdaUpdate()
|
||||
.in(QmsIssueTicketToDo::getTicketId, ticketIds)
|
||||
.set(QmsIssueTicketToDo::getIsRead, true)
|
||||
.update();
|
||||
}
|
||||
}
|
||||
return pageData;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -36,4 +51,9 @@ public class QmsIssueTicketToDoServiceImpl
|
|||
.eq(QmsIssueTicketToDo::getHasProcessed, false)
|
||||
.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IssueTicketTodoNotReadNumVO getCount(Long userId) {
|
||||
return baseMapper.getCount(userId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,19 +1,11 @@
|
|||
package com.nflg.wms.repository.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.QmsTodoItemVO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
||||
import com.nflg.wms.repository.mapper.QmsTodoItemMapper;
|
||||
import com.nflg.wms.repository.service.IQmsTodoItemService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 待办事项 服务实现类
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,13 +2,14 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.nflg.wms.repository.mapper.QmsIssueTicketToDoMapper">
|
||||
|
||||
<select id="search" resultType="com.nflg.wms.common.pojo.vo.QmsTodoItemVO">
|
||||
<select id="search" resultType="com.nflg.wms.common.pojo.vo.QmsIssueTicketToDoVO">
|
||||
SELECT
|
||||
CASE
|
||||
WHEN vit."type" = 0 THEN 0
|
||||
WHEN vit.handler_user_id = #{userId} THEN 1
|
||||
WHEN vit.approval_user_id = #{userId} THEN 2
|
||||
END AS type,
|
||||
itd.is_read,
|
||||
vit.*
|
||||
FROM qms_issue_ticket_todo itd
|
||||
INNER JOIN v_qms_issue_ticket vit ON itd.ticket_id = vit.ticket_id
|
||||
|
|
@ -31,4 +32,10 @@
|
|||
ORDER BY itd.id DESC
|
||||
</select>
|
||||
|
||||
<select id="getCount" resultType="com.nflg.wms.common.pojo.vo.IssueTicketTodoNotReadNumVO">
|
||||
SELECT SUM(CASE is_read WHEN true THEN 1 ELSE 0 END) AS "readNum",
|
||||
SUM(CASE is_read WHEN true THEN 0 ELSE 1 END) AS "unreadNum"
|
||||
FROM qms_issue_ticket_todo
|
||||
WHERE handler_user_id = #{userId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue