refactor(repository): 优化消息服务接口及工单查询逻辑

- 将 AdminMessageServiceImpl.remove 方法中的 sourceId 类型由 Integer 改为 Long,统一接口参数类型
- 修改 IAdminMessageService 接口的 remove 方法签名,确保一致性
- 优化 GongFuTicketCreateEvent 中获取处理人 IDs 的方式,避免转换错误
- GongfuTicketServiceImpl 新增设置 cqm 字段,完善工单创建信息
- 调整 TicketCompleteEvent 中消息子类型为 TicketSolutionAudit,修正业务流程
- 修改 TicketMapper.xml 中多处 SQL 联表查询,新增 t_base_area 表连接
- 新增 TableInfoService 和 TableMetaMapper,提供表结构元数据查询功能
- 修复 TicketSolutionAuditServiceImpl 中调用 adminMessageService.remove 的参数类型不匹配问题
This commit is contained in:
曹鹏飞 2025-12-24 09:02:04 +08:00
parent 6ea9da90a4
commit d7162092ff
9 changed files with 55 additions and 13 deletions

View File

@ -0,0 +1,19 @@
package com.nflg.mobilebroken.admin.service;
import com.nflg.mobilebroken.repository.mapper.TableMetaMapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Component
public class TableInfoService {
@Resource
private TableMetaMapper tableMetaMapper;
public List<Map<String, Object>> getTableColumnInfos(String tableName) {
return tableMetaMapper.getTableColumnMeta(tableName);
}
}

View File

