Compare commits

..

No commits in common. "7d417a33d51e2e3723c3c3d354997e070aa13a5c" and "e2596c36db88088ad5f28248e5a433af28cbd2e5" have entirely different histories.

23 changed files with 106 additions and 248 deletions

View File

@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -176,16 +175,6 @@ public class MenuController extends ControllerBase {
return ApiResult.success(); return ApiResult.success();
} }
/**
* 根据菜单url获取菜单按钮列表
* @param url 请求url
* @return 菜单按钮列表
*/
@GetMapping("getMenuButtonList")
public ApiResult<List<AdminMenuButtonVO>> getMenuButtonList(@Valid @RequestParam @NotBlank String url) {
return ApiResult.success(adminMenuButtonService.getMenuButtonList(url));
}
/** /**
* 获取所有接口 * 获取所有接口
* @return 接口列表 * @return 接口列表

View File

@ -157,16 +157,6 @@ public class TicketController extends ControllerBase {
return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,id)); return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,id));
} }
/**
* 获取收藏夹树结构
* @param id 父级id0为根节点
* @return 树结构
*/
@GetMapping("getFavoritesTree")
public ApiResult<FavoritesVO> getFavoritesTree(@RequestParam(defaultValue ="0") Integer id){
return ApiResult.success(ticketFavoritesService.getTree(AdminUserUtil.getUserId(),Constant.FROM_ADMIN,id));
}
/** /**
* 添加收藏夹 * 添加收藏夹
* @param request 请求信息 * @param request 请求信息
@ -639,7 +629,6 @@ public class TicketController extends ControllerBase {
.setAccidentLevel(ticket.getAccidentLevel()) .setAccidentLevel(ticket.getAccidentLevel())
.setUserIsHandle(handleIds.contains(AdminUserUtil.getUserId())) .setUserIsHandle(handleIds.contains(AdminUserUtil.getUserId()))
.setUserIsCQM(cqms.contains(AdminUserUtil.getUserId())) .setUserIsCQM(cqms.contains(AdminUserUtil.getUserId()))
.setUserPlatform(ticket.getUserPlatform())
.setEvaluate(getTicketEvaluate(ticket.getId())); .setEvaluate(getTicketEvaluate(ticket.getId()));
return ApiResult.success(vo); return ApiResult.success(vo);
} }
@ -745,9 +734,6 @@ public class TicketController extends ControllerBase {
.throwMessage("当前工单状态不允许发送消息"); .throwMessage("当前工单状态不允许发送消息");
List<Integer> adminUsers=adminUserService.getTickerMangagers(); List<Integer> adminUsers=adminUserService.getTickerMangagers();
adminUsers.addAll(StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList())); adminUsers.addAll(StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList()));
if (StrUtil.equals(Constant.FROM_ADMIN,ticket.getUserPlatform())){
adminUsers.add(ticket.getUserId());
}
VUtils.trueThrowBusinessError(adminUsers.stream() VUtils.trueThrowBusinessError(adminUsers.stream()
.noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId()))) .noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId())))
.throwMessage("你无权发送消息"); .throwMessage("你无权发送消息");
@ -1249,33 +1235,13 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
.throwMessage("当前工单状态不允许请求通话"); .throwMessage("当前工单状态不允许请求通话");
Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get();
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId))
VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) .throwMessage("不是工单主负责人无权限呼叫");
.throwMessage("不是工单主负责人无权限呼叫");
} else {
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()) && !Objects.equals(AdminUserUtil.getUserId(), handlerUserId))
.throwMessage("无权限呼叫");
}
VUtils.trueThrowBusinessError(ticketCallService.isInCall(ticket.getUserId())).throwMessage("对方正在通话中"); VUtils.trueThrowBusinessError(ticketCallService.isInCall(ticket.getUserId())).throwMessage("对方正在通话中");
boolean userIdCreate = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()); AdminUser adminUser = adminUserService.getById(handlerUserId);
Integer sendUserId = 0, receiveUserId = 0;
String sendUserFrom, receiveUserFrom;
if (userIdCreate) {
sendUserId = ticket.getUserId();
receiveUserId = handlerUserId;
sendUserFrom = Constant.FROM_ADMIN;
receiveUserFrom = Constant.FROM_ADMIN;
} else {
sendUserId = handlerUserId;
receiveUserId = ticket.getUserId();
sendUserFrom = Constant.FROM_ADMIN;
receiveUserFrom = Constant.FROM_APP;
}
ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom);
AdminUser adminUser = adminUserService.getById(sendUserId);
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + sendUserId) .setSenderId("admin-uid-" + handlerUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setReceiverId("app-uid-" + ticket.getUserId())
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("视频通话") .setTitle("视频通话")
.setContent(adminUser.getUserName() + "请求与您视频通话") .setContent(adminUser.getUserName() + "请求与您视频通话")
@ -1289,11 +1255,8 @@ public class TicketController extends ControllerBase {
) )
) )
); );
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId); ticketCallService.add(ticketId, handlerUserId, ticket.getUserId(), Constant.FROM_ADMIN);
} else {
ssePushService.sendTicketCallToAdmin(adminUser, receiveUserId, ticketId);
}
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName()); ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName());
return ApiResult.success(); return ApiResult.success();
} }
@ -1352,7 +1315,7 @@ public class TicketController extends ControllerBase {
ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN);
ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId); ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId);
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要 .setSenderId("admin-uid-" + AdminUserUtil.getUserId())
.setReceiverId("admin-uid-" + AdminUserUtil.getUserId()) .setReceiverId("admin-uid-" + AdminUserUtil.getUserId())
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("视频通话") .setTitle("视频通话")
@ -1377,9 +1340,7 @@ public class TicketController extends ControllerBase {
TicketCall ticketCall = ticketCallService.lambdaQuery() TicketCall ticketCall = ticketCallService.lambdaQuery()
.eq(TicketCall::getTicketId, request.getTicketId()) .eq(TicketCall::getTicketId, request.getTicketId())
.ne(TicketCall::getState, 2) .ne(TicketCall::getState, 2)
.last("limit 1")
.one(); .one();
if (Objects.isNull(ticketCall)) return ApiResult.success();
boolean flag=false; boolean flag=false;
if (request.getReject()) { if (request.getReject()) {
AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId());

View File

@ -13,7 +13,6 @@ import com.nflg.mobilebroken.repository.service.ITicketCallService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC; import org.slf4j.MDC;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -24,7 +23,6 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ConditionalOnProperty(name = "shengwang.sync.enable", havingValue = "true", matchIfMissing = true)
@Component @Component
@Slf4j @Slf4j
public class ShengWangScheduledTasks { public class ShengWangScheduledTasks {
@ -64,7 +62,7 @@ public class ShengWangScheduledTasks {
ticketCallService.updateById(ticketCall); ticketCallService.updateById(ticketCall);
ticketCallJoinService.lambdaUpdate() ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2) .set(TicketCallJoin::getState, 2)
// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getCallId, ticketCall.getId())
.update(); .update();
}); });
@ -82,7 +80,7 @@ public class ShengWangScheduledTasks {
if (CollectionUtil.isEmpty(channelUsers)) { if (CollectionUtil.isEmpty(channelUsers)) {
ticketCallJoinService.lambdaUpdate() ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2) .set(TicketCallJoin::getState, 2)
// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getCallId, ticketCall.getId())
.update(); .update();
} else { } else {
@ -96,7 +94,7 @@ public class ShengWangScheduledTasks {
if (CollectionUtil.isNotEmpty(userIds)) { if (CollectionUtil.isNotEmpty(userIds)) {
ticketCallJoinService.lambdaUpdate() ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2) .set(TicketCallJoin::getState, 2)
// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getCallId, ticketCall.getId())
.eq(TicketCallJoin::getFrom, Constant.FROM_APP) .eq(TicketCallJoin::getFrom, Constant.FROM_APP)
.notIn(TicketCallJoin::getUserId, userIds) .notIn(TicketCallJoin::getUserId, userIds)
@ -112,7 +110,7 @@ public class ShengWangScheduledTasks {
if (CollectionUtil.isNotEmpty(userIds)) { if (CollectionUtil.isNotEmpty(userIds)) {
ticketCallJoinService.lambdaUpdate() ticketCallJoinService.lambdaUpdate()
.set(TicketCallJoin::getState, 2) .set(TicketCallJoin::getState, 2)
// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .set(TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getCallId, ticketCall.getId())
.eq(TicketCallJoin::getFrom, Constant.FROM_ADMIN) .eq(TicketCallJoin::getFrom, Constant.FROM_ADMIN)
.notIn(TicketCallJoin::getUserId, userIds) .notIn(TicketCallJoin::getUserId, userIds)

View File

@ -9,11 +9,15 @@ import com.nflg.mobilebroken.common.constant.UserState;
import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.vo.AppLoginVO; import com.nflg.mobilebroken.common.pojo.vo.AppLoginVO;
import com.nflg.mobilebroken.common.pojo.vo.MenuVO; import com.nflg.mobilebroken.common.pojo.vo.MenuVO;
import com.nflg.mobilebroken.common.pojo.vo.RoleVO; import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.common.util.*; 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.AdminUser;
import com.nflg.mobilebroken.repository.entity.AppUser; import com.nflg.mobilebroken.repository.entity.AppUser;
import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.repository.service.IAdminRoleService;
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; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -45,10 +49,6 @@ public class AppController extends ControllerBase {
@Resource @Resource
private IAdminRoleService adminRoleService; private IAdminRoleService adminRoleService;
@Resource
private IAdminUserRoleMapService adminUserRoleMapService;
/** /**
* 用户端登录 * 用户端登录
* @param userName 用户名 * @param userName 用户名
@ -57,34 +57,8 @@ public class AppController extends ControllerBase {
*/ */
@GetMapping("login") @GetMapping("login")
public ApiResult<AppLoginVO> login(String userName, String password) { public ApiResult<AppLoginVO> login(String userName, String password) {
AdminUser adminUser =adminUserService.getUser(userName,password); AppUser user=appUserService.getUser(userName,password);
if (Objects.nonNull(adminUser)){ if (Objects.nonNull(user)) {
VUtils.trueThrow(Objects.equals(adminUser.getState(), UserState.Disabled.getState()))
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED, MultilingualUtil.getLanguage()));
VUtils.trueThrow(Objects.equals(adminUser.getState(), UserState.ToBeActivated.getState()))
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED, MultilingualUtil.getLanguage()));
List<RoleVO> roleCodes = adminUserRoleMapService.getRoleList(adminUser.getId());
SaTokenAdminUtil.login(adminUser.getId(), SaLoginConfig
.setExtra("from", Constant.FROM_ADMIN)
.setExtra("name", adminUser.getUserName())
.setExtra("code", adminUser.getUserCode())
.setExtra("email", adminUser.getEmail())
.setExtra("roles", roleCodes.stream().map(RoleVO::getCode).collect(Collectors.toList())));
String adminToken=SaTokenAdminUtil.getTokenInfo().getTokenValue();
SaTokenAppUtil.login(adminUser.getId(), SaLoginConfig
.setExtra("from", Constant.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())
.setAdminToken(adminToken)
.setExpire(tokenInfo.getTokenTimeout())
.setLanguageCode(Constant.DEFAULT_LANGUAGE_CODE)
.setPlatform(Constant.FROM_ADMIN));
}else {
AppUser user=appUserService.getUser(userName,password);
VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState())) VUtils.trueThrow(Objects.equals(user.getState(), UserState.Disabled.getState()))
.throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED, user.getLanguageCode())); .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_DISABLED, user.getLanguageCode()));
VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState())) VUtils.trueThrow(Objects.equals(user.getState(), UserState.ToBeActivated.getState()))
@ -94,7 +68,7 @@ public class AppController extends ControllerBase {
VUtils.trueThrow(user.getExpireTime().isBefore(ChronoLocalDate.from(LocalDateTime.now())) && !user.getIsPrimary()) 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())); .throwMessage(STATE.PassportErr, dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_ACCOUNT_HAS_EXPIRED, user.getLanguageCode()));
SaTokenAppUtil.login(user.getId(), SaLoginConfig SaTokenAppUtil.login(user.getId(), SaLoginConfig
.setExtra("from", Constant.FROM_APP) .setExtra("from", "app")
.setExtra("name", user.getName()) .setExtra("name", user.getName())
.setExtra("email", user.getEmail()) .setExtra("email", user.getEmail())
.setExtra("companyIds", StrUtil.split(user.getCompanyId(), ",").stream().map(Integer::valueOf).collect(Collectors.toList())) .setExtra("companyIds", StrUtil.split(user.getCompanyId(), ",").stream().map(Integer::valueOf).collect(Collectors.toList()))
@ -107,7 +81,26 @@ public class AppController extends ControllerBase {
.setToken(tokenInfo.getTokenValue()) .setToken(tokenInfo.getTokenValue())
.setExpire(tokenInfo.getTokenTimeout()) .setExpire(tokenInfo.getTokenTimeout())
.setLanguageCode(user.getLanguageCode()) .setLanguageCode(user.getLanguageCode())
.setPlatform(Constant.FROM_APP)); .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"));
} }
} }

View File

@ -507,7 +507,7 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(ticketCallService.isInCall(handlerUserId)).throwMessage("对方正在通话中"); VUtils.trueThrowBusinessError(ticketCallService.isInCall(handlerUserId)).throwMessage("对方正在通话中");
AppUser appUser = appUserService.getById(ticket.getUserId()); AppUser appUser = appUserService.getById(ticket.getUserId());
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) .setSenderId("app-uid-" + ticket.getUserId())
.setReceiverId("admin-uid-" + handlerUserId) .setReceiverId("admin-uid-" + handlerUserId)
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("视频通话") .setTitle("视频通话")
@ -523,7 +523,7 @@ public class TicketController extends ControllerBase {
) )
); );
ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId); ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId);
ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN); ticketCallService.add(ticketId, AppUserUtil.getUserId(), handlerUserId, Constant.FROM_APP);
ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName()); ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName());
return ApiResult.success(); return ApiResult.success();
} }
@ -538,17 +538,13 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState()))
.throwMessage("当前工单状态不允许通话"); .throwMessage("当前工单状态不允许通话");
VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom())
|| Objects.equals(AppUserUtil.getUserId(), ticket.getUserId()))
.throwMessage("不是创建人无法加入通话");
VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId())) VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId()))
.throwMessage("您已加入别的通话中"); .throwMessage("您已加入别的通话中");
ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP);
ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId);
Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) .setSenderId("app-uid-" + AppUserUtil.getUserId())
.setReceiverId("admin-uid-" + handlerUserId) .setReceiverId("app-uid-" + AppUserUtil.getUserId())
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("视频通话") .setTitle("视频通话")
.setContent("您已加入别的通话中") .setContent("您已加入别的通话中")
@ -576,7 +572,7 @@ public class TicketController extends ControllerBase {
Ticket ticket = ticketService.getById(request.getTicketId()); Ticket ticket = ticketService.getById(request.getTicketId());
int handlerId= Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get()); int handlerId= Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get());
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) .setSenderId("app-uid-" + appUser.getId())
.setReceiverId("admin-uid-" + handlerId) .setReceiverId("admin-uid-" + handlerId)
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("挂断视频通话") .setTitle("挂断视频通话")
@ -595,9 +591,8 @@ public class TicketController extends ControllerBase {
flag=ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); flag=ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true);
}else { }else {
AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); AppUser appUser = appUserService.getById(AppUserUtil.getUserId());
Ticket ticket = ticketService.getById(request.getTicketId());
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) .setSenderId("app-uid-" + appUser.getId())
.setReceiverId("admin-uid-" + request.getFromUserId()) .setReceiverId("admin-uid-" + request.getFromUserId())
.setSendData(new UniPushMessageBody() .setSendData(new UniPushMessageBody()
.setTitle("拒绝视频通话") .setTitle("拒绝视频通话")

View File

@ -209,10 +209,4 @@ public class AdminTicketVO {
} }
return null; return null;
} }
/**
* 问题描述
*/
@IgnoreExport
private String description;
} }

