From f583bb593226b4a267632850684b0053631c55eb Mon Sep 17 00:00:00 2001
From: jzf
Date: Sat, 14 Nov 2026 12:59:44 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8F=AB=E4=B9=98=E8=BF=87?=
=?UTF-8?q?=E7=A8=8B=E4=B8=AD=E7=8A=B6=E6=80=81=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/ruoyi/RuoYiApplication.java | 15 +-
.../dispatch/mapper/AptDutyStateMapper.java | 8 +-
.../apt/dispatch/mapper/AptJcxxMapper.java | 9 +
.../service/AptDispatchScanScheduler.java | 97 +
.../service/AptDispatchScanServiceImpl.java | 32 +-
.../service/AptDutyCommandServiceImpl.java | 17 +-
.../service/AptDutyStateServiceImpl.java | 46 +-
.../service/IAptDispatchScanService.java | 11 +-
.../service/IAptDutyStateService.java | 10 +-
.../duty/controller/DutyJcxxController.java | 103 +
.../apt/duty/domain/DutyCommandRequest.java | 69 +
.../apt/duty/domain/DutyCommandType.java | 85 +
.../com/ruoyi/apt/duty/domain/DutyQuery.java | 54 +
.../apt/duty/domain/DutyStateDeriver.java | 124 ++
.../ruoyi/apt/duty/domain/DutyTaskView.java | 176 ++
.../ruoyi/apt/duty/domain/DutyUiState.java | 57 +
.../ruoyi/apt/duty/mapper/DutyJcxxMapper.java | 40 +
.../realtime/DutyHandshakeInterceptor.java | 127 ++
.../apt/duty/realtime/DutyPushMessage.java | 27 +
.../duty/realtime/DutyPushServiceImpl.java | 201 ++
.../apt/duty/realtime/DutyTransitionPush.java | 150 ++
.../duty/realtime/DutyWebSocketConfig.java | 44 +
.../duty/realtime/DutyWebSocketHandler.java | 150 ++
.../apt/duty/realtime/IDutyPushService.java | 32 +
.../duty/service/DutyCommandServiceImpl.java | 279 +++
.../service/DutyJcxxQueryServiceImpl.java | 150 ++
.../apt/duty/service/IDutyCommandService.java | 26 +
.../duty/service/IDutyJcxxQueryService.java | 27 +
.../test/controller/DutyTestController.java | 138 ++
.../duty/test/domain/DutySipBindCommand.java | 58 +
.../test/domain/DutySipServerCommand.java | 120 ++
.../test/domain/DutyTestCheckinCommand.java | 121 ++
.../duty/test/domain/DutyTestRoomCommand.java | 119 ++
.../apt/duty/test/mapper/DutyTestMapper.java | 55 +
.../duty/test/service/DutyTestService.java | 695 +++++++
.../apt/framework/config/AptProperties.java | 12 +
.../apt/voice/mapper/AptVoiceMapper.java | 8 +
.../voice/service/AptCallFlowServiceImpl.java | 39 +
.../service/AptVoiceEventServiceImpl.java | 4 +-
.../voice/service/IAptCallFlowService.java | 3 +
.../ruoyi/quartz/task/AptDispatchTask.java | 5 +-
.../src/main/resources/apt-defaults.yml | 4 +
.../mapper/apt/AptDutyStateMapper.xml | 49 +-
.../resources/mapper/apt/AptJcxxMapper.xml | 23 +-
.../resources/mapper/apt/AptVoiceMapper.xml | 18 +
.../resources/mapper/apt/DutyJcxxMapper.xml | 87 +
.../resources/mapper/apt/DutyTestMapper.xml | 133 ++
.../dispatch/AptDispatchScanServiceTest.java | 90 +
.../dispatch/AptDutyCommandServiceTest.java | 23 +-
.../apt/dispatch/AptDutyStateServiceTest.java | 58 +-
.../apt/duty/DutyCommandServiceTest.java | 316 +++
.../apt/duty/DutyJcxxQueryServiceTest.java | 204 ++
.../ruoyi/apt/duty/DutyPushServiceTest.java | 142 ++
.../apt/duty/DutyRealtimeContractTest.java | 70 +
.../ruoyi/apt/duty/DutySqlContractTest.java | 95 +
.../ruoyi/apt/duty/DutyStateDeriverTest.java | 120 ++
.../duty/realtime/DutyTransitionPushTest.java | 124 ++
.../realtime/DutyWebSocketHandlerTest.java | 125 ++
.../apt/voice/AptVoiceEventServiceTest.java | 3 +-
dev/RuoYi-Vue2-master/src/api/duty/jcxx.js | 47 +
dev/RuoYi-Vue2-master/src/api/duty/test.js | 100 +
dev/RuoYi-Vue2-master/src/utils/dutyAlarm.js | 171 ++
.../src/utils/dutyRedirect.js | 68 +
dev/RuoYi-Vue2-master/src/utils/dutySocket.js | 198 ++
.../src/views/duty/config.vue | 832 ++++++++
.../src/views/duty/console.vue | 1828 +++++++++++++++++
.../src/views/duty/login.vue | 392 ++++
dev/sql/apt_rev01/31_duty_permissions.sql | 61 +
dev/sql/apt_rev01/33_duty_config_columns.sql | 29 +
dev/sql/apt_rev01/34_duty_test_seed.sql | 95 +
.../apt_rev01/35_duty_config_permissions.sql | 68 +
dev/sql/local_seed/duty_demo_tasks.sql | 96 +
docs/应用端/11-应用端UI开发计划.md | 227 ++
docs/应用端/12-值班员登录与准入鉴权.md | 279 +++
docs/应用端/13-第一轮开发(R1)交付说明.md | 233 +++
docs/应用端/14-第二轮开发(R2)交付说明.md | 163 ++
docs/应用端/15-第三轮开发(R3)交付说明.md | 162 ++
docs/应用端/16-第四轮开发(R4)交付说明.md | 183 ++
docs/应用端/17-测试配置与测试入住(R5).md | 103 +
79 files changed, 10521 insertions(+), 41 deletions(-)
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/service/AptDispatchScanScheduler.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/controller/DutyJcxxController.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyCommandRequest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyCommandType.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyQuery.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyStateDeriver.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyTaskView.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/domain/DutyUiState.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/mapper/DutyJcxxMapper.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyHandshakeInterceptor.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyPushMessage.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyPushServiceImpl.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyTransitionPush.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyWebSocketConfig.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/DutyWebSocketHandler.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/realtime/IDutyPushService.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/service/DutyCommandServiceImpl.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/service/DutyJcxxQueryServiceImpl.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/service/IDutyCommandService.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/service/IDutyJcxxQueryService.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/controller/DutyTestController.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/domain/DutySipBindCommand.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/domain/DutySipServerCommand.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/domain/DutyTestCheckinCommand.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/domain/DutyTestRoomCommand.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/mapper/DutyTestMapper.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/duty/test/service/DutyTestService.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/DutyJcxxMapper.xml
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/DutyTestMapper.xml
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/dispatch/AptDispatchScanServiceTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutyCommandServiceTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutyJcxxQueryServiceTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutyPushServiceTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutyRealtimeContractTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutySqlContractTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/DutyStateDeriverTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/realtime/DutyTransitionPushTest.java
create mode 100644 dev/RuoYi-Vue-master/ruoyi-apt/src/test/java/com/ruoyi/apt/duty/realtime/DutyWebSocketHandlerTest.java
create mode 100644 dev/RuoYi-Vue2-master/src/api/duty/jcxx.js
create mode 100644 dev/RuoYi-Vue2-master/src/api/duty/test.js
create mode 100644 dev/RuoYi-Vue2-master/src/utils/dutyAlarm.js
create mode 100644 dev/RuoYi-Vue2-master/src/utils/dutyRedirect.js
create mode 100644 dev/RuoYi-Vue2-master/src/utils/dutySocket.js
create mode 100644 dev/RuoYi-Vue2-master/src/views/duty/config.vue
create mode 100644 dev/RuoYi-Vue2-master/src/views/duty/console.vue
create mode 100644 dev/RuoYi-Vue2-master/src/views/duty/login.vue
create mode 100644 dev/sql/apt_rev01/31_duty_permissions.sql
create mode 100644 dev/sql/apt_rev01/33_duty_config_columns.sql
create mode 100644 dev/sql/apt_rev01/34_duty_test_seed.sql
create mode 100644 dev/sql/apt_rev01/35_duty_config_permissions.sql
create mode 100644 dev/sql/local_seed/duty_demo_tasks.sql
create mode 100644 docs/应用端/11-应用端UI开发计划.md
create mode 100644 docs/应用端/12-值班员登录与准入鉴权.md
create mode 100644 docs/应用端/13-第一轮开发(R1)交付说明.md
create mode 100644 docs/应用端/14-第二轮开发(R2)交付说明.md
create mode 100644 docs/应用端/15-第三轮开发(R3)交付说明.md
create mode 100644 docs/应用端/16-第四轮开发(R4)交付说明.md
create mode 100644 docs/应用端/17-测试配置与测试入住(R5).md
diff --git a/dev/RuoYi-Vue-master/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/dev/RuoYi-Vue-master/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index d6f9167..cfd0360 100644
--- a/dev/RuoYi-Vue-master/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/dev/RuoYi-Vue-master/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -6,7 +6,7 @@ import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
/**
* 启动程序
- *
+ *
* @author ruoyi
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@@ -14,17 +14,6 @@ public class RuoYiApplication
{
public static void main(String[] args)
{
- // System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
- System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
- " .-------. ____ __ \n" +
- " | _ _ \\ \\ \\ / / \n" +
- " | ( ' ) | \\ _. / ' \n" +
- " |(_ o _) / _( )_ .' \n" +
- " | (_,_).' __ ___(_ o _)' \n" +
- " | |\\ \\ | || |(_,_)' \n" +
- " | | \\ `' /| `-' / \n" +
- " | | \\ / \\ / \n" +
- " ''-' `'-' `-..-' ");
}
-}
+}
\ No newline at end of file
diff --git a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptDutyStateMapper.java b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptDutyStateMapper.java
index 250606f..009149c 100644
--- a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptDutyStateMapper.java
+++ b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptDutyStateMapper.java
@@ -30,18 +30,24 @@ public interface AptDutyStateMapper
int updateAnswered(@Param("gyid") String gyid, @Param("jcid") String jcid,
@Param("fromStates") List fromStates);
- /** 房间入会:仅补记 hjxysj,ryzt 保持 1 叫乘中(待离寓由挂断触发) */
+ /** 房间入会:ryzt -> 5 通话中 + 补记 hjxysj(待离寓由挂断触发) */
int updateJoinConf(@Param("gyid") String gyid, @Param("jcid") String jcid);
/** 1 叫乘中 -> 2 叫乘报警(30s 无入会 / 平板 NO_ANSWER / FAILED) */
int updateCallFailed(@Param("gyid") String gyid, @Param("jcid") String jcid);
+ /** -> 4 离寓报警:超过应离寓时间未离寓(is_lybj=1 + lybjsj,只报一次) */
+ int updateLeaveAlarm(@Param("gyid") String gyid, @Param("jcid") String jcid);
+
/** 人工「停止叫乘」:ryzt 保持,stoped=1 */
int updateStop(@Param("gyid") String gyid, @Param("jcid") String jcid);
/** 人工「复叫」:清 stoped、ryzt->1、记 fjsj_s */
int updateRecall(@Param("gyid") String gyid, @Param("jcid") String jcid);
+ /** 复叫时间到点自动复叫:不校验来源 ryzt,ryzt->1、重置 jcsj_s、记 fjsj_s */
+ int updateAutoRecall(@Param("gyid") String gyid, @Param("jcid") String jcid);
+
/** 人工「强制结束」:finish_jc=1,不动 finish_ly(不置离寓) */
int updateForceFinish(@Param("gyid") String gyid, @Param("jcid") String jcid);
diff --git a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptJcxxMapper.java b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptJcxxMapper.java
index 9f78b4c..39daeb4 100644
--- a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptJcxxMapper.java
+++ b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/java/com/ruoyi/apt/dispatch/mapper/AptJcxxMapper.java
@@ -53,6 +53,15 @@ public interface AptJcxxMapper
@Param("deadline") Date deadline,
@Param("limit") int limit);
+ /**
+ * 应离寓时间已到但未办理离寓(finish_ly=0 且未报过离寓报警)。
+ *
+ * 与叫乘链路解耦:即使叫乘已完成/已报警,只要没离寓就参与判定。
+ */
+ List
*
- * 建议 cron:{@code 0 * * * * ?}(每分钟),由 sys_job 登记、默认停用,
- * 联调与试点时手工启用(见表 13-15 依赖:Quartz 须启用 ScheduleConfig 或显式登记)。
+ * 建议 cron:{@code 0 * * * * ?}(每分钟)。本项目默认由
+ * {@code AptDispatchScanScheduler} 内置调度器驱动(Quartz 未启用),
+ * 若要改用本任务,须把 {@code apt.dispatch.scan-interval-seconds} 置 0 避免双跑。
*
* @author apt-rev01
*/
diff --git a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/apt-defaults.yml b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/apt-defaults.yml
index 881c40a..337fc3b 100644
--- a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/apt-defaults.yml
+++ b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/apt-defaults.yml
@@ -82,6 +82,10 @@ apt:
tablet-task-ttl-seconds: ${APT_TABLET_TASK_TTL_SEC:900}
# 单次扫描批大小
scan-batch-size: ${APT_SCAN_BATCH:50}
+ # 自带扫描周期(秒):叫乘/复叫时间到点发起、30s 无应答报警、应离寓超时报警
+ # 本项目 Quartz 默认停用(ScheduleConfig 注释、sys_job 未启用),故由内置调度器驱动;
+ # 若改用 sys_job 的 aptDispatchTask.scan(),请把本项置 0 避免双跑
+ scan-interval-seconds: ${APT_SCAN_INTERVAL_SEC:60}
tts-template: ${APT_TTS_TEMPLATE:CALL_ROOM}
tts-text: ${APT_TTS_TEXT:请到门口集合,准备乘车}
# ---------------------------------------------------------------------------
diff --git a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptDutyStateMapper.xml b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptDutyStateMapper.xml
index 8b27919..43ededb 100644
--- a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptDutyStateMapper.xml
+++ b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptDutyStateMapper.xml
@@ -49,14 +49,16 @@
-
UPDATE gy_jcxx
- SET hjxysj = COALESCE(hjxysj, NOW(3)),
+ SET ryzt = '5',
+ hjxysj = COALESCE(hjxysj, NOW(3)),
biz_version = biz_version + 1
WHERE gyid = #{gyid} AND jcid = #{jcid} AND deleted = 0
- AND ryzt = '1' AND finish_jc = '0' AND finish_ly = '0'
+ AND ryzt IN ('0','1','2') AND finish_jc = '0' AND finish_ly = '0'
@@ -69,6 +71,18 @@
AND ryzt = '1' AND finish_jc = '0' AND finish_ly = '0'
+
+
+ UPDATE gy_jcxx
+ SET ryzt = '4',
+ is_lybj = '1',
+ lybjsj = NOW(3),
+ biz_version = biz_version + 1
+ WHERE gyid = #{gyid} AND jcid = #{jcid} AND deleted = 0
+ AND finish_ly = '0' AND is_lybj = '0'
+
+
UPDATE gy_jcxx
SET stoped = '1',
@@ -77,9 +91,15 @@
AND ryzt IN ('1','2') AND finish_ly = '0'
+
UPDATE gy_jcxx
SET ryzt = '1',
+ finish_jc = '0',
stoped = '0',
fjsj_s = NOW(3),
+
+ UPDATE gy_jcxx
+ SET ryzt = '1',
+ jcsj_s = NOW(3),
+ fjsj_s = NOW(3),
+ biz_version = biz_version + 1
+ WHERE gyid = #{gyid} AND jcid = #{jcid} AND deleted = 0
+ AND finish_jc = '0' AND finish_ly = '0' AND stoped = '0'
+ AND ryzt <> '5'
diff --git a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptJcxxMapper.xml b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptJcxxMapper.xml
index 127ee9a..b4be4c4 100644
--- a/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptJcxxMapper.xml
+++ b/dev/RuoYi-Vue-master/ruoyi-apt/src/main/resources/mapper/apt/AptJcxxMapper.xml
@@ -14,7 +14,9 @@
j.id, j.jcid, j.jlid, j.cc, j.jch, j.ryid, j.xm AS rymc, j.fjh,
j.kcsj, j.jcsj, j.jcsj_s AS jcsjS, j.hjxysj, j.jcbjsj_s AS jcbjsjS,
- j.fjsj_s AS fjsjS, j.lybjsj, j.sjlysj,
+
+ j.fjsj, j.fjsj_s AS fjsjS, j.ylysj, j.lybjsj, j.sjlysj,
j.ryzt,
CASE j.ryzt
WHEN '0' THEN '待叫乘'
@@ -151,10 +153,18 @@
'CALL_FAILED', '无应答转叫乘报警'
FROM gy_jcxx j WHERE j.gyid = #{gyid} AND j.jcid = #{jcid} AND j.deleted = 0 AND j.jcbjsj_s IS NOT NULL
UNION ALL
+ SELECT CAST(UNIX_TIMESTAMP(j.fjsj) * 1000 AS SIGNED), j.fjsj,
+ 'RE_CALL_PLANNED', CONCAT('计划复叫时刻 ', DATE_FORMAT(j.fjsj, '%H:%i:%s'))
+ FROM gy_jcxx j WHERE j.gyid = #{gyid} AND j.jcid = #{jcid} AND j.deleted = 0 AND j.fjsj IS NOT NULL
+ UNION ALL
SELECT CAST(UNIX_TIMESTAMP(j.fjsj_s) * 1000 AS SIGNED), j.fjsj_s,
'RE_CALL', '复叫'
FROM gy_jcxx j WHERE j.gyid = #{gyid} AND j.jcid = #{jcid} AND j.deleted = 0 AND j.fjsj_s IS NOT NULL
UNION ALL
+ SELECT CAST(UNIX_TIMESTAMP(j.ylysj) * 1000 AS SIGNED), j.ylysj,
+ 'LEAVE_DUE', CONCAT('应离寓时刻 ', DATE_FORMAT(j.ylysj, '%H:%i:%s'))
+ FROM gy_jcxx j WHERE j.gyid = #{gyid} AND j.jcid = #{jcid} AND j.deleted = 0 AND j.ylysj IS NOT NULL
+ UNION ALL
SELECT CAST(UNIX_TIMESTAMP(j.hjxysj) * 1000 AS SIGNED), j.hjxysj,
'ANSWERED', '应答完成叫乘'
FROM gy_jcxx j WHERE j.gyid = #{gyid} AND j.jcid = #{jcid} AND j.deleted = 0 AND j.hjxysj IS NOT NULL
@@ -256,6 +266,17 @@
LIMIT #{limit}
+
+
+
+
+
+