Compare commits
11 Commits
e2596c36db
...
7d417a33d5
| Author | SHA1 | Date |
|---|---|---|
|
|
7d417a33d5 | |
|
|
7c1281a689 | |
|
|
e0c62ae8f2 | |
|
|
a81d362c96 | |
|
|
90d6a3c78f | |
|
|
8660fcd715 | |
|
|
5b9b277251 | |
|
|
9e911460b0 | |
|
|
ad50d8cc15 | |
|
|
5b74e604ab | |
|
|
63e1581a5e |
|
|
@ -17,6 +17,7 @@ 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;
|
||||||
|
|
||||||
|
|
@ -175,6 +176,16 @@ 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 接口列表
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,16 @@ 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 父级id,0为根节点
|
||||||
|
* @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 请求信息
|
||||||
|
|
@ -629,6 +639,7 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
@ -734,6 +745,9 @@ 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("你无权发送消息");
|
||||||
|
|
@ -1235,13 +1249,33 @@ 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();
|
||||||
VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId))
|
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
|
||||||
.throwMessage("不是工单主负责人无权限呼叫");
|
VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId))
|
||||||
|
.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("对方正在通话中");
|
||||||
AdminUser adminUser = adminUserService.getById(handlerUserId);
|
boolean userIdCreate = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId());
|
||||||
|
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-" + handlerUserId)
|
.setSenderId("admin-uid-" + sendUserId)
|
||||||
.setReceiverId("app-uid-" + ticket.getUserId())
|
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
|
||||||
.setSendData(new UniPushMessageBody()
|
.setSendData(new UniPushMessageBody()
|
||||||
.setTitle("视频通话")
|
.setTitle("视频通话")
|
||||||
.setContent(adminUser.getUserName() + "请求与您视频通话")
|
.setContent(adminUser.getUserName() + "请求与您视频通话")
|
||||||
|
|
@ -1255,8 +1289,11 @@ public class TicketController extends ControllerBase {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
|
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
|
||||||
ticketCallService.add(ticketId, handlerUserId, ticket.getUserId(), Constant.FROM_ADMIN);
|
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
|
||||||
|
} else {
|
||||||
|
ssePushService.sendTicketCallToAdmin(adminUser, receiveUserId, ticketId);
|
||||||
|
}
|
||||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName());
|
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName());
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
@ -1315,7 +1352,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("视频通话")
|
||||||
|
|
@ -1340,7 +1377,9 @@ 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());
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ 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;
|
||||||
|
|
@ -23,6 +24,7 @@ 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 {
|
||||||
|
|
@ -62,7 +64,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();
|
||||||
});
|
});
|
||||||
|
|
@ -80,7 +82,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 {
|
||||||
|
|
@ -94,7 +96,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)
|
||||||
|
|
@ -110,7 +112,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)
|
||||||
|
|
|
||||||
|
|
@ -9,15 +9,11 @@ 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.util.AppUserUtil;
|
import com.nflg.mobilebroken.common.pojo.vo.RoleVO;
|
||||||
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
import com.nflg.mobilebroken.common.util.*;
|
||||||
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.IAdminRoleService;
|
import com.nflg.mobilebroken.repository.service.*;
|
||||||
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;
|
||||||
|
|
@ -49,6 +45,10 @@ public class AppController extends ControllerBase {
|
||||||
@Resource
|
@Resource
|
||||||
private IAdminRoleService adminRoleService;
|
private IAdminRoleService adminRoleService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IAdminUserRoleMapService adminUserRoleMapService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户端登录
|
* 用户端登录
|
||||||
* @param userName 用户名
|
* @param userName 用户名
|
||||||
|
|
@ -57,8 +57,34 @@ 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) {
|
||||||
AppUser user=appUserService.getUser(userName,password);
|
AdminUser adminUser =adminUserService.getUser(userName,password);
|
||||||
if (Objects.nonNull(user)) {
|
if (Objects.nonNull(adminUser)){
|
||||||
|
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()))
|
||||||
|
|
@ -68,7 +94,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", "app")
|
.setExtra("from", Constant.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()))
|
||||||
|
|
@ -81,26 +107,7 @@ public class AppController extends ControllerBase {
|
||||||
.setToken(tokenInfo.getTokenValue())
|
.setToken(tokenInfo.getTokenValue())
|
||||||
.setExpire(tokenInfo.getTokenTimeout())
|
.setExpire(tokenInfo.getTokenTimeout())
|
||||||
.setLanguageCode(user.getLanguageCode())
|
.setLanguageCode(user.getLanguageCode())
|
||||||
.setPlatform("app"));
|
.setPlatform(Constant.FROM_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"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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("app-uid-" + ticket.getUserId())
|
.setSenderId(ticket.getUserPlatform()+"-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(), handlerUserId, Constant.FROM_APP);
|
ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN);
|
||||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName());
|
ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName());
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
@ -538,13 +538,17 @@ 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("app-uid-" + AppUserUtil.getUserId())
|
.setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId())
|
||||||
.setReceiverId("app-uid-" + AppUserUtil.getUserId())
|
.setReceiverId("admin-uid-" + handlerUserId)
|
||||||
.setSendData(new UniPushMessageBody()
|
.setSendData(new UniPushMessageBody()
|
||||||
.setTitle("视频通话")
|
.setTitle("视频通话")
|
||||||
.setContent("您已加入别的通话中")
|
.setContent("您已加入别的通话中")
|
||||||
|
|
@ -572,7 +576,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("app-uid-" + appUser.getId())
|
.setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId())
|
||||||
.setReceiverId("admin-uid-" + handlerId)
|
.setReceiverId("admin-uid-" + handlerId)
|
||||||
.setSendData(new UniPushMessageBody()
|
.setSendData(new UniPushMessageBody()
|
||||||
.setTitle("挂断视频通话")
|
.setTitle("挂断视频通话")
|
||||||
|
|
@ -591,8 +595,9 @@ 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("app-uid-" + appUser.getId())
|
.setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId())
|
||||||
.setReceiverId("admin-uid-" + request.getFromUserId())
|
.setReceiverId("admin-uid-" + request.getFromUserId())
|
||||||
.setSendData(new UniPushMessageBody()
|
.setSendData(new UniPushMessageBody()
|
||||||
.setTitle("拒绝视频通话")
|
.setTitle("拒绝视频通话")
|
||||||
|
|
|
||||||
|
|
@ -209,4 +209,10 @@ public class AdminTicketVO {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 问题描述
|
||||||
|
*/
|
||||||
|
@IgnoreExport
|
||||||
|
private String description;
|
||||||
}
|
}
|
||||||
|
|
@ -11,6 +11,11 @@ public class AppLoginVO {
|
||||||
|
|
||||||
private String token;
|
private String token;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理员端token
|
||||||
|
*/
|
||||||
|
private String adminToken;
|
||||||
|
|
||||||
private Long expire;
|
private Long expire;
|
||||||
|
|
||||||
//语言编码
|
//语言编码
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,11 @@ public class TicketInfoVO {
|
||||||
//创建人头像
|
//创建人头像
|
||||||
private String createUserAvatar;
|
private String createUserAvatar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户来源平台,app或者admin
|
||||||
|
*/
|
||||||
|
private String userPlatform;
|
||||||
|
|
||||||
//提交时间
|
//提交时间
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
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;
|
||||||
|
|
@ -22,6 +23,8 @@ 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(){
|
||||||
|
|
@ -34,8 +37,8 @@ public class UserSseEmitter extends SseEmitter {
|
||||||
this.ticketId = ticketId;
|
this.ticketId = ticketId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUser(){
|
public String getLable() {
|
||||||
return from + "-" + userId;
|
return from + "-" + userId + ",连接id:" + id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startHeartbeat(TaskScheduler taskScheduler) {
|
public void startHeartbeat(TaskScheduler taskScheduler) {
|
||||||
|
|
@ -44,7 +47,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数据出错({}):{}", getUser(),e.getMessage());
|
log.error("sse发送ping数据出错({}):{}", getLable(),e.getMessage());
|
||||||
completeWithError(e);
|
completeWithError(e);
|
||||||
}
|
}
|
||||||
}, 30_000);
|
}, 30_000);
|
||||||
|
|
|
||||||
|
|
@ -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.getUser());
|
log.error("SSE异常({}):{}", ex.getMessage(), emitter.getLable());
|
||||||
});
|
});
|
||||||
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("客户端断开连接:{}", userId);
|
log.error("断开已连接:{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
}
|
} catch (IOException e) {
|
||||||
catch (IOException e) {
|
|
||||||
log.error("sse发送数据出错:{}", e.getMessage());
|
log.error("sse发送数据出错:{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
}
|
}
|
||||||
return emitter;
|
return emitter;
|
||||||
}
|
}
|
||||||
|
|
@ -90,19 +90,21 @@ 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("客户端断开连接:{}", emitter.getUser());
|
log.error("发送失败,{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("sse发送数据出错:{}", e.getMessage());
|
log.error("发送失败,sse发送数据出错:{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -118,21 +120,22 @@ 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("客户端断开连接:{}", emitter.getUser());
|
log.error("发送失败,{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
}catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("sse发送数据出错:{}", e.getMessage());
|
log.error("发送失败,sse发送数据出错:{}", e.getMessage());
|
||||||
emitter.completeWithError(e);
|
emitter.complete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
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 接口
|
||||||
|
|
@ -13,4 +16,5 @@ import com.nflg.mobilebroken.repository.entity.AdminMenuButton;
|
||||||
*/
|
*/
|
||||||
public interface AdminMenuButtonMapper extends BaseMapper<AdminMenuButton> {
|
public interface AdminMenuButtonMapper extends BaseMapper<AdminMenuButton> {
|
||||||
|
|
||||||
|
List<AdminMenuButtonVO> getMenuButtonList(String url);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ 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>
|
||||||
* 服务类
|
* 服务类
|
||||||
|
|
@ -23,4 +25,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public interface ITicketCallService extends IService<TicketCall> {
|
||||||
|
|
||||||
boolean isInCall(Integer userId);
|
boolean isInCall(Integer userId);
|
||||||
|
|
||||||
void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from);
|
void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom);
|
||||||
|
|
||||||
boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject);
|
boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,4 +29,6 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ 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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -68,4 +69,9 @@ 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ 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;
|
||||||
|
|
@ -64,15 +65,22 @@ 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.nonNull(user) && PASSWORDENCODER.matches(password, user.getPassword())) {
|
if (Objects.isNull(user)) return null;
|
||||||
|
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
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,7 @@ 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.AdminUserUtil;
|
import com.nflg.mobilebroken.common.util.*;
|
||||||
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.*;
|
||||||
|
|
@ -69,16 +66,18 @@ 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();
|
||||||
if (Objects.nonNull(user) && PASSWORDENCODER.matches(password, user.getPassword())) {
|
VUtils.trueThrowBusinessError(Objects.isNull(user) || !PASSWORDENCODER.matches(password, user.getPassword()))
|
||||||
return user;
|
.throwMessage(dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_SYSTEMERROR, Constant.DICTIONARY_ITEM_INCORRECTUSERNAMEORPASSWORD, MultilingualUtil.getLanguage()));
|
||||||
}
|
return user;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ 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()
|
||||||
|
|
@ -72,18 +73,19 @@ 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();
|
||||||
|
|
@ -94,7 +96,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;
|
||||||
|
|
|
||||||
|
|
@ -41,17 +41,17 @@ public class TicketCallServiceImpl extends ServiceImpl<TicketCallMapper, TicketC
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from) {
|
public void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom) {
|
||||||
TicketCall ticketCall = new TicketCall()
|
TicketCall ticketCall = new TicketCall()
|
||||||
.setTicketId(ticketId)
|
.setTicketId(ticketId)
|
||||||
.setCallerUserId(callerUserId)
|
.setCallerUserId(callerUserId)
|
||||||
.setState(0)
|
.setState(0)
|
||||||
.setFrom(from)
|
.setFrom(callerUserFrom)
|
||||||
.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(StrUtil.equals(from, Constant.FROM_APP) ? Constant.FROM_ADMIN : Constant.FROM_APP)
|
.setFrom(calledUserFrom)
|
||||||
.setUserId(calledUserId)
|
.setUserId(calledUserId)
|
||||||
.setState(0)
|
.setState(0)
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
|
|
@ -63,6 +63,7 @@ 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)){
|
||||||
|
|
@ -70,7 +71,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);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ 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;
|
||||||
|
|
||||||
|
|
@ -102,4 +103,26 @@ 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,10 @@
|
||||||
<!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>
|
||||||
|
|
|
||||||
|
|
@ -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)
|
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}))
|
||||||
</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.handle_name AS 'handle',t.description
|
||||||
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.handle_name AS 'handle',t.description
|
||||||
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.handle_name AS 'handle',t.description
|
||||||
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'
|
,dt.cqm_person_name AS 'cqms',t.handle_name AS 'handle',t.description
|
||||||
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.handle_name AS 'handle',t.description
|
||||||
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
|
||||||
|
|
|
||||||
3
pom.xml
3
pom.xml
|
|
@ -24,9 +24,10 @@
|
||||||
<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>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue