feat: 一些调整

This commit is contained in:
曹鹏飞 2025-02-24 23:42:41 +08:00
parent ed316c7925
commit 3a3220d7d3
17 changed files with 145 additions and 56 deletions

View File

@ -1,8 +1,6 @@
package com.nflg.mobilebroken.admin.controller; package com.nflg.mobilebroken.admin.controller;
import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.starter.service.impl.APPSSEManagerService; import com.nflg.mobilebroken.starter.service.impl.APPSSEManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -13,7 +11,6 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
@RestController @RestController
@Slf4j @Slf4j
@ -33,13 +30,13 @@ public class SSEController extends ControllerBase {
@ApiMark(moduleName = "连接", apiName = "SSE", isPublic = true) @ApiMark(moduleName = "连接", apiName = "SSE", isPublic = true)
public SseEmitter connect(@RequestParam String userId) { public SseEmitter connect(@RequestParam String userId) {
SseEmitter sse = sseManagerService.connect(Integer.valueOf(userId)); SseEmitter sse = sseManagerService.connect(Integer.valueOf(userId));
try { // try {
sse.send("您已连接"); // sse.send("您已连接");
} catch (IOException e) { // } catch (IOException e) {
log.error("sse发送数据出错", e); // log.error("sse发送数据出错", e);
sse.complete(); // sse.complete();
throw new NflgException(STATE.BusinessError, "sse发送数据出错"); // throw new NflgException(STATE.BusinessError, "sse发送数据出错");
} // }
return sse; return sse;
} }
} }

View File

@ -511,7 +511,7 @@ public class TicketController extends ControllerBase {
vo.setMessages(messageVOS); vo.setMessages(messageVOS);
String key="chatMessage:readed:"+ticketId+":admin:"+AdminUserUtil.getUserId(); String key="chatMessage:readed:"+ticketId+":admin:"+AdminUserUtil.getUserId();
Set<String> readeds=redisTemplate.opsForSet().members(key); Set<String> readeds=redisTemplate.opsForSet().members(key);
Set<String> notReadeds=new HashSet<>(); Set<String> notReadeds=new LinkedHashSet<>();
if (CollectionUtil.isEmpty(readeds)){ if (CollectionUtil.isEmpty(readeds)){
notReadeds=messageVOS.stream() notReadeds=messageVOS.stream()
.filter(m->!Objects.equals(m.getSenderId(),AdminUserUtil.getUserId())) .filter(m->!Objects.equals(m.getSenderId(),AdminUserUtil.getUserId()))
@ -529,7 +529,7 @@ public class TicketController extends ControllerBase {
if (CollectionUtil.isNotEmpty(notReadeds)) { if (CollectionUtil.isNotEmpty(notReadeds)) {
redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new)); redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
vo.setNotReadCount(notReadeds.size()); vo.setNotReadCount(notReadeds.size());
vo.setFirstMessageId(notReadeds.stream().findFirst().get()); vo.setFirstMessageId(notReadeds.iterator().next());
} }
return ApiResult.success(vo); return ApiResult.success(vo);
} }

View File

