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()));