Merge remote-tracking branch 'origin/qms/develop' into qms/develop
This commit is contained in:
commit
3adf1d11cd
|
|
@ -92,7 +92,6 @@ public class QmsCoaTaskController extends BaseController {
|
||||||
// 推送COA通知
|
// 推送COA通知
|
||||||
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
||||||
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(dictionaryItemServiceId)
|
.setSourceTypeId(dictionaryItemServiceId)
|
||||||
.setSourceId(coaTaskService.lambdaQuery().eq(QmsCoaTask::getMaterialId,qo.getMaterialNo()).one().getId())
|
.setSourceId(coaTaskService.lambdaQuery().eq(QmsCoaTask::getMaterialId,qo.getMaterialNo()).one().getId())
|
||||||
.setCreateUserId(UserUtil.getUserId())
|
.setCreateUserId(UserUtil.getUserId())
|
||||||
|
|
@ -120,7 +119,6 @@ public class QmsCoaTaskController extends BaseController {
|
||||||
for (Long taskId : ids) {
|
for (Long taskId : ids) {
|
||||||
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
||||||
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(dictionaryItemServiceId)
|
.setSourceTypeId(dictionaryItemServiceId)
|
||||||
.setSourceId(taskId)
|
.setSourceId(taskId)
|
||||||
.setCreateUserId(currentUserId)
|
.setCreateUserId(currentUserId)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.nflg.qms.admin.controller;
|
package com.nflg.qms.admin.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.nflg.qms.admin.service.TodoItemControllerService;
|
import com.nflg.qms.admin.service.QmsIssueTicketTodoControllerService;
|
||||||
import com.nflg.wms.common.pojo.ApiResult;
|
import com.nflg.wms.common.pojo.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
import com.nflg.wms.common.pojo.PageData;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
import com.nflg.wms.common.pojo.qo.QmsTodoItemSearchQO;
|
||||||
|
|
@ -11,33 +11,22 @@ import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 待办事项
|
* 质量问题工单待办
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/todo-item")
|
@RequestMapping("/ticket-todo-item")
|
||||||
public class TodoItemController extends BaseController {
|
public class QmsIssueTicketTodoController extends BaseController {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TodoItemControllerService todoItemControllerService;
|
private QmsIssueTicketTodoControllerService qmsIssueTicketTodoControllerService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询待办事项列表
|
* 查询
|
||||||
*/
|
*/
|
||||||
@PostMapping("search")
|
@PostMapping("search")
|
||||||
public ApiResult<PageData<QmsTodoItemVO>> search(@Valid @RequestBody QmsTodoItemSearchQO request) {
|
public ApiResult<PageData<QmsTodoItemVO>> search(@Valid @RequestBody QmsTodoItemSearchQO request) {
|
||||||
IPage<QmsTodoItemVO> page = todoItemControllerService.search(request);
|
IPage<QmsTodoItemVO> page = qmsIssueTicketTodoControllerService.search(request);
|
||||||
return ApiResult.success(page);
|
return ApiResult.success(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量标记已读
|
|
||||||
*/
|
|
||||||
@PostMapping("mark-as-read")
|
|
||||||
public ApiResult<Void> markAsRead(@RequestBody List<Long> ids) {
|
|
||||||
todoItemControllerService.markAsRead(ids);
|
|
||||||
return ApiResult.success();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
@ -43,7 +43,6 @@ public class TestController extends BaseController {
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(dictionaryItemServiceId)).throwMessage("消息类型不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(dictionaryItemServiceId)).throwMessage("消息类型不存在");
|
||||||
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
QmsTodoItem qmsTodoItem = new QmsTodoItem()
|
||||||
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
.setCode(basdeSerialNumberControllerService.generateSerialNumber(32))
|
||||||
.setIsRead(false)
|
|
||||||
.setSourceTypeId(dictionaryItemServiceId)
|
.setSourceTypeId(dictionaryItemServiceId)
|
||||||
.setSourceId(0L)
|
.setSourceId(0L)
|
||||||
.setCreateUserId(UserUtil.getUserId())
|
.setCreateUserId(UserUtil.getUserId())
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ public class QmsIssueTicketControllerService {
|
||||||
private IUserService userService;
|
private IUserService userService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IQmsTodoItemService todoItemService;
|
private IQmsIssueTicketToDoService issueTicketToDoService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IDictionaryItemService dictionaryItemService;
|
private IDictionaryItemService dictionaryItemService;
|
||||||
|
|
@ -190,7 +190,7 @@ public class QmsIssueTicketControllerService {
|
||||||
|
|
||||||
// 5. 为每个处理人创建处理记录并推送待办
|
// 5. 为每个处理人创建处理记录并推送待办
|
||||||
List<QmsIssueTicketProcess> processes = new ArrayList<>();
|
List<QmsIssueTicketProcess> processes = new ArrayList<>();
|
||||||
List<QmsTodoItem> todoItems = new ArrayList<>();
|
List<QmsIssueTicketToDo> todoItems = new ArrayList<>();
|
||||||
|
|
||||||
for (Long handlerUserId : request.getHandlerUserIds()) {
|
for (Long handlerUserId : request.getHandlerUserIds()) {
|
||||||
User handlerUser = handlerUserMap.get(handlerUserId);
|
User handlerUser = handlerUserMap.get(handlerUserId);
|
||||||
|
|
@ -203,14 +203,9 @@ public class QmsIssueTicketControllerService {
|
||||||
processes.add(process);
|
processes.add(process);
|
||||||
|
|
||||||
// 创建待办消息
|
// 创建待办消息
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setCode(ticket.getTicketNo())
|
.setTicketId(ticket.getId())
|
||||||
.setIsRead(false)
|
.setHandlerUserId(handlerUserId);
|
||||||
.setSourceTypeId(sourceTypeId)
|
|
||||||
.setSourceId(process.getId()) // 使用处理记录的ID
|
|
||||||
.setCreateUserId(handlerUserId)
|
|
||||||
.setCreateUserName(handlerUser.getUserName())
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItems.add(todoItem);
|
todoItems.add(todoItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,12 +213,12 @@ public class QmsIssueTicketControllerService {
|
||||||
issueTicketProcessService.saveBatch(processes);
|
issueTicketProcessService.saveBatch(processes);
|
||||||
|
|
||||||
// 7. 更新处理记录中的sourceId(因为saveBatch后才有ID)
|
// 7. 更新处理记录中的sourceId(因为saveBatch后才有ID)
|
||||||
for (int i = 0; i < processes.size(); i++) {
|
// for (int i = 0; i < processes.size(); i++) {
|
||||||
todoItems.get(i).setSourceId(processes.get(i).getId());
|
// todoItems.get(i).setSourceId(processes.get(i).getId());
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 8. 批量推送待办消息
|
// 8. 批量推送待办消息
|
||||||
todoItemService.saveBatch(todoItems);
|
issueTicketToDoService.saveBatch(todoItems);
|
||||||
|
|
||||||
// 9. 如果工单状态是待流转(0),更新为处理中(1)
|
// 9. 如果工单状态是待流转(0),更新为处理中(1)
|
||||||
if (ticket.getStatus() != null && ticket.getStatus() == 0) {
|
if (ticket.getStatus() != null && ticket.getStatus() == 0) {
|
||||||
|
|
@ -555,6 +550,8 @@ public class QmsIssueTicketControllerService {
|
||||||
}
|
}
|
||||||
issueTicketService.updateById(entity);
|
issueTicketService.updateById(entity);
|
||||||
|
|
||||||
|
issueTicketToDoService.processed(entity.getId());
|
||||||
|
|
||||||
if (request.getApprovalStatus() != 5) {
|
if (request.getApprovalStatus() != 5) {
|
||||||
wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus());
|
wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus());
|
||||||
}
|
}
|
||||||
|
|
@ -1034,16 +1031,12 @@ public class QmsIssueTicketControllerService {
|
||||||
List<User> users = userService.lambdaQuery()
|
List<User> users = userService.lambdaQuery()
|
||||||
.eq(User::getPurchasingGroup, detail.getPurchaseGroup())
|
.eq(User::getPurchasingGroup, detail.getPurchaseGroup())
|
||||||
.list();
|
.list();
|
||||||
List<QmsTodoItem> todoItems = users.stream().map(user -> new QmsTodoItem()
|
List<QmsIssueTicketToDo> todoItems = users.stream().map(user -> new QmsIssueTicketToDo()
|
||||||
.setCode(detail.getTaskNo())
|
.setTicketId(entity.getId())
|
||||||
.setSourceTypeId(dictionaryItemService.getIdByCode("MessageType", "IncomingMaterialInspectionApproval"))
|
.setHandlerUserId(user.getId())
|
||||||
.setSourceId(entity.getId())
|
|
||||||
.setCreateUserId(user.getId())
|
|
||||||
.setCreateUserName(user.getUserName())
|
|
||||||
.setCreateTime(LocalDateTime.now())
|
|
||||||
).toList();
|
).toList();
|
||||||
if (CollectionUtil.isNotEmpty(todoItems)) {
|
if (CollectionUtil.isNotEmpty(todoItems)) {
|
||||||
todoItemService.saveBatch(todoItems);
|
issueTicketToDoService.saveBatch(todoItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,19 +6,8 @@ import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessAddQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
import com.nflg.wms.common.pojo.qo.QmsIssueTicketProcessDraftQO;
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.Department;
|
import com.nflg.wms.repository.entity.*;
|
||||||
import com.nflg.wms.repository.entity.QmsIssueTicket;
|
import com.nflg.wms.repository.service.*;
|
||||||
import com.nflg.wms.repository.entity.QmsIssueTicketProcess;
|
|
||||||
import com.nflg.wms.repository.entity.QmsTodoItem;
|
|
||||||
import com.nflg.wms.repository.entity.User;
|
|
||||||
import com.nflg.wms.repository.entity.UserInterior;
|
|
||||||
import com.nflg.wms.repository.service.IDepartmentService;
|
|
||||||
import com.nflg.wms.repository.service.IDictionaryItemService;
|
|
||||||
import com.nflg.wms.repository.service.IQmsIssueTicketProcessService;
|
|
||||||
import com.nflg.wms.repository.service.IQmsIssueTicketService;
|
|
||||||
import com.nflg.wms.repository.service.IQmsTodoItemService;
|
|
||||||
import com.nflg.wms.repository.service.IUserInteriorService;
|
|
||||||
import com.nflg.wms.repository.service.IUserService;
|
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
|
@ -53,7 +42,7 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
private IQmsIssueTicketService issueTicketService;
|
private IQmsIssueTicketService issueTicketService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IQmsTodoItemService todoItemService;
|
private IQmsIssueTicketToDoService issueTicketToDoService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IDictionaryItemService dictionaryItemService;
|
private IDictionaryItemService dictionaryItemService;
|
||||||
|
|
@ -99,15 +88,10 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
// 推送待办消息
|
// 推送待办消息
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "PDIDefectiveProductHandling");
|
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "PDIDefectiveProductHandling");
|
||||||
User handlerUser = userService.getById(handlerUserId);
|
User handlerUser = userService.getById(handlerUserId);
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setCode(ticketNo)
|
.setTicketId(issueTicketId)
|
||||||
.setIsRead(false)
|
.setHandlerUserId(handlerUserId);
|
||||||
.setSourceTypeId(sourceTypeId)
|
issueTicketToDoService.save(todoItem);
|
||||||
.setSourceId(processId)
|
|
||||||
.setCreateUserId(handlerUserId)
|
|
||||||
.setCreateUserName(handlerUser != null ? handlerUser.getUserName() : null)
|
|
||||||
.setCreateTime(LocalDateTime.now());
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long doAdd(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds) {
|
private Long doAdd(Long issueTicketId, Long handlerUserId, List<Long> taskResultIds) {
|
||||||
|
|
@ -180,16 +164,10 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
if (userInterior != null && userInterior.getDeptId() != null) {
|
if (userInterior != null && userInterior.getDeptId() != null) {
|
||||||
Department department = departmentService.getById(userInterior.getDeptId());
|
Department department = departmentService.getById(userInterior.getDeptId());
|
||||||
if (department != null && department.getHeadUserId() != null) {
|
if (department != null && department.getHeadUserId() != null) {
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder");
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
.setTicketId(ticket.getId())
|
||||||
.setCode(ticket.getTicketNo())
|
.setHandlerUserId(department.getHeadUserId());
|
||||||
.setIsRead(false)
|
issueTicketToDoService.save(todoItem);
|
||||||
.setSourceTypeId(sourceTypeId)
|
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(department.getHeadUserId())
|
|
||||||
.setCreateUserName(department.getHeadUserName())
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -229,15 +207,10 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
// 驳回:推送待办给处理人
|
// 驳回:推送待办给处理人
|
||||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder");
|
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder");
|
||||||
User handler = userService.getById(process.getHandlerUserId());
|
User handler = userService.getById(process.getHandlerUserId());
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setCode(ticket.getTicketNo())
|
.setTicketId(ticket.getId())
|
||||||
.setIsRead(false)
|
.setHandlerUserId(process.getHandlerUserId());
|
||||||
.setSourceTypeId(sourceTypeId)
|
issueTicketToDoService.save(todoItem);
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(process.getHandlerUserId())
|
|
||||||
.setCreateUserName(handler != null ? handler.getUserName() : null)
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
} else if (leaderApprovalResult == 1) {
|
} else if (leaderApprovalResult == 1) {
|
||||||
// 同意:检查同一工单下所有处理记录是否都已完成
|
// 同意:检查同一工单下所有处理记录是否都已完成
|
||||||
Long issueTicketId = process.getIssueTicketId();
|
Long issueTicketId = process.getIssueTicketId();
|
||||||
|
|
@ -293,15 +266,10 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
if (request.getApprovalStatus() == 1) {
|
if (request.getApprovalStatus() == 1) {
|
||||||
// 驳回:推送待办给工单创建人
|
// 驳回:推送待办给工单创建人
|
||||||
User creator = userService.getById(ticket.getCreateUserId());
|
User creator = userService.getById(ticket.getCreateUserId());
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setCode(ticket.getTicketNo())
|
.setTicketId(ticket.getId())
|
||||||
.setIsRead(false)
|
.setHandlerUserId(ticket.getCreateUserId());
|
||||||
.setSourceTypeId(sourceTypeId)
|
issueTicketToDoService.save(todoItem);
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(ticket.getCreateUserId())
|
|
||||||
.setCreateUserName(creator != null ? creator.getUserName() : null)
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
} else if (request.getApprovalStatus() == 0) {
|
} else if (request.getApprovalStatus() == 0) {
|
||||||
// 通过:推送给当前用户所在部门负责人
|
// 通过:推送给当前用户所在部门负责人
|
||||||
Long currentUserId = UserUtil.getUserId();
|
Long currentUserId = UserUtil.getUserId();
|
||||||
|
|
@ -311,17 +279,14 @@ public class QmsIssueTicketProcessControllerService {
|
||||||
if (userInterior != null && userInterior.getDeptId() != null) {
|
if (userInterior != null && userInterior.getDeptId() != null) {
|
||||||
Department department = departmentService.getById(userInterior.getDeptId());
|
Department department = departmentService.getById(userInterior.getDeptId());
|
||||||
if (department != null && department.getHeadUserId() != null) {
|
if (department != null && department.getHeadUserId() != null) {
|
||||||
QmsTodoItem todoItem = new QmsTodoItem()
|
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||||
.setCode(ticket.getTicketNo())
|
.setTicketId(ticket.getId())
|
||||||
.setIsRead(false)
|
.setHandlerUserId(department.getHeadUserId());
|
||||||
.setSourceTypeId(sourceTypeId)
|
issueTicketToDoService.save(todoItem);
|
||||||
.setSourceId(process.getId())
|
|
||||||
.setCreateUserId(department.getHeadUserId())
|
|
||||||
.setCreateUserName(department.getHeadUserName())
|
|
||||||
.setCreateTime(now);
|
|
||||||
todoItemService.save(todoItem);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issueTicketToDoService.processed(ticket.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.nflg.qms.admin.service;
|
||||||
|
|
||||||
|
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.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待办事项业务逻辑
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class QmsIssueTicketTodoControllerService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IQmsIssueTicketToDoService issueTicketToDoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IQmsIssueTicketProcessService issueTicketProcessService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询待办事项列表
|
||||||
|
*/
|
||||||
|
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
||||||
|
IPage<QmsTodoItemVO> pageData = issueTicketToDoService.search(request);
|
||||||
|
if (CollectionUtil.isNotEmpty(pageData.getRecords())) {
|
||||||
|
pageData.getRecords().forEach(item -> {
|
||||||
|
if (item.getStatus() != 2) {
|
||||||
|
item.setCurrentHandleUserName(
|
||||||
|
StrUtil.join(",",
|
||||||
|
issueTicketProcessService.lambdaQuery()
|
||||||
|
.select(QmsIssueTicketProcess::getHandlerUserName)
|
||||||
|
.eq(QmsIssueTicketProcess::getIssueTicketId, item.getTicketId())
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(QmsIssueTicketProcess::getHandlerUserName)
|
||||||
|
.toList()
|
||||||
|
)
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return pageData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
package com.nflg.qms.admin.service;
|
|
||||||
|
|
||||||
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.repository.service.IQmsTodoItemService;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待办事项业务逻辑
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class TodoItemControllerService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IQmsTodoItemService todoItemService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询待办事项列表
|
|
||||||
*/
|
|
||||||
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
|
||||||
return todoItemService.search(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量标记已读
|
|
||||||
*/
|
|
||||||
public void markAsRead(List<Long> ids) {
|
|
||||||
todoItemService.markAsRead(ids);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,22 +11,17 @@ import lombok.EqualsAndHashCode;
|
||||||
public class QmsTodoItemSearchQO extends SearchBaseQO {
|
public class QmsTodoItemSearchQO extends SearchBaseQO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编号
|
* 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检
|
||||||
*/
|
*/
|
||||||
private String code;
|
private Short sourceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标题
|
* 工单标题
|
||||||
*/
|
*/
|
||||||
private String title;
|
private String ticketTitle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 来源类型ID
|
* 是否已处理
|
||||||
*/
|
*/
|
||||||
private Long sourceTypeId;
|
private Boolean hasProcessed;
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否已读
|
|
||||||
*/
|
|
||||||
private Boolean isRead;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,62 +13,52 @@ public class QmsTodoItemVO {
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 编号
|
* 工单id
|
||||||
*/
|
*/
|
||||||
private String code;
|
private Long ticketId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标题
|
* 工单编号
|
||||||
*/
|
*/
|
||||||
private String title;
|
private String ticketNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 来源类型ID
|
* 工单标题
|
||||||
*/
|
*/
|
||||||
private Long sourceTypeId;
|
private String ticketTitle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 来源类型名称
|
* 来源类型:0=IQC检测任务,1=PDI检测任务,2=巡检
|
||||||
*/
|
*/
|
||||||
private String sourceTypeName;
|
private Short sourceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 来源ID
|
* 流程发起人
|
||||||
*/
|
|
||||||
private Long sourceId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否已读
|
|
||||||
*/
|
|
||||||
private Boolean isRead;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人ID
|
|
||||||
*/
|
|
||||||
private Long createUserId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建人姓名
|
|
||||||
*/
|
*/
|
||||||
private String createUserName;
|
private String createUserName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 流程发起时间
|
||||||
*/
|
*/
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新人ID
|
* 当前节点处理人
|
||||||
*/
|
*/
|
||||||
private Long updateUserId;
|
private String currentHandleUserName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新人姓名
|
* 流程结束时间
|
||||||
*/
|
*/
|
||||||
private String updateUserName;
|
private LocalDateTime completeTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新时间
|
* 状态:0=待流转,1=处理中,2=已完成
|
||||||
*/
|
*/
|
||||||
private LocalDateTime updateTime;
|
private Short status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型:0=处理主工单,1=处理工单子项;2=审核工单子项
|
||||||
|
*/
|
||||||
|
private Integer type;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.nflg.wms.repository.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 质量问题工单待办表
|
||||||
|
* @since 2026
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@ToString
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("qms_issue_ticket_todo")
|
||||||
|
public class QmsIssueTicketToDo implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.ASSIGN_ID)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单ID
|
||||||
|
*/
|
||||||
|
private Long ticketId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否已处理
|
||||||
|
*/
|
||||||
|
private Boolean hasProcessed;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理人ID
|
||||||
|
*/
|
||||||
|
private Long handlerUserId;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
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.QmsIssueTicketToDo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 质量问题工单待办 Mapper 接口
|
||||||
|
*/
|
||||||
|
public interface QmsIssueTicketToDoMapper extends BaseMapper<QmsIssueTicketToDo> {
|
||||||
|
|
||||||
|
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request, Long userId, Page<Object> page);
|
||||||
|
}
|
||||||
|
|
@ -12,5 +12,4 @@ import com.nflg.wms.repository.entity.QmsTodoItem;
|
||||||
*/
|
*/
|
||||||
public interface QmsTodoItemMapper extends BaseMapper<QmsTodoItem> {
|
public interface QmsTodoItemMapper extends BaseMapper<QmsTodoItem> {
|
||||||
|
|
||||||
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request, Page<Object> page);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
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.QmsIssueTicketToDo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 质量问题工单待办 Service
|
||||||
|
*/
|
||||||
|
public interface IQmsIssueTicketToDoService extends IService<QmsIssueTicketToDo> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询待办事项列表
|
||||||
|
*/
|
||||||
|
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request);
|
||||||
|
|
||||||
|
void processed(Long id);
|
||||||
|
}
|
||||||
|
|
@ -13,14 +13,4 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public interface IQmsTodoItemService extends IService<QmsTodoItem> {
|
public interface IQmsTodoItemService extends IService<QmsTodoItem> {
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询待办事项列表
|
|
||||||
*/
|
|
||||||
IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量标记已读
|
|
||||||
* @param ids 待办事项ID列表
|
|
||||||
*/
|
|
||||||
void markAsRead(List<Long> ids);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
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.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 质量问题工单待办 ServiceImpl
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class QmsIssueTicketToDoServiceImpl
|
||||||
|
extends ServiceImpl<QmsIssueTicketToDoMapper, QmsIssueTicketToDo>
|
||||||
|
implements IQmsIssueTicketToDoService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
||||||
|
return baseMapper.search(request, UserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void processed(Long id) {
|
||||||
|
lambdaUpdate()
|
||||||
|
.set(QmsIssueTicketToDo::getHasProcessed, true)
|
||||||
|
.eq(QmsIssueTicketToDo::getTicketId, id)
|
||||||
|
.eq(QmsIssueTicketToDo::getHandlerUserId, UserUtil.getUserId())
|
||||||
|
.eq(QmsIssueTicketToDo::getHasProcessed, false)
|
||||||
|
.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -20,26 +20,4 @@ import java.util.List;
|
||||||
@Service
|
@Service
|
||||||
public class QmsTodoItemServiceImpl extends ServiceImpl<QmsTodoItemMapper, QmsTodoItem> implements IQmsTodoItemService {
|
public class QmsTodoItemServiceImpl extends ServiceImpl<QmsTodoItemMapper, QmsTodoItem> implements IQmsTodoItemService {
|
||||||
|
|
||||||
@Override
|
|
||||||
public IPage<QmsTodoItemVO> search(QmsTodoItemSearchQO request) {
|
|
||||||
return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markAsRead(List<Long> ids) {
|
|
||||||
if (ids == null || ids.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Long userId = UserUtil.getUserId();
|
|
||||||
String userName = UserUtil.getUserName();
|
|
||||||
LocalDateTime now = LocalDateTime.now();
|
|
||||||
lambdaUpdate()
|
|
||||||
.eq(QmsTodoItem::getIsRead, false)
|
|
||||||
.in(QmsTodoItem::getId, ids)
|
|
||||||
.set(QmsTodoItem::getIsRead, true)
|
|
||||||
.set(QmsTodoItem::getUpdateUserId, userId)
|
|
||||||
.set(QmsTodoItem::getUpdateUserName, userName)
|
|
||||||
.set(QmsTodoItem::getUpdateTime, now)
|
|
||||||
.update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!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
|
||||||
|
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,
|
||||||
|
vit.*
|
||||||
|
FROM qms_issue_ticket_todo itd
|
||||||
|
INNER JOIN v_qms_issue_ticket vit ON itd.ticket_id = vit.ticket_id
|
||||||
|
where itd.handler_user_id = #{userId} and (vit.handler_user_id=#{userId} or vit.approval_user_id=#{userId})
|
||||||
|
<if test="request.sourceType != null">
|
||||||
|
AND vit.source_type = #{request.sourceType}
|
||||||
|
</if>
|
||||||
|
<if test="request.ticketTitle != null and request.ticketTitle != ''">
|
||||||
|
AND vit.ticket_title ilike concat('%', #{request.ticketTitle}, '%')
|
||||||
|
</if>
|
||||||
|
<if test="request.hasProcessed != null">
|
||||||
|
AND itd.has_processed = #{request.hasProcessed}
|
||||||
|
</if>
|
||||||
|
<if test="request.startDate != null">
|
||||||
|
AND vit.create_time >= #{request.startDate}
|
||||||
|
</if>
|
||||||
|
<if test="request.endDate != null">
|
||||||
|
AND vit.create_time <= #{request.endDate}
|
||||||
|
</if>
|
||||||
|
ORDER BY itd.id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -2,43 +2,4 @@
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!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.QmsTodoItemMapper">
|
<mapper namespace="com.nflg.wms.repository.mapper.QmsTodoItemMapper">
|
||||||
|
|
||||||
<select id="search" resultType="com.nflg.wms.common.pojo.vo.QmsTodoItemVO">
|
|
||||||
SELECT t.id,
|
|
||||||
t.code,
|
|
||||||
t.title,
|
|
||||||
t.source_type_id,
|
|
||||||
di.name as source_type_name,
|
|
||||||
t.source_id,
|
|
||||||
t.is_read,
|
|
||||||
t.create_user_id,
|
|
||||||
t.create_user_name,
|
|
||||||
t.create_time,
|
|
||||||
t.update_user_id,
|
|
||||||
t.update_user_name,
|
|
||||||
t.update_time
|
|
||||||
FROM qms_todo_item t
|
|
||||||
LEFT JOIN dictionary_item di ON t.source_type_id = di.id
|
|
||||||
<where>
|
|
||||||
<if test="request.code != null and request.code != ''">
|
|
||||||
AND t.code ilike concat('%', #{request.code}, '%')
|
|
||||||
</if>
|
|
||||||
<if test="request.title != null and request.title != ''">
|
|
||||||
AND t.title ilike concat('%', #{request.title}, '%')
|
|
||||||
</if>
|
|
||||||
<if test="request.sourceTypeId != null">
|
|
||||||
AND t.source_type_id = #{request.sourceTypeId}
|
|
||||||
</if>
|
|
||||||
<if test="request.isRead != null">
|
|
||||||
AND t.is_read = #{request.isRead}
|
|
||||||
</if>
|
|
||||||
<if test="request.startDate != null">
|
|
||||||
AND t.create_time >= #{request.startDate}
|
|
||||||
</if>
|
|
||||||
<if test="request.endDate != null">
|
|
||||||
AND t.create_time <= #{request.endDate}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
ORDER BY t.id DESC
|
|
||||||
</select>
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor {
|
||||||
.setCode(task.getTaskNo())
|
.setCode(task.getTaskNo())
|
||||||
.setSourceTypeId(sourceTypeId)
|
.setSourceTypeId(sourceTypeId)
|
||||||
.setSourceId(task.getId())
|
.setSourceId(task.getId())
|
||||||
.setIsRead(false)
|
|
||||||
.setCreateUserId(leaderId)
|
.setCreateUserId(leaderId)
|
||||||
.setCreateUserName(leader != null ? leader.getUserName() : "未知")
|
.setCreateUserName(leader != null ? leader.getUserName() : "未知")
|
||||||
.setCreateTime(now);
|
.setCreateTime(now);
|
||||||
|
|
@ -205,7 +204,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor {
|
||||||
.setCode(task.getTaskNo())
|
.setCode(task.getTaskNo())
|
||||||
.setSourceTypeId(sourceTypeId)
|
.setSourceTypeId(sourceTypeId)
|
||||||
.setSourceId(task.getId())
|
.setSourceId(task.getId())
|
||||||
.setIsRead(false)
|
|
||||||
.setCreateUserId(inspectorId)
|
.setCreateUserId(inspectorId)
|
||||||
.setCreateUserName(inspector != null ? inspector.getUserName() : "未知")
|
.setCreateUserName(inspector != null ? inspector.getUserName() : "未知")
|
||||||
.setCreateTime(now);
|
.setCreateTime(now);
|
||||||
|
|
@ -221,7 +219,6 @@ public class PdiTaskOverdueNotifyProcessor implements BasicProcessor {
|
||||||
.setCode(task.getTaskNo())
|
.setCode(task.getTaskNo())
|
||||||
.setSourceTypeId(sourceTypeId)
|
.setSourceTypeId(sourceTypeId)
|
||||||
.setSourceId(task.getId())
|
.setSourceId(task.getId())
|
||||||
.setIsRead(false)
|
|
||||||
.setCreateUserId(assistantId)
|
.setCreateUserId(assistantId)
|
||||||
.setCreateUserName(assistant != null ? assistant.getUserName() : "未知")
|
.setCreateUserName(assistant != null ? assistant.getUserName() : "未知")
|
||||||
.setCreateTime(now);
|
.setCreateTime(now);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue