diff --git a/nflg-mobilebroken-admin/pom.xml b/nflg-mobilebroken-admin/pom.xml index dde72087..54f70e18 100644 --- a/nflg-mobilebroken-admin/pom.xml +++ b/nflg-mobilebroken-admin/pom.xml @@ -61,6 +61,31 @@ org.springframework.boot spring-boot-starter-validation + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + + + + ognl + ognl + 3.1.26 + + + + + + + + + com.itextpdf + html2pdf + 4.0.3 + diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java index 418c203b..6b278352 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AdminUserController.java @@ -42,7 +42,6 @@ public class AdminUserController extends ControllerBase { /** * 获取部门列表 - * * @return 部门列表 */ @PostMapping("getSimpleDepartments") @@ -53,7 +52,6 @@ public class AdminUserController extends ControllerBase { /** * 获取职位列表 - * * @return 职位列表 */ @PostMapping("getSimpleTitles") @@ -64,7 +62,6 @@ public class AdminUserController extends ControllerBase { /** * 新增账号 - * * @param request 请求参数 */ @PostMapping("addAccount") @@ -76,7 +73,6 @@ public class AdminUserController extends ControllerBase { /** * 更新账号 - * * @param request 请求参数 */ @PostMapping("updateAccount") @@ -88,7 +84,6 @@ public class AdminUserController extends ControllerBase { /** * 启用/禁用账号 - * * @param request 请求参数 */ @PostMapping("enableAccount") @@ -100,7 +95,6 @@ public class AdminUserController extends ControllerBase { /** * 搜索账号 - * * @param request 请求参数 */ @PostMapping("searchAccount") diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java index c0ea12eb..e5281c39 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/RoleController.java @@ -124,7 +124,7 @@ public class RoleController extends ControllerBase { /** * 获取已授权人员 */ - @PostMapping("getAuthorizeUser") + @GetMapping("getAuthorizeUser") @MethodInfoMark(value = "获取已授权人员", menuName = "角色管理") public ApiResult> getAuthorizeUser(@RequestParam Integer roleId) { return ApiResult.success(adminUserRoleMapService.getAuthorizeUser(roleId)); 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 75ede310..00c482d6 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 @@ -1,26 +1,44 @@ package com.nflg.mobilebroken.admin.controller; +import cn.hutool.core.util.StrUtil; +import com.itextpdf.html2pdf.ConverterProperties; +import com.itextpdf.html2pdf.HtmlConverter; +import com.itextpdf.layout.font.FontProvider; +import com.nflg.mobilebroken.common.constant.STATE; +import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.AdminTicketSearchRequest; import com.nflg.mobilebroken.common.pojo.request.AssignmentTicketRequest; import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO; +import com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO; +import com.nflg.mobilebroken.common.pojo.vo.TicketPdfVO; import com.nflg.mobilebroken.common.util.EecExcelUtil; import com.nflg.mobilebroken.common.util.PageUtil; -import com.nflg.mobilebroken.repository.service.ITicketService; +import com.nflg.mobilebroken.repository.entity.AdminUser; +import com.nflg.mobilebroken.repository.entity.AppUser; +import com.nflg.mobilebroken.repository.entity.TBaseCustomer; +import com.nflg.mobilebroken.repository.entity.Ticket; +import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.thymeleaf.TemplateEngine; +import org.thymeleaf.context.Context; +import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import java.io.IOException; -import java.util.List; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; /** * 工单相关 @@ -33,6 +51,18 @@ public class TicketController extends ControllerBase { @Resource private ITicketService ticketService; + @Resource + private IAppUserService appUserService; + + @Resource + private ITBaseCustomerService customerService; + + @Resource + private IDeviceService deviceService; + + @Resource + private IAdminUserService adminUserService; + /** * 搜索工单 * @@ -92,4 +122,84 @@ public class TicketController extends ControllerBase { ticketService.closeTicket(ids); return ApiResult.success(); } + + /** + * 导出工单为pdf + * + * @param id 工单id + */ + @GetMapping("exportPdf") + public void exportPdf(HttpServletResponse response, @Valid @RequestParam @NotBlank(message = "工单编号不能为空") String id) { + Ticket ticket = ticketService.getById(id); + AppUser user = appUserService.getById(ticket.getUserId()); + TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId())); + DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); + String handle = ticket.getHandle(); + if (StrUtil.isNotBlank(handle)) { + List adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList())); + handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(",")); + } + List images = new ArrayList<>(); + List files = new ArrayList<>(); + if (StrUtil.isNotBlank(ticket.getAttachments())) { + StrUtil.split(ticket.getAttachments(), ",").forEach(item -> { + if (item.endsWith(".jpg") || item.endsWith(".png") || item.endsWith(".jpeg")) { + images.add(item); + } else { + files.add(item); + } + }); + } + TicketPdfVO vo = new TicketPdfVO() + .setNo(ticket.getNo()) + .setTitle(ticket.getTitle()) + .setDeviceNo(ticket.getDeviceNo()) + .setModelNo(device.getModelNo()) + .setComponent(ticket.getComponent()) + .setUseTime(ticket.getUseTime()) + .setDescription(ticket.getDescription()) + .setState(ticket.getState()) + .setCreateUserName(user.getName()) + .setCreateTime(ticket.getCreateTime()) + .setCompanyName(company.getAgencyCompanyName()) + .setUrgency(ticket.getUrgency()) + .setUpdateTime(ticket.getUpdateTime()) + .setHandleUserName(handle) + .setSolution(ticket.getSolution()) + .setImages(images) + .setFiles(files); + Map variables = new HashMap<>(); + variables.put("ticket", vo); + // 渲染HTML + TemplateEngine templateEngine = new TemplateEngine(); + ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver(); + resolver.setPrefix("/templates/"); + resolver.setSuffix(".html"); + templateEngine.setTemplateResolver(resolver); + + Context context = new Context(); + context.setVariables(variables); + String html = templateEngine.process("ticketpdf", context); + + response.setContentType(MediaType.APPLICATION_PDF_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(ticket.getTitle() + ".pdf", StandardCharsets.UTF_8)); + // 生成PDF + try { + ConverterProperties converterProperties = new ConverterProperties(); + converterProperties.setCharset("UTF-8"); + FontProvider fontProvider = new FontProvider(); + fontProvider.addSystemFonts(); + converterProperties.setFontProvider(fontProvider); + HtmlConverter.convertToPdf(html, response.getOutputStream(), converterProperties); +// ITextRenderer renderer = new ITextRenderer(); +// ITextFontResolver fontResolver = renderer.getFontResolver(); +// fontResolver.addFont("fonts/simsun.ttc", true); +// renderer.setDocumentFromString(html); +// renderer.layout(); +// renderer.createPDF(response.getOutputStream()); + } catch (Exception e) { + log.error("生成pdf出错", e); + throw new NflgException(STATE.BusinessError, "生成pdf出错"); + } + } } \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/resources/bootstrap.properties b/nflg-mobilebroken-admin/src/main/resources/bootstrap.properties index 92f5395e..e2b6f2d3 100644 --- a/nflg-mobilebroken-admin/src/main/resources/bootstrap.properties +++ b/nflg-mobilebroken-admin/src/main/resources/bootstrap.properties @@ -24,4 +24,5 @@ spring.cloud.nacos.config.extension-configs[0].refresh=true spring.cloud.nacos.discovery.server-addr=${nacos.server-addr} spring.cloud.nacos.discovery.namespace=mobilebroken spring.cloud.nacos.discovery.group=${spring.profiles.active} -spring.cloud.nacos.discovery.metadata.env=${spring.profiles.active} \ No newline at end of file +spring.cloud.nacos.discovery.metadata.env=${spring.profiles.active} +spring.thymeleaf.encoding=UTF-8 \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html new file mode 100644 index 00000000..ee851369 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/resources/templates/ticketpdf.html @@ -0,0 +1,89 @@ + + + + + + + + +

移动破售后问题反馈表 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
标题
问题详细描述
工单编号设备编号
机型使用时长
问题部位
紧急程度解决状态
处理人解决时间
解决方案
提交人提交时间
文件
图片
+ + \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/test/java/ControllerTest.java b/nflg-mobilebroken-admin/src/test/java/ControllerTest.java new file mode 100644 index 00000000..4a00f1de --- /dev/null +++ b/nflg-mobilebroken-admin/src/test/java/ControllerTest.java @@ -0,0 +1,57 @@ +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.nflg.mobilebroken.admin.AdminApplication; +import com.nflg.mobilebroken.repository.entity.AdminApi; +import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@SpringBootTest +@ContextConfiguration(classes = AdminApplication.class) +public class ControllerTest { + + @Autowired + private RequestMappingHandlerMapping requestMappingHandlerMapping; + + @Test + public void test2() { + List apis = new ArrayList<>(); + // 获取所有的请求映射 + Map handlerMethods = requestMappingHandlerMapping.getHandlerMethods(); + for (Map.Entry entry : handlerMethods.entrySet()) { + RequestMappingInfo mappingInfo = entry.getKey(); + HandlerMethod handlerMethod = entry.getValue(); + + // 获取Controller的RequestMapping注解 +// RequestMapping controllerRequestMapping = handlerMethod.getBeanType().getAnnotation(RequestMapping.class); +// if (controllerRequestMapping != null) { +// System.out.println("Controller: " + handlerMethod.getBeanType().getName()); +// System.out.println("Controller RequestMapping: " + String.join(",", controllerRequestMapping.value())); +// } + + // 获取方法的PostMapping注解 + MethodInfoMark postMapping = handlerMethod.getMethod().getAnnotation(MethodInfoMark.class); + if (postMapping != null) { + System.out.println("Method: " + handlerMethod.getMethod().getName()); + System.out.println("menuName: " + postMapping.menuName() + " - " + postMapping.value()); + apis.add(new AdminApi() + .setName(postMapping.value()) + .setModuleName(postMapping.menuName()) + .setUrl(StrUtil.join(",", mappingInfo.getPatternsCondition().getPatterns()))); + } + // 打印请求路径 + System.out.println("Request Paths: " + mappingInfo.getPatternsCondition().getPatterns()); + System.out.println("----------------------------------------"); + } + System.out.println(JSONUtil.toJsonStr(apis)); + } +} diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/AuthApplication.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/AuthApplication.java index c5d09c75..d60e5a79 100644 --- a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/AuthApplication.java +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/AuthApplication.java @@ -20,5 +20,4 @@ public class AuthApplication { SpringApplication.run(AuthApplication.class, args); log.info("启动成功,Sa-Token 配置如下:" + SaManager.getConfig()); } - } diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/config/JacksonConfig.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/config/JacksonConfig.java new file mode 100644 index 00000000..4773053d --- /dev/null +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/config/JacksonConfig.java @@ -0,0 +1,42 @@ +package com.nflg.mobilebroken.auth.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@Configuration +public class JacksonConfig { + + // 定义全局日期时间格式 + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + @Bean + public ObjectMapper objectMapper() { + ObjectMapper objectMapper = new ObjectMapper(); + + // 创建并注册 JavaTimeModule,设置日期格式化 + JavaTimeModule javaTimeModule = new JavaTimeModule(); + javaTimeModule.addSerializer( + java.time.LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT)) + ); + javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT))); + + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // 注册模块到 ObjectMapper + objectMapper.registerModule(javaTimeModule); + + // 禁用时间戳(默认是 true,会序列化为数组) + objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + + return objectMapper; + } +} diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java index a15eec90..bc29797f 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.cfs.controller; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.mobilebroken.common.constant.TicketState; @@ -170,6 +171,11 @@ public class TiketController extends ControllerBase { AppArea appArea = appAreaService.getById(user.getAreaId()); TBaseCustomer company = customerService.getById(Integer.valueOf(user.getCompanyId())); DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); + String handle = ticket.getHandle(); + if (StrUtil.isNotBlank(handle)) { + List adminUsers = adminUserService.listByIds(Arrays.stream(handle.split(",")).map(Integer::parseInt).collect(Collectors.toList())); + handle = adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.joining(",")); + } TicketInfoVO vo = new TicketInfoVO() .setId(ticket.getId()) .setTitle(ticket.getTitle()) @@ -212,13 +218,16 @@ public class TiketController extends ControllerBase { .throwMessage("当前工单状态不允许发送消息"); AppUser user = appUserService.getById(AppUserUtil.getUserId()); ChatMessageDTO message = new ChatMessageDTO() + .setId(IdUtil.getSnowflakeNextId()) .setFrom("app") .setSenderId(user.getId()) .setSenderName(user.getName()) .setSenderAvatar(user.getAvatar()) .setContent(request.getContent()) .setCreateTime(Instant.now()) - .setAttachments(request.getAttachments()); + .setAttachments(request.getAttachments()) + .setImages(request.getImages()) + .setQuote(request.getQuote()); // ticketChatService.pushMessage(request.getTicketId(),message); // TicketChat chat=ticketChatService.findByTicketId(request.getTicketId()); // chat.getMessages().add(message); diff --git a/nflg-mobilebroken-cfs-app/src/test/java/UserTest.java b/nflg-mobilebroken-cfs-app/src/test/java/UserTest.java index 32771e79..c85dbaaf 100644 --- a/nflg-mobilebroken-cfs-app/src/test/java/UserTest.java +++ b/nflg-mobilebroken-cfs-app/src/test/java/UserTest.java @@ -5,6 +5,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; import java.time.LocalDateTime; @@ -15,6 +17,8 @@ public class UserTest { @Autowired private IAppUserService userService; + private static final PasswordEncoder PASSWORDENCODER = new BCryptPasswordEncoder(); + @Test @DisplayName("获取用户数量") public void getUserCount(){ @@ -26,4 +30,9 @@ public class UserTest { LocalDateTime date = LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0, 0).plusYears(1).minusDays(1); System.out.println(date); } + + @Test + public void test2() { + System.out.println(PASSWORDENCODER.encode("123456")); + } } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/TicketUrgency.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/TicketUrgency.java index 40ba5ab6..da04e5dc 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/TicketUrgency.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/TicketUrgency.java @@ -6,14 +6,14 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum TicketUrgency { - NONEMERGENCY(0, "非紧急"), - GENERAL(1, "普通"), - URGENCY(2, "紧急"); + NONEMERGENCY((byte) 0, "非紧急"), + GENERAL((byte) 1, "普通"), + URGENCY((byte) 2, "紧急"); - private final Integer state; + private final Byte state; private final String description; - public static TicketUrgency findByValue(Integer value) { + public static TicketUrgency findByValue(Byte value) { for (TicketUrgency valueEnum : TicketUrgency.values()) { if (valueEnum.getState().equals(value)) { return valueEnum; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java index af51cd0b..83b775ed 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java @@ -2,7 +2,6 @@ package com.nflg.mobilebroken.common.pojo.dto; import lombok.Data; import lombok.experimental.Accessors; -import org.springframework.data.annotation.Id; import java.time.Instant; import java.util.List; @@ -11,8 +10,7 @@ import java.util.List; @Accessors(chain = true) public class ChatMessageDTO { - @Id - private String id; + private Long id; //来源 private String from; @@ -29,9 +27,12 @@ public class ChatMessageDTO { // 消息内容 private String content; - // 附件 + // 附件列表 private List attachments; + //图片列表 + private List images; + // 创建时间 private Instant createTime; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java index 1915b35e..bc58132c 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AddChatMessageRequest.java @@ -18,9 +18,12 @@ public class AddChatMessageRequest { @NotBlank private String content; - //附件 + //附件列表 private List attachments; + //图片列表 + private List images; + // 引用的消息 private ChatMessageDTO quote; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AssignmentTicketRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AssignmentTicketRequest.java index 1ef4544f..e58dbba4 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AssignmentTicketRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AssignmentTicketRequest.java @@ -16,7 +16,7 @@ public class AssignmentTicketRequest { //紧急程度,0:非紧急;1:普通;2:紧急 @NotNull - private Integer urgency; + private Byte urgency; //问题类型 @NotBlank diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java index 8d4a0d47..9e97a14d 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminTicketVO.java @@ -39,7 +39,7 @@ public class AdminTicketVO { //紧急程度 @IgnoreExport @JsonIgnore - private Integer urgency; + private Byte urgency; //紧急程度 @ExcelColumn("紧急程度") diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java index 43f4d4b4..b685a886 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AdminUserVO.java @@ -54,4 +54,7 @@ public class AdminUserVO { //最后更新时间 private LocalDateTime updateTime; + + //部门id + private Integer departmentId; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java index 18bccf13..014d720d 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java @@ -29,6 +29,9 @@ public class MenuVO { // 是否显示 private boolean show; + // 排序 + private int sort; + // 创建人 private String createBy; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java new file mode 100644 index 00000000..560dfd27 --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/TicketPdfVO.java @@ -0,0 +1,76 @@ +package com.nflg.mobilebroken.common.pojo.vo; + +import com.nflg.mobilebroken.common.constant.TicketState; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +@Data +@Accessors(chain = true) +public class TicketPdfVO { + + //工单编号 + private String no; + + //工单标题 + private String title; + + //工单描述 + private String description; + + //创建人 + private String createUserName; + + //提交时间 + private LocalDateTime createTime; + + //工单状态 + private Byte state; + + //所属公司 + private String companyName; + + //设备编号 + private String deviceNo; + + //设备机型 + private String modelNo; + + //问题部位 + private String component; + + //使用时长,单位: 小时 + private Integer useTime; + + private Byte urgency; + + //紧急程度 + private String urgencyDesc; + //解决状态描述 + private String stateDesc; + //更新时间 + private LocalDateTime updateTime; + //处理人 + private String handleUserName; + //解决方案 + private String solution; + //图片 + private List images; + //文件 + private List files; + + public String getUrgencyDesc() { + if (Objects.isNull(urgency)) { + return ""; + } else { + return TicketState.findByValue(urgency).getDescription(); + } + } + + public String getStateDesc() { + return TicketState.findByValue(state).getDescription(); + } +} diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java index f8083129..e0420437 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java @@ -126,7 +126,7 @@ public class AdminMenuServiceImpl extends ServiceImpl list = baseMapper.selectList(queryWrapper); //找出非根节点 List roots = list.stream().filter(l -> Objects.equals(l.getParentId(), 0)).collect(Collectors.toList()); @@ -215,7 +215,7 @@ public class AdminMenuServiceImpl extends ServiceImpl getChildren(Integer parentId) { List datas = convert(lambdaQuery().eq(AdminMenu::getParentId, parentId) - .orderByAsc(AdminMenu::getId) + .orderByDesc(AdminMenu::getSort) .list()); datas.forEach(d -> d.setChildren(getChildren(d.getId()))); return datas; @@ -263,7 +263,7 @@ public class AdminMenuServiceImpl extends ServiceImpl menus = lambdaQuery() .eq(AdminMenu::getParentId, menu.getId()) - .orderByAsc(AdminMenu::getSort) + .orderByDesc(AdminMenu::getSort) .list(); List menuVos = Convert.toList(MenuVO.class, menus); menu.setChildren(menuVos); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index 5db16b6a..efedad5c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -55,11 +55,13 @@ public class AdminUserServiceImpl extends ServiceImpl impl @Override public AppUser getUser(String userName, String password) { - String encodePassword=PASSWORDENCODER.encode(password); - return lambdaQuery() + AppUser user = lambdaQuery() .eq(AppUser::getLoginName, userName) - .eq(AppUser::getPassword, encodePassword) .one(); + if (Objects.nonNull(user) && PASSWORDENCODER.matches(password, user.getPassword())) { + return user; + } + return null; } @Override 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 16629e8c..2cb726d7 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 @@ -96,7 +96,7 @@ public class TicketServiceImpl extends ServiceImpl impleme VUtils.trueThrowBusinessError(ticket.getState() != TicketState.PendingProcessing.getState().byteValue()).throwMessage("工单状态异常"); VUtils.trueThrowBusinessError(Objects.nonNull(ticket.getCqm()) && !Objects.equals(ticket.getCqm(), AdminUserUtil.getUserId())) .throwMessage("当前工单已归属别的CQM负责人"); - ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState().byteValue()); + ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState()); ticket.setQuestion(request.getQuestion()); ticket.setRemark(request.getRemark()); ticket.setHandle(StrUtil.join(",", request.getUserIds()));