From 0c792869ba393a22d4f19e0436cbe823bc249794 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 31 Dec 2025 12:08:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(ticket):=20=E5=AE=9E=E7=8E=B0=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=92=A4=E9=94=80=E5=8A=9F=E8=83=BD=E7=9A=84=E6=9D=83?= =?UTF-8?q?=E9=99=90=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将工单撤销方法分离为app端和admin端两个独立方法 - 添加工单状态检查,防止已完成工单被撤销 - 增加工单评价检查,已评价工单不允许撤销 - 更新派工相关错误提示信息,统一使用"派工"而非"派工单" - 调整工单列表排序规则,按状态和ID降序排列 - 在应用启动时添加Sa-Token配置日志输出 - 更新消息类型常量中的派工相关描述 --- .../admin/controller/TicketController.java | 2 +- .../nflg/mobilebroken/cfs/CfsApplication.java | 4 ++++ .../cfs/service/TicketUnionService.java | 4 ++-- .../common/constant/MessageSubType.java | 8 ++++---- .../gongfu/controller/DispatchController.java | 12 ++++++------ .../gongfu/controller/TicketController.java | 4 ++-- .../service/IGongfuTicketService.java | 4 +++- .../repository/service/ITicketService.java | 4 +++- .../service/impl/GongfuTicketServiceImpl.java | 19 +++++++++++++++++-- .../service/impl/TicketServiceImpl.java | 19 +++++++++++++++++-- .../main/resources/mapper/TicketMapper.xml | 6 +++--- 11 files changed, 62 insertions(+), 24 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 3d186a02..9bf974dc 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -480,7 +480,7 @@ public class TicketController extends ControllerBase { **/ @GetMapping("revokedTicket") public ApiResult revokedTicket(@Valid @RequestParam @NotNull Integer id) { - ticketService.revoked(id); + ticketService.revokedFromAdmin(id); return ApiResult.success(); } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/CfsApplication.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/CfsApplication.java index 3a3acf91..0eb76e0e 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/CfsApplication.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/CfsApplication.java @@ -1,5 +1,7 @@ package com.nflg.mobilebroken.cfs; +import cn.dev33.satoken.SaManager; +import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -8,6 +10,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; +@Slf4j @SpringBootApplication @MapperScan("com.nflg.mobilebroken.repository.mapper") @ComponentScan(basePackages = {"com.nflg.mobilebroken.repository.service", "com.nflg.mobilebroken.cfs" @@ -19,5 +22,6 @@ public class CfsApplication { public static void main(String[] args) { SpringApplication.run(CfsApplication.class, args); + log.info("启动成功,Sa-Token 配置如下:{}", SaManager.getConfig()); } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/TicketUnionService.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/TicketUnionService.java index bbf2c6e5..5eb09c47 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/TicketUnionService.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/TicketUnionService.java @@ -35,12 +35,12 @@ public class TicketUnionService { public TicketDTO revoked(Long id) { if (id < Integer.MAX_VALUE) { - Ticket ticket = ticketService.revoked(Math.toIntExact(id)); + Ticket ticket = ticketService.revokedFromApp(Math.toIntExact(id)); TicketDTO dto = Convert.convert(TicketDTO.class, ticket); dto.setType(0); return dto; } else { - GongfuTicket ticket = gongfuTicketService.revoked(id); + GongfuTicket ticket = gongfuTicketService.revokedFromApp(id); TicketDTO dto = Convert.convert(TicketDTO.class, ticket); dto.setType(1); return dto; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/MessageSubType.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/MessageSubType.java index 77b93874..32cf7078 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/MessageSubType.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/MessageSubType.java @@ -32,13 +32,13 @@ public enum MessageSubType { //工单解决方案审核 TicketSolutionAudit(11, "工单解决方案审核"), //派工单延期审核 - DispatchApplyforAudit(12, "派工单延期审核"), + DispatchApplyforAudit(12, "派工延期审核"), //派工单创建 - DispatchCreate(13, "派工单创建"), + DispatchCreate(13, "派工创建"), //派工单完成 - DispatchComplate(14, "派工单完成"), + DispatchComplate(14, "派工完成"), //派工单延期审核结果 - DispatchAuditResult(15, "派工单延期审核结果"), + DispatchAuditResult(15, "派工延期审核结果"), //工单解决方案审核 TicketSolutionAuditResult(16, "工单解决方案审核结果"), ; diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java index 4897ab02..b478d419 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/DispatchController.java @@ -219,7 +219,7 @@ public class DispatchController extends ControllerBase { @GetMapping("/getInfo") public ApiResult getInfo(@RequestParam Long id) { DispatchVO vo = dispatchService.getInfo(id); - VUtils.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("派工单不存在"); + VUtils.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("派工不存在"); vo.setFiles(Convert.toList(GongfuFileVO.class, fileService.lambdaQuery() .eq(GongfuFile::getSourceId, id) .list() @@ -238,7 +238,7 @@ public class DispatchController extends ControllerBase { public ApiResult applyforAdd(@Valid @RequestBody DispatchApplyForAddRequest request) { GongfuDispatch dispatch = dispatchService.getById(request.getTicketId()); VUtils.trueThrowBusinessError(!Objects.equals(dispatch.getHandlerUserId(), AdminUserUtil.getUserId().longValue())) - .throwMessage("你不是派工单处理人,无法申请延期"); + .throwMessage("你不是派工处理人,无法申请延期"); VUtils.trueThrowBusinessError(Objects.equals(dispatch.getState(), 2)).throwMessage("已完成状态不能申请延期"); VUtils.trueThrowBusinessError(dispatchApplyforService.lambdaQuery() .eq(GongfuDispatchApplyfor::getTicketId, request.getTicketId()) @@ -285,7 +285,7 @@ public class DispatchController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("延期申请不存在"); VUtils.trueThrowBusinessError(!Objects.equals(applyfor.getAuditState(), 0)).throwMessage("已经审核过了"); GongfuDispatch dispatch = dispatchService.getById(applyfor.getTicketId()); - VUtils.trueThrowBusinessError(Objects.isNull(dispatch)).throwMessage("派工单不存在"); + VUtils.trueThrowBusinessError(Objects.isNull(dispatch)).throwMessage("派工不存在"); ApplyforAuditVO vo = new ApplyforAuditVO(); vo.setApplyUser(adminUserService.getInfo(applyfor.getCreateById())); DispatchApplyforAuditVO ao = Convert.convert(DispatchApplyforAuditVO.class, dispatch); @@ -306,10 +306,10 @@ public class DispatchController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("延期申请不存在"); VUtils.trueThrowBusinessError(!Objects.equals(applyfor.getAuditState(), 0)).throwMessage("已经审核过了"); GongfuDispatch dispatch = dispatchService.getById(applyfor.getTicketId()); - VUtils.trueThrowBusinessError(Objects.isNull(dispatch)).throwMessage("派工单不存在"); - VUtils.trueThrowBusinessError(dispatch.getState() == 2).throwMessage("派工单已完成不能延期"); + VUtils.trueThrowBusinessError(Objects.isNull(dispatch)).throwMessage("派工不存在"); + VUtils.trueThrowBusinessError(dispatch.getState() == 2).throwMessage("派工已完成不能延期"); VUtils.trueThrowBusinessError(!Objects.equals(dispatch.getCreateById(), AdminUserUtil.getUserId())) - .throwMessage("你不是派工单创建人,无法审核延期申请"); + .throwMessage("你不是派工创建人,无法审核延期申请"); applyfor.setAuditState(request.getPass() ? 1 : 2); applyfor.setAuditUser(AdminUserUtil.getUserName()); applyfor.setAuditTime(LocalDateTime.now()); diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java index c23ab774..de365516 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java @@ -481,7 +481,7 @@ public class TicketController extends ControllerBase { **/ @GetMapping("revokedTicket") public ApiResult revokedTicket(@Valid @RequestParam @NotNull Long id) { - ticketService.revoked(id); + ticketService.revokedFromAdmin(id); return ApiResult.success(); } @@ -562,7 +562,7 @@ public class TicketController extends ControllerBase { variables.put("ticket", vo); Map base = new HashMap<>(); base.put("t1", Objects.isNull(ticket.getThroughput()) ? "设备运行时间" : "产量"); - base.put("v1", Objects.isNull(ticket.getThroughput()) ? ticket.getUseTime() + "小时" : new DecimalFormat("0.#").format(ticket.getThroughput())); + base.put("v1", Objects.isNull(ticket.getThroughput()) ? ticket.getUseTime() + "小时" : new DecimalFormat("0.#").format(ticket.getThroughput()) + "(吨或方)"); variables.put("base", base); // 渲染HTML TemplateEngine templateEngine = new TemplateEngine(); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuTicketService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuTicketService.java index 9dbc023f..2da68644 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuTicketService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IGongfuTicketService.java @@ -42,7 +42,9 @@ public interface IGongfuTicketService extends IService { List getNonemergency(int days); - GongfuTicket revoked(Long id); + GongfuTicket revokedFromApp(Long id); + + GongfuTicket revokedFromAdmin(Long id); GongfuTicket reopen(Long id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java index be28769c..f15ec9b8 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java @@ -44,7 +44,9 @@ public interface ITicketService extends IService { List getNonemergency(int days); - Ticket revoked(Integer id); + Ticket revokedFromApp(Integer id); + + Ticket revokedFromAdmin(Integer id); Ticket reopen(Integer id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuTicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuTicketServiceImpl.java index 2b8dca57..0b7ea6a5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuTicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/GongfuTicketServiceImpl.java @@ -289,11 +289,26 @@ public class GongfuTicketServiceImpl extends ServiceImpl 0) + VUtils.trueThrowBusinessError(ticket.getState() > TicketState.ProcessingCompleted.getState()) + .throwMessage("当前工单状态不允许撤销"); + VUtils.trueThrowBusinessError(ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId, id).exists()) + .throwMessage("工单已评价,不允许撤销"); + ticket.setState(TicketState.Revoked.getState()); + ticket.setUpdateTime(LocalDateTime.now()); + updateById(ticket); + return ticket; + } + + @Override + public GongfuTicket revokedFromAdmin(Long id) { + GongfuTicket ticket = lambdaQuery().eq(GongfuTicket::getId, id).one(); + VUtils.trueThrowBusinessError(!(StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()))) + .throwMessage("无权操作该工单"); + VUtils.trueThrowBusinessError(ticket.getState() > TicketState.ProcessingCompleted.getState()) .throwMessage("当前工单状态不允许撤销"); VUtils.trueThrowBusinessError(ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId, id).exists()) .throwMessage("工单已评价,不允许撤销"); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index a4a5f7ed..5e589aee 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -326,11 +326,26 @@ public class TicketServiceImpl extends ServiceImpl impleme } @Override - public Ticket revoked(Integer id) { + public Ticket revokedFromApp(Integer id) { Ticket ticket = lambdaQuery().eq(Ticket::getId, id).one(); VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("无权操作该工单"); - VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState()) > 0) + VUtils.trueThrowBusinessError(ticket.getState() > TicketState.ProcessingCompleted.getState()) + .throwMessage("当前工单状态不允许撤销"); + VUtils.trueThrowBusinessError(ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId, id).exists()) + .throwMessage("工单已评价,不允许撤销"); + ticket.setState(TicketState.Revoked.getState()); + ticket.setUpdateTime(LocalDateTime.now()); + updateById(ticket); + return ticket; + } + + @Override + public Ticket revokedFromAdmin(Integer id) { + Ticket ticket = lambdaQuery().eq(Ticket::getId, id).one(); + VUtils.trueThrowBusinessError(!(StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()))) + .throwMessage("无权操作该工单"); + VUtils.trueThrowBusinessError(ticket.getState() > TicketState.ProcessingCompleted.getState()) .throwMessage("当前工单状态不允许撤销"); VUtils.trueThrowBusinessError(ticketEvaluateService.lambdaQuery().eq(TicketEvaluate::getTicketId, id).exists()) .throwMessage("工单已评价,不允许撤销"); diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index ade91da8..e39b9f25 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -107,7 +107,7 @@ LEFT JOIN v_device_part_language l ON p.id=l.source_id AND l.language_code=#{language} WHERE t.user_id=#{userId} AND t.user_platform=#{from} AND t.state!=4 - ORDER BY t.id DESC + ORDER BY t.state,t.id DESC