View File

@ -11,11 +11,6 @@ public class AppLoginVO {
private String token; private String token;
/**
* 管理员端token
*/
private String adminToken;
private Long expire; private Long expire;
//语言编码 //语言编码

View File

@ -32,11 +32,6 @@ public class TicketInfoVO {
//创建人头像 //创建人头像
private String createUserAvatar; private String createUserAvatar;
/**
* 用户来源平台app或者admin
*/
private String userPlatform;
//提交时间 //提交时间
private LocalDateTime createTime; private LocalDateTime createTime;

View File

@ -1,6 +1,5 @@
package com.nflg.mobilebroken.push; package com.nflg.mobilebroken.push;
import cn.hutool.core.util.IdUtil;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -23,8 +22,6 @@ public class UserSseEmitter extends SseEmitter {
private Integer ticketId; private Integer ticketId;
private String id = IdUtil.getSnowflakeNextIdStr();
private ScheduledFuture<?> heartbeatFuture; private ScheduledFuture<?> heartbeatFuture;
public UserSseEmitter(){ public UserSseEmitter(){
@ -37,8 +34,8 @@ public class UserSseEmitter extends SseEmitter {
this.ticketId = ticketId; this.ticketId = ticketId;
} }
public String getLable() { public String getUser(){
return from + "-" + userId + ",连接id:" + id; return from + "-" + userId;
} }
public void startHeartbeat(TaskScheduler taskScheduler) { public void startHeartbeat(TaskScheduler taskScheduler) {
@ -47,7 +44,7 @@ public class UserSseEmitter extends SseEmitter {
send(SseEmitter.event().data("ping")); send(SseEmitter.event().data("ping"));
} catch (IOException e) { } catch (IOException e) {
heartbeatFuture.cancel(true); heartbeatFuture.cancel(true);
log.error("sse发送ping数据出错({}):{}", getLable(),e.getMessage()); log.error("sse发送ping数据出错({}):{}", getUser(),e.getMessage());
completeWithError(e); completeWithError(e);
} }
}, 30_000); }, 30_000);

View File

@ -34,53 +34,53 @@ public class SSEManagerBase {
protected String from; protected String from;
protected void check() { protected void check(){
VUtils.trueThrow(IS_SHUTDOWN).throwMessage(STATE.ServiceConnectRefused, "SSE服务已关闭"); VUtils.trueThrow(IS_SHUTDOWN).throwMessage(STATE.ServiceConnectRefused,"SSE服务已关闭");
} }
@PreDestroy @PreDestroy
protected void shutdown() { protected void shutdown() {
IS_SHUTDOWN = true; IS_SHUTDOWN=true;
log.warn("准备关闭SSE服务"); log.warn("准备关闭SSE服务");
SSE_EMITTERS.forEach(emitter -> { SSE_EMITTERS.forEach(emitter->{
try { try {
emitter.send("因SSE服务关闭,连接即将断开"); emitter.send("因SSE服务关闭,连接即将断开");
emitter.complete(); emitter.complete();
} catch (Exception ex) { }catch (Exception ex){
log.error("SSE发送消息失败", ex); log.error("SSE发送消息失败",ex);
emitter.completeWithError(ex); emitter.completeWithError(ex);
} }
}); });
log.warn("SSE服务已关闭"); log.warn("SSE服务已关闭");
} }
protected SseEmitter connect(Integer ticketId, Integer userId) { protected SseEmitter connect(Integer ticketId,Integer userId) {
check(); check();
log.info(from + "SSE连接:用户id:" + userId + ",工单id:" + ticketId);
UserSseEmitter emitter = new UserSseEmitter(from, userId, ticketId); UserSseEmitter emitter = new UserSseEmitter(from, userId, ticketId);
log.info(from + "SSE连接:用户id:" + userId + ",工单id:" + ticketId + ",连接id:" + emitter.getId());
emitter.startHeartbeat(taskScheduler); emitter.startHeartbeat(taskScheduler);
SSE_EMITTERS.add(emitter); SSE_EMITTERS.add(emitter);
emitter.onError((ex) -> { emitter.onError((ex) -> {
remove(emitter); remove(emitter);
log.error("SSE异常({}):{}", ex.getMessage(), emitter.getLable()); log.error("SSE异常({}):{}", ex.getMessage(),emitter.getUser());
}); });
emitter.onTimeout(() -> { emitter.onTimeout(() -> {
remove(emitter); remove(emitter);
log.error("SSE超时:" + userId); log.error("SSE超时:"+userId);
}); });
emitter.onCompletion(() -> { emitter.onCompletion(() -> {
remove(emitter); remove(emitter);
log.error("SSE完成:" + userId); log.error("SSE完成:"+userId);
}); });
try { try {
log.info("发送连接成功信息:" + emitter.getLable());
emitter.send(SseEmitter.event().data("已连接").reconnectTime(5000)); emitter.send(SseEmitter.event().data("已连接").reconnectTime(5000));
} catch (ClientAbortException e) { }catch (ClientAbortException e){
log.error("断开已连接:{}", e.getMessage()); log.error("客户端断开连接:{}", userId);
emitter.complete(); emitter.completeWithError(e);
} catch (IOException e) { }
catch (IOException e) {
log.error("sse发送数据出错:{}", e.getMessage()); log.error("sse发送数据出错:{}", e.getMessage());
emitter.complete(); emitter.completeWithError(e);
} }
return emitter; return emitter;
} }
@ -90,21 +90,19 @@ public class SSEManagerBase {
List<UserSseEmitter> emitters = SSE_EMITTERS.stream() List<UserSseEmitter> emitters = SSE_EMITTERS.stream()
.filter(s -> Objects.equals(s.getTicketId(), ticketId)) .filter(s -> Objects.equals(s.getTicketId(), ticketId))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtil.isEmpty(emitters)) { if (CollectionUtil.isEmpty(emitters)){
log.info(StrUtil.format(from + "没有用户连接工单:{}", ticketId)); log.info(StrUtil.format(from + "没有用户连接工单:{}", ticketId));
return; return;
} }
emitters.forEach(emitter -> { emitters.forEach(emitter -> {
try { try {
log.info("发送给用户:" + emitter.getLable());
emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData())); emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData()));
log.info("发送成功");
} catch (ClientAbortException e) { } catch (ClientAbortException e) {
log.error("发送失败,{}", e.getMessage()); log.error("客户端断开连接:{}", emitter.getUser());
emitter.complete(); emitter.completeWithError(e);
} catch (IOException e) { } catch (IOException e) {
log.error("发送失败,sse发送数据出错:{}", e.getMessage()); log.error("sse发送数据出错:{}", e.getMessage());
emitter.complete(); emitter.completeWithError(e);
} }
}); });
} }
@ -120,22 +118,21 @@ public class SSEManagerBase {
} }
emitters.forEach(emitter -> { emitters.forEach(emitter -> {
try { try {
log.info("发送给用户:" + emitter.getLable());
emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData())); emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData()));
log.info("发送成功"); log.info("发送成功");
} catch (ClientAbortException e) { } catch (ClientAbortException e) {
log.error("发送失败,{}", e.getMessage()); log.error("客户端断开连接:{}", emitter.getUser());
emitter.complete(); emitter.completeWithError(e);
} catch (IOException e) { }catch (IOException e) {
log.error("发送失败,sse发送数据出错:{}", e.getMessage()); log.error("sse发送数据出错:{}", e.getMessage());
emitter.complete(); emitter.completeWithError(e);
} }
}); });
} }
private void remove(UserSseEmitter emitter) { private void remove(UserSseEmitter emitter){
SSE_EMITTERS.remove(emitter); SSE_EMITTERS.remove(emitter);
emitter.complete(); emitter.complete();
emitter = null; emitter=null;
} }
} }

