From e41216f9c41247c8500062fc1ccaea9691aa26d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 20 Feb 2025 20:43:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=80=E4=BA=9B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/FileController.java | 34 ++++++++++--------- .../admin/controller/TicketController.java | 25 +++++++++++--- .../admin}/event/TicketAssignedEvent.java | 28 ++++----------- .../admin/event/TicketCloseEvent.java | 6 +--- .../admin/event/TicketCompleteEvent.java | 6 +--- .../admin/event/TicketReplyEvent.java | 21 +++--------- .../admin/listener/TicketEventListener.java | 7 ++++ .../admin/publisher/TicketEventPublisher.java | 20 +++++++---- .../auth/controller/AdminController.java | 4 +-- .../auth/controller/AppController.java | 21 +++++++++--- .../cfs/controller/FileController.java | 34 ++++++++++--------- .../cfs/listener/TicketEventListener.java | 7 ---- .../cfs/publisher/TicketEventPublisher.java | 11 +++--- .../common/constant/Constant.java | 18 ++++++---- .../pojo/request/MigrateAppUserRequest.java | 4 +++ .../pojo/request/TicketHandleAddRequest.java | 19 +++++++++++ .../common/pojo/vo/AdminTicketVO.java | 4 +++ .../repository/mapper/AdminMessageMapper.java | 3 +- .../service/IAdminMessageService.java | 6 +--- .../repository/service/ITicketService.java | 2 ++ .../service/impl/AdminMessageServiceImpl.java | 28 +-------------- .../impl/AppUserApplyforServiceImpl.java | 15 +++++--- .../service/impl/AppUserServiceImpl.java | 2 ++ .../service/impl/TicketServiceImpl.java | 19 ++++++++++- 24 files changed, 187 insertions(+), 157 deletions(-) rename {nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs => nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin}/event/TicketAssignedEvent.java (81%) create mode 100644 nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TicketHandleAddRequest.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java index 32557e2d..9a72cebc 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/FileController.java @@ -55,21 +55,19 @@ public class FileController extends ControllerBase { ,@Valid @NotNull @RequestParam("source") Byte source ,@Valid @NotNull @RequestParam("sourceId") Integer sourceId) { try { - String url=fileUploadService.upload(buildFilePath(file), file); - fileUploadRecordService.save(buildFileUploadRecord(source,sourceId,file,url)); + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); + fileUploadRecordService.save(buildFileUploadRecord(source,sourceId,fileName,fileType,url)); return ApiResult.success(url); } catch (Exception ex) { throw new NflgException(STATE.BusinessError, "上传文件失败:" + ex.getMessage()); } } - private String buildFilePath(MultipartFile file) { - return StrUtil.format("admin/{}/{}/{}{}", LocalDateTime.now().format(FORMATTER), AdminUserUtil.getUserId(), - RandomUtil.randomString(6),getExtensions(file)); - } - - private String getExtensions(MultipartFile file){ - return file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + private String buildFilePath(String fileName, String fileType) { + return StrUtil.format("admin/{}/{}/{}/{}{}", LocalDateTime.now().format(FORMATTER), AdminUserUtil.getUserId() + , RandomUtil.randomString(4), fileName, fileType); } /** @@ -87,10 +85,12 @@ public class FileController extends ControllerBase { try { List list = new ArrayList<>(); List records = new ArrayList<>(); - for (MultipartFile f : files) { - String url=fileUploadService.upload(buildFilePath(f), f); + for (MultipartFile file : files) { + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); list.add(url); - records.add(buildFileUploadRecord(source,sourceId,f,url)); + records.add(buildFileUploadRecord(source,sourceId,fileName,fileType,url)); } fileUploadRecordService.saveBatch(records); return ApiResult.success(list); @@ -107,7 +107,9 @@ public class FileController extends ControllerBase { @PostMapping("uploadSingleFile1") public ApiResult uploadSingleFile1(@Valid @NotNull @RequestParam("file") MultipartFile file) { try { - String url=fileUploadService.upload(buildFilePath(file), file); + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); return ApiResult.success(url); }catch (Exception ex){ throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage()); @@ -115,10 +117,10 @@ public class FileController extends ControllerBase { } - private FileUploadRecord buildFileUploadRecord(Byte source,Integer sourceId,MultipartFile file, String url){ + private FileUploadRecord buildFileUploadRecord(Byte source,Integer sourceId,String fileName,String fileType, String url){ return new FileUploadRecord() - .setFileName(file.getOriginalFilename()) - .setFileType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))) + .setFileName(fileName) + .setFileType(fileType) .setFrom("admin") .setCreateTime(LocalDateTime.now()) .setSource(source) 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 839eca84..1f44715e 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 @@ -125,7 +125,10 @@ public class TicketController extends ControllerBase { @PostMapping("searchTicket") @ApiMark(moduleName = "工单管理", apiName = "搜索工单") public ApiResult> searchTicket(@Valid @RequestBody AdminTicketSearchRequest request) { - return ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> d)); + return ApiResult.success(PageUtil.convert(ticketService.searchPage(request), d -> { + d.setEvaluate(getTicketEvaluate(d.getId())); + return d; + })); } /** @@ -167,6 +170,20 @@ public class TicketController extends ControllerBase { } catch (IOException e) { log.error("发送SSE消息出错", e); } + ticketEventPublisher.publishTicketAssignedEvent(ticket,request.getUserIds()); + return ApiResult.success(); + } + + /** + * 添加工单处理人 + * @param request 请求参数 + */ + @PostMapping("addTicketHandle") + @MethodInfoMark(value = "添加工单处理人", menuName = "工单管理") + @ApiMark(moduleName = "工单管理", apiName = "添加工单处理人") + public ApiResult addTicketHandle(@Valid @RequestBody TicketHandleAddRequest request){ + Ticket ticket=ticketService.addTicketHandle(request); + ticketEventPublisher.publishTicketAssignedEvent(ticket,request.getUserIds()); return ApiResult.success(); } @@ -180,7 +197,7 @@ public class TicketController extends ControllerBase { public ApiResult completeTicket(@Valid @RequestBody @NotEmpty List ids) { for (Integer id : ids){ Ticket ticket=ticketService.completeTicket(id); - ticketEventPublisher.publishTicketCompleteEvent(ticket,MultilingualUtil.getLanguage(),MultilingualUtil.getZone()); + ticketEventPublisher.publishTicketCompleteEvent(ticket); TicketChatDTO message=new TicketChatDTO() .setTicketId(ticket.getId()) .setMessages(Collections.singletonList(new ChatMessageDTO() @@ -212,7 +229,7 @@ public class TicketController extends ControllerBase { @ApiMark(moduleName = "工单管理", apiName = "关闭工单") public ApiResult closeTicket(@Valid @RequestBody TicketCloseRequest request) { Ticket ticket=ticketService.closeTicket(request); - ticketEventPublisher.publishTicketCloseEvent(ticket,MultilingualUtil.getLanguage(),MultilingualUtil.getZone()); + ticketEventPublisher.publishTicketCloseEvent(ticket); TicketChatDTO message=new TicketChatDTO() .setTicketId(ticket.getId()) .setMessages(Collections.singletonList(new ChatMessageDTO() @@ -493,7 +510,7 @@ public class TicketController extends ControllerBase { } catch (IOException e) { log.error("发送SSE消息出错", e); } - ticketEventPublisher.publishTicketReplyEvent(ticket, MultilingualUtil.getLanguage(), MultilingualUtil.getZone()); + ticketEventPublisher.publishTicketReplyEvent(ticket); return ApiResult.success(); } } \ No newline at end of file diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketAssignedEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketAssignedEvent.java similarity index 81% rename from nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketAssignedEvent.java rename to nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketAssignedEvent.java index 890c22b5..186f863f 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketAssignedEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketAssignedEvent.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.cfs.event; +package com.nflg.mobilebroken.admin.event; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; @@ -22,10 +22,7 @@ import org.springframework.context.ApplicationEvent; import javax.mail.MessagingException; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -34,19 +31,17 @@ public class TicketAssignedEvent extends ApplicationEvent implements Application private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); private final Ticket ticket; - private final String language; - private final String zone; + private final List userIds; private IDictionaryItemTranslateService dictionaryItemTranslateService; private IAppUserService appUserService; private EmailService emailService; private IAdminUserService adminUserService; private IAdminMessageService adminMessageService; - public TicketAssignedEvent(Object source, Ticket ticket, String language, String zone) { + public TicketAssignedEvent(Object source, Ticket ticket, List userIds) { super(source); this.ticket = ticket; - this.language = language; - this.zone = zone; + this.userIds = userIds; } @Override @@ -65,7 +60,6 @@ public class TicketAssignedEvent extends ApplicationEvent implements Application private void sendUserMessage(){ //我的待办 - List userIds=Arrays.stream(ticket.getHandle().split(",")).filter(StrUtil::isNotBlank).map(Integer::parseInt).collect(Collectors.toList()); List adminUsers=adminUserService.listByIds(userIds); if (CollectionUtil.isNotEmpty(adminUsers)){ adminUsers.forEach(c -> adminMessageService.add( @@ -84,17 +78,16 @@ public class TicketAssignedEvent extends ApplicationEvent implements Application private void sendEmail(){ try { - List userIds = Arrays.stream(ticket.getHandle().split(",")).filter(StrUtil::isNotBlank).map(Integer::parseInt).collect(Collectors.toList()); List adminUsers = adminUserService.listByIds(userIds); if (CollectionUtil.isNotEmpty(adminUsers)) { AppUser appUser=appUserService.getById(ticket.getUserId()); - String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_ASSIGNED, language); - String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, language) + String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_ASSIGNED, Constant.DEFAULT_LANGUAGE_CODE); + String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, Constant.DEFAULT_LANGUAGE_CODE) .replace("${no}", ticket.getNo()) .replace("${title}", ticket.getTitle()) .replace("${createUser}", appUser.getName()) .replace("${handleUser}", StrUtil.join(",",adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList()))) - .replace("${createTime}", toTimeString(ticket.getCreateTime())) + .replace("${createTime}", ticket.getCreateTime().format(FORMATTER)) .replace("${msg}", subject); sendEmail(adminUsers, subject, content); } @@ -110,11 +103,4 @@ public class TicketAssignedEvent extends ApplicationEvent implements Application } } } - - private String toTimeString(LocalDateTime time){ - return time.atZone(ZoneOffset.UTC) - .withZoneSameInstant(ZoneId.of(zone)) - .toLocalDateTime() - .format(FORMATTER); - } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCloseEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCloseEvent.java index d09d6079..b55b7c82 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCloseEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCloseEvent.java @@ -26,8 +26,6 @@ public class TicketCloseEvent extends ApplicationEvent implements ApplicationCon private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); private final Ticket ticket; - private final String language; - private final String zone; private IDictionaryItemTranslateService dictionaryItemTranslateService; private IAppUserService appUserService; private EmailService emailService; @@ -35,11 +33,9 @@ public class TicketCloseEvent extends ApplicationEvent implements ApplicationCon private IAdminUserService adminUserService; private IAdminMessageService adminMessageService; - public TicketCloseEvent(Object source,Ticket ticket, String language, String zone) { + public TicketCloseEvent(Object source,Ticket ticket) { super(source); this.ticket = ticket; - this.language = language; - this.zone = zone; } @Override diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java index 7bf90e89..b5f61329 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCompleteEvent.java @@ -22,8 +22,6 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); private final Ticket ticket; - private final String language; - private final String zone; private IDictionaryItemTranslateService dictionaryItemTranslateService; private IAppUserService appUserService; private EmailService emailService; @@ -32,11 +30,9 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application private IAdminMessageService adminMessageService; private IAppMessageService appMessageService; - public TicketCompleteEvent(Object source,Ticket ticket, String language, String zone) { + public TicketCompleteEvent(Object source,Ticket ticket) { super(source); this.ticket = ticket; - this.language = language; - this.zone = zone; } @Override diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketReplyEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketReplyEvent.java index 682a1be0..372b5a44 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketReplyEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketReplyEvent.java @@ -18,8 +18,6 @@ import org.springframework.context.ApplicationEvent; import javax.mail.MessagingException; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Arrays; import java.util.List; @@ -30,8 +28,6 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon private static final DateTimeFormatter FORMATTER= DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN); private final Ticket ticket; - private final String language; - private final String zone; private IDictionaryItemTranslateService dictionaryItemTranslateService; private IAppUserService appUserService; private EmailService emailService; @@ -40,11 +36,9 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon private IAdminMessageService adminMessageService; private IAppMessageService appMessageService; - public TicketReplyEvent(Object source,Ticket ticket, String language, String zone) { + public TicketReplyEvent(Object source,Ticket ticket) { super(source); this.ticket = ticket; - this.language = language; - this.zone = zone; } @Override @@ -79,13 +73,13 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon List adminUsers = adminUserService.listByIds(userIds); if (CollectionUtil.isNotEmpty(adminUsers)) { AppUser appUser=appUserService.getById(ticket.getUserId()); - String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_REPLY, language); - String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, language) + String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_REPLY, Constant.DEFAULT_LANGUAGE_CODE); + String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, Constant.DEFAULT_LANGUAGE_CODE) .replace("${no}", ticket.getNo()) .replace("${title}", ticket.getTitle()) .replace("${createUser}", appUser.getName()) .replace("${handleUser}", StrUtil.join(",",adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList()))) - .replace("${createTime}", toTimeString(ticket.getCreateTime())) + .replace("${createTime}", ticket.getCreateTime().format(FORMATTER)) .replace("${msg}", subject); //发送给提交人 sendEmail(appUser, subject, content); @@ -98,11 +92,4 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon private void sendEmail(AppUser appUser,String subject,String content) throws MessagingException { emailService.sendEmail(appUser.getEmail(),subject,content); } - - private String toTimeString(LocalDateTime time){ - return time.atZone(ZoneOffset.UTC) - .withZoneSameInstant(ZoneId.of(zone)) - .toLocalDateTime() - .format(FORMATTER); - } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java index 1a664dde..e690c7a6 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.admin.listener; +import com.nflg.mobilebroken.admin.event.TicketAssignedEvent; import com.nflg.mobilebroken.admin.event.TicketCloseEvent; import com.nflg.mobilebroken.admin.event.TicketCompleteEvent; import com.nflg.mobilebroken.admin.event.TicketReplyEvent; @@ -10,6 +11,12 @@ import org.springframework.stereotype.Component; @Component public class TicketEventListener { + @Async + @EventListener + public void handleTicketAssignedEvent(TicketAssignedEvent event) { + event.send(); + } + @Async @EventListener public void handleTicketReplyEvent(TicketReplyEvent event) { diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java index 646806ac..99d3b781 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.admin.publisher; +import com.nflg.mobilebroken.admin.event.TicketAssignedEvent; import com.nflg.mobilebroken.admin.event.TicketCloseEvent; import com.nflg.mobilebroken.admin.event.TicketCompleteEvent; import com.nflg.mobilebroken.admin.event.TicketReplyEvent; @@ -9,6 +10,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; @Service public class TicketEventPublisher { @@ -19,20 +21,26 @@ public class TicketEventPublisher { @Resource private ApplicationContext applicationContext; - public void publishTicketReplyEvent(Ticket ticket, String language, String zone) { - TicketReplyEvent event = new TicketReplyEvent(this, ticket, language, zone); + public void publishTicketAssignedEvent(Ticket ticket, List userIds) { + TicketAssignedEvent event = new TicketAssignedEvent(this, ticket,userIds); event.setApplicationContext(applicationContext); eventPublisher.publishEvent(event); } - public void publishTicketCompleteEvent(Ticket ticket, String language, String zone) { - TicketCompleteEvent event = new TicketCompleteEvent(this, ticket, language, zone); + public void publishTicketReplyEvent(Ticket ticket) { + TicketReplyEvent event = new TicketReplyEvent(this, ticket); event.setApplicationContext(applicationContext); eventPublisher.publishEvent(event); } - public void publishTicketCloseEvent(Ticket ticket, String language, String zone) { - TicketCloseEvent event = new TicketCloseEvent(this, ticket, language, zone); + public void publishTicketCompleteEvent(Ticket ticket) { + TicketCompleteEvent event = new TicketCompleteEvent(this, ticket); + event.setApplicationContext(applicationContext); + eventPublisher.publishEvent(event); + } + + public void publishTicketCloseEvent(Ticket ticket) { + TicketCloseEvent event = new TicketCloseEvent(this, ticket); event.setApplicationContext(applicationContext); eventPublisher.publishEvent(event); } diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java index 86cab1f6..01e0ecc7 100644 --- a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java @@ -54,8 +54,8 @@ public class AdminController extends ControllerBase { @Valid @NotBlank(message = "密码不能为空") @RequestParam("password") String password) { AdminUser user=adminUserService.getUser(userName,password); VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误"); - VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())).throwMessage(STATE.PassportErr, "账户被禁用,请联系管理员"); - VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())).throwMessage(STATE.PassportErr, "账户未激活"); + VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())).throwMessage(STATE.PassportErr, "账号被禁用,请联系管理员"); + VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())).throwMessage(STATE.PassportErr, "账号未激活"); List roleCodes = adminUserRoleMapService.getRoleList(user.getId()); SaTokenAdminUtil.login(user.getId(), SaLoginConfig .setExtra("from", "admin") diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java index c64cc3da..32af85fc 100644 --- a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java @@ -3,6 +3,7 @@ package com.nflg.mobilebroken.auth.controller; import cn.dev33.satoken.stp.SaLoginConfig; import cn.dev33.satoken.stp.SaTokenInfo; import cn.hutool.core.util.StrUtil; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.UserState; import com.nflg.mobilebroken.common.pojo.ApiResult; @@ -11,6 +12,7 @@ import com.nflg.mobilebroken.common.util.SaTokenAppUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.AppUser; import com.nflg.mobilebroken.repository.service.IAppUserService; +import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -30,7 +32,10 @@ import java.util.stream.Collectors; public class AppController extends ControllerBase { @Resource - IAppUserService appUserService; + private IAppUserService appUserService; + + @Resource + private IDictionaryItemTranslateService dictionaryItemTranslateService; /** * 用户端登录 @@ -41,10 +46,16 @@ public class AppController extends ControllerBase { @GetMapping("login") public ApiResult login(String userName, String password) { AppUser user=appUserService.getUser(userName,password); - VUtils.trueThrow(Objects.isNull(user)).throwMessage(STATE.PassportErr,"用户名或密码错误"); - VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())).throwMessage(STATE.PassportErr, "账户被禁用,请联系管理员"); - VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())).throwMessage(STATE.PassportErr, "账户未激活"); - VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now()))).throwMessage(STATE.PassportErr, "用户已过期,请联系管理员"); + VUtils.trueThrow(Objects.isNull(user)) + .throwMessage(STATE.PassportErr,dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR,Constant.DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD,Constant.DEFAULT_LANGUAGE_CODE)); + VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR,Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED,user.getLanguageCode())); + VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR,Constant.DICTIONARY_ITEM_ACCOUNT_NOT_ACTIVATED,user.getLanguageCode())); + VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && user.getIsPrimary()) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR,Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_PRIMARY,user.getLanguageCode())); + VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && !user.getIsPrimary()) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR,Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED,user.getLanguageCode())); SaTokenAppUtil.login(user.getId(), SaLoginConfig .setExtra("from", "app") .setExtra("name", user.getName()) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java index 16978bfc..07295809 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/FileController.java @@ -53,21 +53,19 @@ public class FileController extends ControllerBase { ,@Valid @NotNull @RequestParam("source") Byte source ,@Valid @NotNull @RequestParam("sourceId") Integer sourceId) { try { - String url=fileUploadService.upload(buildFilePath(file), file); - fileUploadRecordService.save(buildFileUploadRecord(source,sourceId,file,url)); + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); + fileUploadRecordService.save(buildFileUploadRecord(source,sourceId,fileName,fileType,url)); return ApiResult.success(url); }catch (Exception ex){ throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage()); } } - private String buildFilePath(MultipartFile file) { - return StrUtil.format("cfs/{}/{}/{}{}", LocalDateTime.now().format(FORMATTER), AppUserUtil.getUserId(), - RandomUtil.randomString(6),getExtensions(file)); - } - - private String getExtensions(MultipartFile file){ - return file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + private String buildFilePath(String fileName,String fileType) { + return StrUtil.format("cfs/{}/{}/{}/{}{}", LocalDateTime.now().format(FORMATTER), AppUserUtil.getUserId() + , RandomUtil.randomString(4), fileName,fileType); } /** @@ -84,10 +82,12 @@ public class FileController extends ControllerBase { try { List list = new ArrayList<>(); List records = new ArrayList<>(); - for (MultipartFile f : files) { - String url=fileUploadService.upload(buildFilePath(f), f); + for (MultipartFile file : files) { + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); list.add(url); - records.add(buildFileUploadRecord(source,sourceId,f,url)); + records.add(buildFileUploadRecord(source,sourceId,fileName,fileType,url)); } fileUploadRecordService.saveBatch(records); return ApiResult.success(list); @@ -104,17 +104,19 @@ public class FileController extends ControllerBase { @PostMapping("uploadSingleFile1") public ApiResult uploadSingleFile1(@Valid @NotNull @RequestParam("file") MultipartFile file) { try { - String url=fileUploadService.upload(buildFilePath(file), file); + String fileName=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".")); + String fileType=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + String url=fileUploadService.upload(buildFilePath(fileName,fileType), file); return ApiResult.success(url); }catch (Exception ex){ throw new NflgException(STATE.BusinessError,"上传文件失败:"+ex.getMessage()); } } - private FileUploadRecord buildFileUploadRecord(Byte source,Integer sourceId,MultipartFile file,String url){ + private FileUploadRecord buildFileUploadRecord(Byte source,Integer sourceId,String fileName,String fileType,String url){ return new FileUploadRecord() - .setFileName(file.getOriginalFilename()) - .setFileType(file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."))) + .setFileName(fileName) + .setFileType(fileType) .setFrom("app") .setCreateTime(LocalDateTime.now()) .setSource(source) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java index 3c77dce8..436d7fef 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java @@ -1,6 +1,5 @@ package com.nflg.mobilebroken.cfs.listener; -import com.nflg.mobilebroken.cfs.event.TicketAssignedEvent; import com.nflg.mobilebroken.cfs.event.TicketCreateEvent; import com.nflg.mobilebroken.cfs.event.TicketReplyEvent; import com.nflg.mobilebroken.cfs.event.TicketRevokeEvent; @@ -17,12 +16,6 @@ public class TicketEventListener { event.send(); } - @Async - @EventListener - public void handleTicketAssignedEvent(TicketAssignedEvent event) { - event.send(); - } - @Async @EventListener public void handleTicketReplyEvent(TicketReplyEvent event) { diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java index cd722917..ecdef729 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java @@ -1,6 +1,9 @@ package com.nflg.mobilebroken.cfs.publisher; -import com.nflg.mobilebroken.cfs.event.*; +import com.nflg.mobilebroken.cfs.event.TicketCreateEvent; +import com.nflg.mobilebroken.cfs.event.TicketReopenEvent; +import com.nflg.mobilebroken.cfs.event.TicketReplyEvent; +import com.nflg.mobilebroken.cfs.event.TicketRevokeEvent; import com.nflg.mobilebroken.repository.entity.Ticket; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEventPublisher; @@ -23,12 +26,6 @@ public class TicketEventPublisher { eventPublisher.publishEvent(event); } - public void publishTicketAssignedEvent(Ticket ticket, String language, String zone) { - TicketAssignedEvent event = new TicketAssignedEvent(this, ticket, language, zone); - event.setApplicationContext(applicationContext); - eventPublisher.publishEvent(event); - } - public void publishTicketReplyEvent(Ticket ticket, String language, String zone) { TicketReplyEvent event = new TicketReplyEvent(this, ticket, language, zone); event.setApplicationContext(applicationContext); diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java index 6c3b31fd..ea28eb16 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/constant/Constant.java @@ -6,18 +6,12 @@ public class Constant { public static final String DICTIONARY_TYPE_SERVICE_EVALUATION = "ServiceEvaluation"; -// public static final String DICTIONARY_TYPE_SERVICE_EVALUATION_SELECT = "ServiceEvaluationSelect"; - public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION = "ExperienceEvaluation"; -// public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION_SELECT = "ExperienceEvaluationSelect"; - public static final String DICTIONARY_TYPE_TITLE_CQM = "CQM"; public static final String DICTIONARY_ITEM_DEVICECOMPONENT = "modelComponents"; - public static final String REDIS_KEY_USER_RESETPASSWORD_RANDOM_CODE_APP = "app:kaptcha:user:resetpassword:{}"; - public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_APP = "app:kaptcha:user:update:{}"; public static final String REDIS_KEY_USER_UPDATE_KAPTCHA_ADMIN = "admin:kaptcha:user:update:{}"; @@ -81,4 +75,16 @@ public class Constant { * 角色 账号审核 */ public static final String ROLE_CODE_ACCOUNT_REVIEW = "AccountReview"; + + public static final String DICTIONARY_SYSTEMERROR ="SystemErrorMessage"; + + public static final String DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD="IncorrectUsernameOrPassword"; + + public static final String DICTIONARY_ITEM_ACCOUNT_DISABLED="AccountDisabled"; + + public static final String DICTIONARY_ITEM_ACCOUNT_NOT_ACTIVATED="AccountNotActivated"; + + public static final String DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED_PRIMARY="AccountHasExpiredPrimary"; + + public static final String DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED="AccountHasExpired"; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MigrateAppUserRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MigrateAppUserRequest.java index 9353d09d..b16f738d 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MigrateAppUserRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MigrateAppUserRequest.java @@ -2,14 +2,18 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.util.List; @Data public class MigrateAppUserRequest { // 新公司id + @NotNull private Integer companyId; // 用户id集合 + @NotEmpty private List userIds; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TicketHandleAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TicketHandleAddRequest.java new file mode 100644 index 00000000..9b227f3f --- /dev/null +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/TicketHandleAddRequest.java @@ -0,0 +1,19 @@ +package com.nflg.mobilebroken.common.pojo.request; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class TicketHandleAddRequest { + + //工单id + @NotNull + private Integer ticketId; + + //用户id列表 + @NotEmpty + private List userIds; +} 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 9aecb66c..501590bb 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 @@ -148,4 +148,8 @@ public class AdminTicketVO { public String getFollowedDesc() { return followed ? "已关注" : "未关注"; } + + //评价 + @IgnoreExport + private TicketEvaluateVO evaluate; } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminMessageMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminMessageMapper.java index 536d9a88..074231db 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminMessageMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminMessageMapper.java @@ -3,7 +3,6 @@ package com.nflg.mobilebroken.repository.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.repository.entity.AdminMessage; @@ -20,5 +19,5 @@ public interface AdminMessageMapper extends BaseMapper { IPage search(Integer userId, AdminMessageSearchRequest request, IPage page); - PageData getNotReadMessage(Integer userId, Integer num, Page page); + IPage getNotReadMessage(Integer userId, Integer num, Page page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminMessageService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminMessageService.java index a99aabc6..ffe10f82 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminMessageService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminMessageService.java @@ -2,11 +2,9 @@ package com.nflg.mobilebroken.repository.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; -import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.repository.entity.AdminMessage; -import com.nflg.mobilebroken.repository.entity.Ticket; import java.util.List; @@ -26,9 +24,7 @@ public interface IAdminMessageService extends IService { void setNotRead(List ids); - void addCQMNotify(Ticket ticket); - void add(AdminMessage message); - PageData getNotReadMessage(Integer userId, Integer num); + IPage getNotReadMessage(Integer userId, Integer num); } 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 7af6282e..58b6b108 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 @@ -43,4 +43,6 @@ public interface ITicketService extends IService { Ticket revoked(Integer id); Ticket reopen(Integer id); + + Ticket addTicketHandle(TicketHandleAddRequest request); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMessageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMessageServiceImpl.java index 01df801f..5a58fc88 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMessageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMessageServiceImpl.java @@ -4,11 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest; import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.repository.entity.AdminMessage; -import com.nflg.mobilebroken.repository.entity.Ticket; import com.nflg.mobilebroken.repository.mapper.AdminMessageMapper; import com.nflg.mobilebroken.repository.service.IAdminMessageService; import org.springframework.stereotype.Service; @@ -48,30 +46,6 @@ public class AdminMessageServiceImpl extends ServiceImpl cqms=deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()); -// if (CollectionUtil.isEmpty(cqms)){ -// log.warn("该设备尚未设置CQM负责人:"+ticket.getDeviceNo()); -// }else { -// List cqmUsers = adminUserService.listByIds(cqms); -// if (CollectionUtil.isNotEmpty(cqmUsers)) { -// cqmUsers.forEach(c -> add( -// new AdminMessage() -// .setNo(ticket.getNo()) -// .setUserId(c.getId()) -// .setSourceId(ticket.getId()) -// .setSource(0) -// .setType(MessageType.WorkOrderAssignment.getState()) -// .setSubType(MessageSubType.TicketToBeAssigned.getState()) -// .setIsRead(false) -// .setCreateTime(LocalDateTime.now())) -// ); -// } -// } - } - @Transactional public void add(AdminMessage message){ remove(new LambdaQueryWrapper() @@ -82,7 +56,7 @@ public class AdminMessageServiceImpl extends ServiceImpl getNotReadMessage(Integer userId, Integer num) { + public IPage getNotReadMessage(Integer userId, Integer num) { return baseMapper.getNotReadMessage(userId, num, new Page<>(1, num)); } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java index 3e3bf87c..db1c019f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserApplyforServiceImpl.java @@ -55,6 +55,9 @@ public class AppUserApplyforServiceImpl extends ServiceImpl customers =customerService.listByIds(Arrays.stream(appUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); - applyforInfo.setCompanyName(StrUtil.join(",",customers.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()))); applyforInfo + .setCompanyName(StrUtil.join(",",customers.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()))) .setPhone(appUser.getPhone()) .setUserName(appUser.getName()) .setEmail(appUser.getEmail()); } - AppArea area = appAreaService.getById(applyfor.getAreaId()); - applyforInfo.setAreaName(area.getName()); + if (Objects.nonNull(applyfor.getAreaId())) { + AppArea area = appAreaService.getById(applyfor.getAreaId()); + applyforInfo.setAreaName(area.getName()); + } if (Objects.nonNull(applyfor.getTitleId())) { TBasePosition position = positionService.getById(applyfor.getTitleId()); applyforInfo.setTitleName(position.getPositionName()); } vo.setApplyfor(applyforInfo); appUser = appUserService.getById(applyfor.getCreateBy()); - area = appAreaService.getById(appUser.getAreaId()); + TBaseArea area = baseAreaService.getById(appUser.getAreaId()); vo.setUser(new AppUserVO() - .setAreaName(area.getName()) + .setAreaName(area.getAreaName()) .setSalesUserName(appUser.getSalesUserName()) .setState(1) .setExpireTime(appUser.getExpireTime()) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java index 48d31b30..da797f8d 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppUserServiceImpl.java @@ -213,6 +213,7 @@ public class AppUserServiceImpl extends ServiceImpl impl updateById(user); } + @Transactional @Override public void migrate(MigrateAppUserRequest request) { AppUser appUser = getPrimaryByCompanyId(request.getCompanyId().toString()); @@ -221,6 +222,7 @@ public class AppUserServiceImpl extends ServiceImpl impl .set(AppUser::getCompanyId, request.getCompanyId()) .set(AppUser::getExpireTime, appUser.getExpireTime()) // .set(AppUser::getUpdateBy, AdminUserUtil.getUserId()) + .set(AppUser::getAreaId, null) .set(AppUser::getUpdateTime, LocalDateTime.now()) .eq(AppUser::getIsPrimary, false) .in(AppUser::getId, request.getUserIds()) 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 9f17d638..551230cf 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 @@ -111,7 +111,7 @@ public class TicketServiceImpl extends ServiceImpl impleme public Ticket assignmentTicket(AssignmentTicketRequest request) { Ticket ticket = getById(request.getTicketId()); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); - VUtils.trueThrowBusinessError(ticket.getState() != TicketState.PendingProcessing.getState().byteValue()).throwMessage("工单状态异常"); + VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.PendingProcessing.getState())).throwMessage("工单状态异常"); // VUtils.trueThrowBusinessError(Objects.nonNull(ticket.getCqm()) && !Objects.equals(ticket.getCqm(), AdminUserUtil.getUserId())) // .throwMessage("当前工单已归属别的CQM负责人"); ticket.setUrgency(TicketUrgency.findByValue(request.getUrgency()).getState()); @@ -256,4 +256,21 @@ public class TicketServiceImpl extends ServiceImpl impleme updateById(ticket); return ticket; } + + @Override + public Ticket addTicketHandle(TicketHandleAddRequest request) { + Ticket ticket = getById(request.getTicketId()); + VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); + VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())).throwMessage("工单状态异常"); + VUtils.trueThrowBusinessError(!Objects.equals(ticket.getCqm(), AdminUserUtil.getUserId()) + && Arrays.stream(ticket.getHandle().split(",")) + .map(Integer::parseInt) + .noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId()))) + .throwMessage("你无权添加处理人"); + ticket.setHandle(ticket.getHandle().concat(",").concat(StrUtil.join(",", request.getUserIds()))); + ticket.setHandleName(ticket.getHandleName().concat(",").concat(StrUtil.join(",", adminUserService.listByIds(request.getUserIds()).stream().map(AdminUser::getUserName).collect(Collectors.toList())))); + ticket.setUpdateTime(LocalDateTime.now()); + updateById(ticket); + return ticket; + } }