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