View File

@ -1,11 +1,8 @@
package com.nflg.mobilebroken.repository.mapper; package com.nflg.mobilebroken.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.mobilebroken.common.pojo.vo.AdminMenuButtonVO;
import com.nflg.mobilebroken.repository.entity.AdminMenuButton; import com.nflg.mobilebroken.repository.entity.AdminMenuButton;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
@ -16,5 +13,4 @@ import java.util.List;
*/ */
public interface AdminMenuButtonMapper extends BaseMapper<AdminMenuButton> { public interface AdminMenuButtonMapper extends BaseMapper<AdminMenuButton> {
List<AdminMenuButtonVO> getMenuButtonList(String url);
} }

View File

@ -8,8 +8,6 @@ import com.nflg.mobilebroken.common.pojo.request.SearchMenuButtonRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdminMenuButtonVO; import com.nflg.mobilebroken.common.pojo.vo.AdminMenuButtonVO;
import com.nflg.mobilebroken.repository.entity.AdminMenuButton; import com.nflg.mobilebroken.repository.entity.AdminMenuButton;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
@ -25,6 +23,4 @@ public interface IAdminMenuButtonService extends IService<AdminMenuButton> {
void addMenuButton(MenuButtonAddRequest request); void addMenuButton(MenuButtonAddRequest request);
void updateMenuButton(MenuButtonUpdateRequest request); void updateMenuButton(MenuButtonUpdateRequest request);
List<AdminMenuButtonVO> getMenuButtonList(String url);
} }

