From 3b6d221f9e02e1b2c1fbeffebf4429c7233f4690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 1 Jul 2025 09:27:38 +0800 Subject: [PATCH 01/22] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=B7=A5=E5=8D=95=E6=B6=88=E6=81=AF=E7=9A=84=E6=9C=AA?= =?UTF-8?q?=E8=AF=BB=E6=B6=88=E6=81=AF=E5=AF=BC=E8=87=B4=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nflg/mobilebroken/admin/controller/TicketController.java | 2 +- .../com/nflg/mobilebroken/cfs/controller/TicketController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index c9089c7e..328a18dd 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 @@ -705,7 +705,7 @@ public class TicketController extends ControllerBase { for (ChatMessageVO messageVO : messageVOS) { if (Objects.equals(messageVO.getSenderId(), userId) || readeds.contains(messageVO.getId())) { messageVO.setReaded(true); - } else { + } else if(Objects.nonNull(messageVO.getId())){ notReadeds.add(messageVO.getId()); } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index bee91b4b..783f7f0a 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -315,7 +315,7 @@ public class TicketController extends ControllerBase { for (ChatMessageVO messageVO : messageVOS) { if (Objects.equals(messageVO.getSenderId(), userId) || readeds.contains(messageVO.getId())) { messageVO.setReaded(true); - } else { + } else if(Objects.nonNull(messageVO.getId())){ notReadeds.add(messageVO.getId()); } } From 3203408193a4fbeeb1ded82e3445104bd2af3e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 1 Jul 2025 15:14:04 +0800 Subject: [PATCH 02/22] =?UTF-8?q?feat:=20=E5=A6=82=E6=9E=9C=E8=A6=81?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E7=9A=84=E5=86=85=E5=AE=B9=E4=BB=85=E5=8C=85?= =?UTF-8?q?=E5=90=AB=E6=95=B0=E5=AD=97=E5=92=8C=E7=AC=A6=E5=8F=B7=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E7=9B=B4=E6=8E=A5=E8=BF=94=E5=9B=9E=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/service/impl/AliYunTranslate.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java index bdd6ba34..ac8a71e9 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/AliYunTranslate.java @@ -56,6 +56,9 @@ public class AliYunTranslate implements ITranslate { @Override public String translateWord(String text, String sourceLanguage, String targetLanguage, String formatType) { + if (isOnlyDigitsAndSymbols(text)){ + return text; + } com.aliyun.alimt20181012.models.TranslateGeneralRequest request = new com.aliyun.alimt20181012.models.TranslateGeneralRequest() .setTargetLanguage(targetLanguage) .setSourceLanguage(sourceLanguage) @@ -101,4 +104,12 @@ public class AliYunTranslate implements ITranslate { public String translateWord(String text, String targetLanguage) { return translateWord(text, targetLanguage, "text"); } + + private boolean isOnlyDigitsAndSymbols(String content) { + if (StrUtil.isBlank(content)) { + return true; + } + // 正则:只允许数字、符号(不含中英文字母) + return content.matches("[0-9\\s\\p{Punct}]+"); + } } From f075968269928bb9f15e34958e7b8d5fe86d9849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 26 Jun 2025 17:52:43 +0800 Subject: [PATCH 03/22] =?UTF-8?q?feat:=20bug-384=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E5=90=8E=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 16 +++---- .../admin/event/TicketCompleteEvent.java | 1 + .../admin/event/TicketReplyEvent.java | 1 + .../cfs/controller/MessageController.java | 10 ++--- .../cfs/controller/TicketController.java | 45 ++++++++++++------- .../cfs/event/TicketCreateEvent.java | 12 ++++- .../common/constant/Constant.java | 2 +- .../mobilebroken/common/pojo/dto/UserDTO.java | 3 ++ .../pojo/request/AreaSearchRequest.java | 2 + .../mobilebroken/common/util/AppUserUtil.java | 1 + .../repository/entity/AppMessage.java | 5 +++ .../repository/entity/Ticket.java | 5 +++ .../repository/entity/TicketFavorites.java | 5 +++ .../repository/mapper/AppMessageMapper.java | 4 +- .../repository/mapper/TicketMapper.java | 6 +-- .../service/IAppMessageService.java | 10 ++--- .../service/ITicketFavoritesService.java | 12 ++--- .../service/ITicketFollowService.java | 8 ++-- .../repository/service/ITicketService.java | 2 +- .../service/impl/AppAreaServiceImpl.java | 4 ++ .../service/impl/AppMessageServiceImpl.java | 30 +++++++------ .../service/impl/DeviceServiceImpl.java | 13 +++--- .../impl/TicketFavoritesServiceImpl.java | 24 +++++----- .../service/impl/TicketFollowServiceImpl.java | 27 ++++++----- .../service/impl/TicketServiceImpl.java | 13 +++--- .../resources/mapper/AppMessageMapper.xml | 4 +- .../main/resources/mapper/DeviceMapper.xml | 11 +++-- .../main/resources/mapper/TicketMapper.xml | 10 ++--- 28 files changed, 173 insertions(+), 113 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 328a18dd..cedcf456 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 @@ -154,7 +154,7 @@ public class TicketController extends ControllerBase { @GetMapping("getFavorites") @ApiMark(moduleName = "工单管理", apiName = "获取收藏夹",isPublic = true) public ApiResult getFavorites(@RequestParam(defaultValue ="0") Integer id){ - return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),id)); + return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),id)); } /** @@ -165,7 +165,7 @@ public class TicketController extends ControllerBase { @PostMapping("addFavorites") @ApiMark(moduleName = "工单管理", apiName = "添加收藏夹",isPublic = true) public ApiResult addFavorites(@Valid @RequestBody AdminFavoritesRequest request){ - ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId()); + ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -175,7 +175,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("updateFavorites") public ApiResult updateFavorites(@Valid @RequestBody FavoritesUpdateRequest request){ - ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId()); + ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -187,7 +187,7 @@ public class TicketController extends ControllerBase { @PostMapping("deleteFavorites") @ApiMark(moduleName = "工单管理", apiName = "删除收藏夹",isPublic = true) public ApiResult deleteFavorites(@Valid @RequestParam @NotNull Integer favoritesId){ - ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),favoritesId); + ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),favoritesId); return ApiResult.success(); } @@ -197,7 +197,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("moveFavorites") public ApiResult moveFavorites(@Valid @RequestBody FavoritesMoveRequest request){ - ticketFavoritesService.moveFavorites(AdminUserUtil.getUserId(),request); + ticketFavoritesService.moveFavorites(request); return ApiResult.success(); } @@ -207,7 +207,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("moveFavoritesTicket") public ApiResult moveFavoritesTicket(@Valid @RequestBody FavoritesTicketMoveRequest request){ - ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),request); + ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),request); return ApiResult.success(); } @@ -218,7 +218,7 @@ public class TicketController extends ControllerBase { @PostMapping("followTiket") @ApiMark(moduleName = "工单管理", apiName = "关注工单") public ApiResult followTiket(@Valid @RequestBody AdminFollowRequest request){ - ticketFollowService.follow(request, AdminUserUtil.getUserId()); + ticketFollowService.follow(request, AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -228,7 +228,7 @@ public class TicketController extends ControllerBase { **/ @PostMapping("unfollowTicket") public ApiResult unfollowTicket(@Valid @RequestParam @NotNull Integer ticketId){ - ticketFollowService.unfollow(AdminUserUtil.getUserId(),ticketId); + ticketFollowService.unfollow(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),ticketId); return ApiResult.success(); } 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 fd47d07e..ae2aa6eb 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 @@ -58,6 +58,7 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application //我的消息 appMessageService.add(new AppMessage() .setUserId(ticket.getUserId()) + .setUserPlatform(ticket.getUserPlatform()) .setTicketId(ticket.getId()) .setSubType(MessageSubType.TicketCompletion.getState()) .setIsRead(false) 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 6845ba59..b06fa92a 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 @@ -60,6 +60,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon //我的消息 appMessageService.add(new AppMessage() .setUserId(ticket.getUserId()) + .setUserPlatform(ticket.getUserPlatform()) .setTicketId(ticket.getId()) .setSubType(MessageSubType.TicketNewMessage.getState()) .setIsRead(false) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java index 4cd54a23..20da0433 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java @@ -41,7 +41,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("searchMessages") public ApiResult> searchMessages(@RequestBody AppMessageSearchRequest request) { - return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(), request)); + return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(),AppUserUtil.getFrom(), request)); } /** @@ -50,7 +50,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("setReaded") public ApiResult setReaded(@Valid @RequestBody List ids) { - appMessageService.setReaded(AppUserUtil.getUserId(),ids); + appMessageService.setReaded(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids); return ApiResult.success(); } @@ -60,7 +60,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("setNotRead") public ApiResult setNotRead(@Valid @RequestBody List ids) { - appMessageService.setNotRead(AppUserUtil.getUserId(),ids); + appMessageService.setNotRead(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids); return ApiResult.success(); } @@ -71,7 +71,7 @@ public class MessageController extends ControllerBase { */ @GetMapping("getNotReadMessages") public ApiResult> getNotReadMessages(@RequestParam(defaultValue = "10") Integer num) { - return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(), num)); + return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(),AppUserUtil.getFrom(), num)); } /** @@ -80,7 +80,7 @@ public class MessageController extends ControllerBase { */ @GetMapping("getNotReadMessageCount") public ApiResult getNotReadMessageCount(){ - return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId())); + return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId(),AppUserUtil.getFrom())); } /** diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index 783f7f0a..04807717 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -185,7 +185,7 @@ public class TicketController extends ControllerBase { **/ @PostMapping("followTiket") public ApiResult followTiket(@Valid @RequestBody FollowRequest request){ - ticketFollowService.handle(request, AppUserUtil.getUserId()); + ticketFollowService.handle(request, AppUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -198,17 +198,27 @@ public class TicketController extends ControllerBase { public ApiResult getTicket(@Valid @RequestParam @NotNull Integer id) { Ticket ticket = ticketService.getById(id); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); - AppUser user = appUserService.getById(ticket.getUserId()); String areaName = ""; - if (user.getIsPrimary()){ - areaName=StrUtil.join(",",customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - }else if (Objects.nonNull(user.getAreaId())){ - AppArea area = appAreaService.getById(user.getAreaId()); - if (Objects.nonNull(area)) { - areaName = area.getName(); + List companys=new ArrayList<>(); + String userName,userAvatar; + if (StrUtil.equals(ticket.getUserPlatform(),"app")) { + AppUser user = appUserService.getById(ticket.getUserId()); + userName = user.getName(); + userAvatar = user.getAvatar(); + if (user.getIsPrimary()) { + areaName = StrUtil.join(",", customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); + } else if (Objects.nonNull(user.getAreaId())) { + AppArea area = appAreaService.getById(user.getAreaId()); + if (Objects.nonNull(area)) { + areaName = area.getName(); + } } + companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); + }else { + AdminUser adminUser=adminUserService.getById(ticket.getUserId()); + userName = adminUser.getUserName(); + userAvatar = adminUser.getAvatar(); } - List companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); String handle = ticket.getHandle(); if (StrUtil.isNotBlank(handle)) { @@ -230,8 +240,8 @@ public class TicketController extends ControllerBase { .setImages(getFileVOs(ticket.getImages())) .setAttachments(getFileVOs(ticket.getAttachments())) .setCreateUserId(ticket.getUserId()) - .setCreateUserName(user.getName()) - .setCreateUserAvatar(user.getAvatar()) + .setCreateUserName(userName) + .setCreateUserAvatar(userAvatar) .setCreateTime(ticket.getCreateTime()) .setAreaName(areaName) .setSolveTime(ticket.getSolveTime()) @@ -338,22 +348,25 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.Processing.getState()) > 1) .throwMessage("当前工单状态不允许发送消息"); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(),AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(),AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("工单创建人才能发送消息"); - AppUser user = appUserService.getById(AppUserUtil.getUserId()); ChatMessageDTO message = new ChatMessageDTO() .setId(IdUtil.getSnowflakeNextIdStr()) .setFrom("app") .setTicketState(ticket.getState()) - .setSenderId(user.getId()) - .setSenderName(user.getName()) - .setSenderAvatar(user.getAvatar()) .setContent(request.getContent()) .setCreateTime(Instant.now()) .setAttachments(request.getAttachments()) .setImages(request.getImages()) .setRemindUsers(request.getRemindUsers()) .setAudioUrl(request.getAudioUrl()); + if (StrUtil.equals(ticket.getUserPlatform(),"app")){ + AppUser user = appUserService.getById(AppUserUtil.getUserId()); + message.setSenderId(user.getId()).setSenderName(user.getName()).setSenderAvatar(user.getAvatar()); + }else { + AdminUser adminUser= adminUserService.getById(AppUserUtil.getUserId()); + message.setSenderId(adminUser.getId()).setSenderName(adminUser.getUserName()).setSenderAvatar(adminUser.getAvatar()); + } if(Objects.nonNull(request.getQuoteId())){ ChatMessageDTO quoteMessage = ticketChatService.getMessage(request.getTicketId(), request.getQuoteId()); message.setQuote(quoteMessage); diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java index 080fa489..4dfc0906 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java @@ -2,6 +2,7 @@ package com.nflg.mobilebroken.cfs.event; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.MessageSubType; import com.nflg.mobilebroken.common.constant.MessageType; @@ -87,12 +88,19 @@ public class TicketCreateEvent extends ApplicationEvent implements ApplicationCo private void sendEmail(){ try { - AppUser appUser=appUserService.getById(ticket.getUserId()); + String tickerUserName; + if (StrUtil.equals(ticket.getUserPlatform(),"app")){ + AppUser appUser=appUserService.getById(ticket.getUserId()); + tickerUserName=appUser.getName(); + }else { + AdminUser adminUser=adminUserService.getById(ticket.getUserId()); + tickerUserName=adminUser.getUserName(); + } String subject=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_CREATE,language); String content=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY,language) .replace("${no}",ticket.getNo()) .replace("${title}",ticket.getTitle()) - .replace("${createUser}",appUser.getName()) + .replace("${createUser}",tickerUserName) .replace("${handleUser}","") .replace("${createTime}",toTimeString(ticket.getCreateTime())) .replace("${msg}",subject); 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 ad3c5992..c9a4fd33 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 @@ -24,7 +24,7 @@ public class Constant { public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_ADMIN = "admin:message:unread"; - public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread"; + public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread:{}"; public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled"; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java index 889ff982..bbdd3f0b 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java @@ -24,6 +24,9 @@ public class UserDTO { //是否是主账号 private Boolean isPrimary; + //用户来源平台,app或者admin + private String from; + //公司id private List companyIds; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java index 5eddd521..522e8280 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java @@ -17,4 +17,6 @@ public class AreaSearchRequest extends PageRequest { //区域创建人id @JsonIgnore private Integer createBy; + + } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java index ba226a81..aa1950c1 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java @@ -44,6 +44,7 @@ public class AppUserUtil { user.setEmail(getEmail()); user.setCompanyIds(getCompanyIds()); user.setIsPrimary(isPrimary()); + user.setFrom(getFrom()); return user; } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java index 135c7454..3a68003b 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java @@ -39,6 +39,11 @@ public class AppMessage implements Serializable { */ private Integer userId; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 任务事项,5:工单新消息;6:工单完成;10:工单超时 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java index f09656de..eb47663f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java @@ -82,6 +82,11 @@ public class Ticket implements Serializable { */ private Integer userId; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 创建时间 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java index 80e1d699..0ece0864 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java @@ -49,6 +49,11 @@ public class TicketFavorites implements Serializable { */ private Integer createBy; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 创建时间 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java index 39c869c0..e7d7dac9 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java @@ -15,7 +15,7 @@ import com.nflg.mobilebroken.repository.entity.AppMessage; */ public interface AppMessageMapper extends BaseMapper { - IPage getNotReadMessage(Integer userId, Integer num, IPage page); + IPage getNotReadMessage(Integer userId,String from, Integer num, IPage page); - IPage search(Integer userId, String title, IPage page); + IPage search(Integer userId,String from, String title, IPage page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java index 69ffb302..8721e3c5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java @@ -21,9 +21,9 @@ import java.util.List; */ public interface TicketMapper extends BaseMapper { - IPage searchMy(IPage page, TicketSearchRequest request, Integer userId,String language); + IPage searchMy(IPage page, TicketSearchRequest request, Integer userId,String from,String language); - IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId,String language); + IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId,String from,String language); IPage searchArea(IPage page, TicketSearchRequest request, String companyId, Integer userId,String language,Boolean isPrimary,String companyCode); @@ -37,7 +37,7 @@ public interface TicketMapper extends BaseMapper { List searchAllFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId); - List getAdminFavorites(Integer userId,Integer favoritesId); + List getAdminFavorites(Integer userId,String from,Integer favoritesId); IPage searchByFavouritesId(Integer userId, Integer favouritesId, Page page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java index 285def2b..fa83d3dd 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java @@ -18,15 +18,15 @@ import java.util.List; */ public interface IAppMessageService extends IService { - IPage getNotReadMessage(Integer userId, Integer num); + IPage getNotReadMessage(Integer userId,String from, Integer num); - IPage search(Integer userId, AppMessageSearchRequest request); + IPage search(Integer userId,String from, AppMessageSearchRequest request); - void setReaded(Integer userId,List ids); + void setReaded(Integer userId,String from,List ids); - void setNotRead(Integer userId,List ids); + void setNotRead(Integer userId,String from,List ids); void add(AppMessage message); - Integer getNotReadMessageCount(Integer userId); + Integer getNotReadMessageCount(Integer userId,String from); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java index 913ed0dc..6696daeb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java @@ -18,15 +18,15 @@ import com.nflg.mobilebroken.repository.entity.TicketFavorites; */ public interface ITicketFavoritesService extends IService { - FavoritesVO getList(Integer userId,Integer id); + FavoritesVO getList(Integer userId,String from,Integer id); - void addFavorites(AdminFavoritesRequest request, Integer userId); + void addFavorites(AdminFavoritesRequest request, Integer userId,String from); - void deleteFavorites(Integer userId,Integer favoritesId); + void deleteFavorites(Integer userId,String from,Integer favoritesId); - void updateFavorites(FavoritesUpdateRequest request, Integer userId); + void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from); - void moveFavorites(Integer userId, FavoritesMoveRequest request); + void moveFavorites(FavoritesMoveRequest request); - void moveFavoritesTicket(Integer userId, FavoritesTicketMoveRequest request); + void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java index f9a9ed28..020f4f29 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java @@ -15,11 +15,11 @@ import com.nflg.mobilebroken.repository.entity.TicketFollow; */ public interface ITicketFollowService extends IService { - void handle(FollowRequest request, Integer userId); + void handle(FollowRequest request, Integer userId,String from); - void follow(AdminFollowRequest request, Integer userId); + void follow(AdminFollowRequest request, Integer userId,String from); - void unfollow(Integer userId, Integer ticketId); + void unfollow(Integer userId,String from, Integer ticketId); - void deleteFavorites(Integer userId, Integer favoritesId); + void deleteFavorites(Integer userId,String from, Integer favoritesId); } 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 c1e32b1e..184d086d 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 @@ -51,7 +51,7 @@ public interface ITicketService extends IService { List getTicketHandle(Integer id); - List getAdminFavorites(Integer userId,Integer favoritesId); + List getAdminFavorites(Integer userId,String from,Integer favoritesId); Ticket rejectTicket(Integer id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java index 6050c16b..2cb202ad 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java @@ -7,6 +7,7 @@ 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.constant.Constant; import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest; import com.nflg.mobilebroken.common.pojo.request.EnableRequest; import com.nflg.mobilebroken.common.pojo.vo.AreaVO; @@ -56,6 +57,9 @@ public class AppAreaServiceImpl extends ServiceImpl impl @Override public IPage search(AreaSearchRequest request) { + if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)){ + return new Page<>(request.getPage(), request.getPageSize()); + } if (AppUserUtil.isPrimary()){ request.setCreateBy(AppUserUtil.getUserId()); }else { diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java index 11997445..15649265 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java @@ -37,13 +37,13 @@ public class AppMessageServiceImpl extends ServiceImpl redisTemplate; @Override - public IPage getNotReadMessage(Integer userId, Integer num) { - return baseMapper.getNotReadMessage(userId, num, new Page<>(1, num)); + public IPage getNotReadMessage(Integer userId,String from, Integer num) { + return baseMapper.getNotReadMessage(userId,from, num, new Page<>(1, num)); } @Override - public IPage search(Integer userId, AppMessageSearchRequest request) { - IPage datas = baseMapper.search(userId, request.getTitle(), new Page<>(request.getPage(), request.getPageSize())); + public IPage search(Integer userId,String from, AppMessageSearchRequest request) { + IPage datas = baseMapper.search(userId,from, request.getTitle(), new Page<>(request.getPage(), request.getPageSize())); Map userMap = new HashMap<>(); datas.getRecords().forEach(d -> { if (StrUtil.isNotBlank(d.getTicketHandleBy())) { @@ -64,23 +64,23 @@ public class AppMessageServiceImpl extends ServiceImpl ids) { + public void setReaded(Integer userId,String from,List ids) { lambdaUpdate() .set(AppMessage::getIsRead, true) .eq(AppMessage::getUserId, userId) .in(AppMessage::getId, ids) .update(); - setUnreadMessageCount(userId); + setUnreadMessageCount(userId,from); } @Override - public void setNotRead(Integer userId,List ids) { + public void setNotRead(Integer userId,String from,List ids) { lambdaUpdate() .set(AppMessage::getIsRead, false) .eq(AppMessage::getUserId, userId) .in(AppMessage::getId, ids) .update(); - setUnreadMessageCount(userId); + setUnreadMessageCount(userId,from); } @Override @@ -88,21 +88,23 @@ public class AppMessageServiceImpl extends ServiceImpl() .eq(AppMessage::getIsRead, false) .eq(AppMessage::getSubType, message.getSubType()) - .eq(AppMessage::getUserId, message.getUserId())); + .eq(AppMessage::getUserId, message.getUserId()) + .eq(AppMessage::getUserPlatform, message.getUserPlatform())); save(message); - setUnreadMessageCount(message.getUserId()); + setUnreadMessageCount(message.getUserId(),message.getUserPlatform()); } - private void setUnreadMessageCount(Integer userId){ + private void setUnreadMessageCount(Integer userId,String from){ Integer count= Math.toIntExact(lambdaQuery() .eq(AppMessage::getIsRead, false) .eq(AppMessage::getUserId, userId) + .eq(AppMessage::getUserPlatform, from) .count()); - redisTemplate.opsForHash().put(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId, count); + redisTemplate.opsForHash().put(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId, count); } @Override - public Integer getNotReadMessageCount(Integer userId) { - return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId)).orElse(0); + public Integer getNotReadMessageCount(Integer userId, String from) { + return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId)).orElse(0); } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java index fa14b7a9..913ab6ae 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java @@ -1,7 +1,9 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; import com.nflg.mobilebroken.common.pojo.request.SearchDeviceRequest; import com.nflg.mobilebroken.common.pojo.vo.DeviceAgentVO; @@ -50,13 +52,10 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public Page searchDevice(SearchDeviceRequest request,String language) { -// IPage page = lambdaQuery() -// .like(StrUtil.isNotBlank(request.getDeviceNo()), Device::getDeviceNo, request.getDeviceNo()) -// .like(StrUtil.isNotBlank(request.getModelNo()), Device::getModelNo, request.getModelNo()) -// .between(Objects.nonNull(request.getStartTime()), Device::getShipmentDate, request.getStartTime(), request.getEndTime()) -// .page(new Page<>(request.getPage(), request.getPageSize())); -// return PageUtil.convert(page, d -> Convert.convert(DeviceVO.class, d)); - List companyIds = AppUserUtil.getCompanyIds(); + List companyIds = null; + if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_APP)){ + companyIds = AppUserUtil.getCompanyIds(); + } return baseMapper.searchDevice(request, companyIds,language ,new Page<>(request.getPage(), request.getPageSize())); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java index b89cbd95..11e38169 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.mobilebroken.common.pojo.request.AdminFavoritesRequest; import com.nflg.mobilebroken.common.pojo.request.FavoritesMoveRequest; @@ -39,45 +40,46 @@ public class TicketFavoritesServiceImpl extends ServiceImplnew FavoritesVO().setId(f.getId()).setName(f.getName())).collect(Collectors.toList())); - vo.setTickets(ticketService.getAdminFavorites(userId,id)); + vo.setTickets(ticketService.getAdminFavorites(userId,from,id)); return vo; } @Override - public void addFavorites(AdminFavoritesRequest request, Integer userId) { + public void addFavorites(AdminFavoritesRequest request, Integer userId,String from) { VUtils.trueThrowBusinessError(lambdaQuery().eq(TicketFavorites::getParentId,request.getParentId()).eq(TicketFavorites::getName,request.getName()).exists()) .throwMessage("已存在该名称的收藏夹"); - save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setCreateTime(LocalDateTime.now())); + save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setUserPlatform(from).setCreateTime(LocalDateTime.now())); } @Transactional @Override - public void deleteFavorites(Integer userId, Integer favoritesId) { + public void deleteFavorites(Integer userId,String from, Integer favoritesId) { TicketFavorites favorites = lambdaQuery().eq(TicketFavorites::getId, favoritesId).one(); VUtils.trueThrowBusinessError(Objects.isNull(favorites)).throwMessage("该收藏夹不存在"); VUtils.trueThrowBusinessError(!Objects.equals(favorites.getCreateBy(), userId)).throwMessage("无权限删除该收藏夹"); - ticketFollowService.deleteFavorites(userId, favoritesId); + ticketFollowService.deleteFavorites(userId,from, favoritesId); if (!Objects.equals(favoritesId, 0)){ lambdaUpdate().eq(TicketFavorites::getId,favoritesId).remove(); } } @Override - public void updateFavorites(FavoritesUpdateRequest request, Integer userId) { + public void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from) { lambdaUpdate() .set(TicketFavorites::getName,request.getName()) .eq(TicketFavorites::getId,request.getId()) .eq(TicketFavorites::getCreateBy,userId) + .eq(TicketFavorites::getUserPlatform,from) .update(); } @Override - public void moveFavorites(Integer userId, FavoritesMoveRequest request) { + public void moveFavorites(FavoritesMoveRequest request) { int orderNum=100000; if (Objects.nonNull(request.getNextFavoritesId())){ orderNum=lambdaQuery() @@ -92,12 +94,12 @@ public class TicketFavoritesServiceImpl extends ServiceImpl implements ITicketFollowService { @Override - public void handle(FollowRequest request, Integer userId) { + public void handle(FollowRequest request, Integer userId,String from) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); if (request.getIsFollow()) { TicketFollow ticketFollow = lambdaQuery() .eq(TicketFollow::getTicketId, request.getTicketId()) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 0) + .eq(TicketFollow::getFrom, bf) .one(); if (Objects.isNull(ticketFollow)) { TicketFollow follow = new TicketFollow() .setTicketId(request.getTicketId()) .setUserId(userId) - .setFrom((byte) 0) + .setFrom(bf) .setCreateTime(LocalDateTime.now()); save(follow); } @@ -44,40 +46,43 @@ public class TicketFollowServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(TicketFollow::getTicketId, request.getTicketId()); lambdaQueryWrapper.eq(TicketFollow::getUserId, userId); - lambdaQueryWrapper.eq(TicketFollow::getFrom, (byte) 0); + lambdaQueryWrapper.eq(TicketFollow::getFrom, bf); this.remove(lambdaQueryWrapper); } } @Transactional @Override - public void follow(AdminFollowRequest request, Integer userId) { + public void follow(AdminFollowRequest request, Integer userId,String from) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getTicketId, request.getTicketId()) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); TicketFollow ticketFollow = new TicketFollow() .setTicketId(request.getTicketId()) .setUserId(userId) .setFavoritesId(request.getFavoritesId()) - .setFrom((byte) 1) + .setFrom(bf) .setCreateTime(LocalDateTime.now()); save(ticketFollow); } @Override - public void unfollow(Integer userId, Integer ticketId) { + public void unfollow(Integer userId,String from, Integer ticketId) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getTicketId, ticketId) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); } @Override - public void deleteFavorites(Integer userId, Integer favoritesId) { + public void deleteFavorites(Integer userId,String from, Integer favoritesId) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getFavoritesId, favoritesId) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); } } 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 3272f61b..13cfcc7b 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 @@ -81,6 +81,7 @@ public class TicketServiceImpl extends ServiceImpl impleme .setDescription(request.getDescription()) .setState(TicketState.PendingProcessing.getState()) .setUserId(userId) + .setUserPlatform(AppUserUtil.getFrom()) .setCreateTime(LocalDateTime.now()); save(ticket); // Collection files=CollectionUtil.addAll(request.getImages(),request.getAttachments()); @@ -131,9 +132,9 @@ public class TicketServiceImpl extends ServiceImpl impleme request.setEndTime(request.getEndTime().plusDays(1)); } if (request.getType()==1){ - return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language); + return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); }else if (request.getType()==2){ - return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language); + return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); }else if (request.getType()==3) { String companyCode = ""; if (!user.getIsPrimary()){ @@ -305,7 +306,7 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public Ticket revoked(Integer id) { Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one(); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("无权操作该工单"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0) .throwMessage("当前工单状态不允许撤销"); @@ -320,7 +321,7 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public Ticket reopen(Integer id) { Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one(); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("无权操作该工单"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0) .throwMessage("当前工单状态不允许重新打开"); @@ -367,8 +368,8 @@ public class TicketServiceImpl extends ServiceImpl impleme } @Override - public List getAdminFavorites(Integer userId,Integer favoritesId) { - return baseMapper.getAdminFavorites(userId,favoritesId); + public List getAdminFavorites(Integer userId,String from,Integer favoritesId) { + return baseMapper.getAdminFavorites(userId,from,favoritesId); } @Override diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml index 084e0a12..483846ff 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml @@ -7,7 +7,7 @@ FROM app_message m INNER JOIN ticket t ON m.ticket_id=t.id INNER JOIN app_user u ON t.user_id=u.id - WHERE m.is_read=0 AND m.user_id=#{userId} + WHERE m.is_read=0 AND m.user_id=#{userId} AND m.user_platform=#{from} ORDER BY m.create_time DESC @@ -105,11 +105,11 @@ FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_area a2 ON u.area_id=a2.id - INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0 + INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=IF(#{from}='app',0,1) LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2 LEFT JOIN t_base_part p ON t.component_id=p.id LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language} - WHERE tf.user_id=#{userId} AND t.state!=4 + WHERE tf.user_id=#{userId} AND t.user_platform=#{from} AND t.state!=4 ORDER BY t.id DESC @@ -229,7 +229,7 @@ FROM ticket_follow tf INNER JOIN ticket t ON tf.ticket_id = t.id WHERE tf.`from` = 1 - AND tf.user_id = #{userId} + AND tf.user_id = #{userId} AND tf.from=IF(#{from}='app',0,1) AND tf.favorites_id = #{favoritesId} ORDER BY t.state,t.id DESC From 6f3857f898a15a899c17dcf89f9f95b9176cae08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 30 Jul 2025 14:10:02 +0800 Subject: [PATCH 04/22] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobilebroken/common/pojo/vo/AdminTicketVO.java | 6 ++++++ .../src/main/resources/mapper/TicketMapper.xml | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) 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 128feb83..867801fb 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 @@ -209,4 +209,10 @@ public class AdminTicketVO { } return null; } + + /** + * 问题描述 + */ + @IgnoreExport + private String description; } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index d2b2d7bb..f6c73ca8 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -150,7 +150,7 @@ ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm' ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' - ,t.handle_name AS 'handle' + ,t.handle_name AS 'handle',t.description FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id @@ -173,7 +173,7 @@ ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm' ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' - ,t.handle_name AS 'handle' + ,t.handle_name AS 'handle',t.description FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id @@ -196,7 +196,7 @@ ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' - ,t.handle_name AS 'handle' + ,t.handle_name AS 'handle',t.description FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id @@ -218,7 +218,7 @@ ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',true AS 'followed' ,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle' - ,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle' + ,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle',t.description FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id @@ -251,7 +251,7 @@ ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm' ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' - ,t.handle_name AS 'handle' + ,t.handle_name AS 'handle',t.description FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN admin_user au ON t.user_id=au.id From 87527325e9596b975412e8f3c1570819138301ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 30 Jul 2025 17:06:26 +0800 Subject: [PATCH 05/22] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=94=B6?= =?UTF-8?q?=E8=97=8F=E5=A4=B9=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index e89bda54..66fa639e 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 @@ -154,7 +154,7 @@ public class TicketController extends ControllerBase { @GetMapping("getFavorites") @ApiMark(moduleName = "工单管理", apiName = "获取收藏夹",isPublic = true) public ApiResult getFavorites(@RequestParam(defaultValue ="0") Integer id){ - return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),id)); + return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,id)); } /** @@ -165,7 +165,7 @@ public class TicketController extends ControllerBase { @PostMapping("addFavorites") @ApiMark(moduleName = "工单管理", apiName = "添加收藏夹",isPublic = true) public ApiResult addFavorites(@Valid @RequestBody AdminFavoritesRequest request){ - ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); + ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId(),Constant.FROM_ADMIN); return ApiResult.success(); } @@ -175,7 +175,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("updateFavorites") public ApiResult updateFavorites(@Valid @RequestBody FavoritesUpdateRequest request){ - ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); + ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId(),Constant.FROM_ADMIN); return ApiResult.success(); } @@ -187,7 +187,7 @@ public class TicketController extends ControllerBase { @PostMapping("deleteFavorites") @ApiMark(moduleName = "工单管理", apiName = "删除收藏夹",isPublic = true) public ApiResult deleteFavorites(@Valid @RequestParam @NotNull Integer favoritesId){ - ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),favoritesId); + ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,favoritesId); return ApiResult.success(); } @@ -207,7 +207,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("moveFavoritesTicket") public ApiResult moveFavoritesTicket(@Valid @RequestBody FavoritesTicketMoveRequest request){ - ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),request); + ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,request); return ApiResult.success(); } @@ -218,7 +218,7 @@ public class TicketController extends ControllerBase { @PostMapping("followTiket") @ApiMark(moduleName = "工单管理", apiName = "关注工单") public ApiResult followTiket(@Valid @RequestBody AdminFollowRequest request){ - ticketFollowService.follow(request, AdminUserUtil.getUserId(),AppUserUtil.getFrom()); + ticketFollowService.follow(request, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); return ApiResult.success(); } @@ -228,7 +228,7 @@ public class TicketController extends ControllerBase { **/ @PostMapping("unfollowTicket") public ApiResult unfollowTicket(@Valid @RequestParam @NotNull Integer ticketId){ - ticketFollowService.unfollow(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),ticketId); + ticketFollowService.unfollow(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,ticketId); return ApiResult.success(); } From 2b04b8380b3ab12ad597d7ccd7039fa0e0f83c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 31 Jul 2025 17:21:30 +0800 Subject: [PATCH 06/22] =?UTF-8?q?feat:=20bug-384=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E5=90=8E=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 搜索消息接口优化 --- .../admin/controller/MessageController.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MessageController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MessageController.java index e9efcbd2..1a617ebb 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MessageController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MessageController.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.admin.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.common.constant.Constant; @@ -11,6 +12,7 @@ import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.common.pojo.vo.MessageConfigVO; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.PageUtil; +import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.AppUser; import com.nflg.mobilebroken.repository.entity.AppUserApplyfor; import com.nflg.mobilebroken.repository.entity.Ticket; @@ -67,9 +69,14 @@ public class MessageController extends ControllerBase { return ApiResult.success(PageUtil.convert(datas, d -> { if (Objects.equals(d.getSource(), 0)) { Ticket ticket = ticketService.getById(d.getSourceId()); - AppUser appUser = appUserService.getById(ticket.getUserId()); d.setSourceCreateTime(ticket.getCreateTime()); - d.setSourceCreateUserName(appUser.getName()); + if (StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN)) { + AdminUser adminUser = adminUserService.getById(ticket.getUserId()); + d.setSourceCreateUserName(adminUser.getUserName()); + } else { + AppUser appUser = appUserService.getById(ticket.getUserId()); + d.setSourceCreateUserName(appUser.getName()); + } } else if (Objects.equals(d.getSource(), 1)) { AppUserApplyfor appUserApplyfor = appUserApplyforService.getById(d.getSourceId()); AppUser appUser = appUserService.getById(appUserApplyfor.getCreateBy()); From acf73b2799055b0e9cc7eef22c98fc2a03807cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 26 May 2025 14:04:34 +0800 Subject: [PATCH 07/22] =?UTF-8?q?feat:=20bug-242=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E7=99=BB=E5=BD=95=E6=B7=BB=E5=8A=A0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优先查询用户端的用户,如果不是用户端的用户,则查询管理端用户 --- .../auth/controller/AppController.java | 73 +++++++++++++------ .../cfs/controller/UserController.java | 16 +++- .../common/pojo/vo/AppLoginVO.java | 3 + .../common/pojo/vo/AppUserVO.java | 8 ++ .../mobilebroken/common/util/AppUserUtil.java | 5 ++ 5 files changed, 80 insertions(+), 25 deletions(-) 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 32af85fc..ed1b9a00 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 @@ -10,7 +10,9 @@ import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.vo.AppLoginVO; import com.nflg.mobilebroken.common.util.SaTokenAppUtil; import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.AppUser; +import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.service.IAppUserService; import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; import org.springframework.web.bind.annotation.GetMapping; @@ -34,6 +36,9 @@ public class AppController extends ControllerBase { @Resource private IAppUserService appUserService; + @Resource + private IAdminUserService adminUserService; + @Resource private IDictionaryItemTranslateService dictionaryItemTranslateService; @@ -46,30 +51,50 @@ 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,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()) - .setExtra("email", user.getEmail()) - .setExtra("companyIds", StrUtil.split(user.getCompanyId(), ",").stream().map(Integer::valueOf).collect(Collectors.toList())) - .setExtra("isPrimary", user.getIsPrimary())); - user.setLastLoginTime(LocalDateTime.now()); - appUserService.updateById(user); - SaTokenInfo tokenInfo = SaTokenAppUtil.getTokenInfo(); - return ApiResult.success(new AppLoginVO() - .setUserId(user.getId()) - .setToken(tokenInfo.getTokenValue()) - .setExpire(tokenInfo.getTokenTimeout()) - .setLanguageCode(user.getLanguageCode())); + if (Objects.nonNull(user)) { + 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()) + .setExtra("email", user.getEmail()) + .setExtra("companyIds", StrUtil.split(user.getCompanyId(), ",").stream().map(Integer::valueOf).collect(Collectors.toList())) + .setExtra("isPrimary", user.getIsPrimary())); + user.setLastLoginTime(LocalDateTime.now()); + appUserService.updateById(user); + SaTokenInfo tokenInfo = SaTokenAppUtil.getTokenInfo(); + return ApiResult.success(new AppLoginVO() + .setUserId(user.getId()) + .setToken(tokenInfo.getTokenValue()) + .setExpire(tokenInfo.getTokenTimeout()) + .setLanguageCode(user.getLanguageCode()) + .setPlatform("app")); + }else { + AdminUser adminUser =adminUserService.getUser(userName,password); + VUtils.trueThrow(Objects.isNull(adminUser)) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD, Constant.DEFAULT_LANGUAGE_CODE)); + VUtils.trueThrow(Objects.equals(adminUser.getState(), UserState.Disabled.getState())) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED, Constant.DEFAULT_LANGUAGE_CODE)); + VUtils.trueThrow(Objects.equals(adminUser.getState(), UserState.ToBeActivated.getState())) + .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED, Constant.DEFAULT_LANGUAGE_CODE)); + SaTokenAppUtil.login(adminUser.getId(), SaLoginConfig + .setExtra("from", "admin") + .setExtra("name", adminUser.getUserName()) + .setExtra("email", adminUser.getEmail())); + SaTokenInfo tokenInfo = SaTokenAppUtil.getTokenInfo(); + return ApiResult.success(new AppLoginVO() + .setUserId(adminUser.getId()) + .setToken(tokenInfo.getTokenValue()) + .setExpire(tokenInfo.getTokenTimeout()) + .setLanguageCode(Constant.DEFAULT_LANGUAGE_CODE) + .setPlatform("admin")); + } } ///** diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java index f1cb0ff5..e59d6e7a 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/UserController.java @@ -96,7 +96,21 @@ public class UserController extends ControllerBase { **/ @GetMapping("getInfo") public ApiResult getInfo(){ - return ApiResult.success(appUserService.getInfo(AppUserUtil.getUserId())); + if (StrUtil.equals(AppUserUtil.getFrom(), "app")) { + return ApiResult.success(appUserService.getInfo(AppUserUtil.getUserId())); + } else if (StrUtil.equals(AppUserUtil.getFrom(), "admin")) { + AdminUserVO adminUser = adminUserService.getInfo(AppUserUtil.getUserId()); + return ApiResult.success(new AppUserVO() + .setId(adminUser.getId()) + .setName(adminUser.getUserName()) + .setLoginName(adminUser.getLoginName()) + .setEmail(adminUser.getEmail()) + .setAvatar(adminUser.getAvatar()) + .setPhone(adminUser.getPhone()) + .setPlatform("admin")); + } + VUtils.trueThrowBusinessError(true).throwMessage("不支持的平台:" + AppUserUtil.getFrom()); + return null; } /** diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppLoginVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppLoginVO.java index 80abf5e2..20c28f42 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppLoginVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppLoginVO.java @@ -15,4 +15,7 @@ public class AppLoginVO { //语言编码 private String languageCode; + + //平台,app或者admin + private String platform; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java index 8a8e5a75..be3f081e 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserVO.java @@ -71,15 +71,20 @@ public class AppUserVO { //公司id列表 public List companyIds; + //手机号 private String phone; + //职位 private String title; + //职位id private Integer titleId; + //公司id @JsonIgnore private String companyId; + //公司id private Integer companyId1; @@ -98,4 +103,7 @@ public class AppUserVO { * 语言编码 */ private String languageCode; + + //平台,app或者admin + private String platform="app"; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java index fda34b9f..ba226a81 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java @@ -32,6 +32,11 @@ public class AppUserUtil { return (Boolean) SaTokenAppUtil.getExtra("isPrimary"); } + public static String getFrom() { + VUtils.trueThrow(!SaTokenAppUtil.isLogin()).throwMessage(STATE.LoginError,"请重新登录"); + return (String) SaTokenAppUtil.getExtra("from"); + } + public static UserDTO getUser() { UserDTO user = new UserDTO(); user.setId(getUserId()); From 8e1b1c2f617f1c8315732f779776c229f57ba6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 26 Jun 2025 17:52:43 +0800 Subject: [PATCH 08/22] =?UTF-8?q?feat:=20bug-384=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E5=90=8E=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 16 +++---- .../admin/event/TicketCompleteEvent.java | 1 + .../admin/event/TicketReplyEvent.java | 1 + .../cfs/controller/MessageController.java | 10 ++--- .../cfs/controller/TicketController.java | 45 ++++++++++++------- .../cfs/event/TicketCreateEvent.java | 12 ++++- .../common/constant/Constant.java | 2 +- .../mobilebroken/common/pojo/dto/UserDTO.java | 3 ++ .../pojo/request/AreaSearchRequest.java | 2 + .../mobilebroken/common/util/AppUserUtil.java | 1 + .../repository/entity/AppMessage.java | 5 +++ .../repository/entity/Ticket.java | 5 +++ .../repository/entity/TicketFavorites.java | 5 +++ .../repository/mapper/AppMessageMapper.java | 4 +- .../repository/mapper/TicketMapper.java | 6 +-- .../service/IAppMessageService.java | 10 ++--- .../service/ITicketFavoritesService.java | 12 ++--- .../service/ITicketFollowService.java | 8 ++-- .../repository/service/ITicketService.java | 2 +- .../service/impl/AppAreaServiceImpl.java | 4 ++ .../service/impl/AppMessageServiceImpl.java | 30 +++++++------ .../service/impl/DeviceServiceImpl.java | 13 +++--- .../impl/TicketFavoritesServiceImpl.java | 24 +++++----- .../service/impl/TicketFollowServiceImpl.java | 27 ++++++----- .../service/impl/TicketServiceImpl.java | 13 +++--- .../resources/mapper/AppMessageMapper.xml | 4 +- .../main/resources/mapper/DeviceMapper.xml | 11 +++-- .../main/resources/mapper/TicketMapper.xml | 10 ++--- 28 files changed, 173 insertions(+), 113 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 6956f625..1efc1c98 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 @@ -154,7 +154,7 @@ public class TicketController extends ControllerBase { @GetMapping("getFavorites") @ApiMark(moduleName = "工单管理", apiName = "获取收藏夹",isPublic = true) public ApiResult getFavorites(@RequestParam(defaultValue ="0") Integer id){ - return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),id)); + return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),id)); } /** @@ -165,7 +165,7 @@ public class TicketController extends ControllerBase { @PostMapping("addFavorites") @ApiMark(moduleName = "工单管理", apiName = "添加收藏夹",isPublic = true) public ApiResult addFavorites(@Valid @RequestBody AdminFavoritesRequest request){ - ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId()); + ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -175,7 +175,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("updateFavorites") public ApiResult updateFavorites(@Valid @RequestBody FavoritesUpdateRequest request){ - ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId()); + ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -187,7 +187,7 @@ public class TicketController extends ControllerBase { @PostMapping("deleteFavorites") @ApiMark(moduleName = "工单管理", apiName = "删除收藏夹",isPublic = true) public ApiResult deleteFavorites(@Valid @RequestParam @NotNull Integer favoritesId){ - ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),favoritesId); + ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),favoritesId); return ApiResult.success(); } @@ -197,7 +197,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("moveFavorites") public ApiResult moveFavorites(@Valid @RequestBody FavoritesMoveRequest request){ - ticketFavoritesService.moveFavorites(AdminUserUtil.getUserId(),request); + ticketFavoritesService.moveFavorites(request); return ApiResult.success(); } @@ -207,7 +207,7 @@ public class TicketController extends ControllerBase { */ @PostMapping("moveFavoritesTicket") public ApiResult moveFavoritesTicket(@Valid @RequestBody FavoritesTicketMoveRequest request){ - ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),request); + ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),request); return ApiResult.success(); } @@ -218,7 +218,7 @@ public class TicketController extends ControllerBase { @PostMapping("followTiket") @ApiMark(moduleName = "工单管理", apiName = "关注工单") public ApiResult followTiket(@Valid @RequestBody AdminFollowRequest request){ - ticketFollowService.follow(request, AdminUserUtil.getUserId()); + ticketFollowService.follow(request, AdminUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -228,7 +228,7 @@ public class TicketController extends ControllerBase { **/ @PostMapping("unfollowTicket") public ApiResult unfollowTicket(@Valid @RequestParam @NotNull Integer ticketId){ - ticketFollowService.unfollow(AdminUserUtil.getUserId(),ticketId); + ticketFollowService.unfollow(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),ticketId); return ApiResult.success(); } 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 fd47d07e..ae2aa6eb 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 @@ -58,6 +58,7 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application //我的消息 appMessageService.add(new AppMessage() .setUserId(ticket.getUserId()) + .setUserPlatform(ticket.getUserPlatform()) .setTicketId(ticket.getId()) .setSubType(MessageSubType.TicketCompletion.getState()) .setIsRead(false) 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 6845ba59..b06fa92a 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 @@ -60,6 +60,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon //我的消息 appMessageService.add(new AppMessage() .setUserId(ticket.getUserId()) + .setUserPlatform(ticket.getUserPlatform()) .setTicketId(ticket.getId()) .setSubType(MessageSubType.TicketNewMessage.getState()) .setIsRead(false) diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java index 4cd54a23..20da0433 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/MessageController.java @@ -41,7 +41,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("searchMessages") public ApiResult> searchMessages(@RequestBody AppMessageSearchRequest request) { - return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(), request)); + return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(),AppUserUtil.getFrom(), request)); } /** @@ -50,7 +50,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("setReaded") public ApiResult setReaded(@Valid @RequestBody List ids) { - appMessageService.setReaded(AppUserUtil.getUserId(),ids); + appMessageService.setReaded(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids); return ApiResult.success(); } @@ -60,7 +60,7 @@ public class MessageController extends ControllerBase { */ @PostMapping("setNotRead") public ApiResult setNotRead(@Valid @RequestBody List ids) { - appMessageService.setNotRead(AppUserUtil.getUserId(),ids); + appMessageService.setNotRead(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids); return ApiResult.success(); } @@ -71,7 +71,7 @@ public class MessageController extends ControllerBase { */ @GetMapping("getNotReadMessages") public ApiResult> getNotReadMessages(@RequestParam(defaultValue = "10") Integer num) { - return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(), num)); + return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(),AppUserUtil.getFrom(), num)); } /** @@ -80,7 +80,7 @@ public class MessageController extends ControllerBase { */ @GetMapping("getNotReadMessageCount") public ApiResult getNotReadMessageCount(){ - return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId())); + return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId(),AppUserUtil.getFrom())); } /** diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index 72d49e8d..2dc18859 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -184,7 +184,7 @@ public class TicketController extends ControllerBase { **/ @PostMapping("followTiket") public ApiResult followTiket(@Valid @RequestBody FollowRequest request){ - ticketFollowService.handle(request, AppUserUtil.getUserId()); + ticketFollowService.handle(request, AppUserUtil.getUserId(),AppUserUtil.getFrom()); return ApiResult.success(); } @@ -197,17 +197,27 @@ public class TicketController extends ControllerBase { public ApiResult getTicket(@Valid @RequestParam @NotNull Integer id) { Ticket ticket = ticketService.getById(id); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单"); - AppUser user = appUserService.getById(ticket.getUserId()); String areaName = ""; - if (user.getIsPrimary()){ - areaName=StrUtil.join(",",customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); - }else if (Objects.nonNull(user.getAreaId())){ - AppArea area = appAreaService.getById(user.getAreaId()); - if (Objects.nonNull(area)) { - areaName = area.getName(); + List companys=new ArrayList<>(); + String userName,userAvatar; + if (StrUtil.equals(ticket.getUserPlatform(),"app")) { + AppUser user = appUserService.getById(ticket.getUserId()); + userName = user.getName(); + userAvatar = user.getAvatar(); + if (user.getIsPrimary()) { + areaName = StrUtil.join(",", customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()))); + } else if (Objects.nonNull(user.getAreaId())) { + AppArea area = appAreaService.getById(user.getAreaId()); + if (Objects.nonNull(area)) { + areaName = area.getName(); + } } + companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); + }else { + AdminUser adminUser=adminUserService.getById(ticket.getUserId()); + userName = adminUser.getUserName(); + userAvatar = adminUser.getAvatar(); } - List companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo()); String handle = ticket.getHandle(); if (StrUtil.isNotBlank(handle)) { @@ -229,8 +239,8 @@ public class TicketController extends ControllerBase { .setImages(getFileVOs(ticket.getImages())) .setAttachments(getFileVOs(ticket.getAttachments())) .setCreateUserId(ticket.getUserId()) - .setCreateUserName(user.getName()) - .setCreateUserAvatar(user.getAvatar()) + .setCreateUserName(userName) + .setCreateUserAvatar(userAvatar) .setCreateTime(ticket.getCreateTime()) .setAreaName(areaName) .setSolveTime(ticket.getSolveTime()) @@ -337,22 +347,25 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.Processing.getState()) > 1) .throwMessage("当前工单状态不允许发送消息"); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(),AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(),AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("工单创建人才能发送消息"); - AppUser user = appUserService.getById(AppUserUtil.getUserId()); ChatMessageDTO message = new ChatMessageDTO() .setId(IdUtil.getSnowflakeNextIdStr()) .setFrom("app") .setTicketState(ticket.getState()) - .setSenderId(user.getId()) - .setSenderName(user.getName()) - .setSenderAvatar(user.getAvatar()) .setContent(request.getContent()) .setCreateTime(Instant.now()) .setAttachments(request.getAttachments()) .setImages(request.getImages()) .setRemindUsers(request.getRemindUsers()) .setAudioUrl(request.getAudioUrl()); + if (StrUtil.equals(ticket.getUserPlatform(),"app")){ + AppUser user = appUserService.getById(AppUserUtil.getUserId()); + message.setSenderId(user.getId()).setSenderName(user.getName()).setSenderAvatar(user.getAvatar()); + }else { + AdminUser adminUser= adminUserService.getById(AppUserUtil.getUserId()); + message.setSenderId(adminUser.getId()).setSenderName(adminUser.getUserName()).setSenderAvatar(adminUser.getAvatar()); + } if(Objects.nonNull(request.getQuoteId())){ ChatMessageDTO quoteMessage = ticketChatService.getMessage(request.getTicketId(), request.getQuoteId()); message.setQuote(quoteMessage); diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java index 080fa489..4dfc0906 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCreateEvent.java @@ -2,6 +2,7 @@ package com.nflg.mobilebroken.cfs.event; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.MessageSubType; import com.nflg.mobilebroken.common.constant.MessageType; @@ -87,12 +88,19 @@ public class TicketCreateEvent extends ApplicationEvent implements ApplicationCo private void sendEmail(){ try { - AppUser appUser=appUserService.getById(ticket.getUserId()); + String tickerUserName; + if (StrUtil.equals(ticket.getUserPlatform(),"app")){ + AppUser appUser=appUserService.getById(ticket.getUserId()); + tickerUserName=appUser.getName(); + }else { + AdminUser adminUser=adminUserService.getById(ticket.getUserId()); + tickerUserName=adminUser.getUserName(); + } String subject=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_CREATE,language); String content=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY,language) .replace("${no}",ticket.getNo()) .replace("${title}",ticket.getTitle()) - .replace("${createUser}",appUser.getName()) + .replace("${createUser}",tickerUserName) .replace("${handleUser}","") .replace("${createTime}",toTimeString(ticket.getCreateTime())) .replace("${msg}",subject); 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 2cc5bfed..459bedb2 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 @@ -24,7 +24,7 @@ public class Constant { public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_ADMIN = "admin:message:unread"; - public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread"; + public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread:{}"; public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled"; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java index 889ff982..bbdd3f0b 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java @@ -24,6 +24,9 @@ public class UserDTO { //是否是主账号 private Boolean isPrimary; + //用户来源平台,app或者admin + private String from; + //公司id private List companyIds; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java index 5eddd521..522e8280 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/AreaSearchRequest.java @@ -17,4 +17,6 @@ public class AreaSearchRequest extends PageRequest { //区域创建人id @JsonIgnore private Integer createBy; + + } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java index ba226a81..aa1950c1 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java @@ -44,6 +44,7 @@ public class AppUserUtil { user.setEmail(getEmail()); user.setCompanyIds(getCompanyIds()); user.setIsPrimary(isPrimary()); + user.setFrom(getFrom()); return user; } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java index 135c7454..3a68003b 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppMessage.java @@ -39,6 +39,11 @@ public class AppMessage implements Serializable { */ private Integer userId; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 任务事项,5:工单新消息;6:工单完成;10:工单超时 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java index f09656de..eb47663f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/Ticket.java @@ -82,6 +82,11 @@ public class Ticket implements Serializable { */ private Integer userId; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 创建时间 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java index 80e1d699..0ece0864 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketFavorites.java @@ -49,6 +49,11 @@ public class TicketFavorites implements Serializable { */ private Integer createBy; + /** + * 用户来源平台,app或者admin + */ + private String userPlatform; + /** * 创建时间 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java index 39c869c0..e7d7dac9 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AppMessageMapper.java @@ -15,7 +15,7 @@ import com.nflg.mobilebroken.repository.entity.AppMessage; */ public interface AppMessageMapper extends BaseMapper { - IPage getNotReadMessage(Integer userId, Integer num, IPage page); + IPage getNotReadMessage(Integer userId,String from, Integer num, IPage page); - IPage search(Integer userId, String title, IPage page); + IPage search(Integer userId,String from, String title, IPage page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java index 69ffb302..8721e3c5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java @@ -21,9 +21,9 @@ import java.util.List; */ public interface TicketMapper extends BaseMapper { - IPage searchMy(IPage page, TicketSearchRequest request, Integer userId,String language); + IPage searchMy(IPage page, TicketSearchRequest request, Integer userId,String from,String language); - IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId,String language); + IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId,String from,String language); IPage searchArea(IPage page, TicketSearchRequest request, String companyId, Integer userId,String language,Boolean isPrimary,String companyCode); @@ -37,7 +37,7 @@ public interface TicketMapper extends BaseMapper { List searchAllFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId); - List getAdminFavorites(Integer userId,Integer favoritesId); + List getAdminFavorites(Integer userId,String from,Integer favoritesId); IPage searchByFavouritesId(Integer userId, Integer favouritesId, Page page); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java index 285def2b..fa83d3dd 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppMessageService.java @@ -18,15 +18,15 @@ import java.util.List; */ public interface IAppMessageService extends IService { - IPage getNotReadMessage(Integer userId, Integer num); + IPage getNotReadMessage(Integer userId,String from, Integer num); - IPage search(Integer userId, AppMessageSearchRequest request); + IPage search(Integer userId,String from, AppMessageSearchRequest request); - void setReaded(Integer userId,List ids); + void setReaded(Integer userId,String from,List ids); - void setNotRead(Integer userId,List ids); + void setNotRead(Integer userId,String from,List ids); void add(AppMessage message); - Integer getNotReadMessageCount(Integer userId); + Integer getNotReadMessageCount(Integer userId,String from); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java index 913ed0dc..6696daeb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFavoritesService.java @@ -18,15 +18,15 @@ import com.nflg.mobilebroken.repository.entity.TicketFavorites; */ public interface ITicketFavoritesService extends IService { - FavoritesVO getList(Integer userId,Integer id); + FavoritesVO getList(Integer userId,String from,Integer id); - void addFavorites(AdminFavoritesRequest request, Integer userId); + void addFavorites(AdminFavoritesRequest request, Integer userId,String from); - void deleteFavorites(Integer userId,Integer favoritesId); + void deleteFavorites(Integer userId,String from,Integer favoritesId); - void updateFavorites(FavoritesUpdateRequest request, Integer userId); + void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from); - void moveFavorites(Integer userId, FavoritesMoveRequest request); + void moveFavorites(FavoritesMoveRequest request); - void moveFavoritesTicket(Integer userId, FavoritesTicketMoveRequest request); + void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java index f9a9ed28..020f4f29 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java @@ -15,11 +15,11 @@ import com.nflg.mobilebroken.repository.entity.TicketFollow; */ public interface ITicketFollowService extends IService { - void handle(FollowRequest request, Integer userId); + void handle(FollowRequest request, Integer userId,String from); - void follow(AdminFollowRequest request, Integer userId); + void follow(AdminFollowRequest request, Integer userId,String from); - void unfollow(Integer userId, Integer ticketId); + void unfollow(Integer userId,String from, Integer ticketId); - void deleteFavorites(Integer userId, Integer favoritesId); + void deleteFavorites(Integer userId,String from, Integer favoritesId); } 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 c1e32b1e..184d086d 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 @@ -51,7 +51,7 @@ public interface ITicketService extends IService { List getTicketHandle(Integer id); - List getAdminFavorites(Integer userId,Integer favoritesId); + List getAdminFavorites(Integer userId,String from,Integer favoritesId); Ticket rejectTicket(Integer id); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java index 6050c16b..2cb202ad 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppAreaServiceImpl.java @@ -7,6 +7,7 @@ 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.constant.Constant; import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest; import com.nflg.mobilebroken.common.pojo.request.EnableRequest; import com.nflg.mobilebroken.common.pojo.vo.AreaVO; @@ -56,6 +57,9 @@ public class AppAreaServiceImpl extends ServiceImpl impl @Override public IPage search(AreaSearchRequest request) { + if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)){ + return new Page<>(request.getPage(), request.getPageSize()); + } if (AppUserUtil.isPrimary()){ request.setCreateBy(AppUserUtil.getUserId()); }else { diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java index 11997445..15649265 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AppMessageServiceImpl.java @@ -37,13 +37,13 @@ public class AppMessageServiceImpl extends ServiceImpl redisTemplate; @Override - public IPage getNotReadMessage(Integer userId, Integer num) { - return baseMapper.getNotReadMessage(userId, num, new Page<>(1, num)); + public IPage getNotReadMessage(Integer userId,String from, Integer num) { + return baseMapper.getNotReadMessage(userId,from, num, new Page<>(1, num)); } @Override - public IPage search(Integer userId, AppMessageSearchRequest request) { - IPage datas = baseMapper.search(userId, request.getTitle(), new Page<>(request.getPage(), request.getPageSize())); + public IPage search(Integer userId,String from, AppMessageSearchRequest request) { + IPage datas = baseMapper.search(userId,from, request.getTitle(), new Page<>(request.getPage(), request.getPageSize())); Map userMap = new HashMap<>(); datas.getRecords().forEach(d -> { if (StrUtil.isNotBlank(d.getTicketHandleBy())) { @@ -64,23 +64,23 @@ public class AppMessageServiceImpl extends ServiceImpl ids) { + public void setReaded(Integer userId,String from,List ids) { lambdaUpdate() .set(AppMessage::getIsRead, true) .eq(AppMessage::getUserId, userId) .in(AppMessage::getId, ids) .update(); - setUnreadMessageCount(userId); + setUnreadMessageCount(userId,from); } @Override - public void setNotRead(Integer userId,List ids) { + public void setNotRead(Integer userId,String from,List ids) { lambdaUpdate() .set(AppMessage::getIsRead, false) .eq(AppMessage::getUserId, userId) .in(AppMessage::getId, ids) .update(); - setUnreadMessageCount(userId); + setUnreadMessageCount(userId,from); } @Override @@ -88,21 +88,23 @@ public class AppMessageServiceImpl extends ServiceImpl() .eq(AppMessage::getIsRead, false) .eq(AppMessage::getSubType, message.getSubType()) - .eq(AppMessage::getUserId, message.getUserId())); + .eq(AppMessage::getUserId, message.getUserId()) + .eq(AppMessage::getUserPlatform, message.getUserPlatform())); save(message); - setUnreadMessageCount(message.getUserId()); + setUnreadMessageCount(message.getUserId(),message.getUserPlatform()); } - private void setUnreadMessageCount(Integer userId){ + private void setUnreadMessageCount(Integer userId,String from){ Integer count= Math.toIntExact(lambdaQuery() .eq(AppMessage::getIsRead, false) .eq(AppMessage::getUserId, userId) + .eq(AppMessage::getUserPlatform, from) .count()); - redisTemplate.opsForHash().put(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId, count); + redisTemplate.opsForHash().put(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId, count); } @Override - public Integer getNotReadMessageCount(Integer userId) { - return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId)).orElse(0); + public Integer getNotReadMessageCount(Integer userId, String from) { + return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId)).orElse(0); } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java index fa14b7a9..913ab6ae 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DeviceServiceImpl.java @@ -1,7 +1,9 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery; import com.nflg.mobilebroken.common.pojo.request.SearchDeviceRequest; import com.nflg.mobilebroken.common.pojo.vo.DeviceAgentVO; @@ -50,13 +52,10 @@ public class DeviceServiceImpl extends ServiceImpl impleme @Override public Page searchDevice(SearchDeviceRequest request,String language) { -// IPage page = lambdaQuery() -// .like(StrUtil.isNotBlank(request.getDeviceNo()), Device::getDeviceNo, request.getDeviceNo()) -// .like(StrUtil.isNotBlank(request.getModelNo()), Device::getModelNo, request.getModelNo()) -// .between(Objects.nonNull(request.getStartTime()), Device::getShipmentDate, request.getStartTime(), request.getEndTime()) -// .page(new Page<>(request.getPage(), request.getPageSize())); -// return PageUtil.convert(page, d -> Convert.convert(DeviceVO.class, d)); - List companyIds = AppUserUtil.getCompanyIds(); + List companyIds = null; + if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_APP)){ + companyIds = AppUserUtil.getCompanyIds(); + } return baseMapper.searchDevice(request, companyIds,language ,new Page<>(request.getPage(), request.getPageSize())); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java index b89cbd95..11e38169 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFavoritesServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.nflg.mobilebroken.common.pojo.request.AdminFavoritesRequest; import com.nflg.mobilebroken.common.pojo.request.FavoritesMoveRequest; @@ -39,45 +40,46 @@ public class TicketFavoritesServiceImpl extends ServiceImplnew FavoritesVO().setId(f.getId()).setName(f.getName())).collect(Collectors.toList())); - vo.setTickets(ticketService.getAdminFavorites(userId,id)); + vo.setTickets(ticketService.getAdminFavorites(userId,from,id)); return vo; } @Override - public void addFavorites(AdminFavoritesRequest request, Integer userId) { + public void addFavorites(AdminFavoritesRequest request, Integer userId,String from) { VUtils.trueThrowBusinessError(lambdaQuery().eq(TicketFavorites::getParentId,request.getParentId()).eq(TicketFavorites::getName,request.getName()).exists()) .throwMessage("已存在该名称的收藏夹"); - save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setCreateTime(LocalDateTime.now())); + save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setUserPlatform(from).setCreateTime(LocalDateTime.now())); } @Transactional @Override - public void deleteFavorites(Integer userId, Integer favoritesId) { + public void deleteFavorites(Integer userId,String from, Integer favoritesId) { TicketFavorites favorites = lambdaQuery().eq(TicketFavorites::getId, favoritesId).one(); VUtils.trueThrowBusinessError(Objects.isNull(favorites)).throwMessage("该收藏夹不存在"); VUtils.trueThrowBusinessError(!Objects.equals(favorites.getCreateBy(), userId)).throwMessage("无权限删除该收藏夹"); - ticketFollowService.deleteFavorites(userId, favoritesId); + ticketFollowService.deleteFavorites(userId,from, favoritesId); if (!Objects.equals(favoritesId, 0)){ lambdaUpdate().eq(TicketFavorites::getId,favoritesId).remove(); } } @Override - public void updateFavorites(FavoritesUpdateRequest request, Integer userId) { + public void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from) { lambdaUpdate() .set(TicketFavorites::getName,request.getName()) .eq(TicketFavorites::getId,request.getId()) .eq(TicketFavorites::getCreateBy,userId) + .eq(TicketFavorites::getUserPlatform,from) .update(); } @Override - public void moveFavorites(Integer userId, FavoritesMoveRequest request) { + public void moveFavorites(FavoritesMoveRequest request) { int orderNum=100000; if (Objects.nonNull(request.getNextFavoritesId())){ orderNum=lambdaQuery() @@ -92,12 +94,12 @@ public class TicketFavoritesServiceImpl extends ServiceImpl implements ITicketFollowService { @Override - public void handle(FollowRequest request, Integer userId) { + public void handle(FollowRequest request, Integer userId,String from) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); if (request.getIsFollow()) { TicketFollow ticketFollow = lambdaQuery() .eq(TicketFollow::getTicketId, request.getTicketId()) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 0) + .eq(TicketFollow::getFrom, bf) .one(); if (Objects.isNull(ticketFollow)) { TicketFollow follow = new TicketFollow() .setTicketId(request.getTicketId()) .setUserId(userId) - .setFrom((byte) 0) + .setFrom(bf) .setCreateTime(LocalDateTime.now()); save(follow); } @@ -44,40 +46,43 @@ public class TicketFollowServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(TicketFollow::getTicketId, request.getTicketId()); lambdaQueryWrapper.eq(TicketFollow::getUserId, userId); - lambdaQueryWrapper.eq(TicketFollow::getFrom, (byte) 0); + lambdaQueryWrapper.eq(TicketFollow::getFrom, bf); this.remove(lambdaQueryWrapper); } } @Transactional @Override - public void follow(AdminFollowRequest request, Integer userId) { + public void follow(AdminFollowRequest request, Integer userId,String from) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getTicketId, request.getTicketId()) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); TicketFollow ticketFollow = new TicketFollow() .setTicketId(request.getTicketId()) .setUserId(userId) .setFavoritesId(request.getFavoritesId()) - .setFrom((byte) 1) + .setFrom(bf) .setCreateTime(LocalDateTime.now()); save(ticketFollow); } @Override - public void unfollow(Integer userId, Integer ticketId) { + public void unfollow(Integer userId,String from, Integer ticketId) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getTicketId, ticketId) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); } @Override - public void deleteFavorites(Integer userId, Integer favoritesId) { + public void deleteFavorites(Integer userId,String from, Integer favoritesId) { + byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1); this.remove(new LambdaQueryWrapper() .eq(TicketFollow::getFavoritesId, favoritesId) .eq(TicketFollow::getUserId, userId) - .eq(TicketFollow::getFrom, (byte) 1)); + .eq(TicketFollow::getFrom, bf)); } } 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 3272f61b..13cfcc7b 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 @@ -81,6 +81,7 @@ public class TicketServiceImpl extends ServiceImpl impleme .setDescription(request.getDescription()) .setState(TicketState.PendingProcessing.getState()) .setUserId(userId) + .setUserPlatform(AppUserUtil.getFrom()) .setCreateTime(LocalDateTime.now()); save(ticket); // Collection files=CollectionUtil.addAll(request.getImages(),request.getAttachments()); @@ -131,9 +132,9 @@ public class TicketServiceImpl extends ServiceImpl impleme request.setEndTime(request.getEndTime().plusDays(1)); } if (request.getType()==1){ - return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language); + return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); }else if (request.getType()==2){ - return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language); + return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); }else if (request.getType()==3) { String companyCode = ""; if (!user.getIsPrimary()){ @@ -305,7 +306,7 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public Ticket revoked(Integer id) { Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one(); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("无权操作该工单"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0) .throwMessage("当前工单状态不允许撤销"); @@ -320,7 +321,7 @@ public class TicketServiceImpl extends ServiceImpl impleme @Override public Ticket reopen(Integer id) { Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one(); - VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()))) .throwMessage("无权操作该工单"); VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0) .throwMessage("当前工单状态不允许重新打开"); @@ -367,8 +368,8 @@ public class TicketServiceImpl extends ServiceImpl impleme } @Override - public List getAdminFavorites(Integer userId,Integer favoritesId) { - return baseMapper.getAdminFavorites(userId,favoritesId); + public List getAdminFavorites(Integer userId,String from,Integer favoritesId) { + return baseMapper.getAdminFavorites(userId,from,favoritesId); } @Override diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml index 084e0a12..483846ff 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AppMessageMapper.xml @@ -7,7 +7,7 @@ FROM app_message m INNER JOIN ticket t ON m.ticket_id=t.id INNER JOIN app_user u ON t.user_id=u.id - WHERE m.is_read=0 AND m.user_id=#{userId} + WHERE m.is_read=0 AND m.user_id=#{userId} AND m.user_platform=#{from} ORDER BY m.create_time DESC @@ -105,11 +105,11 @@ FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_area a2 ON u.area_id=a2.id - INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0 + INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=IF(#{from}='app',0,1) LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2 LEFT JOIN t_base_part p ON t.component_id=p.id LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language} - WHERE tf.user_id=#{userId} AND t.state!=4 + WHERE tf.user_id=#{userId} AND t.user_platform=#{from} AND t.state!=4 ORDER BY t.id DESC @@ -229,7 +229,7 @@ FROM ticket_follow tf INNER JOIN ticket t ON tf.ticket_id = t.id WHERE tf.`from` = 1 - AND tf.user_id = #{userId} + AND tf.user_id = #{userId} AND tf.from=IF(#{from}='app',0,1) AND tf.favorites_id = #{favoritesId} ORDER BY t.state,t.id DESC From 1bae2a3dea143cfbc3d54daa1a706a22b958ba07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 23 Jul 2025 13:47:07 +0800 Subject: [PATCH 09/22] =?UTF-8?q?feat:=20bug-384=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E5=90=8E=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TicketServiceImpl.java | 27 +++++++++++-------- .../main/resources/mapper/TicketMapper.xml | 2 +- 2 files changed, 17 insertions(+), 12 deletions(-) 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 13cfcc7b..7daa81ff 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 @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; 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.constant.Constant; import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.constant.TicketUrgency; import com.nflg.mobilebroken.common.pojo.dto.UserDTO; @@ -132,19 +133,23 @@ public class TicketServiceImpl extends ServiceImpl impleme request.setEndTime(request.getEndTime().plusDays(1)); } if (request.getType()==1){ - return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); - }else if (request.getType()==2){ - return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language); - }else if (request.getType()==3) { - String companyCode = ""; - if (!user.getIsPrimary()){ - TBaseCustomer customer=customerService.getById(user.getCompanyIds().get(0)); - if (Objects.nonNull(customer)){ - companyCode = customer.getAgencyCompanyCode(); + return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(), user.getFrom(), language); + } else if (request.getType() == 2) { + return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(), user.getFrom(), language); + } else if (request.getType() == 3) { + if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)) { + return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request, null, user.getId(), language, null, null); + } else { + String companyCode = ""; + if (!user.getIsPrimary()) { + TBaseCustomer customer = customerService.getById(user.getCompanyIds().get(0)); + if (Objects.nonNull(customer)) { + companyCode = customer.getAgencyCompanyCode(); + } } + return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request + , StrUtil.join(",", user.getCompanyIds()), user.getId(), language, user.getIsPrimary(), companyCode); } - return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request - , StrUtil.join(",",user.getCompanyIds()), user.getId(),language,user.getIsPrimary(),companyCode); } return null; } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index 4a9ac9a2..bc5b04ac 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -121,7 +121,7 @@ FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_area a2 ON u.area_id=a2.id - LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0 + LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=IF(#{from}='app',0,1) LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2 LEFT JOIN t_base_part p ON t.component_id=p.id LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language} From c8d6870ba71a0e453f5ddda42551d860e6096763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 23 Jul 2025 14:15:14 +0800 Subject: [PATCH 10/22] =?UTF-8?q?feat:=20bug-384=20=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E9=9C=80=E8=A6=81=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E7=94=A8=E6=88=B7=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E5=90=8E=E7=BB=AD=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/mapper/TicketMapper.java | 2 +- .../service/impl/TicketServiceImpl.java | 4 +-- .../main/resources/mapper/TicketMapper.xml | 27 +++++++++++++------ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java index 8721e3c5..9d0695c1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java @@ -25,7 +25,7 @@ public interface TicketMapper extends BaseMapper { IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId,String from,String language); - IPage searchArea(IPage page, TicketSearchRequest request, String companyId, Integer userId,String language,Boolean isPrimary,String companyCode); + IPage searchArea(IPage page, TicketSearchRequest request, String companyId, Integer userId,String language,Boolean isPrimary,String companyCode,String from); IPage searchFromAdmin(AdminTicketSearchRequest request, Integer userId, IPage page); 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 7daa81ff..b369383a 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 @@ -138,7 +138,7 @@ public class TicketServiceImpl extends ServiceImpl impleme return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(), user.getFrom(), language); } else if (request.getType() == 3) { if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)) { - return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request, null, user.getId(), language, null, null); + return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request, null, user.getId(), language, null, null, user.getFrom()); } else { String companyCode = ""; if (!user.getIsPrimary()) { @@ -148,7 +148,7 @@ public class TicketServiceImpl extends ServiceImpl impleme } } return baseMapper.searchArea(new Page<>(request.getPage(), request.getPageSize()), request - , StrUtil.join(",", user.getCompanyIds()), user.getId(), language, user.getIsPrimary(), companyCode); + , StrUtil.join(",", user.getCompanyIds()), user.getId(), language, user.getIsPrimary(), companyCode, user.getFrom()); } } return null; diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index bc5b04ac..9c10ec0c 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -85,9 +85,10 @@ SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName',true AS 'followed' - ,u.`name` AS 'createBy',true AS 'followed',t.handle,IF(LENGTH(l.language_value)>0 + ,IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',true AS 'followed',t.handle,IF(LENGTH(l.language_value)>0 ,l.language_value,p.part_name) AS 'component',t.* FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id + LEFT JOIN admin_user au ON t.user_id=au.id LEFT JOIN app_area a2 ON u.area_id=a2.id INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=IF(#{from}='app',0,1) LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2 @@ -116,10 +118,11 @@ @@ -140,13 +146,14 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName' - ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' + ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm' ,t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms' ,t.handle_name AS 'handle' FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id + LEFT JOIN admin_user au ON t.user_id=au.id LEFT JOIN app_area a2 ON u.area_id=a2.id LEFT JOIN device d ON t.device_no=d.device_no LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type @@ -184,13 +192,14 @@ SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason ,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName' - ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',u.`name` AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' + ,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime' ,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',true AS 'followed' ,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle' ,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle' FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id + LEFT JOIN admin_user au ON t.user_id=au.id LEFT JOIN app_area a2 ON u.area_id=a2.id INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 LEFT JOIN device d ON t.device_no=d.device_no @@ -237,13 +247,14 @@ + + diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TBasePositionMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TBasePositionMapper.xml index fd42b69d..577e695b 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TBasePositionMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TBasePositionMapper.xml @@ -12,9 +12,7 @@ From 73ca81291cced8553ca66554f2f14f29b747bf5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Fri, 8 Aug 2025 18:27:18 +0800 Subject: [PATCH 16/22] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/ShengWangController.java | 4 +- .../admin/controller/TicketController.java | 76 ++++----- .../admin/event/TicketCallEndEvent.java | 34 ++-- .../admin/listener/TicketEventListener.java | 4 +- .../admin/service/ShengWangService.java | 3 +- .../admin/task/ShengWangScheduledTasks.java | 4 +- .../cfs/config/HttpClientConfig.java | 19 +++ .../cfs/controller/TicketController.java | 66 ++++---- .../cfs/event/TicketCallEndEvent.java | 35 ++-- .../cfs/listener/TicketEventListener.java | 4 +- .../cfs/service/ShengWangService.java | 159 ++++++++++++++++++ .../common}/pojo/dto/ShengWangChannelDTO.java | 2 +- .../pojo/dto/ShengWangChannelInfoDTO.java | 2 +- .../pojo/dto/ShengWangKickingRuleAddDTO.java | 2 +- .../dto/ShengWangKickingRuleListItemDTO.java | 2 +- .../ShengWangKickingRuleListResponseDTO.java | 2 +- .../common}/pojo/dto/ShengWangResponse.java | 2 +- 17 files changed, 309 insertions(+), 111 deletions(-) create mode 100644 nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/config/HttpClientConfig.java create mode 100644 nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/ShengWangService.java rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangChannelDTO.java (87%) rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangChannelInfoDTO.java (87%) rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangKickingRuleAddDTO.java (72%) rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangKickingRuleListItemDTO.java (97%) rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangKickingRuleListResponseDTO.java (80%) rename {nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin => nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common}/pojo/dto/ShengWangResponse.java (71%) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ShengWangController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ShengWangController.java index 80ce0608..023c8d1f 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ShengWangController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ShengWangController.java @@ -1,9 +1,9 @@ package com.nflg.mobilebroken.admin.controller; -import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelDTO; -import com.nflg.mobilebroken.admin.pojo.dto.ShengWangKickingRuleListItemDTO; import com.nflg.mobilebroken.admin.service.ShengWangService; import com.nflg.mobilebroken.common.pojo.ApiResult; +import com.nflg.mobilebroken.common.pojo.dto.ShengWangChannelDTO; +import com.nflg.mobilebroken.common.pojo.dto.ShengWangKickingRuleListItemDTO; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; 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 ee2bbc34..aa1b1d7d 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 @@ -130,11 +130,11 @@ public class TicketController extends ControllerBase { @Resource private UniPushService uniPushService; - @Resource - private ITicketCallService ticketCallService; - - @Resource - private ITicketCallJoinService ticketCallJoinService; +// @Resource +// private ITicketCallService ticketCallService; +// +// @Resource +// private ITicketCallJoinService ticketCallJoinService; /** * 获取问题类型 @@ -1270,8 +1270,8 @@ public class TicketController extends ControllerBase { sendUserFrom = Constant.FROM_ADMIN; receiveUserFrom = Constant.FROM_APP; } - VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中"); - ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); +// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中"); +// ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); AdminUser adminUser = adminUserService.getById(sendUserId); uniPushService.send(new UniPushMessage() .setSenderId("admin-uid-" + sendUserId) @@ -1306,11 +1306,11 @@ public class TicketController extends ControllerBase { @PostMapping("addCallUser") public ApiResult addCallUser(@Valid @RequestBody CallUserAddRequest request){ AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); - TicketCall ticketCall = ticketCallService.lambdaQuery() - .eq(TicketCall::getTicketId, request.getTicketId()) - .eq(TicketCall::getState, 1) - .one(); - VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("未在通话中"); +// TicketCall ticketCall = ticketCallService.lambdaQuery() +// .eq(TicketCall::getTicketId, request.getTicketId()) +// .eq(TicketCall::getState, 1) +// .one(); +// VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("未在通话中"); request.getUserIds().forEach(userId->{ AdminUser adminUser1 = adminUserService.getById(userId); if (Objects.nonNull(adminUser1)) { @@ -1331,7 +1331,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId()); - ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN); +// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN); } }); return ApiResult.success(); @@ -1347,24 +1347,24 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许请求通话"); - VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, AdminUserUtil.getUserId())) - .throwMessage("您已加入别的通话中"); - ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); - ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId); - uniPushService.send(new UniPushMessage() - .setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要 - .setReceiverId("admin-uid-" + AdminUserUtil.getUserId()) - .setSendData(new UniPushMessageBody() - .setTitle("视频通话") - .setContent("您已加入别的通话中") - .setPayload(new UniPushMessageCallPayload() - .setTicketId(ticketId) - .setUserId(AdminUserUtil.getUserId()) - .setCategory("ticketCallJoined") - .setFrom("admin") - ) - ) - ); +// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, AdminUserUtil.getUserId())) +// .throwMessage("您已加入别的通话中"); +// ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); +// ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId); +// uniPushService.send(new UniPushMessage() +// .setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要 +// .setReceiverId("admin-uid-" + AdminUserUtil.getUserId()) +// .setSendData(new UniPushMessageBody() +// .setTitle("视频通话") +// .setContent("您已加入别的通话中") +// .setPayload(new UniPushMessageCallPayload() +// .setTicketId(ticketId) +// .setUserId(AdminUserUtil.getUserId()) +// .setCategory("ticketCallJoined") +// .setFrom("admin") +// ) +// ) +// ); return ApiResult.success(); } @@ -1374,11 +1374,11 @@ public class TicketController extends ControllerBase { */ @PostMapping("call/hangUp") public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) { - TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); - if (Objects.isNull(ticketCall)) return ApiResult.success(); +// TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); +// if (Objects.isNull(ticketCall)) return ApiResult.success(); if (request.getReject()) { AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); - if (StrUtil.equals(request.getFrom(), "app")) { + if (StrUtil.equals(request.getFrom(), Constant.FROM_APP)) { uniPushService.send(new UniPushMessage() .setSenderId("admin-uid-" + adminUser.getId()) .setReceiverId("app-uid-" + request.getFromUserId()) @@ -1396,7 +1396,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallHangUpToApp(request.getTicketId(), request.getFromUserId(), adminUser); - }else if (StrUtil.equals(request.getFrom(), "admin")) { + } else if (StrUtil.equals(request.getFrom(), Constant.FROM_ADMIN)) { if (Objects.equals(request.getFromUserId(), AdminUserUtil.getUserId())){ Ticket ticket = ticketService.getById(request.getTicketId()); int handlerId= Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get()); @@ -1405,7 +1405,7 @@ public class TicketController extends ControllerBase { .setReceiverId("admin-uid-" + handlerId) .setSendData(new UniPushMessageBody() .setTitle("挂断视频通话") - .setContent(adminUser.getUserName() + "挂断了与您的视频通话") + .setContent(adminUser.getUserName() + "取消了与您的视频通话") .setPayload(new UniPushMessageCallPayload() .setTicketId(request.getTicketId()) .setUserId(adminUser.getId()) @@ -1438,9 +1438,9 @@ public class TicketController extends ControllerBase { } } } - if (ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, request.getReject())) { +// if (ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, request.getReject())) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); - } +// } return ApiResult.success(); } } \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java index fbf067cb..7e88ebe3 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java @@ -1,5 +1,7 @@ package com.nflg.mobilebroken.admin.event; +import cn.hutool.core.collection.CollectionUtil; +import com.nflg.mobilebroken.admin.service.ShengWangService; import com.nflg.mobilebroken.admin.service.SsePushService; import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO; @@ -9,7 +11,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; +import java.io.IOException; import java.time.Instant; +import java.util.concurrent.TimeUnit; public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware { @@ -17,6 +21,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC private SsePushService ssePushService; private TicketChatService ticketChatService; + private ShengWangService shengWangService; public TicketCallEndEvent(Object source, Integer ticketId) { super(source); @@ -29,18 +34,21 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC this.ticketChatService = applicationContext.getBean(TicketChatService.class); } - public void send(){ - ChatMessageDTO message = new ChatMessageDTO() - .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) - .setFrom("call") - .setTicketState(TicketState.Processing.getState()) - .setSenderId(0) - .setSenderName("通话助手") - .setContent("视频通话已结束") - .setCreateTime(Instant.now()); - ticketChatService.addMessage(ticketId, message); - //推送消息 - ssePushService.sendTicketMessageToAdmin(ticketId,message); - ssePushService.sendTicketMessageToApp(ticketId,message); + public void send() throws IOException, InterruptedException { + TimeUnit.SECONDS.sleep(2); + if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { + ChatMessageDTO message = new ChatMessageDTO() + .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setFrom("call") + .setTicketState(TicketState.Processing.getState()) + .setSenderId(0) + .setSenderName("通话助手") + .setContent("视频通话已结束") + .setCreateTime(Instant.now()); + ticketChatService.addMessage(ticketId, message); + //推送消息 + ssePushService.sendTicketMessageToAdmin(ticketId, message); + ssePushService.sendTicketMessageToApp(ticketId, message); + } } } \ No newline at end of file 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 8ed15aac..a1c714da 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 @@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.io.IOException; + @Component public class TicketEventListener { @@ -40,7 +42,7 @@ public class TicketEventListener { @Async @EventListener - public void handleTicketCallEndEvent(TicketCallEndEvent event) { + public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { event.send(); } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java index 727ea15d..1e7590fc 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/ShengWangService.java @@ -4,8 +4,7 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.nflg.mobilebroken.admin.pojo.dto.*; -import com.nflg.mobilebroken.common.pojo.dto.ShengWangChannelUserResponseDTO; +import com.nflg.mobilebroken.common.pojo.dto.*; import com.nflg.mobilebroken.common.util.VUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java index 7acf0918..b7128c5a 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java @@ -1,10 +1,10 @@ package com.nflg.mobilebroken.admin.task; import cn.hutool.core.collection.CollectionUtil; -import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelDTO; -import com.nflg.mobilebroken.admin.pojo.dto.ShengWangChannelInfoDTO; import com.nflg.mobilebroken.admin.service.ShengWangService; import com.nflg.mobilebroken.common.constant.Constant; +import com.nflg.mobilebroken.common.pojo.dto.ShengWangChannelDTO; +import com.nflg.mobilebroken.common.pojo.dto.ShengWangChannelInfoDTO; import com.nflg.mobilebroken.common.util.IdUtil; import com.nflg.mobilebroken.repository.entity.TicketCall; import com.nflg.mobilebroken.repository.entity.TicketCallJoin; diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/config/HttpClientConfig.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/config/HttpClientConfig.java new file mode 100644 index 00000000..041e72e1 --- /dev/null +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/config/HttpClientConfig.java @@ -0,0 +1,19 @@ +package com.nflg.mobilebroken.cfs.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.net.http.HttpClient; +import java.time.Duration; + +@Configuration +public class HttpClientConfig { + + @Bean + public HttpClient getHttpClient() { + return HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_2) + .connectTimeout(Duration.ofSeconds(10)) + .build(); + } +} diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index 97865a9f..b4a7cce5 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -93,11 +93,11 @@ public class TicketController extends ControllerBase { @Resource private UniPushService uniPushService; - @Resource - private ITicketCallService ticketCallService; - - @Resource - private ITicketCallJoinService ticketCallJoinService; +// @Resource +// private ITicketCallService ticketCallService; +// +// @Resource +// private ITicketCallJoinService ticketCallJoinService; /** * 搜索设备 @@ -504,7 +504,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) .throwMessage("不是工单创建人无权限呼叫"); Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); - VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, handlerUserId)).throwMessage("对方正在通话中"); +// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, handlerUserId)).throwMessage("对方正在通话中"); AppUser appUser = appUserService.getById(ticket.getUserId()); uniPushService.send(new UniPushMessage() .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) @@ -523,7 +523,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId); - ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN); +// ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN); ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName()); return ApiResult.success(); } @@ -538,28 +538,28 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许通话"); - VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) - || !Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) - .throwMessage("不是创建人无法加入通话"); - VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_APP, AppUserUtil.getUserId())) - .throwMessage("您已加入别的通话中"); - ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); - ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); - Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); - uniPushService.send(new UniPushMessage() - .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) - .setReceiverId("admin-uid-" + handlerUserId) - .setSendData(new UniPushMessageBody() - .setTitle("视频通话") - .setContent("您已加入别的通话中") - .setPayload(new UniPushMessageCallPayload() - .setTicketId(ticketId) - .setUserId(AppUserUtil.getUserId()) - .setCategory("ticketCallJoined") - .setFrom("app") - ) - ) - ); +// VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) +// || !Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) +// .throwMessage("不是创建人无法加入通话"); +// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_APP, AppUserUtil.getUserId())) +// .throwMessage("您已加入别的通话中"); +// ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); +// ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); +// Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); +// uniPushService.send(new UniPushMessage() +// .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) +// .setReceiverId("admin-uid-" + handlerUserId) +// .setSendData(new UniPushMessageBody() +// .setTitle("视频通话") +// .setContent("您已加入别的通话中") +// .setPayload(new UniPushMessageCallPayload() +// .setTicketId(ticketId) +// .setUserId(AppUserUtil.getUserId()) +// .setCategory("ticketCallJoined") +// .setFrom("app") +// ) +// ) +// ); return ApiResult.success(); } @@ -569,9 +569,9 @@ public class TicketController extends ControllerBase { */ @PostMapping("call/hangUp") public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) { - TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); +// TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); if (request.getReject()) { - if (Objects.isNull(ticketCall)) return ApiResult.success(); +// if (Objects.isNull(ticketCall)) return ApiResult.success(); if (StrUtil.equals(request.getFrom(), Constant.FROM_APP) && Objects.equals(AppUserUtil.getUserId(), request.getFromUserId())) { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); Ticket ticket = ticketService.getById(request.getTicketId()); @@ -615,9 +615,9 @@ public class TicketController extends ControllerBase { ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser); } } - if (ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject())) { +// if (ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject())) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); - } +// } return ApiResult.success(); } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java index 943d67c2..b9c203a4 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java @@ -1,5 +1,7 @@ package com.nflg.mobilebroken.cfs.event; +import cn.hutool.core.collection.CollectionUtil; +import com.nflg.mobilebroken.cfs.service.ShengWangService; import com.nflg.mobilebroken.cfs.service.SsePushService; import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO; @@ -9,7 +11,9 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; +import java.io.IOException; import java.time.Instant; +import java.util.concurrent.TimeUnit; public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware { @@ -17,6 +21,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC private SsePushService ssePushService; private TicketChatService ticketChatService; + private ShengWangService shengWangService; public TicketCallEndEvent(Object source,Integer ticketId) { super(source); @@ -27,20 +32,24 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ssePushService = applicationContext.getBean(SsePushService.class); this.ticketChatService = applicationContext.getBean(TicketChatService.class); + this.shengWangService = applicationContext.getBean(ShengWangService.class); } - public void send(){ - ChatMessageDTO message = new ChatMessageDTO() - .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) - .setFrom("call") - .setTicketState(TicketState.Processing.getState()) - .setSenderId(0) - .setSenderName("通话助手") - .setContent("视频通话已结束") - .setCreateTime(Instant.now()); - ticketChatService.addMessage(ticketId, message); - //推送消息 - ssePushService.sendTicketMessageToAdmin(ticketId,message); - ssePushService.sendTicketMessageToApp(ticketId,message); + public void send() throws IOException, InterruptedException { + TimeUnit.SECONDS.sleep(2); + if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { + ChatMessageDTO message = new ChatMessageDTO() + .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setFrom("call") + .setTicketState(TicketState.Processing.getState()) + .setSenderId(0) + .setSenderName("通话助手") + .setContent("视频通话已结束") + .setCreateTime(Instant.now()); + ticketChatService.addMessage(ticketId, message); + //推送消息 + ssePushService.sendTicketMessageToAdmin(ticketId, message); + ssePushService.sendTicketMessageToApp(ticketId, message); + } } } \ No newline at end of file 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 a9394044..155755f2 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 @@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.io.IOException; + @Component public class TicketEventListener { @@ -46,7 +48,7 @@ public class TicketEventListener { @Async @EventListener - public void handleTicketCallEndEvent(TicketCallEndEvent event) { + public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { event.send(); } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/ShengWangService.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/ShengWangService.java new file mode 100644 index 00000000..cdd1ac1d --- /dev/null +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/ShengWangService.java @@ -0,0 +1,159 @@ +package com.nflg.mobilebroken.cfs.service; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nflg.mobilebroken.common.pojo.dto.*; +import com.nflg.mobilebroken.common.util.VUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.Base64; +import java.util.List; + +/** + * 声网服务 + */ +@Slf4j +@Component +@RefreshScope +public class ShengWangService { + + private static final String baseUrl = "https://api.sd-rtn.com/dev"; + + @Resource + private HttpClient httpClient; + + @Resource + private ObjectMapper objectMapper; + + @Value("${shengwang.rtc.appId}") + private String appId; + + @Value("${shengwang.rtc.customerKey}") + private String customerKey; + + @Value("${shengwang.rtc.customerSecret}") + private String customerSecret; + + public ShengWangChannelDTO getAllChannels() throws IOException, InterruptedException { + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("Authorization", generateAuthorization(customerKey, customerSecret)) + .uri(URI.create(baseUrl + "/v1/channel/" + appId)) + .build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.debug("getAllChannels Response:" + response.body()); + VUtils.trueThrowBusinessError(response.statusCode() != 200).throwMessage("请求失败"); + ShengWangResponse result = objectMapper.readValue(response.body(), new TypeReference<>() { + }); + VUtils.trueThrowBusinessError(!result.isSuccess()).throwMessage("获取频道信息失败"); + return result.getData(); + } + + /** + * 创建规则 + * @param channelName 频道名称 + * @param uid 用户ID + * @param time 封禁时间,单位为分钟,取值范围为 [1,1440]。当设置的值为 0 时,表示不封禁。服务端会对频道内符合设定规则的用户进行下线一次的操作。用户可以重新登录进入频道。 + * @param privileges 要封禁的用户权限,取值包括【join_channel】加入频道,表示禁止用户加入频道或将用户踢出频道。【publish_audio】发送音频,表示禁止用户发送音频流。可以与 publish_video 同时设置,表示禁止用户发送音视流和视频流。【publish_video】发送视频,表示禁止用户发送视频流。可以与 publish_audio 同时设置,表示禁止用户发送音视流和视频流。 + * @return 规则ID + */ + public Long addKickingRule(String channelName, Integer uid, Integer time, List privileges) throws Exception { + JSONObject json = new JSONObject(); + json.putOpt("appid", appId); + json.putOpt("cname", channelName); + json.putOpt("uid", uid); + json.putOpt("time", time); + json.putOpt("privileges", privileges); + HttpRequest request = HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(json.toString())) + .header("Authorization", generateAuthorization(customerKey, customerSecret)) + .header("Content-Type", "application/json") + .uri(URI.create(baseUrl + "/v1/kicking-rule")) + .build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.debug("addKickingRule Response:" + response.body()); + VUtils.trueThrowBusinessError(response.statusCode() != 200).throwMessage("请求失败"); + ShengWangKickingRuleAddDTO result = objectMapper.readValue(response.body(), ShengWangKickingRuleAddDTO.class); + VUtils.trueThrowBusinessError(!StrUtil.equals(result.getStatus(), "success")).throwMessage("创建规则失败"); + return result.getId(); + } + + /** + * 获取规则 + * @return 规则列表 + */ + public List getKickingRule() throws IOException, InterruptedException { + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("Authorization", generateAuthorization(customerKey, customerSecret)) + .uri(URI.create(baseUrl + "/v1/kicking-rule?appid=" + appId)) + .build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.debug("getKickingRule Response:" + response.body()); + VUtils.trueThrowBusinessError(response.statusCode() != 200).throwMessage("请求失败"); + ShengWangKickingRuleListResponseDTO result = objectMapper.readValue(response.body(), ShengWangKickingRuleListResponseDTO.class); + VUtils.trueThrowBusinessError(!StrUtil.equals(result.getStatus(), "success")).throwMessage("获取规则失败"); + return result.getRules(); + } + + /** + * 删除规则 + * @param id 规则ID + */ + public void deleteKickingRule(long id) throws IOException, InterruptedException { + JSONObject json = new JSONObject(); + json.putOpt("appid", appId); + json.putOpt("id", id); + HttpRequest request = HttpRequest.newBuilder() + .method("DELETE", HttpRequest.BodyPublishers.ofString(json.toString())) + .header("Authorization", generateAuthorization(customerKey, customerSecret)) + .header("Content-Type", "application/json") + .uri(URI.create(baseUrl + "/v1/kicking-rule")) + .build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.debug("deleteKickingRule Response:" + response.body()); + VUtils.trueThrowBusinessError(response.statusCode() == 404).throwMessage("规则不存在"); + VUtils.trueThrowBusinessError(response.statusCode() != 200).throwMessage("请求失败"); + ShengWangKickingRuleAddDTO result = objectMapper.readValue(response.body(), ShengWangKickingRuleAddDTO.class); + VUtils.trueThrowBusinessError(!StrUtil.equals(result.getStatus(), "success")).throwMessage("删除规则失败"); + } + + /** + * 生成鉴权信息 + * @param customerKey 客户ID + * @param customerSecret 客户密钥 + * @return 鉴权信息 + */ + private String generateAuthorization(String customerKey, String customerSecret) { + // 拼接客户 ID 和客户密钥并使用 base64 编码 + String plainCredentials = customerKey + ":" + customerSecret; + String base64Credentials = new String(Base64.getEncoder().encode(plainCredentials.getBytes())); + // 创建 authorization header + return "Basic " + base64Credentials; + } + + public List getChannelUsers(String channelName) throws IOException, InterruptedException { + HttpRequest request = HttpRequest.newBuilder() + .GET() + .header("Authorization", generateAuthorization(customerKey, customerSecret)) + .uri(URI.create(baseUrl + "/v1/channel/user/" + appId + "/" + channelName)) + .build(); + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.debug("getChannelUsers Response:" + response.body()); + VUtils.trueThrowBusinessError(response.statusCode() != 200).throwMessage("请求失败"); + ShengWangChannelUserResponseDTO result = objectMapper.readValue(response.body(), ShengWangChannelUserResponseDTO.class); + VUtils.trueThrowBusinessError(!result.getSuccess()).throwMessage("获取频道用户失败"); + return result.getData().isChannel_exist() ? result.getData().getUsers() : null; + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelDTO.java similarity index 87% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelDTO.java index f446a0fa..5324f13e 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelDTO.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelInfoDTO.java similarity index 87% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelInfoDTO.java index a446bd85..d1c9155e 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangChannelInfoDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangChannelInfoDTO.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleAddDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleAddDTO.java similarity index 72% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleAddDTO.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleAddDTO.java index 1f9ce1b9..39e514dd 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleAddDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleAddDTO.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import lombok.Data; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListItemDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListItemDTO.java similarity index 97% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListItemDTO.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListItemDTO.java index e1c1979d..a62128de 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListItemDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListItemDTO.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import cn.hutool.core.date.DatePattern; import cn.hutool.core.util.StrUtil; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListResponseDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListResponseDTO.java similarity index 80% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListResponseDTO.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListResponseDTO.java index cfa66bb5..833acd68 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangKickingRuleListResponseDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangKickingRuleListResponseDTO.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import lombok.Data; diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangResponse.java similarity index 71% rename from nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangResponse.java index 8640e5bf..53b3a704 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/dto/ShengWangResponse.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ShengWangResponse.java @@ -1,4 +1,4 @@ -package com.nflg.mobilebroken.admin.pojo.dto; +package com.nflg.mobilebroken.common.pojo.dto; import lombok.Data; From 776c8a8be32050412db7aaef08b522913b44c8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 18 Aug 2025 17:55:50 +0800 Subject: [PATCH 17/22] =?UTF-8?q?feat:=20bug-574=20=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=95=86=E5=AD=90=E8=B4=A6=E5=8F=B7=E4=B9=9F=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=8E=88=E6=9D=83=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/service/impl/AppUserServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) 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 f67fe958..1a8f1563 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 @@ -406,6 +406,11 @@ public class AppUserServiceImpl extends ServiceImpl impl it.setRoles(getRoles(it.getId())); } }); + subs.forEach(it -> { + if (it.getKey().startsWith("u-")) { + it.setRoles(getRoles(it.getId())); + } + }); return new PageData().setPage(request.getPage()).setPageSize(request.getPageSize()).setTotal(primarys.size()).setItems(page); } From fa853a2eb6449ddf5546a1b2de05d6bd4ceadc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 20 Aug 2025 17:30:40 +0800 Subject: [PATCH 18/22] =?UTF-8?q?feat:=20bug-332=20=E8=8D=A3=E8=AA=89?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E3=80=81=E8=A7=86=E9=A2=91=E3=80=81=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E3=80=81=E8=B5=84=E6=96=99=E7=9A=84=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8F=AF=E4=BB=A5=E6=89=B9=E9=87=8F=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProductBaseController.java | 4 +-- .../controller/ProductModelController.java | 7 ++--- ...hRequest.java => BatchPublishRequest.java} | 4 ++- .../service/IProductCaseService.java | 2 +- .../service/IProductHonorService.java | 2 +- .../service/IProductModelFileService.java | 2 +- .../service/IProductModelImageService.java | 2 +- .../service/IProductModelVideoService.java | 2 +- .../service/impl/ProductCaseServiceImpl.java | 31 +++++++++++++------ .../service/impl/ProductHonorServiceImpl.java | 30 ++++++++++++------ .../impl/ProductModelFileServiceImpl.java | 2 +- .../impl/ProductModelImageServiceImpl.java | 20 +++++++++--- .../impl/ProductModelVideoServiceImpl.java | 25 ++++++++++----- 13 files changed, 86 insertions(+), 47 deletions(-) rename nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/{ProductModelPublishRequest.java => BatchPublishRequest.java} (78%) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java index f5e2b6cc..09045110 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductBaseController.java @@ -166,7 +166,7 @@ public class ProductBaseController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/publishHonor") - public ApiResult publishHonor(@Valid @RequestBody ProductPublishRequest request){ + public ApiResult publishHonor(@Valid @RequestBody BatchPublishRequest request) { productHonorService.publish(request); return ApiResult.success(); } @@ -233,7 +233,7 @@ public class ProductBaseController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/publishCase") - public ApiResult publishCase(@Valid @RequestBody ProductPublishRequest request){ + public ApiResult publishCase(@Valid @RequestBody BatchPublishRequest request) { productCaseService.publish(request); return ApiResult.success(); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java index e7df5a1d..bcadcda8 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/ProductModelController.java @@ -62,9 +62,6 @@ public class ProductModelController extends ControllerBase{ @Resource private IProductModelParamsItemService productModelParamsItemService; - @Resource - private IProductModelImageService productModelImageService; - @Resource private IProductModelVideoService productModelVideoService; @@ -848,7 +845,7 @@ public class ProductModelController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/publishVideo") - public ApiResult publishVideo(@Valid @RequestBody ProductPublishRequest request){ + public ApiResult publishVideo(@Valid @RequestBody BatchPublishRequest request) { productModelVideoService.publish(request); return ApiResult.success(); } @@ -934,7 +931,7 @@ public class ProductModelController extends ControllerBase{ * @param request 请求参数 */ @PostMapping("/publishFile") - public ApiResult publishFile(@Valid @RequestBody ProductModelPublishRequest request) { + public ApiResult publishFile(@Valid @RequestBody BatchPublishRequest request) { productModelFileService.publish(request); return ApiResult.success(); } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelPublishRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/BatchPublishRequest.java similarity index 78% rename from nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelPublishRequest.java rename to nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/BatchPublishRequest.java index 2b981526..d6a2e772 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelPublishRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/BatchPublishRequest.java @@ -1,13 +1,15 @@ package com.nflg.mobilebroken.common.pojo.request; import lombok.Data; +import lombok.experimental.Accessors; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.List; @Data -public class ProductModelPublishRequest { +@Accessors(chain = true) +public class BatchPublishRequest { @NotEmpty private List ids; diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java index 41e661d3..73954853 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductCaseService.java @@ -34,7 +34,7 @@ public interface IProductCaseService extends IService { void delete(@Valid BatchDeleteRequest request); - void publish(@Valid ProductPublishRequest request); + void publish(@Valid BatchPublishRequest request); ProductCaseInfoVO getInfo(@Valid @NotNull Integer caseId); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java index 6fbec226..e1ca9ef6 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductHonorService.java @@ -30,7 +30,7 @@ public interface IProductHonorService extends IService { List get(String language); - void publish(@Valid ProductPublishRequest request); + void publish(@Valid BatchPublishRequest request); void delete(@Valid BatchDeleteRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java index e5307452..63b0a0bb 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelFileService.java @@ -31,7 +31,7 @@ public interface IProductModelFileService extends IService { void delete(@Valid BatchDeleteRequest request); - void publish(@Valid ProductModelPublishRequest request); + void publish(@Valid BatchPublishRequest request); IPage getList(@Valid ProductModelImageSearchRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java index eceaf174..90312682 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelImageService.java @@ -27,7 +27,7 @@ public interface IProductModelImageService extends IService { void delete(@Valid BatchDeleteRequest request); - void publish(@Valid ProductPublishRequest request); + void publish(@Valid BatchPublishRequest request); IPage getList(@Valid ProductModelImageSearchRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java index 92ab1d11..8dca7594 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IProductModelVideoService.java @@ -29,7 +29,7 @@ public interface IProductModelVideoService extends IService { void delete(@Valid BatchDeleteRequest request); - void publish(@Valid ProductPublishRequest request); + void publish(@Valid BatchPublishRequest request); IPage getList(@Valid ProductModelImageSearchRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java index faadcfc7..d8710038 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java @@ -1,7 +1,9 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -27,6 +29,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -54,8 +57,8 @@ public class ProductCaseServiceImpl extends ServiceImpl list = listByIds(request.getIds()); + List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductCase::getTitle).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) + .throwMessage("以下案例不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - VUtils.trueThrowBusinessError(!info.getEnable()).throwMessage("不能发布已禁用的数据"); + names = list.stream().filter(ph -> !ph.getEnable()).map(ProductCase::getTitle).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下案例被禁用不能发布:" + StrUtil.join(",", names)); + } + list.forEach(it -> publish(it, request.getState())); + } + + private void publish(ProductCase info, Integer state) { + if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); info.setPublishTime(LocalDateTime.now()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java index 4d674e57..cdac2e73 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -23,6 +24,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -55,8 +57,8 @@ public class ProductHonorServiceImpl extends ServiceImpl list = listByIds(request.getIds()); + List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductHonor::getTitle).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) + .throwMessage("以下荣誉不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - VUtils.trueThrowBusinessError(!info.getEnable()).throwMessage("不能发布已禁用的数据"); + names = list.stream().filter(ph -> !ph.getEnable()).map(ProductHonor::getTitle).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下荣誉被禁用不能发布:" + StrUtil.join(",", names)); + } + list.forEach(it -> publish(it, request.getState())); + } + + private void publish(ProductHonor info, Integer state) { + if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); info.setPublishTime(LocalDateTime.now()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java index 9812e739..4209be3f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelFileServiceImpl.java @@ -132,7 +132,7 @@ public class ProductModelFileServiceImpl extends ServiceImpl datas = listByIds(request.getIds()); datas.removeIf(item -> !item.getEnable()); datas.forEach(info -> { diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java index 8344e8ca..055e311f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -25,6 +26,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -89,12 +91,20 @@ public class ProductModelImageServiceImpl extends ServiceImpl list = listByIds(request.getIds()); + List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductModelImage::getName).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) + .throwMessage("以下图片不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { + names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelImage::getName).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下图片被禁用不能发布:" + StrUtil.join(",", names)); + } + list.forEach(it -> publish(it, request.getState())); + } + + private void publish(ProductModelImage info, Integer state) { + if (Objects.equals(state, PublishState.Published.getState())) { VUtils.trueThrowBusinessError(!info.getEnable()).throwMessage("不能发布已禁用的数据"); info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java index 3244e2cd..54d0001c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -25,6 +26,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -110,26 +112,33 @@ public class ProductModelVideoServiceImpl extends ServiceImpl list = listByIds(request.getIds()); + List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductModelVideo::getName).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) + .throwMessage("以下视频不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - VUtils.trueThrowBusinessError(!info.getEnable()).throwMessage("不能发布已禁用的数据"); + names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelVideo::getName).collect(Collectors.toList()); + VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下视频被禁用不能发布:" + StrUtil.join(",", names)); + } + list.forEach(it -> publish(it, request.getState())); + } + + private void publish(ProductModelVideo info, Integer state) { + if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); info.setPublishTime(LocalDateTime.now()); lambdaUpdate() .set(ProductModelVideo::getState, PublishState.Obsolete.getState()) .eq(ProductModelVideo::getModelId, info.getModelId()) - .eq(ProductModelVideo::getBatchNumber,info.getBatchNumber()) + .eq(ProductModelVideo::getBatchNumber, info.getBatchNumber()) .eq(ProductModelVideo::getState, PublishState.Published.getState()) .update(); } else { ProductModelVideo obsolete = lambdaQuery() .eq(ProductModelVideo::getModelId, info.getModelId()) - .eq(ProductModelVideo::getBatchNumber,info.getBatchNumber()) + .eq(ProductModelVideo::getBatchNumber, info.getBatchNumber()) .eq(ProductModelVideo::getState, PublishState.Obsolete.getState()) .orderByDesc(ProductModelVideo::getPublishTime) .last("Limit 1") From 04d6bae1f687baacee7ca651d9e5041c472fd40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 21 Aug 2025 12:23:46 +0800 Subject: [PATCH 19/22] =?UTF-8?q?feat:=20bug-596=20=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E6=9C=BA=E5=9E=8B=E6=96=B0=E5=93=81=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/task/ProductScheduledTasks.java | 33 ------------------- .../pojo/request/ProductModelAddRequest.java | 6 ++++ .../pojo/vo/FrontendProductModelSearchVO.java | 11 +++++++ .../common/pojo/vo/ProductModelSearchVO.java | 10 ++++++ .../common/pojo/vo/ProductModelVO.java | 11 +++++++ .../repository/entity/ProductModel.java | 4 +-- .../service/impl/ProductModelServiceImpl.java | 16 +++------ 7 files changed, 44 insertions(+), 47 deletions(-) delete mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java deleted file mode 100644 index aa619b4d..00000000 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ProductScheduledTasks.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.nflg.mobilebroken.admin.task; - -import com.nflg.mobilebroken.repository.entity.ProductModel; -import com.nflg.mobilebroken.repository.service.IProductModelService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.time.LocalDateTime; - -@Slf4j -@Component -public class ProductScheduledTasks { - - @Resource - private IProductModelService productModelService; - - /** - * 机型是否新版本设置 - * 每天午夜12点执行一次 - */ - @Scheduled(cron = "0 0 0 * * ?") - public void resetRecommend() { - log.info("【产品中心-机型-新品】开始执行"); - productModelService.lambdaUpdate() - .set(ProductModel::getRecommend, false) - .eq(ProductModel::getRecommend, true) - .gt(ProductModel::getRecommendTime, LocalDateTime.now().minusYears(2)) - .update(); - log.info("【产品中心-机型-新品】执行完毕"); - } -} diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java index fa5ec4e8..a83b156e 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/ProductModelAddRequest.java @@ -4,6 +4,7 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; @Data public class ProductModelAddRequest { @@ -48,6 +49,11 @@ public class ProductModelAddRequest { */ private Boolean recommend; + /** + * 新品过期时间 + */ + private LocalDateTime recommendExpireTime; + /** * 是否发布 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FrontendProductModelSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FrontendProductModelSearchVO.java index dfad3e9e..843ded2e 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FrontendProductModelSearchVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/FrontendProductModelSearchVO.java @@ -3,7 +3,9 @@ package com.nflg.mobilebroken.common.pojo.vo; import lombok.Data; import lombok.experimental.Accessors; +import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; @Data @Accessors @@ -56,6 +58,15 @@ public class FrontendProductModelSearchVO { */ private Boolean recommend; + public Boolean getRecommend() { + return recommend && (Objects.nonNull(recommendExpireTime) && LocalDateTime.now().isBefore(recommendExpireTime)); + } + + /** + * 新品过期时间 + */ + private LocalDateTime recommendExpireTime; + /** * 机型介绍 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java index 922eb2b1..41e95180 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java @@ -3,6 +3,7 @@ package com.nflg.mobilebroken.common.pojo.vo; import lombok.Data; import java.time.LocalDateTime; +import java.util.Objects; @Data public class ProductModelSearchVO { @@ -54,6 +55,15 @@ public class ProductModelSearchVO { */ private Boolean recommend; + public Boolean getRecommend() { + return recommend && (Objects.nonNull(recommendExpireTime) && LocalDateTime.now().isBefore(recommendExpireTime)); + } + + /** + * 新品过期时间 + */ + private LocalDateTime recommendExpireTime; + /** * 是否启用 */ diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java index c0fdf3a4..8e947ce2 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelVO.java @@ -3,7 +3,9 @@ package com.nflg.mobilebroken.common.pojo.vo; import lombok.Data; import lombok.experimental.Accessors; +import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; @Data @Accessors(chain = true) @@ -26,6 +28,15 @@ public class ProductModelVO { */ private Boolean recommend; + public Boolean getRecommend() { + return recommend && (Objects.nonNull(recommendExpireTime) && LocalDateTime.now().isBefore(recommendExpireTime)); + } + + /** + * 新品过期时间 + */ + private LocalDateTime recommendExpireTime; + /** * 主要参数列表 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java index fbc116f3..2baf6c3a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/ProductModel.java @@ -65,9 +65,9 @@ public class ProductModel implements Serializable { private Boolean recommend; /** - * 设置为新品的时间 + * 新品过期时间 */ - private LocalDateTime recommendTime; + private LocalDateTime recommendExpireTime; /** * 排序 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java index ce383a6b..b147e62d 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelServiceImpl.java @@ -67,13 +67,11 @@ public class ProductModelServiceImpl extends ServiceImpl Date: Tue, 26 Aug 2025 11:35:38 +0800 Subject: [PATCH 20/22] =?UTF-8?q?feat:=20bug-596=20=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E6=9C=BA=E5=9E=8B=E6=96=B0=E5=93=81=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobilebroken/common/pojo/vo/ProductModelSearchVO.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java index 41e95180..5766fdc3 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ProductModelSearchVO.java @@ -3,7 +3,6 @@ package com.nflg.mobilebroken.common.pojo.vo; import lombok.Data; import java.time.LocalDateTime; -import java.util.Objects; @Data public class ProductModelSearchVO { @@ -55,10 +54,6 @@ public class ProductModelSearchVO { */ private Boolean recommend; - public Boolean getRecommend() { - return recommend && (Objects.nonNull(recommendExpireTime) && LocalDateTime.now().isBefore(recommendExpireTime)); - } - /** * 新品过期时间 */ From 6ca0d589e403e8d056da8b6f1b2e22a385d48d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 26 Aug 2025 14:40:35 +0800 Subject: [PATCH 21/22] =?UTF-8?q?feat:=20bug-332=20=E8=8D=A3=E8=AA=89?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E3=80=81=E8=A7=86=E9=A2=91=E3=80=81=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E3=80=81=E8=B5=84=E6=96=99=E7=9A=84=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8F=AF=E4=BB=A5=E6=89=B9=E9=87=8F=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/service/impl/ProductCaseServiceImpl.java | 6 ++---- .../repository/service/impl/ProductHonorServiceImpl.java | 6 ++---- .../service/impl/ProductModelImageServiceImpl.java | 6 ++---- .../service/impl/ProductModelVideoServiceImpl.java | 6 ++---- 4 files changed, 8 insertions(+), 16 deletions(-) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java index d8710038..3d4de8db 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductCaseServiceImpl.java @@ -152,17 +152,15 @@ public class ProductCaseServiceImpl extends ServiceImpl list = listByIds(request.getIds()); - List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductCase::getTitle).collect(Collectors.toList()); - VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) - .throwMessage("以下案例不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - names = list.stream().filter(ph -> !ph.getEnable()).map(ProductCase::getTitle).collect(Collectors.toList()); + List names = list.stream().filter(ph -> !ph.getEnable()).map(ProductCase::getTitle).collect(Collectors.toList()); VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下案例被禁用不能发布:" + StrUtil.join(",", names)); } list.forEach(it -> publish(it, request.getState())); } private void publish(ProductCase info, Integer state) { + if (Objects.equals(state, info.getState())) return; if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java index cdac2e73..65ff79dd 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductHonorServiceImpl.java @@ -111,17 +111,15 @@ public class ProductHonorServiceImpl extends ServiceImpl list = listByIds(request.getIds()); - List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductHonor::getTitle).collect(Collectors.toList()); - VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) - .throwMessage("以下荣誉不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - names = list.stream().filter(ph -> !ph.getEnable()).map(ProductHonor::getTitle).collect(Collectors.toList()); + List names = list.stream().filter(ph -> !ph.getEnable()).map(ProductHonor::getTitle).collect(Collectors.toList()); VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下荣誉被禁用不能发布:" + StrUtil.join(",", names)); } list.forEach(it -> publish(it, request.getState())); } private void publish(ProductHonor info, Integer state) { + if (Objects.equals(state, info.getState())) return; if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java index 055e311f..fbfbacd2 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java @@ -93,17 +93,15 @@ public class ProductModelImageServiceImpl extends ServiceImpl list = listByIds(request.getIds()); - List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductModelImage::getName).collect(Collectors.toList()); - VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) - .throwMessage("以下图片不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelImage::getName).collect(Collectors.toList()); + List names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelImage::getName).collect(Collectors.toList()); VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下图片被禁用不能发布:" + StrUtil.join(",", names)); } list.forEach(it -> publish(it, request.getState())); } private void publish(ProductModelImage info, Integer state) { + if (Objects.equals(state, info.getState())) return; if (Objects.equals(state, PublishState.Published.getState())) { VUtils.trueThrowBusinessError(!info.getEnable()).throwMessage("不能发布已禁用的数据"); info.setState(PublishState.Published.getState()); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java index 54d0001c..f9144c44 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelVideoServiceImpl.java @@ -114,17 +114,15 @@ public class ProductModelVideoServiceImpl extends ServiceImpl list = listByIds(request.getIds()); - List names = list.stream().filter(ph -> Objects.equals(ph.getState(), request.getState())).map(ProductModelVideo::getName).collect(Collectors.toList()); - VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)) - .throwMessage("以下视频不需要设置为" + PublishState.findByValue(request.getState()).getDescription() + ":" + StrUtil.join(",", names)); if (Objects.equals(request.getState(), PublishState.Published.getState())) { - names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelVideo::getName).collect(Collectors.toList()); + List names = list.stream().filter(ph -> !ph.getEnable()).map(ProductModelVideo::getName).collect(Collectors.toList()); VUtils.trueThrowBusinessError(CollectionUtil.isNotEmpty(names)).throwMessage("以下视频被禁用不能发布:" + StrUtil.join(",", names)); } list.forEach(it -> publish(it, request.getState())); } private void publish(ProductModelVideo info, Integer state) { + if (Objects.equals(state, info.getState())) return; if (Objects.equals(state, PublishState.Published.getState())) { info.setState(PublishState.Published.getState()); info.setPublishBy(AdminUserUtil.getUserName()); From 187e503ce0058ab1f40539f1a8285356c5fa55c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Tue, 26 Aug 2025 14:41:27 +0800 Subject: [PATCH 22/22] =?UTF-8?q?feat:=20bug-332=20=E8=8D=A3=E8=AA=89?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E3=80=81=E8=A7=86=E9=A2=91=E3=80=81=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E3=80=81=E8=B5=84=E6=96=99=E7=9A=84=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8F=AF=E4=BB=A5=E6=89=B9=E9=87=8F=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/service/impl/ProductModelImageServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java index fbfbacd2..01bf0a51 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/ProductModelImageServiceImpl.java @@ -103,7 +103,6 @@ public class ProductModelImageServiceImpl extends ServiceImpl