@ -92,7 +92,7 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
private void sendUserMessage1() {
//我的待办
List<AdminUser> handlers = adminUserService.listByIds(Collections.singleton(StrUtil.splitToLong(ticket.getHandle(), ",")));
List<AdminUser> handlers = adminUserService.listByIds(Arrays.stream(StrUtil.splitToLong(ticket.getHandle(), ",")).boxed().collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(handlers)) {
handlers.forEach(c -> adminMessageService.add(
new AdminMessage()
@ -157,7 +157,7 @@ public class GongFuTicketCreateEvent extends ApplicationEvent implements Applica
.replace("${handleUser}", "")
.replace("${createTime}", toTimeString(ticket.getCreateTime()))
.replace("${msg}", subject);
List<AdminUser> handlers = adminUserService.listByIds(Collections.singleton(StrUtil.splitToLong(ticket.getHandle(), ",")));
List<AdminUser> handlers = adminUserService.listByIds(Arrays.stream(StrUtil.splitToLong(ticket.getHandle(), ",")).boxed().collect(Collectors.toList()));
sendEmail(handlers.stream().map(AdminUser::getEmail).collect(Collectors.toSet()), subject, content);
} catch (Exception ex) {
log.error("邮件发送失败", ex);

View File

@ -79,7 +79,7 @@ public class TicketCompleteEvent extends ApplicationEvent implements Application
.setSourceId(ticket.getId())
.setSource(3)
.setType(MessageType.WorkOrderAssignment.getState())
.setSubType(MessageSubType.TicketCompletion.getState())
.setSubType(MessageSubType.TicketSolutionAudit.getState())
.setIsRead(false)
.setCreateTime(LocalDateTime.now()))
);

View File

@ -0,0 +1,15 @@
package com.nflg.mobilebroken.repository.mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
public interface TableMetaMapper {
@Select("SELECT COLUMN_NAME as name, COLUMN_COMMENT as comment " +
"FROM information_schema.COLUMNS " +
"WHERE TABLE_NAME = #{tableName}")
List<Map<String, Object>> getTableColumnMeta(@Param("tableName") String tableName);
}

View File

@ -31,7 +31,7 @@ public interface IAdminMessageService extends IService<AdminMessage> {
Integer getNotReadMessageCount(Integer userId);
void remove(Integer source, Integer sourceId, Integer userId, Integer subType);
void remove(Integer source, Long sourceId, Integer userId, Integer subType);
AdminNotReadMessageCountVO getNotReadMessageCount1(Integer userId);
}

View File

@ -93,7 +93,7 @@ public class AdminMessageServiceImpl extends ServiceImpl<AdminMessageMapper, Adm
}
@Override
public void remove(Integer source, Integer sourceId, Integer userId, Integer subType) {
public void remove(Integer source, Long sourceId, Integer userId, Integer subType) {
remove(new LambdaQueryWrapper<AdminMessage>()
.eq(AdminMessage::getSource, source)
.eq(AdminMessage::getSourceId, sourceId)

View File

@ -74,6 +74,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
.last("LIMIT 1")
.one();
String no = lastTicket == null ? TicketUtil.getNextNo("GFGD", null) : TicketUtil.getNextNo("GFGD", lastTicket.getNo());
List<Integer> cqms = deviceTypeService.getCqms(request.getDeviceNo());
GongfuTicket ticket = new GongfuTicket()
.setNo(no)
.setDeviceNo(request.getDeviceNo())
@ -86,6 +87,7 @@ public class GongfuTicketServiceImpl extends ServiceImpl<GongfuTicketMapper, Gon
.setSource(request.getSource())
.setAreaId(request.getAreaId())
.setUserId(userId)
.setCqm(CollectionUtil.get(cqms, 0))
.setThroughput(request.getThroughput())
.setUserPlatform(AppUserUtil.getFrom())
.setCreateTime(LocalDateTime.now());

View File

@ -104,7 +104,7 @@ public class TicketSolutionAuditServiceImpl extends ServiceImpl<TicketSolutionAu
audit.setId(detp.getId());
TicketSolutionAudit entity = getById(detp.getId());
if (!Objects.equals(entity.getUserId(), detp.getUserId()) || Objects.equals(entity.getState(), 0)) {
adminMessageService.remove(0, ticket.getId(), entity.getUserId(), MessageSubType.TicketSolutionAudit.getState());
adminMessageService.remove(0, Long.valueOf(ticket.getId()), entity.getUserId(), MessageSubType.TicketSolutionAudit.getState());
adminMessageService.add(
new AdminMessage()
.setNo(ticket.getNo())

View File

@ -128,13 +128,14 @@
</select>
<select id="searchArea" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName'
SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,a2.`name`)) AS 'areaName'
,IF(tf.id IS NULL, false, true) AS 'followed',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',IF(LENGTH(l.language_value)>0
,l.language_value,p.part_name) AS 'component',t.*
FROM v_all_ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
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 v_device_part p ON t.component_id=p.id
@ -142,7 +143,7 @@
LEFT JOIN v_all_device vd ON t.device_no=vd.device_no
WHERE t.state!=4
<if test="isPrimary!=null">
and vd.agent_code in
AND t.user_platform='app' and vd.agent_code in
<foreach collection="companyCodes" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
@ -156,7 +157,7 @@
<select id="searchFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm'
@ -166,6 +167,7 @@
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
LEFT JOIN device d ON t.device_no=d.device_no and d.data_valid_state=1
LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
@ -179,7 +181,7 @@
<select id="searchAllFromAdmin" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',IF(tf.id IS NULL, false, true) AS 'followed',auc.user_name AS 'cqm'
@ -189,6 +191,7 @@
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
LEFT JOIN device d ON t.device_no=d.device_no and d.data_valid_state=1
LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
@ -202,7 +205,7 @@
<select id="searchFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm'
@ -212,6 +215,7 @@
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
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 t_base_device_type dt ON d.device_type=dt.device_type
@ -225,7 +229,7 @@
<select id="searchAllFromAdminAndFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',true AS 'followed'
,auc.user_name AS 'cqm',t.solve_time AS 'closeTime',auh.user_name AS 'currentHandle'
@ -234,6 +238,7 @@
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
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 t_base_device_type dt ON d.device_type=dt.device_type
@ -258,7 +263,7 @@
<select id="searchByFavouritesId" resultType="com.nflg.mobilebroken.common.pojo.vo.AdminTicketVO">
SELECT t.id,t.`no`,t.title,t.state,t.urgency,p.part_name AS 'component',t.question,t.reason
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),'') AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),IF(u.type=1,a3.area_name,'')) AS 'areaName',IF(u.is_primary,'',a2.`name`) AS 'agentAreaName'
,d.customer_name AS 'customerName',d.agent_name AS 'agentName',IF(t.user_platform='admin',au.user_name,u.`name`) AS 'createBy',t.device_no AS 'deviceNo',t.use_time AS 'useTime'
,t.create_time AS 'createTime',t.update_time AS 'completeTime',di.name AS 'warrantyStatusDesc',d.device_type AS 'deviceType'
,d.model_no AS 'equipmentModel',d.shipment_date AS 'shipmentDate',true AS 'followed',auc.user_name AS 'cqm'
@ -268,6 +273,7 @@
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN admin_user au ON t.user_id=au.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
LEFT JOIN t_base_area a3 ON u.area_id=a3.id
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
<if test="favouritesId>0">
AND tf.favorites_id=#{favouritesId}