View File

@ -17,7 +17,7 @@ public interface ITicketCallService extends IService<TicketCall> {
boolean isInCall(Integer userId); boolean isInCall(Integer userId);
void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom); void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from);
boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject); boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject);
} }

View File

@ -29,6 +29,4 @@ public interface ITicketFavoritesService extends IService<TicketFavorites> {
void moveFavorites(FavoritesMoveRequest request); void moveFavorites(FavoritesMoveRequest request);
void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request); void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request);
FavoritesVO getTree(Integer userId, String from, Integer id);
} }

View File

@ -18,7 +18,6 @@ import com.nflg.mobilebroken.repository.service.IAdminMenuButtonService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@ -69,9 +68,4 @@ public class AdminMenuButtonServiceImpl extends ServiceImpl<AdminMenuButtonMappe
.setUpdateTime(LocalDateTime.now()); .setUpdateTime(LocalDateTime.now());
updateById(button); updateById(button);
} }
@Override
public List<AdminMenuButtonVO> getMenuButtonList(String url) {
return baseMapper.getMenuButtonList(url);
}
} }

View File

@ -17,7 +17,6 @@ import com.nflg.mobilebroken.common.pojo.vo.AdminUserSimpleVO;
import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO; import com.nflg.mobilebroken.common.pojo.vo.AdminUserVO;
import com.nflg.mobilebroken.common.pojo.vo.RoleSimpleVO; import com.nflg.mobilebroken.common.pojo.vo.RoleSimpleVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.*; import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.mapper.AdminUserMapper; import com.nflg.mobilebroken.repository.mapper.AdminUserMapper;
@ -65,22 +64,15 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
@Resource @Resource
private ITBaseDeviceTypeService deviceTypeService; private ITBaseDeviceTypeService deviceTypeService;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
@Override @Override
public AdminUser getUser(String userName, String password) { public AdminUser getUser(String userName, String password) {
AdminUser user = lambdaQuery() AdminUser user = lambdaQuery()
.eq(AdminUser::getLoginName, userName) .eq(AdminUser::getLoginName, userName)
.one(); .one();
if (Objects.isNull(user)) return null; if (Objects.nonNull(user) && PASSWORDENCODER.matches(password, user.getPassword())) {
if (PASSWORDENCODER.matches(password, user.getPassword())) {
return user; return user;
}else {
VUtils.trueThrowBusinessError(true)
.throwMessage(dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD, MultilingualUtil.getLanguage()));
return null;
} }
return null;
} }
@Override @Override

View File

@ -11,7 +11,10 @@ import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.common.pojo.PageData; import com.nflg.mobilebroken.common.pojo.PageData;
import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.request.*;
import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.pojo.vo.*;
import com.nflg.mobilebroken.common.util.*; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.AppUserUtil;
import com.nflg.mobilebroken.common.util.PageUtil;
import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.*; import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.mapper.AppUserMapper; import com.nflg.mobilebroken.repository.mapper.AppUserMapper;
import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.repository.service.*;
@ -66,18 +69,16 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
@Resource @Resource
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
@Resource
private IDictionaryItemTranslateService dictionaryItemTranslateService;
@Override @Override
public AppUser getUser(String userName, String password) { public AppUser getUser(String userName, String password) {
AppUser user = lambdaQuery() AppUser user = lambdaQuery()
.eq(AppUser::getIsDel, false) .eq(AppUser::getIsDel, false)
.eq(AppUser::getLoginName, userName) .eq(AppUser::getLoginName, userName)
.one(); .one();
VUtils.trueThrowBusinessError(Objects.isNull(user) || !PASSWORDENCODER.matches(password, user.getPassword())) if (Objects.nonNull(user) && PASSWORDENCODER.matches(password, user.getPassword())) {
.throwMessage(dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD, MultilingualUtil.getLanguage())); return user;
return user; }
return null;
} }
@Override @Override

