feat: 一些调整

This commit is contained in:
曹鹏飞 2025-02-14 19:17:49 +08:00
parent 36b1d04197
commit 7e58f808cc
8 changed files with 146 additions and 73 deletions

View File

@ -1,6 +1,5 @@
package com.nflg.mobilebroken.admin.controller; package com.nflg.mobilebroken.admin.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.mobilebroken.admin.annotation.ApiMark; import com.nflg.mobilebroken.admin.annotation.ApiMark;
import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.ApiResult;
@ -9,16 +8,21 @@ import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO;
import com.nflg.mobilebroken.common.util.AdminUserUtil; import com.nflg.mobilebroken.common.util.AdminUserUtil;
import com.nflg.mobilebroken.common.util.PageUtil; import com.nflg.mobilebroken.common.util.PageUtil;
import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.AppUser;
import com.nflg.mobilebroken.repository.service.IAdminMessageService; import com.nflg.mobilebroken.repository.entity.AppUserApplyfor;
import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.entity.Ticket;
import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark; import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
import org.springframework.web.bind.annotation.*; 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 javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.security.Principal;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.Objects;
/** /**
* 消息相关接口 * 消息相关接口
@ -35,6 +39,15 @@ public class MessageController extends ControllerBase {
@Resource @Resource
private IAdminUserService adminUserService; private IAdminUserService adminUserService;
@Resource
private ITicketService ticketService;
@Resource
private IAppUserService appUserService;
@Resource
private IAppUserApplyforService appUserApplyforService;
/** /**
* 搜索消息 * 搜索消息
* @param request 请求参数 * @param request 请求参数
@ -42,18 +55,22 @@ public class MessageController extends ControllerBase {
*/ */
@PostMapping("searchMessages") @PostMapping("searchMessages")
@ApiMark(moduleName = "消息管理", apiName = "搜索消息") @ApiMark(moduleName = "消息管理", apiName = "搜索消息")
public ApiResult<PageData<AdminMessageVO>> searchMessages(@RequestHeader(value = "authorization", required = false) String token, @RequestBody AdminMessageSearchRequest request) { public ApiResult<PageData<AdminMessageVO>> searchMessages(@Valid @RequestBody AdminMessageSearchRequest request, Principal principal) {
IPage<AdminMessageVO> pageData = adminMessageService.search(AdminUserUtil.getUserId(), request); IPage<AdminMessageVO> datas = adminMessageService.search(AdminUserUtil.getUserId(), request);
PageUtil.convert(pageData, d -> { return ApiResult.success(PageUtil.convert(datas, d -> {
if (StrUtil.isNotBlank(d.getTicketHandleByIds())) { if (Objects.equals(d.getSource(), 0)) {
d.setTicketHandleBy(adminUserService.listByIds(StrUtil.split(d.getTicketHandleByIds(), ",")) Ticket ticket = ticketService.getById(d.getSourceId());
.stream() AppUser appUser = appUserService.getById(ticket.getUserId());
.map(AdminUser::getUserName) d.setSourceCreateTime(ticket.getCreateTime());
.collect(Collectors.toList())); d.setSourceCreateUserName(appUser.getName());
} else if (Objects.equals(d.getSource(), 1)) {
AppUserApplyfor appUserApplyfor = appUserApplyforService.getById(d.getSourceId());
AppUser appUser = appUserService.getById(appUserApplyfor.getCreateBy());
d.setSourceCreateTime(appUserApplyfor.getCreateTime());
d.setSourceCreateUserName(appUser.getName());
} }
return d; return d;
}); }));
return ApiResult.success(pageData);
} }
/** /**

View File

@ -0,0 +1,32 @@
package com.nflg.mobilebroken.common.constant;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum MessageSubType {
AccountApplication(0, "账号申请"),
AccountActivation(1, "账号启用"),
AccountExtension(2, "账号延期"),
TicketToBeAssigned(3, "工单待分派"),
TicketAssignment(4, "工单分派"),
TicketNewMessage(5, "工单新消息"),
TicketCompletion(6, "工单完成"),
TicketClosed(7, "工单关闭"),
TicketCancellation(8, "工单撤销"),
TicketReopen(9, "工单重启");
private final Integer state;
private final String description;
public static MessageSubType findByValue(Integer value) {
for (MessageSubType valueEnum : MessageSubType.values()) {
if (valueEnum.getState().equals(value)) {
return valueEnum;
}
}
return null;
}
}

View File

@ -7,10 +7,8 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum MessageType { public enum MessageType {
AccountVerification(0, "账号审核"), AccountExamine(0, "账号审核"),
WorkOrderAssignment(1, "工单分派"), WorkOrderAssignment(1, "工单处理");
WorkOrderFollowUp(2, "工单跟进"),
WorkOrderClosed(3, "工单关闭");
private final Integer state; private final Integer state;
private final String description; private final String description;

View File

@ -7,9 +7,12 @@ import lombok.EqualsAndHashCode;
@Data @Data
public class AdminMessageSearchRequest extends PageRequest { public class AdminMessageSearchRequest extends PageRequest {
//标题 //编号
private String title; private String no;
//任务类别0全部1账号审核2工单分派3工单跟进4工单关闭 //任务类别0账号审核1工单处理
private Integer type; private Integer type;
//任务事项0账号申请1账号启用2账号延期3工单待分派4工单分派5工单新消息6工单完成7工单关闭8工单撤销9工单重启
private Integer subType;
} }

View File

@ -1,12 +1,11 @@
package com.nflg.mobilebroken.common.pojo.vo; package com.nflg.mobilebroken.common.pojo.vo;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.nflg.mobilebroken.common.constant.MessageSubType;
import com.nflg.mobilebroken.common.constant.MessageType; import com.nflg.mobilebroken.common.constant.MessageType;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@ -14,40 +13,41 @@ public class AdminMessageVO {
private Integer id; private Integer id;
//任务id
private Integer ticketId;
//任务编号 //任务编号
private String ticketNo; private String no;
//任务事项 //来源0工单1代理商账户
private String content; private Integer source;
//任务类别 //来源id
@JsonIgnore private Integer sourceId;
//任务事项0账号申请1账号启用2账号延期3工单待分派4工单分派5工单新消息6工单完成7工单关闭8工单撤销9工单重启
private Integer subType;
//任务事项描述
private String subTypeDesc;
//任务类别0账号审核1工单处理
private Integer type; private Integer type;
//任务类别描述
//任务类别名称 private String typeDesc;
private String typeName; //提交人
private String sourceCreateUserName;
public String getTypeName() { //提交时间
return MessageType.findByValue(type).getDescription(); private LocalDateTime sourceCreateTime;
}
//消息时间 //消息时间
private LocalDateTime createTime; private LocalDateTime createTime;
//提交人
private String createUserName;
//任务提交时间
private LocalDateTime ticketCreateTime;
@JsonIgnore
private String ticketHandleByIds;
//待处理人 //待处理人
private List<String> ticketHandleBy; private String userName;
public String getSubTypeDesc() {
return MessageSubType.findByValue(subType).getDescription();
}
public String gettypeDesc() {
return MessageType.findByValue(type).getDescription();
}
//是否已读 //是否已读
private boolean isRead; private boolean isRead;

View File

@ -3,12 +3,13 @@ package com.nflg.mobilebroken.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* *
@ -29,9 +30,19 @@ public class AdminMessage implements Serializable {
private Integer id; private Integer id;
/** /**
* 工单id * 任务编号
*/ */
private Integer ticketId; private String no;
/**
* 来源0工单1代理商账户
*/
private Integer source;
/**
* 来源id
*/
private Integer sourceId;
/** /**
* 用户id * 用户id
@ -39,14 +50,14 @@ public class AdminMessage implements Serializable {
private Integer userId; private Integer userId;
/** /**
* 任务类别0账号审核1工单分派2工单跟进3工单关闭 * 任务类别0账号审核1工单处理
*/ */
private Byte type; private Integer type;
/** /**
* 提醒事项 * 任务事项0账号申请1账号启用2账号延期3工单待分派4工单分派5工单新消息6工单完成7工单关闭8工单撤销9工单重启
*/ */
private String content; private Integer subType;
/** /**
* 是否已读 * 是否已读

View File

@ -4,14 +4,17 @@ import cn.hutool.core.collection.CollectionUtil;
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.MessageSubType;
import com.nflg.mobilebroken.common.constant.MessageType; import com.nflg.mobilebroken.common.constant.MessageType;
import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest; import com.nflg.mobilebroken.common.pojo.request.AdminMessageSearchRequest;
import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO; import com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO;
import com.nflg.mobilebroken.repository.entity.AdminMessage; import com.nflg.mobilebroken.repository.entity.AdminMessage;
import com.nflg.mobilebroken.repository.entity.AdminUser; import com.nflg.mobilebroken.repository.entity.AdminUser;
import com.nflg.mobilebroken.repository.entity.Ticket;
import com.nflg.mobilebroken.repository.mapper.AdminMessageMapper; import com.nflg.mobilebroken.repository.mapper.AdminMessageMapper;
import com.nflg.mobilebroken.repository.service.IAdminMessageService; import com.nflg.mobilebroken.repository.service.IAdminMessageService;
import com.nflg.mobilebroken.repository.service.IAdminUserService; import com.nflg.mobilebroken.repository.service.IAdminUserService;
import com.nflg.mobilebroken.repository.service.ITicketService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -34,6 +37,9 @@ public class AdminMessageServiceImpl extends ServiceImpl<AdminMessageMapper, Adm
@Resource @Resource
private IAdminUserService adminUserService; private IAdminUserService adminUserService;
@Resource
private ITicketService ticketService;
@Override @Override
public IPage<AdminMessageVO> search(Integer userId, AdminMessageSearchRequest request) { public IPage<AdminMessageVO> search(Integer userId, AdminMessageSearchRequest request) {
return baseMapper.search(userId, request, new Page<>(request.getPage(), request.getPageSize())); return baseMapper.search(userId, request, new Page<>(request.getPage(), request.getPageSize()));
@ -62,13 +68,18 @@ public class AdminMessageServiceImpl extends ServiceImpl<AdminMessageMapper, Adm
if (CollectionUtil.isEmpty(cqmUsers)) { if (CollectionUtil.isEmpty(cqmUsers)) {
log.error("未设置CQM负责人"); log.error("未设置CQM负责人");
} else { } else {
List<AdminMessage> messages = cqmUsers.stream().map(c -> new AdminMessage() Ticket ticket = ticketService.getById(ticketId);
.setUserId(c.getId()) List<AdminMessage> messages = cqmUsers.stream()
.setTicketId(ticketId) .map(c -> new AdminMessage()
.setIsRead(false) .setNo(ticket.getNo())
.setType(MessageType.WorkOrderAssignment.getState().byteValue()) .setUserId(c.getId())
.setContent("工单待分配") .setSourceId(ticketId)
.setCreateTime(LocalDateTime.now())).collect(Collectors.toList()); .setSource(0)
.setType(MessageType.WorkOrderAssignment.getState())
.setSubType(MessageSubType.TicketToBeAssigned.getState())
.setIsRead(false)
.setCreateTime(LocalDateTime.now()))
.collect(Collectors.toList());
saveBatch(messages); saveBatch(messages);
} }
} }

View File

@ -3,18 +3,19 @@
<mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminMessageMapper"> <mapper namespace="com.nflg.mobilebroken.repository.mapper.AdminMessageMapper">
<select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO"> <select id="search" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminMessageVO">
SELECT m.id,t.id AS 'ticketId',t.`no` AS 'ticketNo',m.content,m.type,m.create_time AS 'createTime', SELECT m.id,m.no,m.source,m.source_id AS 'sourceId',m.type,m.sub_type AS 'subType',m.create_time AS 'createTime',
u.`name` AS 'createUserName',t.create_time AS 'ticketCreateTime',t.handle AS 'ticketHandleByIds', u.user_name AS 'userName',m.is_read AS 'isRead'
m.is_read AS 'isRead'
FROM admin_message m 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} WHERE m.user_id=#{userId}
<if test="request.type != null"> <if test="request.type != null">
AND m.type=#{request.type} AND m.type=#{request.type}
</if> </if>
<if test="request.title != null and request.title != ''"> <if test="request.subType != null">
AND (t.title LIKE CONCAT('%',#{request.title},'%') OR t.no LIKE CONCAT('%',#{request.title},'%')) AND m.sub_type=#{request.subType}
</if>
<if test="request.no != null and request.no != ''">
AND m.no LIKE CONCAT('%',#{request.no},'%')
</if> </if>
ORDER BY m.id DESC ORDER BY m.id DESC
</select> </select>