feat: bug-384 用户端需要支持管理端用户添加工单和后续操作

This commit is contained in:
曹鹏飞 2025-06-26 17:52:43 +08:00
parent 6badf25305
commit 79c970e8ef
28 changed files with 173 additions and 113 deletions

View File

@ -154,7 +154,7 @@ public class TicketController extends ControllerBase {
@GetMapping("getFavorites")
@ApiMark(moduleName = "工单管理", apiName = "获取收藏夹",isPublic = true)
public ApiResult<FavoritesVO> getFavorites(@RequestParam(defaultValue ="0") Integer id){
return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),id));
return ApiResult.success(ticketFavoritesService.getList(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),id));
}
/**
@ -165,7 +165,7 @@ public class TicketController extends ControllerBase {
@PostMapping("addFavorites")
@ApiMark(moduleName = "工单管理", apiName = "添加收藏夹",isPublic = true)
public ApiResult<Void> addFavorites(@Valid @RequestBody AdminFavoritesRequest request){
ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId());
ticketFavoritesService.addFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom());
return ApiResult.success();
}
@ -175,7 +175,7 @@ public class TicketController extends ControllerBase {
*/
@PostMapping("updateFavorites")
public ApiResult<Void> updateFavorites(@Valid @RequestBody FavoritesUpdateRequest request){
ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId());
ticketFavoritesService.updateFavorites(request,AdminUserUtil.getUserId(),AppUserUtil.getFrom());
return ApiResult.success();
}
@ -187,7 +187,7 @@ public class TicketController extends ControllerBase {
@PostMapping("deleteFavorites")
@ApiMark(moduleName = "工单管理", apiName = "删除收藏夹",isPublic = true)
public ApiResult<Void> deleteFavorites(@Valid @RequestParam @NotNull Integer favoritesId){
ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),favoritesId);
ticketFavoritesService.deleteFavorites(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),favoritesId);
return ApiResult.success();
}
@ -197,7 +197,7 @@ public class TicketController extends ControllerBase {
*/
@PostMapping("moveFavorites")
public ApiResult<Void> moveFavorites(@Valid @RequestBody FavoritesMoveRequest request){
ticketFavoritesService.moveFavorites(AdminUserUtil.getUserId(),request);
ticketFavoritesService.moveFavorites(request);
return ApiResult.success();
}
@ -207,7 +207,7 @@ public class TicketController extends ControllerBase {
*/
@PostMapping("moveFavoritesTicket")
public ApiResult<Void> moveFavoritesTicket(@Valid @RequestBody FavoritesTicketMoveRequest request){
ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),request);
ticketFavoritesService.moveFavoritesTicket(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),request);
return ApiResult.success();
}
@ -218,7 +218,7 @@ public class TicketController extends ControllerBase {
@PostMapping("followTiket")
@ApiMark(moduleName = "工单管理", apiName = "关注工单")
public ApiResult<Void> followTiket(@Valid @RequestBody AdminFollowRequest request){
ticketFollowService.follow(request, AdminUserUtil.getUserId());
ticketFollowService.follow(request, AdminUserUtil.getUserId(),AppUserUtil.getFrom());
return ApiResult.success();
}
@ -228,7 +228,7 @@ public class TicketController extends ControllerBase {
**/
@PostMapping("unfollowTicket")
public ApiResult<Void> unfollowTicket(@Valid @RequestParam @NotNull Integer ticketId){
ticketFollowService.unfollow(AdminUserUtil.getUserId(),ticketId);
ticketFollowService.unfollow(AdminUserUtil.getUserId(),AppUserUtil.getFrom(),ticketId);
return ApiResult.success();
}

View File

@ -58,6 +58,7 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application
//我的消息
appMessageService.add(new AppMessage()
.setUserId(ticket.getUserId())
.setUserPlatform(ticket.getUserPlatform())
.setTicketId(ticket.getId())
.setSubType(MessageSubType.TicketCompletion.getState())
.setIsRead(false)

View File

@ -60,6 +60,7 @@ public class TicketReplyEvent extends ApplicationEvent implements ApplicationCon
//我的消息
appMessageService.add(new AppMessage()
.setUserId(ticket.getUserId())
.setUserPlatform(ticket.getUserPlatform())
.setTicketId(ticket.getId())
.setSubType(MessageSubType.TicketNewMessage.getState())
.setIsRead(false)

View File

@ -41,7 +41,7 @@ public class MessageController extends ControllerBase {
*/
@PostMapping("searchMessages")
public ApiResult<PageData<AppMessageVO>> searchMessages(@RequestBody AppMessageSearchRequest request) {
return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(), request));
return ApiResult.success(appMessageService.search(AppUserUtil.getUserId(),AppUserUtil.getFrom(), request));
}
/**
@ -50,7 +50,7 @@ public class MessageController extends ControllerBase {
*/
@PostMapping("setReaded")
public ApiResult<Void> setReaded(@Valid @RequestBody List<Integer> ids) {
appMessageService.setReaded(AppUserUtil.getUserId(),ids);
appMessageService.setReaded(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids);
return ApiResult.success();
}
@ -60,7 +60,7 @@ public class MessageController extends ControllerBase {
*/
@PostMapping("setNotRead")
public ApiResult<Void> setNotRead(@Valid @RequestBody List<Integer> ids) {
appMessageService.setNotRead(AppUserUtil.getUserId(),ids);
appMessageService.setNotRead(AppUserUtil.getUserId(),AppUserUtil.getFrom(),ids);
return ApiResult.success();
}
@ -71,7 +71,7 @@ public class MessageController extends ControllerBase {
*/
@GetMapping("getNotReadMessages")
public ApiResult<PageData<AppMessageVO>> getNotReadMessages(@RequestParam(defaultValue = "10") Integer num) {
return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(), num));
return ApiResult.success(appMessageService.getNotReadMessage(AppUserUtil.getUserId(),AppUserUtil.getFrom(), num));
}
/**
@ -80,7 +80,7 @@ public class MessageController extends ControllerBase {
*/
@GetMapping("getNotReadMessageCount")
public ApiResult<Integer> getNotReadMessageCount(){
return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId()));
return ApiResult.success(appMessageService.getNotReadMessageCount(AppUserUtil.getUserId(),AppUserUtil.getFrom()));
}
/**

View File

@ -185,7 +185,7 @@ public class TicketController extends ControllerBase {
**/
@PostMapping("followTiket")
public ApiResult<Void> followTiket(@Valid @RequestBody FollowRequest request){
ticketFollowService.handle(request, AppUserUtil.getUserId());
ticketFollowService.handle(request, AppUserUtil.getUserId(),AppUserUtil.getFrom());
return ApiResult.success();
}
@ -198,17 +198,27 @@ public class TicketController extends ControllerBase {
public ApiResult<TicketInfoVO> getTicket(@Valid @RequestParam @NotNull Integer id) {
Ticket ticket = ticketService.getById(id);
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("未找到工单");
AppUser user = appUserService.getById(ticket.getUserId());
String areaName = "";
if (user.getIsPrimary()){
areaName=StrUtil.join(",",customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())));
}else if (Objects.nonNull(user.getAreaId())){
AppArea area = appAreaService.getById(user.getAreaId());
if (Objects.nonNull(area)) {
areaName = area.getName();
List<TBaseCustomer> companys=new ArrayList<>();
String userName,userAvatar;
if (StrUtil.equals(ticket.getUserPlatform(),"app")) {
AppUser user = appUserService.getById(ticket.getUserId());
userName = user.getName();
userAvatar = user.getAvatar();
if (user.getIsPrimary()) {
areaName = StrUtil.join(",", customerService.getAreas(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList())));
} else if (Objects.nonNull(user.getAreaId())) {
AppArea area = appAreaService.getById(user.getAreaId());
if (Objects.nonNull(area)) {
areaName = area.getName();
}
}
companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()));
}else {
AdminUser adminUser=adminUserService.getById(ticket.getUserId());
userName = adminUser.getUserName();
userAvatar = adminUser.getAvatar();
}
List<TBaseCustomer> companys = customerService.listByIds(Arrays.stream(user.getCompanyId().split(",")).map(Integer::parseInt).collect(Collectors.toList()));
DeviceInfoVO device = deviceService.getByDeviceNo(ticket.getDeviceNo());
String handle = ticket.getHandle();
if (StrUtil.isNotBlank(handle)) {
@ -230,8 +240,8 @@ public class TicketController extends ControllerBase {
.setImages(getFileVOs(ticket.getImages()))
.setAttachments(getFileVOs(ticket.getAttachments()))
.setCreateUserId(ticket.getUserId())
.setCreateUserName(user.getName())
.setCreateUserAvatar(user.getAvatar())
.setCreateUserName(userName)
.setCreateUserAvatar(userAvatar)
.setCreateTime(ticket.getCreateTime())
.setAreaName(areaName)
.setSolveTime(ticket.getSolveTime())
@ -338,22 +348,25 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.Processing.getState()) > 1)
.throwMessage("当前工单状态不允许发送消息");
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(),AppUserUtil.getUserId()))
VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(),AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom())))
.throwMessage("工单创建人才能发送消息");
AppUser user = appUserService.getById(AppUserUtil.getUserId());
ChatMessageDTO message = new ChatMessageDTO()
.setId(IdUtil.getSnowflakeNextIdStr())
.setFrom("app")
.setTicketState(ticket.getState())
.setSenderId(user.getId())
.setSenderName(user.getName())
.setSenderAvatar(user.getAvatar())
.setContent(request.getContent())
.setCreateTime(Instant.now())
.setAttachments(request.getAttachments())
.setImages(request.getImages())
.setRemindUsers(request.getRemindUsers())
.setAudioUrl(request.getAudioUrl());
if (StrUtil.equals(ticket.getUserPlatform(),"app")){
AppUser user = appUserService.getById(AppUserUtil.getUserId());
message.setSenderId(user.getId()).setSenderName(user.getName()).setSenderAvatar(user.getAvatar());
}else {
AdminUser adminUser= adminUserService.getById(AppUserUtil.getUserId());
message.setSenderId(adminUser.getId()).setSenderName(adminUser.getUserName()).setSenderAvatar(adminUser.getAvatar());
}
if(Objects.nonNull(request.getQuoteId())){
ChatMessageDTO quoteMessage = ticketChatService.getMessage(request.getTicketId(), request.getQuoteId());
message.setQuote(quoteMessage);

View File

@ -2,6 +2,7 @@ package com.nflg.mobilebroken.cfs.event;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.MessageSubType;
import com.nflg.mobilebroken.common.constant.MessageType;
@ -87,12 +88,19 @@ public class TicketCreateEvent extends ApplicationEvent implements ApplicationCo
private void sendEmail(){
try {
AppUser appUser=appUserService.getById(ticket.getUserId());
String tickerUserName;
if (StrUtil.equals(ticket.getUserPlatform(),"app")){
AppUser appUser=appUserService.getById(ticket.getUserId());
tickerUserName=appUser.getName();
}else {
AdminUser adminUser=adminUserService.getById(ticket.getUserId());
tickerUserName=adminUser.getUserName();
}
String subject=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_CREATE,language);
String content=dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY,Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY,language)
.replace("${no}",ticket.getNo())
.replace("${title}",ticket.getTitle())
.replace("${createUser}",appUser.getName())
.replace("${createUser}",tickerUserName)
.replace("${handleUser}","")
.replace("${createTime}",toTimeString(ticket.getCreateTime()))
.replace("${msg}",subject);

View File

@ -24,7 +24,7 @@ public class Constant {
public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_ADMIN = "admin:message:unread";
public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread";
public static final String REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP = "app:message:unread:{}";
public static final String REDIS_KEY_MESSAGECONFIG_WX = "wxNotifyEnabled";

View File

@ -24,6 +24,9 @@ public class UserDTO {
//是否是主账号
private Boolean isPrimary;
//用户来源平台app或者admin
private String from;
//公司id
private List<Integer> companyIds;
}

View File

@ -17,4 +17,6 @@ public class AreaSearchRequest extends PageRequest {
//区域创建人id
@JsonIgnore
private Integer createBy;
}

View File

@ -44,6 +44,7 @@ public class AppUserUtil {
user.setEmail(getEmail());
user.setCompanyIds(getCompanyIds());
user.setIsPrimary(isPrimary());
user.setFrom(getFrom());
return user;
}
}

View File

@ -39,6 +39,11 @@ public class AppMessage implements Serializable {
*/
private Integer userId;
/**
* 用户来源平台app或者admin
*/
private String userPlatform;
/**
* 任务事项5工单新消息6工单完成10工单超时
*/

View File

@ -82,6 +82,11 @@ public class Ticket implements Serializable {
*/
private Integer userId;
/**
* 用户来源平台app或者admin
*/
private String userPlatform;
/**
* 创建时间
*/

View File

@ -49,6 +49,11 @@ public class TicketFavorites implements Serializable {
*/
private Integer createBy;
/**
* 用户来源平台app或者admin
*/
private String userPlatform;
/**
* 创建时间
*/

View File

@ -15,7 +15,7 @@ import com.nflg.mobilebroken.repository.entity.AppMessage;
*/
public interface AppMessageMapper extends BaseMapper<AppMessage> {
IPage<AppMessageVO> getNotReadMessage(Integer userId, Integer num, IPage<AppMessageVO> page);
IPage<AppMessageVO> getNotReadMessage(Integer userId,String from, Integer num, IPage<AppMessageVO> page);
IPage<AppMessageVO> search(Integer userId, String title, IPage<AppMessageVO> page);
IPage<AppMessageVO> search(Integer userId,String from, String title, IPage<AppMessageVO> page);
}

View File

@ -21,9 +21,9 @@ import java.util.List;
*/
public interface TicketMapper extends BaseMapper<Ticket> {
IPage<TicketVO> searchMy(IPage<?> page, TicketSearchRequest request, Integer userId,String language);
IPage<TicketVO> searchMy(IPage<?> page, TicketSearchRequest request, Integer userId,String from,String language);
IPage<TicketVO> searchFollow(IPage<?> page, TicketSearchRequest request, Integer userId,String language);
IPage<TicketVO> searchFollow(IPage<?> page, TicketSearchRequest request, Integer userId,String from,String language);
IPage<TicketVO> searchArea(IPage<?> page, TicketSearchRequest request, String companyId, Integer userId,String language,Boolean isPrimary,String companyCode);
@ -37,7 +37,7 @@ public interface TicketMapper extends BaseMapper<Ticket> {
List<AdminTicketVO> searchAllFromAdminAndFollow(AdminTicketSearchRequest request, Integer userId);
List<TicketVO> getAdminFavorites(Integer userId,Integer favoritesId);
List<TicketVO> getAdminFavorites(Integer userId,String from,Integer favoritesId);
IPage<AdminTicketVO> searchByFavouritesId(Integer userId, Integer favouritesId, Page<?> page);
}

View File

@ -18,15 +18,15 @@ import java.util.List;
*/
public interface IAppMessageService extends IService<AppMessage> {
IPage<AppMessageVO> getNotReadMessage(Integer userId, Integer num);
IPage<AppMessageVO> getNotReadMessage(Integer userId,String from, Integer num);
IPage<AppMessageVO> search(Integer userId, AppMessageSearchRequest request);
IPage<AppMessageVO> search(Integer userId,String from, AppMessageSearchRequest request);
void setReaded(Integer userId,List<Integer> ids);
void setReaded(Integer userId,String from,List<Integer> ids);
void setNotRead(Integer userId,List<Integer> ids);
void setNotRead(Integer userId,String from,List<Integer> ids);
void add(AppMessage message);
Integer getNotReadMessageCount(Integer userId);
Integer getNotReadMessageCount(Integer userId,String from);
}

View File

@ -18,15 +18,15 @@ import com.nflg.mobilebroken.repository.entity.TicketFavorites;
*/
public interface ITicketFavoritesService extends IService<TicketFavorites> {
FavoritesVO getList(Integer userId,Integer id);
FavoritesVO getList(Integer userId,String from,Integer id);
void addFavorites(AdminFavoritesRequest request, Integer userId);
void addFavorites(AdminFavoritesRequest request, Integer userId,String from);
void deleteFavorites(Integer userId,Integer favoritesId);
void deleteFavorites(Integer userId,String from,Integer favoritesId);
void updateFavorites(FavoritesUpdateRequest request, Integer userId);
void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from);
void moveFavorites(Integer userId, FavoritesMoveRequest request);
void moveFavorites(FavoritesMoveRequest request);
void moveFavoritesTicket(Integer userId, FavoritesTicketMoveRequest request);
void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request);
}

View File

@ -15,11 +15,11 @@ import com.nflg.mobilebroken.repository.entity.TicketFollow;
*/
public interface ITicketFollowService extends IService<TicketFollow> {
void handle(FollowRequest request, Integer userId);
void handle(FollowRequest request, Integer userId,String from);
void follow(AdminFollowRequest request, Integer userId);
void follow(AdminFollowRequest request, Integer userId,String from);
void unfollow(Integer userId, Integer ticketId);
void unfollow(Integer userId,String from, Integer ticketId);
void deleteFavorites(Integer userId, Integer favoritesId);
void deleteFavorites(Integer userId,String from, Integer favoritesId);
}

View File

@ -51,7 +51,7 @@ public interface ITicketService extends IService<Ticket> {
List<AdminUserSimpleVO> getTicketHandle(Integer id);
List<TicketVO> getAdminFavorites(Integer userId,Integer favoritesId);
List<TicketVO> getAdminFavorites(Integer userId,String from,Integer favoritesId);
Ticket rejectTicket(Integer id);

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.request.AreaSearchRequest;
import com.nflg.mobilebroken.common.pojo.request.EnableRequest;
import com.nflg.mobilebroken.common.pojo.vo.AreaVO;
@ -56,6 +57,9 @@ public class AppAreaServiceImpl extends ServiceImpl<AppAreaMapper, AppArea> impl
@Override
public IPage<AreaVO> search(AreaSearchRequest request) {
if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)){
return new Page<>(request.getPage(), request.getPageSize());
}
if (AppUserUtil.isPrimary()){
request.setCreateBy(AppUserUtil.getUserId());
}else {

View File

@ -37,13 +37,13 @@ public class AppMessageServiceImpl extends ServiceImpl<AppMessageMapper, AppMess
private RedisTemplate<String,Object> redisTemplate;
@Override
public IPage<AppMessageVO> getNotReadMessage(Integer userId, Integer num) {
return baseMapper.getNotReadMessage(userId, num, new Page<>(1, num));
public IPage<AppMessageVO> getNotReadMessage(Integer userId,String from, Integer num) {
return baseMapper.getNotReadMessage(userId,from, num, new Page<>(1, num));
}
@Override
public IPage<AppMessageVO> search(Integer userId, AppMessageSearchRequest request) {
IPage<AppMessageVO> datas = baseMapper.search(userId, request.getTitle(), new Page<>(request.getPage(), request.getPageSize()));
public IPage<AppMessageVO> search(Integer userId,String from, AppMessageSearchRequest request) {
IPage<AppMessageVO> datas = baseMapper.search(userId,from, request.getTitle(), new Page<>(request.getPage(), request.getPageSize()));
Map<Integer, String> userMap = new HashMap<>();
datas.getRecords().forEach(d -> {
if (StrUtil.isNotBlank(d.getTicketHandleBy())) {
@ -64,23 +64,23 @@ public class AppMessageServiceImpl extends ServiceImpl<AppMessageMapper, AppMess
}
@Override
public void setReaded(Integer userId,List<Integer> ids) {
public void setReaded(Integer userId,String from,List<Integer> ids) {
lambdaUpdate()
.set(AppMessage::getIsRead, true)
.eq(AppMessage::getUserId, userId)
.in(AppMessage::getId, ids)
.update();
setUnreadMessageCount(userId);
setUnreadMessageCount(userId,from);
}
@Override
public void setNotRead(Integer userId,List<Integer> ids) {
public void setNotRead(Integer userId,String from,List<Integer> ids) {
lambdaUpdate()
.set(AppMessage::getIsRead, false)
.eq(AppMessage::getUserId, userId)
.in(AppMessage::getId, ids)
.update();
setUnreadMessageCount(userId);
setUnreadMessageCount(userId,from);
}
@Override
@ -88,21 +88,23 @@ public class AppMessageServiceImpl extends ServiceImpl<AppMessageMapper, AppMess
remove(new LambdaQueryWrapper<AppMessage>()
.eq(AppMessage::getIsRead, false)
.eq(AppMessage::getSubType, message.getSubType())
.eq(AppMessage::getUserId, message.getUserId()));
.eq(AppMessage::getUserId, message.getUserId())
.eq(AppMessage::getUserPlatform, message.getUserPlatform()));
save(message);
setUnreadMessageCount(message.getUserId());
setUnreadMessageCount(message.getUserId(),message.getUserPlatform());
}
private void setUnreadMessageCount(Integer userId){
private void setUnreadMessageCount(Integer userId,String from){
Integer count= Math.toIntExact(lambdaQuery()
.eq(AppMessage::getIsRead, false)
.eq(AppMessage::getUserId, userId)
.eq(AppMessage::getUserPlatform, from)
.count());
redisTemplate.opsForHash().put(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId, count);
redisTemplate.opsForHash().put(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId, count);
}
@Override
public Integer getNotReadMessageCount(Integer userId) {
return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP, userId)).orElse(0);
public Integer getNotReadMessageCount(Integer userId, String from) {
return Optional.ofNullable((Integer) redisTemplate.opsForHash().get(StrUtil.format(Constant.REDIS_KEY_MESSAGE_NOT_READ_COUNT_APP,from), userId)).orElse(0);
}
}

View File

@ -1,7 +1,9 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.query.PageBaseQuery;
import com.nflg.mobilebroken.common.pojo.request.SearchDeviceRequest;
import com.nflg.mobilebroken.common.pojo.vo.DeviceAgentVO;
@ -50,13 +52,10 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
@Override
public Page<DeviceVO> searchDevice(SearchDeviceRequest request,String language) {
// IPage<Device> page = lambdaQuery()
// .like(StrUtil.isNotBlank(request.getDeviceNo()), Device::getDeviceNo, request.getDeviceNo())
// .like(StrUtil.isNotBlank(request.getModelNo()), Device::getModelNo, request.getModelNo())
// .between(Objects.nonNull(request.getStartTime()), Device::getShipmentDate, request.getStartTime(), request.getEndTime())
// .page(new Page<>(request.getPage(), request.getPageSize()));
// return PageUtil.convert(page, d -> Convert.convert(DeviceVO.class, d));
List<Integer> companyIds = AppUserUtil.getCompanyIds();
List<Integer> companyIds = null;
if (StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_APP)){
companyIds = AppUserUtil.getCompanyIds();
}
return baseMapper.searchDevice(request, companyIds,language ,new Page<>(request.getPage(), request.getPageSize()));
}

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.pojo.request.AdminFavoritesRequest;
import com.nflg.mobilebroken.common.pojo.request.FavoritesMoveRequest;
@ -39,45 +40,46 @@ public class TicketFavoritesServiceImpl extends ServiceImpl<TicketFavoritesMappe
private ITicketFollowService ticketFollowService;
@Override
public FavoritesVO getList(Integer userId,Integer id) {
public FavoritesVO getList(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());
vo.setChildren(lambdaQuery().eq(TicketFavorites::getParentId,id).eq(TicketFavorites::getCreateBy,userId).orderByAsc(TicketFavorites::getOrderNum).list()
vo.setChildren(lambdaQuery().eq(TicketFavorites::getParentId,id).eq(TicketFavorites::getCreateBy,userId).eq(TicketFavorites::getUserPlatform,from).orderByAsc(TicketFavorites::getOrderNum).list()
.stream().map(f->new FavoritesVO().setId(f.getId()).setName(f.getName())).collect(Collectors.toList()));
vo.setTickets(ticketService.getAdminFavorites(userId,id));
vo.setTickets(ticketService.getAdminFavorites(userId,from,id));
return vo;
}
@Override
public void addFavorites(AdminFavoritesRequest request, Integer userId) {
public void addFavorites(AdminFavoritesRequest request, Integer userId,String from) {
VUtils.trueThrowBusinessError(lambdaQuery().eq(TicketFavorites::getParentId,request.getParentId()).eq(TicketFavorites::getName,request.getName()).exists())
.throwMessage("已存在该名称的收藏夹");
save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setCreateTime(LocalDateTime.now()));
save(new TicketFavorites().setParentId(request.getParentId()).setName(request.getName()).setCreateBy(userId).setUserPlatform(from).setCreateTime(LocalDateTime.now()));
}
@Transactional
@Override
public void deleteFavorites(Integer userId, Integer favoritesId) {
public void deleteFavorites(Integer userId,String from, Integer favoritesId) {
TicketFavorites favorites = lambdaQuery().eq(TicketFavorites::getId, favoritesId).one();
VUtils.trueThrowBusinessError(Objects.isNull(favorites)).throwMessage("该收藏夹不存在");
VUtils.trueThrowBusinessError(!Objects.equals(favorites.getCreateBy(), userId)).throwMessage("无权限删除该收藏夹");
ticketFollowService.deleteFavorites(userId, favoritesId);
ticketFollowService.deleteFavorites(userId,from, favoritesId);
if (!Objects.equals(favoritesId, 0)){
lambdaUpdate().eq(TicketFavorites::getId,favoritesId).remove();
}
}
@Override
public void updateFavorites(FavoritesUpdateRequest request, Integer userId) {
public void updateFavorites(FavoritesUpdateRequest request, Integer userId,String from) {
lambdaUpdate()
.set(TicketFavorites::getName,request.getName())
.eq(TicketFavorites::getId,request.getId())
.eq(TicketFavorites::getCreateBy,userId)
.eq(TicketFavorites::getUserPlatform,from)
.update();
}
@Override
public void moveFavorites(Integer userId, FavoritesMoveRequest request) {
public void moveFavorites(FavoritesMoveRequest request) {
int orderNum=100000;
if (Objects.nonNull(request.getNextFavoritesId())){
orderNum=lambdaQuery()
@ -92,12 +94,12 @@ public class TicketFavoritesServiceImpl extends ServiceImpl<TicketFavoritesMappe
}
@Override
public void moveFavoritesTicket(Integer userId, FavoritesTicketMoveRequest request) {
public void moveFavoritesTicket(Integer userId,String from, FavoritesTicketMoveRequest request) {
ticketFollowService.lambdaUpdate()
.set(TicketFollow::getFavoritesId,request.getFavoritesId())
.eq(TicketFollow::getTicketId,request.getTicketId())
.eq(TicketFollow::getUserId,userId)
.eq(TicketFollow::getFrom,(byte) 1)
.eq(TicketFollow::getFrom, StrUtil.equals(from, "app")?0:1)
.update();
}
}

View File

@ -1,5 +1,6 @@
package com.nflg.mobilebroken.repository.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.mobilebroken.common.pojo.request.AdminFollowRequest;
@ -25,18 +26,19 @@ import java.util.Objects;
public class TicketFollowServiceImpl extends ServiceImpl<TicketFollowMapper, TicketFollow> implements ITicketFollowService {
@Override
public void handle(FollowRequest request, Integer userId) {
public void handle(FollowRequest request, Integer userId,String from) {
byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1);
if (request.getIsFollow()) {
TicketFollow ticketFollow = lambdaQuery()
.eq(TicketFollow::getTicketId, request.getTicketId())
.eq(TicketFollow::getUserId, userId)
.eq(TicketFollow::getFrom, (byte) 0)
.eq(TicketFollow::getFrom, bf)
.one();
if (Objects.isNull(ticketFollow)) {
TicketFollow follow = new TicketFollow()
.setTicketId(request.getTicketId())
.setUserId(userId)
.setFrom((byte) 0)
.setFrom(bf)
.setCreateTime(LocalDateTime.now());
save(follow);
}
@ -44,40 +46,43 @@ public class TicketFollowServiceImpl extends ServiceImpl<TicketFollowMapper, Tic
LambdaQueryWrapper<TicketFollow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(TicketFollow::getTicketId, request.getTicketId());
lambdaQueryWrapper.eq(TicketFollow::getUserId, userId);
lambdaQueryWrapper.eq(TicketFollow::getFrom, (byte) 0);
lambdaQueryWrapper.eq(TicketFollow::getFrom, bf);
this.remove(lambdaQueryWrapper);
}
}
@Transactional
@Override
public void follow(AdminFollowRequest request, Integer userId) {
public void follow(AdminFollowRequest request, Integer userId,String from) {
byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1);
this.remove(new LambdaQueryWrapper<TicketFollow>()
.eq(TicketFollow::getTicketId, request.getTicketId())
.eq(TicketFollow::getUserId, userId)
.eq(TicketFollow::getFrom, (byte) 1));
.eq(TicketFollow::getFrom, bf));
TicketFollow ticketFollow = new TicketFollow()
.setTicketId(request.getTicketId())
.setUserId(userId)
.setFavoritesId(request.getFavoritesId())
.setFrom((byte) 1)
.setFrom(bf)
.setCreateTime(LocalDateTime.now());
save(ticketFollow);
}
@Override
public void unfollow(Integer userId, Integer ticketId) {
public void unfollow(Integer userId,String from, Integer ticketId) {
byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1);
this.remove(new LambdaQueryWrapper<TicketFollow>()
.eq(TicketFollow::getTicketId, ticketId)
.eq(TicketFollow::getUserId, userId)
.eq(TicketFollow::getFrom, (byte) 1));
.eq(TicketFollow::getFrom, bf));
}
@Override
public void deleteFavorites(Integer userId, Integer favoritesId) {
public void deleteFavorites(Integer userId,String from, Integer favoritesId) {
byte bf = (byte) (StrUtil.equals(from, "app") ? 0 : 1);
this.remove(new LambdaQueryWrapper<TicketFollow>()
.eq(TicketFollow::getFavoritesId, favoritesId)
.eq(TicketFollow::getUserId, userId)
.eq(TicketFollow::getFrom, (byte) 1));
.eq(TicketFollow::getFrom, bf));
}
}

View File

@ -81,6 +81,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
.setDescription(request.getDescription())
.setState(TicketState.PendingProcessing.getState())
.setUserId(userId)
.setUserPlatform(AppUserUtil.getFrom())
.setCreateTime(LocalDateTime.now());
save(ticket);
// Collection<String> files=CollectionUtil.addAll(request.getImages(),request.getAttachments());
@ -131,9 +132,9 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
request.setEndTime(request.getEndTime().plusDays(1));
}
if (request.getType()==1){
return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language);
return baseMapper.searchMy(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language);
}else if (request.getType()==2){
return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),language);
return baseMapper.searchFollow(new Page<>(request.getPage(), request.getPageSize()), request, user.getId(),user.getFrom(),language);
}else if (request.getType()==3) {
String companyCode = "";
if (!user.getIsPrimary()){
@ -305,7 +306,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
@Override
public Ticket revoked(Integer id) {
Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one();
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()))
VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom())))
.throwMessage("无权操作该工单");
VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0)
.throwMessage("当前工单状态不允许撤销");
@ -320,7 +321,7 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
@Override
public Ticket reopen(Integer id) {
Ticket ticket=lambdaQuery().eq(Ticket::getId, id).one();
VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()))
VUtils.trueThrowBusinessError(!(Objects.equals(ticket.getUserId(), AppUserUtil.getUserId()) && StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom())))
.throwMessage("无权操作该工单");
VUtils.trueThrowBusinessError(Byte.compare(ticket.getState(), TicketState.ProcessingCompleted.getState())>0)
.throwMessage("当前工单状态不允许重新打开");
@ -367,8 +368,8 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
}
@Override
public List<TicketVO> getAdminFavorites(Integer userId,Integer favoritesId) {
return baseMapper.getAdminFavorites(userId,favoritesId);
public List<TicketVO> getAdminFavorites(Integer userId,String from,Integer favoritesId) {
return baseMapper.getAdminFavorites(userId,from,favoritesId);
}
@Override

View File

@ -7,7 +7,7 @@
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
WHERE m.is_read=0 AND m.user_id=#{userId}
WHERE m.is_read=0 AND m.user_id=#{userId} AND m.user_platform=#{from}
ORDER BY m.create_time DESC
</select>
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AppMessageVO">
@ -15,7 +15,7 @@
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
WHERE m.user_id=#{userId}
WHERE m.user_id=#{userId} AND m.user_platform=#{from}
<if test="title != null and title != ''">
AND (t.title LIKE CONCAT('%',#{title},'%') OR t.no LIKE CONCAT('%',#{title},'%'))
</if>

View File

@ -67,10 +67,13 @@
INNER JOIN dictionary_item di ON di.id=d.device_state
LEFT JOIN dictionary_item di2 ON di2.id=d.warranty_state
LEFT JOIN dictionary_item_translate dit2 ON dit2.dictionary_item_id=d.warranty_state AND dit2.language_code=#{language}
WHERE d.data_valid_state=1 AND di.`code`='Normal' AND c.id IN
<foreach collection="companyIds" open="(" close=")" item="companyId" separator=",">
#{companyId}
</foreach>
WHERE d.data_valid_state=1 AND di.`code`='Normal'
<if test="companyIds!=null">
AND c.id IN
<foreach collection="companyIds" open="(" close=")" item="companyId" separator=",">
#{companyId}
</foreach>
</if>
<if test="request.deviceNo!=null and request.deviceNo!=''">
and d.device_no LIKE concat('%', #{request.deviceNo}, '%')
</if>

View File

@ -89,11 +89,11 @@
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=0
LEFT JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=IF(#{from}='app',0,1)
LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2
LEFT JOIN t_base_part p ON t.component_id=p.id
LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language}
WHERE t.user_id=#{userId} AND t.state!=4
WHERE t.user_id=#{userId} AND t.user_platform=#{from} AND t.state!=4
<include refid="searchWhereCondition"/>
ORDER BY t.id DESC
</select>
@ -105,11 +105,11 @@
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=0
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.from=IF(#{from}='app',0,1)
LEFT JOIN ticket_evaluate te ON t.id=te.ticket_id AND t.state=2
LEFT JOIN t_base_part p ON t.component_id=p.id
LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language}
WHERE tf.user_id=#{userId} AND t.state!=4
WHERE tf.user_id=#{userId} AND t.user_platform=#{from} AND t.state!=4
<include refid="searchWhereCondition"/>
ORDER BY t.id DESC
</select>
@ -229,7 +229,7 @@
FROM ticket_follow tf
INNER JOIN ticket t ON tf.ticket_id = t.id
WHERE tf.`from` = 1
AND tf.user_id = #{userId}
AND tf.user_id = #{userId} AND tf.from=IF(#{from}='app',0,1)
AND tf.favorites_id = #{favoritesId}
ORDER BY t.state,t.id DESC
</select>