View File

@ -41,7 +41,6 @@ public class TicketCallJoinServiceImpl extends ServiceImpl<TicketCallJoinMapper,
TicketCall ticketCall = ticketCallService.lambdaQuery() TicketCall ticketCall = ticketCallService.lambdaQuery()
.eq(TicketCall::getTicketId, ticketId) .eq(TicketCall::getTicketId, ticketId)
.ne(TicketCall::getState, 2) .ne(TicketCall::getState, 2)
.last("limit 1")
.one(); .one();
VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("加入失败,通话已结束"); VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("加入失败,通话已结束");
TicketCallJoin ticketCallJoin = lambdaQuery() TicketCallJoin ticketCallJoin = lambdaQuery()
@ -73,19 +72,18 @@ public class TicketCallJoinServiceImpl extends ServiceImpl<TicketCallJoinMapper,
.ne(TicketCallJoin::getState, 2) .ne(TicketCallJoin::getState, 2)
.eq(TicketCallJoin::getUserId, userId) .eq(TicketCallJoin::getUserId, userId)
.eq(TicketCallJoin::getFrom, from) .eq(TicketCallJoin::getFrom, from)
.last("limit 1")
.one(); .one();
boolean flag = false; boolean flag = false;
if (Objects.nonNull(ticketCallJoin)) { if (Objects.nonNull(ticketCallJoin)) {
ticketCallJoin.setState(2); ticketCallJoin.setState(2);
if (reject) { if (!reject) {
ticketCallJoin.setHangupTime(LocalDateTime.now()); ticketCallJoin.setHangupTime(LocalDateTime.now());
} }
updateById(ticketCallJoin); updateById(ticketCallJoin);
if (StrUtil.equals(from, Constant.FROM_APP)) { if (StrUtil.equals(from, Constant.FROM_APP)) {
lambdaUpdate() lambdaUpdate()
.set(TicketCallJoin::getState, 2) .set(TicketCallJoin::getState, 2)
.set(reject, TicketCallJoin::getHangupTime, LocalDateTime.now()) .set(!reject, TicketCallJoin::getHangupTime, LocalDateTime.now())
.eq(TicketCallJoin::getCallId, callId) .eq(TicketCallJoin::getCallId, callId)
.ne(TicketCallJoin::getFrom, from) .ne(TicketCallJoin::getFrom, from)
.update(); .update();
@ -96,7 +94,7 @@ public class TicketCallJoinServiceImpl extends ServiceImpl<TicketCallJoinMapper,
.exists()){ .exists()){
ticketCallService.lambdaUpdate() ticketCallService.lambdaUpdate()
.set(TicketCall::getState, 2) .set(TicketCall::getState, 2)
.set(reject,TicketCall::getHangupTime, LocalDateTime.now()) .set(!reject,TicketCall::getHangupTime, LocalDateTime.now())
.eq(TicketCall::getId, callId) .eq(TicketCall::getId, callId)
.update(); .update();
flag = true; flag = true;

View File

@ -41,17 +41,17 @@ public class TicketCallServiceImpl extends ServiceImpl<TicketCallMapper, TicketC
@Transactional @Transactional
@Override @Override
public void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom) { public void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from) {
TicketCall ticketCall = new TicketCall() TicketCall ticketCall = new TicketCall()
.setTicketId(ticketId) .setTicketId(ticketId)
.setCallerUserId(callerUserId) .setCallerUserId(callerUserId)
.setState(0) .setState(0)
.setFrom(callerUserFrom) .setFrom(from)
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(ticketCall); save(ticketCall);
ticketCallJoinService.save(new TicketCallJoin() ticketCallJoinService.save(new TicketCallJoin()
.setCallId(ticketCall.getId()) .setCallId(ticketCall.getId())
.setFrom(calledUserFrom) .setFrom(StrUtil.equals(from, Constant.FROM_APP) ? Constant.FROM_ADMIN : Constant.FROM_APP)
.setUserId(calledUserId) .setUserId(calledUserId)
.setState(0) .setState(0)
.setCreateTime(LocalDateTime.now()) .setCreateTime(LocalDateTime.now())
@ -63,7 +63,6 @@ public class TicketCallServiceImpl extends ServiceImpl<TicketCallMapper, TicketC
TicketCall ticketCall = lambdaQuery() TicketCall ticketCall = lambdaQuery()
.eq(TicketCall::getTicketId, ticketId) .eq(TicketCall::getTicketId, ticketId)
.ne(TicketCall::getState, 2) .ne(TicketCall::getState, 2)
.last("limit 1")
.one(); .one();
boolean flag = false; boolean flag = false;
if (Objects.nonNull(ticketCall)){ if (Objects.nonNull(ticketCall)){
@ -71,7 +70,7 @@ public class TicketCallServiceImpl extends ServiceImpl<TicketCallMapper, TicketC
|| ticketCallJoinService.allIsHangUp(ticketCall.getId())){ || ticketCallJoinService.allIsHangUp(ticketCall.getId())){
ticketCall.setState(2); ticketCall.setState(2);
ticketCallJoinService.hangUpAll(ticketCall.getId()); ticketCallJoinService.hangUpAll(ticketCall.getId());
if (reject) { if (!reject) {
ticketCall.setHangupTime(LocalDateTime.now()); ticketCall.setHangupTime(LocalDateTime.now());
} }
updateById(ticketCall); updateById(ticketCall);

View File

@ -19,7 +19,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -103,26 +102,4 @@ public class TicketFavoritesServiceImpl extends ServiceImpl<TicketFavoritesMappe
.eq(TicketFollow::getFrom, StrUtil.equals(from, "app")?0:1) .eq(TicketFollow::getFrom, StrUtil.equals(from, "app")?0:1)
.update(); .update();
} }
@Override
public FavoritesVO getTree(Integer userId, String from, Integer id) {
TicketFavorites favorites = Objects.equals(id, 0) ? new TicketFavorites().setId(0).setName("收藏夹") : lambdaQuery().eq(TicketFavorites::getId, id).one();
FavoritesVO vo = new FavoritesVO().setId(favorites.getId()).setName(favorites.getName());
getChildren(userId, vo, from);
return vo;
}
private void getChildren(Integer userId, FavoritesVO vo, String from) {
List<FavoritesVO> favorites = lambdaQuery()
.eq(TicketFavorites::getParentId, vo.getId())
.eq(TicketFavorites::getUserPlatform, from)
.eq(TicketFavorites::getCreateBy, userId)
.orderByAsc(TicketFavorites::getOrderNum)
.list()
.stream()
.map(f -> new FavoritesVO().setId(f.getId()).setName(f.getName()))
.collect(Collectors.toList());
vo.setChildren(favorites);
favorites.forEach(f -> getChildren(userId, f, from));
}
} }

View File

@ -2,10 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminMenuButtonMapper"> <mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminMenuButtonMapper">
<select id="getMenuButtonList" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminMenuButtonVO">
SELECT amb.*
FROM admin_menu am
INNER JOIN admin_menu_button amb ON am.id=amb.menu_id
WHERE am.url=#{url}
</select>
</mapper> </mapper>

View File

@ -39,7 +39,7 @@
<where> <where>
t.state!=4 t.state!=4
<if test="!request.ticketManager"> <if test="!request.ticketManager">
AND (FIND_IN_SET(#{userId},t.handle)>0 OR fun_inAduit(t.id,#{userId})=1 OR (t.user_platform='admin' AND t.user_id=#{userId})) AND (FIND_IN_SET(#{userId},t.handle)>0 OR fun_inAduit(t.id,#{userId})=1)
</if> </if>
<if test="request.state!=null"> <if test="request.state!=null">
AND t.state=#{request.state} AND t.state=#{request.state}
@ -150,7 +150,7 @@
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType' ,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' ,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.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
,t.handle_name AS 'handle',t.description ,t.handle_name AS 'handle'
FROM ticket t FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.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' ,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' ,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.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
,t.handle_name AS 'handle',t.description ,t.handle_name AS 'handle'
FROM ticket t FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.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' ,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' ,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.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
,t.handle_name AS 'handle',t.description ,t.handle_name AS 'handle'
FROM ticket t FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.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' ,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' ,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' ,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.description ,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle'
FROM ticket t FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.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' ,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' ,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.solve_time AS 'closeTime',auh.user_name AS 'currentHandle',dt.cqm_person_name AS 'cqms'
,t.handle_name AS 'handle',t.description ,t.handle_name AS 'handle'
FROM ticket t FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id LEFT JOIN admin_user au ON t.user_id=au.id

View File

@ -24,10 +24,9 @@
<module>nflg-mobilebroken-product</module> <module>nflg-mobilebroken-product</module>
</modules> </modules>
<properties> <properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>11</java.version>
<spring-boot.version>2.3.12.RELEASE</spring-boot.version> <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version> <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version> <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>