@ -54,7 +54,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
public void send(){ public void send(){
sendUserMessage(); sendUserMessage();
sendEmail(); // sendEmail();
} }
private void sendUserMessage(){ private void sendUserMessage(){

View File

@ -15,6 +15,7 @@ import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.service.*; import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.starter.service.EmailService; import com.nflg.mobilebroken.starter.service.EmailService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -34,6 +35,9 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class TicketScheduledTasks { public class TicketScheduledTasks {
@Value("${email.activate.app.website}")
private String websiteUrl;
@Resource @Resource
private ITicketService ticketService; private ITicketService ticketService;
@ -82,12 +86,10 @@ public class TicketScheduledTasks {
List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds); List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE); String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE);
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE) String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE)
.replace("${no}", ticket.getNo()) .replace("${websiteUrl}", websiteUrl)
.replace("${title}", ticket.getTitle()) .replace("${title}", ticket.getTitle())
.replace("${createUser}", createUser.getUserName()) .replace("${createUser}", createUser.getUserName())
.replace("${handleUser}", StrUtil.join(",", adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList()))) .replace("${url}", websiteUrl+"/#/workOrder/workOrderDetail?id="+ticket.getId());
.replace("${createTime}", toTimeString(ticket.getCreateTime()))
.replace("${msg}", subject);
try { try {
sendEamilForAdminUser(adminUsers, subject, content); sendEamilForAdminUser(adminUsers, subject, content);
} catch (Exception e) { } catch (Exception e) {

View File

@ -1,7 +1,5 @@
package com.nflg.mobilebroken.cfs.controller; package com.nflg.mobilebroken.cfs.controller;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.exception.NflgException;
import com.nflg.mobilebroken.starter.service.impl.AdminSSEManagerService; import com.nflg.mobilebroken.starter.service.impl.AdminSSEManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -12,7 +10,6 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException;
/** /**
* sse相关接口 * sse相关接口
@ -35,13 +32,13 @@ public class SSEController extends ControllerBase {
@GetMapping(value = "connect",produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "connect",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter connect(@RequestParam Integer userId) { public SseEmitter connect(@RequestParam Integer userId) {
SseEmitter sse = adminSSEManagerService.connect(userId); SseEmitter sse = adminSSEManagerService.connect(userId);
try { // try {
sse.send("您已连接"); // sse.send("您已连接");
} catch (IOException e) { // } catch (IOException e) {
log.error("sse发送数据出错",e); // log.error("sse发送数据出错",e);
sse.complete(); // sse.complete();
throw new NflgException(STATE.BusinessError,"sse发送数据出错"); // throw new NflgException(STATE.BusinessError,"sse发送数据出错");
} // }
return sse; return sse;
} }
} }

View File

@ -286,7 +286,7 @@ public class TiketController extends ControllerBase {
vo.setMessages(messageVOS); vo.setMessages(messageVOS);
String key="chatMessage:readed:"+ticketId+":app:"+AppUserUtil.getUserId(); String key="chatMessage:readed:"+ticketId+":app:"+AppUserUtil.getUserId();
Set<String> readeds=redisTemplate.opsForSet().members(key); Set<String> readeds=redisTemplate.opsForSet().members(key);
Set<String> notReadeds=new HashSet<>(); Set<String> notReadeds=new LinkedHashSet<>();
if (CollectionUtil.isEmpty(readeds)){ if (CollectionUtil.isEmpty(readeds)){
notReadeds=messageVOS.stream() notReadeds=messageVOS.stream()
.filter(m->!Objects.equals(m.getSenderId(),AppUserUtil.getUserId())) .filter(m->!Objects.equals(m.getSenderId(),AppUserUtil.getUserId()))
@ -304,7 +304,7 @@ public class TiketController extends ControllerBase {
if (CollectionUtil.isNotEmpty(notReadeds)) { if (CollectionUtil.isNotEmpty(notReadeds)) {
redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new)); redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
vo.setNotReadCount(notReadeds.size()); vo.setNotReadCount(notReadeds.size());
vo.setFirstMessageId(notReadeds.stream().findFirst().get()); vo.setFirstMessageId(notReadeds.iterator().next());
} }
return ApiResult.success(vo); return ApiResult.success(vo);
} }

View File

@ -185,7 +185,7 @@ public class UserController extends ControllerBase {
if (CollectionUtil.isNotEmpty(adminUsers)){ if (CollectionUtil.isNotEmpty(adminUsers)){
adminUsers.forEach(c -> adminMessageService.add( adminUsers.forEach(c -> adminMessageService.add(
new AdminMessage() new AdminMessage()
.setNo(applyfor.getUserEmail()) .setNo(request.getEmail())
.setUserId(c.getId()) .setUserId(c.getId())
.setSourceId(applyfor.getId()) .setSourceId(applyfor.getId())
.setSource(1) .setSource(1)

View File

@ -95,9 +95,9 @@ public class AppUserApplyfor implements Serializable {
private String salesUserName; private String salesUserName;
/** /**
* 创建人 * 创建人id
*/ */
private String createBy; private Integer createBy;
/** /**
* 创建时间 * 创建时间

View File

@ -89,7 +89,7 @@ public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole
if (!Objects.equals(0,menu.getParentId())){ if (!Objects.equals(0,menu.getParentId())){
AdminMenu mp=menuService.getById(menu.getParentId()); AdminMenu mp=menuService.getById(menu.getParentId());
if (datas.stream().noneMatch(d->Objects.equals(d.getId(),mp.getId()))){ if (datas.stream().noneMatch(d->Objects.equals(d.getId(),mp.getId()))){
MenuVO m=new MenuVO().setId(mp.getId()).setName(mp.getName()).setUrl(mp.getUrl()).setComponent(mp.getComponent()).setParentId(mp.getParentId()); MenuVO m=new MenuVO().setId(mp.getId()).setName(mp.getName()).setShow(mp.getShow()).setUrl(mp.getUrl()).setComponent(mp.getComponent()).setParentId(mp.getParentId());
datas.add(m); datas.add(m);
} }
} }

View File

@ -79,7 +79,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setCompanyId(request.getCompanyId()) .setCompanyId(request.getCompanyId())
.setTitleId(request.getTitleId()) .setTitleId(request.getTitleId())
.setType(AppUserApplyforType.ADD.getState().byteValue()) .setType(AppUserApplyforType.ADD.getState().byteValue())
.setCreateBy(AppUserUtil.getUserName()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
return applyfor; return applyfor;
@ -87,12 +87,17 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
@Override @Override
public AppUserApplyfor addEnable(EnableRequest request) { public AppUserApplyfor addEnable(EnableRequest request) {
VUtils.trueThrowBusinessError(lambdaQuery()
.eq(AppUserApplyfor::getUserId, request.getId())
.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.exists())
.throwMessage("正在审批中,请勿重复申请");
AppUserApplyfor applyfor = new AppUserApplyfor() AppUserApplyfor applyfor = new AppUserApplyfor()
.setUserId(request.getId()) .setUserId(request.getId())
.setReason(request.getReason()) .setReason(request.getReason())
.setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()) .setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.setType(AppUserApplyforType.ENABLE.getState().byteValue()) .setType(AppUserApplyforType.ENABLE.getState().byteValue())
.setCreateBy(AppUserUtil.getUserName()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
return applyfor; return applyfor;
@ -100,12 +105,19 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
@Override @Override
public AppUserApplyfor applyForExtension(ApplyForExtensionRequest request) { public AppUserApplyfor applyForExtension(ApplyForExtensionRequest request) {
VUtils.trueThrowBusinessError(lambdaQuery()
.eq(AppUserApplyfor::getUserId, request.getUserId())
.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.exists())
.throwMessage("正在审批中,请勿重复申请");
AppUser appUser=appUserService.getById(request.getUserId());
AppUserApplyfor applyfor = new AppUserApplyfor() AppUserApplyfor applyfor = new AppUserApplyfor()
.setUserId(request.getUserId()) .setUserId(request.getUserId())
.setReason(request.getReason()) .setReason(request.getReason())
.setUserEmail(appUser.getEmail())
.setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()) .setState(AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.setType(AppUserApplyforType.EXTENSION.getState().byteValue()) .setType(AppUserApplyforType.EXTENSION.getState().byteValue())
.setCreateBy(AppUserUtil.getUserName()) .setCreateBy(AppUserUtil.getUserId())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
save(applyfor); save(applyfor);
return applyfor; return applyfor;
@ -115,6 +127,8 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
public AppUserApplyforVO getAppUserApplyfor(Integer id) { public AppUserApplyforVO getAppUserApplyfor(Integer id) {
AppUserApplyfor applyfor = getById(id); AppUserApplyfor applyfor = getById(id);
VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("审批信息不存在"); VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("审批信息不存在");
VUtils.trueThrowBusinessError(!Objects.equals(applyfor.getState(), AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()))
.throwMessage("已经审批过了");
AppUserApplyforVO vo = new AppUserApplyforVO(); AppUserApplyforVO vo = new AppUserApplyforVO();
AppUserApplyforInfoVO applyforInfo=new AppUserApplyforInfoVO() AppUserApplyforInfoVO applyforInfo=new AppUserApplyforInfoVO()
.setType(applyfor.getType()) .setType(applyfor.getType())
@ -125,6 +139,10 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setReason(applyfor.getReason()) .setReason(applyfor.getReason())
.setCreateTime(applyfor.getCreateTime()); .setCreateTime(applyfor.getCreateTime());
AppUser appUser; AppUser appUser;
String companyId= "";
if (Objects.nonNull(applyfor.getCompanyId())){
companyId= String.valueOf(applyfor.getCompanyId());
}
if (Objects.nonNull(applyfor.getUserId())) { if (Objects.nonNull(applyfor.getUserId())) {
appUser = appUserService.getById(applyfor.getUserId()); appUser = appUserService.getById(applyfor.getUserId());
if (Objects.isNull(applyfor.getAreaId())) { if (Objects.isNull(applyfor.getAreaId())) {
@ -133,13 +151,17 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
if (Objects.isNull(applyfor.getTitleId())) { if (Objects.isNull(applyfor.getTitleId())) {
applyfor.setTitleId(appUser.getTitleId()); applyfor.setTitleId(appUser.getTitleId());
} }
List<TBaseCustomer> customers =customerService.listByIds(Arrays.stream(appUser.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())); if (StrUtil.isBlank(companyId)){
applyforInfo companyId= appUser.getCompanyId();
.setCompanyName(StrUtil.join(",",customers.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList()))) }
.setPhone(appUser.getPhone()) applyforInfo.setPhone(appUser.getPhone())
.setUserName(appUser.getName()) .setUserName(appUser.getName())
.setEmail(appUser.getEmail()); .setEmail(appUser.getEmail());
} }
if (StrUtil.isNotBlank(companyId)) {
List<TBaseCustomer> customers =customerService.listByIds(Arrays.stream(companyId.split(",")).map(Integer::parseInt).collect(Collectors.toList()));
applyforInfo.setCompanyName(StrUtil.join(",",customers.stream().map(TBaseCustomer::getAgencyCompanyName).collect(Collectors.toList())));
}
if (Objects.nonNull(applyfor.getAreaId())) { if (Objects.nonNull(applyfor.getAreaId())) {
AppArea area = appAreaService.getById(applyfor.getAreaId()); AppArea area = appAreaService.getById(applyfor.getAreaId());
applyforInfo.setAreaName(area.getName()); applyforInfo.setAreaName(area.getName());
@ -157,6 +179,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setState(1) .setState(1)
.setTitle(Objects.isNull(appUser.getTitleId()) ? "" : positionService.getById(appUser.getTitleId()).getPositionName()) .setTitle(Objects.isNull(appUser.getTitleId()) ? "" : positionService.getById(appUser.getTitleId()).getPositionName())
.setExpireTime(appUser.getExpireTime()) .setExpireTime(appUser.getExpireTime())
.setLoginName(appUser.getLoginName())
.setEmail(appUser.getEmail()) .setEmail(appUser.getEmail())
.setName(appUser.getName()) .setName(appUser.getName())
.setPrimary(appUser.getIsPrimary())); .setPrimary(appUser.getIsPrimary()));
@ -168,6 +191,8 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
public void approveAppUserApplyfor(ApproveAppUserApplyforRequest request) { public void approveAppUserApplyfor(ApproveAppUserApplyforRequest request) {
AppUserApplyfor applyfor = getById(request.getId()); AppUserApplyfor applyfor = getById(request.getId());
VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("审批信息不存在"); VUtils.trueThrowBusinessError(Objects.isNull(applyfor)).throwMessage("审批信息不存在");
VUtils.trueThrowBusinessError(!Objects.equals(applyfor.getState(), AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()))
.throwMessage("已经审批过了");
if (request.getPass()) { if (request.getPass()) {
if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) { if (applyfor.getType() == AppUserApplyforType.ADD.getState().byteValue()) {
//新增账号 //新增账号
@ -184,7 +209,7 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
.setCompanyId(String.valueOf(applyfor.getCompanyId())) .setCompanyId(String.valueOf(applyfor.getCompanyId()))
.setTitleId(applyfor.getTitleId()) .setTitleId(applyfor.getTitleId())
.setState(UserState.ToBeActivated.getState()) .setState(UserState.ToBeActivated.getState())
.setCreateBy(applyfor.getCreateBy()) .setCreateBy(appUser.getName())
.setCreateTime(LocalDateTime.now()) .setCreateTime(LocalDateTime.now())
.setExpireTime(appUser.getExpireTime()) .setExpireTime(appUser.getExpireTime())
.setSalesUserName(appUser.getSalesUserName()); .setSalesUserName(appUser.getSalesUserName());
@ -192,15 +217,17 @@ public class AppUserApplyforServiceImpl extends ServiceImpl<AppUserApplyforMappe
} else if (applyfor.getType() == AppUserApplyforType.ENABLE.getState().byteValue()) { } else if (applyfor.getType() == AppUserApplyforType.ENABLE.getState().byteValue()) {
//账号启用 //账号启用
AppUser appUser = appUserService.getById(applyfor.getUserId()); AppUser appUser = appUserService.getById(applyfor.getUserId());
AppUser applyUser = appUserService.getById(applyfor.getCreateBy());
appUser.setState(UserState.Activated.getState()) appUser.setState(UserState.Activated.getState())
.setUpdateBy(applyfor.getCreateBy()) .setUpdateBy(applyUser.getName())
.setUpdateTime(LocalDateTime.now()); .setUpdateTime(LocalDateTime.now());
appUserService.updateById(appUser); appUserService.updateById(appUser);
} else if (applyfor.getType() == AppUserApplyforType.EXTENSION.getState().byteValue()) { } else if (applyfor.getType() == AppUserApplyforType.EXTENSION.getState().byteValue()) {
//账号延期 //账号延期
AppUser appUser = appUserService.getById(applyfor.getUserId()); AppUser appUser = appUserService.getById(applyfor.getUserId());
AppUser applyUser = appUserService.getById(applyfor.getCreateBy());
appUser.setExpireTime(appUser.getExpireTime().plusYears(1)) appUser.setExpireTime(appUser.getExpireTime().plusYears(1))
.setUpdateBy(applyfor.getCreateBy()) .setUpdateBy(applyUser.getName())
.setUpdateTime(LocalDateTime.now()); .setUpdateTime(LocalDateTime.now());
appUserService.updateById(appUser); appUserService.updateById(appUser);
} }

View File

@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.AppUserApplyForState; import com.nflg.mobilebroken.common.constant.*;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.constant.UserState;
import com.nflg.mobilebroken.common.exception.NflgException; 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.*;
@ -311,7 +308,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
if (Objects.nonNull(d.getTitleId())) { if (Objects.nonNull(d.getTitleId())) {
title = positionService.getById(d.getTitleId()); title = positionService.getById(d.getTitleId());
} }
return new AppUserForAdminVO() AppUserForAdminVO vo= new AppUserForAdminVO()
.setKey("u-" + d.getId()) .setKey("u-" + d.getId())
.setId(d.getId()) .setId(d.getId())
.setAvatar(d.getAvatar()) .setAvatar(d.getAvatar())
@ -331,12 +328,22 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setCreateBy(d.getCreateBy()) .setCreateBy(d.getCreateBy())
.setCreateTime(d.getCreateTime()) .setCreateTime(d.getCreateTime())
.setUpdateBy(d.getUpdateBy()) .setUpdateBy(d.getUpdateBy())
.setUpdateTime(d.getUpdateTime())
.setPrimary(true) .setPrimary(true)
.setState(d.getExpireTime().isAfter(ChronoLocalDate.from(LocalDateTime.now())) ? 1 : 2) .setState(d.getExpireTime().isAfter(ChronoLocalDate.from(LocalDateTime.now())) ? 1 : 2)
.setLastLoginTime(d.getLastLoginTime()) .setLastLoginTime(d.getLastLoginTime())
.setTitleId(d.getTitleId()) .setTitleId(d.getTitleId())
.setTitle(Objects.isNull(title)?"":title.getPositionName()) .setTitle(Objects.isNull(title)?"":title.getPositionName())
.setChildren(getChildrenOfAppUser(d.getId())); .setChildren(getChildrenOfAppUser(d.getId()));
AppUserApplyfor applyFor=appUserApplyforService.lambdaQuery()
.eq(AppUserApplyfor::getUserId, d.getId())
.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.ne(AppUserApplyfor::getType, AppUserApplyforType.ADD.getState().byteValue())
.one();
if (Objects.nonNull(applyFor)) {
vo.setKey("f-" + applyFor.getId()).setId(applyFor.getId()).setState(0);
}
return vo;
}); });
} }
@ -398,7 +405,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
} }
TBaseCustomer customer=customerService.getById(Integer.valueOf(d.getCompanyId())); TBaseCustomer customer=customerService.getById(Integer.valueOf(d.getCompanyId()));
TBasePosition title=positionService.getById(d.getTitleId()); TBasePosition title=positionService.getById(d.getTitleId());
return new AppUserForAdminVO() AppUserForAdminVO vo= new AppUserForAdminVO()
.setKey("u-" + d.getId()) .setKey("u-" + d.getId())
.setId(d.getId()) .setId(d.getId())
.setAvatar(d.getAvatar()) .setAvatar(d.getAvatar())
@ -421,11 +428,22 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setCreateBy(d.getCreateBy()) .setCreateBy(d.getCreateBy())
.setCreateTime(d.getCreateTime()) .setCreateTime(d.getCreateTime())
.setUpdateBy(d.getUpdateBy()) .setUpdateBy(d.getUpdateBy())
.setUpdateTime(d.getUpdateTime())
.setState(d.getExpireTime().isAfter(ChronoLocalDate.from(LocalDateTime.now())) ? 1 : 2) .setState(d.getExpireTime().isAfter(ChronoLocalDate.from(LocalDateTime.now())) ? 1 : 2)
.setLastLoginTime(d.getLastLoginTime()); .setLastLoginTime(d.getLastLoginTime());
AppUserApplyfor applyFor=appUserApplyforService.lambdaQuery()
.eq(AppUserApplyfor::getUserId, d.getId())
.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue())
.ne(AppUserApplyfor::getType, AppUserApplyforType.ADD.getState().byteValue())
.one();
if (Objects.nonNull(applyFor)) {
vo.setKey("f-" + applyFor.getId()).setId(applyFor.getId()).setState(0);
}
return vo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
LambdaQueryWrapper<AppUserApplyfor> queryApplyforListWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<AppUserApplyfor> queryApplyforListWrapper = new LambdaQueryWrapper<>();
queryApplyforListWrapper.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue()); queryApplyforListWrapper.eq(AppUserApplyfor::getState, AppUserApplyForState.PENDINGAPPROVAL.getState().byteValue());
queryApplyforListWrapper.eq(AppUserApplyfor::getType, AppUserApplyforType.ADD.getState().byteValue());
queryApplyforListWrapper.and(wrapper -> { queryApplyforListWrapper.and(wrapper -> {
for (String companyId : companyIds) { for (String companyId : companyIds) {
wrapper.or().eq(AppUserApplyfor::getCompanyId, Integer.parseInt(companyId)); wrapper.or().eq(AppUserApplyfor::getCompanyId, Integer.parseInt(companyId));
@ -435,6 +453,8 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
vos.addAll(applyforList.stream().map(d -> { vos.addAll(applyforList.stream().map(d -> {
AppArea area = appAreaService.getById(d.getAreaId()); AppArea area = appAreaService.getById(d.getAreaId());
TBaseCustomer company = customerService.getById(d.getCompanyId()); TBaseCustomer company = customerService.getById(d.getCompanyId());
TBasePosition title=positionService.getById(d.getTitleId());
AppUser createdByUser = getById(d.getCreateBy());
return new AppUserForAdminVO() return new AppUserForAdminVO()
.setKey("f-" + d.getId()) .setKey("f-" + d.getId())
.setId(d.getId()) .setId(d.getId())
@ -447,8 +467,13 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
.setEmail(d.getUserEmail()) .setEmail(d.getUserEmail())
.setSalesUserName(d.getSalesUserName()) .setSalesUserName(d.getSalesUserName())
.setAreaName(area.getName()) .setAreaName(area.getName())
.setAreaId(d.getAreaId())
.setUserState(UserState.ToBeActivated.getState()) .setUserState(UserState.ToBeActivated.getState())
.setPrimary(false) .setPrimary(false)
.setTitleId(d.getTitleId())
.setTitle(title.getPositionName())
.setCreateBy(createdByUser.getName())
.setCreateTime(d.getCreateTime())
.setState(0); .setState(0);
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
return vos; return vos;

View File

@ -98,7 +98,8 @@ public class TBaseCustomerServiceImpl extends ServiceImpl<TBaseCustomerMapper, T
return datas.stream() return datas.stream()
.map(d -> new CompanySimpleVO() .map(d -> new CompanySimpleVO()
.setId(d.getId()) .setId(d.getId())
.setName(d.getAgencyCompanyName())) .setName(d.getAgencyCompanyName())
.setCode(d.getAgencyCompanyCode()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }

View File

@ -25,7 +25,7 @@
</select> </select>
<select id="getMenusByRoleCodes" resultType="com.nflg.mobilebroken.common.pojo.vo.MenuVO"> <select id="getMenusByRoleCodes" resultType="com.nflg.mobilebroken.common.pojo.vo.MenuVO">
SELECT DISTINCT m.id,m.`name`,m.url,m.component,m.parent_id AS 'parentId' SELECT DISTINCT m.id,m.`name`,m.url,m.component,m.parent_id AS 'parentId',m.`show`
FROM admin_role r FROM admin_role r
INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id
INNER JOIN admin_menu m ON rmm.menu_id=m.id INNER JOIN admin_menu m ON rmm.menu_id=m.id

View File

@ -33,7 +33,8 @@ public class CodeGenerator {
, Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper")) , Paths.get(System.getProperty("user.dir")) + "/src/main/resources/mapper"))
) )
.strategyConfig(builder -> { .strategyConfig(builder -> {
builder.entityBuilder() builder.addInclude("aaa") //只生成指定表
.entityBuilder()
.enableLombok() .enableLombok()
.enableChainModel() .enableChainModel()
.enableFileOverride(); .enableFileOverride();

View File

@ -1,7 +1,6 @@
package com.nflg.mobilebroken.starter.service; package com.nflg.mobilebroken.starter.service;
import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.constant.STATE;
import com.nflg.mobilebroken.common.util.IdUtil;
import com.nflg.mobilebroken.common.util.VUtils; import com.nflg.mobilebroken.common.util.VUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@ -39,7 +38,15 @@ public class SSEManagerBase {
protected SseEmitter connect(Integer userId, Map<Integer, SseEmitter> emitters) { protected SseEmitter connect(Integer userId, Map<Integer, SseEmitter> emitters) {
SseEmitter emitter = new SseEmitter(Long.MAX_VALUE); SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
emitters.put(userId, emitter); SseEmitter old=emitters.put(userId, emitter);
if (Objects.nonNull(old)){
log.warn("停止旧连接:"+userId);
try {
old.complete();
} catch (Exception e) {
old.completeWithError(e);
}
}
emitter.onError((ex) -> { emitter.onError((ex) -> {
emitters.remove(userId); emitters.remove(userId);
emitter.complete(); emitter.complete();
@ -55,7 +62,11 @@ public class SSEManagerBase {
emitter.complete(); emitter.complete();
log.error("SSE完成:"+userId); log.error("SSE完成:"+userId);
}); });
SseEmitter.event().id(IdUtil.getIdStr()).name("connected").data("已连接").reconnectTime(5000); try {
emitter.send(SseEmitter.event().data("已连接").reconnectTime(5000));
} catch (IOException e) {
log.error("sse发送数据出错", e);
}
return emitter; return emitter;
} }

View File

@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.PreDestroy;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
@ -53,4 +54,17 @@ public class APPSSEManagerService extends SSEManagerBase implements SSEManagerSe
public Collection<Integer> getUserIds() { public Collection<Integer> getUserIds() {
return EMITTERS.keySet(); return EMITTERS.keySet();
} }
@PreDestroy
public void cleanup() {
log.info("释放SSE连接");
for (SseEmitter emitter : EMITTERS.values()) {
try {
emitter.complete();
} catch (Exception e) {
emitter.completeWithError(e);
}
}
EMITTERS.clear();
}
} }

View File

@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import javax.annotation.PreDestroy;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
@ -29,7 +30,7 @@ public class AdminSSEManagerService extends SSEManagerBase implements SSEManager
@Override @Override
public void send(Integer userId, SSEMessageDTO message) throws IOException { public void send(Integer userId, SSEMessageDTO message) throws IOException {
log.info(StrUtil.format("管理端SSE发送消息,用户id: {},内容: {}", userId, message)); log.info(StrUtil.format("管理端SSE发送消息,用户id: {},内容: {}", userId, message));
SseEmitter emitter = EMITTERS.get(userId); SseEmitter emitter = EMITTERS.get(userId);
if (Objects.isNull(emitter)) { if (Objects.isNull(emitter)) {
log.error("用户未连接SSE: " + userId); log.error("用户未连接SSE: " + userId);
@ -53,4 +54,17 @@ public class AdminSSEManagerService extends SSEManagerBase implements SSEManager
public Collection<Integer> getUserIds() { public Collection<Integer> getUserIds() {
return EMITTERS.keySet(); return EMITTERS.keySet();
} }
@PreDestroy
public void cleanup() {
log.info("释放SSE连接");
for (SseEmitter emitter : EMITTERS.values()) {
try {
emitter.complete();
} catch (Exception e) {
emitter.completeWithError(e);
}
}
EMITTERS.clear();
}
} }