From fef078f783a72c19cb45273c56c5b1d85a57b22b 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 1/3] =?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 41750927..db67bf8a 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 @@ -95,7 +95,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 62b3f2fa3078ac6a08053a0413452b2fc4264932 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 16:25:01 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20bug-243=20=20=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E6=9D=83=E9=99=90=E8=B0=83=E6=95=B4=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=AF=B9=E5=AE=A2=E6=88=B7=E7=AB=AF=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AppUserController.java | 12 +++++ .../controller/DictionaryController.java | 13 +++++ .../admin/controller/MenuController.java | 30 ++++++++++-- .../auth/controller/AdminController.java | 2 +- .../auth/controller/AppController.java | 18 +++++++ .../common/constant/Constant.java | 1 + .../common/pojo/request/MenuAddRequest.java | 4 ++ .../common/pojo/vo/AppUserForAdminVO.java | 8 +-- .../mobilebroken/common/pojo/vo/MenuVO.java | 6 +++ .../repository/entity/AdminMenu.java | 5 ++ .../repository/entity/AdminUserRoleMap.java | 8 ++- .../repository/mapper/AdminRoleMapper.java | 2 +- .../mapper/DictionaryItemMapper.java | 2 + .../repository/service/IAdminRoleService.java | 2 +- .../repository/service/IAppUserService.java | 3 ++ .../service/IDictionaryItemService.java | 2 + .../service/impl/AdminMenuServiceImpl.java | 2 + .../service/impl/AdminRoleServiceImpl.java | 13 ++++- .../service/impl/AdminUserServiceImpl.java | 5 +- .../service/impl/AppUserServiceImpl.java | 49 +++++++++++++++++-- .../impl/DictionaryItemServiceImpl.java | 5 ++ .../main/resources/mapper/AdminRoleMapper.xml | 2 +- .../resources/mapper/DictionaryItemMapper.xml | 7 +++ 23 files changed, 180 insertions(+), 21 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java index 144f38ef..378f43a3 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/AppUserController.java @@ -458,4 +458,16 @@ public class AppUserController extends ControllerBase { emailService.sendEmail(request.getEmail(), subject, content); return ApiResult.success(); } + + /** + * 授权角色 + * @param request 请求参数 + */ + @PostMapping("authorizeRole") + @MethodInfoMark(value = "授权角色", menuName = "账号管理") + @ApiMark(moduleName = "账号管理", apiName = "授权角色") + public ApiResult authorizeRole(@Valid @RequestBody AuthorizeRoleRequest request) { + appUserService.authorizeRole(request); + return ApiResult.success(); + } } \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DictionaryController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DictionaryController.java index 64b55464..74744a7b 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DictionaryController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DictionaryController.java @@ -22,6 +22,7 @@ import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.EecExcelUtil; import com.nflg.mobilebroken.common.util.PageUtil; import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.DictionaryItem; import com.nflg.mobilebroken.repository.entity.DictionaryItemTranslate; import com.nflg.mobilebroken.repository.entity.Language; import com.nflg.mobilebroken.repository.service.IDictionaryItemService; @@ -37,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.IOException; @@ -212,4 +214,15 @@ public class DictionaryController extends ControllerBase { throw new NflgException(STATE.BusinessError, "文件处理失败:" + e.getMessage()); } } + + /** + * 根据字典编码获取字典值列表 + * @param dictionaryCode 字典编码 + * @return 字典值列表 + */ + @GetMapping("getListByDictionaryCode") + @ApiMark(moduleName = "字典管理", apiName = "根据字典编码获取字典值列表",isPublic = true) + public ApiResult> getListByDictionaryCode(@Valid @RequestParam @NotBlank String dictionaryCode){ + return ApiResult.success(dictionaryItemService.getListByDictionaryCode(dictionaryCode)); + } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MenuController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MenuController.java index f19d4b0c..ebf3c10d 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MenuController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/MenuController.java @@ -1,22 +1,24 @@ package com.nflg.mobilebroken.admin.controller; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.nflg.mobilebroken.admin.annotation.ApiMark; +import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.vo.AdminMenuButtonVO; import com.nflg.mobilebroken.common.pojo.vo.ApiVO; import com.nflg.mobilebroken.common.pojo.vo.MenuVO; -import com.nflg.mobilebroken.repository.service.IAdminApiService; -import com.nflg.mobilebroken.repository.service.IAdminMenuButtonApiMapService; -import com.nflg.mobilebroken.repository.service.IAdminMenuButtonService; -import com.nflg.mobilebroken.repository.service.IAdminMenuService; +import com.nflg.mobilebroken.repository.entity.DictionaryItem; +import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; +import java.util.Objects; /** * 菜单相关接口 @@ -39,6 +41,9 @@ public class MenuController extends ControllerBase { @Resource private IAdminMenuButtonApiMapService adminMenuButtonApiMapService; + @Resource + private IDictionaryItemService dictionaryItemService; + /** * 搜索菜单 * @param request 请求信息 @@ -46,7 +51,22 @@ public class MenuController extends ControllerBase { @PostMapping("searchMenu") @ApiMark(moduleName = "菜单管理", apiName = "搜索菜单") public ApiResult> searchMenu(@Valid @RequestBody MenuSearchRequest request) { - return ApiResult.success(adminMenuService.search(request)); + List items=dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_SERVICE); + IPage page=adminMenuService.search(request); + bindMenuService(page.getRecords(),items); + return ApiResult.success(page); + } + + private void bindMenuService(List datas,List items){ + if (CollectionUtil.isNotEmpty(datas)){ + datas.forEach(m -> { + if (Objects.nonNull(m.getServiceDescId())){ + DictionaryItem item=items.stream().filter(i -> i.getId().equals(m.getServiceDescId())).findFirst().get(); + m.setServiceDesc(item.getValue()); + } + bindMenuService(m.getChildren(),items); + }); + } } /** diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java index 01e0ecc7..84662262 100644 --- a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java +++ b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AdminController.java @@ -88,7 +88,7 @@ public class AdminController extends ControllerBase { @GetMapping("getPermissionMenus") public ApiResult> getPermissionMenus() { VUtils.trueThrow(!SaTokenAdminUtil.isLogin()).throwMessage(STATE.LoginError,"请重新登录"); - return ApiResult.success(adminRoleService.getMenusByRoleCodes(AdminUserUtil.getUserId())); + return ApiResult.success(adminRoleService.getMenusByRoleCodes("admin",AdminUserUtil.getUserId(), "admin")); } /** diff --git a/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java b/nflg-mobilebroken-auth/src/main/java/com/nflg/mobilebroken/auth/controller/AppController.java index 32af85fc..5b7c5f8a 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 @@ -8,9 +8,13 @@ import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.UserState; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.vo.AppLoginVO; +import com.nflg.mobilebroken.common.pojo.vo.MenuVO; +import com.nflg.mobilebroken.common.util.AppUserUtil; +import com.nflg.mobilebroken.common.util.SaTokenAdminUtil; import com.nflg.mobilebroken.common.util.SaTokenAppUtil; import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.repository.entity.AppUser; +import com.nflg.mobilebroken.repository.service.IAdminRoleService; import com.nflg.mobilebroken.repository.service.IAppUserService; import com.nflg.mobilebroken.repository.service.IDictionaryItemTranslateService; import org.springframework.web.bind.annotation.GetMapping; @@ -20,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.chrono.ChronoLocalDate; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -37,6 +42,9 @@ public class AppController extends ControllerBase { @Resource private IDictionaryItemTranslateService dictionaryItemTranslateService; + @Resource + private IAdminRoleService adminRoleService; + /** * 用户端登录 * @param userName 用户名 @@ -80,4 +88,14 @@ public class AppController extends ControllerBase { // StpUtil.logout(); // return ApiResult.success(); //} + + /** + * 获取权限菜单 + * @return 权限列表 + */ + @GetMapping("getPermissionMenus") + public ApiResult> getPermissionMenus() { + VUtils.trueThrow(!SaTokenAdminUtil.isLogin()).throwMessage(STATE.LoginError,"请重新登录"); + return ApiResult.success(adminRoleService.getMenusByRoleCodes("app",AppUserUtil.getUserId(), "app")); + } } 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 12b438c0..448eb837 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 @@ -122,4 +122,5 @@ public class Constant { public static final String DICTIONARY_AD_TYPE ="AdvertisementType"; public static final String DICTIONARY_AD_POSITION ="AdvertisementPosition"; + public static final String DICTIONARY_SERVICE = "SystemService"; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MenuAddRequest.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MenuAddRequest.java index 64920f1a..3ac9bd30 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MenuAddRequest.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/request/MenuAddRequest.java @@ -34,4 +34,8 @@ public class MenuAddRequest { // 是否显示 @NotNull private boolean show; + + //服务标识,字典项ID + @NotNull + private Integer serviceDescId; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java index 6212819f..9dfe0818 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/AppUserForAdminVO.java @@ -6,10 +6,7 @@ import lombok.experimental.Accessors; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @Data @@ -106,6 +103,9 @@ public class AppUserForAdminVO { //职位id private Integer titleId; + //所属角色 + private Collection roles; + //下级账号 private List children=new ArrayList<>(); diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java index 77ef952e..2309c4dc 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/MenuVO.java @@ -46,6 +46,12 @@ public class MenuVO { // 修改时间 private LocalDateTime updateTime; + //服务标识,字典项ID + private Integer serviceDescId; + + //服务标识,字典项名称 + private String serviceDesc; + //下级菜单 private List children = new ArrayList<>(); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminMenu.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminMenu.java index 21ec5b7f..09a48488 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminMenu.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminMenu.java @@ -66,6 +66,11 @@ public class AdminMenu implements Serializable { */ private Integer sort; + /** + * 服务标识,字典项ID + */ + private Integer serviceDescId; + /** * 创建人 */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUserRoleMap.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUserRoleMap.java index 10b25a02..26a02e80 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUserRoleMap.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AdminUserRoleMap.java @@ -3,11 +3,12 @@ package com.nflg.mobilebroken.repository.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import java.io.Serializable; + /** *

* @@ -36,4 +37,9 @@ public class AdminUserRoleMap implements Serializable { * 用户id */ private Integer userId; + + /** + * 来源平台 + */ + private String platform; } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminRoleMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminRoleMapper.java index 4e2f7c65..826223e5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminRoleMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/AdminRoleMapper.java @@ -23,7 +23,7 @@ public interface AdminRoleMapper extends BaseMapper { List getUrlsByRoleCodes(List roleCodes); - List getMenusByRoleCodes(Integer userId); + List getMenusByRoleCodes(String from,Integer userId,Integer serviceId); IPage search(RoleSearchRequest request, Page page); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DictionaryItemMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DictionaryItemMapper.java index 86827f18..6072d447 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DictionaryItemMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/DictionaryItemMapper.java @@ -23,4 +23,6 @@ public interface DictionaryItemMapper extends BaseMapper { String getName(String dictionaryCode, String itemCode); List getListByDictionaryCode(String code); + + DictionaryItem getByCode(String dictionaryCode, String dictionaryItemCode); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminRoleService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminRoleService.java index ed449402..9e00a871 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminRoleService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAdminRoleService.java @@ -31,7 +31,7 @@ public interface IAdminRoleService extends IService { List getUrlsByRoleCodes(List roleCodes); - List getMenusByRoleCodes(Integer userId); + List getMenusByRoleCodes(String from,Integer userId,String serviceName); IPage search(RoleSearchRequest request); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java index 9c7f56d9..a9fa674c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IAppUserService.java @@ -10,6 +10,7 @@ import com.nflg.mobilebroken.common.pojo.vo.AreaSimpleVO; import com.nflg.mobilebroken.common.pojo.vo.CompanyVO; import com.nflg.mobilebroken.repository.entity.AppUser; +import javax.validation.Valid; import java.util.List; /** @@ -63,4 +64,6 @@ public interface IAppUserService extends IService { void deleteAppUser(Integer id); List getSimpleAreas(Integer userId); + + void authorizeRole(@Valid AuthorizeRoleRequest request); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDictionaryItemService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDictionaryItemService.java index 32907cad..68d1be13 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDictionaryItemService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/IDictionaryItemService.java @@ -25,4 +25,6 @@ public interface IDictionaryItemService extends IService { Integer getId(String dictionaryName, String dictionaryItemName); List getListByDictionaryCode(String code); + + DictionaryItem getByCode(String dictionaryCode, String DictionaryItemCode); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java index 6b246667..3036158c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminMenuServiceImpl.java @@ -74,6 +74,7 @@ public class AdminMenuServiceImpl extends ServiceImpl getMenusByRoleCodes(Integer userId) { - List menus=baseMapper.getMenusByRoleCodes(userId); + public List getMenusByRoleCodes(String from,Integer userId,String serviceName) { + DictionaryItem service = dictionaryItemService.getByCode(Constant.DICTIONARY_SERVICE, serviceName); + VUtils.trueThrowBusinessError(Objects.isNull(service)).throwMessage("无效的服务:"+serviceName); + List menus=baseMapper.getMenusByRoleCodes(from,userId,service.getId()); for (int i = 0; i < menus.size(); i++) { MenuVO menu = menus.get(i); bindParent(menu, menus); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java index a9c85a26..d34157c1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/AdminUserServiceImpl.java @@ -176,10 +176,12 @@ public class AdminUserServiceImpl extends ServiceImpl() - .eq(AdminUserRoleMap::getUserId, request.getUserId())); + .eq(AdminUserRoleMap::getUserId, request.getUserId()) + .eq(AdminUserRoleMap::getPlatform, "admin")); if (CollectionUtil.isNotEmpty(request.getRoleIds())) { adminUserRoleMapService.saveBatch(request.getRoleIds().stream().map(roleId -> new AdminUserRoleMap() .setRoleId(roleId) + .setPlatform("admin") .setUserId(request.getUserId())) .collect(Collectors.toList())); } @@ -365,6 +367,7 @@ public class AdminUserServiceImpl extends ServiceImpl getRoles(Integer userId) { Collection roleIds = adminUserRoleMapService.lambdaQuery() .eq(AdminUserRoleMap::getUserId, userId) + .eq(AdminUserRoleMap::getPlatform, "admin") .list() .stream() .map(AdminUserRoleMap::getRoleId) 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 e8e51adc..51ba864a 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 @@ -10,10 +10,7 @@ import com.nflg.mobilebroken.common.constant.*; import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.request.*; -import com.nflg.mobilebroken.common.pojo.vo.AppUserForAdminVO; -import com.nflg.mobilebroken.common.pojo.vo.AppUserVO; -import com.nflg.mobilebroken.common.pojo.vo.AreaSimpleVO; -import com.nflg.mobilebroken.common.pojo.vo.CompanyVO; +import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AppUserUtil; import com.nflg.mobilebroken.common.util.PageUtil; @@ -63,6 +60,12 @@ public class AppUserServiceImpl extends ServiceImpl impl @Resource private ITBaseAreaService adminAreaService; + @Resource + private IAdminUserRoleMapService adminUserRoleMapService; + + @Resource + private IAdminRoleService roleService; + @Resource private RedisTemplate redisTemplate; @@ -288,6 +291,20 @@ public class AppUserServiceImpl extends ServiceImpl impl } } + @Override + public void authorizeRole(AuthorizeRoleRequest request) { + adminUserRoleMapService.remove(new LambdaQueryWrapper() + .eq(AdminUserRoleMap::getUserId, request.getUserId()) + .eq(AdminUserRoleMap::getPlatform, "app")); + if (CollectionUtil.isNotEmpty(request.getRoleIds())) { + adminUserRoleMapService.saveBatch(request.getRoleIds().stream().map(roleId -> new AdminUserRoleMap() + .setRoleId(roleId) + .setPlatform("app") + .setUserId(request.getUserId())) + .collect(Collectors.toList())); + } + } + private void bindChildren1(AreaSimpleVO vo) { List datas = appAreaService.lambdaQuery().eq(AppArea::getParentId, vo.getId()).eq(AppArea::getEnable, true).list(); List vos = datas.stream().map(d -> new AreaSimpleVO().setId(d.getId()).setName(d.getName())).collect(Collectors.toList()); @@ -377,9 +394,33 @@ public class AppUserServiceImpl extends ServiceImpl impl .skip((long) (request.getPage() - 1) * request.getPageSize()) .limit(request.getPageSize()) .collect(Collectors.toList()); + page.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); } + private Collection getRoles(Integer userId) { + Collection roleIds = adminUserRoleMapService.lambdaQuery() + .eq(AdminUserRoleMap::getUserId, userId) + .eq(AdminUserRoleMap::getPlatform, "app") + .list() + .stream() + .map(AdminUserRoleMap::getRoleId) + .collect(Collectors.toSet()); + if (CollectionUtil.isEmpty(roleIds)) { + return Collections.emptyList(); + } + return roleService.lambdaQuery() + .in(AdminRole::getId, roleIds) + .list() + .stream() + .map(r -> new RoleSimpleVO().setId(r.getId()).setName(r.getName())) + .collect(Collectors.toSet()); + } + public PageData searchAppUserForAdmin1(SearchAppUserForAdminRequest request) { Page page = lambdaQuery() .eq(AppUser::getIsDel, false) diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java index 244ea2e9..949571f7 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/DictionaryItemServiceImpl.java @@ -135,4 +135,9 @@ public class DictionaryItemServiceImpl extends ServiceImpl getListByDictionaryCode(String code) { return baseMapper.getListByDictionaryCode(code); } + + @Override + public DictionaryItem getByCode(String dictionaryCode, String DictionaryItemCode) { + return baseMapper.getByCode(dictionaryCode, DictionaryItemCode); + } } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/AdminRoleMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/AdminRoleMapper.xml index 8dfa7ba8..cb946d43 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/AdminRoleMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/AdminRoleMapper.xml @@ -30,7 +30,7 @@ INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id INNER JOIN admin_menu m ON rmm.menu_id=m.id INNER JOIN admin_user_role_map urm ON urm.role_id=r.id - WHERE m.`enable`=1 AND r.`enable`=1 AND urm.user_id=#{userId} + WHERE m.`enable`=1 AND r.`enable`=1 AND urm.user_id=#{userId} AND m.service_desc_id=#{serviceId} AND urm.platform=#{from} + + From a2f1a7d7ede7cdc77e6324b0b09e9e50e191b4d5 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 17:15:04 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20bug-245=20=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E9=80=9A=E8=AF=9D=E4=BC=98=E5=8C=96=EF=BC=8C=E5=A4=9A=E7=AB=AF?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=B6=EF=BC=8C=E6=9C=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=8E=A5=E5=90=AC=E5=90=8E=EF=BC=8C=E7=BB=99?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E8=AE=BE=E5=A4=87=E6=8E=A8=E9=80=81=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=8E=A5=E5=90=AC=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 15 +++++++++++++ .../admin/service/SsePushService.java | 22 +++++++++++++++++++ .../cfs/controller/TicketController.java | 17 +++++++++++++- .../cfs/service/SsePushService.java | 22 +++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) 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 8563da2f..6956f625 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 @@ -1310,6 +1310,21 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(ticketCallService.isInCall(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(); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java index cc420f74..8cee0ead 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java @@ -282,4 +282,26 @@ public class SsePushService { log.error("发送消息出错", e); } } + + public void sendTicketCallJoinedToAdmin(Integer userId, @Valid @NotNull Integer ticketId) { + try { + PushUserMessageRequest request = new PushUserMessageRequest() + .setUserId(userId) + .setMessage(new PushMessageDTO() + .setType("ticketCallJoined") + .setData(new PushMessageDataBody() + .setTargetId(ticketId) + .setType("ticketCallJoined") + .setData(new UniPushMessageCallPayload() + .setTicketId(ticketId) + .setFrom("admin") + ) + ) + ); + ApiResult result = sendMessageByUser(request, "admin"); + log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result)); + } catch (Exception e) { + log.error("发送消息出错", e); + } + } } 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 4c6c5437..72d49e8d 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 @@ -526,7 +526,22 @@ public class TicketController extends ControllerBase { .throwMessage("当前工单状态不允许通话"); VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId())) .throwMessage("您已加入别的通话中"); - ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP); + ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); + ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); + uniPushService.send(new UniPushMessage() + .setSenderId("app-uid-" + AppUserUtil.getUserId()) + .setReceiverId("app-uid-" + AppUserUtil.getUserId()) + .setSendData(new UniPushMessageBody() + .setTitle("视频通话") + .setContent("您已加入别的通话中") + .setPayload(new UniPushMessageCallPayload() + .setTicketId(ticketId) + .setUserId(AppUserUtil.getUserId()) + .setCategory("ticketCallJoined") + .setFrom("app") + ) + ) + ); return ApiResult.success(); } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/SsePushService.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/SsePushService.java index 4b2382e6..94347f66 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/SsePushService.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/service/SsePushService.java @@ -222,4 +222,26 @@ public class SsePushService { log.error("发送消息出错", e); } } + + public void sendTicketCallJoinedToApp(Integer userId,@NotNull Integer ticketId) { + try { + PushUserMessageRequest request = new PushUserMessageRequest() + .setUserId(userId) + .setMessage(new PushMessageDTO() + .setType("ticketCallJoined") + .setData(new PushMessageDataBody() + .setTargetId(ticketId) + .setType("ticketCallJoined") + .setData(new UniPushMessageCallPayload() + .setTicketId(ticketId) + .setFrom("app") + ) + ) + ); + ApiResult result = sendMessageByUser(request, "app"); + log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result)); + } catch (Exception e) { + log.error("发送消息出错", e); + } + } } \ No newline at end of file