fix(ticket): 修复工单图片选择逻辑及相关状态更新
- 优化工单解决方案中图片选择权限控制,新增canSelectImage字段 - 调整图片获取逻辑,区分被驳回工单与正常工单的图片筛选方式 - 清理及设置图片标签,避免标签残留影响展示 - 在保存解决方案措施时同步更新Redis缓存并设置禁选图片标识 - 驳回工单时移除禁选图片缓存,确保图片选择状态正确 - 修正工单审核时重复审核的判断与清理逻辑 - 更新派单撤销与审批操作时的消息状态同步处理
This commit is contained in:
parent
027f4a17ad
commit
6ea9da90a4
|
|
@ -161,6 +161,12 @@ public class TicketInfoVO {
|
|||
@JsonProperty("hasRejected")
|
||||
private Boolean hasRejected;
|
||||
|
||||
/**
|
||||
* 是否可选择图片
|
||||
*/
|
||||
@JsonProperty("canSelectImage")
|
||||
private boolean canSelectImage;
|
||||
|
||||
/**
|
||||
* 产量
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -266,6 +266,11 @@ public class DispatchController extends ControllerBase {
|
|||
VUtils.trueThrowBusinessError(!Objects.equals(applyfor.getCreateById(), AdminUserUtil.getUserId()))
|
||||
.throwMessage("你无权撤销申请");
|
||||
dispatchApplyforService.removeById(id);
|
||||
adminMessageService.lambdaUpdate()
|
||||
.eq(AdminMessage::getSource, 2)
|
||||
.eq(AdminMessage::getSourceId, id)
|
||||
.eq(AdminMessage::getSubType, MessageSubType.DispatchApplyforAudit.getState())
|
||||
.remove();
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
|
|
@ -316,6 +321,13 @@ public class DispatchController extends ControllerBase {
|
|||
dispatch.setState(dispatch.getPlanStartDate().compareTo(now) >= 0 ? 1 : 0);
|
||||
dispatchService.updateById(dispatch);
|
||||
}
|
||||
adminMessageService.lambdaUpdate()
|
||||
.set(AdminMessage::getIsRead, true)
|
||||
.eq(AdminMessage::getSource, 2)
|
||||
.eq(AdminMessage::getSourceId, request.getId())
|
||||
.eq(AdminMessage::getUserId, applyfor.getCreateById())
|
||||
.eq(AdminMessage::getSubType, MessageSubType.DispatchApplyforAudit.getState())
|
||||
.update();
|
||||
adminMessageService.add(
|
||||
new AdminMessage()
|
||||
.setNo(dispatch.getCode())
|
||||
|
|
|
|||
|
|
@ -467,6 +467,7 @@ public class TicketController extends ControllerBase {
|
|||
ssePushService.sendTicketMessageToAdmin(id, message);
|
||||
ssePushService.sendTicketMessageToApp(id, message);
|
||||
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回");
|
||||
stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", id.toString());
|
||||
}
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
|
@ -678,6 +679,7 @@ public class TicketController extends ControllerBase {
|
|||
.setType(1)
|
||||
.setThroughput(ticket.getThroughput())
|
||||
.setHasRejected(stringRedisTemplate.hasKey(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, id)))
|
||||
.setCanSelectImage(ticket.getState() < 3 && !stringRedisTemplate.opsForHash().hasKey("ticket:disbale:SelectImage", id.toString()))
|
||||
.setCustomerName(ticket.getCustomerName());
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
|
|
@ -861,6 +863,8 @@ public class TicketController extends ControllerBase {
|
|||
@ApiMark(moduleName = "工单管理", apiName = "保存工单解决方案措施")
|
||||
public ApiResult<Void> saveSolutionMeasures(@Valid @RequestBody SolutionMeasuresSaveRequest request) {
|
||||
ticketSolutionService.saveSolutionMeasures1(request);
|
||||
stringRedisTemplate.delete(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, request.getTicketId()));
|
||||
stringRedisTemplate.opsForHash().put("ticket:disbale:SelectImage", request.getTicketId().toString(), "1");
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
|
|
@ -886,6 +890,7 @@ public class TicketController extends ControllerBase {
|
|||
.setCreateTime(LocalDateTime.now())
|
||||
);
|
||||
stringRedisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, ticket.getId()), DateTimeUtil.format(LocalDateTime.now()));
|
||||
stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", request.getTicketId().toString());
|
||||
}
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
|
@ -912,6 +917,8 @@ public class TicketController extends ControllerBase {
|
|||
//推送消息
|
||||
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
|
||||
ssePushService.sendTicketMessageToApp(ticket.getId(), message);
|
||||
stringRedisTemplate.delete(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, ticketId));
|
||||
stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", ticketId.toString());
|
||||
}
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
|
@ -1445,32 +1452,36 @@ public class TicketController extends ControllerBase {
|
|||
*/
|
||||
@GetMapping("getSolutionImages")
|
||||
public ApiResult<List<SolutionImageVO>> getSolutionImages(@RequestParam Long id) {
|
||||
List<FileUploadRecord> images = fileUploadRecordService.lambdaQuery()
|
||||
List<FileUploadRecord> selecteds = fileUploadRecordService.lambdaQuery()
|
||||
.eq(FileUploadRecord::getSource, (byte) 0)
|
||||
.eq(FileUploadRecord::getSourceId, id)
|
||||
.eq(FileUploadRecord::getTag, "案例照片")
|
||||
.list();
|
||||
if (CollectionUtil.isNotEmpty(images)) {
|
||||
return ApiResult.success(images.stream()
|
||||
.map(image -> Convert.convert(SolutionImageVO.class, image))
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
if (CollectionUtil.isNotEmpty(selecteds)) {
|
||||
if (!stringRedisTemplate.hasKey(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, id))) {
|
||||
return ApiResult.success(selecteds.stream()
|
||||
.map(image -> Convert.convert(SolutionImageVO.class, image))
|
||||
.collect(Collectors.toList())
|
||||
);
|
||||
}
|
||||
}
|
||||
GongfuTicket ticket = ticketService.getById(id);
|
||||
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
images = fileUploadRecordService.lambdaQuery()
|
||||
List<FileUploadRecord> all = fileUploadRecordService.lambdaQuery()
|
||||
.eq(FileUploadRecord::getSource, (byte) 0)
|
||||
.eq(FileUploadRecord::getSourceId, id)
|
||||
.in(FileUploadRecord::getFileType, List.of(".jpg", ".png", ".heic", ".jpeg", ".webp"))
|
||||
.list();
|
||||
if (CollectionUtil.isEmpty(images)) {
|
||||
if (CollectionUtil.isEmpty(all)) {
|
||||
return ApiResult.success(Collections.emptyList());
|
||||
}
|
||||
int[] mids = StrUtil.splitToInt(ticket.getImages(), ",");
|
||||
Collection<Integer> mids = stringRedisTemplate.hasKey(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, id))
|
||||
? selecteds.stream().map(FileUploadRecord::getId).collect(Collectors.toList())
|
||||
: Arrays.stream(StrUtil.splitToInt(ticket.getImages(), ",")).boxed().collect(Collectors.toList());
|
||||
return ApiResult.success(
|
||||
images.stream().map(image -> {
|
||||
all.stream().map(image -> {
|
||||
SolutionImageVO vo = Convert.convert(SolutionImageVO.class, image);
|
||||
vo.setSelected(Arrays.stream(mids).anyMatch(mid -> mid == image.getId()));
|
||||
vo.setSelected(mids.stream().anyMatch(mid -> Objects.equals(mid, image.getId())));
|
||||
return vo;
|
||||
}).collect(Collectors.toList())
|
||||
);
|
||||
|
|
|
|||
|
|
@ -251,9 +251,13 @@ public class TicketSolutionAuditServiceImpl extends ServiceImpl<TicketSolutionAu
|
|||
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.ProcessingCompleted.getState()))
|
||||
.throwMessage("工单状态不正确");
|
||||
VUtils.trueThrowBusinessError(lambdaQuery()
|
||||
.eq(TicketSolutionAudit::getState, 1)
|
||||
.eq(TicketSolutionAudit::getTicketId, ticketId)
|
||||
.exists())
|
||||
.throwMessage("请勿重复审核");
|
||||
lambdaUpdate()
|
||||
.eq(TicketSolutionAudit::getTicketId, ticketId)
|
||||
.remove();
|
||||
save(new TicketSolutionAudit()
|
||||
.setState(1)
|
||||
.setDeptName("")
|
||||
|
|
|
|||
|
|
@ -294,6 +294,11 @@ public class TicketSolutionServiceImpl extends ServiceImpl<TicketSolutionMapper,
|
|||
ticketSolutionAuditService.lambdaUpdate()
|
||||
.eq(TicketSolutionAudit::getTicketId, request.getTicketId())
|
||||
.remove();
|
||||
fileUploadRecordService.lambdaUpdate()
|
||||
.set(FileUploadRecord::getTag, "")
|
||||
.eq(FileUploadRecord::getSource, (byte) 0)
|
||||
.eq(FileUploadRecord::getSourceId, request.getTicketId())
|
||||
.update();
|
||||
if (CollectionUtil.isNotEmpty(request.getImageIds())) {
|
||||
fileUploadRecordService.lambdaUpdate()
|
||||
.set(FileUploadRecord::getTag, "案例照片")
|
||||
|
|
|
|||
Loading…
Reference in New Issue