feat: 一些调整
This commit is contained in:
parent
1a27a98803
commit
14c4d7f2cd
|
|
@ -90,6 +90,14 @@
|
|||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-redis-jackson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-pool2</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package com.nflg.mobilebroken.admin;
|
||||
|
||||
import cn.dev33.satoken.SaManager;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
|
@ -11,10 +13,12 @@ import org.springframework.context.annotation.ComponentScan;
|
|||
@ComponentScan(basePackages = {"com.nflg.mobilebroken.repository.service", "com.nflg.mobilebroken.admin"
|
||||
, "com.nflg.mobilebroken.starter"})
|
||||
@EnableDiscoveryClient
|
||||
@Slf4j
|
||||
public class AdminApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AdminApplication.class, args);
|
||||
log.info("启动成功,Sa-Token 配置如下:" + SaManager.getConfig());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -27,6 +27,7 @@ public class JacksonConfig {
|
|||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
|
||||
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
|
||||
// objectMapper.registerModule(javaTimeModule);
|
||||
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,10 +13,7 @@ import com.nflg.mobilebroken.repository.entity.AdminUser;
|
|||
import com.nflg.mobilebroken.repository.service.IAdminMessageService;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminUserService;
|
||||
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
|
|
@ -45,13 +42,15 @@ public class MessageController extends ControllerBase {
|
|||
*/
|
||||
@PostMapping("searchMessages")
|
||||
@ApiMark(moduleName = "消息管理", apiName = "搜索消息")
|
||||
public ApiResult<PageData<AdminMessageVO>> searchMessages(@RequestBody AdminMessageSearchRequest request) {
|
||||
public ApiResult<PageData<AdminMessageVO>> searchMessages(@RequestHeader(value = "authorization", required = false) String token, @RequestBody AdminMessageSearchRequest request) {
|
||||
IPage<AdminMessageVO> pageData = adminMessageService.search(AdminUserUtil.getUserId(), request);
|
||||
PageUtil.convert(pageData, d -> {
|
||||
d.setTicketHandleBy(adminUserService.listByIds(StrUtil.split(",", d.getTicketHandleByIds()))
|
||||
.stream()
|
||||
.map(AdminUser::getUserName)
|
||||
.collect(Collectors.toList()));
|
||||
if (StrUtil.isNotBlank(d.getTicketHandleByIds())) {
|
||||
d.setTicketHandleBy(adminUserService.listByIds(StrUtil.split(d.getTicketHandleByIds(), ","))
|
||||
.stream()
|
||||
.map(AdminUser::getUserName)
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
return d;
|
||||
});
|
||||
return ApiResult.success(pageData);
|
||||
|
|
|
|||
|
|
@ -11,9 +11,11 @@ import com.nflg.mobilebroken.common.pojo.ApiResult;
|
|||
import com.nflg.mobilebroken.common.pojo.PageData;
|
||||
import com.nflg.mobilebroken.common.pojo.request.AdminTicketSearchRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.AssignmentTicketRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.request.FollowRequest;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.DeviceInfoVO;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.TicketPdfVO;
|
||||
import com.nflg.mobilebroken.common.util.AdminUserUtil;
|
||||
import com.nflg.mobilebroken.common.util.EecExcelUtil;
|
||||
import com.nflg.mobilebroken.common.util.PageUtil;
|
||||
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
||||
|
|
@ -64,6 +66,32 @@ public class TicketController extends ControllerBase {
|
|||
@Resource
|
||||
private IAdminUserService adminUserService;
|
||||
|
||||
@Resource
|
||||
private ITicketFollowService ticketFollowService;
|
||||
|
||||
/**
|
||||
* 获取问题类型
|
||||
*
|
||||
* @return 问题类型列表
|
||||
*/
|
||||
@GetMapping("getQuestions")
|
||||
@ApiMark(moduleName = "获取问题类型", apiName = "搜索工单", isPublic = true)
|
||||
public ApiResult<List<String>> getQuestions() {
|
||||
return ApiResult.success(Arrays.asList("技术设计问题", "装配工艺问题", "焊接质量问题", "机组装配质量问题", "电控问题", "工况方案问题", "操作不当", "原材料配件质量问题", "QC检验遗漏/误差", "部件/整机外观"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 关注或取消关注工单
|
||||
*
|
||||
* @param request 请求信息
|
||||
**/
|
||||
@PostMapping("followTiket")
|
||||
@ApiMark(moduleName = "关注或取消关注工单", apiName = "搜索工单")
|
||||
public ApiResult<Void> followTiket(@Valid @RequestBody FollowRequest request) {
|
||||
ticketFollowService.handleAdmin(request, AdminUserUtil.getUserId());
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索工单
|
||||
* @param request 请求参数
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.nflg.mobilebroken.common.pojo.dto.UserDTO;
|
|||
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.entity.AppUser;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import com.nflg.mobilebroken.repository.entity.TicketFollow;
|
||||
import com.nflg.mobilebroken.repository.service.IAdminUserService;
|
||||
import com.nflg.mobilebroken.repository.service.IAppUserService;
|
||||
import com.nflg.mobilebroken.repository.service.ITicketFollowService;
|
||||
|
|
@ -98,7 +99,11 @@ public class TicketScheduledTasks {
|
|||
sendToApp(appUser, subject, StrUtil.format(content, ticket.getTitle()));
|
||||
}
|
||||
//给关注人发提醒
|
||||
List<Integer> followUserIds = ticketFollowService.getUsers(ticket.getId());
|
||||
List<TicketFollow> follows = ticketFollowService.getUsers(ticket.getId());
|
||||
List<Integer> followUserIds = follows.stream()
|
||||
.filter(f -> Objects.equals(f.getFrom(), (byte) 0))
|
||||
.map(TicketFollow::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
followUserIds.remove(appUser.getId());
|
||||
if (CollectionUtil.isNotEmpty(followUserIds)) {
|
||||
List<AppUser> followUsers = appUserService.listByIds(followUserIds);
|
||||
|
|
@ -108,6 +113,18 @@ public class TicketScheduledTasks {
|
|||
sendToApp(u, subject, StrUtil.format(content, ticket.getTitle()));
|
||||
});
|
||||
}
|
||||
followUserIds = follows.stream()
|
||||
.filter(f -> Objects.equals(f.getFrom(), (byte) 1))
|
||||
.map(TicketFollow::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtil.isNotEmpty(followUserIds)) {
|
||||
List<AdminUser> followUsers = adminUserService.listByIds(followUserIds);
|
||||
String subject = "该问题工单截止目前还未关闭,请跟进处理!";
|
||||
String content = "工单({})已超时未处理";
|
||||
followUsers.forEach(u -> {
|
||||
sendToAdmin(u, subject, StrUtil.format(content, ticket.getTitle()));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void sendToAdmin(AdminUser user, String subject, String content) {
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
package com.nflg.mobilebroken.auth.config;
|
||||
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForStateless;
|
||||
import com.nflg.mobilebroken.common.util.SaTokenAdminUtil;
|
||||
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
@Configuration
|
||||
public class SaTokenJwtConfigure {
|
||||
|
||||
@PostConstruct
|
||||
public void setJwtStrategy() {
|
||||
//设置jwt模式
|
||||
SaTokenAppUtil.setStpLogic(new StpLogicJwtForStateless(SaTokenAppUtil.TYPE));
|
||||
SaTokenAdminUtil.setStpLogic(new StpLogicJwtForStateless(SaTokenAdminUtil.TYPE));
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,6 @@ package com.nflg.mobilebroken.auth.controller;
|
|||
|
||||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.nflg.mobilebroken.common.constant.STATE;
|
||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||
import com.nflg.mobilebroken.common.pojo.vo.PermissionsVO;
|
||||
|
|
@ -55,7 +54,7 @@ public class AdminController extends ControllerBase {
|
|||
.setExtra("from", "admin")
|
||||
.setExtra("name", user.getUserName())
|
||||
.setExtra("code", user.getUserCode())
|
||||
.setExtra("roles", StrUtil.join(",", roleCodes)));
|
||||
.setExtra("roles", roleCodes));
|
||||
return ApiResult.success(SaTokenAdminUtil.getTokenInfo());
|
||||
}
|
||||
|
||||
|
|
@ -76,9 +75,10 @@ public class AdminController extends ControllerBase {
|
|||
@GetMapping("getPermissions")
|
||||
public ApiResult<PermissionsVO> getPermissions() {
|
||||
VUtils.trueThrow(!SaTokenAdminUtil.isLogin()).throwMessage(STATE.LoginError,"请重新登录");
|
||||
List<String> roles = AdminUserUtil.getRoles();
|
||||
PermissionsVO vo = new PermissionsVO();
|
||||
vo.setMenus(adminRoleService.getMenusByRoleCodes(AdminUserUtil.getRoles()));
|
||||
vo.setButtons(adminRoleService.getButtonsByRoleCodes(AdminUserUtil.getRoles()));
|
||||
vo.setMenus(adminRoleService.getMenusByRoleCodes(roles));
|
||||
vo.setButtons(adminRoleService.getButtonsByRoleCodes(roles));
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package com.nflg.mobilebroken.auth.controller;
|
|||
import cn.dev33.satoken.stp.SaLoginConfig;
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.nflg.mobilebroken.common.constant.STATE;
|
||||
import com.nflg.mobilebroken.common.pojo.ApiResult;
|
||||
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
||||
|
|
@ -16,8 +17,8 @@ import org.springframework.web.bind.annotation.RestController;
|
|||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.chrono.ChronoLocalDate;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户端用户登录
|
||||
|
|
@ -46,8 +47,10 @@ public class AppController extends ControllerBase {
|
|||
.setExtra("from", "app")
|
||||
.setExtra("name", user.getName())
|
||||
.setExtra("email", user.getEmail())
|
||||
.setExtra("companys", Arrays.asList(1, 2))
|
||||
.setExtra("companys", StrUtil.split(user.getCompanyId(), ",").stream().map(Integer::valueOf).collect(Collectors.toList()))
|
||||
.setExtra("isPrimary", user.getIsPrimary()));
|
||||
user.setLastLoginTime(LocalDateTime.now());
|
||||
appUserService.updateById(user);
|
||||
return ApiResult.success(StpUtil.getTokenInfo());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ spring.servlet.multipart.max-request-size=500MB
|
|||
#spring.config.import=classpath:application-${spring.profiles.active}.properties,nacos:
|
||||
#spring.config.import=nacos:
|
||||
logging.level.root=info
|
||||
logging.level.org.mybatis=debug
|
||||
#logging.level.com.alibaba.nacos.client=DEBUG
|
||||
#logging.level.org.springframework.boot.context.config=DEBUG
|
||||
#logging.config=classpath:logback-sit.xml
|
||||
|
|
|
|||
|
|
@ -46,7 +46,6 @@ public class MessageController extends ControllerBase {
|
|||
|
||||
/**
|
||||
* 设置消息已读
|
||||
*
|
||||
* @param ids 消息id列表
|
||||
*/
|
||||
@PostMapping("setReaded")
|
||||
|
|
|
|||
|
|
@ -33,9 +33,9 @@ public class ApiResult<T> implements Serializable {
|
|||
data.setItems(value);;
|
||||
data.setPage(query.getPage());
|
||||
data.setPageSize(query.getPageSize());
|
||||
data.setTotal(total);
|
||||
data.setTotal((int) total);
|
||||
vo.code = STATE.Success.getState();
|
||||
vo.type=STATE.Success.getType();
|
||||
vo.type = STATE.Success.getType();
|
||||
vo.setResult(data);
|
||||
return vo;
|
||||
}
|
||||
|
|
@ -43,9 +43,9 @@ public class ApiResult<T> implements Serializable {
|
|||
public static <T> ApiResult<PageData<T>> success(IPage<T> page) {
|
||||
ApiResult<PageData<T>> vo = new ApiResult<>();
|
||||
PageData<T> pageData = new PageData<>();
|
||||
pageData.setPage(page.getCurrent());
|
||||
pageData.setPageSize(page.getSize());
|
||||
pageData.setTotal(page.getTotal());
|
||||
pageData.setPage((int) page.getCurrent());
|
||||
pageData.setPageSize((int) page.getSize());
|
||||
pageData.setTotal((int) page.getTotal());
|
||||
pageData.setItems(page.getRecords());
|
||||
vo.setCode(STATE.Success.getState());
|
||||
vo.setType(STATE.Success.getType());
|
||||
|
|
|
|||
|
|
@ -13,20 +13,20 @@ public class PageData<T> implements Serializable {
|
|||
|
||||
//当前页码
|
||||
@Setter
|
||||
private long page = 1;
|
||||
private int page = 1;
|
||||
|
||||
//每页数据条数
|
||||
@Setter
|
||||
private long pageSize = 20;
|
||||
private int pageSize = 20;
|
||||
|
||||
//总条数
|
||||
@Setter
|
||||
private long total = 0;
|
||||
private int total = 0;
|
||||
|
||||
//总页数
|
||||
private long totalPages;
|
||||
private int totalPages;
|
||||
|
||||
public long getTotalPages(){
|
||||
public int getTotalPages() {
|
||||
return total % pageSize == 0 ? total / pageSize : total / pageSize + 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ import java.util.List;
|
|||
@Accessors(chain = true)
|
||||
public class AdminMessageVO {
|
||||
|
||||
private Integer id;
|
||||
|
||||
//任务id
|
||||
private Integer ticketId;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.nflg.mobilebroken.common.util;
|
||||
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -11,6 +12,7 @@ public class AdminUserUtil {
|
|||
private static final Map<Integer, List<String>> PERMISSION_MAP = new ConcurrentHashMap<>();
|
||||
|
||||
public static Integer getUserId(){
|
||||
SaTokenInfo tokenValue = SaTokenAdminUtil.getTokenInfo();
|
||||
if (SaTokenAdminUtil.isLogin()) {
|
||||
return SaTokenAdminUtil.getLoginIdAsInt();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ public class PageUtil {
|
|||
|
||||
public static <T, U> PageData<T> convert(IPage<U> page, Function<? super U, ? extends T> mapper) {
|
||||
PageData<T> pageData = new PageData<>();
|
||||
pageData.setPage(page.getCurrent());
|
||||
pageData.setPageSize(page.getSize());
|
||||
pageData.setTotal(page.getTotal());
|
||||
pageData.setPage((int) page.getCurrent());
|
||||
pageData.setPageSize((int) page.getSize());
|
||||
pageData.setTotal((int) page.getTotal());
|
||||
pageData.setItems(page.getRecords().stream().map(mapper).collect(Collectors.toList()));
|
||||
return pageData;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
|
|||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 工单-关注
|
||||
|
|
@ -38,6 +39,11 @@ public class TicketFollow implements Serializable {
|
|||
*/
|
||||
private Integer userId;
|
||||
|
||||
/**
|
||||
* 来源,0:用户端,1:管理端
|
||||
*/
|
||||
private Byte from;
|
||||
|
||||
/**
|
||||
* 关注时间
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -18,5 +18,7 @@ public interface ITicketFollowService extends IService<TicketFollow> {
|
|||
|
||||
void handle(FollowRequest request, Integer userId);
|
||||
|
||||
List<Integer> getUsers(Integer id);
|
||||
List<TicketFollow> getUsers(Integer id);
|
||||
|
||||
void handleAdmin(FollowRequest request, Integer userId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,9 +117,9 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
|||
.like(StrUtil.isNotBlank(request.getUserName()), AdminUser::getUserName, request.getUserName())
|
||||
.page(new Page<>(request.getPage(), request.getPageSize()));
|
||||
PageData<AdminUserVO> pageData = new PageData<>();
|
||||
pageData.setPage(page.getCurrent());
|
||||
pageData.setPageSize(page.getSize());
|
||||
pageData.setTotal(page.getTotal());
|
||||
pageData.setPage((int) page.getCurrent());
|
||||
pageData.setPageSize((int) page.getSize());
|
||||
pageData.setTotal((int) page.getTotal());
|
||||
pageData.setItems(page.getRecords().stream().map(u ->
|
||||
new AdminUserVO()
|
||||
.setId(u.getId())
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import org.springframework.stereotype.Service;
|
|||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
|
@ -26,33 +25,58 @@ public class TicketFollowServiceImpl extends ServiceImpl<TicketFollowMapper, Tic
|
|||
|
||||
@Override
|
||||
public void handle(FollowRequest request, Integer userId) {
|
||||
if (request.getIsFollow()){
|
||||
if (request.getIsFollow()) {
|
||||
TicketFollow ticketFollow = lambdaQuery()
|
||||
.eq(TicketFollow::getTicketId,request.getTicketId())
|
||||
.eq(TicketFollow::getUserId,userId)
|
||||
.eq(TicketFollow::getTicketId, request.getTicketId())
|
||||
.eq(TicketFollow::getUserId, userId)
|
||||
.eq(TicketFollow::getFrom, (byte) 0)
|
||||
.one();
|
||||
if (Objects.isNull(ticketFollow)){
|
||||
if (Objects.isNull(ticketFollow)) {
|
||||
TicketFollow follow = new TicketFollow()
|
||||
.setTicketId(request.getTicketId())
|
||||
.setUserId(userId)
|
||||
.setFrom((byte) 0)
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
save(follow);
|
||||
}
|
||||
}else {
|
||||
LambdaQueryWrapper<TicketFollow> lambdaQueryWrapper =new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(TicketFollow::getTicketId,request.getTicketId());
|
||||
lambdaQueryWrapper.eq(TicketFollow::getUserId,userId);
|
||||
} else {
|
||||
LambdaQueryWrapper<TicketFollow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(TicketFollow::getTicketId, request.getTicketId());
|
||||
lambdaQueryWrapper.eq(TicketFollow::getUserId, userId);
|
||||
lambdaQueryWrapper.eq(TicketFollow::getFrom, (byte) 0);
|
||||
this.remove(lambdaQueryWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getUsers(Integer id) {
|
||||
public List<TicketFollow> getUsers(Integer id) {
|
||||
return lambdaQuery()
|
||||
.eq(TicketFollow::getTicketId, id)
|
||||
.list()
|
||||
.stream()
|
||||
.map(TicketFollow::getUserId)
|
||||
.collect(Collectors.toList());
|
||||
.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleAdmin(FollowRequest request, Integer userId) {
|
||||
if (request.getIsFollow()) {
|
||||
TicketFollow ticketFollow = lambdaQuery()
|
||||
.eq(TicketFollow::getTicketId, request.getTicketId())
|
||||
.eq(TicketFollow::getUserId, userId)
|
||||
.eq(TicketFollow::getFrom, (byte) 1)
|
||||
.one();
|
||||
if (Objects.isNull(ticketFollow)) {
|
||||
TicketFollow follow = new TicketFollow()
|
||||
.setTicketId(request.getTicketId())
|
||||
.setUserId(userId)
|
||||
.setFrom((byte) 1)
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
save(follow);
|
||||
}
|
||||
} else {
|
||||
LambdaQueryWrapper<TicketFollow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(TicketFollow::getTicketId, request.getTicketId());
|
||||
lambdaQueryWrapper.eq(TicketFollow::getUserId, userId);
|
||||
lambdaQueryWrapper.eq(TicketFollow::getFrom, (byte) 1);
|
||||
this.remove(lambdaQueryWrapper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminMessageMapper">
|
||||
|
||||
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO">
|
||||
SELECT t.id AS 'ticketId',t.`no` AS 'ticketNo',m.content,m.type,m.create_time AS 'createTime',
|
||||
SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',m.content,m.type,m.create_time AS 'createTime',
|
||||
u.`name` AS 'createUserName',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleByIds',
|
||||
m.is_read AS 'isRead'
|
||||
FROM admin_message m
|
||||
INNER JOIN ticket t ON m.ticket_id=t.id
|
||||
INNER JOIN admin_user u ON t.user_id=u.id
|
||||
INNER JOIN app_user u ON t.user_id=u.id
|
||||
WHERE m.user_id=#{userId}
|
||||
<if test="request.type != null">
|
||||
AND m.type=#{request.type}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id
|
||||
INNER JOIN admin_menu m ON rmm.menu_id=m.id
|
||||
WHERE m.`enable`=1 AND r.`enable`=1 AND r.`code` IN
|
||||
<foreach collection="roleCodes" item="code" open="('" close="')" separator="','">
|
||||
<foreach collection="roleCodes" item="code" open="(" close=")" separator=",">
|
||||
#{code}
|
||||
</foreach>
|
||||
UNION
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
INNER JOIN admin_menu_button_api_map mbam ON mb.id=mbam.button_id
|
||||
INNER JOIN admin_api a ON mbam.api_id=a.id
|
||||
WHERE rbm.role_id=1 AND r.`enable`=1 AND r.`code` IN
|
||||
<foreach collection="roleCodes" item="code" open="('" close="')" separator="','">
|
||||
<foreach collection="roleCodes" item="code" open="(" close=")" separator=",">
|
||||
#{code}
|
||||
</foreach>
|
||||
</select>
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
INNER JOIN admin_role_menu_map rmm ON r.id=rmm.role_id
|
||||
INNER JOIN admin_menu m ON rmm.menu_id=m.id
|
||||
WHERE m.`enable`=1 AND r.`enable`=1 AND r.`code` IN
|
||||
<foreach collection="roleCodes" item="code" open="('" close="')" separator="','">
|
||||
<foreach collection="roleCodes" item="code" open="(" close=")" separator=",">
|
||||
#{code}
|
||||
</foreach>
|
||||
</select>
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
INNER JOIN admin_role_button_map rbm ON r.id=rbm.role_id
|
||||
INNER JOIN admin_menu_button mb ON rbm.button_id=mb.id
|
||||
WHERE rbm.role_id=1 AND r.`enable`=1 AND r.`code` IN
|
||||
<foreach collection="roleCodes" item="code" open="('" close="')" separator="','">
|
||||
<foreach collection="roleCodes" item="code" open="(" close=")" separator=",">
|
||||
#{code}
|
||||
</foreach>
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<mapper namespace="com.nflg.mobilebroken.repository.mapper.AppMessageMapper">
|
||||
|
||||
<select id="getNotReadMessage" resultType="com.nflg.mobilebroken.common.pojo.vo.AppMessageVO">
|
||||
SELECT t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead'
|
||||
SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead'
|
||||
FROM app_message m
|
||||
INNER JOIN ticket t ON m.ticket_id=t.id
|
||||
INNER JOIN app_user u ON t.user_id=u.id
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
ORDER BY m.id
|
||||
</select>
|
||||
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AppMessageVO">
|
||||
SELECT t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead'
|
||||
SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',t.title AS 'ticketTitle',m.content,m.create_time AS 'createTime',u.`name` AS 'ticketCreateBy',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleBy',m.is_read AS 'isRead'
|
||||
FROM app_message m
|
||||
INNER JOIN ticket t ON m.ticket_id=t.id
|
||||
INNER JOIN app_user u ON t.user_id=u.id
|
||||
|
|
|
|||
|
|
@ -65,21 +65,21 @@
|
|||
</sql>
|
||||
|
||||
<select id="searchMy" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
|
||||
SELECT t.*,a.`name` AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy'
|
||||
SELECT t.*,a.`name` AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||
FROM ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
LEFT JOIN app_area a ON u.area_id=a.id
|
||||
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id
|
||||
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0
|
||||
WHERE t.user_id=#{userId}
|
||||
<include refid="searchWhereCondition"/>
|
||||
</select>
|
||||
|
||||
<select id="searchFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
|
||||
SELECT t.*,a.`name` AS 'areaName',true AS 'followed',u.`name` AS 'createBy'
|
||||
SELECT t.*,a.`name` AS 'areaName',true AS 'followed',u.`name` AS 'createBy',true AS 'followed'
|
||||
FROM ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
LEFT JOIN app_area a ON u.area_id=a.id
|
||||
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id
|
||||
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0
|
||||
WHERE tf.user_id=#{userId}
|
||||
<include refid="searchWhereCondition"/>
|
||||
</select>
|
||||
|
|
@ -143,12 +143,12 @@
|
|||
<select id="searchFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
|
||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||
FROM ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
||||
LEFT JOIN app_area a ON u.area_id=a.id
|
||||
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId}
|
||||
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
|
||||
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
|
||||
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
||||
<include refid="adminSearchWhereCondition"/>
|
||||
|
|
@ -157,12 +157,12 @@
|
|||
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
|
||||
SELECT t.id,t.`no`,t.title,t.state,t.urgency,t.component,t.question,t.solution,a.`name` AS 'areaName'
|
||||
,c.agency_company_name AS 'companyName',u.`name` AS 'createUserName',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
|
||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc'
|
||||
,t.create_time AS 'createTime',t.handle,t.solve_time AS 'solveTime',di.name AS 'warrantyStatusDesc',IF(tf.id IS NULL, false, true) AS 'followed'
|
||||
FROM ticket t
|
||||
LEFT JOIN app_user u ON t.user_id=u.id
|
||||
LEFT JOIN t_base_customer c ON u.company_id=c.id
|
||||
LEFT JOIN app_area a ON u.area_id=a.id
|
||||
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId}
|
||||
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
|
||||
LEFT JOIN device d ON t.device_no=d.device_no AND d.data_valid_state=1
|
||||
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
||||
<include refid="adminSearchWhereCondition"/>
|
||||
|
|
|
|||
|
|
@ -105,6 +105,10 @@
|
|||
<artifactId>fastjson</artifactId>
|
||||
<version>1.2.83</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-jwt</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package com.nflg.mobilebroken.starter.config;
|
||||
|
||||
import cn.dev33.satoken.jwt.StpLogicJwtForStateless;
|
||||
import cn.dev33.satoken.strategy.SaAnnotationStrategy;
|
||||
import com.nflg.mobilebroken.common.util.SaTokenAdminUtil;
|
||||
import com.nflg.mobilebroken.common.util.SaTokenAppUtil;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||
|
||||
|
|
@ -13,5 +16,8 @@ public class SaTokenAnnotationConfigure {
|
|||
public void rewriteSaStrategy() {
|
||||
// 重写Sa-Token的注解处理器,增加注解合并功能
|
||||
SaAnnotationStrategy.instance.getAnnotation = AnnotatedElementUtils::getMergedAnnotation;
|
||||
//设置jwt模式
|
||||
SaTokenAppUtil.setStpLogic(new StpLogicJwtForStateless(SaTokenAppUtil.TYPE));
|
||||
SaTokenAdminUtil.setStpLogic(new StpLogicJwtForStateless(SaTokenAdminUtil.TYPE));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue