feat(service): 添加撤回消息功能并优化工单查询

- 新增 sendTicketMessageWithdrawToApp 方法用于发送撤回消息通知
- 修改 TicketMapper.xml 中的工单查询 SQL,优化查询结果字段顺序
- 在 TicketVO 中添加 deviceAddress 字段用于存储设备地址
- 在 TiketController 中添加对 App 端的撤回消息通知
This commit is contained in:
曹鹏飞 2025-05-05 13:17:52 +08:00
parent afe5d8e108
commit 9162905cbd
4 changed files with 23 additions and 9 deletions

View File

@ -362,6 +362,7 @@ public class TiketController extends ControllerBase {
ticketChatService.withdrawMessage(request.getTicketId(), request.getMessageId());
//推送消息
ssePushService.sendTicketMessageWithdrawToAdmin(request.getTicketId(),request.getMessageId());
ssePushService.sendTicketMessageWithdrawToApp(request.getTicketId(),request.getMessageId());
return ApiResult.success();
}

View File

@ -58,6 +58,16 @@ public class SsePushService {
}
}
public void sendTicketMessageWithdrawToApp(Integer ticketId, String messageId){
try {
TicketMessagePushRequest request=new TicketMessagePushRequest().setTicketId(ticketId).setMessage(buildWithdrawMessage(messageId));
ApiResult<?> result = sendMessage(request,"app");
log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result));
} catch (Exception e) {
log.error("发送消息出错", e);
}
}
private ApiResult<?> sendMessage(TicketMessagePushRequest request, String to) {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForObject(sseUrl + "/sse/" + to + "/push/ticket/message", request, ApiResult.class);

View File

@ -24,6 +24,9 @@ public class TicketVO {
//工单描述
private String description;
//设备地址
private String deviceAddress;
//设备编号
private String deviceNo;

View File

@ -84,8 +84,8 @@
</sql>
<select id="searchMy" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed'
,u.`name` AS 'createBy',t.handle,IF(LENGTH(l.language_value)>0,l.language_value,p.part_name) AS 'component',t.description
SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName',IF(tf.id IS NULL, false, true) AS 'followed'
,u.`name` AS 'createBy',IF(LENGTH(l.language_value)>0,l.language_value,p.part_name) AS 'component',t.*
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
@ -99,9 +99,9 @@
</select>
<select id="searchFollow" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName',true AS 'followed'
SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName',true AS 'followed'
,u.`name` AS 'createBy',true AS 'followed',t.handle,IF(LENGTH(l.language_value)>0
,l.language_value,p.part_name) AS 'component',t.description
,l.language_value,p.part_name) AS 'component',t.*
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
@ -115,9 +115,9 @@
</select>
<select id="searchArea" resultType="com.nflg.mobilebroken.common.pojo.vo.TicketVO">
SELECT t.*,IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName'
,IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy',t.handle,IF(LENGTH(l.language_value)>0
,l.language_value,p.part_name) AS 'component',t.description
SELECT IF(u.is_primary,fun_getPrimaryUserArea(u.company_id),a2.`name`) AS 'areaName'
,IF(tf.id IS NULL, false, true) AS 'followed',u.`name` AS 'createBy',IF(LENGTH(l.language_value)>0
,l.language_value,p.part_name) AS 'component',t.*
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
@ -127,10 +127,10 @@
LEFT JOIN t_base_language_data l ON p.id=l.source_id AND l.language_code=#{language}
LEFT JOIN v_device vd ON t.device_no=vd.device_no
WHERE t.state!=4
<if test="request.isPrimary==false">
<if test="isPrimary==false">
AND FIND_IN_SET(#{companyId},u.company_id) AND vd.agent_code=#{companyCode}
</if>
<if test="request.isPrimary==true">
<if test="isPrimary==true">
AND (u.id=#{userId} OR FIND_IN_SET(u.company_id,#{companyId}))
</if>
<include refid="searchWhereCondition"/>