From f0a09ee996ab2605869844d6a3d812709e2bf0fa Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 16 十月 2026 16:07:25 +0800
Subject: [PATCH] 任务模块、电话模块
---
ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneFacade.java | 170 +
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackVO.java | 2
smartor/src/main/java/com/smartor/service/IPatArchivetagService.java | 2
smartor/src/main/java/com/smartor/domain/HeTaskVO.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleDetail.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysDeptPort.java | 31
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleMapper.java | 4
smartor/src/main/resources/mapper/smartor/PatHetaskRelevanceMapper.xml | 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskoperController.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskCotinueCountVO.java | 2
smartor/src/main/java/com/smartor/domain/PatArchiveOthreInfo.java | 1
ruoyi-quartz/pom.xml | 13
ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java | 3
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTrace.java | 2
ruoyi-phone/src/main/java/com/ruoyi/phone/PhoneModule.java | 46
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailTraceServiceImpl.java | 25
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java | 19
ruoyi-task/src/main/java/com/ruoyi/task/domain/IvrTaskVisitResult.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailVO.java | 2
ruoyi-task/src/test/java/com/ruoyi/task/config/TaskSwitchCheck.java | 153 +
smartor/src/main/java/com/smartor/mapper/PatArchivecontactMapper.java | 2
smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java | 6
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskPreachform.java | 2
smartor/src/main/java/com/smartor/domain/AppendPatientsReq.java | 1
smartor/src/main/resources/mapper/smartor/PatArchivetagMapper.xml | 10
ruoyi-phone/src/main/java/com/ruoyi/phone/controller/ShPhoneController.java | 56
smartor/src/main/java/com/smartor/service/ISvyTaskSingleService.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleDetailMapper.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailTraceService.java | 9
ruoyi-task/src/main/java/com/ruoyi/task/common/ScheduleSubtaskBuilder.java | 17
ruoyi-task/src/main/java/com/ruoyi/task/config/TaskProperties.java | 35
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdeptServiceImpl.java | 8
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSubtaskRecordPort.java | 47
smartor/src/main/java/com/smartor/service/impl/SubtaskSmsServiceImpl.java | 4
pom.xml | 20
ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/SatisfactionSubtaskService.java | 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskRecordController.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskmedical.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskScriptCount.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRecord.java | 2
smartor/src/main/resources/mapper/smartor/PatArchivecontactMapper.xml | 8
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java | 2
ServiceTaskHandler.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskOptionMatchApiImpl.java | 42
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskExport.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java | 310 ++
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml | 76
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskoperService.java | 4
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java | 2
smartor/src/main/java/com/smartor/service/IPatMedInhospService.java | 3
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailTraceMapper.xml | 10
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdept.java | 2
ruoyi-task/src/main/resources/mapper/task/ServiceOutPathMapper.xml | 10
smartor/src/main/java/com/smartor/service/impl/PatTaskRelevanceServiceImpl.java | 2
smartor/src/main/java/com/smartor/mapper/PatArchivetagMapper.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubTaskDetailReq.java | 3
smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java | 9
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/TaskSendTimeVO.java | 2
smartor/src/main/java/com/smartor/service/IServicePhoneService.java | 3
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsResponse.java | 2
ruoyi-phone/src/main/java/com/ruoyi/phone/service/IPhoneService.java | 78
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDiagname.java | 2
smartor/pom.xml | 11
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceTaskmedicalVO.java | 2
smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/domain/Question.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskRule.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskRuleMapper.java | 4
smartor/src/main/java/com/smartor/statemachine/InhospStateMachineExample.java | 1
smartor/src/main/java/com/smartor/service/IPatTaskRelevanceService.java | 2
ruoyi-task/pom.xml | 98
smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceOutPathMapper.java | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java | 12
ruoyi-phone/src/test/java/com/ruoyi/phone/config/PhoneSwitchCheck.java | 192 +
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatTaskRelevanceController.java | 3
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCount.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailServiceImpl.java | 17
smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml | 8
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdeptService.java | 4
ruoyi-template/src/main/java/com/ruoyi/template/service/impl/IvrLibaExtemplatescriptServiceImpl.java | 17
smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java | 12
ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleMapper.xml | 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServicePhoneController.java | 29
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java | 9
ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/api/TaskApi.java | 31
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTask.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysConfigPort.java | 63
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskMapper.java | 4
ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneProperties.java | 35
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskTemplateVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdeptController.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/TaskSubtaskApiImpl.java | 97
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java | 2109 -------------
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PullTaskVO.java | 2
smartor/src/main/java/com/smartor/domain/SvyTaskVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskArchivePort.java | 60
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailService.java | 8
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java | 24
ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdeptMapper.java | 4
smartor/src/main/java/com/smartor/mapper/ShardingMapper.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskPreachformPort.java | 79
ruoyi-task/src/main/java/com/ruoyi/task/mapper/IvrTaskVisitResultMapper.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/domain/PatTaskRelevance.java | 2
smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java | 4
smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java | 2
smartor/src/main/java/com/smartor/domain/HeTaskSingleVO.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceOutPathService.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/api/TaskSubtaskApi.java | 113
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskScheduleService.java | 8
ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneAvailabilityInterceptor.java | 59
smartor/src/main/java/com/smartor/service/impl/PatFilterlistServiceImpl.java | 6
ruoyi-othervisit/src/main/java/com/ruoyi/othervisit/service/OperationVisitTaskService.java | 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdiagController.java | 4
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailMapper.xml | 20
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java | 1
smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java | 2
smartor/src/main/java/com/smartor/service/impl/ServicPhoneServiceImpl.java | 5
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java | 3
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskIsAbnormalStatistic.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskmedicalServiceImpl.java | 10
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java | 4
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java | 5
ruoyi-task/src/main/java/com/ruoyi/task/config/TaskAvailabilityInterceptor.java | 59
smartor/src/main/java/com/smartor/service/impl/PatArchivetagServiceImpl.java | 2
smartor/src/main/java/com/smartor/domain/PatUpInfoVO.java | 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskController.java | 6
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskServiceImpl.java | 44
smartor/src/main/java/com/smartor/domain/PatArchiveVO.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskScheduleServiceImpl.java | 28
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskscheduleController.java | 6
smartor/src/main/java/com/smartor/service/IPatArchiveService.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/TaskModule.java | 33
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java | 4
smartor/src/main/java/com/smartor/service/IServiceExternalService.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/SendMagParam.java | 2
ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/domain/row/SatisfactionTaskRow.java | 2
ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneWebConfig.java | 133
ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java | 6
ruoyi-task/src/main/java/com/ruoyi/task/config/TaskSwitch.java | 207 +
smartor/src/main/java/com/smartor/service/IServiceTaskRuleService.java | 2
ruoyi-template/src/main/java/com/ruoyi/template/service/IIvrLibaExtemplatescriptService.java | 15
smartor/src/main/java/com/smartor/service/impl/PatArchivecontactServiceImpl.java | 2
ruoyi-task/src/main/resources/mapper/task/IvrTaskVisitResultMapper.xml | 10
ruoyi-task/src/main/resources/mapper/task/ServiceTaskdeptMapper.xml | 12
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskFtpPort.java | 28
smartor/src/main/java/com/smartor/domain/PatArchivetagAndPatientInfo.java | 2
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallReqYQVO.java | 2
smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java | 7
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdiagService.java | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskSingleController.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysUserDeptPort.java | 30
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskoperMapper.java | 4
ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneApi.java | 96
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/TransferDeptVO.java | 3
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskStatistic.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/DetailTraceDealVO.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java | 4
smartor/src/main/java/com/smartor/service/IPatArchivecontactService.java | 2
smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskDetailTraceVO.java | 4
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackSHVO.java | 2
smartor/src/main/java/com/smartor/service/impl/SvyTaskServiceImpl.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskoper.java | 2
smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java | 2
smartor/src/main/java/com/smartor/domain/CommonTaskcallMQ.java | 1
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 18
ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java | 160
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivetagController.java | 2
ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/SatisfactionSubtaskServiceImpl.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScriptQues.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetail.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskmedicalMapper.java | 6
ruoyi-phone/pom.xml | 75
ruoyi-phone/src/main/java/com/ruoyi/phone/service/impl/PhoneServiceImpl.java | 2056 +++++++++++++
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskService.java | 6
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackYQVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java | 2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/config/TaskWebConfig.java | 106
ruoyi-task/src/main/resources/mapper/task/ServiceTaskRuleMapper.xml | 12
ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskStatApiImpl.java | 42
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskoperServiceImpl.java | 8
smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml | 8
ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceTaskController.java | 12
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskRuleController.java | 2
ruoyi-task/src/main/resources/mapper/task/ServiceTaskdiagMapper.xml | 12
ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/mapper/SatisfactionMapper.java | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivecontactController.java | 2
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/QuestionMessage.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailMapper.java | 10
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTarget.java | 2
ruoyi-task/src/main/resources/mapper/task/ServiceTaskMapper.xml | 12
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java | 2
ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml | 4
smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java | 1
ruoyi-phone/src/main/java/com/ruoyi/phone/controller/PhoneCallbackController.java | 116
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java | 13
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java | 14
smartor/src/main/java/com/smartor/mapper/PatTaskRelevanceMapper.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceOutPath.java | 3
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailTraceMapper.java | 8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java | 2
smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java | 1
smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml | 4
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskmedicalService.java | 6
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceOutPathServiceImpl.java | 12
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java | 6
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/ServiceTaskMatchApiImpl.java | 176 +
smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/api/TaskFacade.java | 69
ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/DetailTraceDealDTO.java | 2
smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java | 66
ruoyi-task/src/main/java/com/ruoyi/task/domain/PatArchiveSrmVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java | 1
ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneSwitch.java | 207 +
ruoyi-task/src/main/resources/mapper/task/ServiceTaskmedicalMapper.xml | 12
ruoyi-task/src/main/resources/mapper/task/ServiceTaskoperMapper.xml | 10
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsRequest.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleVO.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/ServiceSubtaskDetailDTO.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskVO.java | 4
ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdiagMapper.java | 4
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java | 9
ruoyi-admin/pom.xml | 20
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallResultYQVO.java | 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java | 6
ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallRecordVO.java | 2
smartor/src/main/java/com/smartor/service/impl/ServiceTaskRuleServiceImpl.java | 4
smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java | 1
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdiagServiceImpl.java | 8
/dev/null | 88
ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleDetailMapper.xml | 10
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdiag.java | 2
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskSchedule.java | 2
245 files changed, 6,090 insertions(+), 2,731 deletions(-)
diff --git a/ServiceTaskHandler.java b/ServiceTaskHandler.java
index 2c50ba3..5292f3f 100644
--- a/ServiceTaskHandler.java
+++ b/ServiceTaskHandler.java
@@ -1,4 +1,5 @@
private boolean sendLishuiSms(ServiceSubtask serviceSubtask, SendMagParam sendMagParam) {
+import com.ruoyi.task.domain.ServiceSubtask;
Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid());
if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
diff --git a/pom.xml b/pom.xml
index cf7c0f6..cebbefb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -234,6 +234,20 @@
<version>${ruoyi.version}</version>
</dependency>
+ <!-- 浠诲姟妯″潡锛坰ervice_task / service_subtask锛涘彧渚濊禆 ruoyi-common锛屼笉渚濊禆 smartor锛� -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-task</artifactId>
+ <version>${ruoyi.version}</version>
+ </dependency>
+
+ <!-- 鐢佃瘽妯″潡锛堜笂娴�/闆ㄧ划/涓夋眹澶栧懠鍥炶皟涓庝换鍔℃媺鍙栵紱渚濊禆 ruoyi-task 鍙栦换鍔℃暟鎹紝涓嶄緷璧� smartor锛� -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-phone</artifactId>
+ <version>${ruoyi.version}</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
@@ -252,7 +266,11 @@
<module>ruoyi-outpatientvisit</module>
<module>ruoyi-othervisit</module>
<module>ruoyi-template</module>
- <!-- smartor 渚濊禆 ruoyi-satisfaction / ruoyi-inhospvisit / ruoyi-publicity / ruoyi-outpatientvisit / ruoyi-othervisit / ruoyi-template锛屽繀椤绘帓鏈�鍚� -->
+ <!-- 浠诲姟妯″潡锛氬彧渚濊禆 ruoyi-common锛屽繀椤绘帓鍦ㄤ緷璧栧畠鐨� smartor / ruoyi-quartz 涔嬪墠 -->
+ <module>ruoyi-task</module>
+ <!-- 鐢佃瘽妯″潡锛氫緷璧� ruoyi-task锛堜换鍔℃暟鎹級涓� ruoyi-template锛堟ā鏉胯瘽鏈級锛屽繀椤绘帓鍦� ruoyi-task 涔嬪悗銆乻martor 涔嬪墠 -->
+ <module>ruoyi-phone</module>
+ <!-- smartor 渚濊禆 ruoyi-satisfaction / ruoyi-inhospvisit / ruoyi-publicity / ruoyi-outpatientvisit / ruoyi-othervisit / ruoyi-template / ruoyi-task / ruoyi-phone锛屽繀椤绘帓鏈�鍚� -->
<module>smartor</module>
</modules>
<packaging>pom</packaging>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 073a809..45151ee 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -112,6 +112,26 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-publicity</artifactId>
</dependency>
+ <!--
+ 浠诲姟妯″潡锛坰ervice_task / service_subtask锛夈��
+ 鈿狅笍 杩欓噷銆愬繀椤绘樉寮忓0鏄庛�戯紝涓嶈兘鍙潬 smartor 浼犻�掞細
+ 婊℃剰搴﹂偅娆″氨鏄�"鏍� pom 娉ㄥ唽浜嗘ā鍧楋紝浣嗘病鏈変换浣曟ā鍧楃洿鎺ヤ緷璧栧畠"锛�
+ 瀵艰嚧妯″潡鏍规湰娌¤鎵撹繘 smartor-suifang.jar锛屾柊鎼殑绔偣鍏ㄩ儴涓嶅彲杈俱��
+ 鏈ā鍧楄鏀� Controller 涓� Mapper XML锛屾墍浠ョ洿鎺ヤ緷璧栥��
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-task</artifactId>
+ </dependency>
+ <!--
+ 鐢佃瘽妯″潡锛堜笂娴�/闆ㄧ划/涓夋眹澶栧懠鍥炶皟銆佷换鍔℃媺鍙栵級銆�
+ 鈿狅笍 鍚屾牱銆愬繀椤绘樉寮忓0鏄庛�戯細鏈ā鍧楄鎶� ruoyi-phone 鎵撹繘 smartor-suifang.jar锛�
+ 鍚﹀垯鏂版惉鐨勭數璇濈鐐癸紙浠嶆寕鍦� /smartor/serviceSubtask/** 涓庡師 /smartor/shphone/** 涓婏級涓嶅彲杈俱��
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-phone</artifactId>
+ </dependency>
<!-- https://mvnrepository.com/artifact/net.glxn.qrgen/javase -->
<dependency>
<groupId>net.glxn.qrgen</groupId>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
index a910ec0..1eeec66 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -18,10 +18,8 @@
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IBaseSmsaccountService;
-import com.smartor.service.IServiceOutPathService;
import com.smartor.service.IServiceSubtaskRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -41,6 +39,17 @@
import com.ruoyi.template.domain.HeLibrary;
import com.ruoyi.template.api.TemplateFacade;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.domain.SendMagParam;
@Slf4j
@Component//鐩戝惉姝ら槦鍒�
public class RedisMqReceiver extends KeyExpirationEventMessageListener {
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
index f11f6b6..b55411c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -12,8 +12,6 @@
import com.ruoyi.message.wechat.WechatSendRequest;
import com.ruoyi.message.wechat.WechatSenderFactory;
import com.smartor.domain.*;
-import com.smartor.service.IServiceOutPathService;
-import com.smartor.service.IServiceSubtaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -27,6 +25,10 @@
import java.io.UnsupportedEncodingException;
import java.util.Date;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.service.IServiceSubtaskService;
/**
* 鐭ヤ俊鎺ュ彛锛堝澶栫煭淇� / 寰俊鍏紬鍙峰彂閫佸叆鍙o級銆�
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java
index c41bfa0..1e58ded 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java
@@ -7,7 +7,6 @@
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.IvrTaskVisitResult;
import com.smartor.service.IIvrTaskVisitResultService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -18,6 +17,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
/**
* 浠诲姟闅忚缁撴灉Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
index 34ac743..f8aac4c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchiveController.java
@@ -31,6 +31,7 @@
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎮h�呮。妗圕ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivecontactController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivecontactController.java
index 46438fc..088761a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivecontactController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivecontactController.java
@@ -9,7 +9,6 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.PatArchivecontact;
import com.smartor.service.IPatArchivecontactService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -19,6 +18,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
/**
* 鎮h�呰仈绯绘柟寮廋ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivetagController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivetagController.java
index 786a821..7727e05 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivetagController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatArchivetagController.java
@@ -5,7 +5,6 @@
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.core.domain.entity.SysUser;
-import com.smartor.domain.PatArchivetag;
import com.smartor.service.IPatArchivetagService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -23,6 +22,7 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堟爣绛綜ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatTaskRelevanceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatTaskRelevanceController.java
index 7a83c2f..d157571 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatTaskRelevanceController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatTaskRelevanceController.java
@@ -6,8 +6,6 @@
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.PatTaskRelevance;
-import com.smartor.domain.PatTaskRelevance;
import com.smartor.service.IPatTaskRelevanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -15,6 +13,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 鎮h�呬笌瀹f暀浠诲姟鍏宠仈Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
index d6b2004..60490bd 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
@@ -10,7 +10,6 @@
import com.mchange.v2.uid.UidUtils;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.config.ServerConfig;
-import com.smartor.domain.Question;
import com.ruoyi.template.domain.SvyLibTemplate;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@@ -34,6 +33,7 @@
import java.io.StringWriter;
import java.net.URI;
import java.util.*;
+import com.ruoyi.task.domain.Question;
@Slf4j
@Api(description = "闂嵎浜岀淮鐮�")
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
index eb956a2..2045905 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceExternalController.java
@@ -9,7 +9,6 @@
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
import com.smartor.service.IServiceExternalService;
-import com.smartor.service.IServiceSubtaskDetailService;
import com.smartor.service.ISvyTaskSingleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
index 1065ee7..8490244 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceOutPathController.java
@@ -11,13 +11,8 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.smartor.domain.BaseOrganization;
-import com.smartor.domain.PatArchive;
-import com.smartor.domain.ServiceOutPath;
-import com.smartor.domain.ServiceTask;
import com.smartor.service.IBaseOrganizationService;
import com.smartor.service.IPatArchiveService;
-import com.smartor.service.IServiceOutPathService;
-import com.smartor.service.IServiceTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
@@ -29,6 +24,10 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.service.IServiceTaskService;
/**
* 涓婚敭Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServicePhoneController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServicePhoneController.java
index af5416f..a8a78c4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServicePhoneController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServicePhoneController.java
@@ -3,11 +3,7 @@
import com.ruoyi.common.core.controller.BaseController;
import com.smartor.domain.OutboundConfigAddReqVO;
import com.smartor.domain.OutboundInstanceResVO;
-import com.smartor.domain.PhoneCallBackSHVO;
-import com.smartor.domain.PhoneCallReqYQVO;
-import com.smartor.domain.PhoneCallResultYQVO;
import com.smartor.service.IServicePhoneService;
-import com.smartor.service.IServiceSubtaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -21,6 +17,13 @@
/**
* 涓夋眹鐢佃瘽娴佺▼鏈嶅姟 Controller
+ * <p>
+ * 鈿狅笍 璇ュ墠缂�涓嬬殑<b>鐢佃瘽娴佺▼绔偣</b>锛坽@code /smartor/shphone/getFirstQues}銆�
+ * {@code /smartor/shphone/processResust}锛夊凡闅忕數璇濇ā鍧楀寲鎼繘 {@code ruoyi-phone}
+ * 鐨� {@code ShPhoneController}锛圲RL 淇濇寔涓嶅彉锛屼笁姹囧钩鍙版棤闇�鏀瑰洖璋冨湴鍧�锛夈��
+ * <p>
+ * 杩欓噷鍙暀 {@code /smartor/shphone/addOutboundInstance}锛氬畠渚濊禆 smartor 渚х殑澶栧懠瀹炰緥閰嶇疆
+ * 锛坽@code IServicePhoneService}锛夛紝灞炰簬"澶栧懠瀹炰緥寮�閫�"鑰岄潪鐢佃瘽浼氳瘽閾捐矾锛屼笉褰掔數璇濇ā鍧椼��
*
* @author ls
* @date 2026-08-26
@@ -30,27 +33,9 @@
@RestController
@RequestMapping("/smartor/shphone")
public class ServicePhoneController extends BaseController {
- @Autowired
- private IServiceSubtaskService serviceSubtaskService;
@Autowired
private IServicePhoneService iServicePhoneService;
-
- @ApiOperation("鏍规嵁鐢佃瘽鍙风爜,鑾峰彇棣栦釜闂")
- @PostMapping("/getFirstQues")
- public Map<String, Object> getFirstQues(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
- log.info("鏍规嵁鐢佃瘽鍙风爜,鑾峰彇棣栦釜闂锛焮}", phoneCallReqYQVO);
- PhoneCallBackSHVO phoneCallBackSHVO = serviceSubtaskService.getFirstQues(phoneCallReqYQVO);
- return success(phoneCallBackSHVO);
- }
-
- @ApiOperation("涓夋眹 ASR 缁撴灉澶勭悊")
- @PostMapping("/processResust")
- public Map<String, Object> processResust(@RequestBody PhoneCallResultYQVO resultYQVO) {
- log.info("涓夋眹 ASR 缁撴灉澶勭悊 (涓夋眹)锛焮}", resultYQVO);
- PhoneCallBackSHVO phoneCallBackSHVO = serviceSubtaskService.processResust(resultYQVO);
- return success(phoneCallBackSHVO);
- }
@ApiOperation("鏂板澶栧懠瀹炰緥閰嶇疆")
@PostMapping("/addOutboundInstance")
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java
index e0a6bed..2571c89 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailController.java
@@ -11,9 +11,6 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.service.IServiceSubtaskDetailService;
-import com.smartor.service.IServiceSubtaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
@@ -26,6 +23,12 @@
import java.util.stream.Collectors;
import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailService;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
/**
* 璇煶浠诲姟缁撴灉鏄庣粏Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java
index be3eba3..f4c54c7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java
@@ -7,10 +7,10 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.ServiceSubtaskDetailTrace;
-import com.smartor.domain.VO.DetailTraceDealVO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.DetailTraceDealVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -21,6 +21,10 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.DetailTraceDealVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
/**
* 闅忚浠诲姟寮傚父璁板綍璺熻釜Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java
index 4294496..c6fa98e 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java
@@ -21,10 +21,10 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.ServiceSubtaskPreachform;
import com.smartor.service.IServiceSubtaskPreachformService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慍ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskRecordController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskRecordController.java
index 483beae..b3d3d05 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskRecordController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskRecordController.java
@@ -7,7 +7,6 @@
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.ServiceSubtaskRecord;
import com.smartor.service.IServiceSubtaskRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -15,6 +14,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慍ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskRuleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskRuleController.java
index 701fc30..4fd1e94 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskRuleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskRuleController.java
@@ -25,10 +25,10 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.ServiceTaskRule;
import com.smartor.service.IServiceTaskRuleService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.task.domain.ServiceTaskRule;
/**
* 浠诲姟鎵ц瑙勫垯Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdeptController.java
index 64920ea..412830f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdeptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdeptController.java
@@ -6,14 +6,14 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.ServiceTaskdept;
-import com.smartor.service.IServiceTaskdeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.service.IServiceTaskdeptService;
/**
* 妯℃澘绉戝鍏宠仈Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdiagController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdiagController.java
index 9a58888..a278c3c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdiagController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskdiagController.java
@@ -24,10 +24,10 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.ServiceTaskdiag;
-import com.smartor.service.IServiceTaskdiagService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.service.IServiceTaskdiagService;
/**
* 妯℃澘绉戝鍏宠仈Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java
index ce1e181..2235ba7 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java
@@ -7,9 +7,6 @@
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.ServiceTaskmedical;
-import com.smartor.domain.VO.ServiceTaskmedicalVO;
-import com.smartor.service.IServiceTaskmedicalService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +14,9 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.VO.ServiceTaskmedicalVO;
+import com.ruoyi.task.service.IServiceTaskmedicalService;
/**
* 浠诲姟鑽搧鍏宠仈Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskoperController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskoperController.java
index b3a5392..0832d66 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskoperController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskoperController.java
@@ -22,10 +22,10 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.ServiceTaskoper;
-import com.smartor.service.IServiceTaskoperService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.service.IServiceTaskoperService;
/**
* 妯℃澘绉戝鍏宠仈Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskscheduleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskscheduleController.java
index 273095e..01f51fd 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskscheduleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskscheduleController.java
@@ -11,11 +11,7 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDeptService;
import com.smartor.domain.Icd10;
-import com.smartor.domain.ServiceTaskSchedule;
-import com.smartor.domain.ServiceTaskdiag;
import com.smartor.service.IIcd10Service;
-import com.smartor.service.IServiceTaskScheduleService;
-import com.smartor.service.IServiceTaskdiagService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
@@ -30,6 +26,8 @@
import java.util.Map;
import static com.alibaba.fastjson2.JSONValidator.Type.Array;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.service.IServiceTaskScheduleService;
/**
* 闅忚浠诲姟缁勫叧鑱擟ontroller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java
index 218c099..d4d6a90 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTelInfoController.java
@@ -2,7 +2,6 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.smartor.domain.smsVO;
-import com.smartor.service.IServiceTaskoperService;
import com.smartor.service.IServiceTelInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
index b1ee252..2b45ff0 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTemplateScriptController.java
@@ -9,7 +9,6 @@
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.ServiceSubtaskCountReq;
import com.ruoyi.template.domain.SvyLibTemplateScript;
import com.smartor.service.ISvyLibTemplateScriptService;
import io.swagger.annotations.ApiOperation;
@@ -21,6 +20,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
/**
* 妯℃澘闂嵎棰樼洰Controller
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskController.java
index b13d88d..19a0609 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskController.java
@@ -13,8 +13,6 @@
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.service.IServiceSubtaskService;
import com.smartor.service.ISvyTaskService;
import com.smartor.service.ISvyTaskSingleService;
import io.swagger.annotations.Api;
@@ -31,6 +29,10 @@
import java.util.stream.Collectors;
import com.smartor.domain.SvyTask;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.domain.ServiceTaskScriptQues;
/**
* 闂嵎浠诲姟锛堜换鍔★級Controller
*
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskSingleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskSingleController.java
index 60d3688..eefc91a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskSingleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTaskSingleController.java
@@ -16,6 +16,8 @@
import com.smartor.domain.SvyTaskSingleVO;
import com.smartor.domain.SvyTaskVO;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTaskVO;
/**
* 鍗曚竴浠诲姟锛堥棶鍗凤級Controller
*
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java
index 8f7c845..117c81a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java
@@ -16,11 +16,6 @@
import com.ruoyi.system.service.ISysUserService;
import com.smartor.domain.SSOTokenResponse;
import com.smartor.domain.SSOUserInfo;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.VO.ServiceSubtaskVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.service.IServiceSubtaskService;
-import com.smartor.service.impl.ServiceSubtaskServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +36,7 @@
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
+import com.ruoyi.task.service.IServiceSubtaskService;
/**
* SSO鍗曠偣鐧诲綍鎺у埗鍣�
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
index 6f422a5..2067fc8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/task/PhoneTask.java
@@ -18,6 +18,9 @@
import com.ruoyi.template.domain.IvrTaskTemplateScriptVO;
import com.ruoyi.template.domain.IvrTaskTemplateVO;
+import com.ruoyi.task.domain.ServiceSubtask;
+// 鐢佃瘽浼氳瘽瀵硅薄宸查殢鐢佃瘽妯″潡鍖栨惉杩� ruoyi-phone锛圧edis 閲岀紦瀛樼殑浠嶆槸杩欎釜绫伙紝渚� PhoneServiceImpl 娑堣垂锛�
+import com.ruoyi.phone.domain.QuestionMessage;
public class PhoneTask implements Runnable {
private ServiceSubtask ivrTaskSingle;
private List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVO;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
index c0e379d..be277c9 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/MQTest.java
@@ -7,7 +7,6 @@
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.http.HttpUtils;
-import com.smartor.domain.ServiceSubtaskDetail;
import com.smartor.domain.ThiedInhospInfo;
import com.smartor.service.IHNGatherPatArchiveService;
import io.swagger.models.auth.In;
diff --git a/ruoyi-othervisit/src/main/java/com/ruoyi/othervisit/service/OperationVisitTaskService.java b/ruoyi-othervisit/src/main/java/com/ruoyi/othervisit/service/OperationVisitTaskService.java
index ddd305f..027a325 100644
--- a/ruoyi-othervisit/src/main/java/com/ruoyi/othervisit/service/OperationVisitTaskService.java
+++ b/ruoyi-othervisit/src/main/java/com/ruoyi/othervisit/service/OperationVisitTaskService.java
@@ -20,6 +20,7 @@
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎵嬫湳闅忚缂栨帓锛氭壂鎻忔湭澶勭悊鐨勬墜鏈褰� 鈫� 鎸�<b>鎵嬫湳缂栫爜</b>鍖归厤闀挎湡浠诲姟 鈫� 鍐欏瓙浠诲姟銆�
diff --git a/ruoyi-phone/pom.xml b/ruoyi-phone/pom.xml
new file mode 100644
index 0000000..e42306b
--- /dev/null
+++ b/ruoyi-phone/pom.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>ruoyi</artifactId>
+ <groupId>com.ruoyi</groupId>
+ <version>3.8.5</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>ruoyi-phone</artifactId>
+
+ <description>
+ 鐢佃瘽妯″潡锛氫笂娴凤紙phoneCallBack锛�/ 闆ㄧ划锛坧honeCallBackYQ銆乼askPull銆乺ecordAccept锛�/ 涓夋眹锛坓etFirstQues銆�
+ processResust锛変笁鏉″鍛奸�氶亾鐨勫叏閮ㄧ鐐逛笌涓氬姟瀹炵幇鐨勫敮涓�褰掑睘澶勩��
+
+ 鏈ā鍧椼�愪笉鑷甫 Mapper銆戯細service_subtask / service_subtask_detail / service_task 绛夎〃褰� ruoyi-task锛�
+ 鎸夈�岃法妯″潡鏁版嵁璁块棶鍘熷垯銆嶏紙doc/璺ㄦā鍧楁暟鎹闂師鍒欎笌鏀跺彛鏂规.md锛夊啓鎿嶄綔鍙兘鐢卞綊灞炴ā鍧楁墽琛岋紝
+ 鏁呯數璇濅晶涓�寰嬬粡 ruoyi-task 鐨� com.ruoyi.task.api.TaskSubtaskApi 鍙栨暟涓庤惤搴擄紱
+ 妯℃澘璇濇湳锛坕vr_task_template* / ivr_liba_extemplatescript / svy_lib_script_category锛夌粡
+ ruoyi-template 鐨� service 鎺ュ彛璇诲彇銆�
+ 鍏跺畠妯″潡闇�瑕佺數璇濊兘鍔涘彧鑳介�氳繃 com.ruoyi.phone.api.PhoneFacade锛堟ā鍧楅棬闈級璋冪敤銆�
+ 鏀寔閫氳繃 sys_config 鍙傛暟琛ㄩ噷鐨� phone.enabled 鏁翠綋鍏抽棴锛堣繍琛屾椂璇诲彇锛屾敼瀹屾渶澶� 10 绉掔敓鏁堬級銆�
+
+ 渚濊禆鏂瑰悜锛歳uoyi-phone -> ruoyi-task / ruoyi-template / ruoyi-common
+ 锛堢粷涓嶄緷璧� smartor / ruoyi-system / ruoyi-framework / ruoyi-admin锛屽惁鍒欏舰鎴愬惊鐜緷璧栵紝Maven 鐩存帴鏋勫缓澶辫触锛夈��
+ </description>
+
+ <dependencies>
+ <!-- 閫氱敤宸ュ叿锛欱aseController / RedisCache / StringUtils / PhoneUtils / HttpUtil / RSAPublicKeyExample
+ 鍚屾椂浼犻�掑甫鍏� pagehelper(鍚� mybatis)銆乻wagger-annotations銆乧ommons-lang3銆乯ackson 绛� -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
+ </dependency>
+
+ <!--
+ 浠诲姟妯″潡锛氱數璇濇祦绋嬬殑"鏁版嵁闈�"鍏ㄥ湪杩欓噷 鈥斺��
+ 路 com.ruoyi.task.api.TaskSubtaskApi 瀛愪换鍔�/鏄庣粏/璁块棶缁撴灉/寮傚父璺熻釜鐨勮鍐�
+ 路 com.ruoyi.task.api.spi.TaskPreachformPort / TaskFtpPort / TaskSysConfigPort
+ 路 com.ruoyi.task.domain.* 瀛愪换鍔°�佹槑缁嗐�佷换鍔℃ā鏉垮紩鐢ㄧ瓑绫诲瀷
+ 锛堜换鍔¤〃褰� ruoyi-task锛屾湰妯″潡涓嶅啓浠讳綍閽堝杩欎簺琛ㄧ殑 SQL銆傦級
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-task</artifactId>
+ </dependency>
+
+ <!--
+ 妯℃澘妯″潡锛氶棶棰樿瘽鏈� / 閫夐」 / 閫氱敤搴� / 闂鍒嗙被鐨勮鍙栦笌"鐢ㄦ埛宸蹭綔绛�"鏍囪鍥炲啓銆�
+ ruoyi-template 鍙緷璧� ruoyi-common锛屼笉浼氫笌 ruoyi-phone 褰㈡垚寰幆渚濊禆銆�
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-template</artifactId>
+ </dependency>
+
+ <!-- lombok锛歳uoyi-common 閲屾槸鐩存帴渚濊禆锛屾澶勬樉寮忓0鏄庣増鏈紝閬垮厤娉ㄨВ澶勭悊鍣ㄧ己澶� -->
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.34</version>
+ </dependency>
+
+ <!-- Servlet API锛欻andlerInterceptor锛堟ā鍧楀紑鍏虫嫤鎴櫒鐢級 -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>4.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/PhoneModule.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/PhoneModule.java
new file mode 100644
index 0000000..74cfbf6
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/PhoneModule.java
@@ -0,0 +1,46 @@
+package com.ruoyi.phone;
+
+/**
+ * 鐢佃瘽妯″潡鍖呮牴銆�
+ *
+ * <h3>杩欎釜妯″潡瑁呬簡浠�涔�</h3>
+ * 鍘熷厛鏁e湪 {@code ruoyi-task} 鐨� {@code ServiceSubtaskController} 涓�
+ * {@code ServiceSubtaskServiceImpl} 閲岀殑"鐢佃瘽"鑳藉姏锛屾湰妯″潡鍖栧悗<b>鏁翠綋鎼埌杩欓噷</b>锛�
+ * <ul>
+ * <li>{@code controller} 鈥斺�� 涓夋潯澶栧懠閫氶亾鐨勫洖璋冪鐐癸紝<b>URL 涓庡師鏍峰畬鍏ㄤ竴鑷�</b>
+ * 锛堜笂娴�/闆ㄧ划鎸傚湪 {@code /smartor/serviceSubtask/**}锛屼笁姹囨寕鍦� {@code /smartor/shphone/**}锛夛紝
+ * 澶栭儴鐢佃瘽骞冲彴涓嶉渶瑕佹敼鍥炶皟鍦板潃锛�</li>
+ * <li>{@code service} 鈥斺�� 鐢佃瘽浼氳瘽鐘舵�佹満锛坮edis 浼氳瘽銆乀TS 鎾姤銆丄SR 鍖归厤銆丄I 鍖归厤銆侀潤榛�/鎸傛満銆�
+ * 閫氳瘽璁板綍钀藉簱锛夌殑鍏ㄩ儴瀹炵幇锛�</li>
+ * <li>{@code domain} 鈥斺�� 鐢佃瘽鍥炶皟/鎷夊彇鐨勫叆鍙備笌鍑哄弬锛�</li>
+ * <li>{@code api} 鈥斺�� <b>鍞竴瀵瑰鍖�</b>锛氬叾瀹冩ā鍧楀彧鑳界粡 {@code PhoneFacade} 璋冪數璇濊兘鍔涖��</li>
+ * </ul>
+ *
+ * <h3>鏁版嵁璁块棶杈圭晫锛堥噸瑕侊級</h3>
+ * {@code service_subtask} / {@code service_subtask_detail} / {@code service_task} 绛夎〃褰� {@code ruoyi-task}锛�
+ * 鎸� {@code doc/璺ㄦā鍧楁暟鎹闂師鍒欎笌鏀跺彛鏂规.md} 鐨勮惤鍦板彛寰勶紝<b>闈炲綊灞炴ā鍧椾竴寰嬬姝㈠啓杩欎簺琛�</b>锛�
+ * 鍥犳鏈ā鍧�<b>鍒绘剰涓嶅甫 Mapper / XML</b>锛�
+ * <ul>
+ * <li>浠诲姟鏁版嵁 鈫� {@code com.ruoyi.task.api.TaskSubtaskApi}锛堝綊灞炴ā鍧楀唴瀹炵幇锛屾湰妯″潡鍙皟 API锛夛紱</li>
+ * <li>妯℃澘璇濇湳 鈫� {@code com.ruoyi.template.service} 涓嬬殑 service 鎺ュ彛锛�</li>
+ * <li>鍙戦�佹柟寮忕姸鎬� 鈫� {@code com.ruoyi.task.api.spi.TaskPreachformPort}锛�</li>
+ * <li>褰曢煶涓嬭浇 鈫� {@code com.ruoyi.task.api.spi.TaskFtpPort}锛�</li>
+ * <li>鍙傛暟閰嶇疆 鈫� {@code com.ruoyi.task.api.spi.TaskSysConfigPort}锛�</li>
+ * <li>AI 閫夐」鍖归厤 鈫� {@code com.ruoyi.common.core.service.SubtaskOptionMatchApi}锛坮uoyi-common 濂戠害锛夈��</li>
+ * </ul>
+ *
+ * <h3>寮�鍏�</h3>
+ * 妯″潡鍙�氳繃 {@code sys_config} 鍙傛暟琛ㄧ殑 {@code phone.enabled=false} 鏁翠綋鍏抽棴
+ * 锛堣繍琛屾椂璇诲彇锛屾敼瀹屾渶澶� 10 绉掔敓鏁堬級锛氬懡涓殑绔偣琚� {@code PhoneAvailabilityInterceptor}
+ * 鎷︿笅骞惰繑鍥炴槑纭殑"鏈惎鐢�"涓氬姟閿欒锛涢棬闈� {@code PhoneFacade} 浠嶅父椹伙紝璋冪敤闄嶇骇涓虹┖鍊�/绌哄垪琛ㄣ��
+ */
+public final class PhoneModule {
+
+ /**
+ * 妯″潡閰嶇疆鍓嶇紑锛堜粎浣滀负 yml 鍏滃簳閰嶇疆鐨勯敭鍓嶇紑锛涗富寮�鍏冲湪 sys_config 鍙傛暟琛ㄩ噷锛�
+ */
+ public static final String PROPERTIES_PREFIX = "phone";
+
+ private PhoneModule() {
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneApi.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneApi.java
new file mode 100644
index 0000000..d1c3cf7
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneApi.java
@@ -0,0 +1,96 @@
+package com.ruoyi.phone.api;
+
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallBackVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PhoneCallRecordVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PhoneCallResultYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+
+import java.util.List;
+
+/**
+ * 鐢佃瘽妯″潡瀵瑰濂戠害锛�<b>鍞竴瀵瑰鍖� {@code com.ruoyi.phone.api} 鐨勫叆鍙�</b>锛夈��
+ *
+ * <h3>璋佽鐢ㄥ畠</h3>
+ * 鍏跺畠妯″潡锛堥殢璁跨紪鎺掋�佸畾鏃朵换鍔°�丄I 鏈哄櫒浜哄洖璋冪瓑锛夎"鐢ㄥ埌鐢佃瘽鐨勫姛鑳�"鏃讹紝
+ * 娉ㄥ叆 {@link PhoneFacade}锛堝父椹� Bean锛夎皟杩欓噷鐨勬柟娉曪紱<b>涓嶈</b>鍘绘敞鍏ユ湰妯″潡鐨�
+ * {@code IPhoneService} 瀹炵幇銆佷篃涓嶈 import 鏈ā鍧楃殑 controller/service 鍐呴儴鍖呫��
+ *
+ * <h3>鏂规硶璇箟锛堜笌澶栭儴鐢佃瘽骞冲彴鐨勫洖璋冧竴涓�瀵瑰簲锛岃涓轰笌鍘� {@code IServiceSubtaskService} 瀹屽叏涓�鑷达級</h3>
+ * <ul>
+ * <li>{@link #phoneCallBack} 鈥斺�� 涓婃捣閫氶亾锛氳闊宠瘑鍒粨鏋滀笂鎶ワ紝椹卞姩澶氳疆闂瓟涓庢寕鏈猴紱</li>
+ * <li>{@link #phoneCallBackYQ} 鈥斺�� 闆ㄧ划閫氶亾锛欰SR / 闈欓粯 / 鏀鹃煶浜嬩欢鍥炶皟锛岃繑鍥炰笅涓�姝ユ挱鎶ュ唴瀹癸紱</li>
+ * <li>{@link #taskPull} 鈥斺�� 闆ㄧ划閫氶亾锛氭寜灏忔椂閰嶉鎷夊彇寰呭鍛煎瓙浠诲姟锛堝惈寮�鍦虹櫧涓庨棰橈級锛�</li>
+ * <li>{@link #saveQuestionAnswerPhone} 鈥斺�� 鐢佃瘽渚ф偅鑰呬綔绛旇惤搴擄紙璧板瓙浠诲姟鏄庣粏锛夛紱</li>
+ * <li>{@link #recordAccept} 鈥斺�� 闆ㄧ划閫氶亾锛氶�氳瘽璁板綍鍥炶皟锛堟棤浜烘帴鍚�/宸插畬鎴�/鎷掕锛夛紱</li>
+ * <li>{@link #getFirstQues} / {@link #processResust} 鈥斺�� 涓夋眹閫氶亾锛氬彇棣栭銆丄SR 缁撴灉澶勭悊銆�</li>
+ * </ul>
+ *
+ * <h3>鍏抽棴鏃讹紙{@code phone.enabled=false}锛夌殑琛屼负</h3>
+ * {@link PhoneFacade} 浠嶅彲娉ㄥ叆锛屼絾鎵�鏈夋柟娉�<b>闄嶇骇涓虹┖鍊�/绌哄垪琛ㄥ苟鎵� WARN锛屼笉鎶涘紓甯�</b>锛�
+ * 淇濊瘉璋冪敤鏂逛富娴佺▼涓嶈鎷栧灝锛堜笌婊℃剰搴﹂棬闈㈠悓涓�绾︽潫锛夈��
+ */
+public interface PhoneApi {
+
+ /**
+ * 鐢佃瘽妯″潡鏄惁鍚敤锛堣繍琛屾椂璇� {@code sys_config: phone.enabled}锛屾渶澶� 10 绉掔敓鏁堬級
+ */
+ boolean isEnabled();
+
+ /**
+ * 鐢佃瘽鍥炶皟锛堜笂娴凤級锛氳闊宠瘑鍒粨鏋滀笂鎶�
+ *
+ * @param phoneCallBackVO 鍥炶皟鍏ュ弬锛坲uid + 璇嗗埆鏂囨湰锛�
+ */
+ void phoneCallBack(PhoneCallBackVO phoneCallBackVO);
+
+ /**
+ * 鐢佃瘽 ASR 閫氳瘽鍥炶皟锛堥洦缁級
+ *
+ * @param phoneCallReqYQVO 鍥炶皟鍏ュ弬锛坱askid 鍗冲瓙浠诲姟 ID + 褰撳墠棰樼洰鐨勮瘑鍒枃鏈級
+ * @return 涓嬩竴姝ヨ鎾姤鐨勫唴瀹癸紙type/value/silent_interval锛夛紱鏃犲彲鎾姤鍐呭鏃惰繑鍥炵┖瀵硅薄
+ */
+ PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO);
+
+ /**
+ * 鐢佃瘽浠诲姟鎷夊彇锛堥洦缁級
+ *
+ * @return 寰呭鍛间换鍔″垪琛紱鏃犲彲鎷夊彇鏁版嵁鏃惰繑鍥炵┖鍒楄〃
+ */
+ List<PullTaskVO> taskPull();
+
+ /**
+ * 鎮h�呴棶棰樼粨鏋滆褰曪紙鐢佃瘽锛�
+ *
+ * @param serviceSubTaskDetailReq 鏄庣粏闆嗗悎锛堝叆鍙備负瀛愪换鍔� ID 鎴� taskid+patid 鍔犲瘑涓诧級
+ * @return 钀藉簱鏉℃暟锛涙ā鍧楀叧闂椂杩斿洖 0
+ */
+ Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq);
+
+ /**
+ * 閫氳瘽璁板綍鍥炶皟锛堥洦缁級
+ *
+ * @param phoneCallRecordVO 閫氳瘽璁板綍锛堟寕鏂師鍥犮�佸綍闊宠矾寰勭瓑锛�
+ * @return 澶勭悊缁撴灉锛堝浐瀹� 1锛屼繚鎸佸師瀹炵幇璇箟锛�
+ */
+ Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO);
+
+ /**
+ * 鏍规嵁鐢佃瘽鍙风爜鑾峰彇棣栦釜闂锛堜笁姹囷級
+ *
+ * @param phoneCallReqYQVO 鍏ュ弬锛坧hone锛�
+ * @return 瀛愪换鍔� ID + 棣栭棰樺彿/鍐呭锛涙煡涓嶅埌鏃惰繑鍥炰粎鍚粯璁� status 鐨勭┖瀵硅薄
+ */
+ PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO);
+
+ /**
+ * 涓夋眹 ASR 缁撴灉澶勭悊
+ *
+ * @param phoneCallResultYQVO ASR 缁撴灉锛坰ubId銆乻criptId銆佽瘑鍒枃鏈級
+ * @return 涓嬩竴棰樺唴瀹癸紱鍖归厤澶辫触涓旈噸闂鏁扮敤灏芥椂杩斿洖棰樼洰鍒囨崲缁撴灉
+ */
+ PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO);
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneFacade.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneFacade.java
new file mode 100644
index 0000000..97c9b44
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/api/PhoneFacade.java
@@ -0,0 +1,170 @@
+package com.ruoyi.phone.api;
+
+import com.ruoyi.phone.config.PhoneProperties;
+import com.ruoyi.phone.config.PhoneSwitch;
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallBackVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PhoneCallRecordVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PhoneCallResultYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+import com.ruoyi.phone.service.IPhoneService;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 鐢佃瘽妯″潡瀵瑰闂ㄩ潰锛�<b>甯搁┗ Bean</b>锛夈��
+ *
+ * <h3>涓轰粈涔堝繀椤�"甯搁┗"</h3>
+ * 鏈棬闈�<b>姘歌繙</b>鏄� Spring Bean锛屼笉闅忓紑鍏崇姸鎬佸鍒犮�傝繖鏍疯皟鐢ㄦ柟鐨�
+ * {@code @Autowired PhoneApi} 鍦ㄤ换浣曞紑鍏崇姸鎬佷笅閮�<b>涓嶄細鍚姩澶辫触</b>
+ * 鈥斺�� 涓� {@code TaskFacade} / {@code SatisfactionFacade} 鏄悓涓�鏉¤璁$害鏉�
+ * 锛堝巻鍙叉暀璁細鐢� {@code @ConditionalOnProperty} 鎽� Bean 浼氳璋冪敤鏂瑰惎鍔ㄥ嵆澶辫触锛�
+ * 涓斿彧鍦ㄥ惎鍔ㄦ椂姹傚�间竴娆★紝鍋氫笉鍒�"鏀瑰畬鍙傛暟 10 绉掔敓鏁�"锛夈��
+ *
+ * <h3>鍏抽棴鏃剁殑琛屼负</h3>
+ * 寮�鍏筹紙{@code sys_config: phone.enabled}锛夊叧闂椂锛屾湰闂ㄩ潰鍚勬柟娉�<b>杩斿洖绌哄��/绌哄垪琛ㄥ苟鎵� WARN</b>锛�
+ * <b>涓嶆姏寮傚父</b>锛氱數璇濇槸闅忚鐨勪竴鏉″彂閫侀�氶亾锛屾ā鍧楄鍏虫帀鏃朵笉鑳借璋冪敤鏂癸紙闅忚缂栨帓銆佸畾鏃朵换鍔★級
+ * 璺熺潃鐐搞�侶TTP 渚у彟鏈� {@code PhoneAvailabilityInterceptor} 璐熻矗"鏄庣‘鎶ラ敊"锛�
+ * 涓よ�呭垎宸ワ細<b>绔偣 鈫� 鏄庣‘鎶ラ敊锛涙ā鍧楀唴璋冪敤 鈫� 闈欓粯闄嶇骇</b>銆�
+ *
+ * <h3>浣跨敤绀轰緥</h3>
+ * <pre>
+ * @Autowired
+ * private PhoneApi phoneApi;
+ *
+ * if (phoneApi.isEnabled()) {
+ * List<PullTaskVO> tasks = phoneApi.taskPull();
+ * }
+ * </pre>
+ */
+@Slf4j
+@Component
+public class PhoneFacade implements PhoneApi {
+
+ /**
+ * 杩愯鏃跺紑鍏筹紙{@code sys_config} 浼樺厛锛寋@link PhoneProperties} 鍏滃簳锛�
+ */
+ private final PhoneSwitch phoneSwitch;
+
+ /**
+ * 妯″潡鍐呭疄鐜帮紙鍞竴瀹炵幇 {@code PhoneServiceImpl}锛夈��
+ * <p>
+ * 涓庢弧鎰忓害闂ㄩ潰涓嶅悓锛岃繖閲屼笉闇�瑕� {@code ObjectProvider} + 鑷紩鐢ㄨ繃婊わ細
+ * 鏈被<b>涓嶅疄鐜�</b> {@code IPhoneService}锛屼笉瀛樺湪"Spring 鎶婅嚜寮曠敤褰撳厹搴曞�欓��"瀵艰嚧鐨勬棤闄愰�掑綊锛�
+ * 瀹炵幇 Bean 涔熶笉鍙椾换浣曟潯浠惰閰嶆帶鍒讹紝鎭掑畾瀛樺湪銆�
+ * <p>
+ * 鍏佽涓� {@code null}锛氫粎渚涙祴璇�/闈� Spring 鐜鏋勯�犳椂浣跨敤锛堟鏃舵墍鏈夋柟娉曟寜"涓嶅彲鐢�"闄嶇骇锛夈��
+ */
+ private final IPhoneService phoneService;
+
+ /**
+ * Spring 浣跨敤鐨勬瀯閫犲櫒銆�
+ * <p>
+ * 鈿狅笍 <b>鏄惧紡鏍囨敞 {@code @Autowired}</b>锛氭湰绫绘湁涓や釜鍏紑鏋勯�犲櫒锛堝彟涓�涓粰娴嬭瘯鐢級锛�
+ * 鏍囨敞鍚� Spring 涓嶄細閫�鍥炴煡鎵炬棤鍙傛瀯閫犲櫒銆傝瑙勫垯宸茬敱
+ * {@code sql/_probe/verify_spring_beans.py} 闈欐�佹妸鍏炽��
+ */
+ @Autowired
+ public PhoneFacade(PhoneSwitch phoneSwitch, IPhoneService phoneService) {
+ this.phoneSwitch = phoneSwitch;
+ this.phoneService = phoneService;
+ }
+
+ /**
+ * 渚�<b>娴嬭瘯/闈� Spring 鐜</b>鐩存帴鏋勯�狅細{@code sysConfigValue} 灏辨槸 {@code sys_config}
+ * 閲� {@code phone.enabled} 鐨勫�硷紝{@code null} 琛ㄧず"鍙傛暟琛屼笉瀛樺湪"锛泏@code phoneService} 鍙负 {@code null}銆�
+ */
+ public PhoneFacade(PhoneProperties properties, String sysConfigValue, IPhoneService phoneService) {
+ this(new PhoneSwitch(properties, sysConfigValue), phoneService);
+ }
+
+ /**
+ * 鍙栬繍琛屾椂寮�鍏筹紙渚涙嫤鎴櫒澶嶇敤鍚屼竴瀹炰緥銆佷篃渚涙祴璇曟柇瑷�锛�
+ */
+ public PhoneSwitch getPhoneSwitch() {
+ return phoneSwitch;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return phoneSwitch.isEnabled();
+ }
+
+ @Override
+ public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
+ if (!available("phoneCallBack")) {
+ return;
+ }
+ phoneService.phoneCallBack(phoneCallBackVO);
+ }
+
+ @Override
+ public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO) {
+ if (!available("phoneCallBackYQ")) {
+ return new PhoneCallBackYQVO();
+ }
+ return phoneService.phoneCallBackYQ(phoneCallReqYQVO);
+ }
+
+ @Override
+ public List<PullTaskVO> taskPull() {
+ if (!available("taskPull")) {
+ return Collections.emptyList();
+ }
+ return phoneService.taskPull();
+ }
+
+ @Override
+ public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
+ if (!available("saveQuestionAnswerPhone")) {
+ return 0;
+ }
+ return phoneService.saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+ }
+
+ @Override
+ public Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO) {
+ if (!available("recordAccept")) {
+ return 0;
+ }
+ return phoneService.recordAccept(phoneCallRecordVO);
+ }
+
+ @Override
+ public PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO) {
+ if (!available("getFirstQues")) {
+ return new PhoneCallBackSHVO();
+ }
+ return phoneService.getFirstQues(phoneCallReqYQVO);
+ }
+
+ @Override
+ public PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO) {
+ if (!available("processResust")) {
+ return new PhoneCallBackSHVO();
+ }
+ return phoneService.processResust(phoneCallResultYQVO);
+ }
+
+ /**
+ * 寮�鍏� + 瀹炵幇鍙敤鎬у垽鏂紝涓嶅彲鐢ㄦ椂鎵� WARN 骞惰璋冪敤鏂归檷绾�
+ */
+ private boolean available(String method) {
+ if (!phoneSwitch.isEnabled()) {
+ log.warn("銆愮數璇濄�戞ā鍧楀凡鍏抽棴锛堝弬鏁伴厤缃� phone.enabled=false锛夛紝{} 鏈璋冪敤闄嶇骇涓虹┖缁撴灉", method);
+ return false;
+ }
+ if (phoneService == null) {
+ log.warn("銆愮數璇濄�戞湭鎵惧埌鐢佃瘽妯″潡瀹炵幇锛圛PhoneService 缂哄け锛夛紝{} 鏈璋冪敤闄嶇骇涓虹┖缁撴灉", method);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneAvailabilityInterceptor.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneAvailabilityInterceptor.java
new file mode 100644
index 0000000..80602be
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneAvailabilityInterceptor.java
@@ -0,0 +1,59 @@
+package com.ruoyi.phone.config;
+
+import com.ruoyi.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 鐢佃瘽妯″潡寮�鍏虫嫤鎴櫒銆�
+ * <p>
+ * <b>浣滅敤</b>锛氬綋寮�鍏冲叧闂紙{@code sys_config} 涓� {@code phone.enabled=false}锛夋椂锛�
+ * 鍛戒腑鐢佃瘽绔偣鐨勮姹備細琚珛鍗虫嫤涓嬪苟鎶涘嚭 {@link ServiceException}锛�
+ * 鐢� RuoYi 鐨勫叏灞�寮傚父澶勭悊鍣ㄨ繑鍥�<b>鏄庣‘鐨勪笟鍔¢敊璇彁绀�</b>锛堣�屼笉鏄� 404 鎴栭潤榛樿繑鍥炵┖鏁版嵁锛夈��
+ * <p>
+ * 寮�鍏冲�肩敱 {@link PhoneSwitch} 鍦ㄨ繍琛屾椂璇诲彇锛坽@code sys_config}锛�10 绉掕繘绋嬪唴缂撳瓨锛夛紝
+ * 鍥犳鏀瑰畬鍙傛暟璁剧疆<b>涓嶉渶瑕侀噸鍚�</b>锛屾渶澶� 10 绉掑嵆鐢熸晥銆�
+ * <p>
+ * <b>涓轰粈涔堜笉鐢� {@code @ConditionalOnProperty} 璁� Controller 鐩存帴涓嶆敞鍐�</b>锛�
+ * <ul>
+ * <li>閭f牱璋冪敤鏂瑰彧浼氭嬁鍒� HTTP 404 鈥斺�� 铏界劧涔熸槸澶辫触锛屼絾涓嶆槸"鏄庣‘閿欒"锛�
+ * 鐢佃瘽骞冲彴鏃犳硶鍖哄垎"妯″潡琚叧闂�"鍜�"鍦板潃鍐欓敊浜�"锛�</li>
+ * <li>鑰屼笖 {@code @ConditionalOnProperty} 鍙湪<b>鍚姩鏃�</b>姹傚�间竴娆★紝
+ * 鍋氫笉鍒�"鏀瑰畬鍙傛暟閰嶇疆灏辩敓鏁�"锛屼笌鍙傛暟琛ㄥ紑鍏崇殑璇夋眰鍐茬獊銆�</li>
+ * </ul>
+ * <p>
+ * <b>涓轰粈涔堜笉浼氬奖鍝嶄换鍔�/闅忚绛夊叾瀹冩帴鍙�</b>锛氭湰鎷︽埅鍣ㄥ彧鐧昏鍦ㄧ數璇濇ā鍧楄嚜宸辩殑 8 涓簿纭矾寰勪笂
+ * 锛堣 {@link PhoneWebConfig}锛夛紝涓嶄細纰板埌闅忚/闂嵎/缁熻鎺ュ彛銆�
+ */
+@Slf4j
+@Component
+public class PhoneAvailabilityInterceptor implements HandlerInterceptor {
+
+ /**
+ * 妯″潡琚叧闂椂杩斿洖缁欒皟鐢ㄦ柟鐨勯敊璇彁绀猴紙鐢佃瘽骞冲彴/鍓嶇鍙洿鎺ュ睍绀猴級
+ */
+ public static final String DISABLED_MESSAGE =
+ "鐢佃瘽鍔熻兘鏈惎鐢紙鍙傛暟閰嶇疆 phone.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤";
+
+ private final PhoneSwitch phoneSwitch;
+
+ public PhoneAvailabilityInterceptor(PhoneSwitch phoneSwitch) {
+ this.phoneSwitch = phoneSwitch;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ if (!phoneSwitch.isEnabled()) {
+ // request 鍏佽涓� null锛堝崟鍏冩祴璇曠洿鎺ヨ皟 preHandle 鏃朵笉鏋勯�犺姹傚璞★級
+ String method = request == null ? "-" : request.getMethod();
+ String uri = request == null ? "-" : request.getRequestURI();
+ log.warn("銆愮數璇濄�戞ā鍧楀凡鍏抽棴锛堝弬鏁伴厤缃� phone.enabled=false锛夛紝鎷掔粷璁块棶 {} {}", method, uri);
+ throw new ServiceException(DISABLED_MESSAGE);
+ }
+ return true;
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneProperties.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneProperties.java
new file mode 100644
index 0000000..d6b88aa
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneProperties.java
@@ -0,0 +1,35 @@
+package com.ruoyi.phone.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鐢佃瘽妯″潡閰嶇疆锛堝墠缂� {@code phone}锛夈��
+ * <p>
+ * 鈿狅笍 <b>杩欎笉鏄富寮�鍏�</b>銆傜數璇濇ā鍧楃殑寮�鍏�<b>瀛樺湪 {@code sys_config} 鍙傛暟閰嶇疆琛ㄩ噷</b>锛�
+ * <pre>
+ * 鍙傛暟閿悕锛歱hone.enabled
+ * 鍙傛暟閿�硷細true锛堝惎鐢紝榛樿锛�/ false锛堝叧闂級
+ * </pre>
+ * 瑙� {@link PhoneSwitch}銆傛湰绫荤殑 {@link #isEnabled()} 鍙綔涓�<b>鍏滃簳</b>锛�
+ * 褰� {@code sys_config} 閲屾病鏈夎繖涓�琛屻�佹垨闈� Spring 鐜鍙栦笉鍒伴厤缃湇鍔℃椂鎵嶄細鐢ㄥ埌銆�
+ * <p>
+ * 濡傞渶鍦� yml 涓厹搴曪紙涓�鑸笉蹇呰锛屾甯稿簲鍦ㄥ弬鏁拌缃〉缁存姢锛夛細
+ * <pre>
+ * phone:
+ * enabled: false
+ * </pre>
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "phone")
+public class PhoneProperties {
+
+ /**
+ * 鏄惁鍚敤鐢佃瘽妯″潡锛堥粯璁ゅ惎鐢級銆�
+ * <p>
+ * 浠呭綋 {@code sys_config} 涓病鏈� {@code phone.enabled} 鏃剁敓鏁堬紝瑙� {@link PhoneSwitch}銆�
+ */
+ private boolean enabled = true;
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneSwitch.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneSwitch.java
new file mode 100644
index 0000000..1140102
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneSwitch.java
@@ -0,0 +1,207 @@
+package com.ruoyi.phone.config;
+
+import com.ruoyi.common.core.service.IConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鐢佃瘽妯″潡<b>鎬诲紑鍏�</b>锛氬�煎瓨鏀惧湪 {@code sys_config} 鍙傛暟閰嶇疆琛ㄤ腑锛�<b>杩愯鏃惰鍙栥�佸彲鐑垏鎹�</b>銆�
+ *
+ * <h3>鍙傛暟閰嶇疆</h3>
+ * <pre>
+ * 鍙傛暟閿悕锛歱hone.enabled
+ * 鍙傛暟閿�硷細true = 鍚敤锛堥粯璁わ級
+ * false = 鍏抽棴
+ * </pre>
+ * 浣嶇疆锛氱郴缁熺鐞� 鈫� 鍙傛暟璁剧疆 鈫� 鏂板/淇敼銆�
+ * <pre>
+ * insert into sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark)
+ * values ('鐢佃瘽妯″潡寮�鍏�', 'phone.enabled', 'true', 'Y', 'admin', sysdate(), 'true鍚敤锛宖alse鍏抽棴锛堥粯璁rue锛�');
+ * </pre>
+ *
+ * <h3>鍙栧�间紭鍏堢骇</h3>
+ * <ol>
+ * <li>{@code sys_config} 閲� {@code phone.enabled} 鐨勫�硷紙<b>涓荤敤</b>锛�
+ * 鏉ヨ嚜 {@code IConfigService} 鎺ュ彛锛屽疄鐜板湪 ruoyi-system 鐨� {@code SysConfigServiceImpl}锛夛紱</li>
+ * <li>{@link PhoneProperties#isEnabled()}锛�<b>鍏滃簳</b>锛氫粎褰� sys_config 閲屾病鏈夎繖涓�琛屻��
+ * 鎴栭潪 Spring 鐜鍙栦笉鍒伴厤缃湇鍔℃椂浣跨敤锛岄粯璁� true锛夈��</li>
+ * </ol>
+ *
+ * <h3>涓轰粈涔堥粯璁� true</h3>
+ * 涓庝换鍔�/婊℃剰搴︽ā鍧楀悓娆撅細鍙傛暟琛岀己澶辨椂鎸� true 澶勭悊锛屼繚璇佸崌绾у悗鐢佃瘽鍔熻兘涓嶄細鍥犱负灏戜簡涓�琛岄厤缃�岀獊鐒朵笉鍙敤
+ * 锛堣鍏抽棴蹇呴』鏄惧紡閰嶇疆 false锛夈��
+ *
+ * <h3>涓轰粈涔堣涓嶅埌閰嶇疆鏃朵篃鎸� true锛坒ail-open锛�</h3>
+ * 璇� {@code sys_config} 闇�瑕佽蛋鏁版嵁搴擄紝鏁版嵁搴撴姈鍔ㄦ椂濡傛灉 fail-closed 浼氭妸鏁存潯鐢佃瘽閾捐矾鎵撴
+ * 锛堝洖璋冨け璐ユ剰鍛崇潃姝e湪閫氳瘽鐨勯殢璁跨洿鎺ユ柇鎺夛級銆傝繖閲屽彧鎵� WARN 骞舵斁琛屻��
+ *
+ * <h3>涓轰粈涔堟湁 10 绉掔紦瀛�</h3>
+ * {@code SysConfigServiceImpl#selectConfigByKey} 褰撳墠姣忔閮芥煡搴擄紝鑰屾湰寮�鍏冲湪姣忔鐢佃瘽鍥炶皟銆�
+ * 姣忔瀹堝崼鍒ゆ柇鏃堕兘浼氳璇诲埌銆傝繖閲屽姞涓�涓繘绋嬪唴 TTL 缂撳瓨锛屾妸鏌ュ簱闄嶅埌"姣忎釜瀹炰緥姣� 10 绉掓渶澶氫竴娆�"銆�
+ * 浠d环鏄弬鏁版敼鍔ㄦ渶澶� 10 绉掔敓鏁堬紙澶氬疄渚嬮儴缃叉椂鍚勮嚜璁℃椂锛夈��
+ */
+@Slf4j
+@Component
+public class PhoneSwitch {
+
+ /**
+ * sys_config 閲岀殑鍙傛暟閿悕
+ */
+ public static final String CONFIG_KEY = "phone.enabled";
+
+ /**
+ * 杩涚▼鍐呯紦瀛樻湁鏁堟湡锛堟绉掞級
+ */
+ private static final long CACHE_TTL_MILLIS = 10_000L;
+
+ private final PhoneProperties phoneProperties;
+
+ /**
+ * 鍙傛暟閰嶇疆鏈嶅姟锛坮uoyi-common 鐨勬帴鍙o紝瀹炵幇鍦� ruoyi-system锛夈��
+ * <p>
+ * 鐢� {@code ObjectProvider} 鎯版�у彇锛氭湰妯″潡鍙緷璧� ruoyi-common / ruoyi-task / ruoyi-template锛�
+ * 鍦ㄥ崟鍏冩祴璇�/鐙珛閮ㄧ讲绛�"瀹瑰櫒閲屾病鏈夊疄鐜�"鐨勫満鏅笅涓嶈兘鍥犳鍚姩澶辫触銆�
+ */
+ private final ObjectProvider<IConfigService> configServiceProvider;
+
+ /**
+ * 鏈�杩戜竴娆¤В鏋愮粨鏋�
+ */
+ private volatile Boolean cachedEnabled;
+
+ /**
+ * 鏈�杩戜竴娆¤В鏋愮殑鏃堕棿鎴�
+ */
+ private volatile long cachedAt;
+
+ /**
+ * Spring 浣跨敤鐨勬瀯閫犲櫒銆�
+ * <p>
+ * 鈿狅笍 <b>蹇呴』鏄惧紡鏍囨敞 {@code @Autowired}</b>锛氭湰绫绘湁涓や釜鍏紑鏋勯�犲櫒
+ * 锛堝彟涓�涓粰娴嬭瘯/闈� Spring 鐜鐢級锛屼笉鏍囨敞鐨勮瘽 Spring 浼氬洜"鏋勯�犲櫒涓嶅敮涓�"
+ * 閫�鍥炴煡鎵炬棤鍙傛瀯閫犲櫒锛屽惎鍔ㄥ嵆鎶� {@code No default constructor found}銆�
+ * 璇ヨ鍒欏凡鐢� {@code sql/_probe/verify_spring_beans.py} 闈欐�佹妸鍏炽��
+ */
+ @Autowired
+ public PhoneSwitch(PhoneProperties phoneProperties,
+ ObjectProvider<IConfigService> configServiceProvider) {
+ this.phoneProperties = phoneProperties;
+ this.configServiceProvider = configServiceProvider;
+ }
+
+ /**
+ * 渚�<b>娴嬭瘯/闈� Spring 鐜</b>鐩存帴鏋勯�狅細{@code configValue} 灏辨槸 sys_config 閲岀殑閿�硷紝
+ * 浼� {@code null} 琛ㄧず"鍙傛暟琛屼笉瀛樺湪"锛堟鏃跺洖钀藉埌 {@link PhoneProperties}锛夈��
+ */
+ public PhoneSwitch(PhoneProperties phoneProperties, final String configValue) {
+ this(phoneProperties, new FixedProvider(configValue));
+ // 闈� Spring 鐜涓嬫病鏈�"鏀归厤缃悗绛� 10 绉�"鐨勬蹇碉紝鐩存帴绂佺敤缂撳瓨锛屼繚璇佹柇瑷�鍗虫椂鍙
+ this.cachedEnabled = resolve();
+ this.cachedAt = System.currentTimeMillis() + CACHE_TTL_MILLIS * 1000L;
+ }
+
+ /**
+ * 鐢佃瘽妯″潡鏄惁鍚敤锛堣繍琛屾椂鐑锛屾渶澶� 10 绉掑欢杩燂級
+ */
+ public boolean isEnabled() {
+ long now = System.currentTimeMillis();
+ Boolean cached = this.cachedEnabled;
+ if (cached != null && now - this.cachedAt < CACHE_TTL_MILLIS) {
+ return cached;
+ }
+ boolean resolved = resolve();
+ this.cachedEnabled = resolved;
+ this.cachedAt = now;
+ return resolved;
+ }
+
+ /**
+ * 娓呮帀杩涚▼鍐呯紦瀛橈紝涓嬫璋冪敤绔嬪嵆閲嶆柊璇� sys_config锛堜緵娴嬭瘯/闇�瑕佺珛鍗崇敓鏁堢殑鍦烘櫙锛�
+ */
+ public void invalidateCache() {
+ this.cachedEnabled = null;
+ }
+
+ /**
+ * 瑙f瀽褰撳墠寮�鍏冲�硷細sys_config 浼樺厛锛屽叾娆� yml 鍏滃簳
+ */
+ private boolean resolve() {
+ String value = readFromSysConfig();
+ if (value != null) {
+ if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) {
+ log.warn("銆愮數璇濄�憇ys_config 涓� {} 鐨勫�间笉鏄� true/false锛堝疄闄�=銆寋}銆嶏級锛屽皢鎸夈�屼笉鏄� false 鍗冲惎鐢ㄣ�嶅鐞�",
+ CONFIG_KEY, value);
+ }
+ boolean enabled = !"false".equalsIgnoreCase(value);
+ log.debug("銆愮數璇濄�戝紑鍏冲彇鑷� sys_config锛歿}={} -> enabled={}", CONFIG_KEY, value, enabled);
+ return enabled;
+ }
+ boolean enabled = phoneProperties.isEnabled();
+ log.debug("銆愮數璇濄�憇ys_config 涓湭閰嶇疆 {}锛屽洖钀� phone.enabled={}", CONFIG_KEY, enabled);
+ return enabled;
+ }
+
+ /**
+ * 璇� sys_config 鐨勫師濮嬮敭鍊硷紱娌℃湁瀹炵幇銆佹病鏈夎繖涓�琛屻�佹垨璇诲簱澶辫触閮借繑鍥� {@code null}
+ */
+ private String readFromSysConfig() {
+ if (configServiceProvider == null) {
+ return null;
+ }
+ try {
+ IConfigService configService = configServiceProvider.stream().findFirst().orElse(null);
+ if (configService == null) {
+ return null;
+ }
+ String value = configService.selectConfigByKey(CONFIG_KEY);
+ if (value == null || value.trim().isEmpty()) {
+ return null;
+ }
+ return value.trim();
+ } catch (Exception e) {
+ // 瀹瑰櫒娌℃湁瀹炵幇銆佹暟鎹簮寮傚父銆丼QL 鎶ラ敊鈥︹�︿竴寰嬫寜"鍙傛暟缂哄け"澶勭悊锛坒ail-open锛夛紝缁濅笉褰卞搷涓绘祦绋�
+ log.warn("銆愮數璇濄�戣鍙� sys_config 鐨� {} 澶辫触锛屾湰娆℃寜鏈厤缃鐞嗭紙fail-open锛夛細{}",
+ CONFIG_KEY, e.toString());
+ return null;
+ }
+ }
+
+ /**
+ * 鍥哄畾鍊肩殑 {@code ObjectProvider}锛氬彧鐢ㄤ簬闈� Spring 鐜/娴嬭瘯
+ */
+ private static final class FixedProvider implements ObjectProvider<IConfigService> {
+
+ private final IConfigService configService;
+
+ private FixedProvider(final String configValue) {
+ this.configService = configValue == null ? null : configKey -> configValue;
+ }
+
+ @Override
+ public IConfigService getObject(Object... args) {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getIfAvailable() {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getIfUnique() {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getObject() {
+ return configService;
+ }
+
+ @Override
+ public java.util.stream.Stream<IConfigService> stream() {
+ return configService == null ? java.util.stream.Stream.empty() : java.util.stream.Stream.of(configService);
+ }
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneWebConfig.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneWebConfig.java
new file mode 100644
index 0000000..254e0a6
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/config/PhoneWebConfig.java
@@ -0,0 +1,133 @@
+package com.ruoyi.phone.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * 鐢佃瘽妯″潡鐨� MVC 閰嶇疆锛氭妸 {@link PhoneAvailabilityInterceptor} 鎸傚埌鐢佃瘽妯″潡鑷繁鐨勭鐐逛笂銆�
+ *
+ * <h3>涓轰粈涔堝繀椤婚�愪釜绮剧‘鏋氫妇锛堜笉鑳界敤鍓嶇紑锛�</h3>
+ * 鐢佃瘽绔偣<b>鍒绘剰淇濇寔鍘熸湁 URL 涓嶅彉</b>锛堝閮ㄧ數璇濆钩鍙扮殑鍥炶皟鍦板潃涓嶈兘鏀癸級锛屽洜姝ゅ畠鏁h惤鍦ㄤ袱涓墠缂�涓嬶細
+ * <pre>
+ * /smartor/serviceSubtask/phoneCallBack 涓婃捣锛氳闊宠瘑鍒粨鏋滃洖璋�
+ * /smartor/serviceSubtask/phoneCallBackYQ 闆ㄧ划锛欰SR / 闈欓粯 / 鎾斁浜嬩欢鍥炶皟
+ * /smartor/serviceSubtask/taskPull 闆ㄧ划锛氫换鍔℃媺鍙�
+ * /smartor/serviceSubtask/saveQuestionAnswerPhone 鐢佃瘽锛氭偅鑰呴棶棰樼粨鏋滆褰�
+ * /smartor/serviceSubtask/recordAcceptshanghai 涓婃捣锛氶�氳瘽璁板綍鍥炶皟
+ * /smartor/serviceSubtask/recordAccept 闆ㄧ划锛氶�氳瘽璁板綍鍥炶皟
+ * /smartor/shphone/getFirstQues 涓夋眹锛氭寜鍙风爜鍙栭涓棶棰�
+ * /smartor/shphone/processResust 涓夋眹锛欰SR 缁撴灉澶勭悊
+ * </pre>
+ * 杩欎袱涓墠缂�<b>閮戒笉鏄數璇濇ā鍧楃嫭鍗�</b>锛�
+ * <ul>
+ * <li>{@code /smartor/serviceSubtask/**} 涓嬭繕鏈� 40+ 涓殢璁跨鐐癸紙褰� ruoyi-task锛夛紱</li>
+ * <li>{@code /smartor/shphone/**} 涓嬭繕鏈� {@code addOutboundInstance}锛堝綊 smartor 鐨勫鍛煎疄渚嬮厤缃級銆�</li>
+ * </ul>
+ * 鐢ㄥ墠缂�浼氭妸鍒汉鐨勭鐐逛竴璧锋嫤鎺夛紝鎵�浠ヨ繖閲屽彧鎸備笂闈㈣繖 8 鏉$簿纭矾寰勩��
+ * <p>
+ * 涓庝箣閰嶅锛歿@code TaskWebConfig} 閲屾妸鍓� 6 鏉★紙鐢佃瘽鑷繁鐨勶級鐢� {@code excludePathPatterns} 鎺掗櫎鎺夛紝
+ * 閬垮厤"鍏充换鍔�"椤烘墜鎶婄數璇濆洖璋冧篃鍏充簡 鈥斺�� 鐢佃瘽宸茬嫭绔嬫垚妯″潡锛屽紑鍏崇悊搴斿悇鑷嫭绔嬨��
+ *
+ * <h3>鏂板绔偣鏃剁殑绾﹀畾</h3>
+ * 寰�鍚庢湰妯″潡鑻ュ啀鍔犵鐐癸細榛樿<b>涓�</b>鍔犲叆鏈竻鍗曪紙鍥炶皟绫荤鐐瑰繀椤诲姞锛夛紝
+ * 骞跺悓姝ユ洿鏂� {@code PhoneSwitchCheck} 閲岀殑鍙椾繚鎶よ矾寰勬潯鏁版柇瑷�銆�
+ */
+@Configuration
+public class PhoneWebConfig implements WebMvcConfigurer {
+
+ /**
+ * 涓婃捣锛氳闊宠瘑鍒粨鏋滃洖璋�
+ */
+ public static final String PHONE_CALLBACK_ENDPOINT = "/smartor/serviceSubtask/phoneCallBack";
+
+ /**
+ * 闆ㄧ划锛欰SR / 闈欓粯 / 鎾斁浜嬩欢鍥炶皟
+ */
+ public static final String PHONE_CALLBACK_YQ_ENDPOINT = "/smartor/serviceSubtask/phoneCallBackYQ";
+
+ /**
+ * 闆ㄧ划锛氫换鍔℃媺鍙�
+ */
+ public static final String TASK_PULL_ENDPOINT = "/smartor/serviceSubtask/taskPull";
+
+ /**
+ * 鐢佃瘽锛氭偅鑰呴棶棰樼粨鏋滆褰�
+ */
+ public static final String SAVE_QUESTION_ANSWER_PHONE_ENDPOINT =
+ "/smartor/serviceSubtask/saveQuestionAnswerPhone";
+
+ /**
+ * 涓婃捣锛氶�氳瘽璁板綍鍥炶皟
+ */
+ public static final String RECORD_ACCEPT_SHANGHAI_ENDPOINT =
+ "/smartor/serviceSubtask/recordAcceptshanghai";
+
+ /**
+ * 闆ㄧ划锛氶�氳瘽璁板綍鍥炶皟
+ */
+ public static final String RECORD_ACCEPT_ENDPOINT = "/smartor/serviceSubtask/recordAccept";
+
+ /**
+ * 涓夋眹锛氭寜鍙风爜鍙栭涓棶棰�
+ */
+ public static final String SH_GET_FIRST_QUES_ENDPOINT = "/smartor/shphone/getFirstQues";
+
+ /**
+ * 涓夋眹锛欰SR 缁撴灉澶勭悊
+ */
+ public static final String SH_PROCESS_RESUST_ENDPOINT = "/smartor/shphone/processResust";
+
+ @Autowired
+ private PhoneAvailabilityInterceptor phoneAvailabilityInterceptor;
+
+ /**
+ * 渚涙祴璇�/闈� Spring 鐜鐩存帴鏋勯��
+ */
+ public PhoneWebConfig() {
+ }
+
+ public PhoneWebConfig(PhoneAvailabilityInterceptor phoneAvailabilityInterceptor) {
+ this.phoneAvailabilityInterceptor = phoneAvailabilityInterceptor;
+ }
+
+ /**
+ * 鏈ā鍧楅渶瑕�"鍏抽棴鍗虫槑纭姤閿�"鐨� URL 璺緞锛堜緵鏍¢獙鑴氭湰/鍗曞厓娴嬭瘯鏂█锛�
+ */
+ public static String[] guardedPathPatterns() {
+ return new String[]{
+ PHONE_CALLBACK_ENDPOINT,
+ PHONE_CALLBACK_YQ_ENDPOINT,
+ TASK_PULL_ENDPOINT,
+ SAVE_QUESTION_ANSWER_PHONE_ENDPOINT,
+ RECORD_ACCEPT_SHANGHAI_ENDPOINT,
+ RECORD_ACCEPT_ENDPOINT,
+ SH_GET_FIRST_QUES_ENDPOINT,
+ SH_PROCESS_RESUST_ENDPOINT,
+ };
+ }
+
+ /**
+ * 鎸傚湪 {@code /smartor/serviceSubtask/**} 鍓嶇紑涓嬨�佷絾灞炰簬鐢佃瘽妯″潡鐨勮矾寰�
+ * 锛堜緵 {@code TaskWebConfig} 鎺掗櫎锛岃绫绘敞閲婏級銆�
+ */
+ public static String[] subtaskPathsOwnedByPhone() {
+ return new String[]{
+ PHONE_CALLBACK_ENDPOINT,
+ PHONE_CALLBACK_YQ_ENDPOINT,
+ TASK_PULL_ENDPOINT,
+ SAVE_QUESTION_ANSWER_PHONE_ENDPOINT,
+ RECORD_ACCEPT_SHANGHAI_ENDPOINT,
+ RECORD_ACCEPT_ENDPOINT,
+ };
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(phoneAvailabilityInterceptor)
+ .addPathPatterns(guardedPathPatterns())
+ // 鎷︽埅鍣ㄦ湰韬緢杞伙紙鍙涓�涓� boolean锛夛紝order 缁欎釜灏忓�艰瀹冨湪涓氬姟鎷︽埅鍣ㄤ箣鍓嶆墽琛�
+ .order(-100);
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/PhoneCallbackController.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/PhoneCallbackController.java
new file mode 100644
index 0000000..bc5b33b
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/PhoneCallbackController.java
@@ -0,0 +1,116 @@
+package com.ruoyi.phone.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.phone.api.PhoneApi;
+import com.ruoyi.phone.domain.PhoneCallBackVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PhoneCallRecordVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.List;
+
+/**
+ * 澶栧懠鍥炶皟 / 浠诲姟鎷夊彇 Controller锛堜笂娴� + 闆ㄧ划涓ゆ潯閫氶亾锛夈��
+ *
+ * <h3>鈿狅笍 URL 涓庢ā鍧楀寲鍓嶅畬鍏ㄤ竴鑷�</h3>
+ * 杩欎簺绔偣鏄�<b>澶栭儴鐢佃瘽骞冲彴</b>鍥炶皟鐢ㄥ湴鍧�锛屾ā鍧楀寲鏃�<b>鍒绘剰涓嶆敼璺緞</b>
+ * 锛坽@code /smartor/serviceSubtask/xxx}锛夛紝鍚﹀垯绾夸笂闇�瑕佸悓姝ユ敼鐢佃瘽骞冲彴鐨勯厤缃紝
+ * 涓� {@code SecurityConfig} 鐨勫厤鐧诲綍鐧藉悕鍗曚篃瑕佽窡鐫�鏀广��
+ * 鍥犳鏈� Controller 涓� {@code ruoyi-task} 鐨� {@code ServiceSubtaskController}
+ * <b>鍏辩敤涓�涓� URL 鍓嶇紑</b>鈥斺�斿彧瑕佸畬鏁磋矾寰勪笉閲嶅锛孲pring 鍙互姝e父娉ㄥ唽銆�
+ *
+ * <h3>涓轰粈涔堣蛋闂ㄩ潰锛圥honeApi锛夎�屼笉鏄唴閮� IPhoneService</h3>
+ * 涓庡嚭鍏ラ櫌/婊℃剰搴︽ā鍧�"妯″潡鍙湁闂ㄩ潰涓�涓叆鍙�"鐨勭害瀹氫竴鑷达細
+ * 闂ㄩ潰缁熶竴鎵挎媴"寮�鍏冲叧闂� 鈫� 闄嶇骇/鏄庣‘鎶ラ敊"鐨勫鐞嗭紝Controller 涓嶅啀鍚勫啓涓�閬嶅垽鏂��
+ *
+ * <h3>涓庢ā鍧楀紑鍏崇殑鍏崇郴</h3>
+ * 杩� 8 涓鐐癸紙鍚笁姹囬偅涓� Controller锛夌敱 {@code PhoneWebConfig} 鎸�
+ * {@code PhoneAvailabilityInterceptor}锛涘悓鏃跺湪 {@code TaskWebConfig} 閲屾妸鍏朵腑 6 鏉�
+ * 浠�"浠诲姟妯″潡寮�鍏�"鐨勬嫤鎴寖鍥撮噷鎺掗櫎锛屽仛鍒颁袱涓ā鍧楃殑寮�鍏冲悇绠″悇鐨勩��
+ *
+ * @author ruoyi
+ * @date 2024-08-08
+ */
+@Slf4j
+@Api(description = "澶栧懠鍥炶皟锛堜笂娴�/闆ㄧ划锛�")
+@RestController
+@RequestMapping("/smartor/serviceSubtask")
+public class PhoneCallbackController extends BaseController {
+
+ @Autowired
+ private PhoneApi phoneApi;
+
+ /**
+ * 鐢佃瘽鍥炶皟浠诲姟(涓婃捣)
+ */
+ @ApiOperation("鐢佃瘽鍥炶皟浠诲姟")
+ @PostMapping("/phoneCallBack")
+ public AjaxResult phoneCallBack(@RequestBody PhoneCallBackVO phoneCallBackVO) {
+ phoneApi.phoneCallBack(phoneCallBackVO);
+ return success();
+ }
+
+ /**
+ * 鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)
+ */
+ @ApiOperation("鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)")
+ @PostMapping("/phoneCallBackYQ")
+ public PhoneCallBackYQVO phoneCallBackYQ(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
+ log.info("鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划) 锛焮}", phoneCallReqYQVO);
+ return phoneApi.phoneCallBackYQ(phoneCallReqYQVO);
+ }
+
+ /**
+ * 鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)
+ */
+ @ApiOperation("鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)")
+ @PostMapping("/taskPull")
+ public List<PullTaskVO> taskPull() {
+ log.info("鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)");
+ List<PullTaskVO> pullTaskVOList = phoneApi.taskPull();
+ log.info("鐢佃瘽浠诲姟鎷夊彇鏁版嵁(闆ㄧ划):{}", pullTaskVOList);
+ return pullTaskVOList;
+ }
+
+ /**
+ * 鎮h�呴棶棰樼粨鏋滆褰�(鐢佃瘽)
+ */
+ @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰曪紙鐢佃瘽锛�")
+ @PostMapping("/saveQuestionAnswerPhone")
+ public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
+ log.info("鎮h�呴棶棰樼粨鏋滆褰�(鐢佃瘽):{}", serviceSubTaskDetailReq);
+ return toAjax(phoneApi.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
+ }
+
+ /**
+ * 閫氳瘽璁板綍鍥炶皟(涓婃捣)
+ */
+ @ApiOperation("閫氳瘽璁板綍鍥炶皟(涓婃捣)")
+ @PostMapping("/recordAcceptshanghai")
+ public AjaxResult recordAccepshanghait(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
+ log.info("閫氳瘽璁板綍鍥炶皟(涓婃捣):{}", serviceSubTaskDetailReq);
+ return toAjax(phoneApi.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
+ }
+
+ /**
+ * 閫氳瘽璁板綍鍥炶皟(闆ㄧ划)
+ */
+ @ApiOperation("閫氳瘽璁板綍鍥炶皟(闆ㄧ划)")
+ @PostMapping("/recordAccept")
+ public AjaxResult recordAccept(@RequestBody PhoneCallRecordVO phoneCallRecordVO) {
+ log.info("閫氳瘽璁板綍鍥炶皟(闆ㄧ划):{}", phoneCallRecordVO);
+ phoneApi.recordAccept(phoneCallRecordVO);
+ return success();
+ }
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/ShPhoneController.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/ShPhoneController.java
new file mode 100644
index 0000000..6ba1a1c
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/controller/ShPhoneController.java
@@ -0,0 +1,56 @@
+package com.ruoyi.phone.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.phone.api.PhoneApi;
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PhoneCallResultYQVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+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 java.util.Map;
+
+/**
+ * 涓夋眹鐢佃瘽娴佺▼鍥炶皟 Controller銆�
+ *
+ * <h3>URL 涓庢ā鍧楀寲鍓嶅畬鍏ㄤ竴鑷�</h3>
+ * 鍘熷疄鐜版斁鍦� {@code ruoyi-admin} 鐨� {@code ServicePhoneController}
+ * 锛坽@code /smartor/shphone/getFirstQues}銆亄@code /smartor/shphone/processResust}锛夛紝
+ * 褰掑睘鐢佃瘽妯″潡鍚庢暣浣撴惉鍒拌繖閲岋紝<b>璺緞涓嶅彉</b>锛屼笁姹囧钩鍙版棤闇�鏀瑰洖璋冨湴鍧�銆�
+ * 鍓╀笅閭d釜 {@code /smartor/shphone/addOutboundInstance}锛堝鍛煎疄渚嬮厤缃級渚濊禆 smartor 鐨�
+ * {@code IServicePhoneService}锛屼笉灞炰簬鐢佃瘽浼氳瘽閾捐矾锛屼粛鐣欏湪 ruoyi-admin銆�
+ *
+ * @author ls
+ * @date 2026-08-26
+ */
+@Slf4j
+@Api(description = "涓夋眹鐢佃瘽娴佺▼鏈嶅姟")
+@RestController
+@RequestMapping("/smartor/shphone")
+public class ShPhoneController extends BaseController {
+
+ @Autowired
+ private PhoneApi phoneApi;
+
+ @ApiOperation("鏍规嵁鐢佃瘽鍙风爜,鑾峰彇棣栦釜闂")
+ @PostMapping("/getFirstQues")
+ public Map<String, Object> getFirstQues(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
+ log.info("鏍规嵁鐢佃瘽鍙风爜,鑾峰彇棣栦釜闂锛焮}", phoneCallReqYQVO);
+ PhoneCallBackSHVO phoneCallBackSHVO = phoneApi.getFirstQues(phoneCallReqYQVO);
+ return success(phoneCallBackSHVO);
+ }
+
+ @ApiOperation("涓夋眹 ASR 缁撴灉澶勭悊")
+ @PostMapping("/processResust")
+ public Map<String, Object> processResust(@RequestBody PhoneCallResultYQVO resultYQVO) {
+ log.info("涓夋眹 ASR 缁撴灉澶勭悊 (涓夋眹)锛焮}", resultYQVO);
+ PhoneCallBackSHVO phoneCallBackSHVO = phoneApi.processResust(resultYQVO);
+ return success(phoneCallBackSHVO);
+ }
+}
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallBackSHVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackSHVO.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallBackSHVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackSHVO.java
index 34dcb5a..cf6a0a3 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallBackSHVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackSHVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallBackVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackVO.java
similarity index 97%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallBackVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackVO.java
index 601dedb..4f2b4a2 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallBackVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallBackYQVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackYQVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallBackYQVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackYQVO.java
index 8acc519..f4bc692 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallBackYQVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackYQVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallRecordVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallRecordVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallRecordVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallRecordVO.java
index ea185d1..3347cb3 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallRecordVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallRecordVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallReqYQVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallReqYQVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallReqYQVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallReqYQVO.java
index defbbb5..7d435ca 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallReqYQVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallReqYQVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PhoneCallResultYQVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallResultYQVO.java
similarity index 97%
rename from smartor/src/main/java/com/smartor/domain/PhoneCallResultYQVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallResultYQVO.java
index 18fbbb1..8ce77c7 100644
--- a/smartor/src/main/java/com/smartor/domain/PhoneCallResultYQVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallResultYQVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/PullTaskVO.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PullTaskVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/PullTaskVO.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PullTaskVO.java
index a26068b..bbeff7f 100644
--- a/smartor/src/main/java/com/smartor/domain/PullTaskVO.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PullTaskVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/QuestionMessage.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/QuestionMessage.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/domain/QuestionMessage.java
rename to ruoyi-phone/src/main/java/com/ruoyi/phone/domain/QuestionMessage.java
index 0b16470..9f0c897 100644
--- a/smartor/src/main/java/com/smartor/domain/QuestionMessage.java
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/domain/QuestionMessage.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.phone.domain;
import lombok.Data;
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/service/IPhoneService.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/service/IPhoneService.java
new file mode 100644
index 0000000..ff4dbef
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/service/IPhoneService.java
@@ -0,0 +1,78 @@
+package com.ruoyi.phone.service;
+
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallBackVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PhoneCallRecordVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PhoneCallResultYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+
+import java.util.List;
+
+/**
+ * 鐢佃瘽涓氬姟Service鎺ュ彛锛堝師 {@code IServiceSubtaskService} 閲岀殑鐢佃瘽閮ㄥ垎锛夈��
+ * <p>
+ * 鈿狅笍 <b>杩欐槸妯″潡鍐呴儴鎺ュ彛</b>锛屽叾瀹冩ā鍧楄娉ㄥ叆 {@code com.ruoyi.phone.api.PhoneFacade}锛坽@code PhoneApi}锛夛紝
+ * 浠ヤ究鑷姩鑾峰緱寮�鍏抽檷绾т笌缁熶竴鍏ュ彛銆�
+ *
+ * @author ruoyi
+ * @date 2024-08-08
+ */
+public interface IPhoneService {
+
+ /**
+ * 鐢佃瘽鍥炶皟浠诲姟(涓婃捣)锛氳闊宠瘑鍒粨鏋滀笂鎶ワ紝椹卞姩澶氳疆闂瓟
+ *
+ * @param phoneCallBackVO 鍥炶皟鍏ュ弬
+ */
+ void phoneCallBack(PhoneCallBackVO phoneCallBackVO);
+
+ /**
+ * 鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)
+ *
+ * @param phoneCallReqYQVO 鍥炶皟鍏ュ弬
+ * @return 涓嬩竴姝ユ挱鎶ュ唴瀹�
+ */
+ PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO);
+
+ /**
+ * 闆ㄧ划浠诲姟鎷夊彇锛氭寜灏忔椂閰嶉浠� redis 闃熷垪鍙栧緟澶栧懠瀛愪换鍔�
+ *
+ * @return 寰呭鍛间换鍔″垪琛�
+ */
+ List<PullTaskVO> taskPull();
+
+ /**
+ * 鐢佃瘽渚ф偅鑰呴棶棰樼粨鏋滆惤搴擄紙service_subtask_detail锛�
+ *
+ * @param serviceSubTaskDetailReq 鏄庣粏鍏ュ弬
+ * @return 钀藉簱鏉℃暟
+ */
+ Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq);
+
+ /**
+ * 閫氳瘽璁板綍鍥炶皟(闆ㄧ划)锛氭棤浜烘帴鍚� / 宸插畬鎴� / 鎷掕
+ *
+ * @param phoneCallRecordVO 閫氳瘽璁板綍
+ * @return 澶勭悊缁撴灉锛堝浐瀹� 1锛�
+ */
+ Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO);
+
+ /**
+ * 鏍规嵁鐢佃瘽鍙风爜鑾峰彇棣栦釜闂(涓夋眹)
+ *
+ * @param phoneCallReqYQVO 鍏ュ弬
+ * @return 瀛愪换鍔′笌棣栭淇℃伅
+ */
+ PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO);
+
+ /**
+ * 涓夋眹ASR缁撴灉澶勭悊
+ *
+ * @param phoneCallResultYQVO ASR 缁撴灉
+ * @return 涓嬩竴棰樺唴瀹�
+ */
+ PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO);
+}
diff --git a/ruoyi-phone/src/main/java/com/ruoyi/phone/service/impl/PhoneServiceImpl.java b/ruoyi-phone/src/main/java/com/ruoyi/phone/service/impl/PhoneServiceImpl.java
new file mode 100644
index 0000000..33123ee
--- /dev/null
+++ b/ruoyi-phone/src/main/java/com/ruoyi/phone/service/impl/PhoneServiceImpl.java
@@ -0,0 +1,2056 @@
+package com.ruoyi.phone.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.core.service.SubtaskOptionMatchApi;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.*;
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallBackVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PhoneCallRecordVO;
+import com.ruoyi.phone.domain.PhoneCallReqYQVO;
+import com.ruoyi.phone.domain.PhoneCallResultYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+import com.ruoyi.phone.domain.QuestionMessage;
+import com.ruoyi.phone.service.IPhoneService;
+import com.ruoyi.task.api.TaskSubtaskApi;
+import com.ruoyi.task.api.spi.TaskFtpPort;
+import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.api.spi.TaskSysConfigPort;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.template.domain.IvrLibaExtemplatescript;
+import com.ruoyi.template.domain.IvrTaskTemplate;
+import com.ruoyi.template.domain.IvrTaskTemplateScript;
+import com.ruoyi.template.domain.IvrTaskTemplateScriptVO;
+import com.ruoyi.template.domain.IvrTaskTemplateTargetoption;
+import com.ruoyi.template.domain.IvrTaskTemplateVO;
+import com.ruoyi.template.domain.SvyLibScriptCategory;
+import com.ruoyi.template.service.IIvrLibaExtemplatescriptService;
+import com.ruoyi.template.service.IIvrTaskTemplateScriptService;
+import com.ruoyi.template.service.IIvrTaskTemplateService;
+import com.ruoyi.template.service.IIvrTaskTemplateTargetoptionService;
+import com.ruoyi.template.service.ISvyLibScriptCategoryService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.ListOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * 鐢佃瘽涓氬姟Service瀹炵幇锛堝師 {@code ruoyi-task} 閲� {@code ServiceSubtaskServiceImpl} 鐨勭數璇濋儴鍒嗭級銆�
+ *
+ * <h3>杩欎釜绫绘槸鎬庝箞鏉ョ殑</h3>
+ * 閫愯浠� {@code ServiceSubtaskServiceImpl} 鎼嚭锛屽彧鍋氫袱绫绘満姊版敼鍐欙紝<b>涓氬姟鍒嗘敮涓�琛屾湭鍔�</b>锛�
+ * <ol>
+ * <li><b>鏁版嵁璁块棶鎹㈠叆鍙�</b>锛氬師 {@code serviceSubtaskMapper} / {@code serviceSubtaskDetailMapper} /
+ * {@code serviceTaskVisitResultMapper} / {@code serviceTaskService} / {@code traceService}
+ * 鐨勮皟鐢紝缁熶竴鏀逛负 {@link TaskSubtaskApi}锛堣〃褰� {@code ruoyi-task}锛岄潪褰掑睘妯″潡涓嶈鍐欒繖浜涜〃锛夛紱</li>
+ * <li><b>璺ㄦā鍧楄鍙栨崲鍏ュ彛</b>锛氭ā鏉胯瘽鏈敼璧� {@code ruoyi-template} 鐨� service 鎺ュ彛
+ * 锛坽@code IIvrTaskTemplateService} / {@code IIvrTaskTemplateScriptService} /
+ * {@code IIvrTaskTemplateTargetoptionService} / {@code IIvrLibaExtemplatescriptService} /
+ * {@code ISvyLibScriptCategoryService}锛夛紱AI 閫夐」鍖归厤鏀硅蛋 ruoyi-common 濂戠害
+ * {@link SubtaskOptionMatchApi}锛堝疄鐜板湪 {@code ruoyi-task}锛屽師 {@code matchOptionIndex} 浠嶇暀鍦ㄩ偅杈癸級銆�</li>
+ * </ol>
+ *
+ * <h3>浼氳瘽鐘舵�佸湪鍝噷</h3>
+ * 涓�閫氱數璇濈殑杩涜鐘舵�侊紙褰撳墠棰樺彿銆佸凡闂亶鏁般�侀潤榛樻鏁般�佸垎鏁般�佹槸鍚﹀凡鎸傛満銆佺粨鏉熻绛夛級
+ * <b>鍏ㄩ儴鏀惧湪 Redis</b>锛坘ey 鍓嶇紑鏄湰閫氱數璇濈殑 uuid 鎴�"瀛愪换鍔D-鎵嬫満鍙�"锛夛紝
+ * 杩欎簺 key 鐨勬嫾鍐欍�乀TL銆佽鍐欓『搴忎笌鍘熷疄鐜板畬鍏ㄤ竴鑷� 鈥斺�� 鐢佃瘽鍥炶皟鏄閮ㄥ钩鍙伴┍鍔ㄧ殑銆�
+ * 杩涚▼閲嶅惎鍚庤缁х画锛屾墍浠ヨ繖浜� key 灏辨槸"涓氬姟鐘舵�佹満"锛岃縼绉绘椂涓嶈兘鍔ㄣ��
+ *
+ * <h3>琚埢鎰忓垹鎺夌殑涓滆タ</h3>
+ * 鍘� {@code ServiceSubtaskServiceImpl#getSmsCompensate(Long)}锛�"鐢佃瘽鐨勮ˉ鍋挎柟娉曪紙鑰侊級"锛夋病鏈夋惉锛�
+ * 瀹冪殑涓や釜璋冪敤鐐癸紙{@code phoneCallBackYQ} 閲�"鎮h�呮寕鏂�"銆亄@code recordAccept} 閲�"鏃犱汉鎺ュ惉"锛�
+ * 鍦ㄦā鍧楀寲鍓嶅氨宸茶娉ㄩ噴鎺夛紝灞炴浠g爜锛涙惉杩囨潵鍙細鎶� {@code service_out_path} /
+ * 鐭俊鍙戦�佹柟 / {@code pub_key} 涓�涓蹭緷璧栨嫋杩涚數璇濇ā鍧椼�傚闇�鎭㈠鐢佃瘽琛ュ伩锛岃鎸�
+ * {@code doc/鐢佃瘽妯″潡鍖朹璋冪爺涓庡疄鏂芥柟妗�.md} 鐨勮鏄庤蛋"褰掑睘妯″潡 API"琛ラ綈銆�
+ *
+ * @author ruoyi
+ * @date 2024-08-08
+ */
+@Slf4j
+@Service
+public class PhoneServiceImpl implements IPhoneService {
+
+ /**
+ * 浠诲姟鏁版嵁璁块棶 API锛氬瓙浠诲姟 / 瀛愪换鍔℃槑缁� / 浠诲姟璁块棶缁撴灉 / 寮傚父璺熻釜銆�
+ * <p>
+ * 杩欎簺琛ㄥ綊 {@code ruoyi-task}锛屾湰妯″潡涓嶅啓瀹冧滑鐨� SQL锛屽彧缁忚繖涓� API 璇诲啓銆�
+ */
+ @Autowired
+ private TaskSubtaskApi taskSubtaskApi;
+
+ /**
+ * 鍙戦�佹柟寮忕姸鎬侊紙service_subtask_preachform锛夛細璁板綍"鐢佃瘽"杩欎竴閫氶亾鐨勫彂閫佺姸鎬佷笌澶囨敞銆�
+ * 璇ヨ〃褰� ruoyi-inhospvisit锛岀敱 smartor 渚ч�傞厤瀹炵幇鏈鍙c��
+ */
+ @Autowired
+ private TaskPreachformPort taskPreachformPort;
+
+ /**
+ * 褰曢煶鏂囦欢涓嬭浇锛堥洦缁�氳瘽璁板綍鍥炶皟閲屾妸褰撳ぉ褰曢煶浠� FTP 鎷夊洖鏈湴锛�
+ */
+ @Autowired
+ private TaskFtpPort taskFtpPort;
+
+ /**
+ * 鍙傛暟閰嶇疆璇诲彇锛坽@code sys.voice.match.ai.url}锛欰I 閫夐」鍖归厤鏈嶅姟鍦板潃锛屾寜鏈烘瀯閰嶇疆锛�
+ */
+ @Autowired
+ private TaskSysConfigPort taskSysConfigPort;
+
+ /**
+ * AI 閫夐」鍖归厤濂戠害锛坮uoyi-common锛屽疄鐜板湪 ruoyi-task锛屽嵆鍘� {@code matchOptionIndex}锛�
+ */
+ @Autowired
+ private SubtaskOptionMatchApi subtaskOptionMatchApi;
+
+ @Autowired
+ private RedisCache redisCache;
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private IIvrTaskTemplateService ivrTaskTemplateService;
+
+ @Autowired
+ private IIvrTaskTemplateScriptService iIvrTaskTemplateScriptService;
+
+ @Autowired
+ private IIvrTaskTemplateTargetoptionService ivrTaskTemplateTargetoptionService;
+
+ @Autowired
+ private IIvrLibaExtemplatescriptService ivrLibaExtemplatescriptService;
+
+ @Autowired
+ private ISvyLibScriptCategoryService svyLibScriptCategoryService;
+
+ /**
+ * 闆ㄧ划浠诲姟鎷夊彇鏃跺洖濉殑 ASR 鍥炶皟鍦板潃
+ */
+ @Value("${ASRCallBackPath}")
+ private String ASRCallBackPath;
+
+ /**
+ * 闆ㄧ划澶栧懠璐﹀彿
+ */
+ @Value("${app_key_yq}")
+ private String app_key_yq;
+
+ /**
+ * 涓婃捣閫氶亾鐭俊琛ュ伩涓茶В瀵嗙敤锛坽@code saveQuestionAnswerPhone} 鐨� param1/param2锛�
+ */
+ @Value("${pri_key}")
+ private String pri_key;
+
+ /**
+ * 闆ㄧ划鎸傛満鎺ュ彛鍦板潃
+ */
+ @Value("${hangup}")
+ private String hangup;
+
+ /**
+ * 褰曢煶鏈湴鏍圭洰褰曪紙{@code ruoyi.profile}锛�
+ */
+ @Value("${ruoyi.profile}")
+ private String profile;
+
+ /**
+ * 璇煶鏂囦欢瀵瑰璁块棶鍓嶇紑锛堝瓨搴撳墠鎶� FTP 缁濆璺緞鏀瑰啓鎴愬墠绔彲璁块棶璺緞锛�
+ */
+ @Value("${voicePathPrefix}")
+ private String voicePathPrefix;
+
+ /**
+ * 姣忓皬鏃跺彲澶栧懠閲�
+ */
+ @Value("${phoneUpEveryHour}")
+ private Integer phoneUpEveryHour;
+
+ /**
+ * 鍋滄澶栧懠鐨勬椂鍒伙紙灏忔椂锛岄粯璁� 20 鐐癸級
+ */
+ @Value("${phoneEndHour}")
+ private Integer phoneEndHour;
+
+ @Override
+ public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
+ phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
+ SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
+
+ //鑾峰彇鏁版嵁
+ Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
+ if (!aBoolean) {
+ throw new BaseException("璇uid涓嶅瓨鍦�");
+ }
+ Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
+ PhoneUtils phoneUtils = new PhoneUtils();
+ if (hangupValue != null && hangupValue == 1) {
+ String date = simpleDateFormat1.format(new Date());
+ log.info("鐢佃瘽瑕佹寕鏂簡: {}", date);
+ //hangupValue == 1 闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
+ phoneUtils.hangup("", "", "", "", "", "", "", phoneCallBackVO.getUuid());
+ return;
+ }
+
+ Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
+ ServiceSubtask serviceSubtask = (ServiceSubtask) map.get("ServiceSubtask");
+ List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOs = (List<IvrTaskTemplateScriptVO>) map.get("IvrTaskTemplateScriptVO");
+ //灏唘uid鏇存柊鍒版暟鎹簱涓�
+ serviceSubtask.setSenduuid(phoneCallBackVO.getUuid());
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+
+ //鑾峰彇妯℃澘淇℃伅
+ IvrTaskTemplateVO ivrTaskTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "IvrTaskTemplateVO");
+
+ //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
+ Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
+ QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+ //灏嗕紶鍥炵殑缁撴灉鏀惧埌鍥炲瀵硅薄涓�
+ returnQues.setContent(phoneCallBackVO.getTextResult());
+
+ IvrTaskTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
+
+ if (StringUtils.isEmpty(returnQues.getContent())) {
+ //鏃犲洖璇�
+ //鍒ゆ柇noVoice鏄惁宸茬粡鍒颁簡鏈�澶у��
+ if (noVoice == ivrTaskTemplateVO.getNoVoiceNum().intValue()) {
+ //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
+ if (nowQuestion.getTargetid() == IvrTaskTemplateScriptVOs.size()) {
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(5L);
+ ss.setRemark("鐢佃瘽鏃犲搷搴�");
+ taskSubtaskApi.updateSubtask(ss);
+ //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+ phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+ return;
+ } else {
+ //鏈変笅涓�棰�
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+ IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
+ // 闂锛� 鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
+ String date = simpleDateFormat1.format(new Date());
+ log.info("鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
+ }
+ } else {
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
+ //璋冪敤ivrLibaTemplateScriptVO涓殑slienceText(闈欓粯璇濇湳)
+ String slienceText = nowQuestion.getSlienceText();
+ //闈欓粯璇濇湳 + 闂锛� 鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
+ String date = simpleDateFormat1.format(new Date());
+ log.info("闈欓粯璇濇湳 + 闂,鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
+ return;
+ }
+
+ } else {
+ //isppd鐢ㄦ潵璁板綍鏄惁鍖归厤鍒�
+ Boolean isppd = false;
+ //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝e垯鍖归厤锛堣繖閲屽彧閽堝閫夋嫨棰橈紝鍏跺畠棰樺瀷涓嶈锛�
+ for (int j = 0; j < nowQuestion.getIvrTaskScriptTargetoptionList().size(); j++) {
+ //鍖呭惈
+ Matcher matcher = null;
+ if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex())) {
+ Pattern pattern = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex());
+ matcher = pattern.matcher(phoneCallBackVO.getTextResult());
+ }
+ //涓嶅寘鍚�
+ Matcher matcher2 = null;
+ if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2())) {
+ Pattern pattern2 = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
+ matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
+ }
+ log.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
+ if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
+ //璇存槑鍖归厤姝g‘浜�
+ //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
+ nowQuestion.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
+ ivrTaskTemplateTargetoptionService.updateIvrTaskTemplateTargetoption(nowQuestion.getIvrTaskScriptTargetoptionList().get(j));
+
+ //灏嗛潤榛樼疆涓�0
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+
+ //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
+ IvrTaskVisitResult serviceTaskVisitResult = DtoConversionUtils.sourceToTarget(serviceSubtask, IvrTaskVisitResult.class);
+ serviceTaskVisitResult.setId(null);
+ serviceTaskVisitResult.setQuestion(nowQuestion.getIvrtext());
+ serviceTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
+ serviceTaskVisitResult.setCreateTime(new Date());
+ serviceTaskVisitResult.setOptionResult(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetvalue());
+ taskSubtaskApi.insertVisitResult(serviceTaskVisitResult);
+
+ //灏嗗尮閰嶅埌鐨勬爣璇嗘敼鎴恡rue
+ isppd = true;
+
+ //鑾峰彇涓嬩竴棰�
+ Long nextQuestion = nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
+ for (IvrTaskTemplateScriptVO script : IvrTaskTemplateScriptVOs) {
+ if (script.getTargetid() == nextQuestion) {
+ QuestionMessage questionMessage = new QuestionMessage();
+ questionMessage.setNowQuestion(script);
+ questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+ phoneUtils.ttsPlayback(script.getIvrtext(), phoneCallBackVO.getUuid());
+ return;
+ } else if (nextQuestion > IvrTaskTemplateScriptVOs.size()) {
+ //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(6L);
+ taskSubtaskApi.updateSubtask(ss);
+ String date = simpleDateFormat1.format(new Date());
+ log.error("娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+ phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ phoneUtils.hangup("", "", ivrTaskTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
+ return;
+ }
+ }
+ return;
+ } else {
+ //娌℃湁鍖归厤涓婂綋鍓峯ption
+ //Targetregex2 涓篺alse锛岃〃绀哄湪Targetregex2涓瓨鍦� 璇彞涓殑鍏抽敭瀛楋紝杩欎釜option灏变笉鐢ㄥ啀缁х画鍖归厤浜嗭紝鐩存帴鍖归厤涓嬩竴涓猳ption
+ continue;
+ }
+ }
+
+ if (isppd != true) {
+ //娌℃湁鍖归厤鍒�
+ Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
+ if (mateNum == null) mateNum = 0;
+ //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
+ if (mateNum == ivrTaskTemplateVO.getMateNum().intValue()) {
+ //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
+ if (nowQuestion.getTargetid() < IvrTaskTemplateScriptVOs.size()) {
+ QuestionMessage questionMessage = new QuestionMessage();
+ IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
+ questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
+ questionMessage.setNowQuestion(nextQuestion);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
+ String date = simpleDateFormat1.format(new Date());
+ log.info("濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ phoneUtils.ttsPlayback(nextQuestion.getIvrtext(), phoneCallBackVO.getUuid());
+ return;
+ } else {
+ //灏卞彲浠ユ寕鏂數璇濅簡
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(6L);
+ taskSubtaskApi.updateSubtask(ss);
+
+ String date = simpleDateFormat1.format(new Date());
+ log.info("灏卞彲浠ユ寕鏂數璇濅簡------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
+ phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ phoneUtils.hangup("", "", ivrTaskTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
+ return;
+ }
+ } else if (mateNum < ivrTaskTemplateVO.getMateNum().intValue()) {
+ //娌℃湁闂埌瑙勫畾娆℃暟
+ mateNum = mateNum + 1;
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
+ }
+ }
+ //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
+ String extemplateID = ivrTaskTemplateVO.getSubmoduleID();
+ String[] split = extemplateID.split(",");
+ List<String> list = Arrays.asList(split);
+ List<Long> list1 = new ArrayList<>();
+ if (StringUtils.isNotEmpty(extemplateID)) {
+ for (String str : list) {
+ list1.add(Long.valueOf(str));
+ }
+ List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptService.queryIvrLibaExtemplatescriptList(list1);
+ for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
+ Matcher matcher = null;
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
+ Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
+ matcher = pattern.matcher(returnQues.getContent());
+ }
+
+ Matcher matcher2 = null;
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
+ Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
+ matcher2 = pattern2.matcher(returnQues.getContent());
+ }
+ log.error("++++++++++++++++++++++++++閫氱敤搴撴槸鍚︿负绌猴細selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2());
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
+ QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
+ IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = returnQues.getNowQuestion();
+ ivrTaskTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText());
+ ivrTaskTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav());
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+ if (ivrLibaExtemplatescript.getIsEnd() == 1) {
+ //灏嗛棶棰樼疆绌�
+ IvrTaskTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion();
+ nowQuestion1.setScriptContent(null);
+ nowQuestion1.setScriptVoice(null);
+ questionMessage.setNowQuestion(nowQuestion1);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
+ redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES);
+ }
+ //璋冪敤"15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback"灏嗙粨鏋滀紶鍥�
+ String date = simpleDateFormat1.format(new Date());
+ log.info("璋冪敤tts鍚堟垚鍜屾挱鏀�------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ phoneUtils.ttsPlayback(nowQuestion.getIvrtext() + ivrTaskTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
+ }
+ break;
+ }
+ String date = simpleDateFormat1.format(new Date());
+ log.info("鏈�鍚庣殑淇℃伅鍥炲-: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
+ phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
+ }
+ }
+ }
+
+ /**
+ * 鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)
+ *
+ * @param phoneCallReqYQVO
+ */
+ @Override
+ public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO) {
+ //鍏堟妸璇ubId浠巆ache_exist涓墧闄わ紝鍙鏈夊洖璋冨氨鍓旈櫎锛堢洰鐨勬槸锛屽敖蹇cache-exist涓虹┖锛屽幓缂撳瓨涓嬩竴鎵硅鎵撶殑鐢佃瘽;杩欓噷鍓旈櫎涓嶅奖鍝嶇數璇濈殑姝e父涓氬姟锛�
+// redisCache.removeElementFromList("cache-exist", phoneCallReqYQVO.getTaskid());
+
+ //鍒ゆ柇鏄惁鎸傛満
+ String hangupState = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- hangup");
+ Object cacheObject1 = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+ if (StringUtils.isNotEmpty(hangupState) && hangupState.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) {
+ return new PhoneCallBackYQVO();
+ }
+ if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
+ //澶勭悊鎸傛柇
+ if (phoneCallReqYQVO.getAsrtext().contains("鎷ㄥ彨鐨勭敤鎴锋蹇�")) {
+ //鍒ゆ柇 recordAccept-hungup 鏄惁鏈夊�硷紝濡傛灉鏈夛紝鍒欒鏄庝笉鐢ㄥ鐞嗕簡锛屼箣鍓嶅凡缁忓鐞嗚繃浜嗭紙recordAccept-hungup杩欎釜涓昏鏄粰"閫氳瘽璁板綍鐢ㄧ殑锛�"锛�
+ Object cacheObject = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+ if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ setFailPreachForm(serviceSubtask, "3", "鎷ㄥ彨鐨勭敤鎴锋蹇�", "4");
+ return new PhoneCallBackYQVO();
+ }
+ //濡傛灉鍙戦�佺姸鎬佷负6锛屽氨璇存槑宸茬粡鎵撳畬浜嗭紝涔熸病鏈夊繀瑕佺户缁線涓嬭蛋浜�
+ if (StringUtils.isNotEmpty(phoneCallReqYQVO.getTaskid())) {
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ if (serviceSubtask.getSendstate() == 6L) return new PhoneCallBackYQVO();
+ }
+
+ ServiceSubtask serviceSubtask2 = new ServiceSubtask();
+ serviceSubtask2.setRemark("鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級");
+ serviceSubtask2.setSenduuid(phoneCallReqYQVO.getUuid());
+ serviceSubtask2.setId(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ taskSubtaskApi.updateSubtask(serviceSubtask2);
+ Map<String, String> req = new HashMap<>();
+ req.put("uuid", phoneCallReqYQVO.getUuid());
+ req.put("caller", phoneCallReqYQVO.getPhone());
+ HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- hangup", "1", 2, TimeUnit.MINUTES);
+ //鍏堟妸榛樿鐨剅ecordAccept-hungup鍒犻櫎锛屽啀鏇存柊
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
+
+ //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+ setFailPreachForm(serviceSubtask2, "3", "鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級", "4");
+
+ //杩欎釜鏃跺�欏氨闇�瑕佽蛋琛ュ伩鏈哄埗浜嗭紝鍏堟殏瀹氳蛋鐭俊
+ //鍘� getSmsCompensate(...) 鏈殢鐢佃瘽妯″潡鍖栨惉杩侊紙妯″潡鍖栧墠璋冪敤鐐瑰氨宸叉敞閲娿�佸睘姝讳唬鐮侊級锛�
+ //濡傞渶鎭㈠鐭俊琛ュ伩锛岃璧� service_out_path / 鐭俊鍙戦�佹柟鐨勫綊灞炴ā鍧� API锛岃 doc/鐢佃瘽妯″潡鍖朹璋冪爺涓庡疄鏂芥柟妗�.md
+ return new PhoneCallBackYQVO();
+ }
+ }
+ //瀹氫箟涓�涓垎鏁扮殑鍙橀噺
+ Boolean aBoolean1 = redisCache.hasKey(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (!aBoolean1) redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", 0.0, 120, TimeUnit.MINUTES);
+ PhoneCallBackYQVO phoneCallBackYQVO = new PhoneCallBackYQVO();
+ //channel_create 閫氶亾鍒涘缓鐨勬椂鍊欙紝鍙互鎵ц涓�浜涘叾瀹冩搷浣滐紝璀鍙戜釜鐭俊涔嬬被鐨�; 鎴戜滑鐨勪笟鍔″彲浠ヤ笉鐢ㄧ PlayEventCallback 杩欎釜鏄挱鏀捐闊崇殑,鏆傛椂鐢ㄤ笉鍒� End_time()= -1鎴杗ull琛ㄧず褰撳墠鐨刟srtext涓嶆槸涓�鍙ュ畬鏁寸殑璇�
+ if (phoneCallReqYQVO.getOperate().equals("channel_create")) {
+ return phoneCallBackYQVO;
+ }
+ //PlayEventCallback 杩欎釜鏄挱鏀捐闊崇殑 playstart锛氭斁闊冲紑濮嬶紙闂鎾姤寮�濮嬶級 playstop锛� 鏀鹃煶缁撴潫锛堥棶棰樻挱鎶ョ粨鏉燂級
+ if (phoneCallReqYQVO.getOperate().equals("PlayEventCallback")) {
+ String cacheJSY = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- jsy");
+ if (phoneCallReqYQVO.getOperate().equals("PlayEventCallback") && phoneCallReqYQVO.getPlaystop() == false) {
+ //鍒ゆ柇redis涓槸鍚︽湁缁撴潫璇�
+ if (StringUtils.isEmpty(cacheJSY)) {
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop", false, 120, TimeUnit.MINUTES);
+ log.error("PlayEventCallbackPlaystop鐨勫�间负-------锛歿}", false);
+ }
+ } else {
+ //濡傛灉缁撴潫璇笉涓虹┖锛屽垯瑕佹寕鐢佃瘽浜�
+ if (StringUtils.isNotEmpty(cacheJSY)) {
+ Map<String, String> req = new HashMap<>();
+ req.put("uuid", phoneCallReqYQVO.getUuid());
+ req.put("caller", phoneCallReqYQVO.getPhone());
+// HttpUtils.sendPost(hangup, new Gson().toJson(req));
+ HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+ setFailPreachForm(serviceSubtask, "3", "閫氳瘽姝e父缁撴潫", "9");
+ //鍒犻櫎缁撴潫璇殑缂撳瓨
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "- jsy");
+ } else {
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop", true, 120, TimeUnit.MINUTES);
+ log.error("-------PlayEventCallbackPlaystop鐨勫�间负锛歿}", true);
+ }
+ }
+
+ return phoneCallBackYQVO;
+ }
+ //鑾峰彇鏀鹃煶鏄惁缁撴潫
+ Object isPlayEventOverObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ if (ObjectUtils.isNotEmpty(isPlayEventOverObj)) {
+ Boolean isPlayEventOver = (Boolean) isPlayEventOverObj;
+ if (!isPlayEventOver) {
+ return phoneCallBackYQVO;
+ }
+ }
+
+ //閫氳繃瀛愪换鍔D鑾峰彇鍒版ā鏉夸俊鎭�
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
+ //鑾峰彇妯℃澘闂
+ IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
+ ivrTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
+ List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
+ //鑾峰彇闂ID 鍜� 搴忓彿
+ String scriptId = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim());
+ log.error("scriptId鏄灏戯細{}", scriptId);
+ //褰撳墠棰樼殑淇℃伅
+ IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = iIvrTaskTemplateScriptService.getTaskTempScriptInfoByid(Long.valueOf(scriptId));
+ //鍒ゆ柇UUID鏄惁瀛樺湪
+ Boolean aBoolean = redisCache.hasKey(phoneCallReqYQVO.getUuid());
+ if (!aBoolean) {
+ //缁欓潤榛樿缃竴涓粯璁ゆ鏁板湪redis涓�
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
+ //濡傛灉涓嶅瓨鍦紝灏辨妸褰撳墠鐨刄UID鍋氫负key锛屾斁鍒板璞′腑鍘�
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid(), phoneCallReqYQVO, 120, TimeUnit.MINUTES);
+ }
+
+ if ("SilentCallback".equals(phoneCallReqYQVO.getOperate())) {
+ //濡傛灉鏄潤榛樺洖璋�
+ Integer num = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍒ゆ柇闈欓粯鍥炶皟娆℃暟鏄惁灏忎笌妯℃澘瑙勫畾鐨勬鏁�
+ if (num < ivrTaskTemplate.getNoVoiceNum()) {
+ //灏忎笌鐨勮瘽,灏辩户缁棶鎮h��
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = ivrTaskTemplateScriptVO.getIvrtext();
+ log.error("SilentCallback鐨勯棶棰樺唴瀹箂criptContent锛歿}", scriptContent);
+ phoneCallBackYQVO.setValue(getObject(serviceSubtask, scriptContent));
+ //灏嗛潤榛樻鏁板姞1
+ Integer noVoiceNum = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "noVoice", noVoiceNum + 1, 120, TimeUnit.MINUTES);
+ return phoneCallBackYQVO;
+ } else {
+ log.error("闈欓粯娆℃暟杈惧埌,鎸傛帀鐢佃瘽锛歿}", num);
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(5L);
+ ss.setRemark("鐢佃瘽闈欓粯");
+ taskSubtaskApi.updateSubtask(ss);
+ //澶т笌绛変簬鐨勮瘽,鐩存帴鎸傛柇
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ phoneCallBackYQVO.setValue(serviceTask1.getJsy());
+ //灏嗙粨鏋滃啓鍒癲etail涓�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+ //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+ Long id = serviceSubtask.getId();
+ //鍏堟洿鏂颁竴涓嬪垎鏁�
+ double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setUpdateTime(new Date());
+ log.error("鍏堟洿鏂颁竴涓嬪垎鏁�,鐢佃瘽鐨剆erviceSubtask鐨勫�间负锛歿}", serviceSubtask);
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "闈欓粯娆℃暟杈惧埌" + num + "娆�", "4");
+
+ Map<String, String> map = delRedisValue(null, id.toString());
+ if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ }
+ return phoneCallBackYQVO;
+ } else if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
+ //鍋氫竴涓爣璇嗭紝鐢ㄦ潵鍦ㄩ�氳瘽璇︽儏鎺ュ彛閲岋紝鍒ゆ柇鏄惁鏈変汉鎺ョ數璇濓紙value=2,琛ㄧず鏈変汉鎺ワ級
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "2", 10, TimeUnit.MINUTES);
+ // 鍏堝閫氳瘽杩涜閫氱敤搴撳尮閰嶄竴娆�
+ String extemplateID = ivrTaskTemplate.getSubmoduleID();
+ if (StringUtils.isNotEmpty(extemplateID)) {
+ String[] split = extemplateID.split(",");
+ List<String> list = Arrays.asList(split);
+ List<Long> list1 = new ArrayList<>();
+ for (String str : list) {
+ list1.add(Long.valueOf(str));
+ }
+ List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptService.queryIvrLibaExtemplatescriptList(list1);
+ IvrLibaExtemplatescript les = null;
+ for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
+ Matcher matcher = null;
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
+ Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
+ matcher = pattern.matcher(phoneCallReqYQVO.getAsrtext());
+ }
+
+ Matcher matcher2 = null;
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
+ Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
+ matcher2 = pattern2.matcher(phoneCallReqYQVO.getAsrtext());
+ }
+ if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
+ //灏嗛�氱敤搴撳尮閰嶇殑锛屾斁鍒拌繑鍥炲�间腑
+// phoneCallBackYQVO.setValue(phoneCallBackYQVO.getValue() + ivrLibaExtemplatescript.getSwitchText());
+ phoneCallBackYQVO.setCommonValue(ivrLibaExtemplatescript.getSwitchText());
+ les = ivrLibaExtemplatescript;
+ }
+ break;
+ }
+ log.info("鏄惁闇�瑕佹寕鏈猴細{}", les);
+ if (ObjectUtils.isNotEmpty(les)) {
+ //瀵瑰尮閰嶇殑缁撴灉澶勭悊涓�涓�(鐪嬬湅鏄笉鏄渶瑕佹寕鏈�)
+ if (les.getIsEnd() != null && les.getIsEnd() == 1) {
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(6L);
+ ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(ss);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //鍙互鎸傛満浜�
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + les.getSwitchText());
+ //灏嗙粨鏋滃啓杩沝etail琛�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ivrTaskTemplateScriptVO.setExtemplateText(les.getSwitchText());
+ serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+ return phoneCallBackYQVO;
+ }
+ }
+ }
+
+ //濡傛灉鏄枃鏈洖璋�
+ //鏍规嵁闂ID鑾峰彇璇ラ棶棰樼殑绫诲瀷
+ if (ivrTaskTemplateScriptVO.getScriptType().equals("1")) {
+ //鐢ㄦ潵鏍囪锛屾槸鍚︽湁鍖归厤涓婄殑
+ Integer flag = 0;
+ //1-AI璇嗗埆
+ String url = taskSysConfigPort.selectConfigValue("sys.voice.match.ai.url", phoneCallReqYQVO.getOrgid());
+
+ if (ObjectUtils.isNotEmpty(url)) {
+ PhoneCallBackYQVO aiMatchResult = AiMatch(url, phoneCallReqYQVO, phoneCallBackYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, ivrTaskTemplateScripts, scriptId, flag, phoneCallReqYQVO.getUuid());
+ if (aiMatchResult != null) {
+ return aiMatchResult;
+ }
+ } else {
+ //鏄�夋嫨棰�
+ for (int j = 0; j < ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size(); j++) {
+ log.error("phoneCallReqYQVO.getAsrtext()鐨勫�间负锛歿}", phoneCallReqYQVO.getAsrtext());
+ if (StringUtils.isEmpty(phoneCallReqYQVO.getAsrtext())) {
+ continue;
+ }
+ boolean matchedFlag = false;
+ //鍖呭惈
+ Matcher matcher = null;
+ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex())) {
+ Pattern pattern = Pattern.compile(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex());
+ matcher = pattern.matcher(phoneCallReqYQVO.getAsrtext());
+ }
+ //涓嶅寘鍚�
+ Matcher matcher2 = null;
+ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2())) {
+ Pattern pattern2 = Pattern.compile(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
+ matcher2 = pattern2.matcher(phoneCallReqYQVO.getAsrtext());
+ }
+
+ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
+ matchedFlag = true;
+ }
+ //璇存槑鍖归厤姝g‘浜�
+ if (matchedFlag) {
+ //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
+ log.info("鍖归厤姝g‘浜嗗悧--------------");
+ ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
+ ivrTaskTemplateTargetoptionService.updateIvrTaskTemplateTargetoption(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j));
+
+ //灏嗘偅鑰呯殑鍥炵鍐欒繘service_subtask_detail涓�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ivrTaskTemplateScriptVO.setQuestionResult(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getOptiondesc());
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+
+ //鍒ゆ柇涓�涓嬪綋鍓嶇殑闂鏄笉鏄弧鎰忓害闂锛屽苟涓攄utyDeptCode鏄惁鏈夊�硷紝骞朵笖閫夐」鏄笉鏄紓甯搁�夐」锛屽鏋滃叏绗﹀悎锛屽垯寰�婊℃剰搴﹂棶棰樺紓甯歌〃鏂板
+ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsabnormal()) {
+ ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
+ //鐢╰askid銆乻ubid鍜宻criptid鍘昏幏鍙杁etailid
+ ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
+ ssd.setSubId(serviceSubtask.getId());
+ ssd.setTaskid(serviceSubtask.getTaskid());
+ ssd.setScriptid(StringUtils.isNotEmpty(scriptId) ? Long.valueOf(scriptId) : null);
+ List<ServiceSubtaskDetail> serviceSubtaskDetails = taskSubtaskApi.findSubtaskDetails(ssd);
+ subtaskDetailTrace.setDetailId(CollectionUtils.isNotEmpty(serviceSubtaskDetails) ? serviceSubtaskDetails.get(0).getId() : null);
+
+ subtaskDetailTrace.setSubId(serviceSubtask.getId());
+ subtaskDetailTrace.setTaskid(serviceSubtask.getTaskid());
+ subtaskDetailTrace.setTemplateid(ivrTaskTemplateScriptVO.getId());
+ subtaskDetailTrace.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
+ subtaskDetailTrace.setSwitchid(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getId());
+ subtaskDetailTrace.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
+ subtaskDetailTrace.setQuestionvoice(null);
+ subtaskDetailTrace.setCategoryname(ivrTaskTemplateScriptVO.getScriptAssortname());
+ subtaskDetailTrace.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
+ //鑾峰彇鎵�鏈夐�夐」
+ String optionDescStr = Optional.ofNullable(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()).filter(list -> !list.isEmpty()).map(list -> list.stream().map(IvrTaskTemplateTargetoption::getOptiondesc).filter(Objects::nonNull).collect(Collectors.joining("&"))).orElse("");
+ subtaskDetailTrace.setTargetid(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getId());
+ subtaskDetailTrace.setTargetvalue(optionDescStr);
+ subtaskDetailTrace.setMatchedtext(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getOptiondesc());
+ subtaskDetailTrace.setValueType(serviceSubtaskDetails.get(0).getValueType());
+ subtaskDetailTrace.setTemplateType(1);
+
+ SvyLibScriptCategory svyLibScriptCategory = svyLibScriptCategoryService.selectSvyLibScriptCategoryById(ivrTaskTemplateScriptVO.getScriptAssortid());
+ subtaskDetailTrace.setType(svyLibScriptCategory.getType());
+ subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId());
+ subtaskDetailTrace.setAsrtext(phoneCallReqYQVO.getAsrtext());
+ subtaskDetailTrace.setRecordpath(phoneCallReqYQVO.getRecordpath());
+ subtaskDetailTrace.setPatid(serviceSubtask.getPatid());
+ JSONObject patdescJson = new JSONObject();
+ patdescJson.put("sendname", serviceSubtask.getSendname());
+ patdescJson.put("phone", serviceSubtask.getPhone());
+ patdescJson.put("age", serviceSubtask.getAge());
+ patdescJson.put("sex", serviceSubtask.getSex() != null ? serviceSubtask.getSex() == 1 ? "鐢�" : "濂�" : null);
+ subtaskDetailTrace.setPatdesc(patdescJson.toJSONString());
+ subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
+ subtaskDetailTrace.setTodeptname(ivrTaskTemplateScriptVO.getDutyDeptName());
+ subtaskDetailTrace.setOrgid(serviceSubtask.getOrgid());
+ subtaskDetailTrace.setHandleFlag("0");
+ subtaskDetailTrace.setGuid(phoneCallReqYQVO.getGuid());
+ subtaskDetailTrace.setCreateTime(new Date());
+ subtaskDetailTrace.setUpdateTime(new Date());
+ subtaskDetailTrace.setOrgid(phoneCallReqYQVO.getOrgid());
+ taskSubtaskApi.insertDetailTrace(subtaskDetailTrace);
+ }
+
+ //鍒ゆ柇涓�涓嬶紝杩欎釜閫夐」缁撴灉鏄笉鏄繕鏈夌户缁棶涓嬪幓鐨勫繀瑕侊紝渚嬪閫夐」缁撴灉鏄埆浜轰笉鎯崇户缁洖绛旈棶棰橈紝灏辫缁撴潫鎺�
+ if (ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsEnd() == 1) {
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ return phoneCallBackYQVO;
+ }
+
+ flag = 1;
+ //灏嗗綋鍓嶅墠鐨勬挱鎶ョ姸鎬佸垹闄わ紝缁欎笅涓�棰樿浣�
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+// //鑾峰彇涓嬩竴棰�
+ log.error("鑾峰彇涓嬩竴棰樼殑淇℃伅锛歿}", ivrTaskTemplateScriptVO);
+ if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1") || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
+ Long nextQuestion = null;
+ if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1")) {
+ nextQuestion = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
+ //鏇存柊鍒嗘暟
+ double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
+ } else {
+ nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
+ //鏇存柊鍒嗘暟
+ Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
+ score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+ }
+ if (nextQuestion == null || nextQuestion == 0L) {
+ //濡傛灉涓嬩竴棰樹负绌猴紝鎴栬�呬负0锛屽垯鎸傛満
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(6L);
+ ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(ss);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
+ //灏嗙粨鏋滃啓杩沝etail琛�
+ ServiceSubTaskDetailReq ssdReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList2 = new ArrayList<>();
+ serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList2);
+ ssdReq.setGuid(phoneCallReqYQVO.getGuid());
+ ssdReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(ssdReq);
+ return phoneCallBackYQVO;
+ }
+
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (script.getSort() == nextQuestion.intValue()) {
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
+ log.error("涓嬩竴棰橀棶棰橈細{}", scriptContent);
+ log.error("涓嬩竴棰樼殑瀛愪换鍔℃槸锛歿}", serviceSubtask);
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+ //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+ //鍒犻櫎鏃犲搷搴�
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ }
+ }
+ } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ //鏇存柊涓�涓嬪垎鏁�
+ double score = 0.0;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setSendstate(6L);
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //璁剧疆缁撴潫璇�
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+ Long id = serviceSubtask.getId();
+ Map<String, String> map = delRedisValue(null, id.toString());
+ log.error("map鐨勫�间负锛歿}", map);
+ if (ObjectUtils.isNotEmpty(map))
+ redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+// return phoneCallBackYQVO;
+
+ }
+ } else {
+ log.info("娌℃湁鍖归厤涓�----------------------------");
+ //flag=0,璇存槑娌� 鍖归厤涓婏紝涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵
+ if (j == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size() - 1 && flag == 0) {
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
+ serviceSubtaskDetailList.get(0).setMatchedtext("");
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+ }
+ continue;
+ }
+ }
+ }
+ //閮芥病鏈夊尮閰嶅埌
+ if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
+ log.info("閮芥病鏈夊尮閰嶅埌-------------------------");
+ Integer count = null;
+ Object countObj = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
+ if (count != null && count >= ivrTaskTemplate.getMateNum()) {
+ //濡傛灉count宸茬粡澶т簬鎴栫瓑浜庢病鏈夊尮閰嶆鏁�
+ if (ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() == 0 || ivrTaskTemplateScriptVO.getBranchFlag().equals("1") && ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getBranchFlag().equals("1") && ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
+ //濡傛灉鏄渶鍚庝竴閬撻锛屾垨鑰呮病鏈変笅涓�棰樹簡锛屽氨鐩存帴鎸傛満
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ if (StringUtils.isNotEmpty(phoneCallBackYQVO.getValue()))
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + phoneCallBackYQVO.getValue() + serviceTask1.getJsy());
+ else phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setSendstate(6L);
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+ Long id = serviceSubtask.getId();
+ Map<String, String> map = delRedisValue(null, id.toString());
+ if (ObjectUtils.isNotEmpty(map)) {
+ redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ }
+// return phoneCallBackYQVO;
+ } else {
+ //鏍规嵁ivrTaskTemplateScriptVO.getNextScriptno()鑾峰彇涓嬩竴棰樿繘琛屾彁闂�
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+ //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
+
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+ }
+ }
+ }
+ } else {
+ if (count == null)
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), 1, 120, TimeUnit.MINUTES);
+ else
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), count + 1, 120, TimeUnit.MINUTES);
+
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
+ }
+ }
+
+ } else {
+ //涓嶆槸閫夋嫨棰�,鐩存帴璁板綍绛旀锛屽皢缁撴灉鍐欏埌detail涓�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+ // String xh = idSort.split("-")[1];
+
+ //濡傛灉閫夐」鍒嗘敮涓�1鐨勮瘽锛屽垯闇�瑕佹牴鎹棶棰樹笂鐨刵extScriptno杩涜璺宠浆
+ //闂瓟棰樻病鏈夎烦杞�
+ if (ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
+ for (IvrTaskTemplateScript ivrTaskTemplateScript1 : ivrTaskTemplateScripts) {
+ if (ivrTaskTemplateScriptVO.getNextScriptno().intValue() == ivrTaskTemplateScript1.getSort()) {
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = StringUtils.isNotEmpty(ivrTaskTemplateScript1.getIvrtext()) ? ivrTaskTemplateScript1.getIvrtext() : ivrTaskTemplateScript1.getScriptContent();
+
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ redisCache.setCacheObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone(), ivrTaskTemplateScript1.getId().toString());
+
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getScore())).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+
+ }
+ }
+ } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
+ //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ serviceSubtask.setSendstate(6L);
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+ Long id = serviceSubtask.getId();
+ Map<String, String> map = delRedisValue(null, id.toString());
+ redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask1.getJsy(), 120, TimeUnit.MINUTES);
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ }
+ }
+ }
+ log.error("phoneCallBackYQVO鐨勮繑鍥炲�兼槸锛歿}", phoneCallBackYQVO);
+ return phoneCallBackYQVO;
+ }
+
+ private String getObject(ServiceSubtask serviceSubtask, String scriptContent) {
+ Map<String, Map<String, String>> param = getParam(serviceSubtask.getTaskid());
+ for (Map<String, String> map : param.values()) {
+ for (String key : map.keySet()) {
+ scriptContent = scriptContent.replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : "");
+ }
+ }
+ if (StringUtils.isEmpty(scriptContent)) {
+ return scriptContent;
+ }
+ scriptContent = scriptContent.replace("${name}", StringUtils.isNotEmpty(serviceSubtask.getSendname()) ? serviceSubtask.getSendname() : "");
+ scriptContent = scriptContent.replace("${dzz}", StringUtils.isNotEmpty(serviceSubtask.getAddr()) ? serviceSubtask.getAddr() : "");
+ scriptContent = scriptContent.replace("${phone}", StringUtils.isNotEmpty(serviceSubtask.getTelcode()) ? serviceSubtask.getTelcode() : "");
+
+ return scriptContent;
+ }
+
+ /**
+ * 鑾峰彇浠诲姟閲岀殑閫氶厤绗�
+ *
+ * @param taskId
+ * @return
+ */
+ private Map<String, Map<String, String>> getParam(Long taskId) {
+ ServiceTask serviceTask = taskSubtaskApi.getTask(taskId);
+ ObjectMapper objectMapper = new ObjectMapper();
+ Map<String, Map<String, String>> serviceTaskMap = null;
+ try {
+ serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ }
+ return serviceTaskMap;
+ }
+
+ private Map<String, String> delRedisValue(String cache, String id) {
+ id = "," + id + ",";
+ String val = "";
+ String cacheName = "";
+ Map<String, String> map = new HashMap<>();
+
+ if (StringUtils.isNotEmpty(cache)) {
+ val = redisCache.getCacheObject(cache);
+ if (!StringUtils.isEmpty(val)) {
+ if (val.contains(id)) {
+ val = val.replaceAll(id, "");
+ }
+ }
+ map.put("val", val);
+ map.put("cacheName", cache);
+ return map;
+ }
+
+ for (int i = 0; i < 6; i++) {
+ val = redisCache.getCacheObject("cache-0" + i);
+ if (!StringUtils.isEmpty(val)) {
+ if (val.contains(id)) {
+ val = val.replaceAll(id, "");
+ map.put("val", val);
+ map.put("cacheName", "cache-0" + i);
+ }
+ }
+ }
+ return map;
+ }
+
+ /**
+ * 闆ㄧ划浠诲姟鎷夊彇
+ *
+ * @return
+ */
+ @Override
+ public List<PullTaskVO> taskPull() {
+ //pullTaskVOList鐢ㄤ簬鏁版嵁杩斿洖
+ List<PullTaskVO> pullTaskVOList = new ArrayList<>();
+ List<String> cacheList = new ArrayList<>();
+ ListOperations<String, String> listOps = redisTemplate.opsForList();
+ //蹇呴』绛塧che-exist鍏ㄩ儴鎵撳畬鎵嶈兘鎷夊彇涓嬩竴鎵癸紙涓昏鏄�曟墍鏈夌殑鏁版嵁閮藉爢鍦ㄧ數璇濈殑缂撳瓨閲岋紝鍦ㄨ瀹氱殑鏃堕棿鎵撲笉瀹岋級
+// long existSize = listOps.size("cache-exist");
+// if (existSize > 0) return pullTaskVOList;
+ int count = 0;
+ long size = listOps.size("cache-0");
+ log.info("---------鎵撶數璇濅箣鍓嶇紦瀛樹腑鐨勬暟鎹噺锛歿}", size);
+ if (size > 0) {
+ //phoneCount() 閫氳繃缁欏嚭鐨勬瘡涓皬鏃堕渶瑕佹墦鍑虹殑鐢佃瘽閲忥紝绠楀嚭鍒版櫄涓�8鐐逛竴鐐硅兘鎵撳嚭澶氬皯涓數璇濓紝鑾峰彇鍒版�婚噺
+ //濡傛灉闇�瑕佺珛鍗虫墽琛岀殑鏁版嵁閲忓ぇ浜庝竴澶╄鎵ц鐨勪笂闄愶紝鍒欏彧鍙栦笂闄愮殑鏁伴噺锛屽叾瀹冪殑鍒欐斁鍥瀝edis涓�
+ count = Math.min(phoneCount(), (int) size);
+ if (count != 0) {
+ cacheList = listOps.range("cache-0", 0, count - 1);
+ } else {
+ return null;
+ }
+ }
+
+ log.info("浠诲姟鎷夊彇cache-0鐨勫�兼槸澶氬皯锛歿}", cacheList);
+ // cache-0涓虹珛鍗冲彂璧风殑,鍏跺畠鐨勫厛鎺ㄨ繜
+ if (!CollectionUtils.isEmpty(cacheList)) {
+ pullTaskVOList = getPullTaskList(cacheList, "cache-0");
+ // 鍒犻櫎宸插鐞嗙殑鏁版嵁
+ listOps.trim("cache-0", count, -1);
+ log.info("鎵撶數璇濅箣鍚庣紦瀛樹腑鐨勬暟鎹噺---------锛歿}", listOps.size("cache-0"));
+ } else {
+ for (int i = 1; i < 6; i++) {
+ //鍙栧嚭浠巆ache-1 鍒� cache-5鐨勭涓�涓瓙浠诲姟淇℃伅
+ try {
+ Long size1 = listOps.size("cache-" + i);
+ if (size1 == null || size1 == 0) continue;
+ int count1 = Math.min(phoneCount(), size1.intValue());
+ List<String> value = listOps.range("cache-0" + i, 0, count1 - 1);
+
+ List<PullTaskVO> pullTaskVOList2 = getPullTaskList(value, "cache-" + i);
+ if (CollectionUtils.isNotEmpty(pullTaskVOList2) && pullTaskVOList2.size() > 0) {
+ pullTaskVOList.addAll(pullTaskVOList2);
+ }
+ //灏嗗鐞嗚繃鐨勬暟鎹垹闄�
+ listOps.trim("cache-0" + i, count1, -1);
+ } catch (Exception e) {
+// log.error("鐪嬬潃鐑�");
+ }
+ }
+ }
+ //existList鐢ㄦ潵璁板綍鎺ヤ笅鏉ラ渶瑕佹墽琛岀殑瀛愪换鍔D
+// List<String> existList = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(pullTaskVOList)) {
+ //缁欏洖璋冨弬鏁拌祴鍊�
+ for (PullTaskVO pullTaskVO : pullTaskVOList) {
+// existList.add(pullTaskVO.getTaskid());
+ pullTaskVO.setAsrcallback(ASRCallBackPath);
+ }
+ }
+// if (existList.size() != 0) redisCache.setCacheListRight("cache-exist", existList);
+ log.info("-----------瀹為檯鎷夊彇鐨勭數璇濇暟鎹噺锛歿}", CollectionUtils.isNotEmpty(pullTaskVOList) ? pullTaskVOList.size() : null);
+ return pullTaskVOList;
+ }
+
+ private List<PullTaskVO> getPullTaskList(List<String> subIds, String cacheName) {
+ log.error("浠诲姟鎷夊彇subIds鐨勫�兼槸澶氬皯锛歿}", subIds);
+ //pullTaskVOList鐢ㄤ簬鏁版嵁杩斿洖
+ List<PullTaskVO> pullTaskVOList = new ArrayList<>();
+ //newValue0鐢ㄤ簬淇濆瓨娌℃湁澶勭悊鐨勫瓙 浠诲姟
+// String newValue0 = "";
+ List<String> newValue0 = new ArrayList<>();
+ //鏍规嵁,鑾峰彇瀛愪换鍔$殑ID
+// String[] split = subIds.split(",,");
+ for (int i = 0; i < subIds.size(); i++) {
+ if (cacheName.equals("cache-0") && i < subIds.size() || !cacheName.equals("cache-0") && i < 1) {
+ PullTaskVO pullTaskVO = new PullTaskVO();
+ String subId = subIds.get(i).trim();
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(subId));
+ if (ObjectUtils.isEmpty(serviceSubtask)) {
+ log.error("璇ubId鏈夐棶棰橈紝鍦ㄨ〃涓煡璇笉鍒帮細{}", subId);
+ continue;
+ }
+ if (StringUtils.isEmpty(serviceSubtask.getPhone())) {
+ serviceSubtask.setRemark("鎵嬫満鍙蜂负绌�");
+ serviceSubtask.setSendstate(4L);
+ serviceSubtask.setResult("error");
+// serviceSubtask.setFinishtime(new Date());
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ continue;
+ }
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
+ if (ObjectUtils.isEmpty(ivrTaskTemplate)) continue;
+ //閫氳繃浠诲姟妯℃澘涓殑"绗竴娆¢棶棰樼紪鍙�"鑾峰彇绗竴涓棶棰�;
+ IvrTaskTemplateScript ivrTaskTemplateScript = null;
+ IvrTaskTemplateScript ivrTaskTemplateScript1 = new IvrTaskTemplateScript();
+ ivrTaskTemplateScript1.setTemplateID(ivrTaskTemplate.getId());
+ List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript1);
+ aa:
+ for (IvrTaskTemplateScript ivrTaskTemplateScript2 : ivrTaskTemplateScripts) {
+ if (ivrTaskTemplate.getFirstQuestionNum() == Long.valueOf(ivrTaskTemplateScript2.getSort())) {
+ ivrTaskTemplateScript = ivrTaskTemplateScript2;
+ break aa;
+ }
+ }
+ //濡傛灉ivrTaskTemplateScript涓虹┖锛屼篃灏辨病鏈夊線涓嬫墽琛岀殑蹇呰浜�
+ if (ObjectUtils.isEmpty(ivrTaskTemplateScript)) {
+ log.error("---------杩欎釜ivrTaskTemplate.getId()鐨勯棶棰樹负绌猴細{}", ivrTaskTemplate.getId());
+ continue;
+ }
+ //鑾峰彇閫氶厤绗﹀尮閰嶈繃鍚庣殑闂
+ String scriptContent = ivrTaskTemplateScript.getIvrtext();
+ if (StringUtils.isEmpty(scriptContent)) scriptContent = ivrTaskTemplateScript.getScriptContent();
+ String scrContent = getObject(serviceSubtask, scriptContent);
+ String kcb = serviceTask.getKcb() + "," + scrContent;
+
+ //灏佽杩斿洖鏁版嵁
+ //taskId = 瀛愪换鍔D + 闂ID +闂搴忓彿
+ pullTaskVO.setTaskid(subId);
+ pullTaskVO.setAppkey(app_key_yq);
+ pullTaskVO.setSections(LocalTime.now().format(DateTimeFormatter.ofPattern("hh:mm")) + "-" + LocalTime.now().plusMinutes(1).format(DateTimeFormatter.ofPattern("hh:mm")));
+ pullTaskVO.setPhones(serviceSubtask.getPhone());
+ pullTaskVO.setPrologue(kcb);
+ if (cacheName.equals("cache-0")) pullTaskVO.setDisplayNo("2");
+ else pullTaskVO.setDisplayNo("2");
+ pullTaskVOList.add(pullTaskVO);
+ redisCache.setCacheObject(subId.trim() + "-" + serviceSubtask.getPhone().trim(), ivrTaskTemplateScript.getId().toString(), 120, TimeUnit.MINUTES);
+ } else {
+ newValue0.add(subIds.get(i));
+ redisCache.setCacheListRight(cacheName, newValue0);
+ }
+ }
+
+ return pullTaskVOList;
+ }
+
+ @Override
+ public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
+ int i = 0;
+ log.info("淇濆瓨鐢佃瘽鍥炶皟鍐呭 saveQuestionAnswerPhone锛歿}", serviceSubTaskDetailReq);
+ if (StringUtils.isNotEmpty(serviceSubTaskDetailReq.getParam1())) {
+ RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
+ Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam1(), pri_key));
+ Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam2(), pri_key));
+ ServiceSubtaskEntity ivrTaskSingle = new ServiceSubtaskEntity();
+ ivrTaskSingle.setTaskid(tid);
+ ivrTaskSingle.setPatid(pid);
+ List<ServiceSubtask> selectServiceSubtaskList = taskSubtaskApi.findSubtasks(ivrTaskSingle);
+ if (CollectionUtils.isEmpty(selectServiceSubtaskList) || selectServiceSubtaskList.size() == 0) {
+ log.error("鎶ラ敊浜嗭紝selectServiceSubtaskList鏁版嵁涓虹┖浜嗭細{}", ivrTaskSingle);
+ return 0;
+ }
+ //闅忚
+ for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
+ if (serviceSubtaskDetail.getScriptid() != null) {
+ //璁剧疆涓�涓嬮棶棰樺垎绫�
+ IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskDetail.getScriptid());
+ if (ivrTaskTemplateScript != null)
+ serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScript.getScriptAssortid());
+ serviceSubtaskDetail.setIsMydException(ivrTaskTemplateScript.getIsMydException());
+ serviceSubtaskDetail.setDimension(ivrTaskTemplateScript.getDimension());
+ }
+
+ serviceSubtaskDetail.setSubId(selectServiceSubtaskList.get(0).getId());
+// serviceSubtaskDetail.setId(UUID.randomUUID().toString());
+ serviceSubtaskDetail.setCreateTime(new Date());
+ serviceSubtaskDetail.setGuid(selectServiceSubtaskList.get(0).getGuid());
+ serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid());
+ serviceSubtaskDetail.setGuid(serviceSubTaskDetailReq.getGuid());
+ i = taskSubtaskApi.insertSubtaskDetail(serviceSubtaskDetail);
+ }
+ } else {
+ if (serviceSubTaskDetailReq != null && CollectionUtils.isNotEmpty(serviceSubTaskDetailReq.getServiceSubtaskDetailList())) {
+ for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
+ if (serviceSubtaskDetail.getScriptid() != null) {
+ //璁剧疆涓�涓嬮棶棰樺垎绫�
+ IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskDetail.getScriptid());
+ if (ivrTaskTemplateScript != null)
+ serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScript.getScriptAssortid());
+ }
+ serviceSubtaskDetail.setCreateTime(new Date());
+ serviceSubtaskDetail.setGuid(serviceSubTaskDetailReq.getGuid());
+ serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid());
+ //鍏堟牴鎹瓙浠诲姟id,浠诲姟ID鍜岄棶棰樺簭鍙锋煡璇竴涓嬶紝璇ラ棶棰樻槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈夊�硷紝鐩存帴淇敼锛屽鏋滀负绌猴紝鐩存帴鎻掑叆
+ ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
+ ssd.setSubId(serviceSubtaskDetail.getSubId());
+ ssd.setTaskid(serviceSubtaskDetail.getTaskid());
+ ssd.setScriptid(serviceSubtaskDetail.getScriptid());
+ if (serviceSubtaskDetail.getSubId() != null) {
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(serviceSubtaskDetail.getSubId());
+ ssd.setGuid(serviceSubtask.getGuid());
+ ssd.setOrgid(serviceSubtask.getOrgid());
+ }
+ List<ServiceSubtaskDetail> serviceSubtaskDetails = taskSubtaskApi.findSubtaskDetails(ssd);
+ if (CollectionUtils.isNotEmpty(serviceSubtaskDetails) && StringUtils.isNotEmpty(serviceSubtaskDetails.get(0).getMatchedtext())) {
+ serviceSubtaskDetail.setId(serviceSubtaskDetails.get(0).getId());
+ taskSubtaskApi.updateSubtaskDetail(serviceSubtaskDetail);
+ } else {
+ if (serviceSubtaskDetail.getSubId() != null) {
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(serviceSubtaskDetail.getSubId());
+ serviceSubtaskDetail.setGuid(serviceSubtask.getGuid());
+ serviceSubtaskDetail.setOrgid(serviceSubtask.getOrgid());
+ }
+ i = taskSubtaskApi.insertSubtaskDetail(serviceSubtaskDetail);
+ }
+ }
+ }
+ }
+ return i;
+ }
+
+ @Override
+ public Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO) {
+ Object cacheObject = redisCache.getCacheObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+ if (phoneCallRecordVO.getHangup_cause().equals("NO_USER_RESPONSE") || ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
+ //鏃犱汉鎺ュ惉
+ //璁板綍鐢佃瘽鍙戦�佺姸鎬�
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallRecordVO.getTaskid()));
+ setFailPreachForm(serviceSubtask, "3", "鏃犱汉鎺ュ惉", "4");
+ //杩涜鐭俊琛ュ伩
+ //鍘� getSmsCompensate(...) 鏈殢鐢佃瘽妯″潡鍖栨惉杩侊紙妯″潡鍖栧墠璋冪敤鐐瑰氨宸叉敞閲娿�佸睘姝讳唬鐮侊級锛�
+ //濡傞渶鎭㈠鐭俊琛ュ伩锛岃璧� service_out_path / 鐭俊鍙戦�佹柟鐨勫綊灞炴ā鍧� API锛岃 doc/鐢佃瘽妯″潡鍖朹璋冪爺涓庡疄鏂芥柟妗�.md
+ redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+// redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
+ } else if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("2")) {
+// if (phoneCallRecordVO.getAnswered() != null && phoneCallRecordVO.getAnswered() == true) {
+ log.error("鏈変汉鎺ョ數璇濅簡锛屽苟涓斿畬浜�");
+ //璇存槑鏈変汉鎺ヤ簡
+ int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1; // 鍔�1鏄烦杩�/绗﹀彿
+ int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
+ String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
+ ServiceSubtask serviceSubtask = new ServiceSubtask();
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ serviceSubtask.setSendstate(6L);
+ serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setUpdateTime(new Date());
+ log.error("鐢佃瘽鎷ㄦ墦宸插畬鎴恠erviceSubtask鐨勫�间负:{}", serviceSubtask);
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ setFailPreachForm(serviceSubtask, StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) ? serviceSubtask.getCurrentPreachform() : "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //涓嬭浇鏂囦欢
+ taskFtpPort.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
+ redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+ } else {
+ //鎮h�呮嫆缁濋殢璁�
+ //鍏堟妸璇ubId浠巆ache_exist涓墧闄わ紝鍙鏈夊洖璋冨氨鍓旈櫎锛堢洰鐨勬槸锛屽敖蹇cache-exist涓虹┖锛屽幓缂撳瓨涓嬩竴鎵硅鎵撶殑鐢佃瘽;杩欓噷鍓旈櫎涓嶅奖鍝嶇數璇濈殑姝e父涓氬姟锛�
+// redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
+ ServiceSubtask serviceSubtask = new ServiceSubtask();
+ serviceSubtask.setRemark("鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�");
+ serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
+ serviceSubtask.setSendstate(6L);
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+// int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1; // 鍔�1鏄烦杩�/绗﹀彿
+// int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
+// String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
+ //涓嬭浇鏂囦欢
+// taskFtpPort.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
+ redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
+ ServiceSubtask ss = taskSubtaskApi.getSubtask(serviceSubtask.getId());
+ setFailPreachForm(ss, StringUtils.isNotEmpty(ss.getCurrentPreachform()) ? ss.getCurrentPreachform() : "3", "鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�", "5");
+ }
+
+ return 1;
+ }
+
+ private IvrTaskTemplateScriptVO getNextQuestion(List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOList, IvrTaskTemplateScriptVO IvrTaskTemplateScriptVO) {
+
+ for (int j = 0; j < IvrTaskTemplateScriptVOList.size(); j++) {
+ if (IvrTaskTemplateScriptVOList.get(j).getTargetid() == IvrTaskTemplateScriptVO.getTargetid() + 1) {
+ // 瀵硅鏉emplateScriptVO杩涜澶勭悊
+ return IvrTaskTemplateScriptVOList.get(j);
+ }
+ }
+ return null;
+ }
+
+ private ServiceSubtaskDetail getServiceSubtaskDetail(PhoneCallReqYQVO phoneCallReqYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate) {
+ log.info("-----------------phoneCallReqYQVO鐨勫�间负锛歿}", phoneCallReqYQVO);
+
+ ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
+ serviceSubtaskDetail.setSubId(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ ServiceSubtask serviceSubtask1 = taskSubtaskApi.getSubtask(Long.valueOf(phoneCallReqYQVO.getTaskid()));
+ if (serviceSubtask1 != null) {
+ serviceSubtaskDetail.setTaskid(serviceSubtask1.getTaskid());
+ serviceSubtaskDetail.setPatid(serviceSubtask1.getPatid());
+ }
+ serviceSubtaskDetail.setTargetid(ivrTaskTemplateScriptVO.getTargetid() != null ? ivrTaskTemplateScriptVO.getTargetid().intValue() : null);
+ serviceSubtaskDetail.setUuid(phoneCallReqYQVO.getUuid());
+ serviceSubtaskDetail.setPhone(phoneCallReqYQVO.getPhone());
+ serviceSubtaskDetail.setOperate(serviceSubtask.getCreateBy());
+ serviceSubtaskDetail.setDisplayno(phoneCallReqYQVO.getPhone());
+ serviceSubtaskDetail.setAssigntime(System.currentTimeMillis());
+ serviceSubtaskDetail.setStarttime(System.currentTimeMillis());
+ serviceSubtaskDetail.setAnswertime(System.currentTimeMillis());
+ serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
+ serviceSubtaskDetail.setAsrtext("鏃犲簲绛�");
+ if (StringUtils.isNotEmpty(phoneCallReqYQVO.getAsrtext()))
+ serviceSubtaskDetail.setAsrtext(phoneCallReqYQVO.getAsrtext());
+ serviceSubtaskDetail.setBeginTime(System.currentTimeMillis());
+ serviceSubtaskDetail.setEndTime(System.currentTimeMillis());
+ serviceSubtaskDetail.setSentEnd(1L);
+ serviceSubtaskDetail.setTemplateid(ivrTaskTemplate.getId().toString());
+ serviceSubtaskDetail.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
+ serviceSubtaskDetail.setQuestiontext(StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent());
+ serviceSubtaskDetail.setQuestionvoice(phoneCallReqYQVO.getRecordpath());
+ serviceSubtaskDetail.setCategoryname(ivrTaskTemplateScriptVO.getScriptType());
+ serviceSubtaskDetail.setTargetoptions(ivrTaskTemplateScriptVO.getTargetOptions());
+ serviceSubtaskDetail.setExtemplateText(ivrTaskTemplateScriptVO.getExtemplateText());
+ serviceSubtaskDetail.setScriptid(ivrTaskTemplateScriptVO.getId());
+ serviceSubtaskDetail.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
+
+ int i = 1;
+ for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
+ if (ivrTaskTemplateTargetoption.getIsUserOperation() == 1) {
+ serviceSubtaskDetail.setMatchedtext(ivrTaskTemplateTargetoption.getTargetvalue());
+ serviceSubtaskDetail.setScore(ivrTaskTemplateTargetoption.getScore() != null ? ivrTaskTemplateTargetoption.getScore().toString() : "0");
+ }
+ serviceSubtaskDetail.setTargetvalue(StringUtils.isEmpty(serviceSubtaskDetail.getTargetvalue()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetail.getTargetvalue() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
+ }
+
+ serviceSubtaskDetail.setAddtime(new Date());
+ serviceSubtaskDetail.setIsupload(0L);
+ serviceSubtaskDetail.setUploadTime(new Date());
+ serviceSubtaskDetail.setDelFlag("0");
+ serviceSubtaskDetail.setValueType(ivrTaskTemplateScriptVO.getScriptType());
+ return serviceSubtaskDetail;
+ }
+
+ //閫氳繃褰撳墠鏃堕棿锛屾媺鍙栫數璇濇�绘暟
+ private Integer phoneCount() {
+ // 褰撳墠鏃堕棿
+ LocalTime currentTime = LocalTime.now();
+ // 鐩爣鏃堕棿锛堟櫄涓� 8 鐐癸級
+ LocalTime targetTime = LocalTime.of(phoneEndHour, 0);
+// // 璁$畻褰撳墠鏃堕棿鍒扮洰鏍囨椂闂寸殑鏃堕暱
+// Duration duration = Duration.between(currentTime, targetTime);
+// // 鑾峰彇鍓╀綑鏃堕棿鐨勫皬鏃舵暟
+// long remainingHours = 0;
+// long remainingMinutes = duration.toMinutes();
+// //濡傛灉瓒呰繃8鐐�,灏辫缃负0
+// //璺濈缁撴潫鏃堕棿灏忎簬20鍒嗛挓锛屽氨涓嶆媺鍙栦簡
+// if (remainingMinutes < 20) remainingHours = 0;
+// else if (remainingMinutes < 60 && remainingMinutes > 20) remainingHours = 1;
+// else if (remainingMinutes > 60) remainingHours = remainingMinutes / 60;
+// // 璁$畻鍓╀綑鍙互鎵撶殑鐢佃瘽鏁�
+// int remainingCalls = (int) (remainingHours * phoneUpEveryHour);
+// return remainingCalls;
+ if (currentTime.isBefore(targetTime)) {
+ //濡傛灉褰撳墠鏃堕棿杩樺湪鎴鏃堕棿鍐咃紝鍒欑户缁彂
+ return phoneUpEveryHour;
+ }
+ return 0;
+ }
+
+ /**
+ * @param serviceSubtask
+ * @param preachform
+ * @param remark
+ * @param failSendstate
+ * @return
+ */
+ public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
+ log.info("setFailPreachForm 闅忚娴佺▼澶勭悊 serviceSubtask:{}, preachform:{}, remark:{}, failSendstate:{}", serviceSubtask, preachform, remark, failSendstate);
+ //灏嗙姸鎬佽缃负澶辫触
+ ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+ serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+ serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+ serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+ //鑾峰彇璇ユ偅鑰呯殑鍙戦�佹柟寮忔�绘暟
+ List<ServiceSubtaskPreachform> spSize = taskPreachformPort.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+
+ serviceSubtaskPreachform.setPreachform(preachform);
+ //1:鏈彂閫佺姸鎬�
+ serviceSubtaskPreachform.setSendstate("1");
+ if (preachform.equals("3")) {
+ //鐢佃瘽杩涘叆闃熷垪鍚庯紝鐘舵�佷細鍙樻垚2
+ serviceSubtaskPreachform.setSendstate("2");
+ }
+ List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = taskPreachformPort.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+ if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+ ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
+ serviceSubtaskPreachform1.setSendstate(failSendstate);
+ serviceSubtaskPreachform1.setRemark(remark);
+ taskPreachformPort.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
+
+ //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
+ if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
+ serviceSubtask.setCurrentPreachform(preachform);
+ serviceSubtask.setSendstate(5L);
+ serviceSubtask.setRemark(remark + ";鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触");
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ return true;
+ } else {
+ //鍔犲叆鐩墠琛ュ伩閲岀殑 remark
+ serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + remark : remark);
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ }
+ }
+
+ //灏界澶辫触锛岃繖閲屼篃灏嗗綋鍓嶅彂閫佹柟寮忕户缁缃垚鈥滅數璇濃�濓紝sendstate璁剧疆鎴�3锛涘洜涓簉yTask閲岀殑琛ュ伩鐨勫畾鏃朵换鍔¤繍琛屾椂锛屼細鎵惧埌杩欐潯subtask锛屽苟杩涜澶勭悊
+ serviceSubtask.setCurrentPreachform(preachform);
+ serviceSubtask.setSendstate(3L);
+ //濡傛灉绛変簬9锛屽垯璇存槑鐢佃瘽姝e父缁撴潫浜�
+ if (failSendstate.equals("9")) serviceSubtask.setSendstate(6L);
+ serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime()));
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ return true;
+ }
+
+ private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) {
+ ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
+ serviceSubtaskPreachform.setSubid(subid);
+ serviceSubtaskPreachform.setTaskid(taskid);
+ List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = taskPreachformPort.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+ if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
+ //娌℃湁闅忚鏃堕棿鍒欐寜褰撳ぉ鏉ョ畻--涓存椂
+ if (ObjectUtils.isEmpty(visitTime)) {
+ visitTime = new Date();
+ }
+
+ String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime();
+ int hoursToAdd = Integer.valueOf(compensateTime) * 24;
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(visitTime);
+ calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
+ Date newDate = calendar.getTime();
+ return newDate;
+ }
+ return visitTime;
+ }
+
+ public PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO) {
+ //鐢ㄤ簬杩斿洖
+ PhoneCallBackSHVO phoneCallBackSHVO = new PhoneCallBackSHVO();
+
+ //鏍规嵁鎵嬫満鍙疯幏鍙栫敤鎴风殑鐨勫瓙浠诲姟淇℃伅
+ ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
+ serviceSubtaskVO.setPhone(phoneCallReqYQVO.getPhone());
+ serviceSubtaskVO.setType("1");
+ serviceSubtaskVO.setSendstate(2L);
+ List<ServiceSubtask> serviceSubtasks = taskSubtaskApi.findSubtasks(serviceSubtaskVO);
+ if (CollectionUtils.isNotEmpty(serviceSubtasks)) {
+ ServiceSubtask serviceSubtask = serviceSubtasks.get(0);
+ IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
+
+ //閫氳繃浠诲姟妯℃澘涓殑"绗竴娆¢棶棰樼紪鍙�"鑾峰彇绗竴涓棶棰�;
+ IvrTaskTemplateScript ivrTaskTemplateScript = null;
+ IvrTaskTemplateScript ivrTaskTemplateScript1 = new IvrTaskTemplateScript();
+ ivrTaskTemplateScript1.setTemplateID(ivrTaskTemplate.getId());
+ List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript1);
+
+ for (IvrTaskTemplateScript ivrTaskTemplateScript2 : ivrTaskTemplateScripts) {
+ if (ivrTaskTemplate.getFirstQuestionNum() == Long.valueOf(ivrTaskTemplateScript2.getSort())) {
+ ivrTaskTemplateScript = ivrTaskTemplateScript2;
+ break;
+ }
+ }
+ //鑾峰彇寮�鍦虹櫧
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+
+ phoneCallBackSHVO.setSubId(serviceSubtask.getId());
+ phoneCallBackSHVO.setScriptId(ivrTaskTemplateScript.getId());
+ phoneCallBackSHVO.setSort(ivrTaskTemplateScript.getSort());
+ phoneCallBackSHVO.setTaskTemplateid(ivrTaskTemplateScript.getTemplateID());
+ phoneCallBackSHVO.setScriptContent(serviceTask.getKcb() + "," + ivrTaskTemplateScript.getScriptContent());
+ }
+ return phoneCallBackSHVO;
+ }
+
+ /**
+ * 涓夋眹ASR缁撴灉澶勭悊
+ *
+ * @param phoneCallResultYQVO
+ * @return
+ */
+ public PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO) {
+ PhoneCallBackSHVO phoneCallBackSHVO = new PhoneCallBackSHVO();
+ //閫氳繃scriptid锛岃幏鍙栨墍鏈夌殑缁撴灉
+ String url = taskSysConfigPort.selectConfigValue("sys.voice.match.ai.url", phoneCallResultYQVO.getOrgid());
+ ServiceSubtask serviceSubtask = taskSubtaskApi.getSubtask(phoneCallResultYQVO.getSubId());
+ IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
+ IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = iIvrTaskTemplateScriptService.getTaskTempScriptInfoByid(Long.valueOf(phoneCallResultYQVO.getScriptId()));
+ Integer i = subtaskOptionMatchApi.matchOptionIndex(url, phoneCallResultYQVO.getScriptContent(), phoneCallResultYQVO.getAsrResult(), ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList(), phoneCallResultYQVO.getUuid());
+ if (i >= 0) {
+ String optiondesc = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(i).getOptiondesc();
+ //灏嗘偅鑰呯殑鍥炵瓟鍐欒繘service_subtask_detail涓�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ivrTaskTemplateScriptVO.setQuestionResult(optiondesc);
+
+ PhoneCallReqYQVO phoneCallReqYQVO = new PhoneCallReqYQVO();
+ phoneCallReqYQVO.setTaskid("" + serviceSubtask.getId());
+ phoneCallReqYQVO.setPhone(phoneCallResultYQVO.getPhone());
+ phoneCallReqYQVO.setAsrtext(phoneCallResultYQVO.getAsrResult());
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallResultYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallResultYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+
+ IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
+ ivrTaskTemplateScript.setTemplateID(ivrTaskTemplateScriptVO.getTemplateID());
+ List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
+
+ //鑾峰彇涓嬩竴棰�
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackSHVO.setScriptContent(serviceTask.getJsy());
+ phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
+ phoneCallBackSHVO.setSort(script.getSort());
+ phoneCallBackSHVO.setScriptId(script.getId());
+ phoneCallBackSHVO.setSubId(serviceSubtask.getId());
+ phoneCallBackSHVO.setStatus("0");
+ } else if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
+ phoneCallBackSHVO.setScriptContent(script.getScriptContent());
+ phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
+ phoneCallBackSHVO.setSort(script.getSort());
+ phoneCallBackSHVO.setScriptId(script.getId());
+ phoneCallBackSHVO.setSubId(serviceSubtask.getId());
+ break;
+ }
+ }
+ //鎶婄紦瀛樻竻闄�
+ redisCache.deleteObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
+ } else {
+ //鍐嶅皢閲嶅璇㈤棶
+ //璁板綍涓�涓嬭繖涓棶棰樿闂鐨勬鏁�
+ Object cacheObject = redisCache.getCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
+ if (cacheObject == null || (Integer) cacheObject < ivrTaskTemplate.getMateNum()) {
+
+ // 鑾峰彇閫夐」闆嗗悎涓殑 optiondesc 鐢ㄤ簬寮曞鎮h��
+ List<IvrTaskTemplateTargetoption> optionList = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
+ String optionDescStr = "";
+ if (optionList != null && !optionList.isEmpty()) {
+ optionDescStr = optionList.stream().map(IvrTaskTemplateTargetoption::getTargetvalue).filter(StringUtils::isNotEmpty).collect(Collectors.joining("鎴�"));
+ }
+
+ String scriptContent = "璇烽棶" + phoneCallResultYQVO.getScriptContent();
+ if (StringUtils.isNotEmpty(optionDescStr)) {
+ scriptContent += "锛屼綘鍙互鍥炵瓟锛�" + optionDescStr;
+ }
+ phoneCallBackSHVO.setScriptContent(scriptContent);
+ phoneCallBackSHVO.setTaskTemplateid(phoneCallResultYQVO.getTaskTemplateid());
+ phoneCallBackSHVO.setSort(phoneCallResultYQVO.getSort());
+ phoneCallBackSHVO.setScriptId(phoneCallResultYQVO.getScriptId());
+ phoneCallBackSHVO.setSubId(phoneCallResultYQVO.getSubId());
+ if (cacheObject == null)
+ redisCache.setCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId(), 1, 120, TimeUnit.MINUTES);
+ else
+ redisCache.setCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId(), (Integer) cacheObject + 1, 120, TimeUnit.MINUTES);
+ } else if ((Integer) cacheObject >= ivrTaskTemplate.getMateNum()) {
+ //濡傛灉宸茬粡闂簡瑙勫畾娆℃暟锛屽氨涓嶉棶浜嗭紝缁х画闂笅涓�棰橈紙杩欎釜瑕佸晢閲忎竴涓嬶紝鏄户缁棶涓嬩竴棰橈紝杩樻槸鍋滀簡锛屾槸涓嶆槸瑕佸仛涓紑鍏筹級
+ IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
+ ivrTaskTemplateScript.setTemplateID(ivrTaskTemplateScriptVO.getTemplateID());
+ List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
+ //鑾峰彇涓嬩竴棰�
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
+ phoneCallBackSHVO.setScriptContent(script.getScriptContent());
+ phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
+ phoneCallBackSHVO.setSort(script.getSort());
+ phoneCallBackSHVO.setScriptId(script.getId());
+ phoneCallBackSHVO.setSubId(serviceSubtask.getId());
+ break;
+ }
+ }
+ //鎶婄紦瀛樻竻闄�
+ redisCache.deleteObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
+ }
+ }
+ return phoneCallBackSHVO;
+ }
+
+ public PhoneCallBackYQVO AiMatch(String url, PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate, List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag, String uuid) {
+ PhoneCallBackYQVO back = null;
+ List<IvrTaskTemplateTargetoption> options = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
+ String voiceText = phoneCallReqYQVO.getAsrtext();
+ String questionText = StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent();
+ Integer matched = -1;
+ log.info("AI鍖归厤:url = {},questionText = {},voiceText = {},options = {},uuid ={}",
+ url,questionText,voiceText,options,uuid);
+ matched = subtaskOptionMatchApi.matchOptionIndex(url, questionText, voiceText, options, uuid);
+ //璇存槑鍖归厤姝g‘浜�
+ if (matched != null && matched >= 0) {
+ IvrTaskTemplateTargetoption chosenOption = options.get(matched);
+ //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
+ log.info("鍖归厤姝g‘浜嗗悧--------------");
+ chosenOption.setIsUserOperation(1);
+ ivrTaskTemplateTargetoptionService.updateIvrTaskTemplateTargetoption(chosenOption);
+
+ //灏嗘偅鑰呯殑鍥炵鍐欒繘service_subtask_detail涓�
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ivrTaskTemplateScriptVO.setQuestionResult(chosenOption.getOptiondesc());
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+
+ //鍒ゆ柇涓�涓嬪綋鍓嶇殑闂鏄笉鏄弧鎰忓害闂锛屽苟涓攄utyDeptCode鏄惁鏈夊�硷紝骞朵笖閫夐」鏄笉鏄紓甯搁�夐」锛屽鏋滃叏绗﹀悎锛屽垯寰�婊℃剰搴﹂棶棰樺紓甯歌〃鏂板
+ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == chosenOption.getIsabnormal()) {
+ ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
+ //鐢╰askid銆乻ubid鍜宻criptid鍘昏幏鍙杁etailid
+ ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
+ ssd.setSubId(serviceSubtask.getId());
+ ssd.setTaskid(serviceSubtask.getTaskid());
+ ssd.setScriptid(StringUtils.isNotEmpty(scriptId) ? Long.valueOf(scriptId) : null);
+ List<ServiceSubtaskDetail> serviceSubtaskDetails = taskSubtaskApi.findSubtaskDetails(ssd);
+ subtaskDetailTrace.setDetailId(CollectionUtils.isNotEmpty(serviceSubtaskDetails) ? serviceSubtaskDetails.get(0).getId() : null);
+
+ subtaskDetailTrace.setSubId(serviceSubtask.getId());
+ subtaskDetailTrace.setTaskid(serviceSubtask.getTaskid());
+ subtaskDetailTrace.setTemplateid(ivrTaskTemplateScriptVO.getId());
+ subtaskDetailTrace.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
+ subtaskDetailTrace.setSwitchid(chosenOption.getId());
+ subtaskDetailTrace.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
+ subtaskDetailTrace.setQuestionvoice(null);
+ subtaskDetailTrace.setCategoryname(ivrTaskTemplateScriptVO.getScriptAssortname());
+ subtaskDetailTrace.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
+ //鑾峰彇鎵�鏈夐�夐」
+ String optionDescStr = Optional.ofNullable(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()).filter(list -> !list.isEmpty()).map(list -> list.stream().map(IvrTaskTemplateTargetoption::getOptiondesc).filter(Objects::nonNull).collect(Collectors.joining("&"))).orElse("");
+ subtaskDetailTrace.setTargetid(chosenOption.getId());
+ subtaskDetailTrace.setTargetvalue(optionDescStr);
+ subtaskDetailTrace.setMatchedtext(chosenOption.getOptiondesc());
+ subtaskDetailTrace.setValueType(serviceSubtaskDetails.get(0).getValueType());
+ subtaskDetailTrace.setTemplateType(1);
+
+ SvyLibScriptCategory svyLibScriptCategory = svyLibScriptCategoryService.selectSvyLibScriptCategoryById(ivrTaskTemplateScriptVO.getScriptAssortid());
+ subtaskDetailTrace.setType(svyLibScriptCategory.getType());
+ subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId());
+ subtaskDetailTrace.setAsrtext(phoneCallReqYQVO.getAsrtext());
+ subtaskDetailTrace.setRecordpath(phoneCallReqYQVO.getRecordpath());
+ subtaskDetailTrace.setPatid(serviceSubtask.getPatid());
+ JSONObject patdescJson = new JSONObject();
+ patdescJson.put("sendname", serviceSubtask.getSendname());
+ patdescJson.put("phone", serviceSubtask.getPhone());
+ patdescJson.put("age", serviceSubtask.getAge());
+ patdescJson.put("sex", serviceSubtask.getSex() != null ? serviceSubtask.getSex() == 1 ? "鐢�" : "濂�" : null);
+ subtaskDetailTrace.setPatdesc(patdescJson.toJSONString());
+ subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
+ subtaskDetailTrace.setTodeptname(ivrTaskTemplateScriptVO.getDutyDeptName());
+ subtaskDetailTrace.setOrgid(serviceSubtask.getOrgid());
+ subtaskDetailTrace.setHandleFlag("0");
+ subtaskDetailTrace.setGuid(phoneCallReqYQVO.getGuid());
+ subtaskDetailTrace.setCreateTime(new Date());
+ subtaskDetailTrace.setUpdateTime(new Date());
+ subtaskDetailTrace.setOrgid(phoneCallReqYQVO.getOrgid());
+ taskSubtaskApi.insertDetailTrace(subtaskDetailTrace);
+ }
+
+ //鍒ゆ柇涓�涓嬶紝杩欎釜閫夐」缁撴灉鏄笉鏄繕鏈夌户缁棶涓嬪幓鐨勫繀瑕侊紝渚嬪閫夐」缁撴灉鏄埆浜轰笉鎯崇户缁洖绛旈棶棰橈紝灏辫缁撴潫鎺�
+ if (chosenOption.getIsEnd() == 1) {
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ back = phoneCallBackYQVO;
+ return back;
+ }
+
+ flag = 1;
+ //灏嗗綋鍓嶅墠鐨勬挱鎶ョ姸鎬佸垹闄わ紝缁欎笅涓�棰樿浣�
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+// //鑾峰彇涓嬩竴棰�
+ log.error("鑾峰彇涓嬩竴棰樼殑淇℃伅锛歿}", ivrTaskTemplateScriptVO);
+ //branchFlag涓簄ull鏃舵寜鍒嗘敮0澶勭悊锛岄伩鍏峃PE
+ if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
+ Long nextQuestion = null;
+ if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag())) {
+ nextQuestion = chosenOption.getNextQuestion();
+ //鏇存柊鍒嗘暟
+ double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ score = BigDecimal.valueOf(score).add(new BigDecimal(chosenOption.getScore())).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
+ } else {
+ nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
+ //鏇存柊鍒嗘暟
+ Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
+ score = BigDecimal.valueOf(score).add(new BigDecimal(String.valueOf(chosenOption.getScore()))).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+ }
+ if (nextQuestion == null || nextQuestion == 0L) {
+ //濡傛灉涓嬩竴棰樹负绌猴紝鎴栬�呬负0锛屽垯鎸傛満
+ ServiceSubtask ss = new ServiceSubtask();
+ ss.setId(serviceSubtask.getId());
+ ss.setSendstate(6L);
+ ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(ss);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
+ //鏄庣粏鍦ㄦ湰棰樺尮閰嶆垚鍔熸椂宸茶惤搴擄紙瑙佷笂鏂� saveQuestionAnswerPhone锛夛紝杩欓噷涓嶅啀閲嶅淇濆瓨
+ back = phoneCallBackYQVO;
+ return back;
+ }
+
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (script.getSort() == nextQuestion.intValue()) {
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
+ log.error("涓嬩竴棰橀棶棰橈細{}", scriptContent);
+ log.error("涓嬩竴棰樼殑瀛愪换鍔℃槸锛歿}", serviceSubtask);
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+ //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+ //鍒犻櫎鏃犲搷搴�
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ }
+ }
+ //涓嬩竴棰樿剼鏈病鎵惧埌鏃讹紝鍏滃簳閲嶉棶褰撳墠棰橈紝閬垮厤璋冪敤鏂硅鍒や负鏈鐞嗚�岄��鍥炴鍒欒瘑鍒�
+ if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
+ log.error("涓嬩竴棰樿剼鏈湭鎵惧埌锛岄噸闂綋鍓嶉锛宯extQuestion锛歿}", nextQuestion);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, questionText));
+ }
+ back = phoneCallBackYQVO;
+ return back;
+ } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ //鏇存柊涓�涓嬪垎鏁�
+ double score = 0.0;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setSendstate(6L);
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //璁剧疆缁撴潫璇�
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+ Long id = serviceSubtask.getId();
+ Map<String, String> map = delRedisValue(null, id.toString());
+ log.error("map鐨勫�间负锛歿}", map);
+ if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ //缁撴潫璇凡鎷艰繘杩斿洖鍊硷紝鎸傛満鐢卞钩鍙版寜杩斿洖鍊兼墽琛�
+ back = phoneCallBackYQVO;
+ return back;
+
+ }
+ } else {
+ //AI娌℃湁鍖归厤涓婏細鐢盇I鍒嗘敮鑷繁鎸�"娌¢棶娓呭氨閲嶉棶"鐨勬鏁板鐞嗭紝涓嶅啀閫�鍥炴鍒欒瘑鍒�
+ log.info("ai娌℃湁鍖归厤涓�----------------------------");
+ //娌″尮閰嶄笂涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵锛坢atchedtext缃┖锛屼笌姝e垯璺緞鍙e緞涓�鑷达級
+ ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
+ List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
+ ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
+ //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
+ if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
+ String questionvoice = serviceSubtaskDetail.getQuestionvoice();
+ String[] split = questionvoice.split("\\\\");
+ if (split.length > 0) {
+ String lastPart = split[split.length - 1];
+ serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
+ }
+ }
+ serviceSubtaskDetailList.add(serviceSubtaskDetail);
+ //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
+ serviceSubtaskDetailList.get(0).setMatchedtext("");
+ serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
+ serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
+ serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
+ saveQuestionAnswerPhone(serviceSubTaskDetailReq);
+
+ String mateKey = phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid();
+ Integer count = null;
+ Object countObj = redisCache.getCacheObject(mateKey);
+ if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
+ if (count != null && count >= ivrTaskTemplate.getMateNum()) {
+ //娌″尮閰嶆鏁板凡缁忕敤婊★紝涓嶈兘鍐嶉噸闂簡
+ boolean noNextQuestion = ("0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "1".equals(ivrTaskTemplateScriptVO.getBranchFlag()))
+ && (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0);
+ if (noNextQuestion) {
+ //宸茬粡鏄渶鍚庝竴棰橈紝鐩存帴鎸傛満
+ ServiceTask serviceTask1 = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ serviceSubtask.setScore(String.valueOf(score));
+ serviceSubtask.setFinishtime(new Date());
+ serviceSubtask.setSendstate(6L);
+ serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
+ taskSubtaskApi.updateSubtask(serviceSubtask);
+ //璁板綍鐘舵��
+ setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
+ //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
+ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid());
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
+ //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
+ Long id = serviceSubtask.getId();
+ Map<String, String> map = delRedisValue(null, id.toString());
+ if (ObjectUtils.isNotEmpty(map)) {
+ redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
+ redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
+ redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ }
+ } else {
+ //杩樻湁涓嬩竴棰橈紝鎸塶extScriptno缁х画鎻愰棶
+ for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
+ if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
+ phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
+ //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
+ redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
+ //鏇存柊涓�涓嬪垎鏁�
+ Double score = null;
+ Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
+ if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
+ score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
+ redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
+ //鎹㈤鎴愬姛锛屾病鍖归厤娆℃暟娓呴浂
+ redisCache.deleteObject(mateKey);
+ }
+ }
+ }
+ } else {
+ //杩樻病闂弧娆℃暟锛岀敤noMatchText寮曞鎮h�呴噸绛�
+ redisCache.setCacheObject(mateKey, count == null ? 1 : count + 1, 120, TimeUnit.MINUTES);
+ phoneCallBackYQVO.setType("text");
+ phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
+ phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
+ }
+ back = phoneCallBackYQVO;
+ return back;
+ }
+ return back;
+ }
+}
diff --git a/ruoyi-phone/src/test/java/com/ruoyi/phone/config/PhoneSwitchCheck.java b/ruoyi-phone/src/test/java/com/ruoyi/phone/config/PhoneSwitchCheck.java
new file mode 100644
index 0000000..da18365
--- /dev/null
+++ b/ruoyi-phone/src/test/java/com/ruoyi/phone/config/PhoneSwitchCheck.java
@@ -0,0 +1,192 @@
+package com.ruoyi.phone.config;
+
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.phone.api.PhoneApi;
+import com.ruoyi.phone.api.PhoneFacade;
+import com.ruoyi.phone.domain.PhoneCallBackSHVO;
+import com.ruoyi.phone.domain.PhoneCallBackYQVO;
+import com.ruoyi.phone.domain.PullTaskVO;
+
+import java.util.List;
+
+/**
+ * 鐢佃瘽妯″潡寮�鍏宠嚜妫� 鈥斺�� 绾� {@code main}锛屼笉渚濊禆 JUnit / Spring / 鏁版嵁搴撱��
+ *
+ * <h3>涓轰粈涔堜笉鐢� JUnit</h3>
+ * 涓庝换鍔℃ā鍧楃殑 {@code TaskSwitchCheck}銆佹弧鎰忓害妯″潡鐨� {@code SatisfactionSwitchCheck} 鍚屾锛�
+ * 鏈粨绂荤嚎浠撳簱缂� {@code surefire-junit3:2.12.4}锛岃蛋
+ * {@code mvn -o -q -pl ruoyi-phone -am -DskipTests test-compile} + {@code java -cp} 杩欐潯璺��
+ *
+ * <h3>鏂█瑕嗙洊</h3>
+ * <ol>
+ * <li>sys_config 浼樺厛浜� yml锛�</li>
+ * <li>yml 鍏滃簳锛涘弬鏁拌缂哄け 鈫� 鍥炶惤 yml锛�</li>
+ * <li>闈炴硶鍊� 鈫� 鎸�"涓嶆槸 false 鍗冲惎鐢�"锛�</li>
+ * <li>fail-open锛氳涓嶅埌閰嶇疆鏈嶅姟鏃舵寜鍚敤锛屼笖涓嶆姏寮傚父锛�</li>
+ * <li>10 绉掔紦瀛樹笌 invalidateCache锛�</li>
+ * <li>鎷︽埅鍣細寮�鍚斁琛屻�佸叧闂姏 {@link ServiceException} 涓� message 鍚�
+ * {@code phone.enabled=false} 涓� {@code 鎺ュ彛涓嶅彲鐢▆锛堝苟楠岃瘉 request 涓� null 涓嶇偢锛夛紱</li>
+ * <li>瀹堝崼璺緞鎭板ソ 8 鏉★紙6 鏉″湪鍘� {@code /smartor/serviceSubtask/**} 涓� +
+ * 2 鏉′笁姹� {@code /smartor/shphone/**}锛夛紝涓�"褰掔數璇濈殑 6 鏉�"涓�
+ * {@code TaskWebConfig#excludedPhonePaths()} 涓�涓�瀵瑰簲锛�</li>
+ * <li>闂ㄩ潰锛歿@link PhoneFacade} 鏄� {@link PhoneApi}锛涘叧闂椂鍚勬柟娉曢檷绾т负绌哄��/绌哄垪琛ㄤ笖涓嶆姏寮傚父銆�</li>
+ * </ol>
+ */
+public final class PhoneSwitchCheck {
+
+ private static int failed = 0;
+ private static int passed = 0;
+
+ private static void check(String key, Object expected, Object actual) {
+ boolean ok = expected == null ? actual == null : expected.equals(actual);
+ if (ok) {
+ passed++;
+ System.out.println(" [OK] " + key + " = " + actual);
+ } else {
+ failed++;
+ System.out.println(" [FAIL] " + key + " 鏈熸湜=" + expected + " 瀹為檯=" + actual);
+ }
+ }
+
+ private static PhoneProperties props(boolean enabled) {
+ PhoneProperties p = new PhoneProperties();
+ p.setEnabled(enabled);
+ return p;
+ }
+
+ public static void main(String[] args) {
+ System.out.println("========== 鐢佃瘽妯″潡寮�鍏宠嚜妫� ==========");
+
+ System.out.println("-- 1) sys_config 浼樺厛浜� yml --");
+ check("sys_config=true, yml=false -> enabled", true,
+ new PhoneSwitch(props(false), "true").isEnabled());
+ check("sys_config=false, yml=true -> enabled", false,
+ new PhoneSwitch(props(true), "false").isEnabled());
+
+ System.out.println("-- 2) yml 鍏滃簳 --");
+ check("sys_config 琛岀己澶�, yml=true -> enabled", true,
+ new PhoneSwitch(props(true), (String) null).isEnabled());
+ check("sys_config 琛岀己澶�, yml=false -> enabled", false,
+ new PhoneSwitch(props(false), (String) null).isEnabled());
+
+ System.out.println("-- 3) 闈炴硶鍊兼寜銆屼笉鏄� false 鍗冲惎鐢ㄣ��--");
+ check("sys_config=yes -> enabled", true, new PhoneSwitch(props(false), "yes").isEnabled());
+ check("sys_config=FALSE锛堝ぇ灏忓啓锛� -> enabled", false,
+ new PhoneSwitch(props(true), "FALSE").isEnabled());
+
+ System.out.println("-- 4) fail-open锛氬彇涓嶅埌閰嶇疆鏈嶅姟鏃朵笉鎶涘紓甯镐笖鎸� yml --");
+ boolean threw = false;
+ boolean value = false;
+ try {
+ value = new PhoneSwitch(props(true), (String) null).isEnabled();
+ } catch (Exception e) {
+ threw = true;
+ }
+ check("鏃犻厤缃湇鍔℃椂涓嶆姏寮傚父", false, threw);
+ check("鏃犻厤缃湇鍔℃椂鎸� yml=true", true, value);
+
+ System.out.println("-- 5) 10 绉掔紦瀛樹笌 invalidateCache --");
+ PhoneSwitch sw = new PhoneSwitch(props(false), "false");
+ check("鍒濆 enabled", false, sw.isEnabled());
+ sw.invalidateCache();
+ check("invalidateCache 鍚庝粛璇诲悓涓�閰嶇疆鍊�", false, sw.isEnabled());
+
+ System.out.println("-- 6) 鎷︽埅鍣� --");
+ PhoneAvailabilityInterceptor on =
+ new PhoneAvailabilityInterceptor(new PhoneSwitch(props(true), "true"));
+ boolean ok = false;
+ try {
+ ok = on.preHandle(null, null, null);
+ } catch (Exception ignored) {
+ }
+ check("鍚敤鏃舵斁琛�", true, ok);
+
+ PhoneAvailabilityInterceptor off =
+ new PhoneAvailabilityInterceptor(new PhoneSwitch(props(true), "false"));
+ ServiceException caught = null;
+ try {
+ // request 浼� null锛氶獙璇佹嫤鎴櫒瀵� null request 瀹夊叏锛堟祴璇曚細杩欎箞璋冿級
+ off.preHandle(null, null, null);
+ } catch (ServiceException e) {
+ caught = e;
+ }
+ check("鍏抽棴鏃舵姏 ServiceException", true, caught != null);
+ String msg = caught == null ? "" : caught.getMessage();
+ check("message 鍚� phone.enabled=false", true, msg.contains("phone.enabled=false"));
+ check("message 鍚� 鎺ュ彛涓嶅彲鐢�", true, msg.contains("鎺ュ彛涓嶅彲鐢�"));
+
+ System.out.println("-- 7) 瀹堝崼璺緞 --");
+ String[] guarded = PhoneWebConfig.guardedPathPatterns();
+ check("瀹堝崼璺緞鏉℃暟", 8, guarded.length);
+ check("鍚� phoneCallBack", true, contains(guarded, "/smartor/serviceSubtask/phoneCallBack"));
+ check("鍚� phoneCallBackYQ", true, contains(guarded, "/smartor/serviceSubtask/phoneCallBackYQ"));
+ check("鍚� taskPull", true, contains(guarded, "/smartor/serviceSubtask/taskPull"));
+ check("鍚� saveQuestionAnswerPhone", true, contains(guarded, "/smartor/serviceSubtask/saveQuestionAnswerPhone"));
+ check("鍚� recordAcceptshanghai", true, contains(guarded, "/smartor/serviceSubtask/recordAcceptshanghai"));
+ check("鍚� recordAccept", true, contains(guarded, "/smartor/serviceSubtask/recordAccept"));
+ check("鍚� getFirstQues", true, contains(guarded, "/smartor/shphone/getFirstQues"));
+ check("鍚� processResust", true, contains(guarded, "/smartor/shphone/processResust"));
+ // 鍏抽敭锛氫笉寰楄浼や换鍔℃ā鍧楄嚜宸辩殑闅忚绔偣涓庡鍛煎疄渚嬮厤缃鐐�
+ check("涓嶅惈 patItem", false, contains(guarded, "/smartor/serviceSubtask/patItem"));
+ check("涓嶅惈 addOutboundInstance", false, contains(guarded, "/smartor/shphone/addOutboundInstance"));
+
+ System.out.println("-- 7.1) 褰掔數璇濈殑 6 鏉★紙浠诲姟妯″潡瑕佹帓闄ょ殑閭� 6 鏉★級--");
+ String[] owned = PhoneWebConfig.subtaskPathsOwnedByPhone();
+ check("鏉℃暟", 6, owned.length);
+ for (String p : owned) {
+ check("鍦ㄥ畧鍗竻鍗曢噷: " + p, true, contains(guarded, p));
+ }
+
+ System.out.println("-- 8) 闂ㄩ潰闄嶇骇 --");
+ PhoneApi facadeOff = new PhoneFacade(props(true), "false", null);
+ check("鍏抽棴鏃� isEnabled", false, facadeOff.isEnabled());
+ List<PullTaskVO> disabledTasks = facadeOff.taskPull();
+ check("鍏抽棴鏃� taskPull 杩斿洖绌哄垪琛�", true, disabledTasks != null && disabledTasks.isEmpty());
+ check("鍏抽棴鏃� saveQuestionAnswerPhone 杩斿洖 0", 0, facadeOff.saveQuestionAnswerPhone(null));
+ PhoneCallBackYQVO disabledYq = facadeOff.phoneCallBackYQ(null);
+ check("鍏抽棴鏃� phoneCallBackYQ 杩斿洖闈� null 绌哄璞�", true, disabledYq != null);
+ PhoneCallBackSHVO disabledSh = facadeOff.getFirstQues(null);
+ check("鍏抽棴鏃� getFirstQues 杩斿洖闈� null 绌哄璞�", true, disabledSh != null);
+ boolean facadeThrew = false;
+ try {
+ facadeOff.phoneCallBack(null);
+ facadeOff.recordAccept(null);
+ facadeOff.processResust(null);
+ } catch (Exception e) {
+ facadeThrew = true;
+ }
+ check("鍏抽棴鏃堕棬闈㈣皟鐢ㄤ笉鎶涘紓甯�", false, facadeThrew);
+
+ PhoneApi facadeOn = new PhoneFacade(props(true), "true", null);
+ check("寮�鍚椂 isEnabled", true, facadeOn.isEnabled());
+ // 瀹炵幇缂哄け锛堟祴璇曚紶 null锛変篃鎸�"涓嶅彲鐢�"闄嶇骇锛屼笉鎶涘紓甯�
+ boolean onThrew = false;
+ try {
+ facadeOn.phoneCallBack(null);
+ } catch (Exception e) {
+ onThrew = true;
+ }
+ check("鏃犲疄鐜版椂涓嶆姏寮傚父", false, onThrew);
+
+ System.out.println("==================================================");
+ System.out.println("閫氳繃 " + passed + " 椤癸紝澶辫触 " + failed + " 椤�");
+ if (failed > 0) {
+ System.exit(1);
+ }
+ }
+
+ private static boolean contains(String[] array, String value) {
+ if (array == null) {
+ return false;
+ }
+ for (String s : array) {
+ if (s.equals(value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private PhoneSwitchCheck() {
+ }
+}
diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml
index ca78793..12ec5a2 100644
--- a/ruoyi-quartz/pom.xml
+++ b/ruoyi-quartz/pom.xml
@@ -82,6 +82,19 @@
<artifactId>ruoyi-message</artifactId>
</dependency>
+ <!--
+ 浠诲姟妯″潡锛坰ervice_task / service_subtask锛夈��
+ RyTask / CollectHISServiceImpl 鐩存帴娉ㄥ叆浠诲姟鍩熺殑鏈嶅姟涓� Mapper
+ 锛圛ServiceSubtaskService銆丼erviceTaskMapper銆丼erviceSubtaskMapper 绛夛級锛�
+ 杩欎簺宸茬嫭鍗犳惉鍏� ruoyi-task锛屾晠姝ゅ闇�瑕佺紪璇戞湡渚濊禆銆�
+ 鈿狅笍 涓庝笂闈� ruoyi-othervisit 鍚岀悊锛氬師鍏堝彧闈� smartor 浼犻�掑甫杩涙潵锛�
+ 涓�鏃︿緷璧栧浘鍙樺寲灏变細鍦ㄧ紪璇戞湡锛堟垨鏇寸碂锛氳繍琛屾湡锛夋墠鐐革紝鏁呮樉寮忓0鏄庛��
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-task</artifactId>
+ </dependency>
+
</dependencies>
</project>
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
index a078334..d22c9f0 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/CollectHISMapper.java
@@ -18,6 +18,7 @@
import java.util.List;
import java.util.Map;
+import com.ruoyi.common.core.domain.entity.PatArchive;
@DataSource(value = DataSourceType.SLAVE)
@Mapper
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
index 9e6890e..1d888f5 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
@@ -7,6 +7,7 @@
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
public interface ICollectHISService {
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index 5f64ca7..58d4d55 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -12,7 +12,6 @@
import com.ruoyi.quartz.mapper.CollectHISMapper;
import com.ruoyi.quartz.service.ICollectHISService;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
import lombok.extern.slf4j.Slf4j;
@@ -36,6 +35,10 @@
import com.ruoyi.othervisit.domain.PatMedOperation;
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
@Slf4j
@Service
public class CollectHISServiceImpl implements ICollectHISService {
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 9e3f824..2bb801d 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -33,8 +33,7 @@
import com.ruoyi.message.sms.provider.sltd.ws.MessageSend;
import com.smartor.common.QwenLLMUtil;
import com.smartor.domain.*;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
import com.smartor.mapper.*;
import com.smartor.service.*;
import lombok.extern.slf4j.Slf4j;
@@ -62,6 +61,21 @@
import com.ruoyi.template.domain.HeLibrary;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
import com.ruoyi.template.api.TemplateFacade;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.domain.SendMagParam;
/**
* 瀹氭椂浠诲姟璋冨害娴嬭瘯
*
diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
index 52a29fc..2f1c169 100644
--- a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -32,7 +32,7 @@
</resultMap>
- <resultMap type="com.smartor.domain.PatArchive" id="PatArchiveResult">
+ <resultMap type="com.ruoyi.common.core.domain.entity.PatArchive" id="PatArchiveResult">
<result property="id" column="id"/>
<result property="patientno" column="patientno"/>
<result property="sourcefrom" column="sourcefrom"/>
@@ -549,7 +549,7 @@
</if>
</select>
- <select id="selectPatArchiveList" parameterType="com.smartor.domain.PatArchive" resultMap="PatArchiveResult">
+ <select id="selectPatArchiveList" parameterType="com.ruoyi.common.core.domain.entity.PatArchive" resultMap="PatArchiveResult">
<include refid="selectPatArchiveVo"/>
where 1=1
<if test="name != null and name != ''">and name like concat('%', #{name}, '%')</if>
diff --git a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/domain/row/SatisfactionTaskRow.java b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/domain/row/SatisfactionTaskRow.java
index 0b96dea..dc77fd5 100644
--- a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/domain/row/SatisfactionTaskRow.java
+++ b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/domain/row/SatisfactionTaskRow.java
@@ -5,7 +5,7 @@
/**
* 銆岄殢璁挎弧鎰忓害鎸囨暟銆嶇粺璁$敤鐨� {@code service_task} 鍙瑙嗗浘銆�
* <p>
- * 涓轰粈涔堥渶瑕佽繖涓被锛堣�屼笉鏄洿鎺ョ敤 {@code com.smartor.domain.ServiceTask}锛夛細
+ * 涓轰粈涔堥渶瑕佽繖涓被锛堣�屼笉鏄洿鎺ョ敤 {@code com.ruoyi.task.domain.ServiceTask}锛夛細
* <ul>
* <li>閭d釜瀹炰綋灞炰簬 smartor 鐨�**闅忚浠诲姟绠$悊**涓氬姟锛堣澶ч噺鏂囦欢浣跨敤锛屽惈澧炲垹鏀规煡锛夛紝涓嶈兘鎼繘鏈ā鍧楋紱</li>
* <li>婊℃剰搴︽寚鏁扮粺璁″彧鐢ㄥ埌瀹冪殑 4 涓瓧娈碉紙瑙佷笅锛夛紱</li>
diff --git a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/mapper/SatisfactionMapper.java b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/mapper/SatisfactionMapper.java
index 073c9ef..34ce21d 100644
--- a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/mapper/SatisfactionMapper.java
+++ b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/mapper/SatisfactionMapper.java
@@ -22,8 +22,8 @@
/**
* 婊℃剰搴︾粺璁� Mapper 鎺ュ彛銆�
* <p>
- * 杩佺Щ璇存槑锛氭柟娉曞師鏈暎钀藉湪 {@code com.smartor.mapper.ServiceSubtaskMapper} 涓�
- * {@code com.smartor.mapper.ServiceSubtaskDetailMapper} 涓紝婊℃剰搴︽ā鍧楀寲鍚庨泦涓埌姝ゅ銆�
+ * 杩佺Щ璇存槑锛氭柟娉曞師鏈暎钀藉湪 {@code com.ruoyi.task.mapper.ServiceSubtaskMapper} 涓�
+ * {@code com.ruoyi.task.mapper.ServiceSubtaskDetailMapper} 涓紝婊℃剰搴︽ā鍧楀寲鍚庨泦涓埌姝ゅ銆�
* <p>
* 鏈ā鍧楄嚜甯� SQL锛�<b>鐩存帴鏌ヨ</b> {@code service_subtask} / {@code service_subtask_detail}锛�
* 浠ュ強妯℃澘鍒嗙被琛紱涓嶄緷璧栦换浣曞叾瀹冩ā鍧楃殑 Mapper銆�
diff --git a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/SatisfactionSubtaskService.java b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/SatisfactionSubtaskService.java
index 4fc40af..9f05783 100644
--- a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/SatisfactionSubtaskService.java
+++ b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/SatisfactionSubtaskService.java
@@ -23,7 +23,7 @@
/**
* 婊℃剰搴︺�屽瓙浠诲姟缁村害銆嶇粺璁℃湇鍔°��
* <p>
- * 杩佺Щ璇存槑锛氳繖浜涙柟娉曞師灞� {@code com.smartor.service.IServiceSubtaskService}锛�
+ * 杩佺Щ璇存槑锛氳繖浜涙柟娉曞師灞� {@code com.ruoyi.task.service.IServiceSubtaskService}锛�
* 浣嗗彧鏈夋弧鎰忓害鐩稿叧鍏ュ彛鍦ㄧ敤锛堝凡閫愪釜鏍稿疄鏃犲叾瀹冭皟鐢ㄦ柟锛夛紝鏁呮暣鎵规惉鍏ユ弧鎰忓害妯″潡銆�
* 鏂规硶绛惧悕闄� {@link #getDetailRatio} 澶栧潎<b>涓�瀛楁湭鏀�</b>銆�
* <p>
@@ -120,7 +120,7 @@
/**
* 鑾峰彇婊℃剰搴﹀紓甯搁厤缃鐩紙璇煶 + 闂嵎锛夛紝鐢ㄤ簬銆屾弧鎰忓害寮傚父閰嶇疆銆嶉〉闈€��
* <p>
- * 杩佺Щ璇存槑锛氬師涓� {@code com.smartor.service.IServiceSubtaskDetailTraceService#getSatisfactionExceptConfigQuestion}锛�
+ * 杩佺Щ璇存槑锛氬師涓� {@code com.ruoyi.task.service.IServiceSubtaskDetailTraceService#getSatisfactionExceptConfigQuestion}锛�
* 鏈嶅姟瀹炵幇钀藉湪闅忚寮傚父璺熻釜 Service 閲岋紝浣嗛�昏緫瀹屽叏鏄弧鎰忓害鍒嗙被/棰樼洰鐨勬煡璇紝
* 鏁呮寜妯″潡鍖栬姹傛惉鍏ユ湰妯″潡銆�<b>杩斿洖缁撴瀯銆佸瓧娈靛悕銆佺瓫閫夋潯浠跺潎涓庡師鏂囦竴鑷�</b>锛�
* <pre>
@@ -144,7 +144,7 @@
/**
* 闅忚缁熻椤电殑銆屾弧鎰忓害鎸囨暟銆嶏細婊℃剰搴﹂鐩�婚噺 / 濉姤閲� / 瀹屾垚姣斾緥銆�
* <p>
- * 杩佺Щ璇存槑锛氬師涓� {@code com.smartor.service.impl.ServiceSubtaskServiceImpl#getSatisfactionIndex}
+ * 杩佺Щ璇存槑锛氬師涓� {@code com.ruoyi.task.service.impl.ServiceSubtaskServiceImpl#getSatisfactionIndex}
* 锛堢鏈夋柟娉曪紝琚� {@code getSfStatisticsJoy} 璋冪敤锛夈��
* <p>
* 鈿狅笍 <b>鍘熷疄鐜扮己闄峰凡鍘熸牱淇濈暀</b>锛氱敱浜� {@code BigDecimal.add(...)} 鐨勮繑鍥炲�艰涓㈠純锛�
diff --git a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/SatisfactionSubtaskServiceImpl.java b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/SatisfactionSubtaskServiceImpl.java
index 29ef42d..b5a976b 100644
--- a/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/SatisfactionSubtaskServiceImpl.java
+++ b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/SatisfactionSubtaskServiceImpl.java
@@ -969,7 +969,7 @@
/**
* 鑾峰彇婊℃剰搴﹀紓甯搁厤缃鐩紙璇煶 + 闂嵎锛夈��
* <p>
- * 杩佺Щ璇存槑锛氬師瀹炵幇浣嶄簬 {@code com.smartor.service.impl.ServiceSubtaskDetailTraceServiceImpl}锛�
+ * 杩佺Щ璇存槑锛氬師瀹炵幇浣嶄簬 {@code com.ruoyi.task.service.impl.ServiceSubtaskDetailTraceServiceImpl}锛�
* 鐜版暣娈垫惉鍏ユ湰妯″潡銆傚師鏉ョ殑璋冪敤閾炬槸锛�
* <pre>
* 璇煶鍒嗙被锛欼vrLibaScriptAssortServiceImpl.selectIvrLibaScriptAssortList 鈫� 鏈嶅姟鏂规硶锛屼細鎶婂垎绫汇�愭嫾鎴愭爲銆戯紝鍙繑鍥為《灞�
@@ -1109,7 +1109,7 @@
/**
* 闅忚缁熻椤电殑銆屾弧鎰忓害鎸囨暟銆嶏細婊℃剰搴﹂鐩�婚噺 / 濉姤閲� / 瀹屾垚姣斾緥銆�
* <p>
- * 杩佺Щ璇存槑锛氬師涓� {@code com.smartor.service.impl.ServiceSubtaskServiceImpl#getSatisfactionIndex}
+ * 杩佺Щ璇存槑锛氬師涓� {@code com.ruoyi.task.service.impl.ServiceSubtaskServiceImpl#getSatisfactionIndex}
* 鐨勭鏈夋柟娉曪紝琚� {@code getSfStatisticsJoy} 璋冪敤銆傚畠鐨勫彇鏁板璞℃槸
* 銆屾弧鎰忓害棰樼洰銆嶏紙鎸� {@code ivrCategoryid} / {@code svyCategoryid} 璇嗗埆锛変笌
* 銆屾弧鎰忓害濉姤鏄庣粏銆嶏紝灞炰簬婊℃剰搴﹀彛寰勶紝鏁呮惉鍏ユ湰妯″潡銆�
diff --git a/ruoyi-task/pom.xml b/ruoyi-task/pom.xml
new file mode 100644
index 0000000..8b62b72
--- /dev/null
+++ b/ruoyi-task/pom.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>ruoyi</artifactId>
+ <groupId>com.ruoyi</groupId>
+ <version>3.8.5</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>ruoyi-task</artifactId>
+
+ <description>
+ 浠诲姟妯″潡锛歴ervice_task锛堜换鍔★級涓� service_subtask锛堝瓙浠诲姟锛夌殑鍞竴瀹炵幇澶勩��
+ 鏈ā鍧楄嚜甯� Mapper 涓� SQL锛岀洿鎺ヨ鍐� service_task / service_subtask锛�
+ 鍏跺畠妯″潡闇�瑕佷换鍔℃暟鎹彧鑳介�氳繃 com.ruoyi.task.api 璋冪敤锛�
+ 鎴栫粡涓嬫矇鍒� ruoyi-common 鐨勫绾︼紙VisitTaskCreateApi / ServiceTaskMatchApi /
+ SubtaskStatApi / SubtaskOptionMatchApi锛夊彇鐢ㄣ��
+ 鏀寔閫氳繃 sys_config 鍙傛暟琛ㄩ噷鐨� task.enabled 鏁翠綋鍏抽棴锛堣繍琛屾椂璇诲彇锛屾敼瀹屾渶澶� 10 绉掔敓鏁堬級銆�
+
+ 渚濊禆鏂瑰悜锛歳uoyi-task -> ruoyi-common锛堢粷涓嶄緷璧� smartor / smartor-suifang /
+ ruoyi-system / ruoyi-framework / ruoyi-admin锛屽惁鍒欏舰鎴愬惊鐜緷璧栵紝Maven 鐩存帴鏋勫缓澶辫触锛夈��
+ </description>
+
+ <dependencies>
+ <!-- 閫氱敤宸ュ叿锛欱aseController / ExcelUtil / PageUtils / Arith / SecurityUtils / DtoConversionUtils
+ 鍚屾椂浼犻�掑甫鍏� pagehelper(鍚� mybatis)銆乻wagger-annotations銆乧ommons-lang3銆乯ackson 绛� -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-common</artifactId>
+ </dependency>
+
+ <!-- lombok锛歳uoyi-common 閲屾槸鐩存帴渚濊禆锛屾澶勬樉寮忓0鏄庣増鏈紝閬垮厤娉ㄨВ澶勭悊鍣ㄧ己澶� -->
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <version>1.18.34</version>
+ </dependency>
+
+ <!-- MyBatis锛歁apper 鎺ュ彛涓� XML锛坧agehelper 宸蹭紶閫掑甫鍏ワ紝杩欓噷鍙槸鏄惧紡鍖栨剰鍥撅級 -->
+ <dependency>
+ <groupId>org.mybatis.spring.boot</groupId>
+ <artifactId>mybatis-spring-boot-starter</artifactId>
+ <version>2.2.2</version>
+ </dependency>
+
+ <!-- Servlet API锛欻ttpServletResponse锛圕ontroller 瀵煎嚭鐢級 -->
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ <version>4.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!--
+ 妯℃澘妯″潡锛氫换鍔$殑妯℃澘 / Script / Targetoption 瀛楁绫诲瀷鏉ヨ嚜 template 鍩�
+ 锛圫vyTaskTemplateTargetoption銆丠eLibraryCountVO銆両vrTaskTemplate* 绛夛級銆�
+ 娉ㄦ剰锛歳uoyi-template 鍙緷璧� ruoyi-common锛屼笉浼氫笌 ruoyi-task 褰㈡垚寰幆渚濊禆銆�
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-template</artifactId>
+ </dependency>
+
+ <!--
+ 浠ヤ笅妯″潡銆愰兘鍙緷璧� ruoyi-common锛堟垨鍏朵笂娓革級銆戯紝鍥犳涓嶄細涓� ruoyi-task 褰㈡垚寰幆渚濊禆锛�
+ 路 ruoyi-satisfaction 锛氶殢璁跨粺璁¢噷鐨勩�屾弧鎰忓害鎸囨暟銆嶇粡 SatisfactionFacade 鍙栫敤
+ 路 ruoyi-message 锛氱煭淇� / 寰俊鍙戦�佹柟锛圫msSenderFactory / WechatSenderFactory锛�
+ 路 ruoyi-inhospvisit / ruoyi-outpatientvisit / ruoyi-othervisit锛�
+ 闅忚缂栨帓闂ㄩ潰锛圛nhospVisitFacade / OuthospDataFacade / OtherVisitFacade锛�
+ 鈿狅笍 浠嶇劧銆愪笉寰椼�戜緷璧� smartor / smartor-suifang / ruoyi-system / ruoyi-framework / ruoyi-admin銆�
+ ruoyi-system 鐨勮兘鍔涳紙濡� ISysConfigService 鐨� 2 鍙� selectConfigByKey锛変竴寰嬬粡
+ com.ruoyi.task.api.spi 鐨勭鍙g敱 smartor 渚у疄鐜般��
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-satisfaction</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-message</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-inhospvisit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-outpatientvisit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-othervisit</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/TaskModule.java b/ruoyi-task/src/main/java/com/ruoyi/task/TaskModule.java
new file mode 100644
index 0000000..1bdff0d
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/TaskModule.java
@@ -0,0 +1,33 @@
+package com.ruoyi.task;
+
+/**
+ * 浠诲姟妯″潡鍖呮牴銆�
+ * <p>
+ * 鐩綍绾﹀畾锛�
+ * <ul>
+ * <li>{@code com.ruoyi.task.api} 鈥斺�� <b>鍞竴瀵瑰鍖�</b>锛屽叾瀹冩ā鍧楀彧鑳戒緷璧栬繖涓寘锛�</li>
+ * <li>{@code controller} / {@code service} / {@code mapper} / {@code domain} 鈥斺�� 妯″潡鍐呴儴瀹炵幇锛�
+ * 鍏跺畠妯″潡涓嶅簲鐩存帴寮曠敤銆�</li>
+ * </ul>
+ * 鏈ā鍧楁槸 {@code service_task}锛堜换鍔★級涓� {@code service_subtask}锛堝瓙浠诲姟锛変袱寮犺〃鐨�<b>鍞竴瀹炵幇澶�</b>銆�
+ * <p>
+ * 妯″潡鍙�氳繃 {@code sys_config} 鍙傛暟琛ㄧ殑 {@code task.enabled} 鏁翠綋鍏抽棴
+ * 锛堣繍琛屾椂璇诲彇锛屾敼瀹屾渶澶� 10 绉掔敓鏁堬級锛涘叧闂悗 {@code com.ruoyi.task.api.TaskFacade} 浠嶅瓨鍦紝
+ * 浣嗘墍鏈夎皟鐢ㄩ檷绾т负绌哄�硷紱鐩存帴璁块棶浠诲姟绔偣鐨勮姹備細琚嫤鎴櫒鎷︿笅骞惰繑鍥炴槑纭殑"鏈惎鐢�"涓氬姟閿欒銆�
+ * <p>
+ * 鈿狅笍 <b>渚濊禆绾㈢嚎</b>锛氭湰妯″潡鍙緷璧� {@code ruoyi-common}銆�
+ * 缁濅笉渚濊禆 {@code smartor} / {@code smartor-suifang} / {@code ruoyi-system} /
+ * {@code ruoyi-framework} / {@code ruoyi-admin} 鈥斺�� 鍚﹀垯褰㈡垚
+ * {@code smartor -> ruoyi-task -> smartor} 鐨勫惊鐜緷璧栵紝Maven 鐩存帴鏋勫缓澶辫触銆�
+ * 闇�瑕佸叾瀹冩ā鍧楃殑鑳藉姏鏃讹紝涓�寰嬪湪 {@code ruoyi-common} 瀹氫箟绔彛銆佺敱瀵规柟鎻愪緵瀹炵幇銆�
+ */
+public final class TaskModule {
+
+ /**
+ * 妯″潡閰嶇疆鍓嶇紑锛堜粎浣滀负 yml 鍏滃簳閰嶇疆鐨勯敭鍓嶇紑锛涗富寮�鍏冲湪 {@code sys_config} 鍙傛暟琛ㄩ噷锛�
+ */
+ public static final String PROPERTIES_PREFIX = "task";
+
+ private TaskModule() {
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskApi.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskApi.java
new file mode 100644
index 0000000..67a3f94
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskApi.java
@@ -0,0 +1,31 @@
+package com.ruoyi.task.api;
+
+/**
+ * 浠诲姟妯″潡<b>瀵瑰鎺ュ彛</b>锛堝叾瀹冩ā鍧楀彲渚濊禆鐨勭ǔ瀹氬叆鍙o級銆�
+ *
+ * <h3>鈿狅笍 鐪熸鐨勮法妯″潡鏁版嵁闈㈡槸 ruoyi-common 鐨� 4 涓绾︼紝涓嶆槸鏈帴鍙�</h3>
+ * 浠诲姟/瀛愪换鍔¤鍏跺畠妯″潡浣跨敤鐨勮兘鍔涳紝宸茬粡鎸�"鎺ュ彛鍦� ruoyi-common銆佸疄鐜板湪褰掑睘妯″潡"鐨勬棦鏈夋墜娉�
+ * 涓嬫矇鎴� 4 涓绾︼紝骞剁敱鏈ā鍧楀疄鐜帮細
+ * <ul>
+ * <li>{@code com.ruoyi.common.core.service.VisitTaskCreateApi} 鈥斺�� 鏌ュ凡鍙戝竷闀挎湡浠诲姟銆佽惤搴撳瓙浠诲姟銆佸洖鍐欏緟鎵ц瀛愪换鍔★紱</li>
+ * <li>{@code com.ruoyi.common.core.service.ServiceTaskMatchApi} 鈥斺�� 鎸夌瀹�/璇婃柇/鎵嬫湳缂栫爜鍖归厤闀挎湡浠诲姟锛�</li>
+ * <li>{@code com.ruoyi.common.core.service.SubtaskStatApi} 鈥斺�� 闂ㄨ瘖闅忚缁熻鍙�"闅忚浜烘/浜烘暟"锛�</li>
+ * <li>{@code com.ruoyi.common.core.service.SubtaskOptionMatchApi} 鈥斺�� AI 閫夐」鍖归厤銆�</li>
+ * </ul>
+ * 璋冪敤鏂�<b>鐩存帴娉ㄥ叆閭� 4 涓帴鍙�</b>鍗冲彲锛屼笉蹇呯粡杩囨湰鎺ュ彛銆�
+ *
+ * <h3>閭f湰鎺ュ彛鍋氫粈涔�</h3>
+ * 鍙毚闇�"妯″潡鏄惁鍙敤"杩欎竴涓ǔ瀹氬垽鏂紝璁╄皟鐢ㄦ柟鑳藉湪璋冧换鍔¤兘鍔涘墠鍏堣闄嶇骇锛�
+ * 鑰屼笉蹇呯煡閬� {@code TaskSwitch} / {@code sys_config} 鐨勫唴閮ㄧ粏鑺傘��
+ *
+ * <h3>鍏抽棴鏃剁殑琛屼负</h3>
+ * 鏈ā鍧楃殑绔偣浼氳 {@code TaskAvailabilityInterceptor} 鎷︿笅骞惰繑鍥炴槑纭笟鍔¢敊璇紱
+ * 鑰� {@code isEnabled()} 渚涘叾瀹冩ā鍧楀湪<b>璋冪敤鍓�</b>鍒ゆ柇锛岄伩鍏�"鎷垮埌 500 鎵嶇煡閬撳叧浜�"銆�
+ */
+public interface TaskApi {
+
+ /**
+ * 浠诲姟妯″潡鏄惁宸插惎鐢紙杩愯鏃惰 {@code sys_config} 鐨� {@code task.enabled}锛屾渶澶� 10 绉掑欢杩燂級
+ */
+ boolean isEnabled();
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskFacade.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskFacade.java
new file mode 100644
index 0000000..98b7576
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskFacade.java
@@ -0,0 +1,69 @@
+package com.ruoyi.task.api;
+
+import com.ruoyi.task.config.TaskSwitch;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 浠诲姟妯″潡瀵瑰闂ㄩ潰锛�<b>甯搁┗ Bean</b>锛夈��
+ *
+ * <h3>涓轰粈涔堝繀椤�"甯搁┗"</h3>
+ * 鏈棬闈�<b>姘歌繙</b>鏄� Spring Bean锛屼笉闅忓紑鍏崇姸鎬佸鍒犮�傝繖鏍疯皟鐢ㄦ柟鐨�
+ * {@code @Autowired TaskFacade} 鍦ㄤ换浣曞紑鍏崇姸鎬佷笅閮�<b>涓嶄細鍚姩澶辫触</b>
+ * 鈥斺�� 杩欎笌婊℃剰搴︽ā鍧楃殑 {@code SatisfactionFacade} 鏄悓涓�鏉¤璁$害鏉�
+ * 锛堝巻鍙叉暀璁細鐢� {@code @ConditionalOnProperty} 鎽� Bean 浼氳璋冪敤鏂瑰惎鍔ㄥ嵆澶辫触锛�
+ * 涓斿彧鍦ㄥ惎鍔ㄦ椂姹傚�间竴娆★紝鍋氫笉鍒�"鏀瑰畬鍙傛暟 10 绉掔敓鏁�"锛夈��
+ *
+ * <h3>鈿狅笍 涓庢弧鎰忓害闂ㄩ潰鐨勪竴涓樊鍒細鏈被涓嶅疄鐜拌嚜宸辩殑鏌ヨ鏂规硶</h3>
+ * {@code SatisfactionFacade} 鍚屾椂瀹炵幇 {@code SatisfactionApi} 骞堕渶
+ * {@code filter(api -> api != this)} 闃茶嚜寮曠敤閫掑綊 鈥斺�� 鍥犱负瀹冭杞彂鍒版ā鍧楀唴瀹炵幇銆�
+ * 鏈棬闈㈠彧鍥炵瓟"鏄惁鍚敤"锛�<b>涓嶈浆鍙戜换浣曟煡璇�</b>锛堟煡璇㈣蛋 4 涓� ruoyi-common 濂戠害锛夛紝
+ * 鍥犳涓嶅瓨鍦ㄨ嚜寮曠敤闂锛屼篃灏变笉闇�瑕� {@code ObjectProvider} 鑷繃婊ら偅涓�濂椼��
+ * 灏嗘潵鑻ョ粰 {@link TaskApi} 澧炲姞闇�瑕佽浆鍙戠殑鏌ヨ鏂规硶锛�<b>蹇呴』琛ヤ笂鑷紩鐢ㄨ繃婊�</b>銆�
+ *
+ * @see TaskApi
+ */
+@Slf4j
+@Component
+public class TaskFacade implements TaskApi {
+
+ private final TaskSwitch taskSwitch;
+
+ /**
+ * Spring 浣跨敤鐨勬瀯閫犲櫒銆�
+ * <p>
+ * 鈿狅笍 <b>蹇呴』鏄惧紡鏍囨敞 {@code @Autowired}</b>锛氭湰绫绘湁<b>涓や釜</b>鍏紑鏋勯�犲櫒
+ * 锛堝彟涓�涓粰娴嬭瘯/闈� Spring 鐜鐢級锛屼笖<b>娌℃湁鏃犲弬鏋勯�犲櫒</b>銆�
+ * 涓嶆爣娉ㄧ殑璇濓紝Spring 鎵句笉鍒�"鍞竴鐨勯潪榛樿鏋勯�犲櫒"锛屼細閫�鍥炴煡鎵炬棤鍙傛瀯閫犲櫒锛�
+ * 鍚姩鍗虫姤 {@code No default constructor found}銆�
+ * <p>
+ * 杩欎笌婊℃剰搴︽ā鍧� {@code SatisfactionFacade} / {@code SatisfactionSwitch} 鏄悓涓�涓潙锛�
+ * 璇ヨ鍒欑敱 {@code sql/_probe/verify_spring_beans.py} 闈欐�佹妸鍏�
+ * 锛�**鏈被宸茬櫥璁拌繘璇ヨ剼鏈殑鎵弿鑼冨洿**锛岃鑴氭湰 MODULE 閰嶇疆锛夈��
+ */
+ @Autowired
+ public TaskFacade(TaskSwitch taskSwitch) {
+ this.taskSwitch = taskSwitch;
+ }
+
+ /**
+ * 渚�<b>娴嬭瘯/闈� Spring 鐜</b>鐩存帴鏋勯�狅細{@code sysConfigValue} 灏辨槸
+ * {@code sys_config} 閲岀殑 {@code task.enabled} 鍊硷紝{@code null} 琛ㄧず"鍙傛暟琛屼笉瀛樺湪"銆�
+ */
+ public TaskFacade(com.ruoyi.task.config.TaskProperties properties, String sysConfigValue) {
+ this(new TaskSwitch(properties, sysConfigValue));
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return taskSwitch.isEnabled();
+ }
+
+ /**
+ * 鍙栬繍琛屾椂寮�鍏筹紙渚涙嫤鎴櫒澶嶇敤鍚屼竴瀹炰緥銆佷篃渚涙祴璇曟柇瑷�锛�
+ */
+ public TaskSwitch getTaskSwitch() {
+ return taskSwitch;
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskSubtaskApi.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskSubtaskApi.java
new file mode 100644
index 0000000..d0b9827
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/TaskSubtaskApi.java
@@ -0,0 +1,113 @@
+package com.ruoyi.task.api;
+
+import com.ruoyi.task.domain.IvrTaskVisitResult;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+
+import java.util.List;
+
+/**
+ * 浠诲姟妯″潡鐨�<b>瀛愪换鍔℃暟鎹闂� API</b>锛氱粰"闇�瑕佸湪褰掑睘妯″潡涔嬪璇诲啓瀛愪换鍔℃暟鎹�"鐨勬ā鍧楃敤銆�
+ *
+ * <h3>涓轰粈涔堣鏈夊畠</h3>
+ * 鎸� {@code doc/璺ㄦā鍧楁暟鎹闂師鍒欎笌鏀跺彛鏂规.md} 鐨勮惤鍦板彛寰勶細
+ * <b>鍐欐搷浣滐紙insert/update/delete 褰掑睘琛級浠讳綍闈炲綊灞炴ā鍧椾竴寰嬬姝�</b>锛�
+ * {@code service_subtask} / {@code service_subtask_detail} / {@code service_task} 绛夎〃褰掓湰妯″潡锛�
+ * 鎵�浠ラ渶瑕佽繖浜涙暟鎹殑妯″潡锛堝綋鍓嶆槸 {@code ruoyi-phone}锛夊彧鑳界粡鏈� API 璋冪敤锛�
+ * <b>涓嶈鍦ㄨ嚜宸辨ā鍧楅噷鍐欓拡瀵硅繖浜涜〃鐨� SQL</b>銆�
+ *
+ * <h3>涓庡叾瀹冨澶栧绾︾殑鍏崇郴</h3>
+ * <ul>
+ * <li>{@code com.ruoyi.common.core.service.*}锛圴isitTaskCreateApi / ServiceTaskMatchApi /
+ * SubtaskStatApi / SubtaskOptionMatchApi锛夛細缁� smartor / ruoyi-admin / ruoyi-quartz 鐢ㄧ殑
+ * "涓嬫矇鍒� ruoyi-common 鐨勬煡璇㈠绾�"锛岃蛋鐨勬槸 smartor 渚у疄鐜帮紱</li>
+ * <li>{@link TaskSubtaskApi}锛堟湰鎺ュ彛锛夛細<b>妯″潡鍒版ā鍧�</b>鐨勬暟鎹闂叆鍙o紝
+ * 瀹炵幇灏卞湪鏈ā鍧楀唴锛坽@code api.contract.TaskSubtaskApiImpl}锛夛紝
+ * 鍥犳鍙厑璁�"妯″潡 鈫� 浠诲姟妯″潡"杩欎竴涓柟鍚戯紝涓嶄細褰㈡垚寰幆渚濊禆銆�</li>
+ * </ul>
+ *
+ * <h3>鏂规硶璇箟</h3>
+ * 姣忎釜鏂规硶閮芥槸瀵规棦鏈� Mapper/Service 鐨�<b>鍘熸牱杞彂</b>锛屼笉鍚换浣曢澶栦笟鍔″垽鏂�
+ * 锛堝挨鍏� {@link #updateSubtask} 鐢ㄥ姩鎬� SQL 鍙洿鏂伴潪绌哄瓧娈碉紝璇箟蹇呴』涓�
+ * {@code ServiceSubtaskMapper.updateServiceSubtask} 淇濇寔涓�鑷达紝鍚﹀垯鐢佃瘽娴佺▼浼氳鏀瑰瓧娈碉級銆�
+ */
+public interface TaskSubtaskApi {
+
+ /**
+ * 鎸夊瓙浠诲姟 ID 鍙栧瓙浠诲姟锛堝師 {@code ServiceSubtaskMapper#selectServiceSubtaskById}锛�
+ *
+ * @param subId 瀛愪换鍔� ID
+ * @return 瀛愪换鍔★紱涓嶅瓨鍦ㄨ繑鍥� {@code null}
+ */
+ ServiceSubtask getSubtask(Long subId);
+
+ /**
+ * 鎸夋潯浠舵煡瀛愪换鍔″垪琛紙鍘� {@code ServiceSubtaskMapper#selectServiceSubtaskList}锛�
+ *
+ * @param query 鏌ヨ鏉′欢锛坱askid / patid / phone / type / sendstate 绛夛級
+ * @return 瀛愪换鍔″垪琛�
+ */
+ List<ServiceSubtask> findSubtasks(ServiceSubtaskEntity query);
+
+ /**
+ * 鏇存柊瀛愪换鍔★紙鍘� {@code ServiceSubtaskMapper#updateServiceSubtask}锛屽姩鎬� SQL 鍙敼闈炵┖瀛楁锛�
+ *
+ * @param subtask 寰呮洿鏂板璞★紙蹇呴』甯� id锛�
+ * @return 鍙楀奖鍝嶈鏁�
+ */
+ int updateSubtask(ServiceSubtask subtask);
+
+ /**
+ * 鎸変换鍔� ID 鍙栦换鍔★紙鍘� {@code IServiceTaskService#selectServiceTaskByTaskid}锛夛紝
+ * 鐢佃瘽娴佺▼鐢ㄥ畠鍙栧紑鍦虹櫧锛坘cb锛夈�佺粨鏉熻锛坖sy锛変互鍙婅瘽鏈�氶厤绗︼紙textParam锛�
+ *
+ * @param taskid 浠诲姟 ID
+ * @return 浠诲姟锛涗笉瀛樺湪杩斿洖 {@code null}
+ */
+ ServiceTask getTask(Long taskid);
+
+ /**
+ * 鎸夋潯浠舵煡瀛愪换鍔℃槑缁嗭紙鍘� {@code ServiceSubtaskDetailMapper#selectServiceSubtaskDetailList}锛�
+ *
+ * @param query 鏌ヨ鏉′欢锛坰ubId / taskid / scriptid / guid / orgid 绛夛級
+ * @return 鏄庣粏鍒楄〃
+ */
+ List<ServiceSubtaskDetail> findSubtaskDetails(ServiceSubtaskDetail query);
+
+ /**
+ * 鏂板瀛愪换鍔℃槑缁嗭紙鍘� {@code ServiceSubtaskDetailMapper#insertServiceSubtaskDetail}锛�
+ *
+ * @param detail 鏄庣粏
+ * @return 鍙楀奖鍝嶈鏁�
+ */
+ int insertSubtaskDetail(ServiceSubtaskDetail detail);
+
+ /**
+ * 淇敼瀛愪换鍔℃槑缁嗭紙鍘� {@code ServiceSubtaskDetailMapper#updateServiceSubtaskDetail}锛�
+ *
+ * @param detail 鏄庣粏锛堝繀椤诲甫 id锛�
+ * @return 鍙楀奖鍝嶈鏁�
+ */
+ int updateSubtaskDetail(ServiceSubtaskDetail detail);
+
+ /**
+ * 鏂板浠诲姟璁块棶缁撴灉锛堝師 {@code IvrTaskVisitResultMapper#insertIvrTaskVisitResult}锛夛紝
+ * 鐢佃瘽娴佺▼鎶婃瘡涓�棰樼殑"闂 + 鎮h�呭師璇� + 鍛戒腑閫夐」"璁拌繘璇ヨ〃
+ *
+ * @param visitResult 璁块棶缁撴灉
+ * @return 鍙楀奖鍝嶈鏁�
+ */
+ int insertVisitResult(IvrTaskVisitResult visitResult);
+
+ /**
+ * 鏂板瀛愪换鍔″紓甯歌窡韪紙鍘� {@code IServiceSubtaskDetailTraceService#insertServiceSubtaskDetailTtrace}锛夛紝
+ * 鐢佃瘽娴佺▼鍛戒腑"寮傚父閫夐」涓斿甫璐d换绉戝"鏃跺啓涓�鏉★紝渚涢殢璁垮紓甯稿鐞嗛〉浣跨敤
+ *
+ * @param trace 寮傚父璺熻釜璁板綍
+ * @return 鍙楀奖鍝嶈鏁�
+ */
+ int insertDetailTrace(ServiceSubtaskDetailTrace trace);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/ServiceTaskMatchApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/ServiceTaskMatchApiImpl.java
new file mode 100644
index 0000000..f0c5fb7
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/ServiceTaskMatchApiImpl.java
@@ -0,0 +1,176 @@
+package com.ruoyi.task.api.contract;
+
+import com.ruoyi.common.core.service.ServiceTaskMatchApi;
+import com.ruoyi.common.core.service.dto.ServiceTaskMatchDto;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
+import com.ruoyi.task.mapper.ServiceTaskdiagMapper;
+import com.ruoyi.task.mapper.ServiceTaskoperMapper;
+
+/**
+ * 銆愯繃娓″疄鐜奥蜂复鏃躲�憑@link ServiceTaskMatchApi} 鍦� smartor 渚х殑妗ユ帴銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 闂ㄦ�ヨ瘖闅忚锛坽@code ruoyi-outpatientvisit}锛変笌鎵嬫湳闅忚锛坽@code ruoyi-othervisit}锛�
+ * 閮借"鎸夌淮搴︽煡闀挎湡闅忚浠诲姟"锛岃�岃繖浜涙煡璇㈢敤鐨�
+ * {@link ServiceTaskdeptMapper} / {@link ServiceTaskdiagMapper} / {@link ServiceTaskoperMapper}
+ * 灞炰簬 smartor 鐨勩�屾湇鍔′换鍔°�嶅煙锛岃鍥涗釜闅忚妯″潡鍏辩敤锛�<b>涓嶈兘</b>璺熶换浣曚竴鏂规惉璧般��
+ * 鎵�浠ュ湪銆岄殢璁夸换鍔″垱寤烘ā鍧椼�嶈惤鍦颁箣鍓嶏紝鍏堟妸杩欎笁涓�<b>璇�</b>鏌ヨ鍖呬竴灞傘��
+ * <p>
+ * <b>灏嗘潵鍔ㄤ綔</b>锛氫换鍔″垱寤烘ā鍧楀缓濂藉悗鎶婂畠鐨勫疄鐜版敞鍐岃繘瀹瑰櫒锛屾湰绫绘暣浣撳垹闄ゅ嵆鍙紝
+ * 涓や釜闅忚妯″潡<b>涓�琛岄兘涓嶇敤鏀�</b>銆�
+ *
+ * <h3>鈿狅笍 鏈被蹇呴』淇濇寔"绾惉杩�"</h3>
+ * 杩欓噷<b>涓嶅緱</b>鍔犲叆鍘婚噸銆佹帓搴忋�侀粯璁ゅ�艰ˉ榻愩�佺紦瀛樼瓑浠讳綍鏂伴�昏緫 鈥斺��
+ * 閫愭柟娉曚笌 {@code selectServiceTask*List} 涓�涓�瀵瑰簲銆�
+ * "鏌ヤ笉鍒版椂鎶婃爣蹇椾綅缃� 2 骞跺啓鍘熷洜"灞炰簬闅忚鍩熶笟鍔¤鍒欙紝鐣欏湪鍚勯殢璁挎ā鍧楅噷銆�
+ *
+ * <h3>閫愭柟娉曟潵婧愶紙杩佺Щ鍓� @ b25c3b51锛�</h3>
+ * <table border="1">
+ * <tr><th>鏈被鏂规硶</th><th>鍘熻皟鐢ㄤ綅缃�</th></tr>
+ * <tr><td>{@link #findLongTasksByDept(String, String)}</td>
+ * <td>闂ㄨ瘖 {@code PatMedOuthospServiceImpl#dealOutpatientInfo} L394-398
+ * 锛坽@code longtask=1} + {@code deptCode} + {@code serviceType="3"}锛�</td></tr>
+ * <tr><td>{@link #findLongTasksByDiag(String)}</td>
+ * <td>闂ㄨ瘖鍚屾柟娉� L410-413锛坽@code longtask=1} + {@code icd10code}锛�</td></tr>
+ * <tr><td>{@link #findLongTasksByOpcode(String)}</td>
+ * <td>鎵嬫湳 {@code PatMedOperationServiceImpl#dealOperationInfo} L118-121
+ * 锛坽@code longtask=1} + {@code opcode}锛�</td></tr>
+ * </table>
+ *
+ * <h3>鈿狅笍 涓轰粈涔堝弬鏁伴噷鏈� serviceType 鍗翠笉鐢辨湰绫诲啓姝�</h3>
+ * 闂ㄨ瘖鐨勭瀹ょ淮搴︽煡璇紶 {@code "3"}锛屼絾閭f槸<b>闂ㄨ瘖鐨�</b>鍙e緞锛屼笉鏄湰濂戠害鐨勫彛寰勩��
+ * 鏈被鍙礋璐f妸瀹冮�忎紶杩� {@code service_type=#{serviceType}}锛�
+ * 鍏嶅緱澶氫竴涓皟鐢ㄦ柟鏃舵妸 {@code "3"} 閿欒鍦板綋鎴愰�氱敤鍊笺��
+ *
+ * @see com.ruoyi.common.core.service.ServiceTaskMatchApi
+ */
+@Slf4j
+@Component
+public class ServiceTaskMatchApiImpl implements ServiceTaskMatchApi {
+
+ @Autowired
+ private ServiceTaskdeptMapper serviceTaskdeptMapper;
+
+ @Autowired
+ private ServiceTaskdiagMapper serviceTaskdiagMapper;
+
+ @Autowired
+ private ServiceTaskoperMapper serviceTaskoperMapper;
+
+ /**
+ * 绉戝缁村害銆�
+ * <p>
+ * 鍘熷疄鐜伴�愯瀵瑰簲锛�
+ * <pre>
+ * ServiceTaskdept serviceTaskdept = new ServiceTaskdept();
+ * serviceTaskdept.setLongtask(1L);
+ * serviceTaskdept.setDeptCode(patMedOuthosp1.getDeptcode());
+ * serviceTaskdept.setServiceType("3");
+ * List<ServiceTaskdept> list = serviceTaskdeptMapper.selectServiceTaskdeptList(serviceTaskdept);
+ * </pre>
+ */
+ @Override
+ public List<ServiceTaskMatchDto> findLongTasksByDept(String deptCode, String serviceType) {
+ ServiceTaskdept q = new ServiceTaskdept();
+ q.setLongtask(1L);
+ q.setDeptCode(deptCode);
+ q.setServiceType(serviceType);
+ List<ServiceTaskdept> rows = serviceTaskdeptMapper.selectServiceTaskdeptList(q);
+ if (CollectionUtils.isEmpty(rows)) {
+ return Collections.emptyList();
+ }
+ List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
+ for (ServiceTaskdept r : rows) {
+ ServiceTaskMatchDto d = new ServiceTaskMatchDto();
+ d.setId(r.getId());
+ d.setTaskId(r.getTaskId());
+ d.setTaskName(r.getTaskName());
+ d.setLongtask(r.getLongtask());
+ d.setServiceType(r.getServiceType());
+ d.setMatchCode(r.getDeptCode());
+ out.add(d);
+ }
+ return out;
+ }
+
+ /**
+ * 璇婃柇缁村害銆�
+ * <p>
+ * 鍘熷疄鐜伴�愯瀵瑰簲锛�
+ * <pre>
+ * ServiceTaskdiag serviceTaskdiag = new ServiceTaskdiag();
+ * serviceTaskdiag.setLongtask(1L);
+ * serviceTaskdiag.setIcd10code(patMedOuthosp1.getIcd10code());
+ * List<ServiceTaskdiag> list = serviceTaskdiagMapper.selectServiceTaskdiagList(serviceTaskdiag);
+ * </pre>
+ * 鈿狅笍 娉ㄦ剰鍘熷疄鐜�<b>娌℃湁</b>璁� {@code serviceType}锛屾湰鏂规硶淇濇寔涓�鑷达紙涓嶈ˉ锛夈��
+ */
+ @Override
+ public List<ServiceTaskMatchDto> findLongTasksByDiag(String icd10code) {
+ ServiceTaskdiag q = new ServiceTaskdiag();
+ q.setLongtask(1L);
+ q.setIcd10code(icd10code);
+ List<ServiceTaskdiag> rows = serviceTaskdiagMapper.selectServiceTaskdiagList(q);
+ if (CollectionUtils.isEmpty(rows)) {
+ return Collections.emptyList();
+ }
+ List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
+ for (ServiceTaskdiag r : rows) {
+ ServiceTaskMatchDto d = new ServiceTaskMatchDto();
+ d.setId(r.getId());
+ d.setTaskId(r.getTaskId());
+ d.setTaskName(r.getTaskName());
+ d.setLongtask(r.getLongtask());
+ d.setServiceType(r.getServiceType());
+ d.setMatchCode(r.getIcd10code());
+ out.add(d);
+ }
+ return out;
+ }
+
+ /**
+ * 鎵嬫湳缂栫爜缁村害銆�
+ * <p>
+ * 鍘熷疄鐜伴�愯瀵瑰簲锛�
+ * <pre>
+ * ServiceTaskoper serviceTaskoper = new ServiceTaskoper();
+ * serviceTaskoper.setLongtask(1L);
+ * serviceTaskoper.setOpcode(patMedOperation1.getOpcode());
+ * List<ServiceTaskoper> list = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper);
+ * </pre>
+ * 鈿狅笍 鍚屾牱<b>涓嶈</b> {@code serviceType}锛屼笌鍘熷疄鐜颁竴鑷淬��
+ */
+ @Override
+ public List<ServiceTaskMatchDto> findLongTasksByOpcode(String opcode) {
+ ServiceTaskoper q = new ServiceTaskoper();
+ q.setLongtask(1L);
+ q.setOpcode(opcode);
+ List<ServiceTaskoper> rows = serviceTaskoperMapper.selectServiceTaskoperList(q);
+ if (CollectionUtils.isEmpty(rows)) {
+ return Collections.emptyList();
+ }
+ List<ServiceTaskMatchDto> out = new ArrayList<>(rows.size());
+ for (ServiceTaskoper r : rows) {
+ ServiceTaskMatchDto d = new ServiceTaskMatchDto();
+ d.setId(r.getId());
+ d.setTaskId(r.getTaskId());
+ d.setTaskName(r.getTaskName());
+ d.setLongtask(r.getLongtask());
+ d.setServiceType(r.getServiceType());
+ d.setMatchCode(r.getOpcode());
+ out.add(d);
+ }
+ return out;
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskOptionMatchApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskOptionMatchApiImpl.java
new file mode 100644
index 0000000..adf035d
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskOptionMatchApiImpl.java
@@ -0,0 +1,42 @@
+package com.ruoyi.task.api.contract;
+
+import com.ruoyi.common.core.service.SubtaskOptionMatchApi;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import com.ruoyi.task.service.IServiceSubtaskService;
+
+/**
+ * 銆愯繃娓″疄鐜奥蜂复鏃躲�憑@link SubtaskOptionMatchApi} 鍦� smartor 渚х殑妗ユ帴銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 妯℃澘妯″潡鐨� {@code IvrLibaTargetServiceImpl} 闇�瑕併�孉I 閫夐」鍖归厤銆嶈兘鍔涳紝
+ * 鑰岃鑳藉姏鐩墠瀹炵幇鍦� smartor 鐨� {@code ServiceSubtaskServiceImpl#matchOptionIndex}
+ * 锛堝悓鏂囦欢鍐呰繕鏈� 3 澶勮嚜鏈夎皟鐢紝鎵�浠ヤ笉鑳芥暣浣撴惉璧帮級銆�
+ * 妯℃澘妯″潡涓嶈兘渚濊禆 smartor锛屼簬鏄寜鏃㈡湁鎵嬫硶鎶婃帴鍙f斁 ruoyi-common銆佸疄鐜扮暀鍦ㄨ繖閲屻��
+ *
+ * <h3>鏈被鍋氫粈涔�</h3>
+ * <b>绾浆鍙�</b>锛岄浂閫昏緫鏀瑰姩銆�
+ *
+ * <h3>鈿狅笍 娉涘瀷閫忎紶</h3>
+ * 濂戠害鐢ㄦ硾鍨� {@code <T>} 璁╄皟鐢ㄧ偣鐨勭被鍨嬩繚鎸佸師鏍凤紙浠栦滑鎷垮埌涓嬫爣鍚庤
+ * {@code options.get(i).getOptiondesc()}锛夈�傝繖閲岀洿鎺ラ�忎紶 {@code T}锛�
+ * smartor 渚ч偅涓柟娉曟寜杩愯鏃剁被鍨嬪簭鍒楀寲锛岀粨鏋滀笌杩佺Щ鍓嶉�愬瓧涓�鑷淬��
+ *
+ * @see com.ruoyi.common.core.service.SubtaskOptionMatchApi
+ */
+@Slf4j
+@Component
+public class SubtaskOptionMatchApiImpl implements SubtaskOptionMatchApi {
+
+ @Autowired
+ private IServiceSubtaskService serviceSubtaskService;
+
+ @Override
+ public <T> Integer matchOptionIndex(String url, String questionText, String voiceText,
+ java.util.List<T> options, String uuid) {
+ return serviceSubtaskService.matchOptionIndex(url, questionText, voiceText, options, uuid);
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskStatApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskStatApiImpl.java
new file mode 100644
index 0000000..1ec824c
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/SubtaskStatApiImpl.java
@@ -0,0 +1,42 @@
+package com.ruoyi.task.api.contract;
+
+import com.ruoyi.common.core.service.SubtaskStatApi;
+import com.ruoyi.common.core.service.dto.PatMedReq;
+import com.ruoyi.common.core.service.dto.PatMedRes;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+
+/**
+ * 銆愯繃娓″疄鐜奥蜂复鏃躲�憑@link SubtaskStatApi} 鍦� smartor 渚х殑妗ユ帴銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 闂ㄨ瘖闅忚缁熻锛坽@code selectPatMedOuthospCount}锛夎鎶�"闂ㄨ瘖浜烘/浜烘暟"涓�
+ * "闅忚浜烘/浜烘暟"鍚堝苟杩斿洖锛屽悗鑰呮煡鐨勬槸 {@code service_subtask}锛堝瓙浠诲姟鍩燂級銆�
+ * 闅忚妯″潡涓嶈兘渚濊禆 smartor锛屾晠鎸夋棦鏈夊璺妸杩欎竴灞�"鏌�"涓嬫矇鎴� ruoyi-common 濂戠害銆�
+ *
+ * <h3>鈿狅笍 绾惉杩�</h3>
+ * 鏈柟娉曞彧鍋�"杞彂鍒板師 Mapper"锛屼笉鍔犲伐鍙傛暟銆佷笉璁鹃粯璁ゅ�笺��
+ * 鍘熷疄鐜伴噷 {@code patMedRes.setRc(count)}锛堟妸鏈煙绠楀嚭鐨勯棬璇婁汉娆″鍥炲幓锛夊睘闂ㄨ瘖鍩燂紝
+ * 鐣欏湪璋冪敤鏂广��
+ *
+ * <h3>鍘熷疄鐜板搴�</h3>
+ * 闂ㄨ瘖 {@code PatMedOuthospServiceImpl#selectPatMedOuthospCount} L345锛�
+ * {@code serviceSubtaskMapper.selectVisitCount(patMedReq)}銆�
+ *
+ * <h3>灏嗘潵鍔ㄤ綔</h3>
+ * 銆岄殢璁夸换鍔″垱寤烘ā鍧椼�嶈惤鍦板悗鎶婂畠鐨勫疄鐜版敞鍐岃繘瀹瑰櫒锛屾湰绫绘暣浣撳垹闄ゅ嵆鍙��
+ */
+@Slf4j
+@Component
+public class SubtaskStatApiImpl implements SubtaskStatApi {
+
+ @Autowired
+ private ServiceSubtaskMapper serviceSubtaskMapper;
+
+ @Override
+ public PatMedRes countVisitForStat(PatMedReq req) {
+ return serviceSubtaskMapper.selectVisitCount(req);
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/TaskSubtaskApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/TaskSubtaskApiImpl.java
new file mode 100644
index 0000000..dc88006
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/TaskSubtaskApiImpl.java
@@ -0,0 +1,97 @@
+package com.ruoyi.task.api.contract;
+
+import com.ruoyi.task.api.TaskSubtaskApi;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.mapper.IvrTaskVisitResultMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.service.IServiceTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * {@link TaskSubtaskApi} 鐨勬ā鍧楀唴瀹炵幇锛氭妸璋冪敤鍘熸牱杞彂缁欏綊灞炴湰妯″潡鐨� Mapper / Service銆�
+ *
+ * <h3>涓轰粈涔堟斁鍦� {@code api.contract} 鍖�</h3>
+ * 涓� {@code ServiceTaskMatchApiImpl} / {@code SubtaskStatApiImpl} / {@code SubtaskOptionMatchApiImpl}
+ * 绛� ruoyi-common 濂戠害鐨勫疄鐜版斁鍦ㄤ竴璧凤紝渚夸簬"瀵瑰濂戠害 鈫� 瀹炵幇"鎴愬闃呰銆�
+ *
+ * <h3>琛屼负绾﹀畾</h3>
+ * 鏈被<b>涓嶅仛浠讳綍涓氬姟鍒ゆ柇</b>锛堜笉鏍¢獙銆佷笉琛ュ瓧娈点�佷笉鏀圭姸鎬侊級锛屽彧杞彂锛�
+ * 鐢佃瘽娴佺▼鍘熸湁鐨勪笟鍔″垎鏀竴寰嬬暀鍦� {@code ruoyi-phone}锛�
+ * 杩欐牱"鎼縼"鏄函鎼锛岃涓轰笌妯″潡鍖栧墠閫愯涓�鑷淬��
+ */
+@Slf4j
+@Component
+public class TaskSubtaskApiImpl implements TaskSubtaskApi {
+
+ @Autowired
+ private ServiceSubtaskMapper serviceSubtaskMapper;
+
+ @Autowired
+ private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
+
+ @Autowired
+ private IvrTaskVisitResultMapper serviceTaskVisitResultMapper;
+
+ @Autowired
+ private IServiceTaskService serviceTaskService;
+
+ @Autowired
+ private IServiceSubtaskDetailTraceService traceService;
+
+ @Override
+ public ServiceSubtask getSubtask(Long subId) {
+ return serviceSubtaskMapper.selectServiceSubtaskById(subId);
+ }
+
+ @Override
+ public List<ServiceSubtask> findSubtasks(ServiceSubtaskEntity query) {
+ return serviceSubtaskMapper.selectServiceSubtaskList(query);
+ }
+
+ @Override
+ public int updateSubtask(ServiceSubtask subtask) {
+ Boolean updated = serviceSubtaskMapper.updateServiceSubtask(subtask);
+ return Boolean.TRUE.equals(updated) ? 1 : 0;
+ }
+
+ @Override
+ public ServiceTask getTask(Long taskid) {
+ return serviceTaskService.selectServiceTaskByTaskid(taskid);
+ }
+
+ @Override
+ public List<ServiceSubtaskDetail> findSubtaskDetails(ServiceSubtaskDetail query) {
+ return serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(query);
+ }
+
+ @Override
+ public int insertSubtaskDetail(ServiceSubtaskDetail detail) {
+ return serviceSubtaskDetailMapper.insertServiceSubtaskDetail(detail);
+ }
+
+ @Override
+ public int updateSubtaskDetail(ServiceSubtaskDetail detail) {
+ return serviceSubtaskDetailMapper.updateServiceSubtaskDetail(detail);
+ }
+
+ @Override
+ public int insertVisitResult(IvrTaskVisitResult visitResult) {
+ return serviceTaskVisitResultMapper.insertIvrTaskVisitResult(visitResult);
+ }
+
+ @Override
+ public int insertDetailTrace(ServiceSubtaskDetailTrace trace) {
+ return traceService.insertServiceSubtaskDetailTtrace(trace);
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
new file mode 100644
index 0000000..8698917
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
@@ -0,0 +1,310 @@
+package com.ruoyi.task.api.contract;
+
+import com.ruoyi.common.core.service.VisitTaskCreateApi;
+import com.ruoyi.common.core.service.dto.VisitLongTaskDto;
+import com.ruoyi.common.core.service.dto.VisitPendingSubtaskDto;
+import com.ruoyi.common.core.service.dto.VisitSubtaskDraft;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+
+/**
+ * 銆愯繃娓″疄鐜奥蜂复鏃躲�憑@link VisitTaskCreateApi} 鍦� smartor 渚х殑妗ユ帴銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 鍑哄叆闄㈤殢璁胯"寤洪殢璁夸换鍔�"锛屼絾鎸変綘鐨勭増鍥撅紝<b>浠诲姟鍒涘缓灏嗘潵鏄嫭绔嬫ā鍧�</b>銆�
+ * 鍦ㄥ畠钀藉湴涔嬪墠锛屽厛鎶婄幇鏈夌殑鍐欏簱鑳藉姏锛坽@link ServiceSubtaskMapper} /
+ * {@code IPatMedInhospService#persistSubtask}锛夊師鏍峰寘涓�灞傦紝
+ * 璁� {@code ruoyi-inhospvisit} 鐜板湪灏卞彧渚濊禆 {@link VisitTaskCreateApi} 杩欎釜鎺ュ彛銆�
+ * <p>
+ * <b>灏嗘潵鍔ㄤ綔</b>锛氭柊妯″潡寤哄ソ鍚庯紝鎶婂畠鐨勫疄鐜版敞鍐岃繘瀹瑰櫒锛�
+ * 鏈被鏁翠綋鍒犻櫎鍗冲彲锛寋@code ruoyi-inhospvisit} <b>涓�琛岄兘涓嶇敤鏀�</b>銆�
+ *
+ * <h3>鈿狅笍 鏈被蹇呴』淇濇寔"绾惉杩�"</h3>
+ * 杩欓噷<b>涓嶅緱</b>鍔犲叆鍘婚噸銆佺姸鎬佹満銆侀粯璁ゅ�艰ˉ榻愩�佸悎骞舵洿鏂扮瓑浠讳綍鏂伴�昏緫 鈥斺��
+ * 閭d簺璇箟鍦� {@code ruoyi-inhospvisit} 鐨� {@code writeInSubTask} 閲屻��
+ * 鏈被鍙仛锛�<b>瀛楁鎼繍</b> + <b>杞彂鐜版湁 Mapper 璋冪敤</b>銆�
+ * 閫愬瓧娈靛搴斿叧绯荤敱 {@code sql/_probe/verify_inhospvisit_equivalence.py}锛圓 妗o級涓�
+ * {@code verify_inhospvisit_semantics.py}锛圔 妗e彛寰勬柇瑷�锛夋妸鍏炽��
+ *
+ * <h3>閫愭柟娉曟潵婧愶紙杩佺Щ鍓� {@code PatMedInhospServiceImpl}锛孈 b25c3b51锛�</h3>
+ * <table border="1">
+ * <tr><th>鏈被鏂规硶</th><th>鍘熷疄鐜颁綅缃�</th></tr>
+ * <tr><td>{@link #findPublishedLongTask(Long)}</td><td>L686-728锛堟煡 ServiceTask锛宻endState=2锛�</td></tr>
+ * <tr><td>{@link #insertSubtask(VisitSubtaskDraft)}</td><td>L823 / L838 / L854 / L862 / L873</td></tr>
+ * <tr><td>{@link #findPendingSubtasks(Long, Long)}</td><td>L760-764銆丩1325-1328</td></tr>
+ * <tr><td>{@link #updatePendingSubtask(VisitPendingSubtaskDto)}</td><td>L782 / L791 / L812 / L836 / L1349</td></tr>
+ * </table>
+ *
+ * @see com.ruoyi.common.core.service.VisitTaskCreateApi
+ */
+@Slf4j
+@Component
+public class VisitTaskCreateApiImpl implements VisitTaskCreateApi {
+
+ @Autowired
+ private ServiceTaskMapper serviceTaskMapper;
+
+ @Autowired
+ private ServiceSubtaskMapper serviceSubtaskMapper;
+
+
+ /**
+ * 鎸� taskid 鍙栥�屽凡鍙戝竷鐨勯暱鏈熶换鍔°�嶃��
+ * <p>
+ * 鍘熷疄鐜帮紙{@code PatMedInhospServiceImpl} L686-690锛夛細
+ * <pre>
+ * ServiceTask st = new ServiceTask();
+ * st.setTaskid(taskid);
+ * st.setSendState(2L);
+ * List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
+ * ServiceTask serviceTask = null;
+ * if (CollectionUtils.isEmpty(serviceTasks)) { ...鎸� type 鍐欎笉鍚� flag 鍚� return... }
+ * else { serviceTask = serviceTasks.get(0); }
+ * </pre>
+ * 杩欓噷鍙礋璐�"鏌� + 鍙栫涓�鏉�"锛�"鏌ヤ笉鍒版椂鎸� type 鍐欏摢涓� flag"灞炰簬闅忚鍩燂紝
+ * 鐣欏湪 {@code writeInSubTask} 閲屻��
+ */
+ @Override
+ public VisitLongTaskDto findPublishedLongTask(Long taskid) {
+ ServiceTask query = new ServiceTask();
+ query.setTaskid(taskid);
+ query.setSendState(2L);
+ List<ServiceTask> tasks = serviceTaskMapper.selectServiceTaskList(query);
+ if (CollectionUtils.isEmpty(tasks)) {
+ return null;
+ }
+ return toLongTaskDto(tasks.get(0));
+ }
+
+ @Override
+ public boolean insertSubtask(VisitSubtaskDraft draft) {
+ if (draft == null) {
+ log.warn("銆愬嚭鍏ラ櫌闅忚路杩囨浮妗ャ�慽nsertSubtask 鏀跺埌 null 鑽夌锛岃烦杩�");
+ return false;
+ }
+ ServiceSubtask entity = toSubtaskEntity(draft);
+ // 杞彂鐜版湁杩囨浮鍏ュ彛锛堢瓑浠蜂簬 serviceSubtaskMapper.insertServiceSubtask(entity) == 1锛�
+ boolean ok = serviceSubtaskMapper.insertServiceSubtask(entity) == 1;
+ // useGeneratedKeys 浼氭妸鑷涓婚敭鍥炲~鍒� entity 涓婏紝鍥炰紶缁欏嚭鍙傝崏绋匡紝
+ // 渚�"鍏� insert 鍐嶈ˉ瀛楁鍥炲啓"鐨勯偅鏉¢摼璺娇鐢紙鍘熷疄鐜颁篃鏄鐢ㄥ悓涓�涓璞★級
+ draft.setId(entity.getId());
+ return ok;
+ }
+
+ @Override
+ public List<VisitPendingSubtaskDto> findPendingSubtasks(Long patid, Long taskid) {
+ ServiceSubtaskEntity query = new ServiceSubtaskEntity();
+ query.setPatid(patid);
+ query.setSendstate(2L);
+ // 鍘熷疄鐜板湪 dealInHospInfo锛圠1325-1328锛夐噷銆愪笉璁� taskid銆戯紙鎸夋偅鑰呭叏閲忔煡锛夛紝
+ // 鍦� writeInSubTask锛圠760-764锛夐噷銆愯 taskid銆戙�傝繖閲屼繚鎸佸悓鏍风殑鍙�夎涔夈��
+ query.setTaskid(taskid);
+ List<ServiceSubtask> rows = serviceSubtaskMapper.selectServiceSubtaskList(query);
+ if (CollectionUtils.isEmpty(rows)) {
+ return Collections.emptyList();
+ }
+ List<VisitPendingSubtaskDto> out = new ArrayList<>(rows.size());
+ for (ServiceSubtask row : rows) {
+ out.add(toPendingDto(row));
+ }
+ return out;
+ }
+
+ @Override
+ public boolean updatePendingSubtask(VisitPendingSubtaskDto pending) {
+ if (pending == null || pending.getId() == null) {
+ log.warn("銆愬嚭鍏ラ櫌闅忚路杩囨浮妗ャ�憉pdatePendingSubtask 缂哄皯 id锛岃烦杩囥�俻ending={}", pending);
+ return false;
+ }
+ ServiceSubtask entity = new ServiceSubtask();
+ // 鍙槧灏�"鍘熷疄鐜颁細甯﹁繃鍘�"鐨勫瓧娈碉細
+ // 鍘熷疄鐜颁紶鐨勬槸銆愭煡璇㈠嚭鏉ョ殑瀹屾暣瀵硅薄銆�+ 鍦ㄥ唴瀛橀噷鏀圭殑閭e嚑涓瓧娈点��
+ // 鏌ヨ鍑烘潵鐨勫畬鏁村璞¢噷锛屼笌鏈柟娉曡涔夌浉鍏崇殑鍙湁 id/taskid/endtime/longSendTime/serviceType/orgid/sendstate/patid锛�
+ // 鍏朵綑瀛楁鍊间笉鍙樸�佸啓鍥炰篃绛変簬涓嶅啓锛屾晠姝ゅ鍙甫杩欎簺 + 璋冪敤鏂规敼杩囩殑 result/remark/updateBy/updateTime銆�
+ entity.setId(pending.getId());
+ entity.setTaskid(pending.getTaskid());
+ entity.setSendstate(pending.getSendstate());
+ entity.setResult(pending.getResult());
+ entity.setRemark(pending.getRemark());
+ entity.setUpdateBy(pending.getUpdateBy());
+ entity.setUpdateTime(pending.getUpdateTime());
+ entity.setIsVisitAgain(pending.getIsVisitAgain());
+ // finishtime锛氬嚭鍏ラ櫌渚т粠涓嶈缃紙鍘熸牱淇濈暀"涓嶅啓"锛夛紝闂ㄨ瘖渚т細璁剧疆
+ entity.setFinishtime(pending.getFinishtime());
+ return Boolean.TRUE.equals(serviceSubtaskMapper.updateServiceSubtask(entity));
+ }
+
+ /**
+ * 鍙栦换鍔$殑 {@code preachformDesc}銆�
+ * <p>
+ * 鍘熷疄鐜帮紙{@code PatMedInhospServiceImpl#addServiceSubtaskPreachform} L1063锛夌敤鐨勬槸
+ * {@code serviceTaskMapper.selectServiceTaskByTaskid(taskid)} 鈥斺��
+ * <b>涓嶅甫 sendState 鏉′欢</b>锛屼笖鏌ヤ笉鍒版椂杩斿洖 null銆�
+ * 杩欓噷閫愬瓧鐓ф惉锛屼笉澶嶇敤 {@link #findPublishedLongTask}锛堥偅涓甫 {@code sendState=2}锛夈��
+ */
+ @Override
+ public String findPreachformDesc(Long taskid) {
+ if (taskid == null) {
+ return null;
+ }
+ ServiceTask task = serviceTaskMapper.selectServiceTaskByTaskid(taskid);
+ return task == null ? null : task.getPreachformDesc();
+ }
+
+ /**
+ * 鏄惁瀛樺湪銆屾寚瀹氱姸鎬� + 鎸囧畾鏈嶅姟绫诲瀷銆嶇殑瀛愪换鍔°��
+ * <p>
+ * 鍘熷疄鐜帮紙闂ㄨ瘖 {@code selectPatMedOuthospList} L108-117锛夛細璋�
+ * {@code serviceSubtaskMapper.selectServiceSubtaskBySendstate(v)}锛�
+ * 鍙傛暟鏄� {@code ServiceSubtaskEntity}锛岃浜� {@code patid} / {@code sendstates} / {@code serviceType}銆�
+ * 杩欓噷閫愬瓧鐓ф惉锛屽彧鎶�"闈炵┖"鎶樺彔鎴� {@code boolean}锛堣皟鐢ㄦ柟鍘熸湰鍙敤瀹冨仛 if 鍒ゆ柇锛夈��
+ *
+ * <p>鈿狅笍 涓嶅睘浜� {@link #findPendingSubtasks(Long, Long)}锛氶偅涓浐瀹� {@code sendstate=2}
+ * 涓旀寜 taskid 杩囨护銆佹煡 {@code selectServiceSubtaskList}锛屽彛寰勪笉鍚屻�佷笉鍙簰鏇裤��
+ */
+ @Override
+ public boolean existsSubtaskWithStates(Long patid, java.util.List<Long> sendstates, String serviceType) {
+ if (patid == null) {
+ return false;
+ }
+ ServiceSubtaskEntity v = new ServiceSubtaskEntity();
+ v.setPatid(patid);
+ v.setSendstates(sendstates);
+ v.setServiceType(serviceType);
+ List<ServiceSubtask> list = serviceSubtaskMapper.selectServiceSubtaskBySendstate(v);
+ return !CollectionUtils.isEmpty(list);
+ }
+
+ // ==========================================================================
+ // 瀛楁鎼繍锛堥�愬瓧娈靛鐓э紝鍕�"椤烘墜绮剧畝"锛�
+ // ==========================================================================
+
+ private VisitLongTaskDto toLongTaskDto(ServiceTask t) {
+ VisitLongTaskDto dto = new VisitLongTaskDto();
+ dto.setTaskid(t.getTaskid());
+ dto.setTaskName(t.getTaskName());
+ dto.setType(t.getType());
+ dto.setServiceType(t.getServiceType());
+ dto.setTemplateid(t.getTemplateid());
+ dto.setTemplatename(t.getTemplatename());
+ dto.setLibtemplateid(t.getLibtemplateid());
+ dto.setSendDay(t.getSendDay());
+ dto.setPreachform(t.getPreachform());
+ dto.setPreachformDesc(t.getPreachformDesc());
+ dto.setOrgid(t.getOrgid());
+ dto.setCampusid(t.getCampusid());
+ dto.setHosType(t.getHospType());
+ dto.setUpdateBy(t.getUpdateBy());
+ dto.setCreateBy(t.getCreateBy());
+ return dto;
+ }
+
+ /**
+ * 鑽夌 鈫� 瀹炰綋銆�
+ * <p>
+ * 閫愪釜 setter 瀵圭収杩佺Щ鍓嶇殑 {@code boxedServiceSubtask} 涓� {@code writeInSubTask}锛�
+ * <b>灏戜竴涓瓧娈靛氨浼氳瀵瑰簲鍒楅潤榛樹笉鏇存柊</b>锛圶ML 閲屾槸 {@code <if test="xxx != null">}锛夛紝
+ * 鎵�浠ヨ繖閲屽埢鎰忓啓鍏紝涓嶅仛绮剧畝銆�
+ */
+ private ServiceSubtask toSubtaskEntity(VisitSubtaskDraft d) {
+ ServiceSubtask e = new ServiceSubtask();
+ e.setId(d.getId());
+ e.setTaskid(d.getTaskid());
+ e.setOrgid(d.getOrgid());
+ e.setCampusid(d.getCampusid());
+ e.setPatid(d.getPatid());
+ e.setSendname(d.getSendname());
+ e.setSfzh(d.getSfzh());
+ e.setPhone(d.getPhone());
+ e.setSex(d.getSex());
+ e.setAge(d.getAge());
+ e.setInhospid(d.getInhospid());
+ e.setNurseId(d.getNurseId());
+ e.setNurseName(d.getNurseName());
+ e.setDrcode(d.getDrcode());
+ e.setDrname(d.getDrname());
+ e.setManagementDoctor(d.getManagementDoctor());
+ e.setManagementDoctorCode(d.getManagementDoctorCode());
+ e.setDeptcode(d.getDeptcode());
+ e.setDeptname(d.getDeptname());
+ e.setLeavehospitaldistrictcode(d.getLeavehospitaldistrictcode());
+ e.setLeavehospitaldistrictname(d.getLeavehospitaldistrictname());
+ e.setLeaveicd10code(d.getLeaveicd10code());
+ e.setLeavediagname(d.getLeavediagname());
+ e.setDiagname(d.getDiagname());
+ e.setTemplateid(d.getTemplateid());
+ e.setTemplatename(d.getTemplatename());
+ e.setLibtemplateid(d.getLibtemplateid());
+ e.setStarttime(d.getStarttime());
+ e.setEndtime(d.getEndtime());
+ e.setLongSendTime(d.getLongSendTime());
+ e.setVisitTime(d.getVisitTime());
+ e.setSendstate(d.getSendstate());
+ e.setSubmit(d.getSubmit());
+ e.setServiceType(d.getServiceType());
+ e.setDiagType(d.getDiagType());
+ e.setHospType(d.getHospType());
+ e.setPreachform(d.getPreachform());
+ e.setVisitCount(d.getVisitCount());
+ e.setIsVisitAgain(d.getIsVisitAgain());
+ e.setVisitDeptCode(d.getVisitDeptCode());
+ e.setVisitDeptName(d.getVisitDeptName());
+ e.setTaskSituation(d.getTaskSituation());
+ e.setResult(d.getResult());
+ e.setRemark(d.getRemark());
+ e.setOperationItemId(d.getOperationItemId());
+ e.setCreateBy(d.getCreateBy());
+ e.setUpdateBy(d.getUpdateBy());
+
+ // ------------------------------------------------------------------
+ // 闂ㄦ�ヨ瘖闅忚涓撶敤瀛楁锛圤uthospSubtaskDraft锛夈��
+ //
+ // 鈿狅笍 鐢� instanceof 鍒嗘祦锛岃�屼笉鏄粰 VisitSubtaskDraft 鍔犲瓧娈碉細
+ // 鍔犱簡灏卞繀椤诲湪杩欓噷琛ユ槧灏勶紝鑰岃ˉ鏄犲皠浼氳銆愬嚭鍏ラ櫌閭f潯宸查獙鏀剁殑璺緞銆戝鍐欏垪
+ // 锛坕nsertServiceSubtask 鏄� 39 涓潯浠跺垪锛屾湰鏉ヤ紶 null 鐨勫垪浠庢浼氳鍐欒繘鍘伙級銆�
+ // 鍒嗘祦鍚庯細鍑哄叆闄紶鐨勬槸 VisitSubtaskDraft锛屼笅闈㈡暣鍧椾笉鎵ц 鈥斺�� 琛屼负瀹屽叏涓嶅彉銆�
+ // 瑙� OuthospSubtaskDraft 鐨勭被娉ㄩ噴銆�
+ // ------------------------------------------------------------------
+ if (d instanceof com.ruoyi.common.core.service.dto.OuthospSubtaskDraft) {
+ com.ruoyi.common.core.service.dto.OuthospSubtaskDraft o =
+ (com.ruoyi.common.core.service.dto.OuthospSubtaskDraft) d;
+ // 鍙湁鐖剁被娌℃湁鐨勫瓧娈垫墠鍦ㄨ繖閲岃ˉ鏄犲皠锛堝叾浣欏 sendname/sfzh/phone/sex/age 鐖剁被宸叉湁锛�
+ e.setHospno(o.getHospno());
+ e.setAdmindate(o.getAdmitdate());
+ e.setFinishtime(o.getFinishtime());
+ // 鈿狅笍 鍘熷疄鐜扮‖缂栫爜 "1"锛堜笉璇� serviceTask.getHospType()锛夛紝姝ゅ淇濇寔涓�鑷�
+ e.setHospType(o.getHospType());
+ }
+ return e;
+ }
+
+ private VisitPendingSubtaskDto toPendingDto(ServiceSubtask s) {
+ VisitPendingSubtaskDto dto = new VisitPendingSubtaskDto();
+ dto.setId(s.getId());
+ dto.setTaskid(s.getTaskid());
+ dto.setEndtime(s.getEndtime());
+ dto.setLongSendTime(s.getLongSendTime());
+ dto.setServiceType(s.getServiceType());
+ dto.setOrgid(s.getOrgid());
+ dto.setSendstate(s.getSendstate());
+ // finishtime锛氶棬璇婁晶鍋滄棫瀛愪换鍔℃椂瑕佽鍒板畠鍚楋紵鍘熷疄鐜版槸"鍦ㄦ煡璇㈠嚭鏉ョ殑瀹屾暣瀵硅薄涓婃敼"锛�
+ // 鑰屽畠瑕佹敼鐨勫氨鏄� finishtime 鏈韩锛堣涓� new Date()锛夛紝鎵�浠ヨ繖閲屽甫涓婃煡璇㈠�煎彲淇濊瘉
+ // "鏈敼鍔ㄧ殑瀛楁鍥炲啓绛変簬涓嶅啓"杩欎竴璇箟鎴愮珛銆�
+ dto.setFinishtime(s.getFinishtime());
+ // result / remark / updateBy / updateTime 鍒绘剰銆愪笉甯﹁繃鏉ャ�戯細
+ // 瀹冧滑鍘熸湰灏辨槸 null锛堟煡璇㈢粨鏋滀负 sendstate=2 鐨勫緟鎵ц璁板綍锛夛紝
+ // 鐢辫皟鐢ㄦ柟鍦�"绉诲嚭"鏃舵寜鍘熷疄鐜拌缃��
+ return dto;
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskArchivePort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskArchivePort.java
new file mode 100644
index 0000000..4ceda5b
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskArchivePort.java
@@ -0,0 +1,60 @@
+package com.ruoyi.task.api.spi;
+
+import com.ruoyi.common.core.domain.entity.PatArchive;
+
+import java.util.List;
+
+/**
+ * 鎮h�呮。妗堣鍙栬兘鍔� 鈥斺�� <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>涓轰粈涔堢鍙e0鏄庡湪 ruoyi-task銆佸疄鐜板湪 smartor</h3>
+ * 浠诲姟渚ц璇� {@code pat_archive}锛屼絾璇ヨ〃涓嶅綊 ruoyi-task
+ * 锛堟偅鑰呮。妗堟槸鐙珛鍩燂紝鏈鍙妸 {@link PatArchive} 杩欎釜<b>绫诲瀷</b>涓婃彁鍒颁簡 ruoyi-common锛夈��
+ * 鎸�"鍚勬ā鍧楃嫭鍗犺嚜宸辩殑鏁版嵁璁块棶"鍘熷垯锛宺uoyi-task 涓嶅緱鑷啓閽堝 {@code pat_archive} 鐨� SQL銆�
+ * <p>
+ * 鍙堝洜涓� ruoyi-task <b>涓嶈兘渚濊禆 smartor</b>锛堜細褰㈡垚
+ * {@code smartor -> ruoyi-task -> smartor} 纭惊鐜級锛屾墍浠ユ柟鍚戝繀椤诲弽杩囨潵锛�
+ * <b>鎺ュ彛澹版槑鍦� ruoyi-task銆佸疄鐜版斁鍦� smartor</b>锛岀敱 Spring 鍦ㄨ繍琛屾湡娉ㄥ叆銆�
+ * 缂栬瘧鏈� ruoyi-task 鍙湅鍒版帴鍙o紝smartor 渚濊禆 ruoyi-task 鍥犳鍙互 implements 瀹� 鈥斺�� 鏃犵幆銆�
+ *
+ * <h3>涓轰粈涔堜笉闇�瑕佹柊 DTO</h3>
+ * {@link PatArchive} 宸蹭笂鎻愬埌 {@code com.ruoyi.common.core.domain.entity}锛�
+ * 鍙屾柟閮藉彲瑙侊紝鍥犳绔彛鐩存帴鐢ㄥ疄浣撴湰韬紝<b>鏃犻渶閫愬瓧娈垫槧灏�</b>銆�
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ * 瀹炵幇鏂瑰彧鍋氳浆鍙戞垨绛変环鐨勭被鍨嬭浆鎹紝涓嶅緱鍔犲叆涓氬姟鍒ゆ柇銆�
+ *
+ * @see com.ruoyi.common.core.domain.entity.PatArchive
+ */
+public interface TaskArchivePort {
+
+ /**
+ * 鎸夋偅鑰呮。妗� id 鏌ユ。妗堬紙鍘� {@code PatArchiveMapper#selectPatArchiveByPatid}锛�
+ * 浜﹀嵆 {@code IPatArchiveService#selectPatArchiveByPatid} 鈥斺�� 鍚庤�呮槸鍓嶈�呯殑绾鎵橈級銆�
+ *
+ * @param patid 妗f id
+ * @return 妗f锛涗笉瀛樺湪杩斿洖 {@code null}
+ */
+ PatArchive findByPatid(Long patid);
+
+ /**
+ * 鎸夋潯浠舵煡妗f鍒楄〃锛堝師 {@code PatArchiveMapper#selectPatArchiveList}锛夈��
+ *
+ * @param query 鏌ヨ鏉′欢锛堥潪 null 瀛楁鍙備笌杩囨护锛�
+ * @return 妗f闆嗗悎
+ */
+ List<PatArchive> findList(PatArchive query);
+
+ /**
+ * 鎸� id 鏌ャ�屽鍏ユ。妗堛�嶅苟杞垚妗f瑙嗗浘锛堝師
+ * {@code DtoConversionUtils.sourceToTarget(patArchiveImportMapper.selectPatArchiveImportById(patid), PatArchive.class)}锛夈��
+ * <p>
+ * 鈿狅笍 鍘熷疄鐜版嬁鍒扮殑 {@code PatArchiveImport} <b>浠庝笉閫愬瓧娈佃闂�</b>锛岃�屾槸鏁翠綋杞垚
+ * {@link PatArchive}锛屾墍浠ヨ繖閲屾妸"鍙� + 杞�"鍚堟垚涓�涓柟娉曪紝璋冪敤鏂规嬁鍒扮殑浠嶆槸 {@link PatArchive}锛�
+ * <b>琛屼负瀹屽叏涓嶅彉</b>锛屼笖鏃犻渶鎶� {@code PatArchiveImport} 鏆撮湶鍒� ruoyi-task銆�
+ *
+ * @param patid 妗f id
+ * @return 杞崲鍚庣殑妗f锛涗笉瀛樺湪杩斿洖 {@code null}
+ */
+ PatArchive findImportedByPatid(Long patid);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskFtpPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskFtpPort.java
new file mode 100644
index 0000000..b571975
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskFtpPort.java
@@ -0,0 +1,28 @@
+package com.ruoyi.task.api.spi;
+
+/**
+ * FTP 涓嬭浇鑳藉姏 鈥斺�� <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>鐢ㄩ��</h3>
+ * 瀛愪换鍔$粺璁¢噷鏈変竴娈�"鎶婂綋澶╃殑褰曢煶鐩綍浠� FTP 鎷夊埌鏈湴"鐨勫姩浣�
+ * 锛堝師 {@code ServiceSubtaskServiceImpl} L2859锛�
+ * {@code ftpService.downloadFolder("/" + LocalDate.now(), profile + "/upload/vadio/voice/" + LocalDate.now())}锛夈��
+ * {@code FtpService} 鏄� smartor 鐨勯�氱敤宸ュ叿锛屼笉灞炰换鍔″煙锛屽洜姝ょ粡鏈鍙e彇鐢ㄣ��
+ *
+ * <h3>涓轰粈涔堢鍙e湪 ruoyi-task 鑰屼笉鍦� ruoyi-common</h3>
+ * 鏈鍙e彧琚� ruoyi-task 浣跨敤銆佷笖鍙傛暟鍏ㄦ槸鍩烘湰绫诲瀷锛屾病鏈�"澶氭柟鍏变韩鐨勫绾︾被鍨�"锛�
+ * 鏀惧湪 ruoyi-task 鐨� {@code api.spi} 涓嬪嵆鍙紝涓嶅繀姹℃煋 ruoyi-common銆�
+ * 鏂瑰悜浠嶆槸銆屾帴鍙e湪 ruoyi-task銆佸疄鐜板湪 smartor銆嶏紝缂栬瘧鏈熸棤鐜��
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ */
+public interface TaskFtpPort {
+
+ /**
+ * 閫掑綊涓嬭浇杩滅鐩綍鍒版湰鍦帮紙鍘� {@code FtpService#downloadFolder}锛夈��
+ *
+ * @param remoteDir 杩滅鐩綍
+ * @param localDir 鏈湴鐩綍
+ */
+ void downloadFolder(String remoteDir, String localDir);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskPreachformPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskPreachformPort.java
new file mode 100644
index 0000000..0fe42dc
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskPreachformPort.java
@@ -0,0 +1,79 @@
+package com.ruoyi.task.api.spi;
+
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+
+import java.util.List;
+
+/**
+ * 瀛愪换鍔°�屾墽琛屾柟寮忔槑缁嗐�嶏紙{@code service_subtask_preachform}锛夎鍐欒兘鍔� 鈥斺��
+ * <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 浠诲姟渚х殑 4 涓被锛坽@code ServiceSubtaskServiceImpl} / {@code ServiceTaskServiceImpl} /
+ * {@code ServiceTaskScheduleServiceImpl} / {@code ScheduleSubtaskBuilder}锛夐兘瑕佽鍐欒繖寮犺〃锛�
+ * 浣嗚琛ㄧ殑<b>褰掑睘妯″潡鏄� {@code ruoyi-inhospvisit}</b>锛堝凡鏀跺彛鍒� ruoyi-common 鐨�
+ * {@code PreachformApi}锛夛紝ruoyi-task 涓嶈兘渚濊禆 smartor銆佷篃涓嶈鑷啓璇ヨ〃 SQL銆�
+ *
+ * <h3>鈿狅笍 杩欐槸銆愯繃娓°�戠鍙o紝褰㈡�佸埢鎰忎笌鏃� Mapper 涓�鑷�</h3>
+ * 鏈鍙�<b>閫愭柟娉曢暅鍍�</b> smartor 鏃㈡湁鐨勶紙宸� {@code @Deprecated} 鐨勶級
+ * {@code ServiceSubtaskPreachformMapper}锛氬悓鍚嶆柟娉曘�佸悓鍚嶅弬鏁般�佸悓杩斿洖绫诲瀷
+ * 锛坽@code insert/update} 浠嶈繑鍥� {@code int}锛夈��
+ * 杩欐牱閭� 4 涓被鎼繘 ruoyi-task 鏃�<b>鍙渶鎶婃敞鍏ョ殑瀛楁绫诲瀷鎹㈡垚鏈鍙o紝璋冪敤鐐逛竴琛岄兘涓嶇敤鏀�</b>锛�
+ * 鎶�"鏀� 25 澶勮皟鐢ㄧ偣 + 閫愬鎹㈢被鍨�"鐨勯闄╅檷鍒版渶浣庛��
+ * <p>
+ * 涔嬫墍浠ヤ笉鐩存帴璁╁畠浠敞鍏� {@code PreachformApi}锛氶偅闇�瑕佹妸
+ * {@code ServiceSubtaskPreachform} 鎹㈡垚 {@code VisitPreachformRow}銆�
+ * 骞舵妸 {@code int} 杩斿洖鍊兼敼鎴� {@code boolean}锛屽叡绾� 25 澶勮皟鐢ㄧ偣锛�
+ * 灞炵嫭绔嬬殑鏀跺彛鍔ㄤ綔锛堣 {@code doc/璺ㄦā鍧楁暟鎹闂師鍒欎笌鏀跺彛鏂规.md}锛夛紝涓嶅湪鏈鑼冨洿鍐呫��
+ *
+ * <h3>灏嗘潵鍔ㄤ綔</h3>
+ * 寰� preachform 鍏ㄩ潰鏀跺彛鏃讹紝鎶婃湰绔彛涓� smartor 鐨� Bridge 涓�骞跺垹闄わ紝
+ * 4 涓被鏀逛负鐩存帴娉ㄥ叆 {@code PreachformApi}銆�
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ * 瀹炵幇鏂瑰彧杞彂鍒版棦鏈� Mapper/Bridge锛�<b>涓嶅緱</b>鍔犲叆涓氬姟鍒ゆ柇鎴栧瓧娈佃ˉ榻愩��
+ *
+ * @see com.ruoyi.common.core.service.PreachformApi 璇ヨ〃鐪熸鐨勫綊灞炲绾�
+ */
+public interface TaskPreachformPort {
+
+ /**
+ * 鎸変富閿煡锛堝師 {@code selectServiceSubtaskPreachformById}锛夈��
+ */
+ ServiceSubtaskPreachform selectServiceSubtaskPreachformById(Long id);
+
+ /**
+ * 鎸夋潯浠舵煡鍒楄〃锛堝師 {@code selectServiceSubtaskPreachformList}锛夈��
+ */
+ List<ServiceSubtaskPreachform> selectServiceSubtaskPreachformList(ServiceSubtaskPreachform query);
+
+ /**
+ * 鏂板锛堝師 {@code insertServiceSubtaskPreachform}锛夈��
+ *
+ * @return 鍙楀奖鍝嶈鏁帮紙涓庡師瀹炵幇涓�鑷达紝浠嶄负 {@code int}锛�
+ */
+ int insertServiceSubtaskPreachform(ServiceSubtaskPreachform row);
+
+ /**
+ * 鎸変富閿洿鏂帮紙鍘� {@code updateServiceSubtaskPreachform}锛夈��
+ */
+ int updateServiceSubtaskPreachform(ServiceSubtaskPreachform row);
+
+ /**
+ * 鎸夋潯浠舵洿鏂帮紙鍘� {@code updateSSPByCondition}锛夈��
+ */
+ int updateSSPByCondition(ServiceSubtaskPreachform row);
+
+ /**
+ * 鎸� {@code subid} 鍒犻櫎璇ュ瓙浠诲姟鐨勬墍鏈夊彂閫佹柟寮忥紙鍘�
+ * {@code deleteServiceSubtaskPreachformBySubid}锛屽疄闄呮槸杞垹锛夈��
+ */
+ int deleteServiceSubtaskPreachformBySubid(Long subId);
+
+ /**
+ * 鎸� taskid/orgid 鏌ワ紙鍘� {@code selectBySubtask}锛涒殸锔� 鏂规硶鍚嶆槗璇В锛�
+ * 瀹冧笉鎸� subtask 涓婚敭鏌ワ紝瑙� {@code PreachformApi#findByTaskidAndOrgid}锛夈��
+ */
+ List<ServiceSubtaskPreachform> selectBySubtask(ServiceSubtask subtask);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSubtaskRecordPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSubtaskRecordPort.java
new file mode 100644
index 0000000..355fd68
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSubtaskRecordPort.java
@@ -0,0 +1,47 @@
+package com.ruoyi.task.api.spi;
+
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 瀛愪换鍔°�屽彂閫佽褰曘�嶏紙{@code service_subtask_record}锛夎鍙栬兘鍔� 鈥斺��
+ * <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * {@code service_subtask_record} 杩欏紶琛�<b>涓嶅湪鏈妯″潡鍖栬寖鍥村唴</b>锛堝畠鐨� Mapper/XML/Service
+ * 浠嶇暀鍦� smartor锛夛紝浣嗗畠鐨�<b>瀹炰綋绫诲瀷</b> {@link ServiceSubtaskRecord} 宸查殢
+ * {@code ServiceSubtask} 鐨勫瓧娈� `List<ServiceSubtaskRecord> serviceSubtaskRecordList`
+ * 涓�璧锋惉杩涗簡 ruoyi-task銆�
+ * <p>
+ * 浠诲姟渚э紙鍘� {@code ServiceSubtaskController} 鐨� 2 澶勮皟鐢級瑕佽杩欏紶琛紝
+ * 鏁呯粡鏈鍙e彇鐢� 鈥斺�� 鏂瑰悜浠嶆槸銆屾帴鍙e湪 ruoyi-task銆佸疄鐜板湪 smartor銆嶏紝缂栬瘧鏈熸棤鐜��
+ *
+ * <h3>鈿狅笍 杩欐槸銆愯繃娓°�戠鍙o紝褰㈡�佸埢鎰忎笌鏃� Service 涓�鑷�</h3>
+ * 閫愭柟娉曢暅鍍� smartor 鐨� {@code IServiceSubtaskRecordService} 涓换鍔′晶鐪熸鐢ㄥ埌鐨勯偅涓や釜鏂规硶
+ * 锛堝悓鍚嶃�佸悓鍙傛暟銆佸悓杩斿洖绫诲瀷锛夛紝浣� Controller 鎼繘 ruoyi-task 鏃�
+ * <b>鍙渶鎹㈡敞鍏ュ瓧娈电被鍨嬶紝璋冪敤鐐逛竴琛岄兘涓嶇敤鏀�</b>銆�
+ *
+ * <h3>灏嗘潵鍔ㄤ綔</h3>
+ * 鑻ュ皢鏉� {@code service_subtask_record} 涔熺撼鍏ヤ换鍔℃ā鍧楋紝鏈鍙e嵆鍙垹闄わ紝
+ * 鏀逛负妯″潡鍐呯洿鎺ヨ皟鐢ㄣ��
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ */
+public interface TaskSubtaskRecordPort {
+
+ /**
+ * 鎸夋潯浠舵煡鍙戦�佽褰曞垪琛紙鍘� {@code IServiceSubtaskRecordService#selectServiceSubtaskRecordList}锛夈��
+ */
+ List<ServiceSubtaskRecord> selectServiceSubtaskRecordList(ServiceSubtaskRecord query);
+
+ /**
+ * 鎸夊瓙浠诲姟 id 闆嗗悎鎵归噺鏌ュ彂閫佽褰曪紝鎸� subid 鍒嗙粍
+ * 锛堝師 {@code IServiceSubtaskRecordService#selectRecordMapBySubtaskIds}锛夈��
+ *
+ * @param subtaskIds 瀛愪换鍔� id 闆嗗悎
+ * @return subid -> 璇ュ瓙浠诲姟鐨勮褰曞垪琛�
+ */
+ Map<Long, List<ServiceSubtaskRecord>> selectRecordMapBySubtaskIds(List<Long> subtaskIds);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysConfigPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysConfigPort.java
new file mode 100644
index 0000000..f9c03d1
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysConfigPort.java
@@ -0,0 +1,63 @@
+package com.ruoyi.task.api.spi;
+
+/**
+ * 鍙傛暟閰嶇疆璇诲彇鑳藉姏 鈥斺�� <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>鐢ㄩ��</h3>
+ * 瀛愪换鍔$粺璁¢噷瑕佽 {@code sys_config} 鐨� {@code wj.sms.template} 鍙栧��
+ * 锛堝師 {@code ServiceSubtaskServiceImpl} L5141-5146锛夛細
+ * <pre>
+ * SysConfig sysConfig = new SysConfig();
+ * sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
+ * if (!Objects.isNull(sysConfig)) { String smsContemt = sysConfig.getConfigValue(); ... }
+ * </pre>
+ * {@code sys_config} 灞炵郴缁熷煙銆俽uoyi-task 鑷繁鐨勬ā鍧楀紑鍏宠鍙傛暟璧�
+ * {@code ruoyi-common} 鐨� {@code IConfigService}锛涗絾杩欓噷鍘熸湰璧扮殑鏄�
+ * {@code SysConfigMapper#checkConfigKeyUnique}锛堣繑鍥炴暣琛岋級锛�
+ * 涓斿彧鐢ㄥ埌 {@code configValue} 涓�涓瓧娈碉紝鏁呮敹鎴愪竴涓�<b>鍙繑鍥炲��</b>鐨勭鍙c��
+ *
+ * <h3>鈿狅笍 鍏充簬"琛屽瓨鍦ㄤ絾鍊间负 null"鐨勮竟鐣�</h3>
+ * 鍘熷垽瀹氭槸"琛屽瓨鍦�"锛坽@code !isNull(sysConfig)}锛夛紝鏈鍙e垽瀹氭槸"鍊奸潪 null"銆�
+ * 浜岃�呭彧鍦� {@code sys_config} 瀛樺湪涓�琛屼笖 {@code config_value IS NULL} 鏃朵笉鍚� 鈥斺��
+ * 鑰� RuoYi 鐨� {@code sys_config.config_value} 鏄� {@code varchar(500) NOT NULL DEFAULT ''}锛�
+ * <b>璇ユ儏褰笉鍙兘鍑虹幇</b>锛屽洜姝よ涓虹瓑浠枫��
+ * 锛堝疄鐜版柟鎸夊師鏍疯皟 {@code checkConfigKeyUnique} 鍚庡彇 {@code getConfigValue()}銆傦級
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ */
+public interface TaskSysConfigPort {
+
+ /**
+ * 鎸夊弬鏁伴敭鍚嶅彇鍙傛暟鍊硷紙鍘� {@code SysConfigMapper#checkConfigKeyUnique} + {@code getConfigValue()}锛夈��
+ *
+ * @param configKey 鍙傛暟閿悕
+ * @return 鍙傛暟鍊硷紱璇ラ敭涓嶅瓨鍦ㄦ椂杩斿洖 {@code null}
+ */
+ String findConfigValueByKey(String configKey);
+
+ /**
+ * 鎸夊弬鏁伴敭鍚嶅彇鍙傛暟鍊硷紙鍘� {@code ISysConfigService#selectConfigByKey(String)}锛夈��
+ * <p>
+ * 鈿狅笍 涓� {@link #findConfigValueByKey} <b>涓嶆槸鍚屼竴涓笢瑗�</b>锛屼笉瑕佸悎骞讹細
+ * 鍓嶈�呰蛋鐨勬槸 {@code SysConfigMapper#checkConfigKeyUnique}锛堟寜 key 鏌ユ暣琛岋級锛�
+ * 鏈柟娉曡蛋鐨勬槸 {@code ISysConfigService#selectConfigByKey}锛堝甫缂撳瓨銆佷笖鏀寔 orgid 缁村害锛夈��
+ * 涓よ�� SQL 涓嶅悓锛屽悎骞朵細鏀瑰彉鍙栧�兼潵婧� 鈥斺�� 鏁呭苟鍒椾繚鐣欍�佸悇鑷搴斿師璋冪敤銆�
+ *
+ * @param configKey 鍙傛暟閿悕
+ * @return 鍙傛暟鍊硷紱涓嶅瓨鍦ㄨ繑鍥� {@code StringUtils.EMPTY}锛堜笌鍘熷疄鐜颁竴鑷达紝涓嶆槸 null锛�
+ */
+ String selectConfigValue(String configKey);
+
+ /**
+ * 鎸夊弬鏁伴敭鍚� + 鏈烘瀯 id 鍙栧弬鏁板�硷紙鍘� {@code ISysConfigService#selectConfigByKey(String, String)}锛夈��
+ * <p>
+ * 鈿狅笍 璇� 2 鍙傞噸杞�<b>鍙湪 ruoyi-system 鐨� {@code ISysConfigService} 涓�</b>锛�
+ * 涓嶅湪 ruoyi-common 鐨� {@code IConfigService} 涓� 鈥斺�� 杩欎篃鏄负浠�涔堜笉鑳界畝鍗曞湴鎶�
+ * 璋冪敤鏂瑰瓧娈电被鍨嬫崲鎴� {@code IConfigService} 鏉ョ渷鎺変緷璧栥��
+ *
+ * @param configKey 鍙傛暟閿悕
+ * @param orgid 鏈烘瀯 id
+ * @return 鍙傛暟鍊硷紱涓嶅瓨鍦ㄨ繑鍥炵┖涓�
+ */
+ String selectConfigValue(String configKey, String orgid);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysDeptPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysDeptPort.java
new file mode 100644
index 0000000..8068ab9
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysDeptPort.java
@@ -0,0 +1,31 @@
+package com.ruoyi.task.api.spi;
+
+import com.ruoyi.common.core.domain.entity.SysDept;
+
+/**
+ * 绉戝鏌ヨ鑳藉姏 鈥斺�� <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>鐢ㄩ��</h3>
+ * 浠诲姟鍒涘缓/瀛愪换鍔$粍瑁呮椂鎸夌瀹ょ紪鐮佸弽鏌ョ瀹や俊鎭�
+ * 锛堝師 {@code SysDept2Mapper#selectDeptByCode(deptCode, orgid)}锛�
+ * 瑙� {@code ServiceSubtaskServiceImpl} L1004 / L5488锛夈��
+ * {@code sys_dept} 灞炵郴缁熷煙锛宺uoyi-task 涓嶅緱鑷啓 SQL锛屼篃涓嶄緷璧� ruoyi-system锛�
+ * 鍥犳缁忔湰绔彛鍙栫敤銆�
+ *
+ * <h3>涓轰粈涔堜笉闇�瑕佹柊 DTO</h3>
+ * 杩斿洖绫诲瀷 {@link SysDept} 鏈韩灏卞湪 {@code ruoyi-common}锛屽弻鏂瑰彲瑙侊紝鐩存帴鐢ㄥ疄浣撱��
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ * 鍙浆鍙戝埌 {@code SysDept2Mapper}锛屼笉寰楀姞鍏ラ粯璁ゅ�艰ˉ榻愭垨鍏滃簳鏌ヨ绛夋柊閫昏緫銆�
+ */
+public interface TaskSysDeptPort {
+
+ /**
+ * 鎸夌瀹ょ紪鐮佹煡绉戝锛堝師 {@code SysDept2Mapper#selectDeptByCode}锛夈��
+ *
+ * @param deptCode 绉戝缂栫爜
+ * @param orgid 鏈烘瀯 id锛堝彲涓� {@code null}锛�
+ * @return 绉戝锛涗笉瀛樺湪杩斿洖 {@code null}
+ */
+ SysDept selectDeptByCode(String deptCode, String orgid);
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysUserDeptPort.java b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysUserDeptPort.java
new file mode 100644
index 0000000..04bacfc
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/api/spi/TaskSysUserDeptPort.java
@@ -0,0 +1,30 @@
+package com.ruoyi.task.api.spi;
+
+import com.ruoyi.common.core.domain.entity.SysUserDept;
+
+import java.util.List;
+
+/**
+ * 銆岀敤鎴�-绉戝/鐥呭尯銆嶅叧绯绘煡璇㈣兘鍔� 鈥斺�� <b>ruoyi-task 鐨勫澶� SPI锛岀敱 smartor 渚у疄鐜�</b>銆�
+ *
+ * <h3>鐢ㄩ��</h3>
+ * 瀛愪换鍔$粺璁★紙鍘� {@code ServiceSubtaskController} L610 / L625 / L903 / L909锛夎鎸夊綋鍓嶇櫥褰曚汉
+ * 鏌ュ嚭鍏剁瀹ゃ�佺梾鍖哄垪琛紝鐢ㄤ簬"鎸夌瀹�/鐥呭尯鍒嗙粍"鐨勭粺璁¤繃婊ゃ��
+ * {@code sys_user_dept} 灞炵郴缁熷煙锛宺uoyi-task <b>涓嶅緱渚濊禆 ruoyi-system</b>锛屾晠缁忔湰绔彛鍙栫敤銆�
+ *
+ * <h3>涓轰粈涔堜笉闇�瑕佹柊 DTO</h3>
+ * 鍙傛暟涓庤繑鍥炵被鍨� {@link SysUserDept} 鏈氨鍦� {@code ruoyi-common}锛屽弻鏂瑰彲瑙併��
+ *
+ * <h3>鈿狅笍 瀹炵幇蹇呴』淇濇寔"绾浆鍙�"</h3>
+ * 瀹炵幇鏂瑰彧杞彂鍒� {@code ISysUserDeptService#selectSysUserDeptList}锛屼笉鍔犱换浣曞厹搴�/榛樿鍊奸�昏緫銆�
+ */
+public interface TaskSysUserDeptPort {
+
+ /**
+ * 鎸夋潯浠舵煡鐢ㄦ埛-绉戝鍏崇郴锛堝師 {@code ISysUserDeptService#selectSysUserDeptList}锛夈��
+ *
+ * @param query 鏌ヨ鏉′欢锛堥潪 null 瀛楁鍙備笌杩囨护锛�
+ * @return 鍏崇郴鍒楄〃
+ */
+ List<SysUserDept> selectSysUserDeptList(SysUserDept query);
+}
diff --git a/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java b/ruoyi-task/src/main/java/com/ruoyi/task/common/ScheduleSubtaskBuilder.java
similarity index 93%
rename from smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/common/ScheduleSubtaskBuilder.java
index e281e01..ee074c0 100644
--- a/smartor/src/main/java/com/smartor/common/ScheduleSubtaskBuilder.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/common/ScheduleSubtaskBuilder.java
@@ -1,11 +1,8 @@
-package com.smartor.common;
+package com.ruoyi.task.common;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.*;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.mapper.ServiceSubtaskPreachformMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
@@ -16,6 +13,14 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 浠诲姟缁勶紙appltype=5锛塻ubtask 鐢熸垚鍣�
@@ -37,7 +42,7 @@
private ServiceSubtaskMapper serviceSubtaskMapper;
@Autowired
- private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+ private TaskPreachformPort taskPreachformPort;
/**
* 涓哄崟涓偅鑰呮淳鐢� subtask锛坅ppltype=5锛夆�斺�� 瑙h�﹀叆鍙o紙鑷姩绾冲叆 & 鎵嬪姩鍕鹃�夌粺涓�璧拌繖閲岋級銆�
@@ -174,7 +179,7 @@
pf.setSendstate("1");
pf.setOrgid(serviceTask.getOrgid());
pf.setCreateTime(new Date());
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(pf);
+ taskPreachformPort.insertServiceSubtaskPreachform(pf);
}
}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskAvailabilityInterceptor.java b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskAvailabilityInterceptor.java
new file mode 100644
index 0000000..3856270
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskAvailabilityInterceptor.java
@@ -0,0 +1,59 @@
+package com.ruoyi.task.config;
+
+import com.ruoyi.common.exception.ServiceException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 浠诲姟妯″潡寮�鍏虫嫤鎴櫒銆�
+ * <p>
+ * <b>浣滅敤</b>锛氬綋寮�鍏冲叧闂紙{@code sys_config} 涓� {@code task.enabled=false}锛夋椂锛�
+ * 鍛戒腑浠诲姟绔偣鐨勮姹備細琚珛鍗虫嫤涓嬪苟鎶涘嚭 {@link ServiceException}锛�
+ * 鐢� RuoYi 鐨勫叏灞�寮傚父澶勭悊鍣ㄨ繑鍥�<b>鏄庣‘鐨勪笟鍔¢敊璇彁绀�</b>锛堣�屼笉鏄� 404 鎴栭潤榛樿繑鍥炵┖鏁版嵁锛夈��
+ * <p>
+ * 寮�鍏冲�肩敱 {@link TaskSwitch} 鍦ㄨ繍琛屾椂璇诲彇锛坽@code sys_config}锛�10 绉掕繘绋嬪唴缂撳瓨锛夛紝
+ * 鍥犳鏀瑰畬鍙傛暟璁剧疆<b>涓嶉渶瑕侀噸鍚�</b>锛屾渶澶� 10 绉掑嵆鐢熸晥銆�
+ * <p>
+ * <b>涓轰粈涔堜笉鐢� {@code @ConditionalOnProperty} 璁� Controller 鐩存帴涓嶆敞鍐�</b>锛�
+ * <ul>
+ * <li>閭f牱璋冪敤鏂瑰彧浼氭嬁鍒� HTTP 404 鈥斺�� 铏界劧涔熸槸澶辫触锛屼絾涓嶆槸"鏄庣‘閿欒"锛�
+ * 鍓嶇/澶栭摼鏃犳硶鍖哄垎"妯″潡琚叧闂�"鍜�"鍦板潃鍐欓敊浜�"锛�</li>
+ * <li>鑰屼笖 {@code @ConditionalOnProperty} 鍙湪<b>鍚姩鏃�</b>姹傚�间竴娆★紝
+ * 鍋氫笉鍒�"鏀瑰畬鍙傛暟閰嶇疆灏辩敓鏁�"锛屼笌鍙傛暟琛ㄥ紑鍏崇殑璇夋眰鍐茬獊銆�</li>
+ * </ul>
+ * <p>
+ * <b>涓轰粈涔堜笉浼氬奖鍝嶅叾瀹冧笟鍔′笌鍚姩</b>锛氭湰鎷︽埅鍣ㄥ彧鐧昏鍦ㄤ换鍔℃ā鍧楃殑
+ * 2 涓� URL 鍓嶇紑涓婏紙瑙� {@link TaskWebConfig}锛夛紝涓嶄細纰板埌闅忚/闂嵎/鍏跺畠鎺ュ彛銆�
+ */
+@Slf4j
+@Component
+public class TaskAvailabilityInterceptor implements HandlerInterceptor {
+
+ /**
+ * 妯″潡琚叧闂椂杩斿洖缁欒皟鐢ㄦ柟鐨勯敊璇彁绀猴紙鍓嶇鍙洿鎺ュ睍绀猴級
+ */
+ public static final String DISABLED_MESSAGE =
+ "浠诲姟鍔熻兘鏈惎鐢紙鍙傛暟閰嶇疆 task.enabled=false锛夛紝璇ユ帴鍙d笉鍙敤";
+
+ private final TaskSwitch taskSwitch;
+
+ public TaskAvailabilityInterceptor(TaskSwitch taskSwitch) {
+ this.taskSwitch = taskSwitch;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ if (!taskSwitch.isEnabled()) {
+ // request 鍏佽涓� null锛堝崟鍏冩祴璇曠洿鎺ヨ皟 preHandle 鏃朵笉鏋勯�犺姹傚璞★級
+ String method = request == null ? "-" : request.getMethod();
+ String uri = request == null ? "-" : request.getRequestURI();
+ log.warn("銆愪换鍔°�戞ā鍧楀凡鍏抽棴锛堝弬鏁伴厤缃� task.enabled=false锛夛紝鎷掔粷璁块棶 {} {}", method, uri);
+ throw new ServiceException(DISABLED_MESSAGE);
+ }
+ return true;
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskProperties.java b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskProperties.java
new file mode 100644
index 0000000..7cf0cd2
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskProperties.java
@@ -0,0 +1,35 @@
+package com.ruoyi.task.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 浠诲姟妯″潡閰嶇疆锛堝墠缂� {@code task}锛夈��
+ * <p>
+ * 鈿狅笍 <b>杩欎笉鏄富寮�鍏�</b>銆備换鍔℃ā鍧楃殑寮�鍏�<b>瀛樺湪 {@code sys_config} 鍙傛暟閰嶇疆琛ㄩ噷</b>锛�
+ * <pre>
+ * 鍙傛暟閿悕锛歵ask.enabled
+ * 鍙傛暟閿�硷細true锛堝惎鐢紝榛樿锛�/ false锛堝叧闂級
+ * </pre>
+ * 瑙� {@link TaskSwitch}銆傛湰绫荤殑 {@link #isEnabled()} 鍙綔涓�<b>鍏滃簳</b>锛�
+ * 褰� {@code sys_config} 閲屾病鏈夎繖涓�琛屻�佹垨闈� Spring 鐜鍙栦笉鍒伴厤缃湇鍔℃椂鎵嶄細鐢ㄥ埌銆�
+ * <p>
+ * 濡傞渶鍦� yml 涓厹搴曪紙涓�鑸笉蹇呰锛屾甯稿簲鍦ㄥ弬鏁拌缃〉缁存姢锛夛細
+ * <pre>
+ * task:
+ * enabled: false
+ * </pre>
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "task")
+public class TaskProperties {
+
+ /**
+ * 鏄惁鍚敤浠诲姟妯″潡锛堥粯璁ゅ惎鐢級銆�
+ * <p>
+ * 浠呭綋 {@code sys_config} 涓病鏈� {@code task.enabled} 鏃剁敓鏁堬紝瑙� {@link TaskSwitch}銆�
+ */
+ private boolean enabled = true;
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskSwitch.java b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskSwitch.java
new file mode 100644
index 0000000..c8e5e88
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskSwitch.java
@@ -0,0 +1,207 @@
+package com.ruoyi.task.config;
+
+import com.ruoyi.common.core.service.IConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 浠诲姟妯″潡<b>鎬诲紑鍏�</b>锛氬�煎瓨鏀惧湪 {@code sys_config} 鍙傛暟閰嶇疆琛ㄤ腑锛�<b>杩愯鏃惰鍙栥�佸彲鐑垏鎹�</b>銆�
+ *
+ * <h3>鍙傛暟閰嶇疆</h3>
+ * <pre>
+ * 鍙傛暟閿悕锛歵ask.enabled
+ * 鍙傛暟閿�硷細true = 鍚敤锛堥粯璁わ級
+ * false = 鍏抽棴
+ * </pre>
+ * 浣嶇疆锛氱郴缁熺鐞� 鈫� 鍙傛暟璁剧疆 鈫� 鏂板/淇敼銆�
+ * <pre>
+ * insert into sys_config (config_name, config_key, config_value, config_type, create_by, create_time, remark)
+ * values ('浠诲姟妯″潡寮�鍏�', 'task.enabled', 'true', 'Y', 'admin', sysdate(), 'true鍚敤锛宖alse鍏抽棴锛堥粯璁rue锛�');
+ * </pre>
+ *
+ * <h3>鍙栧�间紭鍏堢骇</h3>
+ * <ol>
+ * <li>{@code sys_config} 閲� {@code task.enabled} 鐨勫�硷紙<b>涓荤敤</b>锛�
+ * 鏉ヨ嚜 {@code IConfigService} 鎺ュ彛锛屽疄鐜板湪 ruoyi-system 鐨� {@code SysConfigServiceImpl}锛夛紱</li>
+ * <li>{@link TaskProperties#isEnabled()}锛�<b>鍏滃簳</b>锛氫粎褰� sys_config 閲屾病鏈夎繖涓�琛屻��
+ * 鎴栭潪 Spring 鐜鍙栦笉鍒伴厤缃湇鍔℃椂浣跨敤锛岄粯璁� true锛夈��</li>
+ * </ol>
+ *
+ * <h3>涓轰粈涔堥粯璁� true</h3>
+ * 涓庢弧鎰忓害妯″潡鍚屾锛氬弬鏁拌缂哄け鏃舵寜 true 澶勭悊锛屼繚璇佸崌绾у悗浠诲姟鍔熻兘涓嶄細鍥犱负灏戜簡涓�琛岄厤缃�岀獊鐒朵笉鍙敤
+ * 锛堣鍏抽棴蹇呴』鏄惧紡閰嶇疆 false锛夈��
+ *
+ * <h3>涓轰粈涔堣涓嶅埌閰嶇疆鏃朵篃鎸� true锛坒ail-open锛�</h3>
+ * 璇� {@code sys_config} 闇�瑕佽蛋鏁版嵁搴擄紝鏁版嵁搴撴姈鍔ㄦ椂濡傛灉 fail-closed 浼氭妸鏁翠釜浠诲姟涓氬姟鎵撴銆�
+ * 杩欓噷鍙墦 WARN 骞舵斁琛岋紝瀹佸彲澶氬紑涓�浼氬効锛屼篃涓嶅仛鏁版嵁搴撴姈鍔ㄦ斁澶у櫒銆�
+ *
+ * <h3>涓轰粈涔堟湁 10 绉掔紦瀛�</h3>
+ * {@code SysConfigServiceImpl#selectConfigByKey} 褰撳墠<b>姣忔閮芥煡搴�</b>锛圧edis 缂撳瓨閭f琚敞閲婃帀浜嗭級锛�
+ * 鑰屾湰寮�鍏冲湪姣忔浠诲姟璇锋眰銆佹瘡娆″畧鍗垽鏂椂閮戒細琚鍒般�傝繖閲屽姞涓�涓繘绋嬪唴 TTL 缂撳瓨锛�
+ * 鎶婃煡搴撻檷鍒�"姣忎釜瀹炰緥姣� 10 绉掓渶澶氫竴娆�"銆備唬浠锋槸鍙傛暟鏀瑰姩鏈�澶� 10 绉掔敓鏁堬紙澶氬疄渚嬮儴缃叉椂鍚勮嚜璁℃椂锛夈��
+ */
+@Slf4j
+@Component
+public class TaskSwitch {
+
+ /**
+ * sys_config 閲岀殑鍙傛暟閿悕
+ */
+ public static final String CONFIG_KEY = "task.enabled";
+
+ /**
+ * 杩涚▼鍐呯紦瀛樻湁鏁堟湡锛堟绉掞級
+ */
+ private static final long CACHE_TTL_MILLIS = 10_000L;
+
+ private final TaskProperties taskProperties;
+
+ /**
+ * 鍙傛暟閰嶇疆鏈嶅姟锛坮uoyi-common 鐨勬帴鍙o紝瀹炵幇鍦� ruoyi-system锛夈��
+ * <p>
+ * 鐢� {@code ObjectProvider} 鎯版�у彇锛氭湰妯″潡鍙緷璧� ruoyi-common锛�
+ * 鍦ㄥ崟鍏冩祴璇�/鐙珛閮ㄧ讲绛�"瀹瑰櫒閲屾病鏈夊疄鐜�"鐨勫満鏅笅涓嶈兘鍥犳鍚姩澶辫触銆�
+ */
+ private final ObjectProvider<IConfigService> configServiceProvider;
+
+ /**
+ * 鏈�杩戜竴娆¤В鏋愮粨鏋�
+ */
+ private volatile Boolean cachedEnabled;
+
+ /**
+ * 鏈�杩戜竴娆¤В鏋愮殑鏃堕棿鎴�
+ */
+ private volatile long cachedAt;
+
+ /**
+ * Spring 浣跨敤鐨勬瀯閫犲櫒銆�
+ * <p>
+ * 鈿狅笍 <b>蹇呴』鏄惧紡鏍囨敞 {@code @Autowired}</b>锛氭湰绫绘湁涓や釜鍏紑鏋勯�犲櫒
+ * 锛堝彟涓�涓粰娴嬭瘯/闈� Spring 鐜鐢級锛屼笉鏍囨敞鐨勮瘽 Spring 浼氬洜"鏋勯�犲櫒涓嶅敮涓�"
+ * 閫�鍥炴煡鎵炬棤鍙傛瀯閫犲櫒锛屽惎鍔ㄥ嵆鎶� {@code No default constructor found}銆�
+ * 璇ヨ鍒欏凡鐢� {@code sql/_probe/verify_spring_beans.py} 闈欐�佹妸鍏炽��
+ */
+ @Autowired
+ public TaskSwitch(TaskProperties taskProperties,
+ ObjectProvider<IConfigService> configServiceProvider) {
+ this.taskProperties = taskProperties;
+ this.configServiceProvider = configServiceProvider;
+ }
+
+ /**
+ * 渚�<b>娴嬭瘯/闈� Spring 鐜</b>鐩存帴鏋勯�狅細{@code configValue} 灏辨槸 sys_config 閲岀殑閿�硷紝
+ * 浼� {@code null} 琛ㄧず"鍙傛暟琛屼笉瀛樺湪"锛堟鏃跺洖钀藉埌 {@link TaskProperties}锛夈��
+ */
+ public TaskSwitch(TaskProperties taskProperties, final String configValue) {
+ this(taskProperties, new FixedProvider(configValue));
+ // 闈� Spring 鐜涓嬫病鏈�"鏀归厤缃悗绛� 10 绉�"鐨勬蹇碉紝鐩存帴绂佺敤缂撳瓨锛屼繚璇佹柇瑷�鍗虫椂鍙
+ this.cachedEnabled = resolve();
+ this.cachedAt = System.currentTimeMillis() + CACHE_TTL_MILLIS * 1000L;
+ }
+
+ /**
+ * 浠诲姟妯″潡鏄惁鍚敤锛堣繍琛屾椂鐑锛屾渶澶� 10 绉掑欢杩燂級
+ */
+ public boolean isEnabled() {
+ long now = System.currentTimeMillis();
+ Boolean cached = this.cachedEnabled;
+ if (cached != null && now - this.cachedAt < CACHE_TTL_MILLIS) {
+ return cached;
+ }
+ boolean resolved = resolve();
+ this.cachedEnabled = resolved;
+ this.cachedAt = now;
+ return resolved;
+ }
+
+ /**
+ * 娓呮帀杩涚▼鍐呯紦瀛橈紝涓嬫璋冪敤绔嬪嵆閲嶆柊璇� sys_config锛堜緵娴嬭瘯/闇�瑕佺珛鍗崇敓鏁堢殑鍦烘櫙锛�
+ */
+ public void invalidateCache() {
+ this.cachedEnabled = null;
+ }
+
+ /**
+ * 瑙f瀽褰撳墠寮�鍏冲�硷細sys_config 浼樺厛锛屽叾娆� yml 鍏滃簳
+ */
+ private boolean resolve() {
+ String value = readFromSysConfig();
+ if (value != null) {
+ if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) {
+ log.warn("銆愪换鍔°�憇ys_config 涓� {} 鐨勫�间笉鏄� true/false锛堝疄闄�=銆寋}銆嶏級锛屽皢鎸夈�屼笉鏄� false 鍗冲惎鐢ㄣ�嶅鐞�",
+ CONFIG_KEY, value);
+ }
+ boolean enabled = !"false".equalsIgnoreCase(value);
+ log.debug("銆愪换鍔°�戝紑鍏冲彇鑷� sys_config锛歿}={} -> enabled={}", CONFIG_KEY, value, enabled);
+ return enabled;
+ }
+ boolean enabled = taskProperties.isEnabled();
+ log.debug("銆愪换鍔°�憇ys_config 涓湭閰嶇疆 {}锛屽洖钀� task.enabled={}", CONFIG_KEY, enabled);
+ return enabled;
+ }
+
+ /**
+ * 璇� sys_config 鐨勫師濮嬮敭鍊硷紱娌℃湁瀹炵幇銆佹病鏈夎繖涓�琛屻�佹垨璇诲簱澶辫触閮借繑鍥� {@code null}
+ */
+ private String readFromSysConfig() {
+ if (configServiceProvider == null) {
+ return null;
+ }
+ try {
+ IConfigService configService = configServiceProvider.stream().findFirst().orElse(null);
+ if (configService == null) {
+ return null;
+ }
+ String value = configService.selectConfigByKey(CONFIG_KEY);
+ if (value == null || value.trim().isEmpty()) {
+ return null;
+ }
+ return value.trim();
+ } catch (Exception e) {
+ // 瀹瑰櫒娌℃湁瀹炵幇銆佹暟鎹簮寮傚父銆丼QL 鎶ラ敊鈥︹�︿竴寰嬫寜"鍙傛暟缂哄け"澶勭悊锛坒ail-open锛夛紝缁濅笉褰卞搷涓绘祦绋�
+ log.warn("銆愪换鍔°�戣鍙� sys_config 鐨� {} 澶辫触锛屾湰娆℃寜鏈厤缃鐞嗭紙fail-open锛夛細{}",
+ CONFIG_KEY, e.toString());
+ return null;
+ }
+ }
+
+ /**
+ * 鍥哄畾鍊肩殑 {@code ObjectProvider}锛氬彧鐢ㄤ簬闈� Spring 鐜/娴嬭瘯
+ */
+ private static final class FixedProvider implements ObjectProvider<IConfigService> {
+
+ private final IConfigService configService;
+
+ private FixedProvider(final String configValue) {
+ this.configService = configValue == null ? null : configKey -> configValue;
+ }
+
+ @Override
+ public IConfigService getObject(Object... args) {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getIfAvailable() {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getIfUnique() {
+ return configService;
+ }
+
+ @Override
+ public IConfigService getObject() {
+ return configService;
+ }
+
+ @Override
+ public java.util.stream.Stream<IConfigService> stream() {
+ return configService == null ? java.util.stream.Stream.empty() : java.util.stream.Stream.of(configService);
+ }
+ }
+}
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskWebConfig.java b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskWebConfig.java
new file mode 100644
index 0000000..9800dd2
--- /dev/null
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/config/TaskWebConfig.java
@@ -0,0 +1,106 @@
+package com.ruoyi.task.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 浠诲姟妯″潡鐨� MVC 閰嶇疆锛氭妸 {@link TaskAvailabilityInterceptor} 鎸傚埌浠诲姟妯″潡鑷繁鐨勭鐐瑰墠缂�涓娿��
+ *
+ * <h3>涓轰粈涔堟槸 2 涓墠缂�锛堣�屼笉鏄�愪釜鏋氫妇 42 涓鐐癸級</h3>
+ * 浠诲姟妯″潡鐨勭鐐�**鍏ㄩ儴**鐢辨湰妯″潡鐨� 2 涓� Controller 鎻愪緵锛屼笖瀹冧滑鐨� URL 鍓嶇紑
+ * 涓庡叾浠栨ā鍧�**娌℃湁浠讳綍閲嶅彔**锛�
+ * <ul>
+ * <li>{@code /smartor/servicetask/**} 鈥斺�� 11 涓鐐癸紱</li>
+ * <li>{@code /smartor/serviceSubtask/**} 鈥斺�� 42 涓鐐广��</li>
+ * </ul>
+ * 鈿狅笍 鐗瑰埆娉ㄦ剰 {@code /smartor/serviceSubtask/**} <b>涓嶄細</b>璇激婊℃剰搴︽ā鍧楃殑
+ * {@code /smartor/serviceSubtaskDetail/**}锛歋pring 鐨勮矾寰勫尮閰嶉噷
+ * {@code serviceSubtask} 涓� {@code serviceSubtaskDetail} 鏄�<b>涓や釜涓嶅悓鐨勬</b>銆�
+ * <p>
+ * 鍥犳杩欓噷鐢ㄥ墠缂�鍗冲彲绮剧‘瑕嗙洊锛屾棤闇�鍍忔弧鎰忓害妯″潡閭f牱閫愪釜鍒� 17 涓簿纭矾寰勩��
+ * 鍞竴闇�瑕侀澶栧鐞嗙殑鏄�"鐢佃瘽妯″潡淇濈暀鍘� URL 鍚庤惤鍦ㄨ繖涓墠缂�閲岀殑 6 鏉$鐐�"锛�
+ * 瑙� {@link #excludedPhonePaths()}銆�
+ * 鑻ュ皢鏉ュ張鏈夊叾瀹冩ā鍧楀線杩欎袱涓墠缂�涓嬪姞绔偣锛屽悓鏍烽渶瑕佸姞鍒版帓闄ゆ竻鍗曢噷銆�
+ */
+@Configuration
+public class TaskWebConfig implements WebMvcConfigurer {
+
+ /**
+ * 浠诲姟锛堝師 {@code ServiceTaskController}锛�
+ */
+ private static final String SERVICETASK_PATTERN = "/smartor/servicetask/**";
+
+ /**
+ * 瀛愪换鍔★紙鍘� {@code ServiceSubtaskController}锛�
+ */
+ private static final String SERVICESUBTASK_PATTERN = "/smartor/serviceSubtask/**";
+
+ /**
+ * 鎸傚湪 {@code /smartor/serviceSubtask/**} 涓嬨�佷絾<b>褰掔數璇濇ā鍧楋紙ruoyi-phone锛�</b>鐨� 6 鏉$鐐广��
+ * <p>
+ * 鐢佃瘽妯″潡鍖栨椂<b>鍒绘剰淇濈暀鍘� URL</b>锛堝閮ㄧ數璇濆钩鍙扮殑鍥炶皟鍦板潃涓嶈兘鏀癸級锛屼簬鏄繖鍑犳潯
+ * 钀藉湪浠诲姟妯″潡鐨勫墠缂�閲屻�傚畠浠繀椤讳粠"浠诲姟寮�鍏�"鐨勬嫤鎴寖鍥撮噷鎺掗櫎锛�
+ * 鍚﹀垯浼氬嚭鐜�"鍏虫帀 task.enabled 椤烘墜鎶婄數璇濆洖璋冧篃鍏充簡"鈥斺�斿閮ㄥ钩鍙版鍦ㄩ�氳瘽锛�
+ * 鍥炶皟琚嫤浼氱洿鎺ユ妸闅忚鎵撴柇銆傚畠浠敱 {@code phone.enabled} 绠°��
+ * <p>
+ * 鈿狅笍 杩欓噷鏄�<b>瀛楃涓插瓧闈㈤噺</b>鑰屼笉鏄紩鐢� {@code PhoneWebConfig} 鐨勫父閲忥細
+ * 渚濊禆鏂瑰悜鍙兘鏄� {@code ruoyi-phone -> ruoyi-task}锛屽弽杩囨潵浼氬舰鎴� Maven 寰幆渚濊禆銆�
+ * 鏀圭數璇濈鐐硅矾寰勬椂涓よ竟閮借鏀癸紱{@code TaskSwitchCheck} 閲屾湁鏂█鐩潃杩� 6 鏉°��
+ */
+ private static final String[] PHONE_OWNED_SUBTASK_PATHS = new String[]{
+ "/smartor/serviceSubtask/phoneCallBack",
+ "/smartor/serviceSubtask/phoneCallBackYQ",
+ "/smartor/serviceSubtask/taskPull",
+ "/smartor/serviceSubtask/saveQuestionAnswerPhone",
+ "/smartor/serviceSubtask/recordAcceptshanghai",
+ "/smartor/serviceSubtask/recordAccept",
+ };
+
+ @Autowired
+ private TaskAvailabilityInterceptor taskAvailabilityInterceptor;
+
+ /**
+ * 渚涙祴璇�/闈� Spring 鐜鐩存帴鏋勯��
+ */
+ public TaskWebConfig() {
+ }
+
+ public TaskWebConfig(TaskAvailabilityInterceptor interceptor) {
+ this.taskAvailabilityInterceptor = interceptor;
+ }
+
+ /**
+ * 鏈ā鍧楅渶瑕�"鍏抽棴鍗虫槑纭姤閿�"鐨� URL 鍓嶇紑锛堜緵鏍¢獙鑴氭湰/鍗曞厓娴嬭瘯鏂█锛�
+ */
+ public static List<String> guardedPathPatterns() {
+ List<String> patterns = new ArrayList<>();
+ patterns.add(SERVICETASK_PATTERN);
+ patterns.add(SERVICESUBTASK_PATTERN);
+ return patterns;
+ }
+
+ /**
+ * 浠庝换鍔″紑鍏虫嫤鎴寖鍥撮噷鎺掗櫎鐨勮矾寰勶紙鐢佃瘽妯″潡鑷繁鐨� 6 鏉★紝渚涙牎楠岃剼鏈�/鍗曞厓娴嬭瘯鏂█锛�
+ */
+ public static List<String> excludedPhonePaths() {
+ List<String> paths = new ArrayList<>();
+ for (String p : PHONE_OWNED_SUBTASK_PATHS) {
+ paths.add(p);
+ }
+ return paths;
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(taskAvailabilityInterceptor)
+ .addPathPatterns(guardedPathPatterns())
+ .excludePathPatterns(PHONE_OWNED_SUBTASK_PATHS)
+ // 鎷︽埅鍣ㄦ湰韬緢杞伙紙鍙涓�涓� boolean锛夛紝order 缁欎釜灏忓�艰瀹冨湪涓氬姟鎷︽埅鍣ㄤ箣鍓嶆墽琛�
+ .order(-100);
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
similarity index 90%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
index df90895..ae47d97 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.task.controller;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.ISelect;
@@ -19,18 +19,12 @@
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.reflect.ReflectUtils;
-import com.ruoyi.quartz.service.ICollectHISService;
-import com.ruoyi.quartz.task.RyTask;
-import com.ruoyi.system.service.ISysConfigService;
-import com.ruoyi.system.service.ISysUserDeptService;
+import com.ruoyi.common.core.service.TaskOpsTriggerApi;
+import com.ruoyi.task.api.spi.TaskSysConfigPort;
+import com.ruoyi.task.api.spi.TaskSysUserDeptPort;
import com.ruoyi.satisfaction.api.SatisfactionExportBundle;
import com.ruoyi.satisfaction.api.SatisfactionFacade;
-import com.smartor.domain.*;
-import com.smartor.domain.VO.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.service.IServiceSubtaskRecordService;
-import com.smartor.service.IServiceSubtaskService;
-import com.smartor.service.IServiceTaskService;
+import com.ruoyi.task.api.spi.TaskSubtaskRecordPort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -51,9 +45,35 @@
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceStatisticsRequest;
+import com.ruoyi.task.domain.ServiceStatisticsResponse;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
+import com.ruoyi.task.domain.ServiceSubtaskStatistic;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.service.IServiceTaskService;
+import com.ruoyi.task.domain.PatArchiveSrmVO;
+import com.ruoyi.task.domain.ServiceSubTaskDetailReq;
+import com.ruoyi.task.domain.ServiceSubtaskDiagname;
+import com.ruoyi.task.domain.ServiceSubtaskRes;
+import com.ruoyi.task.domain.ServiceSubtaskTemplateVO;
+import com.ruoyi.task.domain.ServiceTaskVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskVO;
+import com.ruoyi.task.domain.VO.TransferDeptVO;
+import com.ruoyi.task.domain.ServiceSubtaskExport;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Controller
+ * <p>
+ * 鈿狅笍 鐢佃瘽鐩稿叧鐨� 6 涓鐐癸紙phoneCallBack / phoneCallBackYQ / taskPull /
+ * saveQuestionAnswerPhone / recordAcceptshanghai / recordAccept锛夊凡闅忕數璇濇ā鍧楀寲
+ * 鏁翠綋鎼繘 {@code ruoyi-phone} 鐨� {@code PhoneCallbackController}锛�<b>URL 淇濇寔涓嶅彉</b>
+ * 锛堝閮ㄧ數璇濆钩鍙扮殑鍥炶皟鍦板潃涓嶈兘鏀癸級锛屽洜姝ゆ湰 Controller 涓庣數璇濇ā鍧楀叡鐢�
+ * {@code /smartor/serviceSubtask} 杩欎竴鍓嶇紑锛屽彧瑕佸畬鏁磋矾寰勪笉閲嶅鍗冲彲姝e父娉ㄥ唽銆�
*
* @author ruoyi
* @date 2024-02-02
@@ -84,19 +104,28 @@
private IServiceTaskService serviceTaskService;
@Autowired
- private ISysUserDeptService sysUserDeptService;
+ private TaskSysUserDeptPort taskSysUserDeptPort;
@Autowired
- private IServiceSubtaskRecordService serviceSubtaskRecordService;
+ private TaskSubtaskRecordPort serviceSubtaskRecordService;
@Autowired
- private ISysConfigService configService;
+ private TaskSysConfigPort taskSysConfigPort;
+ /**
+ * 浠诲姟杩愮淮瑙﹀彂鑳藉姏銆�
+ * <p>
+ * 鍘熷厛姝ゅ鐩存帴娉ㄥ叆 {@code ruoyi-quartz} 鐨� {@code RyTask} / {@code ICollectHISService}锛�
+ * 浼氳銆岀鐐瑰綊灞炪�嶄笌銆孒IS 閲囬泦瀹炵幇銆嶇粦姝伙細杩� 6 涓鐐圭殑褰掑睘瑕佹惉杩� {@code ruoyi-task}锛�
+ * 鑰屽疄鐜帮紙{@code RyTask} 2214 琛屻�佹敞鍏ョ害 20 涓� smartor service锛変笉鑳芥惉锛�
+ * 鍚﹀垯褰㈡垚 {@code ruoyi-task -> smartor} + {@code ruoyi-quartz -> ruoyi-task} 鐨勭‖寰幆銆�
+ * <p>
+ * 鏀逛负缁� {@code ruoyi-common} 鐨勭鍙e彇鐢細鎺ュ彛鍦� ruoyi-common锛�
+ * 瀹炵幇锛坽@code TaskOpsTriggerApiImpl}锛夌暀鍦� ruoyi-quartz銆�
+ * 杩欐牱绔偣鍙互鏁翠綋鎼蛋鑰�<b>涓嶉渶瑕�</b>渚濊禆 ruoyi-quartz銆�
+ */
@Autowired
- private RyTask ryTask;
-
- @Autowired
- private ICollectHISService collectHISService;
+ private TaskOpsTriggerApi taskOpsTriggerApi;
@Value("${spring.profiles.active}")
private String active;
@@ -478,69 +507,6 @@
}
/**
- * 鐢佃瘽鍥炶皟浠诲姟(涓婃捣)
- */
- @ApiOperation("鐢佃瘽鍥炶皟浠诲姟")
- @PostMapping("/phoneCallBack")
- public AjaxResult phoneCallBack(@RequestBody PhoneCallBackVO phoneCallBackVO) {
- serviceSubtaskService.phoneCallBack(phoneCallBackVO);
- return success();
- }
-
- @ApiOperation("鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)")
- @PostMapping("/phoneCallBackYQ")
- public PhoneCallBackYQVO phoneCallBackYQ(@RequestBody PhoneCallReqYQVO phoneCallReqYQVO) {
- log.info("鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划) 锛焮}", phoneCallReqYQVO);
- PhoneCallBackYQVO phoneCallBackYQVO = serviceSubtaskService.phoneCallBackYQ(phoneCallReqYQVO);
- return phoneCallBackYQVO;
- }
-
- /**
- * 鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)
- */
- @ApiOperation("鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)")
- @PostMapping("/taskPull")
- public List<PullTaskVO> taskPull() {
- log.info("鐢佃瘽浠诲姟鎷夊彇(闆ㄧ划)");
- List<PullTaskVO> pullTaskVOList = serviceSubtaskService.taskPull();
- log.info("鐢佃瘽浠诲姟鎷夊彇鏁版嵁(闆ㄧ划):{}", pullTaskVOList);
- return pullTaskVOList;
- }
-
- /**
- * 鎮h�呴棶棰樼粨鏋滆褰�
- */
- @ApiOperation("鎮h�呴棶棰樼粨鏋滆褰曪紙鐢佃瘽锛�")
- @PostMapping("/saveQuestionAnswerPhone")
- public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
-// SysUser user = getLoginUser().getUser();
-// serviceSubTaskDetailReq.setOrgid(user.getOrgid());
- log.info("鎮h�呴棶棰樼粨鏋滆褰�(鐢佃瘽):{}", serviceSubTaskDetailReq);
- return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
- }
-
- /**
- * 閫氳瘽璁板綍鍥炶皟
- */
- @ApiOperation("閫氳瘽璁板綍鍥炶皟(涓婃捣)")
- @PostMapping("/recordAcceptshanghai")
- public AjaxResult recordAccepshanghait(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
- log.info("閫氳瘽璁板綍鍥炶皟(涓婃捣):{}", serviceSubTaskDetailReq);
- return toAjax(serviceSubtaskService.saveQuestionAnswerPhone(serviceSubTaskDetailReq));
- }
-
- /**
- * 閫氳瘽璁板綍鍥炶皟
- */
- @ApiOperation("閫氳瘽璁板綍鍥炶皟(闆ㄧ划)")
- @PostMapping("/recordAccept")
- public AjaxResult recordAccept(@RequestBody PhoneCallRecordVO phoneCallRecordVO) {
- log.info("閫氳瘽璁板綍鍥炶皟(闆ㄧ划):{}", phoneCallRecordVO);
- serviceSubtaskService.recordAccept(phoneCallRecordVO);
- return success();
- }
-
- /**
* 鑾峰彇姣忎釜鏈堢殑闅忚銆佸璇婇噺
*/
@ApiOperation("鑾峰彇姣忎釜鏈堢殑闅忚銆佸璇婇噺")
@@ -577,7 +543,7 @@
sysUserWard.setOrgid(user.getOrgid());
sysUserWard.setCampusid(user.getCampusid());
sysUserWard.setDeptType("2");
- List<SysUserDept> wardList = sysUserDeptService.selectSysUserDeptList(sysUserWard);
+ List<SysUserDept> wardList = taskSysUserDeptPort.selectSysUserDeptList(sysUserWard);
if (CollectionUtils.isNotEmpty(wardList)) {
leavehospitaldistrictcodes = wardList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
}
@@ -592,7 +558,7 @@
sysUserDept.setOrgid(user.getOrgid());
sysUserDept.setCampusid(user.getCampusid());
sysUserDept.setDeptType("1");
- List<SysUserDept> deptList = sysUserDeptService.selectSysUserDeptList(sysUserDept);
+ List<SysUserDept> deptList = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
if (CollectionUtils.isNotEmpty(deptList)) {
deptCodes = deptList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
}
@@ -602,7 +568,7 @@
}
}
- String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+ String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -627,7 +593,7 @@
Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
serviceSubtaskCountReq.setPageNum(offset);
- String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+ String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -739,7 +705,7 @@
String orgid = loginUser.getUser().getOrgid();
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = configService.selectConfigByKey(configKey, orgid);
+ String configValue = taskSysConfigPort.selectConfigValue(configKey, orgid);
serviceSubtaskCountReq.setConfigValue(configValue);
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
@@ -748,7 +714,7 @@
}
}
- String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", orgid);
+ String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", orgid);
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -788,7 +754,7 @@
}
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = configService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
+ String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
serviceSubtaskCountReq.setConfigValue(configValue);
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
@@ -814,7 +780,7 @@
//澶嶈瘖缁熻
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = configService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
+ String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCountDetails-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
log.error(logInfo);
@@ -870,13 +836,13 @@
sysUserDept.setOrgid(sysUser.getOrgid());
sysUserDept.setCampusid(sysUser.getCampusid());
sysUserDept.setDeptType("1");
- List<SysUserDept> sysUserDepts = sysUserDeptService.selectSysUserDeptList(sysUserDept);
+ List<SysUserDept> sysUserDepts = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
SysUserDept sysUserWard = new SysUserDept();
sysUserWard.setUserId(sysUser.getUserId());
sysUserWard.setOrgid(sysUser.getOrgid());
sysUserWard.setCampusid(sysUser.getCampusid());
sysUserWard.setDeptType("2");
- List<SysUserDept> sysUserWards = sysUserDeptService.selectSysUserDeptList(sysUserWard);
+ List<SysUserDept> sysUserWards = taskSysUserDeptPort.selectSysUserDeptList(sysUserWard);
List<String> deptCodes = sysUserDepts.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
List<String> wardCodes = sysUserWards.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
ServiceSubtaskEntity entity = new ServiceSubtaskEntity();
@@ -953,7 +919,7 @@
public AjaxResult syncMedInhospForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
// 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
CompletableFuture.runAsync(() -> {
- collectHISService.syncMedInhosp(startTime, endTime);
+ taskOpsTriggerApi.syncMedInhosp(startTime, endTime);
});
return AjaxResult.success("鍚屾浠诲姟宸插惎鍔紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
@@ -961,14 +927,14 @@
@PostMapping("/syncMedInhospForShiyiYesterday")
public AjaxResult syncMedInhospForShiyiYesterday() {
// 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
- ryTask.collectHISYesterday();
+ taskOpsTriggerApi.collectHISYesterday();
return AjaxResult.success("鍚屾浠诲姟宸插惎鍔紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
@PostMapping("/syncMedInhospForShiyiDaysBefore")
public AjaxResult syncMedInhospForShiyiDaysBefore(@RequestParam("day") Long day) {
// 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
- ryTask.collectHISDaysBefore(day);
+ taskOpsTriggerApi.collectHISDaysBefore(day);
return AjaxResult.success("銆恈ollectHISDaysBefore銆戝悓姝ヤ换鍔″凡鍚姩锛屽ぉ鏁颁负" + day + "澶╋紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
@@ -976,7 +942,7 @@
public AjaxResult syncMedOperForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
// 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
CompletableFuture.runAsync(() -> {
- collectHISService.syncOper(startTime, endTime);
+ taskOpsTriggerApi.syncOper(startTime, endTime);
});
return AjaxResult.success("鍚屾浠诲姟宸插惎鍔紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
@@ -984,13 +950,13 @@
@PostMapping("/dealSubtaskDeadline")
public AjaxResult dealSubtaskDeadline(@RequestParam("orgid") String orgid, @RequestParam("day") Integer day) {
// 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
- ryTask.dealSubtaskDeadline(orgid, day);
+ taskOpsTriggerApi.dealSubtaskDeadline(orgid, day);
return AjaxResult.success("銆恉ealSubtaskDeadline銆戝悓姝ヤ换鍔″凡鍚姩锛屽ぉ鏁颁负" + day + "澶╋紝璇风◢鍚庢煡鐪嬬粨鏋�");
}
@PostMapping("/sendExceptInfo")
public AjaxResult sendExceptInfo() throws Exception {
- ryTask.sendExceptInfo();
+ taskOpsTriggerApi.sendExceptInfo();
return AjaxResult.success("sendExceptInfo");
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceTaskController.java
similarity index 96%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceTaskController.java
index 0cb71b9..3de1d5f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceTaskController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.task.controller;
import com.github.pagehelper.ISelect;
import com.ruoyi.common.annotation.AddOrgId;
@@ -13,10 +13,6 @@
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.service.IServiceSubtaskService;
-import com.smartor.service.IServiceTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -32,6 +28,12 @@
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.service.IServiceTaskService;
+import com.ruoyi.task.domain.ServiceTaskVO;
+import com.ruoyi.task.domain.ServiceTaskScriptQues;
/**
* 闅忚浠诲姟Controller
diff --git a/smartor/src/main/java/com/smartor/domain/DTO/DetailTraceDealDTO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/DetailTraceDealDTO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/DTO/DetailTraceDealDTO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/DetailTraceDealDTO.java
index b0ac693..4a05b2d 100644
--- a/smartor/src/main/java/com/smartor/domain/DTO/DetailTraceDealDTO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/DetailTraceDealDTO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain.DTO;
+package com.ruoyi.task.domain.DTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/DTO/ServiceSubtaskDetailDTO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/ServiceSubtaskDetailDTO.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/DTO/ServiceSubtaskDetailDTO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/ServiceSubtaskDetailDTO.java
index 62b38ed..6f269e9 100644
--- a/smartor/src/main/java/com/smartor/domain/DTO/ServiceSubtaskDetailDTO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/ServiceSubtaskDetailDTO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain.DTO;
+package com.ruoyi.task.domain.DTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/IvrTaskVisitResult.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/IvrTaskVisitResult.java
index 564432b..46e5395 100644
--- a/smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/IvrTaskVisitResult.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import java.util.Date;
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchiveSrmVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/PatArchiveSrmVO.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/PatArchiveSrmVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/PatArchiveSrmVO.java
index 539084f..d28fc94 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchiveSrmVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/PatArchiveSrmVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/PatTaskRelevance.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/PatTaskRelevance.java
index 13e29c5..9b704df 100644
--- a/smartor/src/main/java/com/smartor/domain/PatTaskRelevance.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/PatTaskRelevance.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
diff --git a/smartor/src/main/java/com/smartor/domain/Question.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/Question.java
similarity index 92%
rename from smartor/src/main/java/com/smartor/domain/Question.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/Question.java
index c8ac646..376f43f 100644
--- a/smartor/src/main/java/com/smartor/domain/Question.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/Question.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/SendMagParam.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/SendMagParam.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/domain/SendMagParam.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/SendMagParam.java
index 7f9ef6e..519fb89 100644
--- a/smartor/src/main/java/com/smartor/domain/SendMagParam.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/SendMagParam.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceOutPath.java
similarity index 95%
rename from smartor/src/main/java/com/smartor/domain/ServiceOutPath.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceOutPath.java
index 5f04aa7..0bf57ad 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceOutPath.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceOutPath.java
@@ -1,10 +1,11 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 涓婚敭瀵硅薄 service_out_path
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsRequest.java
similarity index 97%
rename from smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsRequest.java
index c2b47b9..4ea13dd 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsRequest.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsResponse.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsResponse.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/ServiceStatisticsResponse.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsResponse.java
index 850455a..b898b1c 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceStatisticsResponse.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsResponse.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskDetailReq.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubTaskDetailReq.java
similarity index 89%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubTaskDetailReq.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubTaskDetailReq.java
index cb22136..71f17a6 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskDetailReq.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubTaskDetailReq.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
@@ -6,6 +6,7 @@
import lombok.Data;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
/**
* 鐢佃瘽闂鍥炵瓟鏄庣粏
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
index a6299cb..9ba99a6 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
@@ -8,6 +8,7 @@
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級瀵硅薄 ivr_tasksingle
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCount.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCount.java
similarity index 97%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskCount.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCount.java
index fa24dc7..a155e81 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCount.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCount.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
index 37725ca..5ce66dd 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetail.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetail.java
index 215eaf4..bb930e6 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetail.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import java.util.Date;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTarget.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTarget.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTarget.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTarget.java
index ac7e2ee..540da8d 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTarget.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTarget.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTrace.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTrace.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTrace.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTrace.java
index fc3afb9..87fcc2e 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTrace.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTrace.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import java.util.Date;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailVO.java
index 108b867..654c08e 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDiagname.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDiagname.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskDiagname.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDiagname.java
index e679078..7316c03 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskDiagname.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDiagname.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskExport.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskExport.java
index fdb7c2d..457f2a0 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExport.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskExport.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskIsAbnormalStatistic.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskIsAbnormalStatistic.java
index e355670..ff99d17 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskIsAbnormalStatistic.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskIsAbnormalStatistic.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskPreachform.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskPreachform.java
index d37d1b0..e692cdb 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskPreachform.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskRecord.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRecord.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskRecord.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRecord.java
index fa5104e..cc8506c 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskRecord.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRecord.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import java.util.Date;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
index 15ffe39..ad0080a 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -10,6 +10,8 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級瀵硅薄 ivr_tasksingle
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskScriptCount.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskScriptCount.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskScriptCount.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskScriptCount.java
index 65cca88..74a5fd7 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskScriptCount.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskScriptCount.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskStatistic.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskStatistic.java
index 7220e46..e0f31f1 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskStatistic.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskTemplateVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskTemplateVO.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/ServiceSubtaskTemplateVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskTemplateVO.java
index e94e065..daf755b 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskTemplateVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskTemplateVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTask.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTask.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/ServiceTask.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTask.java
index 796723e..724794b 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTask.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTask.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskRule.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskRule.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskRule.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskRule.java
index cb34af2..05be3ba 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskRule.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskRule.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskSchedule.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskSchedule.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskSchedule.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskSchedule.java
index 5290525..fe4e2ff 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskSchedule.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskSchedule.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleDetail.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleDetail.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleDetail.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleDetail.java
index 9348d58..4571592 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleDetail.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleDetail.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleVO.java
similarity index 84%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleVO.java
index e9b1fc0..a70dabc 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskScheduleVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -6,6 +6,8 @@
import lombok.EqualsAndHashCode;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
/**
* 闅忚浠诲姟璁″垝 VO锛堜富璁″垝 + 鏄庣粏鍒楄〃锛�
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScriptQues.java
similarity index 97%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScriptQues.java
index ec8d820..435b70d 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskScriptQues.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScriptQues.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
index 95c4155..7c2ec31 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
@@ -13,6 +13,8 @@
import com.ruoyi.template.domain.IvrTaskTemplateVO;
import com.ruoyi.template.domain.SvyTaskTemplateVO;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.domain.ServiceTaskScheduleVO;
/**
* 璇煶浠诲姟瀵硅薄 ivr_task
*
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdept.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdept.java
index 6126c06..97a2a81 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskdept.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdept.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdiag.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdiag.java
index beea927..e58f713 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskdiag.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdiag.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskmedical.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskmedical.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskmedical.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskmedical.java
index c664243..4ff0b18 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskmedical.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskmedical.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskoper.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskoper.java
index d234f3f..47a0cd9 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceTaskoper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskoper.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
diff --git a/smartor/src/main/java/com/smartor/domain/TaskSendTimeVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/TaskSendTimeVO.java
similarity index 96%
rename from smartor/src/main/java/com/smartor/domain/TaskSendTimeVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/TaskSendTimeVO.java
index 5665bfb..2c37a13 100644
--- a/smartor/src/main/java/com/smartor/domain/TaskSendTimeVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/TaskSendTimeVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain;
+package com.ruoyi.task.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/VO/DetailTraceDealVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/DetailTraceDealVO.java
similarity index 98%
rename from smartor/src/main/java/com/smartor/domain/VO/DetailTraceDealVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/DetailTraceDealVO.java
index 8fa031d..8925dff 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/DetailTraceDealVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/DetailTraceDealVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
diff --git a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskCotinueCountVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskCotinueCountVO.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskCotinueCountVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskCotinueCountVO.java
index dded55c..909c2de 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskCotinueCountVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskCotinueCountVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
diff --git a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskDetailTraceVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskDetailTraceVO.java
similarity index 89%
rename from smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskDetailTraceVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskDetailTraceVO.java
index c7ed763..2c77506 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskDetailTraceVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskDetailTraceVO.java
@@ -1,15 +1,15 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
-import com.smartor.domain.ServiceSubtaskDetailTrace;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
/**
* 闅忚浠诲姟寮傚父璁板綍璺熻釜瀵硅薄 service_subtask_detail_trace
diff --git a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskVO.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskVO.java
index 4080fd1..3295b8a 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskVO.java
@@ -1,10 +1,9 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
-import com.smartor.domain.TaskSendTimeVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -13,6 +12,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.TaskSendTimeVO;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級瀵硅薄 ivr_taskcall
diff --git a/smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceTaskmedicalVO.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceTaskmedicalVO.java
index 30b4aec..dfbf077 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceTaskmedicalVO.java
@@ -1,4 +1,4 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
diff --git a/smartor/src/main/java/com/smartor/domain/VO/TransferDeptVO.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/TransferDeptVO.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/domain/VO/TransferDeptVO.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/TransferDeptVO.java
index 61f3576..ada5bb8 100644
--- a/smartor/src/main/java/com/smartor/domain/VO/TransferDeptVO.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/TransferDeptVO.java
@@ -1,9 +1,8 @@
-package com.smartor.domain.VO;
+package com.ruoyi.task.domain.VO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
-import com.smartor.domain.TaskSendTimeVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
diff --git a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java b/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
similarity index 99%
rename from smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
index 90041b1..7b833ac 100644
--- a/smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
@@ -1,9 +1,8 @@
-package com.smartor.domain.entity;
+package com.ruoyi.task.domain.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
-import com.smartor.domain.TaskSendTimeVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -12,6 +11,7 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.TaskSendTimeVO;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級瀵硅薄 ivr_taskcall
diff --git a/smartor/src/main/java/com/smartor/mapper/IvrTaskVisitResultMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/IvrTaskVisitResultMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/IvrTaskVisitResultMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/IvrTaskVisitResultMapper.java
index a64def9..14b193f 100644
--- a/smartor/src/main/java/com/smartor/mapper/IvrTaskVisitResultMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/IvrTaskVisitResultMapper.java
@@ -1,9 +1,9 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.IvrTaskVisitResult;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
/**
* 浠诲姟闅忚缁撴灉Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceOutPathMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceOutPathMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceOutPathMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceOutPathMapper.java
index a248dc2..0193a6d 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceOutPathMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceOutPathMapper.java
@@ -1,9 +1,9 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
-import com.smartor.domain.ServiceOutPath;
+import com.ruoyi.task.domain.ServiceOutPath;
/**
* 涓婚敭Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailMapper.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailMapper.java
index dff42ec..6999280 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailMapper.java
@@ -1,14 +1,14 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
-import com.smartor.domain.ServiceSubtaskDetail;
-import com.smartor.domain.ServiceSubtaskDetailTarget;
-import com.smartor.domain.ServiceSubtaskDetailVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTarget;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
/**
* 璇煶浠诲姟鍛煎彨鏄庣粏Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailTraceMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailTraceMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailTraceMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailTraceMapper.java
index a13006a..bb9413f 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailTraceMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailTraceMapper.java
@@ -1,13 +1,13 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
import java.util.Map;
-import com.smartor.domain.VO.DetailTraceDealVO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
-import com.smartor.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.DetailTraceDealVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
/**
* 闅忚浠诲姟寮傚父璁板綍璺熻釜Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
index 3536346..e23f262 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
@@ -1,9 +1,6 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.*;
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
-import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -14,6 +11,15 @@
import com.ruoyi.common.core.service.dto.PatMedReq;
import com.ruoyi.common.core.service.dto.PatMedRes;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceStatisticsRequest;
+import com.ruoyi.task.domain.ServiceStatisticsResponse;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskCount;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
+import com.ruoyi.task.domain.ServiceSubtaskStatistic;
+import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Mapper鎺ュ彛
*
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskMapper.java
index 8a9255d..d26cd67 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskMapper.java
@@ -1,9 +1,9 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
-import com.smartor.domain.ServiceTask;
import org.apache.ibatis.annotations.Mapper;
+import com.ruoyi.task.domain.ServiceTask;
/**
* 璇煶浠诲姟Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskRuleMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskRuleMapper.java
similarity index 95%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskRuleMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskRuleMapper.java
index 1278647..4ef7d90 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskRuleMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskRuleMapper.java
@@ -1,8 +1,8 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
-import com.smartor.domain.ServiceTaskRule;
+import com.ruoyi.task.domain.ServiceTaskRule;
/**
* 浠诲姟鎵ц瑙勫垯Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleDetailMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleDetailMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleDetailMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleDetailMapper.java
index dc307f4..ab4d8a6 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleDetailMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleDetailMapper.java
@@ -1,10 +1,10 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.ServiceTaskScheduleDetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
/**
* 闅忚浠诲姟璁″垝鏄庣粏 Mapper 鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleMapper.java
index fcd42e4..fca7941 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskScheduleMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleMapper.java
@@ -1,10 +1,10 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.ServiceTaskSchedule;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
/**
* 闅忚浠诲姟璁″垝涓昏〃 Mapper 鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskdeptMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdeptMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskdeptMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdeptMapper.java
index 7b7a5e5..fc38e78 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskdeptMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdeptMapper.java
@@ -1,9 +1,9 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.ServiceTaskdept;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskdept;
/**
* 妯℃澘绉戝鍏宠仈Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskdiagMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdiagMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskdiagMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdiagMapper.java
index 89a065a..9480489 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskdiagMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdiagMapper.java
@@ -1,8 +1,8 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
-import com.smartor.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskdiag;
/**
* 妯℃澘绉戝鍏宠仈Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskmedicalMapper.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskmedicalMapper.java
index eefe2f7..f634199 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskmedicalMapper.java
@@ -1,10 +1,10 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
-import com.smartor.domain.ServiceTaskmedical;
-import com.smartor.domain.VO.ServiceTaskmedicalVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.VO.ServiceTaskmedicalVO;
/**
* 浠诲姟鑽搧鍏宠仈Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceTaskoperMapper.java b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskoperMapper.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/mapper/ServiceTaskoperMapper.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskoperMapper.java
index f5c34f5..cd50c99 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceTaskoperMapper.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskoperMapper.java
@@ -1,8 +1,8 @@
-package com.smartor.mapper;
+package com.ruoyi.task.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
-import com.smartor.domain.ServiceTaskoper;
+import com.ruoyi.task.domain.ServiceTaskoper;
/**
* 妯℃澘绉戝鍏宠仈Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceOutPathService.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/IServiceOutPathService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceOutPathService.java
index fb50d31..ed99b25 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceOutPathService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceOutPathService.java
@@ -1,7 +1,7 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import java.util.List;
-import com.smartor.domain.ServiceOutPath;
+import com.ruoyi.task.domain.ServiceOutPath;
/**
* 涓婚敭Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailService.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailService.java
index c917f84..9de51b5 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailService.java
@@ -1,11 +1,11 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
-import com.smartor.domain.ServiceSubtaskDetail;
-import com.smartor.domain.ServiceSubtaskDetailTarget;
-import com.smartor.domain.ServiceSubtaskDetailVO;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTarget;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
/**
* 璇煶浠诲姟鍛煎彨鏄庣粏Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailTraceService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailTraceService.java
similarity index 89%
rename from smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailTraceService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailTraceService.java
index 08a7075..d5bfde1 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailTraceService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailTraceService.java
@@ -1,13 +1,12 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import java.util.List;
import java.util.Map;
-import com.smartor.domain.DTO.DetailTraceDealDTO;
-import com.smartor.domain.ServiceSubtaskDetailTrace;
-import com.smartor.domain.VO.DetailTraceDealVO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
import org.springframework.web.bind.annotation.RequestBody;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.DetailTraceDealVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
/**
* 闅忚浠诲姟寮傚父璁板綍璺熻釜Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
similarity index 80%
rename from smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
index 79b69a8..3fc864d 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
@@ -1,10 +1,6 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import com.ruoyi.common.core.domain.AjaxResult;
-import com.smartor.domain.*;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.VO.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Date;
@@ -13,6 +9,23 @@
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
import com.ruoyi.template.domain.IvrTaskTemplateTargetoption;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceStatisticsRequest;
+import com.ruoyi.task.domain.ServiceStatisticsResponse;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskCount;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
+import com.ruoyi.task.domain.ServiceSubtaskStatistic;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
+import com.ruoyi.task.domain.PatArchiveSrmVO;
+import com.ruoyi.task.domain.ServiceSubtaskDiagname;
+import com.ruoyi.task.domain.ServiceSubtaskIsAbnormalStatistic;
+import com.ruoyi.task.domain.ServiceSubtaskRes;
+import com.ruoyi.task.domain.ServiceSubtaskTemplateVO;
+import com.ruoyi.task.domain.ServiceTaskVO;
+import com.ruoyi.task.domain.VO.TransferDeptVO;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Service鎺ュ彛
*
@@ -118,40 +131,17 @@
public Map<String, Integer> insertOrUpdateTask(ServiceTaskVO ivrTaskVO);
- /**
- * 鐢佃瘽鍥炶皟浠诲姟
- *
- * @param phoneCallBackVO
- * @return 缁撴灉
+ /*
+ * ------------------------------------------------------------------
+ * 鐢佃瘽鐩稿叧鐨� 7 涓柟娉曪紙phoneCallBack / phoneCallBackYQ / getFirstQues /
+ * processResust / taskPull / saveQuestionAnswerPhone / recordAccept锛�
+ * 宸查殢鐢佃瘽妯″潡鍖栨暣浣撴惉杩� ruoyi-phone锛�
+ * 鎺ュ彛 -> com.ruoyi.phone.service.IPhoneService
+ * 瀹炵幇 -> com.ruoyi.phone.service.impl.PhoneServiceImpl
+ * 瀵瑰 -> com.ruoyi.phone.api.PhoneFacade锛堝叾瀹冩ā鍧椾粠杩欓噷璋冪數璇濊兘鍔涳級
+ * URL 淇濇寔涓嶅彉锛岀嚎涓婄數璇濆钩鍙版棤闇�鏀瑰姩銆�
+ * ------------------------------------------------------------------
*/
- public void phoneCallBack(PhoneCallBackVO phoneCallBackVO);
-
- /**
- * 鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)
- *
- * @param phoneCallReqYQVO
- * @return 缁撴灉
- */
- public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO);
-
- public PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO);
-
- public PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallReqYQVO);
-
-
-
-
- /**
- * 闆ㄧ划浠诲姟鎷夊彇
- *
- * @return
- */
- public List<PullTaskVO> taskPull();
-
-
- public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq);
-
- public Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO);
/**
* 鑾峰彇闅忚銆佸璇婇噺
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskScheduleService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskScheduleService.java
similarity index 88%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskScheduleService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskScheduleService.java
index 638cc09..18f9d7d 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskScheduleService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskScheduleService.java
@@ -1,10 +1,10 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
-import com.smartor.domain.ServiceTaskSchedule;
-import com.smartor.domain.ServiceTaskScheduleDetail;
-import com.smartor.domain.ServiceTaskScheduleVO;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.domain.ServiceTaskScheduleVO;
/**
* 闅忚浠诲姟璁″垝 Service 鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskService.java
similarity index 93%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskService.java
index 21bda1a..d1e39a6 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskService.java
@@ -1,12 +1,12 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import java.util.List;
import java.util.Map;
import com.ruoyi.template.domain.IvrLibaTemplateScriptVO;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.ServiceTask;
import com.ruoyi.template.domain.SvyLibTemplateScriptVO;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
/**
* 璇煶浠诲姟Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskdeptService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdeptService.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskdeptService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdeptService.java
index 3b46731..02885e9 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskdeptService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdeptService.java
@@ -1,8 +1,8 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
-import com.smartor.domain.ServiceTaskdept;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskdept;
/**
* 妯℃澘绉戝鍏宠仈Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskdiagService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdiagService.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskdiagService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdiagService.java
index e6b3517..996635b 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskdiagService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdiagService.java
@@ -1,7 +1,7 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import java.util.List;
-import com.smartor.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskdiag;
/**
* 妯℃澘绉戝鍏宠仈Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskmedicalService.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskmedicalService.java
index ac71d68..b91a466 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskmedicalService.java
@@ -1,9 +1,9 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
-import com.smartor.domain.ServiceTaskmedical;
-import com.smartor.domain.VO.ServiceTaskmedicalVO;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.VO.ServiceTaskmedicalVO;
/**
* 浠诲姟鑽搧鍏宠仈Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskoperService.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskoperService.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/IServiceTaskoperService.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskoperService.java
index a0312a5..384c58d 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskoperService.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskoperService.java
@@ -1,7 +1,7 @@
-package com.smartor.service;
+package com.ruoyi.task.service;
import java.util.List;
-import com.smartor.domain.ServiceTaskoper;
+import com.ruoyi.task.domain.ServiceTaskoper;
/**
* 妯℃澘绉戝鍏宠仈Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceOutPathServiceImpl.java
similarity index 93%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceOutPathServiceImpl.java
index a020da7..f8cce0d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceOutPathServiceImpl.java
@@ -1,19 +1,19 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.StringUtils;
-import com.smartor.domain.ServiceOutPath;
-import com.smartor.domain.ServiceTask;
-import com.smartor.mapper.ServiceOutPathMapper;
-import com.smartor.mapper.ServiceTaskMapper;
-import com.smartor.service.IServiceOutPathService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.mapper.ServiceOutPathMapper;
+import com.ruoyi.task.service.IServiceOutPathService;
/**
* 涓婚敭Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailServiceImpl.java
similarity index 95%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailServiceImpl.java
index f96a3d0..d4a77d8 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailServiceImpl.java
@@ -1,15 +1,9 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.smartor.domain.*;
-import com.smartor.domain.ServiceSubtaskDetail;
-import com.smartor.mapper.ServiceSubtaskDetailMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.service.IServiceSubtaskDetailService;
-import com.smartor.service.IServiceTaskService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +13,15 @@
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTarget;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.service.IServiceSubtaskDetailService;
+import com.ruoyi.task.service.IServiceTaskService;
/**
* 璇煶浠诲姟鍛煎彨鏄庣粏Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailTraceServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
index 05ec8fd..e32bc4c 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
@@ -1,4 +1,4 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import java.util.*;
import java.util.stream.Collectors;
@@ -7,16 +7,16 @@
import com.github.pagehelper.util.StringUtil;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.smartor.domain.*;
-import com.smartor.domain.DTO.DetailTraceDealDTO;
-import com.smartor.domain.VO.DetailTraceDealVO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.mapper.ServiceSubtaskDetailMapper;
-import com.smartor.mapper.ServiceSubtaskDetailTraceMapper;
-import com.smartor.service.*;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.domain.DTO.DetailTraceDealDTO;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.DetailTraceDealVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailTraceMapper;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
/**
* 闅忚浠诲姟寮傚父璁板綍璺熻釜Service涓氬姟灞傚鐞�
@@ -32,12 +32,9 @@
@Autowired
private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
-
-
- @Autowired
- private ISvyLibTemplateScriptService isvyLibTemplateScriptService;
-
-
+ // 璇存槑锛氬師瀹炵幇閲岃繕娉ㄥ叆浜嗕竴涓� smartor 鐨� ISvyLibTemplateScriptService锛�
+ // 浣嗗叏绫讳粠鏈娇鐢紙姝绘敞鍏ワ級銆傞殢鏈被鎼叆 ruoyi-task 鏃跺垹闄� 鈥斺��
+ // 淇濈暀瀹冧細璁� ruoyi-task 鍙嶅悜渚濊禆 smartor锛屽舰鎴愮‖寰幆銆�
/**
* 鏌ヨ闅忚浠诲姟寮傚父璁板綍璺熻釜
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
similarity index 63%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
index 734aca1..18d40e8 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -1,4 +1,4 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
@@ -20,28 +20,13 @@
import com.ruoyi.message.sms.SmsSenderFactory;
import com.ruoyi.message.wechat.WechatSendRequest;
import com.ruoyi.message.wechat.WechatSenderFactory;
-import com.ruoyi.system.domain.SysConfig;
-import com.ruoyi.system.mapper.SysConfigMapper;
-import com.ruoyi.system.service.ISysConfigService;
-import com.smartor.common.FtpService;
-import com.smartor.common.ScheduleSubtaskBuilder;
-import com.ruoyi.common.utils.PhoneUtils;
-import com.smartor.domain.DTO.*;
-import com.smartor.domain.*;
-import com.smartor.domain.VO.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.mapper.*;
-import com.smartor.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
-import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.Cacheable;
-import org.springframework.data.redis.core.ListOperations;
-import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
@@ -57,8 +42,6 @@
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -75,9 +58,7 @@
import com.ruoyi.template.domain.IvrTaskTemplateScriptVO;
import com.ruoyi.template.domain.IvrTaskTemplateTargetoption;
import com.ruoyi.template.domain.IvrTaskTemplateVO;
-import com.smartor.domain.IvrTaskVisitResult;
import com.ruoyi.template.mapper.IvrTaskTemplateTargetoptionMapper;
-import com.smartor.mapper.IvrTaskVisitResultMapper;
import com.ruoyi.template.service.IIvrTaskTemplateScriptService;
import com.ruoyi.template.service.IIvrTaskTemplateService;
import com.ruoyi.template.service.IIvrTaskTemplateTargetoptionService;
@@ -92,6 +73,57 @@
import com.ruoyi.template.service.ISvyTaskTemplateScriptService;
import com.ruoyi.template.service.ISvyTaskTemplateService;
import static cn.hutool.core.convert.Convert.toHex;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceStatisticsRequest;
+import com.ruoyi.task.domain.ServiceStatisticsResponse;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskCount;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
+import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
+import com.ruoyi.task.domain.ServiceSubtaskStatistic;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.mapper.ServiceOutPathMapper;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.api.spi.TaskArchivePort;
+import com.ruoyi.task.api.spi.TaskFtpPort;
+import com.ruoyi.task.api.spi.TaskSysConfigPort;
+import com.ruoyi.task.api.spi.TaskSysDeptPort;
+import com.ruoyi.task.common.ScheduleSubtaskBuilder;
+import com.ruoyi.task.domain.ServiceTaskScheduleVO;
+import com.ruoyi.task.service.IServiceSubtaskService;
+import com.ruoyi.task.service.IServiceTaskScheduleService;
+import com.ruoyi.task.service.IServiceTaskService;
+import com.ruoyi.task.service.IServiceTaskdeptService;
+import com.ruoyi.task.service.IServiceTaskdiagService;
+import com.ruoyi.task.service.IServiceTaskmedicalService;
+import com.ruoyi.task.service.IServiceTaskoperService;
+import com.ruoyi.task.domain.PatArchiveSrmVO;
+import com.ruoyi.task.domain.PatTaskRelevance;
+import com.ruoyi.task.domain.SendMagParam;
+import com.ruoyi.task.domain.ServiceSubtaskDiagname;
+import com.ruoyi.task.domain.ServiceSubtaskIsAbnormalStatistic;
+import com.ruoyi.task.domain.ServiceSubtaskRes;
+import com.ruoyi.task.domain.ServiceSubtaskTemplateVO;
+import com.ruoyi.task.domain.ServiceTaskVO;
+import com.ruoyi.task.domain.VO.TransferDeptVO;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Service涓氬姟灞傚鐞�
@@ -134,7 +166,7 @@
private ServiceSubtaskMapper serviceSubtaskMapper;
@Autowired
- private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+ private TaskPreachformPort taskPreachformPort;
@Autowired
private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
@@ -144,9 +176,6 @@
@Autowired
private IvrTaskTemplateTargetoptionMapper serviceTaskScriptTargetoptionMapper;
-
- @Autowired
- private IvrTaskVisitResultMapper serviceTaskVisitResultMapper;
@Autowired
private IServiceTaskdeptService serviceTaskdeptService;
@@ -184,45 +213,30 @@
private IServiceOutPathService iServiceOutPathService;
@Autowired
- private IServiceSubtaskDetailTraceService traceService;
-
- @Autowired
private IServiceTaskScheduleService serviceTaskScheduleService;
@Autowired
- private IPatArchiveService patArchiveService;
+ private TaskArchivePort taskArchivePort;
@Autowired
private ScheduleSubtaskBuilder scheduleSubtaskBuilder;
@Autowired
- private FtpService ftpService;
+ private TaskFtpPort taskFtpPort;
- @Autowired
- private PatArchiveMapper patArchiveMapper;
@Autowired
private SvyLibScriptCategoryMapper svyLibScriptCategoryMapper;
- @Autowired
- private IPatMedInhospService patMedInhospService;
-
- @Value("${pri_key}")
- private String pri_key;
@Value("${pub_key}")
private String pub_key;
- @Value("${ASRCallBackPath}")
- private String ASRCallBackPath;
@Autowired
- private ISysConfigService configService;
-
- @Autowired
- private SysConfigMapper sysConfigMapper;
+ private TaskSysConfigPort taskSysConfigPort;
/**
* 娑堟伅鍙戦�佹柟宸ュ巶锛堢煭淇�/寰俊鍏紬鍙凤級锛屾浛浠e師鏉ョ洿鎺ヨ皟鐢ㄥ悇绔欑偣鍙戦�佷唬鐮佺殑鍐欐硶
@@ -233,36 +247,15 @@
@Autowired
private WechatSenderFactory wechatSenderFactory;
- @Autowired
- private RedisTemplate redisTemplate;
-
- @Value("${hangup}")
- private String hangup;
-
- @Value("${app_key_yq}")
- private String app_key_yq;
-
- @Value("${ruoyi.profile}")
- private String profile;
-
- @Value("${voicePathPrefix}")
- private String voicePathPrefix;
-
@Value("${localIP}")
private String localIP;
@Value("${req_path}")
private String req_path;
- @Value("${phoneUpEveryHour}")
- private Integer phoneUpEveryHour;
- @Value("${phoneEndHour}")
- private Integer phoneEndHour;
@Autowired
- private IPatMedOuthospService patMedOuthospService;
- @Autowired
- private SysDept2Mapper sysDept2Mapper;
+ private TaskSysDeptPort taskSysDeptPort;
@Value("${spring.profiles.active}")
private String active;
@@ -374,7 +367,7 @@
} catch (JsonProcessingException e) {
e.printStackTrace();
}
- List<ServiceSubtaskPreachform> serviceSubtaskPreachformLists = serviceSubtaskPreachformMapper.selectBySubtask(serviceSubtask);
+ List<ServiceSubtaskPreachform> serviceSubtaskPreachformLists = taskPreachformPort.selectBySubtask(serviceSubtask);
for (ServiceSubtask serviceSubtask1 : list) {
PatTaskRelevance patTaskRelevance = new PatTaskRelevance();
if (!serviceSubtask1.getHospType().equals("2")) {
@@ -495,7 +488,7 @@
}
PatMedInhosp inhosp = inhospVisitFacade.selectPatMedInhospByInhospid(serviceSubtask.getInhospid());
if (ObjectUtils.isNotEmpty(inhosp)) {
- PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(inhosp.getPatid());
+ PatArchive patArchive = taskArchivePort.findByPatid(inhosp.getPatid());
if (ObjectUtils.isNotEmpty(patArchive)) {
Map<String, String> stringStringMap = calculateAge(patArchive.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
serviceSubtaskRes.setAge(StringUtils.isNotEmpty(stringStringMap.get("age")) ? Long.valueOf(stringStringMap.get("age")) : null);
@@ -524,7 +517,7 @@
//鎮h�呰幏鍙栭殢璁夸换鍔�-闇�瑕佹煡璇㈠悓涓偅鑰咃紙韬唤璇侊級鎵�鏈夌殑浠诲姟 鏅畞
if (StringUtils.isNotEmpty(serviceSubtaskEntity.getOrgid()) && serviceSubtaskEntity.getOrgid().equals("47255004333112711A1001")) {
if (ObjectUtils.isNotEmpty(serviceSubtaskEntity.getPatid())) {
- PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtaskEntity.getPatid());
+ PatArchive patArchive = taskArchivePort.findByPatid(serviceSubtaskEntity.getPatid());
if (ObjectUtils.isNotEmpty(patArchive) && StringUtils.isNotEmpty(patArchive.getIdcardno())) {
serviceSubtaskEntity.setPatid(null);
serviceSubtaskEntity.setSfzh(patArchive.getIdcardno());
@@ -827,7 +820,7 @@
patMedInhosp.setPatid(serviceSubtask1.getPatid());
patMedInhosp.setInhospstate("0");
List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
- PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(serviceSubtask1.getPatid());
+ PatArchive patArchive = taskArchivePort.findByPatid(serviceSubtask1.getPatid());
//鏅畞 鏂板鍐嶆闅忚涓嶈兘瑙﹀彂鎮h�呭啀鍏ラ櫌
boolean inhospAgain = true;
if (serviceSubtask1.getOrgid().equals("47255004333112711A1001")) {
@@ -1001,7 +994,7 @@
}
serviceTask.setLeaveldeptcodes(serviceTaskVO.getLeaveldeptcodes());
if (StringUtils.isEmpty(serviceTask.getLeavehospitaldistrictname()) && StringUtils.isNotEmpty(serviceTask.getLeavehospitaldistrictcode())) {
- SysDept sysDept = sysDept2Mapper.selectDeptByCode(serviceTask.getLeavehospitaldistrictcode(), null);
+ SysDept sysDept = taskSysDeptPort.selectDeptByCode(serviceTask.getLeavehospitaldistrictcode(), null);
serviceTask.setLeavehospitaldistrictname(sysDept.getDeptName());
}
if (serviceTaskVO.getLongTask() == 1) serviceTask.setSendState(2L);
@@ -1230,7 +1223,7 @@
serviceSubtaskPreachform.setSendstate("1");
serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid());
serviceSubtaskPreachform.setCreateTime(new Date());
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+ taskPreachformPort.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
}
}
}
@@ -1283,7 +1276,7 @@
if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
PatMedOuthosp patMedOuthosp = patMedOuthosps.get(0);
patMedOuthosp.setServerState("0");
- patMedOuthospService.updatePatMedOuthosp(patMedOuthosp);
+ outhospDataFacade.update(patMedOuthosp);
}
}
} else if (serviceSubtask.getServiceType().equals("19")) {
@@ -1599,7 +1592,7 @@
List<ServiceSubtask> ssTaskList = serviceSubtaskMapper.selectServiceSubtaskBySendstate(ssVo);
for (int i = 0; i < ssTaskList.size(); i++) {
ServiceSubtask serviceSubtask = ssTaskList.get(i);
- serviceSubtaskPreachformMapper.deleteServiceSubtaskPreachformBySubid(serviceSubtask.getId());
+ taskPreachformPort.deleteServiceSubtaskPreachformBySubid(serviceSubtask.getId());
if (StringUtils.isNotEmpty(serviceTaskVO.getPreachformList())) {
List<Map<String, Object>> pfList = serviceTaskVO.getPreachformList();
for (Map<String, Object> map : pfList) {
@@ -1613,7 +1606,7 @@
serviceSubtaskPreachform.setSendstate("1");
serviceSubtaskPreachform.setOrgid(serviceTask.getOrgid());
// serviceSubtaskPreachform.setSort(Long.valueOf(i));
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+ taskPreachformPort.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
}
}
}
@@ -1621,1239 +1614,6 @@
Map<String, Integer> map = new HashMap<>();
map.put("taskId", serviceTask.getTaskid().intValue());
return map;
- }
-
- @Override
- public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
- phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
- SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
-
- //鑾峰彇鏁版嵁
- Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
- if (!aBoolean) {
- throw new BaseException("璇uid涓嶅瓨鍦�");
- }
- Integer hangupValue = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "hangup");
- PhoneUtils phoneUtils = new PhoneUtils();
- if (hangupValue != null && hangupValue == 1) {
- String date = simpleDateFormat1.format(new Date());
- log.info("鐢佃瘽瑕佹寕鏂簡: {}", date);
- //hangupValue == 1 闅忚缁撴潫锛岀洿鎺ュ彲浠ユ寕鐢佃瘽
- phoneUtils.hangup("", "", "", "", "", "", "", phoneCallBackVO.getUuid());
- return;
- }
-
- Map<String, Object> map = redisCache.getCacheObject(phoneCallBackVO.getUuid());
- ServiceSubtask serviceSubtask = (ServiceSubtask) map.get("ServiceSubtask");
- List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOs = (List<IvrTaskTemplateScriptVO>) map.get("IvrTaskTemplateScriptVO");
- //灏唘uid鏇存柊鍒版暟鎹簱涓�
- serviceSubtask.setSenduuid(phoneCallBackVO.getUuid());
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
- //鑾峰彇妯℃澘淇℃伅
- IvrTaskTemplateVO ivrTaskTemplateVO = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "IvrTaskTemplateVO");
-
- //璇煶璇嗗埆缁撴灉涓婃姤鎺ュ彛: 3
- Integer noVoice = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "noVoice");
- QuestionMessage returnQues = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
- //灏嗕紶鍥炵殑缁撴灉鏀惧埌鍥炲瀵硅薄涓�
- returnQues.setContent(phoneCallBackVO.getTextResult());
-
- IvrTaskTemplateScriptVO nowQuestion = returnQues.getNowQuestion();
-
- if (StringUtils.isEmpty(returnQues.getContent())) {
- //鏃犲洖璇�
- //鍒ゆ柇noVoice鏄惁宸茬粡鍒颁簡鏈�澶у��
- if (noVoice == ivrTaskTemplateVO.getNoVoiceNum().intValue()) {
- //宸茬粡闂簡瀵瑰簲鐨勯亶鏁帮紝灏卞垽鏂槸鍚﹁繕鏈変笅涓�棰�
- if (nowQuestion.getTargetid() == IvrTaskTemplateScriptVOs.size()) {
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(5L);
- ss.setRemark("鐢佃瘽鏃犲搷搴�");
- serviceSubtaskMapper.updateServiceSubtask(ss);
- //娌℃湁涓嬩竴棰樹簡锛屽氨鎸傛柇鐢佃瘽锛屾挱鏀剧粨鏉熻
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
- phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
- return;
- } else {
- //鏈変笅涓�棰�
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
- IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
- // 闂锛� 鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
- String date = simpleDateFormat1.format(new Date());
- log.info("鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
- }
- } else {
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", noVoice + 1, 120, TimeUnit.MINUTES);
- //璋冪敤ivrLibaTemplateScriptVO涓殑slienceText(闈欓粯璇濇湳)
- String slienceText = nowQuestion.getSlienceText();
- //闈欓粯璇濇湳 + 闂锛� 鍘昏皟鐢�"tts鍚堟垚鍜屾挱鏀�"鎺ュ彛
- String date = simpleDateFormat1.format(new Date());
- log.info("闈欓粯璇濇湳 + 闂,鍘昏皟鐢╰ts鍚堟垚鍜屾挱鏀炬帴鍙�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
- return;
- }
-
- } else {
- //isppd鐢ㄦ潵璁板綍鏄惁鍖归厤鍒�
- Boolean isppd = false;
- //鏈夊洖璇濓紝瀵瑰洖绛旂殑闂,杩涜姝e垯鍖归厤锛堣繖閲屽彧閽堝閫夋嫨棰橈紝鍏跺畠棰樺瀷涓嶈锛�
- for (int j = 0; j < nowQuestion.getIvrTaskScriptTargetoptionList().size(); j++) {
- //鍖呭惈
- Matcher matcher = null;
- if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex())) {
- Pattern pattern = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex());
- matcher = pattern.matcher(phoneCallBackVO.getTextResult());
- }
- //涓嶅寘鍚�
- Matcher matcher2 = null;
- if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2())) {
- Pattern pattern2 = Pattern.compile(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
- matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
- }
- log.error("PCB--getQuestionText闂涓猴細{},UUID锛歿}", nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
- if (StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
- //璇存槑鍖归厤姝g‘浜�
- //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
- nowQuestion.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
- serviceTaskScriptTargetoptionMapper.updateIvrTaskTemplateTargetoption(nowQuestion.getIvrTaskScriptTargetoptionList().get(j));
-
- //灏嗛潤榛樼疆涓�0
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
-
- //灏嗘偅鑰呯殑鍥炵鍐欒繘琛ㄩ噷
- IvrTaskVisitResult serviceTaskVisitResult = DtoConversionUtils.sourceToTarget(serviceSubtask, IvrTaskVisitResult.class);
- serviceTaskVisitResult.setId(null);
- serviceTaskVisitResult.setQuestion(nowQuestion.getIvrtext());
- serviceTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
- serviceTaskVisitResult.setCreateTime(new Date());
- serviceTaskVisitResult.setOptionResult(nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getTargetvalue());
- serviceTaskVisitResultMapper.insertIvrTaskVisitResult(serviceTaskVisitResult);
-
- //灏嗗尮閰嶅埌鐨勬爣璇嗘敼鎴恡rue
- isppd = true;
-
- //鑾峰彇涓嬩竴棰�
- Long nextQuestion = nowQuestion.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
- for (IvrTaskTemplateScriptVO script : IvrTaskTemplateScriptVOs) {
- if (script.getTargetid() == nextQuestion) {
- QuestionMessage questionMessage = new QuestionMessage();
- questionMessage.setNowQuestion(script);
- questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
- phoneUtils.ttsPlayback(script.getIvrtext(), phoneCallBackVO.getUuid());
- return;
- } else if (nextQuestion > IvrTaskTemplateScriptVOs.size()) {
- //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(6L);
- serviceSubtaskMapper.updateServiceSubtask(ss);
- String date = simpleDateFormat1.format(new Date());
- log.error("娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
- phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- phoneUtils.hangup("", "", ivrTaskTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
- return;
- }
- }
- return;
- } else {
- //娌℃湁鍖归厤涓婂綋鍓峯ption
- //Targetregex2 涓篺alse锛岃〃绀哄湪Targetregex2涓瓨鍦� 璇彞涓殑鍏抽敭瀛楋紝杩欎釜option灏变笉鐢ㄥ啀缁х画鍖归厤浜嗭紝鐩存帴鍖归厤涓嬩竴涓猳ption
- continue;
- }
- }
-
- if (isppd != true) {
- //娌℃湁鍖归厤鍒�
- Integer mateNum = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "mateNum");
- if (mateNum == null) mateNum = 0;
- //鏃犲尮閰嶆鏁板幓鍒ゆ柇鏄惁鍒版渶澶ц闂鏁帮紝骞朵笖鎵�鏈夌殑閫夐」閮藉尮閰嶅畬浜�
- if (mateNum == ivrTaskTemplateVO.getMateNum().intValue()) {
- //濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣
- if (nowQuestion.getTargetid() < IvrTaskTemplateScriptVOs.size()) {
- QuestionMessage questionMessage = new QuestionMessage();
- IvrTaskTemplateScriptVO nextQuestion = getNextQuestion(IvrTaskTemplateScriptVOs, nowQuestion);
- questionMessage.setQuestionList(IvrTaskTemplateScriptVOs);
- questionMessage.setNowQuestion(nextQuestion);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
- String date = simpleDateFormat1.format(new Date());
- log.info("濡傛灉涓嬩竴棰樹负绌�.鍒欐柊鐨勬暟鎹繑鍥�,骞跺姞涓婃劅璋㈣: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- phoneUtils.ttsPlayback(nextQuestion.getIvrtext(), phoneCallBackVO.getUuid());
- return;
- } else {
- //灏卞彲浠ユ寕鏂數璇濅簡
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(6L);
- serviceSubtaskMapper.updateServiceSubtask(ss);
-
- String date = simpleDateFormat1.format(new Date());
- log.info("灏卞彲浠ユ寕鏂數璇濅簡------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
- phoneUtils.ttsPlayback(ivrTaskTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- phoneUtils.hangup("", "", ivrTaskTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
- return;
- }
- } else if (mateNum < ivrTaskTemplateVO.getMateNum().intValue()) {
- //娌℃湁闂埌瑙勫畾娆℃暟
- mateNum = mateNum + 1;
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
- }
- }
- //閫夐」鍖归厤瀹屾垚鍚庯紝闇�瑕佸啀鍘婚�氳繃搴撳啀杩涜鍖归厤涓�娆�
- String extemplateID = ivrTaskTemplateVO.getSubmoduleID();
- String[] split = extemplateID.split(",");
- List<String> list = Arrays.asList(split);
- List<Long> list1 = new ArrayList<>();
- if (StringUtils.isNotEmpty(extemplateID)) {
- for (String str : list) {
- list1.add(Long.valueOf(str));
- }
- List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1);
- for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
- Matcher matcher = null;
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
- Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
- matcher = pattern.matcher(returnQues.getContent());
- }
-
- Matcher matcher2 = null;
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
- Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
- matcher2 = pattern2.matcher(returnQues.getContent());
- }
- log.error("++++++++++++++++++++++++++閫氱敤搴撴槸鍚︿负绌猴細selfRegex : {} , selfRegex2 : {}", ivrLibaExtemplatescript.getSelfRegex(), ivrLibaExtemplatescript.getSelfRegex2());
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
- QuestionMessage questionMessage = redisCache.getCacheObject(phoneCallBackVO.getUuid() + "returnQues");
- IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = returnQues.getNowQuestion();
- ivrTaskTemplateScriptVO.setSubmoduleText(ivrLibaExtemplatescript.getSwitchText());
- ivrTaskTemplateScriptVO.setSubmoduleVoice(ivrLibaExtemplatescript.getSwitchWav());
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
- if (ivrLibaExtemplatescript.getIsEnd() == 1) {
- //灏嗛棶棰樼疆绌�
- IvrTaskTemplateScriptVO nowQuestion1 = questionMessage.getNowQuestion();
- nowQuestion1.setScriptContent(null);
- nowQuestion1.setScriptVoice(null);
- questionMessage.setNowQuestion(nowQuestion1);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "returnQues", questionMessage, 120, TimeUnit.MINUTES);
- redisCache.setCacheObject(phoneCallBackVO.getUuid() + "isOver", 1, 120, TimeUnit.MINUTES);
- }
- //璋冪敤"15銆乼ts鍚堟垚鍜屾挱鏀撅紝 tts_playback"灏嗙粨鏋滀紶鍥�
- String date = simpleDateFormat1.format(new Date());
- log.info("璋冪敤tts鍚堟垚鍜屾挱鏀�------: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- phoneUtils.ttsPlayback(nowQuestion.getIvrtext() + ivrTaskTemplateScriptVO.getSubmoduleText(), phoneCallBackVO.getUuid());
- }
- break;
- }
- String date = simpleDateFormat1.format(new Date());
- log.info("鏈�鍚庣殑淇℃伅鍥炲-: {},uuid涓猴細{}", date, phoneCallBackVO.getUuid());
- phoneUtils.ttsPlayback(nowQuestion.getIvrtext(), phoneCallBackVO.getUuid());
- }
- }
- }
-
- /**
- * 鐢佃瘽ASR閫氳瘽鍥炶皟(闆ㄧ划)
- *
- * @param phoneCallReqYQVO
- */
- @Override
- public PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO) {
- //鍏堟妸璇ubId浠巆ache_exist涓墧闄わ紝鍙鏈夊洖璋冨氨鍓旈櫎锛堢洰鐨勬槸锛屽敖蹇cache-exist涓虹┖锛屽幓缂撳瓨涓嬩竴鎵硅鎵撶殑鐢佃瘽;杩欓噷鍓旈櫎涓嶅奖鍝嶇數璇濈殑姝e父涓氬姟锛�
-// redisCache.removeElementFromList("cache-exist", phoneCallReqYQVO.getTaskid());
-
- //鍒ゆ柇鏄惁鎸傛満
- String hangupState = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- hangup");
- Object cacheObject1 = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
- if (StringUtils.isNotEmpty(hangupState) && hangupState.equals("1") || ObjectUtils.isNotEmpty(cacheObject1) && String.valueOf(cacheObject1).equals("1")) {
- return new PhoneCallBackYQVO();
- }
- if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
- //澶勭悊鎸傛柇
- if (phoneCallReqYQVO.getAsrtext().contains("鎷ㄥ彨鐨勭敤鎴锋蹇�")) {
- //鍒ゆ柇 recordAccept-hungup 鏄惁鏈夊�硷紝濡傛灉鏈夛紝鍒欒鏄庝笉鐢ㄥ鐞嗕簡锛屼箣鍓嶅凡缁忓鐞嗚繃浜嗭紙recordAccept-hungup杩欎釜涓昏鏄粰"閫氳瘽璁板綍鐢ㄧ殑锛�"锛�
- Object cacheObject = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
- if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- setFailPreachForm(serviceSubtask, "3", "鎷ㄥ彨鐨勭敤鎴锋蹇�", "4");
- return new PhoneCallBackYQVO();
- }
- //濡傛灉鍙戦�佺姸鎬佷负6锛屽氨璇存槑宸茬粡鎵撳畬浜嗭紝涔熸病鏈夊繀瑕佺户缁線涓嬭蛋浜�
- if (StringUtils.isNotEmpty(phoneCallReqYQVO.getTaskid())) {
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- if (serviceSubtask.getSendstate() == 6L) return new PhoneCallBackYQVO();
- }
-
- ServiceSubtask serviceSubtask2 = new ServiceSubtask();
- serviceSubtask2.setRemark("鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級");
- serviceSubtask2.setSenduuid(phoneCallReqYQVO.getUuid());
- serviceSubtask2.setId(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask2);
- Map<String, String> req = new HashMap<>();
- req.put("uuid", phoneCallReqYQVO.getUuid());
- req.put("caller", phoneCallReqYQVO.getPhone());
- HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- hangup", "1", 2, TimeUnit.MINUTES);
- //鍏堟妸榛樿鐨剅ecordAccept-hungup鍒犻櫎锛屽啀鏇存柊
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
-
- //璁板綍鐢佃瘽鍙戦�佺姸鎬�
- setFailPreachForm(serviceSubtask2, "3", "鐢佃瘽鍙戦�佹垚鍔燂紙鎮h�呮寕鏂級", "4");
-
- //杩欎釜鏃跺�欏氨闇�瑕佽蛋琛ュ伩鏈哄埗浜嗭紝鍏堟殏瀹氳蛋鐭俊
-// getSmsCompensate(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- return new PhoneCallBackYQVO();
- }
- }
- //瀹氫箟涓�涓垎鏁扮殑鍙橀噺
- Boolean aBoolean1 = redisCache.hasKey(phoneCallReqYQVO.getUuid() + "SCORE");
- if (!aBoolean1) redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", 0.0, 120, TimeUnit.MINUTES);
- PhoneCallBackYQVO phoneCallBackYQVO = new PhoneCallBackYQVO();
- //channel_create 閫氶亾鍒涘缓鐨勬椂鍊欙紝鍙互鎵ц涓�浜涘叾瀹冩搷浣滐紝璀鍙戜釜鐭俊涔嬬被鐨�; 鎴戜滑鐨勪笟鍔″彲浠ヤ笉鐢ㄧ PlayEventCallback 杩欎釜鏄挱鏀捐闊崇殑,鏆傛椂鐢ㄤ笉鍒� End_time()= -1鎴杗ull琛ㄧず褰撳墠鐨刟srtext涓嶆槸涓�鍙ュ畬鏁寸殑璇�
- if (phoneCallReqYQVO.getOperate().equals("channel_create")) {
- return phoneCallBackYQVO;
- }
- //PlayEventCallback 杩欎釜鏄挱鏀捐闊崇殑 playstart锛氭斁闊冲紑濮嬶紙闂鎾姤寮�濮嬶級 playstop锛� 鏀鹃煶缁撴潫锛堥棶棰樻挱鎶ョ粨鏉燂級
- if (phoneCallReqYQVO.getOperate().equals("PlayEventCallback")) {
- String cacheJSY = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "- jsy");
- if (phoneCallReqYQVO.getOperate().equals("PlayEventCallback") && phoneCallReqYQVO.getPlaystop() == false) {
- //鍒ゆ柇redis涓槸鍚︽湁缁撴潫璇�
- if (StringUtils.isEmpty(cacheJSY)) {
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop", false, 120, TimeUnit.MINUTES);
- log.error("PlayEventCallbackPlaystop鐨勫�间负-------锛歿}", false);
- }
- } else {
- //濡傛灉缁撴潫璇笉涓虹┖锛屽垯瑕佹寕鐢佃瘽浜�
- if (StringUtils.isNotEmpty(cacheJSY)) {
- Map<String, String> req = new HashMap<>();
- req.put("uuid", phoneCallReqYQVO.getUuid());
- req.put("caller", phoneCallReqYQVO.getPhone());
-// HttpUtils.sendPost(hangup, new Gson().toJson(req));
- HttpUtil.postJsonRequest(hangup, new Gson().toJson(req));
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- //璁板綍鐢佃瘽鍙戦�佺姸鎬�
- setFailPreachForm(serviceSubtask, "3", "閫氳瘽姝e父缁撴潫", "9");
- //鍒犻櫎缁撴潫璇殑缂撳瓨
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "- jsy");
- } else {
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop", true, 120, TimeUnit.MINUTES);
- log.error("-------PlayEventCallbackPlaystop鐨勫�间负锛歿}", true);
- }
- }
-
- return phoneCallBackYQVO;
- }
- //鑾峰彇鏀鹃煶鏄惁缁撴潫
- Object isPlayEventOverObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- if (ObjectUtils.isNotEmpty(isPlayEventOverObj)) {
- Boolean isPlayEventOver = (Boolean) isPlayEventOverObj;
- if (!isPlayEventOver) {
- return phoneCallBackYQVO;
- }
- }
-
- //閫氳繃瀛愪换鍔D鑾峰彇鍒版ā鏉夸俊鎭�
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
- //鑾峰彇妯℃澘闂
- IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
- ivrTaskTemplateScript.setTemplateID(serviceSubtask.getTemplateid());
- List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
- //鑾峰彇闂ID 鍜� 搴忓彿
- String scriptId = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim());
- log.error("scriptId鏄灏戯細{}", scriptId);
- //褰撳墠棰樼殑淇℃伅
- IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = iIvrTaskTemplateScriptService.getTaskTempScriptInfoByid(Long.valueOf(scriptId));
- //鍒ゆ柇UUID鏄惁瀛樺湪
- Boolean aBoolean = redisCache.hasKey(phoneCallReqYQVO.getUuid());
- if (!aBoolean) {
- //缁欓潤榛樿缃竴涓粯璁ゆ鏁板湪redis涓�
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
- //濡傛灉涓嶅瓨鍦紝灏辨妸褰撳墠鐨刄UID鍋氫负key锛屾斁鍒板璞′腑鍘�
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid(), phoneCallReqYQVO, 120, TimeUnit.MINUTES);
- }
-
- if ("SilentCallback".equals(phoneCallReqYQVO.getOperate())) {
- //濡傛灉鏄潤榛樺洖璋�
- Integer num = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍒ゆ柇闈欓粯鍥炶皟娆℃暟鏄惁灏忎笌妯℃澘瑙勫畾鐨勬鏁�
- if (num < ivrTaskTemplate.getNoVoiceNum()) {
- //灏忎笌鐨勮瘽,灏辩户缁棶鎮h��
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = ivrTaskTemplateScriptVO.getIvrtext();
- log.error("SilentCallback鐨勯棶棰樺唴瀹箂criptContent锛歿}", scriptContent);
- phoneCallBackYQVO.setValue(getObject(serviceSubtask, scriptContent));
- //灏嗛潤榛樻鏁板姞1
- Integer noVoiceNum = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "noVoice");
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "noVoice", noVoiceNum + 1, 120, TimeUnit.MINUTES);
- return phoneCallBackYQVO;
- } else {
- log.error("闈欓粯娆℃暟杈惧埌,鎸傛帀鐢佃瘽锛歿}", num);
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(5L);
- ss.setRemark("鐢佃瘽闈欓粯");
- serviceSubtaskMapper.updateServiceSubtask(ss);
- //澶т笌绛変簬鐨勮瘽,鐩存帴鎸傛柇
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- phoneCallBackYQVO.setValue(serviceTask1.getJsy());
- //灏嗙粨鏋滃啓鍒癲etail涓�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
- //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
- Long id = serviceSubtask.getId();
- //鍏堟洿鏂颁竴涓嬪垎鏁�
- double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setUpdateTime(new Date());
- log.error("鍏堟洿鏂颁竴涓嬪垎鏁�,鐢佃瘽鐨剆erviceSubtask鐨勫�间负锛歿}", serviceSubtask);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "闈欓粯娆℃暟杈惧埌" + num + "娆�", "4");
-
- Map<String, String> map = delRedisValue(null, id.toString());
- if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- }
- return phoneCallBackYQVO;
- } else if ("AsrCallback".equals(phoneCallReqYQVO.getOperate()) && phoneCallReqYQVO.getEnd_time() != null && phoneCallReqYQVO.getEnd_time() != -1) {
- //鍋氫竴涓爣璇嗭紝鐢ㄦ潵鍦ㄩ�氳瘽璇︽儏鎺ュ彛閲岋紝鍒ゆ柇鏄惁鏈変汉鎺ョ數璇濓紙value=2,琛ㄧず鏈変汉鎺ワ級
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup");
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "2", 10, TimeUnit.MINUTES);
- // 鍏堝閫氳瘽杩涜閫氱敤搴撳尮閰嶄竴娆�
- String extemplateID = ivrTaskTemplate.getSubmoduleID();
- if (StringUtils.isNotEmpty(extemplateID)) {
- String[] split = extemplateID.split(",");
- List<String> list = Arrays.asList(split);
- List<Long> list1 = new ArrayList<>();
- for (String str : list) {
- list1.add(Long.valueOf(str));
- }
- List<IvrLibaExtemplatescript> ivrLibaExtemplatescripts = ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(list1);
- IvrLibaExtemplatescript les = null;
- for (IvrLibaExtemplatescript ivrLibaExtemplatescript : ivrLibaExtemplatescripts) {
- Matcher matcher = null;
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex())) {
- Pattern pattern = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex());
- matcher = pattern.matcher(phoneCallReqYQVO.getAsrtext());
- }
-
- Matcher matcher2 = null;
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2())) {
- Pattern pattern2 = Pattern.compile(ivrLibaExtemplatescript.getSelfRegex2());
- matcher2 = pattern2.matcher(phoneCallReqYQVO.getAsrtext());
- }
- if (StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches() && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && matcher2.matches() || StringUtils.isEmpty(ivrLibaExtemplatescript.getSelfRegex2()) && StringUtils.isNotEmpty(ivrLibaExtemplatescript.getSelfRegex()) && matcher.matches()) {
- //灏嗛�氱敤搴撳尮閰嶇殑锛屾斁鍒拌繑鍥炲�间腑
-// phoneCallBackYQVO.setValue(phoneCallBackYQVO.getValue() + ivrLibaExtemplatescript.getSwitchText());
- phoneCallBackYQVO.setCommonValue(ivrLibaExtemplatescript.getSwitchText());
- les = ivrLibaExtemplatescript;
- }
- break;
- }
- log.info("鏄惁闇�瑕佹寕鏈猴細{}", les);
- if (ObjectUtils.isNotEmpty(les)) {
- //瀵瑰尮閰嶇殑缁撴灉澶勭悊涓�涓�(鐪嬬湅鏄笉鏄渶瑕佹寕鏈�)
- if (les.getIsEnd() != null && les.getIsEnd() == 1) {
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(6L);
- ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(ss);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //鍙互鎸傛満浜�
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + les.getSwitchText());
- //灏嗙粨鏋滃啓杩沝etail琛�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ivrTaskTemplateScriptVO.setExtemplateText(les.getSwitchText());
- serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
- return phoneCallBackYQVO;
- }
- }
- }
-
- //濡傛灉鏄枃鏈洖璋�
- //鏍规嵁闂ID鑾峰彇璇ラ棶棰樼殑绫诲瀷
- if (ivrTaskTemplateScriptVO.getScriptType().equals("1")) {
- //鐢ㄦ潵鏍囪锛屾槸鍚︽湁鍖归厤涓婄殑
- Integer flag = 0;
- //1-AI璇嗗埆
- String url = configService.selectConfigByKey("sys.voice.match.ai.url", phoneCallReqYQVO.getOrgid());
-
- if (ObjectUtils.isNotEmpty(url)) {
- PhoneCallBackYQVO aiMatchResult = AiMatch(url, phoneCallReqYQVO, phoneCallBackYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, ivrTaskTemplateScripts, scriptId, flag, phoneCallReqYQVO.getUuid());
- if (aiMatchResult != null) {
- return aiMatchResult;
- }
- } else {
- //鏄�夋嫨棰�
- for (int j = 0; j < ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size(); j++) {
- log.error("phoneCallReqYQVO.getAsrtext()鐨勫�间负锛歿}", phoneCallReqYQVO.getAsrtext());
- if (StringUtils.isEmpty(phoneCallReqYQVO.getAsrtext())) {
- continue;
- }
- boolean matchedFlag = false;
- //鍖呭惈
- Matcher matcher = null;
- if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex())) {
- Pattern pattern = Pattern.compile(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex());
- matcher = pattern.matcher(phoneCallReqYQVO.getAsrtext());
- }
- //涓嶅寘鍚�
- Matcher matcher2 = null;
- if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2())) {
- Pattern pattern2 = Pattern.compile(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2());
- matcher2 = pattern2.matcher(phoneCallReqYQVO.getAsrtext());
- }
-
- if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
- matchedFlag = true;
- }
- //璇存槑鍖归厤姝g‘浜�
- if (matchedFlag) {
- //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
- log.info("鍖归厤姝g‘浜嗗悧--------------");
- ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
- serviceTaskScriptTargetoptionMapper.updateIvrTaskTemplateTargetoption(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j));
-
- //灏嗘偅鑰呯殑鍥炵鍐欒繘service_subtask_detail涓�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ivrTaskTemplateScriptVO.setQuestionResult(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getOptiondesc());
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
-
- //鍒ゆ柇涓�涓嬪綋鍓嶇殑闂鏄笉鏄弧鎰忓害闂锛屽苟涓攄utyDeptCode鏄惁鏈夊�硷紝骞朵笖閫夐」鏄笉鏄紓甯搁�夐」锛屽鏋滃叏绗﹀悎锛屽垯寰�婊℃剰搴﹂棶棰樺紓甯歌〃鏂板
- if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsabnormal()) {
- ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
- //鐢╰askid銆乻ubid鍜宻criptid鍘昏幏鍙杁etailid
- ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
- ssd.setSubId(serviceSubtask.getId());
- ssd.setTaskid(serviceSubtask.getTaskid());
- ssd.setScriptid(StringUtils.isNotEmpty(scriptId) ? Long.valueOf(scriptId) : null);
- List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(ssd);
- subtaskDetailTrace.setDetailId(CollectionUtils.isNotEmpty(serviceSubtaskDetails) ? serviceSubtaskDetails.get(0).getId() : null);
-
- subtaskDetailTrace.setSubId(serviceSubtask.getId());
- subtaskDetailTrace.setTaskid(serviceSubtask.getTaskid());
- subtaskDetailTrace.setTemplateid(ivrTaskTemplateScriptVO.getId());
- subtaskDetailTrace.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
- subtaskDetailTrace.setSwitchid(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getId());
- subtaskDetailTrace.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
- subtaskDetailTrace.setQuestionvoice(null);
- subtaskDetailTrace.setCategoryname(ivrTaskTemplateScriptVO.getScriptAssortname());
- subtaskDetailTrace.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
- //鑾峰彇鎵�鏈夐�夐」
- String optionDescStr = Optional.ofNullable(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()).filter(list -> !list.isEmpty()).map(list -> list.stream().map(IvrTaskTemplateTargetoption::getOptiondesc).filter(Objects::nonNull).collect(Collectors.joining("&"))).orElse("");
- subtaskDetailTrace.setTargetid(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getId());
- subtaskDetailTrace.setTargetvalue(optionDescStr);
- subtaskDetailTrace.setMatchedtext(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getOptiondesc());
- subtaskDetailTrace.setValueType(serviceSubtaskDetails.get(0).getValueType());
- subtaskDetailTrace.setTemplateType(1);
-
- SvyLibScriptCategory svyLibScriptCategory = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryById(ivrTaskTemplateScriptVO.getScriptAssortid());
- subtaskDetailTrace.setType(svyLibScriptCategory.getType());
- subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId());
- subtaskDetailTrace.setAsrtext(phoneCallReqYQVO.getAsrtext());
- subtaskDetailTrace.setRecordpath(phoneCallReqYQVO.getRecordpath());
- subtaskDetailTrace.setPatid(serviceSubtask.getPatid());
- JSONObject patdescJson = new JSONObject();
- patdescJson.put("sendname", serviceSubtask.getSendname());
- patdescJson.put("phone", serviceSubtask.getPhone());
- patdescJson.put("age", serviceSubtask.getAge());
- patdescJson.put("sex", serviceSubtask.getSex() != null ? serviceSubtask.getSex() == 1 ? "鐢�" : "濂�" : null);
- subtaskDetailTrace.setPatdesc(patdescJson.toJSONString());
- subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
- subtaskDetailTrace.setTodeptname(ivrTaskTemplateScriptVO.getDutyDeptName());
- subtaskDetailTrace.setOrgid(serviceSubtask.getOrgid());
- subtaskDetailTrace.setHandleFlag("0");
- subtaskDetailTrace.setGuid(phoneCallReqYQVO.getGuid());
- subtaskDetailTrace.setCreateTime(new Date());
- subtaskDetailTrace.setUpdateTime(new Date());
- subtaskDetailTrace.setOrgid(phoneCallReqYQVO.getOrgid());
- traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
- }
-
- //鍒ゆ柇涓�涓嬶紝杩欎釜閫夐」缁撴灉鏄笉鏄繕鏈夌户缁棶涓嬪幓鐨勫繀瑕侊紝渚嬪閫夐」缁撴灉鏄埆浜轰笉鎯崇户缁洖绛旈棶棰橈紝灏辫缁撴潫鎺�
- if (ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsEnd() == 1) {
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- return phoneCallBackYQVO;
- }
-
- flag = 1;
- //灏嗗綋鍓嶅墠鐨勬挱鎶ョ姸鎬佸垹闄わ紝缁欎笅涓�棰樿浣�
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
-// //鑾峰彇涓嬩竴棰�
- log.error("鑾峰彇涓嬩竴棰樼殑淇℃伅锛歿}", ivrTaskTemplateScriptVO);
- if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1") || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
- Long nextQuestion = null;
- if (ivrTaskTemplateScriptVO.getBranchFlag().equals("1")) {
- nextQuestion = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getNextQuestion();
- //鏇存柊鍒嗘暟
- double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
- } else {
- nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
- //鏇存柊鍒嗘暟
- Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
- score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getScore())).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
- }
- if (nextQuestion == null || nextQuestion == 0L) {
- //濡傛灉涓嬩竴棰樹负绌猴紝鎴栬�呬负0锛屽垯鎸傛満
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(6L);
- ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(ss);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
-
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
- //灏嗙粨鏋滃啓杩沝etail琛�
- ServiceSubTaskDetailReq ssdReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList2 = new ArrayList<>();
- serviceSubtaskDetailList.add(getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate));
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList2);
- ssdReq.setGuid(phoneCallReqYQVO.getGuid());
- ssdReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(ssdReq);
- return phoneCallBackYQVO;
- }
-
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (script.getSort() == nextQuestion.intValue()) {
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
- log.error("涓嬩竴棰橀棶棰橈細{}", scriptContent);
- log.error("涓嬩竴棰樼殑瀛愪换鍔℃槸锛歿}", serviceSubtask);
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
- //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
- //鍒犻櫎鏃犲搷搴�
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- }
- }
- } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- //鏇存柊涓�涓嬪垎鏁�
- double score = 0.0;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setSendstate(6L);
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //璁剧疆缁撴潫璇�
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
- Long id = serviceSubtask.getId();
- Map<String, String> map = delRedisValue(null, id.toString());
- log.error("map鐨勫�间负锛歿}", map);
- if (ObjectUtils.isNotEmpty(map))
- redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
-// return phoneCallBackYQVO;
-
- }
- } else {
- log.info("娌℃湁鍖归厤涓�----------------------------");
- //flag=0,璇存槑娌� 鍖归厤涓婏紝涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵
- if (j == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size() - 1 && flag == 0) {
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
- serviceSubtaskDetailList.get(0).setMatchedtext("");
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
- }
- continue;
- }
- }
- }
- //閮芥病鏈夊尮閰嶅埌
- if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
- log.info("閮芥病鏈夊尮閰嶅埌-------------------------");
- Integer count = null;
- Object countObj = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
- if (count != null && count >= ivrTaskTemplate.getMateNum()) {
- //濡傛灉count宸茬粡澶т簬鎴栫瓑浜庢病鏈夊尮閰嶆鏁�
- if (ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getBranchFlag().equals("0") && ivrTaskTemplateScriptVO.getNextScriptno() == 0 || ivrTaskTemplateScriptVO.getBranchFlag().equals("1") && ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getBranchFlag().equals("1") && ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
- //濡傛灉鏄渶鍚庝竴閬撻锛屾垨鑰呮病鏈変笅涓�棰樹簡锛屽氨鐩存帴鎸傛満
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- if (StringUtils.isNotEmpty(phoneCallBackYQVO.getValue()))
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + phoneCallBackYQVO.getValue() + serviceTask1.getJsy());
- else phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
-
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setSendstate(6L);
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
- Long id = serviceSubtask.getId();
- Map<String, String> map = delRedisValue(null, id.toString());
- if (ObjectUtils.isNotEmpty(map)) {
- redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- }
-// return phoneCallBackYQVO;
- } else {
- //鏍规嵁ivrTaskTemplateScriptVO.getNextScriptno()鑾峰彇涓嬩竴棰樿繘琛屾彁闂�
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
- //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
-
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
-
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
- }
- }
- }
- } else {
- if (count == null)
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), 1, 120, TimeUnit.MINUTES);
- else
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid(), count + 1, 120, TimeUnit.MINUTES);
-
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
- }
- }
-
- } else {
- //涓嶆槸閫夋嫨棰�,鐩存帴璁板綍绛旀锛屽皢缁撴灉鍐欏埌detail涓�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
- // String xh = idSort.split("-")[1];
-
- //濡傛灉閫夐」鍒嗘敮涓�1鐨勮瘽锛屽垯闇�瑕佹牴鎹棶棰樹笂鐨刵extScriptno杩涜璺宠浆
- //闂瓟棰樻病鏈夎烦杞�
- if (ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
- for (IvrTaskTemplateScript ivrTaskTemplateScript1 : ivrTaskTemplateScripts) {
- if (ivrTaskTemplateScriptVO.getNextScriptno().intValue() == ivrTaskTemplateScript1.getSort()) {
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = StringUtils.isNotEmpty(ivrTaskTemplateScript1.getIvrtext()) ? ivrTaskTemplateScript1.getIvrtext() : ivrTaskTemplateScript1.getScriptContent();
-
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- redisCache.setCacheObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone(), ivrTaskTemplateScript1.getId().toString());
-
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getScore())).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
-
- }
- }
- } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
- //娌℃湁涓嬩竴棰樹簡锛屽氨缁撴潫浜�
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
-
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtask.setSendstate(6L);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
- Long id = serviceSubtask.getId();
- Map<String, String> map = delRedisValue(null, id.toString());
- redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask1.getJsy(), 120, TimeUnit.MINUTES);
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- }
- }
- }
- log.error("phoneCallBackYQVO鐨勮繑鍥炲�兼槸锛歿}", phoneCallBackYQVO);
- return phoneCallBackYQVO;
- }
-
- private String getObject(ServiceSubtask serviceSubtask, String scriptContent) {
- Map<String, Map<String, String>> param = getParam(serviceSubtask.getTaskid());
- for (Map<String, String> map : param.values()) {
- for (String key : map.keySet()) {
- scriptContent = scriptContent.replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : "");
- }
- }
- if (StringUtils.isEmpty(scriptContent)) {
- return scriptContent;
- }
- scriptContent = scriptContent.replace("${name}", StringUtils.isNotEmpty(serviceSubtask.getSendname()) ? serviceSubtask.getSendname() : "");
- scriptContent = scriptContent.replace("${dzz}", StringUtils.isNotEmpty(serviceSubtask.getAddr()) ? serviceSubtask.getAddr() : "");
- scriptContent = scriptContent.replace("${phone}", StringUtils.isNotEmpty(serviceSubtask.getTelcode()) ? serviceSubtask.getTelcode() : "");
-
- return scriptContent;
- }
-
- /**
- * 鑾峰彇浠诲姟閲岀殑閫氶厤绗�
- *
- * @param taskId
- * @return
- */
- private Map<String, Map<String, String>> getParam(Long taskId) {
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(taskId);
- ObjectMapper objectMapper = new ObjectMapper();
- Map<String, Map<String, String>> serviceTaskMap = null;
- try {
- serviceTaskMap = objectMapper.readValue(serviceTask.getTextParam(), Map.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
- return serviceTaskMap;
- }
-
- private Map<String, String> delRedisValue(String cache, String id) {
- id = "," + id + ",";
- String val = "";
- String cacheName = "";
- Map<String, String> map = new HashMap<>();
-
- if (StringUtils.isNotEmpty(cache)) {
- val = redisCache.getCacheObject(cache);
- if (!StringUtils.isEmpty(val)) {
- if (val.contains(id)) {
- val = val.replaceAll(id, "");
- }
- }
- map.put("val", val);
- map.put("cacheName", cache);
- return map;
- }
-
- for (int i = 0; i < 6; i++) {
- val = redisCache.getCacheObject("cache-0" + i);
- if (!StringUtils.isEmpty(val)) {
- if (val.contains(id)) {
- val = val.replaceAll(id, "");
- map.put("val", val);
- map.put("cacheName", "cache-0" + i);
- }
- }
- }
- return map;
- }
-
- /**
- * 闆ㄧ划浠诲姟鎷夊彇
- *
- * @return
- */
- @Override
- public List<PullTaskVO> taskPull() {
- //pullTaskVOList鐢ㄤ簬鏁版嵁杩斿洖
- List<PullTaskVO> pullTaskVOList = new ArrayList<>();
- List<String> cacheList = new ArrayList<>();
- ListOperations<String, String> listOps = redisTemplate.opsForList();
- //蹇呴』绛塧che-exist鍏ㄩ儴鎵撳畬鎵嶈兘鎷夊彇涓嬩竴鎵癸紙涓昏鏄�曟墍鏈夌殑鏁版嵁閮藉爢鍦ㄧ數璇濈殑缂撳瓨閲岋紝鍦ㄨ瀹氱殑鏃堕棿鎵撲笉瀹岋級
-// long existSize = listOps.size("cache-exist");
-// if (existSize > 0) return pullTaskVOList;
- int count = 0;
- long size = listOps.size("cache-0");
- log.info("---------鎵撶數璇濅箣鍓嶇紦瀛樹腑鐨勬暟鎹噺锛歿}", size);
- if (size > 0) {
- //phoneCount() 閫氳繃缁欏嚭鐨勬瘡涓皬鏃堕渶瑕佹墦鍑虹殑鐢佃瘽閲忥紝绠楀嚭鍒版櫄涓�8鐐逛竴鐐硅兘鎵撳嚭澶氬皯涓數璇濓紝鑾峰彇鍒版�婚噺
- //濡傛灉闇�瑕佺珛鍗虫墽琛岀殑鏁版嵁閲忓ぇ浜庝竴澶╄鎵ц鐨勪笂闄愶紝鍒欏彧鍙栦笂闄愮殑鏁伴噺锛屽叾瀹冪殑鍒欐斁鍥瀝edis涓�
- count = Math.min(phoneCount(), (int) size);
- if (count != 0) {
- cacheList = listOps.range("cache-0", 0, count - 1);
- } else {
- return null;
- }
- }
-
- log.info("浠诲姟鎷夊彇cache-0鐨勫�兼槸澶氬皯锛歿}", cacheList);
- // cache-0涓虹珛鍗冲彂璧风殑,鍏跺畠鐨勫厛鎺ㄨ繜
- if (!CollectionUtils.isEmpty(cacheList)) {
- pullTaskVOList = getPullTaskList(cacheList, "cache-0");
- // 鍒犻櫎宸插鐞嗙殑鏁版嵁
- listOps.trim("cache-0", count, -1);
- log.info("鎵撶數璇濅箣鍚庣紦瀛樹腑鐨勬暟鎹噺---------锛歿}", listOps.size("cache-0"));
- } else {
- for (int i = 1; i < 6; i++) {
- //鍙栧嚭浠巆ache-1 鍒� cache-5鐨勭涓�涓瓙浠诲姟淇℃伅
- try {
- Long size1 = listOps.size("cache-" + i);
- if (size1 == null || size1 == 0) continue;
- int count1 = Math.min(phoneCount(), size1.intValue());
- List<String> value = listOps.range("cache-0" + i, 0, count1 - 1);
-
- List<PullTaskVO> pullTaskVOList2 = getPullTaskList(value, "cache-" + i);
- if (CollectionUtils.isNotEmpty(pullTaskVOList2) && pullTaskVOList2.size() > 0) {
- pullTaskVOList.addAll(pullTaskVOList2);
- }
- //灏嗗鐞嗚繃鐨勬暟鎹垹闄�
- listOps.trim("cache-0" + i, count1, -1);
- } catch (Exception e) {
-// log.error("鐪嬬潃鐑�");
- }
- }
- }
- //existList鐢ㄦ潵璁板綍鎺ヤ笅鏉ラ渶瑕佹墽琛岀殑瀛愪换鍔D
-// List<String> existList = new ArrayList<>();
- if (CollectionUtils.isNotEmpty(pullTaskVOList)) {
- //缁欏洖璋冨弬鏁拌祴鍊�
- for (PullTaskVO pullTaskVO : pullTaskVOList) {
-// existList.add(pullTaskVO.getTaskid());
- pullTaskVO.setAsrcallback(ASRCallBackPath);
- }
- }
-// if (existList.size() != 0) redisCache.setCacheListRight("cache-exist", existList);
- log.info("-----------瀹為檯鎷夊彇鐨勭數璇濇暟鎹噺锛歿}", CollectionUtils.isNotEmpty(pullTaskVOList) ? pullTaskVOList.size() : null);
- return pullTaskVOList;
- }
-
- private List<PullTaskVO> getPullTaskList(List<String> subIds, String cacheName) {
- log.error("浠诲姟鎷夊彇subIds鐨勫�兼槸澶氬皯锛歿}", subIds);
- //pullTaskVOList鐢ㄤ簬鏁版嵁杩斿洖
- List<PullTaskVO> pullTaskVOList = new ArrayList<>();
- //newValue0鐢ㄤ簬淇濆瓨娌℃湁澶勭悊鐨勫瓙 浠诲姟
-// String newValue0 = "";
- List<String> newValue0 = new ArrayList<>();
- //鏍规嵁,鑾峰彇瀛愪换鍔$殑ID
-// String[] split = subIds.split(",,");
- for (int i = 0; i < subIds.size(); i++) {
- if (cacheName.equals("cache-0") && i < subIds.size() || !cacheName.equals("cache-0") && i < 1) {
- PullTaskVO pullTaskVO = new PullTaskVO();
- String subId = subIds.get(i).trim();
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(subId));
- if (ObjectUtils.isEmpty(serviceSubtask)) {
- log.error("璇ubId鏈夐棶棰橈紝鍦ㄨ〃涓煡璇笉鍒帮細{}", subId);
- continue;
- }
- if (StringUtils.isEmpty(serviceSubtask.getPhone())) {
- serviceSubtask.setRemark("鎵嬫満鍙蜂负绌�");
- serviceSubtask.setSendstate(4L);
- serviceSubtask.setResult("error");
-// serviceSubtask.setFinishtime(new Date());
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- continue;
- }
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
- if (ObjectUtils.isEmpty(ivrTaskTemplate)) continue;
- //閫氳繃浠诲姟妯℃澘涓殑"绗竴娆¢棶棰樼紪鍙�"鑾峰彇绗竴涓棶棰�;
- IvrTaskTemplateScript ivrTaskTemplateScript = null;
- IvrTaskTemplateScript ivrTaskTemplateScript1 = new IvrTaskTemplateScript();
- ivrTaskTemplateScript1.setTemplateID(ivrTaskTemplate.getId());
- List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript1);
- aa:
- for (IvrTaskTemplateScript ivrTaskTemplateScript2 : ivrTaskTemplateScripts) {
- if (ivrTaskTemplate.getFirstQuestionNum() == Long.valueOf(ivrTaskTemplateScript2.getSort())) {
- ivrTaskTemplateScript = ivrTaskTemplateScript2;
- break aa;
- }
- }
- //濡傛灉ivrTaskTemplateScript涓虹┖锛屼篃灏辨病鏈夊線涓嬫墽琛岀殑蹇呰浜�
- if (ObjectUtils.isEmpty(ivrTaskTemplateScript)) {
- log.error("---------杩欎釜ivrTaskTemplate.getId()鐨勯棶棰樹负绌猴細{}", ivrTaskTemplate.getId());
- continue;
- }
- //鑾峰彇閫氶厤绗﹀尮閰嶈繃鍚庣殑闂
- String scriptContent = ivrTaskTemplateScript.getIvrtext();
- if (StringUtils.isEmpty(scriptContent)) scriptContent = ivrTaskTemplateScript.getScriptContent();
- String scrContent = getObject(serviceSubtask, scriptContent);
- String kcb = serviceTask.getKcb() + "," + scrContent;
-
- //灏佽杩斿洖鏁版嵁
- //taskId = 瀛愪换鍔D + 闂ID +闂搴忓彿
- pullTaskVO.setTaskid(subId);
- pullTaskVO.setAppkey(app_key_yq);
- pullTaskVO.setSections(LocalTime.now().format(DateTimeFormatter.ofPattern("hh:mm")) + "-" + LocalTime.now().plusMinutes(1).format(DateTimeFormatter.ofPattern("hh:mm")));
- pullTaskVO.setPhones(serviceSubtask.getPhone());
- pullTaskVO.setPrologue(kcb);
- if (cacheName.equals("cache-0")) pullTaskVO.setDisplayNo("2");
- else pullTaskVO.setDisplayNo("2");
- pullTaskVOList.add(pullTaskVO);
- redisCache.setCacheObject(subId.trim() + "-" + serviceSubtask.getPhone().trim(), ivrTaskTemplateScript.getId().toString(), 120, TimeUnit.MINUTES);
- } else {
- newValue0.add(subIds.get(i));
- redisCache.setCacheListRight(cacheName, newValue0);
- }
- }
-
- return pullTaskVOList;
- }
-
- @Override
- public Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq) {
- int i = 0;
- log.info("淇濆瓨鐢佃瘽鍥炶皟鍐呭 saveQuestionAnswerPhone锛歿}", serviceSubTaskDetailReq);
- if (StringUtils.isNotEmpty(serviceSubTaskDetailReq.getParam1())) {
- RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
- Long tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam1(), pri_key));
- Long pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskDetailReq.getParam2(), pri_key));
- ServiceSubtaskEntity ivrTaskSingle = new ServiceSubtaskEntity();
- ivrTaskSingle.setTaskid(tid);
- ivrTaskSingle.setPatid(pid);
- List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ivrTaskSingle);
- if (CollectionUtils.isEmpty(selectServiceSubtaskList) || selectServiceSubtaskList.size() == 0) {
- log.error("鎶ラ敊浜嗭紝selectServiceSubtaskList鏁版嵁涓虹┖浜嗭細{}", ivrTaskSingle);
- return 0;
- }
- //闅忚
- for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
- if (serviceSubtaskDetail.getScriptid() != null) {
- //璁剧疆涓�涓嬮棶棰樺垎绫�
- IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskDetail.getScriptid());
- if (ivrTaskTemplateScript != null)
- serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScript.getScriptAssortid());
- serviceSubtaskDetail.setIsMydException(ivrTaskTemplateScript.getIsMydException());
- serviceSubtaskDetail.setDimension(ivrTaskTemplateScript.getDimension());
- }
-
- serviceSubtaskDetail.setSubId(selectServiceSubtaskList.get(0).getId());
-// serviceSubtaskDetail.setId(UUID.randomUUID().toString());
- serviceSubtaskDetail.setCreateTime(new Date());
- serviceSubtaskDetail.setGuid(selectServiceSubtaskList.get(0).getGuid());
- serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid());
- serviceSubtaskDetail.setGuid(serviceSubTaskDetailReq.getGuid());
- i = serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
- }
- } else {
- if (serviceSubTaskDetailReq != null && CollectionUtils.isNotEmpty(serviceSubTaskDetailReq.getServiceSubtaskDetailList())) {
- for (ServiceSubtaskDetail serviceSubtaskDetail : serviceSubTaskDetailReq.getServiceSubtaskDetailList()) {
- if (serviceSubtaskDetail.getScriptid() != null) {
- //璁剧疆涓�涓嬮棶棰樺垎绫�
- IvrTaskTemplateScript ivrTaskTemplateScript = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptByID(serviceSubtaskDetail.getScriptid());
- if (ivrTaskTemplateScript != null)
- serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScript.getScriptAssortid());
- }
- serviceSubtaskDetail.setCreateTime(new Date());
- serviceSubtaskDetail.setGuid(serviceSubTaskDetailReq.getGuid());
- serviceSubtaskDetail.setOrgid(serviceSubTaskDetailReq.getOrgid());
- //鍏堟牴鎹瓙浠诲姟id,浠诲姟ID鍜岄棶棰樺簭鍙锋煡璇竴涓嬶紝璇ラ棶棰樻槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈夊�硷紝鐩存帴淇敼锛屽鏋滀负绌猴紝鐩存帴鎻掑叆
- ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
- ssd.setSubId(serviceSubtaskDetail.getSubId());
- ssd.setTaskid(serviceSubtaskDetail.getTaskid());
- ssd.setScriptid(serviceSubtaskDetail.getScriptid());
- if (serviceSubtaskDetail.getSubId() != null) {
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtaskDetail.getSubId());
- ssd.setGuid(serviceSubtask.getGuid());
- ssd.setOrgid(serviceSubtask.getOrgid());
- }
- List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(ssd);
- if (CollectionUtils.isNotEmpty(serviceSubtaskDetails) && StringUtils.isNotEmpty(serviceSubtaskDetails.get(0).getMatchedtext())) {
- serviceSubtaskDetail.setId(serviceSubtaskDetails.get(0).getId());
- serviceSubtaskDetailMapper.updateServiceSubtaskDetail(serviceSubtaskDetail);
- } else {
- if (serviceSubtaskDetail.getSubId() != null) {
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtaskDetail.getSubId());
- serviceSubtaskDetail.setGuid(serviceSubtask.getGuid());
- serviceSubtaskDetail.setOrgid(serviceSubtask.getOrgid());
- }
- i = serviceSubtaskDetailMapper.insertServiceSubtaskDetail(serviceSubtaskDetail);
- }
- }
- }
- }
- return i;
- }
-
- @Override
- public Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO) {
- Object cacheObject = redisCache.getCacheObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
- if (phoneCallRecordVO.getHangup_cause().equals("NO_USER_RESPONSE") || ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("1")) {
- //鏃犱汉鎺ュ惉
- //璁板綍鐢佃瘽鍙戦�佺姸鎬�
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallRecordVO.getTaskid()));
- setFailPreachForm(serviceSubtask, "3", "鏃犱汉鎺ュ惉", "4");
- //杩涜鐭俊琛ュ伩
-// getSmsCompensate(Long.valueOf(phoneCallRecordVO.getTaskid()));
- redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
-// redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
- } else if (ObjectUtils.isNotEmpty(cacheObject) && String.valueOf(cacheObject).equals("2")) {
-// if (phoneCallRecordVO.getAnswered() != null && phoneCallRecordVO.getAnswered() == true) {
- log.error("鏈変汉鎺ョ數璇濅簡锛屽苟涓斿畬浜�");
- //璇存槑鏈変汉鎺ヤ簡
- int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1; // 鍔�1鏄烦杩�/绗﹀彿
- int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
- String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
- ServiceSubtask serviceSubtask = new ServiceSubtask();
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtask.setSendstate(6L);
- serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setUpdateTime(new Date());
- log.error("鐢佃瘽鎷ㄦ墦宸插畬鎴恠erviceSubtask鐨勫�间负:{}", serviceSubtask);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- setFailPreachForm(serviceSubtask, StringUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) ? serviceSubtask.getCurrentPreachform() : "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //涓嬭浇鏂囦欢
- ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
- redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
- } else {
- //鎮h�呮嫆缁濋殢璁�
- //鍏堟妸璇ubId浠巆ache_exist涓墧闄わ紝鍙鏈夊洖璋冨氨鍓旈櫎锛堢洰鐨勬槸锛屽敖蹇cache-exist涓虹┖锛屽幓缂撳瓨涓嬩竴鎵硅鎵撶殑鐢佃瘽;杩欓噷鍓旈櫎涓嶅奖鍝嶇數璇濈殑姝e父涓氬姟锛�
-// redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid());
- ServiceSubtask serviceSubtask = new ServiceSubtask();
- serviceSubtask.setRemark("鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�");
- serviceSubtask.setId(Long.valueOf(phoneCallRecordVO.getTaskid()));
- serviceSubtask.setSendstate(6L);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-// int startIndex = phoneCallRecordVO.getRecord_path().indexOf("voice") + "voice".length() + 1; // 鍔�1鏄烦杩�/绗﹀彿
-// int endIndex = phoneCallRecordVO.getRecord_path().lastIndexOf("/");
-// String result = phoneCallRecordVO.getRecord_path().substring(startIndex, endIndex);
- //涓嬭浇鏂囦欢
-// ftpService.downloadFolder("/" + LocalDate.now().toString(), profile + "/upload/vadio/voice/" + LocalDate.now().toString());
- redisCache.deleteObject(phoneCallRecordVO.getTaskid() + "recordAccept-hungup");
- ServiceSubtask ss = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtask.getId());
- setFailPreachForm(ss, StringUtils.isNotEmpty(ss.getCurrentPreachform()) ? ss.getCurrentPreachform() : "3", "鐢佃瘽鎺ラ�氭垚鍔燂紝鎮h�呮嫆缁濋殢璁�", "5");
- }
-
- return 1;
}
@Override
@@ -4078,163 +2838,6 @@
return serviceSubtaskStatistic;
}
- private IvrTaskTemplateScriptVO getNextQuestion(List<IvrTaskTemplateScriptVO> IvrTaskTemplateScriptVOList, IvrTaskTemplateScriptVO IvrTaskTemplateScriptVO) {
-
- for (int j = 0; j < IvrTaskTemplateScriptVOList.size(); j++) {
- if (IvrTaskTemplateScriptVOList.get(j).getTargetid() == IvrTaskTemplateScriptVO.getTargetid() + 1) {
- // 瀵硅鏉emplateScriptVO杩涜澶勭悊
- return IvrTaskTemplateScriptVOList.get(j);
- }
- }
- return null;
- }
-
- private ServiceSubtaskDetail getServiceSubtaskDetail(PhoneCallReqYQVO phoneCallReqYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate) {
- log.info("-----------------phoneCallReqYQVO鐨勫�间负锛歿}", phoneCallReqYQVO);
-
- ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
- serviceSubtaskDetail.setSubId(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- ServiceSubtask serviceSubtask1 = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
- if (serviceSubtask1 != null) {
- serviceSubtaskDetail.setTaskid(serviceSubtask1.getTaskid());
- serviceSubtaskDetail.setPatid(serviceSubtask1.getPatid());
- }
- serviceSubtaskDetail.setTargetid(ivrTaskTemplateScriptVO.getTargetid() != null ? ivrTaskTemplateScriptVO.getTargetid().intValue() : null);
- serviceSubtaskDetail.setUuid(phoneCallReqYQVO.getUuid());
- serviceSubtaskDetail.setPhone(phoneCallReqYQVO.getPhone());
- serviceSubtaskDetail.setOperate(serviceSubtask.getCreateBy());
- serviceSubtaskDetail.setDisplayno(phoneCallReqYQVO.getPhone());
- serviceSubtaskDetail.setAssigntime(System.currentTimeMillis());
- serviceSubtaskDetail.setStarttime(System.currentTimeMillis());
- serviceSubtaskDetail.setAnswertime(System.currentTimeMillis());
- serviceSubtaskDetail.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
- serviceSubtaskDetail.setAsrtext("鏃犲簲绛�");
- if (StringUtils.isNotEmpty(phoneCallReqYQVO.getAsrtext()))
- serviceSubtaskDetail.setAsrtext(phoneCallReqYQVO.getAsrtext());
- serviceSubtaskDetail.setBeginTime(System.currentTimeMillis());
- serviceSubtaskDetail.setEndTime(System.currentTimeMillis());
- serviceSubtaskDetail.setSentEnd(1L);
- serviceSubtaskDetail.setTemplateid(ivrTaskTemplate.getId().toString());
- serviceSubtaskDetail.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
- serviceSubtaskDetail.setQuestiontext(StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent());
- serviceSubtaskDetail.setQuestionvoice(phoneCallReqYQVO.getRecordpath());
- serviceSubtaskDetail.setCategoryname(ivrTaskTemplateScriptVO.getScriptType());
- serviceSubtaskDetail.setTargetoptions(ivrTaskTemplateScriptVO.getTargetOptions());
- serviceSubtaskDetail.setExtemplateText(ivrTaskTemplateScriptVO.getExtemplateText());
- serviceSubtaskDetail.setScriptid(ivrTaskTemplateScriptVO.getId());
- serviceSubtaskDetail.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
-
- int i = 1;
- for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) {
- if (ivrTaskTemplateTargetoption.getIsUserOperation() == 1) {
- serviceSubtaskDetail.setMatchedtext(ivrTaskTemplateTargetoption.getTargetvalue());
- serviceSubtaskDetail.setScore(ivrTaskTemplateTargetoption.getScore() != null ? ivrTaskTemplateTargetoption.getScore().toString() : "0");
- }
- serviceSubtaskDetail.setTargetvalue(StringUtils.isEmpty(serviceSubtaskDetail.getTargetvalue()) ? ivrTaskTemplateTargetoption.getTargetvalue() : serviceSubtaskDetail.getTargetvalue() + "&" + ivrTaskTemplateTargetoption.getTargetvalue());
- }
-
- serviceSubtaskDetail.setAddtime(new Date());
- serviceSubtaskDetail.setIsupload(0L);
- serviceSubtaskDetail.setUploadTime(new Date());
- serviceSubtaskDetail.setDelFlag("0");
- serviceSubtaskDetail.setValueType(ivrTaskTemplateScriptVO.getScriptType());
- return serviceSubtaskDetail;
- }
-
- /**
- * 鐢佃瘽鐨勮ˉ鍋挎柟娉曪紙鑰侊級
- *
- * @param subTaskId
- */
- private void getSmsCompensate(Long subTaskId) {
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(subTaskId);
- RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
- String taskId = rsaPublicKeyExample.encryptedData(serviceSubtask.getTaskid().toString(), pub_key);
- String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
- String subId = rsaPublicKeyExample.encryptedData(serviceSubtask.getId().toString(), pub_key);
- ServiceOutPath serviceOutPath = new ServiceOutPath();
- serviceOutPath.setParam1(taskId);
- serviceOutPath.setParam2(patid);
- serviceOutPath.setCreateTime(new Date());
- serviceOutPath.setParam6(subId);
- serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- iServiceOutPathService.insertServiceOutPath(serviceOutPath);
- //杞垚16杩涘埗
- String format = String.format("%03X", serviceOutPath.getId());
- String url = "";
- SendMagParam sendMagParam = new SendMagParam();
- url = localIP + ":" + req_path + "/sf?p=" + format;
- sendMagParam.setUrl(url);
- sendMagParam.setContent("銆愭柊鍗庡尰闄€�戞偍濂斤紝閭�璇锋偍濉啓鍑洪櫌闅忚璋冩煡琛紝璇风偣鍑�" + sendMagParam.getUrl() + "濉啓銆傛劅璋㈡偍閰嶅悎锛�");
- serviceOutPath.setRadix(format);
- serviceOutPath.setUpdateTime(new Date());
- serviceOutPath.setUrl(url);
- iServiceOutPathService.updateServiceOutPath(serviceOutPath);
- //鐭俊鍙戦�佸凡鏀跺彛鍒� ruoyi-message 妯″潡锛涗笌鍘熷疄鐜颁竴鑷达細涓嶅垽鏂彂閫佺粨鏋�
- smsSenderFactory.send(active, SmsSendRequest.of(serviceSubtask.getPhone(), sendMagParam.getContent(), serviceSubtask.getOrgid()));
- redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES);
- if (StringUtils.isNotEmpty(serviceSubtask.getRemark()))
- serviceSubtask.setRemark("鐢佃瘽鍙戦�佹嫆鎺�,鐭俊琛ュ伩鍙戦�佹垚鍔�");
- else serviceSubtask.setRemark("鐭俊琛ュ伩鍙戦�佹垚鍔�");
- serviceSubtask.setSendstate(3L);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
-
- //闇�瑕佸湪servicePreachform閲岃褰曚竴涓嬬煭淇$姸鎬�
- ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
- serviceSubtaskPreachform.setPreachform("4");
- serviceSubtaskPreachform.setSubid(subTaskId);
- serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
- serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
- ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
- serviceSubtaskPreachform1.setSendstate("9");
- serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
- } else if (CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
- //濡傛灉涓虹┖鐨勮瘽锛岃鏄庣敤鎴锋病鏈夐�夌煭淇″彂閫佹柟寮忥紝杩欎釜鏃跺�欓渶瑕佸己鍒舵柊澧炰竴鏉�
- //鑾峰彇sort鐨勬渶澶у��
- ServiceSubtaskPreachform ssp = new ServiceSubtaskPreachform();
- ssp.setSubid(subTaskId);
- ssp.setTaskid(serviceSubtask.getTaskid());
- ssp.setOrgid(serviceSubtask.getOrgid());
- List<ServiceSubtaskPreachform> sspf2 = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(ssp);
-
- serviceSubtaskPreachform.setSort(0L);
- if (CollectionUtils.isNotEmpty(sspf2)) {
- serviceSubtaskPreachform.setSort(Long.valueOf(sspf2.size()));
- }
- serviceSubtaskPreachform.setSendstate("2");
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
- }
-
- }
-
- //閫氳繃褰撳墠鏃堕棿锛屾媺鍙栫數璇濇�绘暟
- private Integer phoneCount() {
- // 褰撳墠鏃堕棿
- LocalTime currentTime = LocalTime.now();
- // 鐩爣鏃堕棿锛堟櫄涓� 8 鐐癸級
- LocalTime targetTime = LocalTime.of(phoneEndHour, 0);
-// // 璁$畻褰撳墠鏃堕棿鍒扮洰鏍囨椂闂寸殑鏃堕暱
-// Duration duration = Duration.between(currentTime, targetTime);
-// // 鑾峰彇鍓╀綑鏃堕棿鐨勫皬鏃舵暟
-// long remainingHours = 0;
-// long remainingMinutes = duration.toMinutes();
-// //濡傛灉瓒呰繃8鐐�,灏辫缃负0
-// //璺濈缁撴潫鏃堕棿灏忎簬20鍒嗛挓锛屽氨涓嶆媺鍙栦簡
-// if (remainingMinutes < 20) remainingHours = 0;
-// else if (remainingMinutes < 60 && remainingMinutes > 20) remainingHours = 1;
-// else if (remainingMinutes > 60) remainingHours = remainingMinutes / 60;
-// // 璁$畻鍓╀綑鍙互鎵撶殑鐢佃瘽鏁�
-// int remainingCalls = (int) (remainingHours * phoneUpEveryHour);
-// return remainingCalls;
- if (currentTime.isBefore(targetTime)) {
- //濡傛灉褰撳墠鏃堕棿杩樺湪鎴鏃堕棿鍐咃紝鍒欑户缁彂
- return phoneUpEveryHour;
- }
- return 0;
- }
-
public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq) {
return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq);
}
@@ -4681,83 +3284,6 @@
}
/**
- * @param serviceSubtask
- * @param preachform
- * @param remark
- * @param failSendstate
- * @return
- */
- public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
- log.info("setFailPreachForm 闅忚娴佺▼澶勭悊 serviceSubtask:{}, preachform:{}, remark:{}, failSendstate:{}", serviceSubtask, preachform, remark, failSendstate);
- //灏嗙姸鎬佽缃负澶辫触
- ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
- serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
- serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
- serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
- //鑾峰彇璇ユ偅鑰呯殑鍙戦�佹柟寮忔�绘暟
- List<ServiceSubtaskPreachform> spSize = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
-
- serviceSubtaskPreachform.setPreachform(preachform);
- //1:鏈彂閫佺姸鎬�
- serviceSubtaskPreachform.setSendstate("1");
- if (preachform.equals("3")) {
- //鐢佃瘽杩涘叆闃熷垪鍚庯紝鐘舵�佷細鍙樻垚2
- serviceSubtaskPreachform.setSendstate("2");
- }
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
- ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
- serviceSubtaskPreachform1.setSendstate(failSendstate);
- serviceSubtaskPreachform1.setRemark(remark);
- serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
-
- //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
- if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) {
- serviceSubtask.setCurrentPreachform(preachform);
- serviceSubtask.setSendstate(5L);
- serviceSubtask.setRemark(remark + ";鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- return true;
- } else {
- //鍔犲叆鐩墠琛ュ伩閲岀殑 remark
- serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + remark : remark);
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- }
- }
-
- //灏界澶辫触锛岃繖閲屼篃灏嗗綋鍓嶅彂閫佹柟寮忕户缁缃垚鈥滅數璇濃�濓紝sendstate璁剧疆鎴�3锛涘洜涓簉yTask閲岀殑琛ュ伩鐨勫畾鏃朵换鍔¤繍琛屾椂锛屼細鎵惧埌杩欐潯subtask锛屽苟杩涜澶勭悊
- serviceSubtask.setCurrentPreachform(preachform);
- serviceSubtask.setSendstate(3L);
- //濡傛灉绛変簬9锛屽垯璇存槑鐢佃瘽姝e父缁撴潫浜�
- if (failSendstate.equals("9")) serviceSubtask.setSendstate(6L);
- serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime()));
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- return true;
- }
-
- private Date getNextVisitTime(Long subid, Long taskid, Date visitTime) {
- ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
- serviceSubtaskPreachform.setSubid(subid);
- serviceSubtaskPreachform.setTaskid(taskid);
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
- //娌℃湁闅忚鏃堕棿鍒欐寜褰撳ぉ鏉ョ畻--涓存椂
- if (ObjectUtils.isEmpty(visitTime)) {
- visitTime = new Date();
- }
-
- String compensateTime = serviceSubtaskPreachforms.get(0).getCompensateTime();
- int hoursToAdd = Integer.valueOf(compensateTime) * 24;
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(visitTime);
- calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
- Date newDate = calendar.getTime();
- return newDate;
- }
- return visitTime;
- }
-
- /**
* 璁$畻鎬昏琛�
*
* @param statistics 缁熻鏁版嵁鍒楄〃
@@ -4956,8 +3482,8 @@
public void setFailSubTaskDefalutVal(Long failDay) {
//1.鍏堝幓sys_config涓紝鑾峰彇鍝簺绉戝鎴栫梾鍖洪渶瑕侀粯璁ら棶鍗烽粯璁ゅ��
IConfigService configService = SpringUtils.getBean(IConfigService.class);
- String deptConfigValue = configService.selectConfigByKey("hosp.default.dept");
- String wardConfigValue = configService.selectConfigByKey("hosp.default.ward");
+ String deptConfigValue = taskSysConfigPort.selectConfigValue("hosp.default.dept");
+ String wardConfigValue = taskSysConfigPort.selectConfigValue("hosp.default.ward");
List<String> leaveWard = null;
List<String> leaveDept = null;
if (deptConfigValue != null && !deptConfigValue.isEmpty()) {
@@ -4985,7 +3511,7 @@
Boolean flag = false;
ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+ List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = taskPreachformPort.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms))
preachformSize = serviceSubtaskPreachforms.size();
if (serviceSubtask.getUpdateTime() != null && DateUtils.differentDaysByMillisecond(new Date(), serviceSubtask.getUpdateTime()) >= failDay) {
@@ -5114,12 +3640,13 @@
serviceOutPath.setUpdateTime(new Date());
serviceOutPath.setUrl(url);
iServiceOutPathService.updateServiceOutPath(serviceOutPath);
- SysConfig sysConfig = new SysConfig();
- sysConfig = sysConfigMapper.checkConfigKeyUnique("wj.sms.template");
+ // 鍙傛暟鍊肩粡绔彛鍙栫敤锛堝師涓� sysConfigMapper.checkConfigKeyUnique + getConfigValue锛夈��
+ // 璇箟绛変环锛氬師鍒ゅ畾"琛屽瓨鍦�"銆佽繖閲屽垽瀹�"鍊奸潪 null"锛岃�� sys_config.config_value 鏄�
+ // varchar(500) NOT NULL DEFAULT '' 鈬� 浜岃�呬笉鍙兘涓嶅悓锛堣瑙� TaskSysConfigPort javadoc锛夈��
+ String smsContemt = taskSysConfigPort.findConfigValueByKey("wj.sms.template");
- if (!Objects.isNull(sysConfig)) {
- String smsContemt = sysConfig.getConfigValue();
+ if (smsContemt != null) {
sendMagParam.setContent(smsContemt.replace("${wjurl}", sendMagParam.getUrl()));
}
@@ -5148,7 +3675,7 @@
//鑾峰彇闅忚鐨勫熀鏈俊鎭�
ServiceSubtask serviceSubtask = selectServiceSubtaskById(subid);
//鑾峰彇鎮h�呬俊鎭�
- PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(serviceSubtask.getPatid());
+ PatArchive patArchive = taskArchivePort.findByPatid(serviceSubtask.getPatid());
RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
@@ -5485,7 +4012,7 @@
return null;
}
try {
- SysDept sysDept = sysDept2Mapper.selectDeptByCode(deptCode, orgid);
+ SysDept sysDept = taskSysDeptPort.selectDeptByCode(deptCode, orgid);
return sysDept == null ? null : sysDept.getCampusid();
} catch (Exception e) {
log.warn("鎸夌紪鐮佸弽鏌ラ櫌鍖哄け璐ワ細deptCode={}, orgid={}, err={}", deptCode, orgid, e.getMessage());
@@ -5529,460 +4056,6 @@
}
}
- public PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO) {
- //鐢ㄤ簬杩斿洖
- PhoneCallBackSHVO phoneCallBackSHVO = new PhoneCallBackSHVO();
-
- //鏍规嵁鎵嬫満鍙疯幏鍙栫敤鎴风殑鐨勫瓙浠诲姟淇℃伅
- ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
- serviceSubtaskVO.setPhone(phoneCallReqYQVO.getPhone());
- serviceSubtaskVO.setType("1");
- serviceSubtaskVO.setSendstate(2L);
- List<ServiceSubtask> serviceSubtasks = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
- if (CollectionUtils.isNotEmpty(serviceSubtasks)) {
- ServiceSubtask serviceSubtask = serviceSubtasks.get(0);
- IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
-
- //閫氳繃浠诲姟妯℃澘涓殑"绗竴娆¢棶棰樼紪鍙�"鑾峰彇绗竴涓棶棰�;
- IvrTaskTemplateScript ivrTaskTemplateScript = null;
- IvrTaskTemplateScript ivrTaskTemplateScript1 = new IvrTaskTemplateScript();
- ivrTaskTemplateScript1.setTemplateID(ivrTaskTemplate.getId());
- List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript1);
-
- for (IvrTaskTemplateScript ivrTaskTemplateScript2 : ivrTaskTemplateScripts) {
- if (ivrTaskTemplate.getFirstQuestionNum() == Long.valueOf(ivrTaskTemplateScript2.getSort())) {
- ivrTaskTemplateScript = ivrTaskTemplateScript2;
- break;
- }
- }
- //鑾峰彇寮�鍦虹櫧
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
-
- phoneCallBackSHVO.setSubId(serviceSubtask.getId());
- phoneCallBackSHVO.setScriptId(ivrTaskTemplateScript.getId());
- phoneCallBackSHVO.setSort(ivrTaskTemplateScript.getSort());
- phoneCallBackSHVO.setTaskTemplateid(ivrTaskTemplateScript.getTemplateID());
- phoneCallBackSHVO.setScriptContent(serviceTask.getKcb() + "," + ivrTaskTemplateScript.getScriptContent());
- }
- return phoneCallBackSHVO;
- }
-
- /**
- * 涓夋眹ASR缁撴灉澶勭悊
- *
- * @param phoneCallResultYQVO
- * @return
- */
- public PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO) {
- PhoneCallBackSHVO phoneCallBackSHVO = new PhoneCallBackSHVO();
- //閫氳繃scriptid锛岃幏鍙栨墍鏈夌殑缁撴灉
- String url = configService.selectConfigByKey("sys.voice.match.ai.url", phoneCallResultYQVO.getOrgid());
- ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(phoneCallResultYQVO.getSubId());
- IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(serviceSubtask.getTemplateid());
- IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO = iIvrTaskTemplateScriptService.getTaskTempScriptInfoByid(Long.valueOf(phoneCallResultYQVO.getScriptId()));
- Integer i = matchOptionIndex(url, phoneCallResultYQVO.getScriptContent(), phoneCallResultYQVO.getAsrResult(), ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList(), phoneCallResultYQVO.getUuid());
- if (i >= 0) {
- String optiondesc = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(i).getOptiondesc();
- //灏嗘偅鑰呯殑鍥炵瓟鍐欒繘service_subtask_detail涓�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ivrTaskTemplateScriptVO.setQuestionResult(optiondesc);
-
- PhoneCallReqYQVO phoneCallReqYQVO = new PhoneCallReqYQVO();
- phoneCallReqYQVO.setTaskid("" + serviceSubtask.getId());
- phoneCallReqYQVO.setPhone(phoneCallResultYQVO.getPhone());
- phoneCallReqYQVO.setAsrtext(phoneCallResultYQVO.getAsrResult());
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallResultYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallResultYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
-
- IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
- ivrTaskTemplateScript.setTemplateID(ivrTaskTemplateScriptVO.getTemplateID());
- List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
-
- //鑾峰彇涓嬩竴棰�
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackSHVO.setScriptContent(serviceTask.getJsy());
- phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
- phoneCallBackSHVO.setSort(script.getSort());
- phoneCallBackSHVO.setScriptId(script.getId());
- phoneCallBackSHVO.setSubId(serviceSubtask.getId());
- phoneCallBackSHVO.setStatus("0");
- } else if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
- phoneCallBackSHVO.setScriptContent(script.getScriptContent());
- phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
- phoneCallBackSHVO.setSort(script.getSort());
- phoneCallBackSHVO.setScriptId(script.getId());
- phoneCallBackSHVO.setSubId(serviceSubtask.getId());
- break;
- }
- }
- //鎶婄紦瀛樻竻闄�
- redisCache.deleteObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
- } else {
- //鍐嶅皢閲嶅璇㈤棶
- //璁板綍涓�涓嬭繖涓棶棰樿闂鐨勬鏁�
- Object cacheObject = redisCache.getCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
- if (cacheObject == null || (Integer) cacheObject < ivrTaskTemplate.getMateNum()) {
-
- // 鑾峰彇閫夐」闆嗗悎涓殑 optiondesc 鐢ㄤ簬寮曞鎮h��
- List<IvrTaskTemplateTargetoption> optionList = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
- String optionDescStr = "";
- if (optionList != null && !optionList.isEmpty()) {
- optionDescStr = optionList.stream().map(IvrTaskTemplateTargetoption::getTargetvalue).filter(StringUtils::isNotEmpty).collect(Collectors.joining("鎴�"));
- }
-
- String scriptContent = "璇烽棶" + phoneCallResultYQVO.getScriptContent();
- if (StringUtils.isNotEmpty(optionDescStr)) {
- scriptContent += "锛屼綘鍙互鍥炵瓟锛�" + optionDescStr;
- }
- phoneCallBackSHVO.setScriptContent(scriptContent);
- phoneCallBackSHVO.setTaskTemplateid(phoneCallResultYQVO.getTaskTemplateid());
- phoneCallBackSHVO.setSort(phoneCallResultYQVO.getSort());
- phoneCallBackSHVO.setScriptId(phoneCallResultYQVO.getScriptId());
- phoneCallBackSHVO.setSubId(phoneCallResultYQVO.getSubId());
- if (cacheObject == null)
- redisCache.setCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId(), 1, 120, TimeUnit.MINUTES);
- else
- redisCache.setCacheObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId(), (Integer) cacheObject + 1, 120, TimeUnit.MINUTES);
- } else if ((Integer) cacheObject >= ivrTaskTemplate.getMateNum()) {
- //濡傛灉宸茬粡闂簡瑙勫畾娆℃暟锛屽氨涓嶉棶浜嗭紝缁х画闂笅涓�棰橈紙杩欎釜瑕佸晢閲忎竴涓嬶紝鏄户缁棶涓嬩竴棰橈紝杩樻槸鍋滀簡锛屾槸涓嶆槸瑕佸仛涓紑鍏筹級
- IvrTaskTemplateScript ivrTaskTemplateScript = new IvrTaskTemplateScript();
- ivrTaskTemplateScript.setTemplateID(ivrTaskTemplateScriptVO.getTemplateID());
- List<IvrTaskTemplateScript> ivrTaskTemplateScripts = iIvrTaskTemplateScriptService.selectIvrTaskTemplateScriptList(ivrTaskTemplateScript);
- //鑾峰彇涓嬩竴棰�
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
- phoneCallBackSHVO.setScriptContent(script.getScriptContent());
- phoneCallBackSHVO.setTaskTemplateid(script.getTemplateID());
- phoneCallBackSHVO.setSort(script.getSort());
- phoneCallBackSHVO.setScriptId(script.getId());
- phoneCallBackSHVO.setSubId(serviceSubtask.getId());
- break;
- }
- }
- //鎶婄紦瀛樻竻闄�
- redisCache.deleteObject(phoneCallResultYQVO.getSubId() + "-" + phoneCallResultYQVO.getScriptId());
- }
- }
- return phoneCallBackSHVO;
- }
-
- public PhoneCallBackYQVO AiMatch(String url, PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate, List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag, String uuid) {
- PhoneCallBackYQVO back = null;
- List<IvrTaskTemplateTargetoption> options = ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList();
- String voiceText = phoneCallReqYQVO.getAsrtext();
- String questionText = StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent();
- Integer matched = -1;
- log.info("AI鍖归厤:url = {},questionText = {},voiceText = {},options = {},uuid ={}",
- url,questionText,voiceText,options,uuid);
- matched = matchOptionIndex(url, questionText, voiceText, options, uuid);
- //璇存槑鍖归厤姝g‘浜�
- if (matched != null && matched >= 0) {
- IvrTaskTemplateTargetoption chosenOption = options.get(matched);
- //杩欓噷搴旇鍏堝垽鏂被鍨嬶紝鍘诲啀淇敼锛岃缃甀sUserOperation鏄崟閫夐鐨勬敼娉�
- log.info("鍖归厤姝g‘浜嗗悧--------------");
- chosenOption.setIsUserOperation(1);
- serviceTaskScriptTargetoptionMapper.updateIvrTaskTemplateTargetoption(chosenOption);
-
- //灏嗘偅鑰呯殑鍥炵鍐欒繘service_subtask_detail涓�
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ivrTaskTemplateScriptVO.setQuestionResult(chosenOption.getOptiondesc());
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
-
- //鍒ゆ柇涓�涓嬪綋鍓嶇殑闂鏄笉鏄弧鎰忓害闂锛屽苟涓攄utyDeptCode鏄惁鏈夊�硷紝骞朵笖閫夐」鏄笉鏄紓甯搁�夐」锛屽鏋滃叏绗﹀悎锛屽垯寰�婊℃剰搴﹂棶棰樺紓甯歌〃鏂板
- if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == chosenOption.getIsabnormal()) {
- ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
- //鐢╰askid銆乻ubid鍜宻criptid鍘昏幏鍙杁etailid
- ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
- ssd.setSubId(serviceSubtask.getId());
- ssd.setTaskid(serviceSubtask.getTaskid());
- ssd.setScriptid(StringUtils.isNotEmpty(scriptId) ? Long.valueOf(scriptId) : null);
- List<ServiceSubtaskDetail> serviceSubtaskDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(ssd);
- subtaskDetailTrace.setDetailId(CollectionUtils.isNotEmpty(serviceSubtaskDetails) ? serviceSubtaskDetails.get(0).getId() : null);
-
- subtaskDetailTrace.setSubId(serviceSubtask.getId());
- subtaskDetailTrace.setTaskid(serviceSubtask.getTaskid());
- subtaskDetailTrace.setTemplateid(ivrTaskTemplateScriptVO.getId());
- subtaskDetailTrace.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
- subtaskDetailTrace.setSwitchid(chosenOption.getId());
- subtaskDetailTrace.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
- subtaskDetailTrace.setQuestionvoice(null);
- subtaskDetailTrace.setCategoryname(ivrTaskTemplateScriptVO.getScriptAssortname());
- subtaskDetailTrace.setCategoryid(ivrTaskTemplateScriptVO.getScriptAssortid());
- //鑾峰彇鎵�鏈夐�夐」
- String optionDescStr = Optional.ofNullable(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()).filter(list -> !list.isEmpty()).map(list -> list.stream().map(IvrTaskTemplateTargetoption::getOptiondesc).filter(Objects::nonNull).collect(Collectors.joining("&"))).orElse("");
- subtaskDetailTrace.setTargetid(chosenOption.getId());
- subtaskDetailTrace.setTargetvalue(optionDescStr);
- subtaskDetailTrace.setMatchedtext(chosenOption.getOptiondesc());
- subtaskDetailTrace.setValueType(serviceSubtaskDetails.get(0).getValueType());
- subtaskDetailTrace.setTemplateType(1);
-
- SvyLibScriptCategory svyLibScriptCategory = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryById(ivrTaskTemplateScriptVO.getScriptAssortid());
- subtaskDetailTrace.setType(svyLibScriptCategory.getType());
- subtaskDetailTrace.setScriptid(ivrTaskTemplateScriptVO.getId());
- subtaskDetailTrace.setAsrtext(phoneCallReqYQVO.getAsrtext());
- subtaskDetailTrace.setRecordpath(phoneCallReqYQVO.getRecordpath());
- subtaskDetailTrace.setPatid(serviceSubtask.getPatid());
- JSONObject patdescJson = new JSONObject();
- patdescJson.put("sendname", serviceSubtask.getSendname());
- patdescJson.put("phone", serviceSubtask.getPhone());
- patdescJson.put("age", serviceSubtask.getAge());
- patdescJson.put("sex", serviceSubtask.getSex() != null ? serviceSubtask.getSex() == 1 ? "鐢�" : "濂�" : null);
- subtaskDetailTrace.setPatdesc(patdescJson.toJSONString());
- subtaskDetailTrace.setTodeptcode(ivrTaskTemplateScriptVO.getDutyDeptCode());
- subtaskDetailTrace.setTodeptname(ivrTaskTemplateScriptVO.getDutyDeptName());
- subtaskDetailTrace.setOrgid(serviceSubtask.getOrgid());
- subtaskDetailTrace.setHandleFlag("0");
- subtaskDetailTrace.setGuid(phoneCallReqYQVO.getGuid());
- subtaskDetailTrace.setCreateTime(new Date());
- subtaskDetailTrace.setUpdateTime(new Date());
- subtaskDetailTrace.setOrgid(phoneCallReqYQVO.getOrgid());
- traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
- }
-
- //鍒ゆ柇涓�涓嬶紝杩欎釜閫夐」缁撴灉鏄笉鏄繕鏈夌户缁棶涓嬪幓鐨勫繀瑕侊紝渚嬪閫夐」缁撴灉鏄埆浜轰笉鎯崇户缁洖绛旈棶棰橈紝灏辫缁撴潫鎺�
- if (chosenOption.getIsEnd() == 1) {
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- back = phoneCallBackYQVO;
- return back;
- }
-
- flag = 1;
- //灏嗗綋鍓嶅墠鐨勬挱鎶ョ姸鎬佸垹闄わ紝缁欎笅涓�棰樿浣�
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
-// //鑾峰彇涓嬩竴棰�
- log.error("鑾峰彇涓嬩竴棰樼殑淇℃伅锛歿}", ivrTaskTemplateScriptVO);
- //branchFlag涓簄ull鏃舵寜鍒嗘敮0澶勭悊锛岄伩鍏峃PE
- if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) && ivrTaskTemplateScriptVO.getNextScriptno() != null && ivrTaskTemplateScriptVO.getNextScriptno() != 0) {
- Long nextQuestion = null;
- if ("1".equals(ivrTaskTemplateScriptVO.getBranchFlag())) {
- nextQuestion = chosenOption.getNextQuestion();
- //鏇存柊鍒嗘暟
- double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- score = BigDecimal.valueOf(score).add(new BigDecimal(chosenOption.getScore())).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score);
- } else {
- nextQuestion = ivrTaskTemplateScriptVO.getNextScriptno();
- //鏇存柊鍒嗘暟
- Object obj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- Double score = (obj == null ? new Double(0.00) : new Double(((Double) obj).doubleValue()));
- score = BigDecimal.valueOf(score).add(new BigDecimal(String.valueOf(chosenOption.getScore()))).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
- }
- if (nextQuestion == null || nextQuestion == 0L) {
- //濡傛灉涓嬩竴棰樹负绌猴紝鎴栬�呬负0锛屽垯鎸傛満
- ServiceSubtask ss = new ServiceSubtask();
- ss.setId(serviceSubtask.getId());
- ss.setSendstate(6L);
- ss.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(ss);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
-
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "noVoice");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask.getJsy());
- //鏄庣粏鍦ㄦ湰棰樺尮閰嶆垚鍔熸椂宸茶惤搴擄紙瑙佷笂鏂� saveQuestionAnswerPhone锛夛紝杩欓噷涓嶅啀閲嶅淇濆瓨
- back = phoneCallBackYQVO;
- return back;
- }
-
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (script.getSort() == nextQuestion.intValue()) {
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
- log.error("涓嬩竴棰橀棶棰橈細{}", scriptContent);
- log.error("涓嬩竴棰樼殑瀛愪换鍔℃槸锛歿}", serviceSubtask);
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
- //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
- //鍒犻櫎鏃犲搷搴�
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- }
- }
- //涓嬩竴棰樿剼鏈病鎵惧埌鏃讹紝鍏滃簳閲嶉棶褰撳墠棰橈紝閬垮厤璋冪敤鏂硅鍒や负鏈鐞嗚�岄��鍥炴鍒欒瘑鍒�
- if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
- log.error("涓嬩竴棰樿剼鏈湭鎵惧埌锛岄噸闂綋鍓嶉锛宯extQuestion锛歿}", nextQuestion);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, questionText));
- }
- back = phoneCallBackYQVO;
- return back;
- } else if (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0) {
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- //鏇存柊涓�涓嬪垎鏁�
- double score = 0.0;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setSendstate(6L);
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //璁剧疆缁撴潫璇�
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
- Long id = serviceSubtask.getId();
- Map<String, String> map = delRedisValue(null, id.toString());
- log.error("map鐨勫�间负锛歿}", map);
- if (ObjectUtils.isNotEmpty(map)) redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "PlayEventCallbackPlaystop");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- //缁撴潫璇凡鎷艰繘杩斿洖鍊硷紝鎸傛満鐢卞钩鍙版寜杩斿洖鍊兼墽琛�
- back = phoneCallBackYQVO;
- return back;
-
- }
- } else {
- //AI娌℃湁鍖归厤涓婏細鐢盇I鍒嗘敮鑷繁鎸�"娌¢棶娓呭氨閲嶉棶"鐨勬鏁板鐞嗭紝涓嶅啀閫�鍥炴鍒欒瘑鍒�
- log.info("ai娌℃湁鍖归厤涓�----------------------------");
- //娌″尮閰嶄笂涔熻鎶婃偅鑰呰鐨勮瘽璁板綍涓嬫潵锛坢atchedtext缃┖锛屼笌姝e垯璺緞鍙e緞涓�鑷达級
- ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
- List<ServiceSubtaskDetail> serviceSubtaskDetailList = new ArrayList<>();
- ServiceSubtaskDetail serviceSubtaskDetail = getServiceSubtaskDetail(phoneCallReqYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate);
- //淇敼涓�涓嬭闊宠矾寰勶紙鏀规垚鍓嶇鍙互璁块棶鐨勶紝瀛樺埌鏁版嵁搴撲腑锛�
- if (StringUtils.isNotEmpty(serviceSubtaskDetail.getQuestionvoice())) {
- String questionvoice = serviceSubtaskDetail.getQuestionvoice();
- String[] split = questionvoice.split("\\\\");
- if (split.length > 0) {
- String lastPart = split[split.length - 1];
- serviceSubtaskDetail.setQuestionvoice(voicePathPrefix + lastPart);
- }
- }
- serviceSubtaskDetailList.add(serviceSubtaskDetail);
- //濡傛灉娌℃湁 鍖归厤涓婏紝杩欎釜蹇呴』涓簄ull
- serviceSubtaskDetailList.get(0).setMatchedtext("");
- serviceSubTaskDetailReq.setServiceSubtaskDetailList(serviceSubtaskDetailList);
- serviceSubTaskDetailReq.setGuid(phoneCallReqYQVO.getGuid());
- serviceSubTaskDetailReq.setOrgid(phoneCallReqYQVO.getOrgid());
- saveQuestionAnswerPhone(serviceSubTaskDetailReq);
-
- String mateKey = phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid();
- Integer count = null;
- Object countObj = redisCache.getCacheObject(mateKey);
- if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
- if (count != null && count >= ivrTaskTemplate.getMateNum()) {
- //娌″尮閰嶆鏁板凡缁忕敤婊★紝涓嶈兘鍐嶉噸闂簡
- boolean noNextQuestion = ("0".equals(ivrTaskTemplateScriptVO.getBranchFlag()) || "1".equals(ivrTaskTemplateScriptVO.getBranchFlag()))
- && (ivrTaskTemplateScriptVO.getNextScriptno() == null || ivrTaskTemplateScriptVO.getNextScriptno() == 0);
- if (noNextQuestion) {
- //宸茬粡鏄渶鍚庝竴棰橈紝鐩存帴鎸傛満
- ServiceTask serviceTask1 = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + serviceTask1.getJsy());
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- serviceSubtask.setScore(String.valueOf(score));
- serviceSubtask.setFinishtime(new Date());
- serviceSubtask.setSendstate(6L);
- serviceSubtask.setRemark("鐢佃瘽鎷ㄦ墦宸插畬鎴�");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- //璁板綍鐘舵��
- setFailPreachForm(serviceSubtask, "3", "鐢佃瘽鎷ㄦ墦宸插畬鎴�", "9");
- //鍦╮edis涓繚瀛樹竴涓嬬粨鏉熻锛屽湪璋冪敤鎸傜數璇濈殑鏂规硶鏃跺垹闄�
- ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES);
- //鍘籸edis涓紝鎶婅瀛愪换鍔D鍒犻櫎
- Long id = serviceSubtask.getId();
- Map<String, String> map = delRedisValue(null, id.toString());
- if (ObjectUtils.isNotEmpty(map)) {
- redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
- redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
- redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
- }
- } else {
- //杩樻湁涓嬩竴棰橈紝鎸塶extScriptno缁х画鎻愰棶
- for (IvrTaskTemplateScript script : ivrTaskTemplateScripts) {
- if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
- phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
- //灏嗚鎮h�呯殑Redis涓殑棰樼洰ID锛岃繘琛屼慨鏀�
- redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
- //鏇存柊涓�涓嬪垎鏁�
- Double score = null;
- Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
- if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
- score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
- redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
- //鎹㈤鎴愬姛锛屾病鍖归厤娆℃暟娓呴浂
- redisCache.deleteObject(mateKey);
- }
- }
- }
- } else {
- //杩樻病闂弧娆℃暟锛岀敤noMatchText寮曞鎮h�呴噸绛�
- redisCache.setCacheObject(mateKey, count == null ? 1 : count + 1, 120, TimeUnit.MINUTES);
- phoneCallBackYQVO.setType("text");
- phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
- phoneCallBackYQVO.setValue(ivrTaskTemplateScriptVO.getNoMatchText() + getObject(serviceSubtask, StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent()));
- }
- back = phoneCallBackYQVO;
- return back;
- }
- return back;
- }
-
//鑾峰彇浠诲姟缁勪俊鎭�
private void findServiceTaskScheduleVO(ServiceTaskVO serviceTaskVO) {
if (StringUtils.isNotEmpty(serviceTaskVO.getAppltype()) && serviceTaskVO.getAppltype().equals("5")) {
@@ -5997,34 +4070,12 @@
}
}
- @Test
- public void TestMatch() {
- String questionText = "鎮ㄥソ,璇烽棶鎮ㄦ槸鎮h�呮湰浜鸿繕鏄灞烇紵\n";
- String voiceText = "鎴戣嚜宸�";
- String matchedText = "";
- List<IvrTaskTemplateTargetoption> options = new ArrayList<>();
- IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption1 = new IvrTaskTemplateTargetoption();
- ivrTaskTemplateTargetoption1.setTargetvalue("鏈汉");
- options.add(ivrTaskTemplateTargetoption1);
- IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption2 = new IvrTaskTemplateTargetoption();
- ivrTaskTemplateTargetoption2.setTargetvalue("瀹跺睘");
- options.add(ivrTaskTemplateTargetoption2);
- IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption3 = new IvrTaskTemplateTargetoption();
- ivrTaskTemplateTargetoption3.setTargetvalue("鍏朵粬");
- options.add(ivrTaskTemplateTargetoption3);
- //1-AI璇嗗埆
- String url = configService.selectConfigByKey("sys.voice.match.ai.url");
- Integer matched = matchOptionIndex(url, questionText, voiceText, options, "1");
- if (ObjectUtils.isNotEmpty(matched)) {
- if (matched >= 0) {
- matchedText = options.get(matched).getTargetvalue();
- }
- }
- log.info("ai鍖归厤鎴愬姛锛屽尮閰嶇粨鏋滄槸:" + matchedText);
- }
-
// ---------------------------------------------------------------------
// 璇存槑锛氬師绉佹湁 getWXCode / encode 宸查殢鍙戦�佹柟涓�璧锋敹鍙e埌 ruoyi-message 妯″潡
// 锛圶inHuaMpApi锛夛紝姝ゅ宸插垹闄わ紝閬垮厤涓変唤鎷疯礉鍚勫啓涓�濂楃鍚嶉�昏緫銆�
+ //
+ // 鍙︼細鏈被鍘熸湰杩樻湁涓�涓� @Test 鏍囨敞鐨� TestMatch()锛堝紑鍙戞湡鎵嬪啓鐨� AI 閫夐」鍖归厤璋冭瘯鏂规硶锛夛紝
+ // 鍏ㄤ粨鏃犱换浣曡皟鐢ㄧ偣銆傚畠浼氭妸 org.junit 鎷栬繘銆愮敓浜с�戞簮鐮佷緷璧栵紝鑰� ruoyi-task 鏄�
+ // jar 妯″潡銆佷笉甯� junit 鈥斺�� 鏁呴殢妯″潡鍖栦竴骞跺垹闄わ紙灞炴浠g爜锛岃涓烘棤褰卞搷锛夈��
// ---------------------------------------------------------------------
}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskScheduleServiceImpl.java
similarity index 94%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskScheduleServiceImpl.java
index 3084138..79ad5d0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskScheduleServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskScheduleServiceImpl.java
@@ -1,19 +1,9 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.ServiceSubtaskPreachform;
-import com.smartor.domain.ServiceTaskSchedule;
-import com.smartor.domain.ServiceTaskScheduleDetail;
-import com.smartor.domain.ServiceTaskScheduleVO;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.mapper.ServiceSubtaskPreachformMapper;
-import com.smartor.mapper.ServiceTaskScheduleDetailMapper;
-import com.smartor.mapper.ServiceTaskScheduleMapper;
-import com.smartor.service.IServiceTaskScheduleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,6 +13,16 @@
import java.util.Calendar;
import java.util.Date;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleDetailMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleMapper;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.domain.ServiceTaskScheduleVO;
+import com.ruoyi.task.service.IServiceTaskScheduleService;
/**
* 闅忚浠诲姟璁″垝 Service 瀹炵幇
@@ -44,7 +44,7 @@
private ServiceSubtaskMapper serviceSubtaskMapper;
@Autowired
- private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+ private TaskPreachformPort taskPreachformPort;
/** 鍗曟鎵弿鐨勬渶澶ц鍒掓暟锛岄伩鍏嶉暱浜嬪姟銆� */
private static final int ROLL_BATCH_LIMIT = 200;
@@ -319,7 +319,7 @@
ServiceSubtaskPreachform q = new ServiceSubtaskPreachform();
q.setSubid(srcSubId);
q.setTaskid(newSubtask.getTaskid());
- List<ServiceSubtaskPreachform> list = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(q);
+ List<ServiceSubtaskPreachform> list = taskPreachformPort.selectServiceSubtaskPreachformList(q);
if (CollectionUtils.isEmpty(list)) {
return;
}
@@ -333,7 +333,7 @@
pf.setSendstate("1");
pf.setOrgid(newSubtask.getOrgid());
pf.setCreateTime(new Date());
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(pf);
+ taskPreachformPort.insertServiceSubtaskPreachform(pf);
}
}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskServiceImpl.java
similarity index 95%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskServiceImpl.java
index a6b5a37..325d1b1 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskServiceImpl.java
@@ -1,4 +1,4 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import java.util.*;
@@ -9,16 +9,12 @@
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
-import com.smartor.domain.*;
-import com.smartor.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.smartor.service.IServiceTaskService;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.template.domain.HeLibrary;
@@ -43,6 +39,18 @@
import com.ruoyi.template.mapper.SvyTaskTemplateScriptMapper;
import com.ruoyi.template.mapper.SvyTaskTemplateTargetoptionMapper;
import com.ruoyi.template.api.TemplateFacade;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.api.spi.TaskArchivePort;
+import com.ruoyi.task.service.IServiceTaskService;
/**
* 璇煶浠诲姟Service涓氬姟灞傚鐞�
*
@@ -77,9 +85,7 @@
@Autowired
private ServiceTaskdeptMapper serviceTaskdeptMapper;
@Autowired
- private PatArchiveImportMapper patArchiveImportMapper;
- @Autowired
- private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper;
+ private TaskPreachformPort taskPreachformPort;
@Autowired
private SvyTaskTemplateScriptMapper svyTaskTemplateScriptMapper;
@Autowired
@@ -87,7 +93,7 @@
@Autowired
private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
@Autowired
- private PatArchiveMapper patArchiveMapper;
+ private TaskArchivePort taskArchivePort;
@Autowired
private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
@Autowired
@@ -297,13 +303,13 @@
serviceSubtaskPreachform.setPreachform(serviceSubtask.getCurrentPreachform());
serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
serviceSubtaskPreachform.setTaskid(serviceTask.getTaskid());
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+ List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = taskPreachformPort.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
//浜哄伐鏃�-3宸查鍙栫姸鎬�(service_subtask_preachform.sendstate = 3)
if(StringUtils.isNotEmpty(ssp.getPreachform()) && !ssp.getPreachform().equals("1")){
ssp.setSendstate("3");
- serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
+ taskPreachformPort.updateServiceSubtaskPreachform(ssp);
}
}
}
@@ -340,19 +346,19 @@
patMedInhospVO.setSerialnum(zyserialnum);
List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospListByCondition(patMedInhospVO);
if (CollectionUtils.isNotEmpty(patMedInhospList)) {
- patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhospList.get(0).getPatid());
+ patArchive = taskArchivePort.findByPatid(patMedInhospList.get(0).getPatid());
}
} else if (StringUtils.isNotEmpty(mzserialnum)) {
PatMedOuthospQueryReq patMedOuthosp = new PatMedOuthospQueryReq();
patMedOuthosp.setSerialnum(mzserialnum);
List<PatMedOuthosp> patMedOuthosps = outhospDataFacade.callSpQueryOuthosp(patMedOuthosp);
if (CollectionUtils.isNotEmpty(patMedOuthosps)) {
- patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosps.get(0).getPatid());
+ patArchive = taskArchivePort.findByPatid(patMedOuthosps.get(0).getPatid());
}
} else if (StringUtils.isNotEmpty(tsserialnum)) {
PatArchive pa = new PatArchive();
pa.setPatientno(tsserialnum);
- List<PatArchive> patArchives = patArchiveMapper.selectPatArchiveList(pa);
+ List<PatArchive> patArchives = taskArchivePort.findList(pa);
if (CollectionUtils.isNotEmpty(patArchives)) patArchive = patArchives.get(0);
}
@@ -431,10 +437,9 @@
//鑾峰彇鎮h�呬俊鎭�
PatArchive patArchive = null;
- if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
+ if (patfrom.equals("0")) patArchive = taskArchivePort.findByPatid(patid);
else if (patfrom.equals("1")) {
- PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid);
- patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class);
+ patArchive = taskArchivePort.findImportedByPatid(patid);
}
//閫氳繃鎮h�呬俊鎭拰浠诲姟淇℃伅涓殑textParam瀵归棶棰樹腑鐨勫彉閲忚繘琛屽~鍏�
@@ -523,10 +528,9 @@
}
//鑾峰彇鎮h�呬俊鎭�
PatArchive patArchive = null;
- if (patfrom.equals("0")) patArchive = patArchiveMapper.selectPatArchiveByPatid(patid);
+ if (patfrom.equals("0")) patArchive = taskArchivePort.findByPatid(patid);
else if (patfrom.equals("1")) {
- PatArchiveImport patArchiveImport = patArchiveImportMapper.selectPatArchiveImportById(patid);
- patArchive = DtoConversionUtils.sourceToTarget(patArchiveImport, PatArchive.class);
+ patArchive = taskArchivePort.findImportedByPatid(patid);
}
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskdeptServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdeptServiceImpl.java
similarity index 93%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskdeptServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdeptServiceImpl.java
index 35849df..d474c64 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskdeptServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdeptServiceImpl.java
@@ -1,14 +1,14 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.ServiceTaskdept;
-import com.smartor.mapper.ServiceTaskdeptMapper;
-import com.smartor.service.IServiceTaskdeptService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
+import com.ruoyi.task.service.IServiceTaskdeptService;
/**
* 妯℃澘绉戝鍏宠仈Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskdiagServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdiagServiceImpl.java
similarity index 92%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskdiagServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdiagServiceImpl.java
index 91e08b0..adc66f9 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskdiagServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdiagServiceImpl.java
@@ -1,12 +1,12 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.smartor.mapper.ServiceTaskdiagMapper;
-import com.smartor.domain.ServiceTaskdiag;
-import com.smartor.service.IServiceTaskdiagService;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.mapper.ServiceTaskdiagMapper;
+import com.ruoyi.task.service.IServiceTaskdiagService;
/**
* 妯℃澘绉戝鍏宠仈Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskmedicalServiceImpl.java
similarity index 91%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskmedicalServiceImpl.java
index 9358bf6..afc68d4 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskmedicalServiceImpl.java
@@ -1,15 +1,15 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.smartor.domain.ServiceTaskmedical;
-import com.smartor.domain.VO.ServiceTaskmedicalVO;
-import com.smartor.mapper.ServiceTaskmedicalMapper;
-import com.smartor.service.IServiceTaskmedicalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.VO.ServiceTaskmedicalVO;
+import com.ruoyi.task.mapper.ServiceTaskmedicalMapper;
+import com.ruoyi.task.service.IServiceTaskmedicalService;
/**
* 浠诲姟鑽搧鍏宠仈Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskoperServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskoperServiceImpl.java
similarity index 92%
rename from smartor/src/main/java/com/smartor/service/impl/ServiceTaskoperServiceImpl.java
rename to ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskoperServiceImpl.java
index 3302270..4d8e5ac 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskoperServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskoperServiceImpl.java
@@ -1,12 +1,12 @@
-package com.smartor.service.impl;
+package com.ruoyi.task.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.smartor.mapper.ServiceTaskoperMapper;
-import com.smartor.domain.ServiceTaskoper;
-import com.smartor.service.IServiceTaskoperService;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.mapper.ServiceTaskoperMapper;
+import com.ruoyi.task.service.IServiceTaskoperService;
/**
* 妯℃澘绉戝鍏宠仈Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/resources/mapper/smartor/IvrTaskVisitResultMapper.xml b/ruoyi-task/src/main/resources/mapper/task/IvrTaskVisitResultMapper.xml
similarity index 94%
rename from smartor/src/main/resources/mapper/smartor/IvrTaskVisitResultMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/IvrTaskVisitResultMapper.xml
index f3c933d..8fc49de 100644
--- a/smartor/src/main/resources/mapper/smartor/IvrTaskVisitResultMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/IvrTaskVisitResultMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.IvrTaskVisitResultMapper">
+<mapper namespace="com.ruoyi.task.mapper.IvrTaskVisitResultMapper">
- <resultMap type="com.smartor.domain.IvrTaskVisitResult" id="IvrTaskVisitResultResult">
+ <resultMap type="com.ruoyi.task.domain.IvrTaskVisitResult" id="IvrTaskVisitResultResult">
<result property="id" column="id"/>
<result property="sendname" column="sendname"/>
<result property="phone" column="phone"/>
@@ -57,7 +57,7 @@
from ivr_task_visit_result
</sql>
- <select id="selectIvrTaskVisitResultList" parameterType="com.smartor.domain.IvrTaskVisitResult"
+ <select id="selectIvrTaskVisitResultList" parameterType="com.ruoyi.task.domain.IvrTaskVisitResult"
resultMap="IvrTaskVisitResultResult">
<include refid="selectIvrTaskVisitResultVo"/>
where 1=1
@@ -86,7 +86,7 @@
where id = #{id}
</select>
- <insert id="insertIvrTaskVisitResult" parameterType="com.smartor.domain.IvrTaskVisitResult" useGeneratedKeys="true"
+ <insert id="insertIvrTaskVisitResult" parameterType="com.ruoyi.task.domain.IvrTaskVisitResult" useGeneratedKeys="true"
keyProperty="id">
insert into ivr_task_visit_result
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -139,7 +139,7 @@
</trim>
</insert>
- <update id="updateIvrTaskVisitResult" parameterType="com.smartor.domain.IvrTaskVisitResult">
+ <update id="updateIvrTaskVisitResult" parameterType="com.ruoyi.task.domain.IvrTaskVisitResult">
update ivr_task_visit_result
<trim prefix="SET" suffixOverrides=",">
<if test="sendname != null">sendname = #{sendname},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceOutPathMapper.xml
similarity index 94%
rename from smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceOutPathMapper.xml
index afedfde..6b96d34 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceOutPathMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceOutPathMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceOutPathMapper">
- <resultMap type="com.smartor.domain.ServiceOutPath" id="ServiceOutPathResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceOutPath" id="ServiceOutPathResult">
<result property="id" column="id"/>
<result property="param1" column="param1"/>
<result property="param2" column="param2"/>
@@ -50,7 +50,7 @@
from service_out_path
</sql>
- <select id="selectServiceOutPathList" parameterType="com.smartor.domain.ServiceOutPath"
+ <select id="selectServiceOutPathList" parameterType="com.ruoyi.task.domain.ServiceOutPath"
resultMap="ServiceOutPathResult">
<include refid="selectServiceOutPathVo"/>
where 1=1
@@ -106,7 +106,7 @@
where id = #{id}
</select>
- <insert id="insertServiceOutPath" parameterType="com.smartor.domain.ServiceOutPath" useGeneratedKeys="true"
+ <insert id="insertServiceOutPath" parameterType="com.ruoyi.task.domain.ServiceOutPath" useGeneratedKeys="true"
keyProperty="id">
insert into service_out_path
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -179,7 +179,7 @@
</trim>
</insert>
- <update id="updateServiceOutPath" parameterType="com.smartor.domain.ServiceOutPath">
+ <update id="updateServiceOutPath" parameterType="com.ruoyi.task.domain.ServiceOutPath">
update service_out_path
<trim prefix="SET" suffixOverrides=",">
<if test="param1 != null">param1 =
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailMapper.xml
similarity index 96%
rename from smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailMapper.xml
index 6c48fbf..3b8bb91 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceSubtaskDetailMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceSubtaskDetailMapper">
- <resultMap type="com.smartor.domain.ServiceSubtaskDetail" id="ServiceSubtaskDetailResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskDetail" id="ServiceSubtaskDetailResult">
<result property="id" column="id"/>
<result property="subId" column="sub_id"/>
<result property="targetid" column="targetid"/>
@@ -62,7 +62,7 @@
<result property="libTemplateid" column="lib_templateid"/>
<result property="score" column="score"/>
</resultMap>
- <resultMap type="com.smartor.domain.ServiceSubtaskDetailTarget" id="ServiceSubtaskDetailTargetResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskDetailTarget" id="ServiceSubtaskDetailTargetResult">
<result property="targetid" column="targetid"/>
<result property="taskid" column="taskid"/>
<result property="targetname" column="targetname"/>
@@ -128,7 +128,7 @@
from service_subtask_detail
</sql>
- <select id="selectServiceSubtaskDetailList" parameterType="com.smartor.domain.ServiceSubtaskDetail"
+ <select id="selectServiceSubtaskDetailList" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetail"
resultMap="ServiceSubtaskDetailResult">
<include refid="selectServiceSubtaskDetailVo"/>
where 1=1
@@ -203,7 +203,7 @@
group by scriptid
</select>
- <select id="getServiceSubtaskDetails" parameterType="com.smartor.domain.ServiceSubtaskDetailVO"
+ <select id="getServiceSubtaskDetails" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetailVO"
resultType="java.util.HashMap">
select
ssd.sub_id,
@@ -272,7 +272,7 @@
where id = #{id}
</select>
- <select id="queryFillCount" resultType="com.smartor.domain.DTO.ServiceSubtaskDetailDTO">
+ <select id="queryFillCount" resultType="com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO">
select id,questiontext,matchedtext,targetvalue,score
from service_subtask_detail
where del_flag = 0
@@ -283,7 +283,7 @@
<if test="questiontext != null">and questiontext = #{questiontext}</if>
</select>
- <select id="isExistServiceSubtaskDetail" resultType="com.smartor.domain.DTO.ServiceSubtaskDetailDTO">
+ <select id="isExistServiceSubtaskDetail" resultType="com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO">
select id, questiontext, matchedtext, score
from service_subtask_detail
where del_flag = 0
@@ -291,7 +291,7 @@
<if test="scriptid != null">and scriptid = #{scriptid}</if>
</select>
- <insert id="insertServiceSubtaskDetail" parameterType="com.smartor.domain.ServiceSubtaskDetail"
+ <insert id="insertServiceSubtaskDetail" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetail"
useGeneratedKeys="true"
keyProperty="id">
insert into service_subtask_detail
@@ -411,7 +411,7 @@
</trim>
</insert>
- <update id="updateServiceSubtaskDetail" parameterType="com.smartor.domain.ServiceSubtaskDetail">
+ <update id="updateServiceSubtaskDetail" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetail">
update service_subtask_detail
<trim prefix="SET" suffixOverrides=",">
<if test="isMydException != null">is_myd_exception = #{isMydException},</if>
@@ -472,7 +472,7 @@
where id = #{id}
</update>
- <update id="updateSSDByCondition" parameterType="com.smartor.domain.ServiceSubtaskDetail">
+ <update id="updateSSDByCondition" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetail">
update service_subtask_detail
<trim prefix="SET" suffixOverrides=",">
<if test="subId != null">sub_id = #{subId},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailTraceMapper.xml
similarity index 98%
rename from smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailTraceMapper.xml
index 1bc14e8..726113a 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailTraceMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailTraceMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceSubtaskDetailTraceMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceSubtaskDetailTraceMapper">
- <resultMap type="com.smartor.domain.ServiceSubtaskDetailTrace" id="ServiceSubtaskDetailTtraceResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskDetailTrace" id="ServiceSubtaskDetailTtraceResult">
<result property="id" column="id"/>
<result property="detailId" column="detail_id"/>
<result property="subId" column="sub_id"/>
@@ -139,7 +139,7 @@
from service_subtask_detail_trace
</sql>
- <select id="selectServiceSubtaskDetailTtraceList" parameterType="com.smartor.domain.VO.ServiceSubtaskDetailTraceVO"
+ <select id="selectServiceSubtaskDetailTtraceList" parameterType="com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO"
resultMap="ServiceSubtaskDetailTtraceResult">
<include refid="selectServiceSubtaskDetailTtraceVo"/>
where del_flag=0
@@ -492,7 +492,7 @@
where del_flag=0 and id = #{id}
</select>
- <insert id="insertServiceSubtaskDetailTtrace" parameterType="com.smartor.domain.ServiceSubtaskDetailTrace"
+ <insert id="insertServiceSubtaskDetailTtrace" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetailTrace"
useGeneratedKeys="true" keyProperty="id">
insert into service_subtask_detail_trace
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -767,7 +767,7 @@
</trim>
</insert>
- <update id="updateServiceSubtaskDetailTtrace" parameterType="com.smartor.domain.ServiceSubtaskDetailTrace">
+ <update id="updateServiceSubtaskDetailTtrace" parameterType="com.ruoyi.task.domain.ServiceSubtaskDetailTrace">
update service_subtask_detail_trace
<trim prefix="SET" suffixOverrides=",">
<if test="detailId != null">detail_id =
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
similarity index 97%
rename from smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
index 9255317..f9d3a27 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceSubtaskMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceSubtaskMapper">
- <resultMap type="com.smartor.domain.ServiceSubtask" id="ServiceSubtaskResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtask" id="ServiceSubtaskResult">
<result property="id" column="id"/>
<result property="sendname" column="sendname"/>
<result property="phone" column="phone"/>
@@ -102,7 +102,7 @@
<result property="campusid" column="campusid"/>
</resultMap>
- <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
<result property="month" column="month"/>
<result property="serviceType" column="service_type"/>
<result property="subTaskId" column="subTaskId"/>
@@ -113,7 +113,7 @@
</resultMap>
- <resultMap type="com.smartor.domain.ServiceSubtaskScriptCount" id="ServiceSubtaskScriptCountResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskScriptCount" id="ServiceSubtaskScriptCountResult">
<result property="scriptid" column="scriptid"/>
<result property="templateid" column="templateid"/>
<result property="scriptType" column="script_type"/>
@@ -128,7 +128,7 @@
<result property="options" column="options"/>
</resultMap>
- <resultMap type="com.smartor.domain.ServiceSubtaskStatistic" id="ServiceSubtaskStatisticResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskStatistic" id="ServiceSubtaskStatisticResult">
<result property="taskName" column="task_name"/>
<result property="drcode" column="drcode"/>
<result property="drname" column="drname"/>
@@ -251,7 +251,7 @@
from service_subtask
</sql>
- <select id="selectServiceSubtaskBySendstate" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="selectServiceSubtaskBySendstate" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where 1=1
@@ -274,7 +274,7 @@
</if>
</select>
- <select id="queryServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="queryServiceSubtaskList" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where 1=1
@@ -291,7 +291,7 @@
<if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext}</if>
</select>
- <select id="selectServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="selectServiceSubtaskList" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where del_flag = 0
@@ -536,7 +536,7 @@
<if test="pageSize != null and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
</select>
- <select id="getCompensateServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="getCompensateServiceSubtaskList" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where del_flag = 0
@@ -569,7 +569,7 @@
<if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext}</if>
</select>
- <select id="selectServiceSubtaskListByCreateTime" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="selectServiceSubtaskListByCreateTime" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where del_flag = 0
@@ -598,7 +598,7 @@
</select>
- <select id="selectServiceSubtaskListAgain" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="selectServiceSubtaskListAgain" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where 1=1
@@ -658,7 +658,7 @@
<if test="continueTimeNext != null ">and continue_time_next = #{continueTimeNext}</if>
</select>
- <select id="selectSendstateByCondition" parameterType="com.smartor.domain.ServiceSubtask" resultType="Integer">
+ <select id="selectSendstateByCondition" parameterType="com.ruoyi.task.domain.ServiceSubtask" resultType="Integer">
SELECT b.sendstate
from service_task a
JOIN service_subtask b on a.taskid = b.taskid and a.pat_cycle = 0 and b.del_flag = 0
@@ -673,7 +673,7 @@
<if test="campusid != null and campusid != ''">and b.campusid = #{campusid}</if>
</select>
- <select id="selectTimelyRate" parameterType="com.smartor.domain.ServiceSubtask" resultType="double">
+ <select id="selectTimelyRate" parameterType="com.ruoyi.task.domain.ServiceSubtask" resultType="double">
SELECT sum( a.finished )/ sum( 1 ) FROM
(SELECT id, visit_time, finishtime,
(CASE WHEN ( DATE_FORMAT( visit_time, '%y%m%d' )< DATE_FORMAT( IF ( ISNULL( finishtime ), NOW(), finishtime
@@ -711,7 +711,7 @@
) a
</select>
- <select id="selectTimelyRateBatch" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity" resultType="map">
+ <select id="selectTimelyRateBatch" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity" resultType="map">
SELECT
<if test="groupKey != null and groupKey != ''">
ss.${groupKey} as groupKey,
@@ -790,7 +790,7 @@
</if>
</select>
- <select id="selectTimelyRateDetail" parameterType="com.smartor.domain.ServiceSubtask"
+ <select id="selectTimelyRateDetail" parameterType="com.ruoyi.task.domain.ServiceSubtask"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where 1=1
@@ -830,7 +830,7 @@
where id = #{id}
</select>
- <select id="selectServiceSubtaskByDiagname" parameterType="com.smartor.domain.ServiceSubtask"
+ <select id="selectServiceSubtaskByDiagname" parameterType="com.ruoyi.task.domain.ServiceSubtask"
resultMap="ServiceSubtaskResult">
select sendstate,starttime,endtime,nurse_name,phone,sex,task_name,sendname,leavediagname,visit_time FROM
service_subtask WHERE del_flag=0
@@ -856,7 +856,7 @@
<if test="pageSize != null and pageNum != null">limit ${pageSize} OFFSET ${pageNum}</if>
</select>
- <insert id="insertServiceSubtask" parameterType="com.smartor.domain.ServiceSubtask" useGeneratedKeys="true"
+ <insert id="insertServiceSubtask" parameterType="com.ruoyi.task.domain.ServiceSubtask" useGeneratedKeys="true"
keyProperty="id">
insert into service_subtask
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -1057,7 +1057,7 @@
</trim>
</insert>
- <update id="updateServiceSubtask" parameterType="com.smartor.domain.ServiceSubtask">
+ <update id="updateServiceSubtask" parameterType="com.ruoyi.task.domain.ServiceSubtask">
update service_subtask
<trim prefix="SET" suffixOverrides=",">
<if test="sendname != null">sendname = #{sendname},</if>
@@ -1161,7 +1161,7 @@
where id = #{id}
</update>
- <update id="updateServiceSubtaskByPatId" parameterType="com.smartor.domain.ServiceSubtask">
+ <update id="updateServiceSubtaskByPatId" parameterType="com.ruoyi.task.domain.ServiceSubtask">
update service_subtask
<trim prefix="SET" suffixOverrides=",">
<if test="sendname != null">sendname = #{sendname},</if>
@@ -1265,7 +1265,7 @@
<if test="campusid != null and campusid != ''">and campusid = #{campusid}</if>
</update>
- <update id="updateServiceSubtaskByCondition" parameterType="com.smartor.domain.ServiceSubtask">
+ <update id="updateServiceSubtaskByCondition" parameterType="com.ruoyi.task.domain.ServiceSubtask">
update service_subtask
<trim prefix="SET" suffixOverrides=",">
<if test="sendname != null">sendname = #{sendname},</if>
@@ -1377,7 +1377,7 @@
</where>
</update>
- <update id="updateServiceSubtaskByTaskGuid" parameterType="com.smartor.domain.ServiceSubtask">
+ <update id="updateServiceSubtaskByTaskGuid" parameterType="com.ruoyi.task.domain.ServiceSubtask">
update service_subtask
<trim prefix="SET" suffixOverrides=",">
<if test="sendname != null">sendname = #{sendname},</if>
@@ -1491,7 +1491,7 @@
where patid = #{patid} and taskid = #{taskid}
</update>
- <select id="getSfStatistics" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatistics" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult">
select id,
visit_count,
@@ -1597,7 +1597,7 @@
</if>
</select>
- <select id="getSpecialSfStatistics" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSpecialSfStatistics" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskStatisticResult">
select
<if test="groupKey != null and groupKey == 'task_name'">
@@ -1710,7 +1710,7 @@
</if>
</select>
- <select id="getSfStatisticsGroupKey" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsGroupKey" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultType="String">
select
<if test="groupKey != null and groupKey != ''">
@@ -1779,7 +1779,7 @@
</if>
</select>
- <select id="getSfStatisticsHyperlink" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsHyperlink" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult">
select id,
visit_count,
@@ -1912,7 +1912,7 @@
</if>
</select>
- <select id="getSfStatisticsJoy" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsJoy" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult2">
SELECT sub_id as subTaskId,COUNT(sub_id) joyCount,
(SELECT COUNT(1) FROM ivr_liba_target WHERE assortid IN (SELECT config_value FROM sys_config WHERE
@@ -1961,7 +1961,7 @@
GROUP BY sub_id
</select>
- <select id="getSfStatisticsJoydetails" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsJoydetails" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult2">
SELECT joyName,joyCount,joyAllCount,ROUND(joyCount/joyAllCount,2) joyTotal FROM (
SELECT targetname joyName,
@@ -2042,7 +2042,7 @@
)a1
</select>
- <select id="getSfStatisticsCategory" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsCategory" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult2">
SELECT
<if test="configValue != null and configValue != ''">
@@ -2115,7 +2115,7 @@
GROUP BY a.sub_id
</select>
- <select id="getSfStatisticsScriptDetails" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsScriptDetails" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskScriptCountResult">
SELECT
a.id as scriptid,
@@ -2196,7 +2196,7 @@
</if>
</select>
- <select id="getSfStatisticsScriptItemDetails" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfStatisticsScriptItemDetails" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskScriptCountResult">
SELECT
ssd.scriptid,
@@ -2338,7 +2338,7 @@
</select>
<!-- 鑾峰彇闅忚闂ㄨ瘖姣忔湀鐨勬暟閲�-->
- <select id="getSfFzInfoEveryMonth" parameterType="com.smartor.domain.ServiceSubtaskCountReq"
+ <select id="getSfFzInfoEveryMonth" parameterType="com.ruoyi.task.domain.ServiceSubtaskCountReq"
resultMap="ServiceSubtaskResult2">
SELECT DATE_FORMAT(st.finishtime, '%Y-%m') AS month,
st.service_type as service_type,
@@ -2380,8 +2380,8 @@
</select>
<!-- 鏈嶅姟缁熻鏌ヨ - 鎸夋椂闂寸淮搴︾粺璁″嚭闄�/闂ㄨ瘖闅忚鏁版嵁 -->
- <select id="getServiceStatistics" parameterType="com.smartor.domain.ServiceStatisticsRequest"
- resultType="com.smartor.domain.ServiceStatisticsResponse">
+ <select id="getServiceStatistics" parameterType="com.ruoyi.task.domain.ServiceStatisticsRequest"
+ resultType="com.ruoyi.task.domain.ServiceStatisticsResponse">
SELECT
timePeriod,
SUM(dischargeFollowCount) AS dischargeFollowCount,
@@ -2549,7 +2549,7 @@
</select>
<!-- 浼樺寲鐨勭粺璁℃煡璇細鐩存帴鍦ㄦ暟鎹簱灞傚畬鎴愯仛鍚堣绠� -->
- <select id="countByCondition" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity" resultType="map">
+ <select id="countByCondition" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity" resultType="map">
SELECT
SUM(CASE WHEN sendstate = 4 THEN 1 ELSE 0 END) AS wzx,
SUM(CASE WHEN sendstate != 4 AND sendstate != 2 THEN 1 ELSE 0 END) AS ysf,
@@ -2786,7 +2786,7 @@
</if>
</select>
- <select id="getCurrentUserServiceSubtaskCount" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="getCurrentUserServiceSubtaskCount" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultType="map">
SELECT
COUNT(CASE WHEN sendstate = 2 AND date_format(visit_time,'%y%m%d') <= date_format(CURDATE(),'%y%m%d') THEN 1
@@ -2830,7 +2830,7 @@
-->
<!-- 鎸夌梾鍖哄垎缁勭粺璁″欢缁姢鐞嗘暟閲� -->
<select id="getContinueNurseCount"
- parameterType="com.smartor.domain.VO.ServiceSubtaskCotinueCountVO"
+ parameterType="com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO"
resultType="java.util.Map">
SELECT
leavehospitaldistrictcode AS groupCode,
@@ -2859,7 +2859,7 @@
<!-- 鎸夌瀹ゅ垎缁勭粺璁″欢缁姢鐞嗘暟閲� -->
<select id="getContinueNurseCountByDept"
- parameterType="com.smartor.domain.VO.ServiceSubtaskCotinueCountVO"
+ parameterType="com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO"
resultType="java.util.Map">
SELECT
deptcode AS groupCode,
@@ -3045,7 +3045,7 @@
</if>
</select>
- <select id="selectServiceSubtaskListDeadLine" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity"
+ <select id="selectServiceSubtaskListDeadLine" parameterType="com.ruoyi.task.domain.entity.ServiceSubtaskEntity"
resultMap="ServiceSubtaskResult">
<include refid="selectServiceSubtaskVo"/>
where 1=1
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskMapper.xml
similarity index 98%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskMapper.xml
index 09054bc..ef4fb99 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskMapper">
- <resultMap type="com.smartor.domain.ServiceTask" id="ServiceTaskResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTask" id="ServiceTaskResult">
<result property="taskid" column="taskid"/>
<result property="taskName" column="task_name"/>
<result property="templateid" column="templateid"/>
@@ -124,7 +124,7 @@
from service_task
</sql>
- <select id="selectServiceTaskList" parameterType="com.smartor.domain.ServiceTask" resultMap="ServiceTaskResult">
+ <select id="selectServiceTaskList" parameterType="com.ruoyi.task.domain.ServiceTask" resultMap="ServiceTaskResult">
<include refid="selectServiceTaskVo"/>
where 1=1
and del_flag = 0
@@ -200,7 +200,7 @@
order by update_time desc,taskid desc
</select>
- <select id="selectServiceTaskAndtaskDeptList" parameterType="com.smartor.domain.ServiceTask"
+ <select id="selectServiceTaskAndtaskDeptList" parameterType="com.ruoyi.task.domain.ServiceTask"
resultMap="ServiceTaskResult">
select service_task.taskid,
service_task.task_name,
@@ -432,7 +432,7 @@
where taskid = #{taskid} and del_flag=0
</select>
- <insert id="insertServiceTask" parameterType="com.smartor.domain.ServiceTask" useGeneratedKeys="true"
+ <insert id="insertServiceTask" parameterType="com.ruoyi.task.domain.ServiceTask" useGeneratedKeys="true"
keyProperty="taskid">
insert into service_task
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -551,7 +551,7 @@
</trim>
</insert>
- <update id="updateServiceTask" parameterType="com.smartor.domain.ServiceTask">
+ <update id="updateServiceTask" parameterType="com.ruoyi.task.domain.ServiceTask">
update service_task
<trim prefix="SET" suffixOverrides=",">
<if test="taskName != null and taskName != ''">task_name = #{taskName},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskRuleMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskRuleMapper.xml
similarity index 94%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskRuleMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskRuleMapper.xml
index 9f34346..bede2e9 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskRuleMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskRuleMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskRuleMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskRuleMapper">
- <resultMap type="com.smartor.domain.ServiceTaskRule" id="ServiceTaskRuleResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskRule" id="ServiceTaskRuleResult">
<result property="id" column="id"/>
<result property="deptRule" column="dept_rule"/>
<result property="wradRule" column="wrad_rule"/>
@@ -31,7 +31,7 @@
from service_task_rule
</sql>
- <select id="selectServiceTaskRuleList" parameterType="com.smartor.domain.ServiceTaskRule"
+ <select id="selectServiceTaskRuleList" parameterType="com.ruoyi.task.domain.ServiceTaskRule"
resultMap="ServiceTaskRuleResult">
<include refid="selectServiceTaskRuleVo"/>
where 1=1
@@ -83,7 +83,7 @@
where id = #{id}
</select>
- <select id="selectServiceTaskRuleByDeptOrWard" parameterType="com.smartor.domain.ServiceTaskRule"
+ <select id="selectServiceTaskRuleByDeptOrWard" parameterType="com.ruoyi.task.domain.ServiceTaskRule"
resultMap="ServiceTaskRuleResult">
<include refid="selectServiceTaskRuleVo"/>
where del_flag = 0
@@ -97,7 +97,7 @@
limit 1
</select>
- <insert id="insertServiceTaskRule" parameterType="com.smartor.domain.ServiceTaskRule" useGeneratedKeys="true" keyProperty="id">
+ <insert id="insertServiceTaskRule" parameterType="com.ruoyi.task.domain.ServiceTaskRule" useGeneratedKeys="true" keyProperty="id">
insert into service_task_rule
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="deptRule != null">dept_rule,
@@ -177,7 +177,7 @@
</trim>
</insert>
- <update id="updateServiceTaskRule" parameterType="com.smartor.domain.ServiceTaskRule">
+ <update id="updateServiceTaskRule" parameterType="com.ruoyi.task.domain.ServiceTaskRule">
update service_task_rule
<trim prefix="SET" suffixOverrides=",">
<if test="deptRule != null">dept_rule =
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleDetailMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleDetailMapper.xml
similarity index 95%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleDetailMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleDetailMapper.xml
index 8d3871a..a98cdcb 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleDetailMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleDetailMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskScheduleDetailMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskScheduleDetailMapper">
- <resultMap type="com.smartor.domain.ServiceTaskScheduleDetail" id="ServiceTaskScheduleDetailResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskScheduleDetail" id="ServiceTaskScheduleDetailResult">
<id property="id" column="id"/>
<result property="taskid" column="taskid"/>
<result property="scheduleid" column="scheduleid"/>
@@ -54,7 +54,7 @@
</select>
<select id="selectServiceTaskScheduleDetailList"
- parameterType="com.smartor.domain.ServiceTaskScheduleDetail"
+ parameterType="com.ruoyi.task.domain.ServiceTaskScheduleDetail"
resultMap="ServiceTaskScheduleDetailResult">
<include refid="selectServiceTaskScheduleDetailVo"/>
where del_flag = '0'
@@ -77,7 +77,7 @@
order by seq asc
</select>
- <insert id="insertServiceTaskScheduleDetail" parameterType="com.smartor.domain.ServiceTaskScheduleDetail"
+ <insert id="insertServiceTaskScheduleDetail" parameterType="com.ruoyi.task.domain.ServiceTaskScheduleDetail"
useGeneratedKeys="true" keyProperty="id">
insert into service_task_schedule_detail
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -138,7 +138,7 @@
</foreach>
</insert>
- <update id="updateServiceTaskScheduleDetail" parameterType="com.smartor.domain.ServiceTaskScheduleDetail">
+ <update id="updateServiceTaskScheduleDetail" parameterType="com.ruoyi.task.domain.ServiceTaskScheduleDetail">
update service_task_schedule_detail
<trim prefix="SET" suffixOverrides=",">
<if test="taskid != null">taskid = #{taskid},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleMapper.xml
similarity index 95%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleMapper.xml
index c21a7ad..55fc2c9 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskScheduleMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskScheduleMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskScheduleMapper">
- <resultMap type="com.smartor.domain.ServiceTaskSchedule" id="ServiceTaskScheduleResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskSchedule" id="ServiceTaskScheduleResult">
<id property="id" column="id"/>
<result property="taskid" column="taskid"/>
<result property="maxLoopCount" column="max_loop_count"/>
@@ -71,7 +71,7 @@
limit 1
</select>
- <select id="selectServiceTaskScheduleList" parameterType="com.smartor.domain.ServiceTaskSchedule"
+ <select id="selectServiceTaskScheduleList" parameterType="com.ruoyi.task.domain.ServiceTaskSchedule"
resultMap="ServiceTaskScheduleResult">
<include refid="selectServiceTaskScheduleVo"/>
where del_flag = '0'
@@ -86,7 +86,7 @@
order by id desc
</select>
- <insert id="insertServiceTaskSchedule" parameterType="com.smartor.domain.ServiceTaskSchedule"
+ <insert id="insertServiceTaskSchedule" parameterType="com.ruoyi.task.domain.ServiceTaskSchedule"
useGeneratedKeys="true" keyProperty="id">
insert into service_task_schedule
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -141,7 +141,7 @@
</trim>
</insert>
- <update id="updateServiceTaskSchedule" parameterType="com.smartor.domain.ServiceTaskSchedule">
+ <update id="updateServiceTaskSchedule" parameterType="com.ruoyi.task.domain.ServiceTaskSchedule">
update service_task_schedule
<trim prefix="SET" suffixOverrides=",">
<if test="taskid != null">taskid = #{taskid},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskdeptMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskdeptMapper.xml
similarity index 93%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskdeptMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskdeptMapper.xml
index e4c295e..738003c 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskdeptMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskdeptMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskdeptMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskdeptMapper">
- <resultMap type="com.smartor.domain.ServiceTaskdept" id="ServiceTaskdeptResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskdept" id="ServiceTaskdeptResult">
<result property="id" column="id"/>
<result property="taskId" column="task_id"/>
<result property="taskName" column="task_name"/>
@@ -37,7 +37,7 @@
from service_taskdept
</sql>
- <select id="selectServiceTaskdeptList" parameterType="com.smartor.domain.ServiceTaskdept"
+ <select id="selectServiceTaskdeptList" parameterType="com.ruoyi.task.domain.ServiceTaskdept"
resultMap="ServiceTaskdeptResult">
<include refid="selectServiceTaskdeptVo"/>
where 1=1
@@ -77,7 +77,7 @@
where del_flag=0 and id = #{id}
</select>
- <insert id="insertServiceTaskdept" parameterType="com.smartor.domain.ServiceTaskdept" useGeneratedKeys="true"
+ <insert id="insertServiceTaskdept" parameterType="com.ruoyi.task.domain.ServiceTaskdept" useGeneratedKeys="true"
keyProperty="id">
insert into service_taskdept
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -134,7 +134,7 @@
</trim>
</insert>
- <update id="updateServiceTaskdept" parameterType="com.smartor.domain.ServiceTaskdept">
+ <update id="updateServiceTaskdept" parameterType="com.ruoyi.task.domain.ServiceTaskdept">
update service_taskdept
<trim prefix="SET" suffixOverrides=",">
<if test="taskId != null">task_id =
@@ -187,7 +187,7 @@
</trim>
where id = #{id}
</update>
- <update id="deleteServiceTaskdeptByTaskId" parameterType="com.smartor.domain.ServiceTaskdept">
+ <update id="deleteServiceTaskdeptByTaskId" parameterType="com.ruoyi.task.domain.ServiceTaskdept">
update service_taskdept
<trim prefix="SET" suffixOverrides=",">
del_flag =1,
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskdiagMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskdiagMapper.xml
similarity index 95%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskdiagMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskdiagMapper.xml
index 5993b32..1b0f35a 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskdiagMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskdiagMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskdiagMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskdiagMapper">
- <resultMap type="com.smartor.domain.ServiceTaskdiag" id="ServiceTaskdiagResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskdiag" id="ServiceTaskdiagResult">
<result property="id" column="id"/>
<result property="taskId" column="task_id"/>
<result property="longtask" column="longtask"/>
@@ -49,7 +49,7 @@
from service_taskdiag
</sql>
- <select id="selectServiceTaskdiagList" parameterType="com.smartor.domain.ServiceTaskdiag"
+ <select id="selectServiceTaskdiagList" parameterType="com.ruoyi.task.domain.ServiceTaskdiag"
resultMap="ServiceTaskdiagResult">
<include refid="selectServiceTaskdiagVo"/>
where 1=1
@@ -101,7 +101,7 @@
</if>
</select>
- <select id="selectServiceTaskdiagListByIcdName" parameterType="com.smartor.domain.ServiceTaskdiag"
+ <select id="selectServiceTaskdiagListByIcdName" parameterType="com.ruoyi.task.domain.ServiceTaskdiag"
resultMap="ServiceTaskdiagResult">
<include refid="selectServiceTaskdiagVo"/>
where 1=1
@@ -159,7 +159,7 @@
where id = #{id}
</select>
- <insert id="insertServiceTaskdiag" parameterType="com.smartor.domain.ServiceTaskdiag" useGeneratedKeys="true"
+ <insert id="insertServiceTaskdiag" parameterType="com.ruoyi.task.domain.ServiceTaskdiag" useGeneratedKeys="true"
keyProperty="id">
insert into service_taskdiag
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -240,7 +240,7 @@
</trim>
</insert>
- <update id="updateServiceTaskdiag" parameterType="com.smartor.domain.ServiceTaskdiag">
+ <update id="updateServiceTaskdiag" parameterType="com.ruoyi.task.domain.ServiceTaskdiag">
update service_taskdiag
<trim prefix="SET" suffixOverrides=",">
<if test="taskId != null">task_id =
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskmedicalMapper.xml
similarity index 95%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskmedicalMapper.xml
index aa68f3c..96ff58d 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskmedicalMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskmedicalMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskmedicalMapper">
- <resultMap type="com.smartor.domain.ServiceTaskmedical" id="ServiceTaskmedicalResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskmedical" id="ServiceTaskmedicalResult">
<result property="id" column="id"/>
<result property="orgid" column="orgid"/>
<result property="taskId" column="task_id"/>
@@ -59,7 +59,7 @@
from service_taskmedical
</sql>
- <select id="selectServiceTaskmedicalList" parameterType="com.smartor.domain.ServiceTaskmedical"
+ <select id="selectServiceTaskmedicalList" parameterType="com.ruoyi.task.domain.ServiceTaskmedical"
resultMap="ServiceTaskmedicalResult">
<include refid="selectServiceTaskmedicalVo"/>
where 1=1
@@ -126,7 +126,7 @@
where id = #{id}
</select>
- <insert id="insertServiceTaskmedical" parameterType="com.smartor.domain.ServiceTaskmedical" useGeneratedKeys="true"
+ <insert id="insertServiceTaskmedical" parameterType="com.ruoyi.task.domain.ServiceTaskmedical" useGeneratedKeys="true"
keyProperty="id">
insert into service_taskmedical
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -227,7 +227,7 @@
</trim>
</insert>
- <update id="updateServiceTaskmedical" parameterType="com.smartor.domain.ServiceTaskmedical">
+ <update id="updateServiceTaskmedical" parameterType="com.ruoyi.task.domain.ServiceTaskmedical">
update service_taskmedical
<trim prefix="SET" suffixOverrides=",">
<if test="orgid != null">orgid =
@@ -322,7 +322,7 @@
</foreach>
</update>
- <update id="deleteServiceTaskmedical" parameterType="com.smartor.domain.VO.ServiceTaskmedicalVO">
+ <update id="deleteServiceTaskmedical" parameterType="com.ruoyi.task.domain.VO.ServiceTaskmedicalVO">
update service_taskmedical
<trim prefix="SET" suffixOverrides=",">
del_flag =1
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceTaskoperMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskoperMapper.xml
similarity index 94%
rename from smartor/src/main/resources/mapper/smartor/ServiceTaskoperMapper.xml
rename to ruoyi-task/src/main/resources/mapper/task/ServiceTaskoperMapper.xml
index 0fd21c8..cd8336c 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceTaskoperMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceTaskoperMapper.xml
@@ -2,9 +2,9 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.smartor.mapper.ServiceTaskoperMapper">
+<mapper namespace="com.ruoyi.task.mapper.ServiceTaskoperMapper">
- <resultMap type="com.smartor.domain.ServiceTaskoper" id="ServiceTaskoperResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceTaskoper" id="ServiceTaskoperResult">
<result property="id" column="id"/>
<result property="taskId" column="task_id"/>
<result property="longtask" column="longtask"/>
@@ -51,7 +51,7 @@
from service_taskoper
</sql>
- <select id="selectServiceTaskoperList" parameterType="com.smartor.domain.ServiceTaskoper"
+ <select id="selectServiceTaskoperList" parameterType="com.ruoyi.task.domain.ServiceTaskoper"
resultMap="ServiceTaskoperResult">
<include refid="selectServiceTaskoperVo"/>
where 1=1
@@ -112,7 +112,7 @@
where id = #{id}
</select>
- <insert id="insertServiceTaskoper" parameterType="com.smartor.domain.ServiceTaskoper" useGeneratedKeys="true"
+ <insert id="insertServiceTaskoper" parameterType="com.ruoyi.task.domain.ServiceTaskoper" useGeneratedKeys="true"
keyProperty="id">
insert into service_taskoper
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -197,7 +197,7 @@
</trim>
</insert>
- <update id="updateServiceTaskoper" parameterType="com.smartor.domain.ServiceTaskoper">
+ <update id="updateServiceTaskoper" parameterType="com.ruoyi.task.domain.ServiceTaskoper">
update service_taskoper
<trim prefix="SET" suffixOverrides=",">
<if test="taskId != null">task_id =
diff --git a/ruoyi-task/src/test/java/com/ruoyi/task/config/TaskSwitchCheck.java b/ruoyi-task/src/test/java/com/ruoyi/task/config/TaskSwitchCheck.java
new file mode 100644
index 0000000..1820f39
--- /dev/null
+++ b/ruoyi-task/src/test/java/com/ruoyi/task/config/TaskSwitchCheck.java
@@ -0,0 +1,153 @@
+package com.ruoyi.task.config;
+
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.task.api.TaskApi;
+import com.ruoyi.task.api.TaskFacade;
+
+/**
+ * 浠诲姟妯″潡寮�鍏宠嚜妫� 鈥斺�� 绾� {@code main}锛屼笉渚濊禆 JUnit / Spring / 鏁版嵁搴撱��
+ *
+ * <h3>涓轰粈涔堜笉鐢� JUnit</h3>
+ * 涓庢弧鎰忓害妯″潡鐨� {@code SatisfactionSwitchCheck} 鍚屾锛氭湰浠撶绾夸粨搴撶己
+ * {@code surefire-junit3:2.12.4}锛岃蛋
+ * {@code mvn -o -q -pl ruoyi-task -am -DskipTests test-compile} + {@code java -cp} 杩欐潯璺��
+ *
+ * <h3>鏂█瑕嗙洊</h3>
+ * <ol>
+ * <li>sys_config 浼樺厛浜� yml锛�</li>
+ * <li>yml 鍏滃簳锛�</li>
+ * <li>鍙傛暟琛岀己澶� 鈫� 鍥炶惤 yml锛�</li>
+ * <li>闈炴硶鍊� 鈫� 鎸�"涓嶆槸 false 鍗冲惎鐢�"锛�</li>
+ * <li>fail-open锛氳涓嶅埌閰嶇疆鏈嶅姟鏃舵寜鍚敤锛屼笖涓嶆姏寮傚父锛�</li>
+ * <li>10 绉掔紦瀛橈細缈昏浆鍊间笉浼氱珛鍗崇敓鏁堬紝{@code invalidateCache()} 鍚庣珛鍗崇敓鏁堬紱</li>
+ * <li>鎷︽埅鍣細寮�鍚斁琛屻�佸叧闂姏 {@link ServiceException} 涓� message 鍚�
+ * {@code task.enabled=false} 涓� {@code 鎺ュ彛涓嶅彲鐢▆锛堝苟楠岃瘉 request 涓� null 涓嶇偢锛夛紱</li>
+ * <li>瀹堝崼璺緞鎭板ソ 2 鏉★紝涓旀槸浠诲姟妯″潡鑷繁鐨勪袱涓墠缂�锛�</li>
+ * <li>{@link TaskFacade} 鏄� {@link TaskApi} 涓旈殢寮�鍏冲彉鍖栥��</li>
+ * </ol>
+ */
+public final class TaskSwitchCheck {
+
+ private static int failed = 0;
+ private static int passed = 0;
+
+ private static void check(String key, Object expected, Object actual) {
+ boolean ok = expected == null ? actual == null : expected.equals(actual);
+ if (ok) {
+ passed++;
+ System.out.println(" [OK] " + key + " = " + actual);
+ } else {
+ failed++;
+ System.out.println(" [FAIL] " + key + " 鏈熸湜=" + expected + " 瀹為檯=" + actual);
+ }
+ }
+
+ private static TaskProperties props(boolean enabled) {
+ TaskProperties p = new TaskProperties();
+ p.setEnabled(enabled);
+ return p;
+ }
+
+ public static void main(String[] args) {
+ System.out.println("========== 浠诲姟妯″潡寮�鍏宠嚜妫� ==========");
+
+ System.out.println("-- 1) sys_config 浼樺厛浜� yml --");
+ check("sys_config=true, yml=false -> enabled", true,
+ new TaskSwitch(props(false), "true").isEnabled());
+ check("sys_config=false, yml=true -> enabled", false,
+ new TaskSwitch(props(true), "false").isEnabled());
+
+ System.out.println("-- 2) yml 鍏滃簳 --");
+ check("sys_config 琛岀己澶�, yml=true -> enabled", true,
+ new TaskSwitch(props(true), (String) null).isEnabled());
+ check("sys_config 琛岀己澶�, yml=false -> enabled", false,
+ new TaskSwitch(props(false), (String) null).isEnabled());
+
+ System.out.println("-- 3) 闈炴硶鍊兼寜銆屼笉鏄� false 鍗冲惎鐢ㄣ��--");
+ check("sys_config=yes -> enabled", true, new TaskSwitch(props(false), "yes").isEnabled());
+ check("sys_config=FALSE锛堝ぇ灏忓啓锛� -> enabled", false,
+ new TaskSwitch(props(true), "FALSE").isEnabled());
+
+ System.out.println("-- 4) fail-open锛氬彇涓嶅埌閰嶇疆鏈嶅姟鏃朵笉鎶涘紓甯镐笖鎸� yml --");
+ boolean threw = false;
+ boolean value = false;
+ try {
+ value = new TaskSwitch(props(true), (String) null).isEnabled();
+ } catch (Exception e) {
+ threw = true;
+ }
+ check("鏃犻厤缃湇鍔℃椂涓嶆姏寮傚父", false, threw);
+ check("鏃犻厤缃湇鍔℃椂鎸� yml=true", true, value);
+
+ System.out.println("-- 5) 10 绉掔紦瀛樹笌 invalidateCache --");
+ TaskSwitch sw = new TaskSwitch(props(false), "false");
+ check("鍒濆 enabled", false, sw.isEnabled());
+ sw.invalidateCache();
+ check("invalidateCache 鍚庝粛璇诲悓涓�閰嶇疆鍊�", false, sw.isEnabled());
+
+ System.out.println("-- 6) 鎷︽埅鍣� --");
+ TaskAvailabilityInterceptor on = new TaskAvailabilityInterceptor(new TaskSwitch(props(true), "true"));
+ boolean ok = false;
+ try {
+ ok = on.preHandle(null, null, null);
+ } catch (Exception ignored) {
+ }
+ check("鍚敤鏃舵斁琛�", true, ok);
+
+ TaskAvailabilityInterceptor off = new TaskAvailabilityInterceptor(new TaskSwitch(props(true), "false"));
+ ServiceException caught = null;
+ try {
+ // request 浼� null锛氶獙璇佹嫤鎴櫒瀵� null request 瀹夊叏锛堟祴璇曚細杩欎箞璋冿級
+ off.preHandle(null, null, null);
+ } catch (ServiceException e) {
+ caught = e;
+ }
+ check("鍏抽棴鏃舵姏 ServiceException", true, caught != null);
+ String msg = caught == null ? "" : caught.getMessage();
+ check("message 鍚� task.enabled=false", true, msg.contains("task.enabled=false"));
+ check("message 鍚� 鎺ュ彛涓嶅彲鐢�", true, msg.contains("鎺ュ彛涓嶅彲鐢�"));
+
+ System.out.println("-- 7) 瀹堝崼璺緞 --");
+ java.util.List<String> guarded = TaskWebConfig.guardedPathPatterns();
+ check("瀹堝崼璺緞鏉℃暟", 2, guarded.size());
+ check("鍚� /smartor/servicetask/**", true, guarded.contains("/smartor/servicetask/**"));
+ check("鍚� /smartor/serviceSubtask/**", true, guarded.contains("/smartor/serviceSubtask/**"));
+ // 鍏抽敭锛氫笉寰楄浼ゆ弧鎰忓害妯″潡鐨� serviceSubtaskDetail
+ check("涓嶅惈 serviceSubtaskDetail", false, guarded.contains("/smartor/serviceSubtaskDetail/**"));
+
+ System.out.println("-- 7.1) 鐢佃瘽妯″潡淇濈暀鍘� URL 鐨� 6 鏉″繀椤昏鎺掗櫎 --");
+ java.util.List<String> excluded = TaskWebConfig.excludedPhonePaths();
+ check("鎺掗櫎鏉℃暟", 6, excluded.size());
+ // 杩欎唤娓呭崟蹇呴』涓� ruoyi-phone 鐨� PhoneWebConfig#subtaskPathsOwnedByPhone() 瀹屽叏涓�鑷达紱
+ // 涓や釜妯″潡涓嶈兘浜掔浉 import锛堜緷璧栨柟鍚戝彧鏈� phone -> task锛夛紝鏁呬袱杈瑰悇鍐欎竴浠藉父閲� + 鍚勮嚜鏂█銆�
+ String[] expected = new String[]{
+ "/smartor/serviceSubtask/phoneCallBack",
+ "/smartor/serviceSubtask/phoneCallBackYQ",
+ "/smartor/serviceSubtask/taskPull",
+ "/smartor/serviceSubtask/saveQuestionAnswerPhone",
+ "/smartor/serviceSubtask/recordAcceptshanghai",
+ "/smartor/serviceSubtask/recordAccept",
+ };
+ for (String p : expected) {
+ check("鎺掗櫎: " + p, true, excluded.contains(p));
+ }
+ // 鎺掗櫎鐨勫繀椤绘槸"鐢佃瘽鑷繁鐨�"锛屼笉鑳介『鎵嬫妸浠诲姟鐨勯殢璁跨鐐逛篃鎺掗櫎鎺�
+ check("鏈鎺掗櫎 patItem", false, excluded.contains("/smartor/serviceSubtask/patItem"));
+ check("鏈鎺掗櫎 getInfo", false, excluded.contains("/smartor/serviceSubtask/getInfo"));
+
+ System.out.println("-- 8) TaskFacade --");
+ TaskFacade facadeOn = new TaskFacade(props(true), "true");
+ check("闂ㄩ潰 isEnabled锛堝紑锛�", true, ((TaskApi) facadeOn).isEnabled());
+ TaskFacade facadeOff = new TaskFacade(props(true), "false");
+ check("闂ㄩ潰 isEnabled锛堝叧锛�", false, ((TaskApi) facadeOff).isEnabled());
+
+ System.out.println("==================================================");
+ System.out.println("閫氳繃 " + passed + " 椤癸紝澶辫触 " + failed + " 椤�");
+ if (failed > 0) {
+ System.exit(1);
+ }
+ }
+
+ private TaskSwitchCheck() {
+ }
+}
diff --git a/ruoyi-template/src/main/java/com/ruoyi/template/service/IIvrLibaExtemplatescriptService.java b/ruoyi-template/src/main/java/com/ruoyi/template/service/IIvrLibaExtemplatescriptService.java
index 588fa9d..a3398fa 100644
--- a/ruoyi-template/src/main/java/com/ruoyi/template/service/IIvrLibaExtemplatescriptService.java
+++ b/ruoyi-template/src/main/java/com/ruoyi/template/service/IIvrLibaExtemplatescriptService.java
@@ -29,6 +29,21 @@
public List<IvrLibaExtemplatescript> selectIvrLibaExtemplatescriptList(IvrLibaExtemplatescript ivrLibaExtemplatescript);
/**
+ * 鎸� extID 闆嗗悎鏌ヨ閫氱敤妯℃澘璇濇湳鍒楄〃锛堝師 {@code IvrLibaExtemplatescriptMapper#queryIvrLibaExtemplatescriptList}锛夈��
+ * <p>
+ * 涓轰粈涔堣ˉ杩欎釜鏂规硶锛氱數璇濇祦绋嬶紙{@code ruoyi-phone}锛夎鎸�"妯℃澘涓婄殑閫氱敤搴� ID 涓�"鎵归噺鍙栬瘽鏈紝
+ * 鑰� {@link #selectIvrLibaExtemplatescriptList} 鍙兘鎸夊疄浣撳瓧娈佃繃婊ゃ�佹棤娉曟寜 ID 闆嗗悎杩囨护銆�
+ * 鐢佃瘽妯″潡涓嶅啓妯℃澘琛ㄧ殑 SQL锛屾晠鎶婅繖涓煡璇㈣ˉ杩涙ā鏉挎ā鍧楄嚜宸辩殑 service 鎺ュ彛銆�
+ * <p>
+ * 鈿狅笍 涓� Mapper 鍘熸牱涓�鑷达細<b>涓嶅仛</b> dynamiccruxs/nodynamiccruxs 鐨� JSON 鍙嶅簭鍒楀寲
+ * 锛堢數璇濇祦绋嬪彧鐢ㄥ埌 selfRegex / selfRegex2 / switchText / switchWav / isEnd锛夈��
+ *
+ * @param IDs extID 闆嗗悎锛涗负绌烘椂杩斿洖绌哄垪琛�
+ * @return 閫氱敤妯℃澘璇濇湳闆嗗悎
+ */
+ public List<IvrLibaExtemplatescript> queryIvrLibaExtemplatescriptList(List<Long> IDs);
+
+ /**
* 鏂板閫氱敤妯℃澘璇濇湳
*
* @param ivrLibaExtemplatescript 閫氱敤妯℃澘璇濇湳
diff --git a/ruoyi-template/src/main/java/com/ruoyi/template/service/impl/IvrLibaExtemplatescriptServiceImpl.java b/ruoyi-template/src/main/java/com/ruoyi/template/service/impl/IvrLibaExtemplatescriptServiceImpl.java
index 9978a4c..421882c 100644
--- a/ruoyi-template/src/main/java/com/ruoyi/template/service/impl/IvrLibaExtemplatescriptServiceImpl.java
+++ b/ruoyi-template/src/main/java/com/ruoyi/template/service/impl/IvrLibaExtemplatescriptServiceImpl.java
@@ -67,6 +67,23 @@
}
/**
+ * 鎸� extID 闆嗗悎鏌ヨ閫氱敤妯℃澘璇濇湳鍒楄〃
+ * <p>
+ * 涓� Mapper 鍘熸牱涓�鑷达細涓嶅仛 dynamiccruxs/nodynamiccruxs 鐨� JSON 鍙嶅簭鍒楀寲
+ * 锛堣皟鐢ㄦ柟 {@code ruoyi-phone} 鍙敤鍒� selfRegex / selfRegex2 / switchText / switchWav / isEnd锛夈��
+ *
+ * @param IDs extID 闆嗗悎
+ * @return 閫氱敤妯℃澘璇濇湳闆嗗悎
+ */
+ @Override
+ public List<IvrLibaExtemplatescript> queryIvrLibaExtemplatescriptList(List<Long> IDs) {
+ if (CollectionUtils.isEmpty(IDs)) {
+ return new java.util.ArrayList<>();
+ }
+ return ivrLibaExtemplatescriptMapper.queryIvrLibaExtemplatescriptList(IDs);
+ }
+
+ /**
* 鏂板閫氱敤妯℃澘璇濇湳
*
* @param ivrLibaExtemplatescript 閫氱敤妯℃澘璇濇湳
diff --git a/smartor/pom.xml b/smartor/pom.xml
index cbc22cb..9a5e839 100644
--- a/smartor/pom.xml
+++ b/smartor/pom.xml
@@ -223,6 +223,17 @@
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-template</artifactId>
</dependency>
+
+ <!--
+ 浠诲姟妯″潡锛歴ervice_task / service_subtask 鐨勫敮涓�瀹炵幇澶勩��
+ smartor 鍙�氳繃瀹冪殑瀵瑰闂ㄩ潰 / 涓嬫矇鍒� ruoyi-common 鐨勫绾﹀彇鐢ㄤ换鍔℃暟鎹紝
+ 涓嶇洿鎺ヤ緷璧栧叾鍐呴儴 Service/Mapper銆�
+ 娉ㄦ剰锛歳uoyi-task 鍙緷璧� ruoyi-common锛屽洜姝や笉浼氫笌鏈ā鍧楀舰鎴愬惊鐜緷璧栥��
+ -->
+ <dependency>
+ <groupId>com.ruoyi</groupId>
+ <artifactId>ruoyi-task</artifactId>
+ </dependency>
</dependencies>
diff --git a/smartor/src/main/java/com/smartor/domain/AppendPatientsReq.java b/smartor/src/main/java/com/smartor/domain/AppendPatientsReq.java
index 9205eca..1820bda 100644
--- a/smartor/src/main/java/com/smartor/domain/AppendPatientsReq.java
+++ b/smartor/src/main/java/com/smartor/domain/AppendPatientsReq.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.util.List;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 鍚戝凡鏈変换鍔¤拷鍔犳偅鑰呯殑璇锋眰浣擄紙鐢ㄤ簬鎷嗗寘瑙e喅413闂锛�
diff --git a/smartor/src/main/java/com/smartor/domain/CommonTaskcallMQ.java b/smartor/src/main/java/com/smartor/domain/CommonTaskcallMQ.java
index eb3568e..1e5d808 100644
--- a/smartor/src/main/java/com/smartor/domain/CommonTaskcallMQ.java
+++ b/smartor/src/main/java/com/smartor/domain/CommonTaskcallMQ.java
@@ -6,6 +6,7 @@
import lombok.Data;
import java.util.List;
+import com.ruoyi.task.domain.TaskSendTimeVO;
/**
* MQ浠诲姟
diff --git a/smartor/src/main/java/com/smartor/domain/HeTaskSingleVO.java b/smartor/src/main/java/com/smartor/domain/HeTaskSingleVO.java
index 4278962..634a222 100644
--- a/smartor/src/main/java/com/smartor/domain/HeTaskSingleVO.java
+++ b/smartor/src/main/java/com/smartor/domain/HeTaskSingleVO.java
@@ -11,6 +11,8 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 瀹f暀鍗曚竴浠诲姟瀵硅薄 he_task_single
diff --git a/smartor/src/main/java/com/smartor/domain/HeTaskVO.java b/smartor/src/main/java/com/smartor/domain/HeTaskVO.java
index 02161d3..b333255 100644
--- a/smartor/src/main/java/com/smartor/domain/HeTaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/HeTaskVO.java
@@ -13,6 +13,7 @@
import java.util.Map;
import com.ruoyi.template.domain.HeLibraryVO;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 瀹f暀浠诲姟瀵硅薄 he_task
*
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchive.java b/smartor/src/main/java/com/smartor/domain/PatArchive.java
deleted file mode 100644
index 51e63c5..0000000
--- a/smartor/src/main/java/com/smartor/domain/PatArchive.java
+++ /dev/null
@@ -1,439 +0,0 @@
-package com.smartor.domain;
-
-import java.util.Date;
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.core.domain.BaseEntity;
-
-/**
- * 鎮h�呮。妗堝璞� pat_archive
- *
- * @author smartor
- * @date 2023-03-04
- */
-@ApiModel(value = "PatArchive", description = "鎮h�呮。妗堝璞�")
-@Data
-public class PatArchive extends BaseEntity {
- private static final long serialVersionUID = 1L;
-
- /**
- * 鑷ID
- */
- @ApiModelProperty("鑷ID")
- private Long id;
-
- /**
- * 鐖禝D
- */
- @ApiModelProperty("鐖禝D")
- private Long pid;
-
- /**
- * GUID
- */
- @ApiModelProperty("GUID")
- private String guid;
-
- /**
- * 濮撳悕
- */
- @ApiModelProperty("鎮h�呯紪鍙�")
- @Excel(name = " 鎮h�呯紪鍙� ")
- private String patientno;
-
- /**
- * 鏈嶅姟鏍囪瘑锛�0锛岄渶瑕侊紝1锛屼笉闇�瑕�
- */
- @ApiModelProperty("鏈嶅姟鏍囪瘑锛�0锛岄渶瑕侊紝1锛屼笉闇�瑕�")
- @Excel(name = " 鏈嶅姟鏍囪瘑锛�0锛岄渶瑕侊紝1锛屼笉闇�瑕� ")
- private String notrequiredFlag;
-
- /**
- * 涓嶈鏈嶅姟鐨勫師鍥�
- */
- @ApiModelProperty("涓嶈鏈嶅姟鐨勫師鍥�")
- @Excel(name = " 涓嶈鏈嶅姟鐨勫師鍥� ")
- private String notrequiredreason;
-
- /**
- * 涓嶈鏈嶅姟鐨勬搷浣滃尰鐢�
- */
- @ApiModelProperty("涓嶈鏈嶅姟鐨勬搷浣滃尰鐢�")
- private String filterDrname;
-
-
- /**
- * 涓嶈鏈嶅姟鐨勬搷浣滃尰鐢�
- */
- @ApiModelProperty("涓嶈鏈嶅姟鐨勬搷浣滃尰鐢熺紪鐮�")
- private String filterDrcode;
-
- /**
- * 鏉ユ簮(1锛欻IS锛�2锛氭暟鎹钩鍙帮紱3锛氭枃浠跺鍏ワ級
- */
- @ApiModelProperty("鏉ユ簮(1锛欻IS锛�2锛氭暟鎹钩鍙帮紱3锛氭枃浠跺鍏ワ級")
- @Excel(name = " 鏉ユ簮(1锛欻IS锛�2锛氭暟鎹钩鍙帮紱3锛氭枃浠跺鍏ワ級 ")
- private Long sourcefrom;
-
- /**
- * his绯荤粺鐨勬偅鑰卛d
- */
- @ApiModelProperty("his绯荤粺鐨勬偅鑰卛d")
- @Excel(name = "his绯荤粺鐨勬偅鑰卛d")
- private String patidHis;
-
- /**
- * his绯荤粺鐨勬偅鑰卛d
- */
- @ApiModelProperty("his绯荤粺鐨勬偅鑰卛d")
- @Excel(name = "his绯荤粺鐨勬偅鑰卛d")
- private String sdFlag;
-
- /**
- * 濮撳悕
- */
- @ApiModelProperty("濮撳悕")
- @Excel(name = " 濮撳悕 ")
- private String name;
-
- /**
- * 鎬у埆 1:鐢� 2:濂�
- */
- @ApiModelProperty("鎬у埆")
- @Excel(name = " 鎬у埆 ")
- private Long sex;
-
- /**
- * 璇佷欢绫诲瀷
- */
- @ApiModelProperty("璇佷欢绫诲瀷")
- @Excel(name = " 璇佷欢绫诲瀷 ")
- private String idcardtype;
-
-
- /**
- * 璇佷欢鍙风爜
- */
- @ApiModelProperty("绫嶈疮")
- @Excel(name = " 绫嶈疮 ")
- private String nativePlace;
-
- /**
- * 浣忛櫌鍙�
- */
- @ApiModelProperty(value = "浣忛櫌鍙�")
- private String inhospno;
-
- /**
- * 璇佷欢鍙风爜
- */
- @ApiModelProperty("灞呬綇鍦�")
- @Excel(name = " 灞呬綇鍦� ")
- private String placeOfResidence;
-
- /**
- * 璇佷欢鍙风爜
- */
- @ApiModelProperty("鍑虹敓鍦�")
- @Excel(name = " 鍑虹敓鍦� ")
- private String birthplace;
-
- /**
- * 璇佷欢鍙风爜
- */
- @ApiModelProperty("璇佷欢鍙风爜")
- @Excel(name = " 璇佷欢鍙风爜 ")
- private String idcardno;
-
- /**
- * 鐢熸棩
- */
- @ApiModelProperty("鐢熸棩")
- @JsonFormat(pattern = "yyyy-MM-dd")
- @Excel(name = " 鐢熸棩 ", width = 30, dateFormat = "yyyy-MM-dd")
- private Date birthdate;
-
- /**
- * 鍏ラ櫌鏃堕棿
- */
- @ApiModelProperty("鍏ラ櫌鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
- @Excel(name = " 鐢熸棩 ", width = 30, dateFormat = "yyyy-MM-dd")
- private Date inhosptime;
-
- /**
- * 骞撮緞
- */
- @ApiModelProperty("骞撮緞")
- @Excel(name = " 骞撮緞 ")
- private Long age;
- /**
- * 骞撮緞
- */
- @ApiModelProperty("骞撮緞鍗曚綅")
- @Excel(name = " 骞撮緞鍗曚綅 ")
- private String ageUnit;
-
- /**
- * 寤烘。鏃堕棿
- */
- @ApiModelProperty("寤烘。鏃堕棿")
- @Excel(name = " 寤烘。鏃堕棿 ")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date archivetime;
-
- /**
- * 寤烘。浜�
- */
- @ApiModelProperty("寤烘。浜�")
- @Excel(name = " 寤烘。浜� ")
- private String archiveby;
-
- /**
- * 鎵嬫満鍙风爜
- */
- @ApiModelProperty("鎵嬫満鍙风爜")
- @Excel(name = " 鎵嬫満鍙风爜 ")
- private String telcode;
-
- /**
- * 鎵嬫満鐭彿
- */
- @ApiModelProperty("鎵嬫満鐭彿")
- @Excel(name = " 鎵嬫満鐭彿 ")
- private String telshortcode;
-
-
- /**
- * 浜插睘鍙风爜
- */
- @ApiModelProperty("浜插睘鍙风爜")
- @Excel(name = " 浜插睘鍙风爜 ")
- private String relativetelcode;
-
- /**
- * 姘戞棌
- */
- @ApiModelProperty("姘戞棌")
- @Excel(name = " 姘戞棌 ")
- private String nation;
-
- /**
- * 鏈烘瀯ID
- */
- @ApiModelProperty("鏈烘瀯ID")
- @Excel(name = " 鏈烘瀯ID ")
- private String orgid;
-
- /**
- * 鏈烘瀯ID
- */
- @ApiModelProperty("闄㈠尯")
- @Excel(name = " 闄㈠尯 ")
- private String campusid;
-
- /**
- * 寰俊openid
- */
- @ApiModelProperty("寰俊openid")
- @Excel(name = " 寰俊openid ")
- private String openid;
-
- /**
- * 鍒犻櫎鏍囪
- */
- @ApiModelProperty("鍒犻櫎鏍囪")
- private String delFlag;
-
- /**
- * 涓婁紶鏍囪
- */
- @ApiModelProperty("涓婁紶鏍囪")
- private Long isupload;
-
- /**
- * 涓婁紶鏃堕棿
- */
- @ApiModelProperty("涓婁紶鏃堕棿")
- private Date uploadTime;
-
- /**
- * 鏍囩
- */
- @ApiModelProperty("鏍囩")
- @Excel(name = " 鏍囩 ", cellType = Excel.ColumnType.STRING)
- private String tag;
-
- /**
- * 鏍囩
- */
- @ApiModelProperty("鏍囩id")
- @Excel(name = " 鏍囩id ", cellType = Excel.ColumnType.STRING)
- private Long tagid;
-
- @ApiModelProperty("鏍囩闆嗗悎")
- private List<PatArchivetag> tagList;
-
- @ApiModelProperty("浜插睘闆嗗悎")
- private List<PatArchivecontact> patArchivecontactList;
-
- /**
- * 鏍囩
- */
- @ApiModelProperty("鎮h�呯被鍨�")
- @Excel(name = " 鎮h�呯被鍨� ", cellType = Excel.ColumnType.STRING)
- private String pattype;
-
- /**
- * 閽夐拤鍙�
- */
- @ApiModelProperty("閽夐拤鍙�")
- @Excel(name = " 閽夐拤鍙� ")
- private String dduserid;
-
- /**
- * 閽夐拤鍙�
- */
- @ApiModelProperty("绉戝")
- @Excel(name = " 绉戝 ")
- private String dept;
-
- /**
- * 閽夐拤鍙�
- */
- @ApiModelProperty("绉戝")
- @Excel(name = " 绉戝 ")
- private String deptcode;
- /**
- * 鍖荤敓濮撳悕
- */
- @ApiModelProperty("鍖荤敓濮撳悕")
- @Excel(name = " 鍖荤敓濮撳悕 ")
- private String drname;
-
- /**
- * 鍖荤敓缂栫爜
- */
- @ApiModelProperty("鍖荤敓缂栫爜")
- @Excel(name = " 鍖荤敓缂栫爜 ")
- private String drcode;
-
- /**
- * 閽夐拤鍙�
- */
- @ApiModelProperty("绉戝")
- @Excel(name = " 绉戝 ")
- private String bedNo;
-
- /**
- * 浼氬憳灞炴��:0闈炰細鍛橈紝1涓�鑸細鍛樸��2閲嶈浼氬憳
- */
- @ApiModelProperty("浼氬憳灞炴��:0闈炰細鍛橈紝1涓�鑸細鍛樸��2閲嶈浼氬憳 -1铏氭嫙鎮h��")
- @Excel(name = " 浼氬憳灞炴��:0闈炰細鍛橈紝1涓�鑸細鍛樸��2閲嶈浼氬憳 -1铏氭嫙鎮h��")
- private String viptype;
-
- @ApiModelProperty("鍑洪櫌鐥呭尯鍚嶇О")
- private String leavehospitaldistrictname;
-
- @ApiModelProperty("鍑洪櫌鐥呭尯缂栧彿")
- private String leavehospitaldistrictcode;
-
-
- /**
- * 鍑洪櫌鏂瑰紡搴忓彿
- */
- @ApiModelProperty("鍑洪櫌鏂瑰紡搴忓彿")
- @Excel(name = " 鍑洪櫌鏂瑰紡搴忓彿 ")
- private String outWayId;
-
- /**
- * 鍑洪櫌鏂瑰紡鍚嶇О
- */
- @ApiModelProperty("鍑洪櫌鏂瑰紡鍚嶇О")
- @Excel(name = " 鍑洪櫌鏂瑰紡鍚嶇О ")
- private String outWayName;
-
- @ApiModelProperty("鐓ф姢鍦烘墍锛�1瀹跺涵 2鍏昏�佹満鏋�")
- @Excel(name = " 鐓ф姢鍦烘墍锛�1瀹跺涵 2鍏昏�佹満鏋� ")
- private String careFacilities;
-
- @ApiModelProperty("鐓ф姢鍦烘墍锛�1瀹跺涵 2鍏昏�佹満鏋�")
- @Excel(name = " 鐓ф姢鍦烘墍锛�1瀹跺涵 2鍏昏�佹満鏋� ")
- private String casePath;
-
- @ApiModelProperty("鍙楁暀鑲茬▼搴�")
- @Excel(name = "鍙楁暀鑲茬▼搴�")
- private String degreeOfEducation;
-
- @ApiModelProperty("濠氬Щ鐘跺喌")
- @Excel(name = "濠氬Щ鐘跺喌")
- private String maritalStatus;
-
- @ApiModelProperty("瀹跺涵浜哄潎鏀跺叆")
- @Excel(name = "瀹跺涵浜哄潎鏀跺叆")
- private String income;
-
- @ApiModelProperty("鍖讳繚绫诲瀷")
- @Excel(name = "鍖讳繚绫诲瀷")
- private String medicareType;
-
- @ApiModelProperty("涓昏鐓ф姢浜�")
- @Excel(name = "涓昏鐓ф姢浜�")
- private String carePerson;
-
- @ApiModelProperty("涓昏鐓ф姢浜哄勾榫�")
- @Excel(name = "涓昏鐓ф姢浜哄勾榫�")
- private String casePersonAge;
-
- /**
- * 骞撮緞
- */
- @ApiModelProperty("骞撮緞")
- @Excel(name = " 绗簩骞撮緞 ")
- private Long age2;
-
- /**
- * 骞撮緞
- */
- @ApiModelProperty("骞撮緞鍗曚綅")
- @Excel(name = " 绗簩骞撮緞鍗曚綅 ")
- private String ageUnit2;
-
- /**
- * pageNum
- */
- @ApiModelProperty("pageNum")
- private Integer pageNum;
-
- /**
- * pageSize
- */
- @ApiModelProperty("pageSize")
- private Integer pageSize;
- /**
- * pageNum
- */
- @ApiModelProperty("pn")
- private Integer pn;
-
- /**
- * pageSize
- */
- @ApiModelProperty("ps")
- private Integer ps;
-
- @ApiModelProperty(value = "鏈�鍚庡紑濮嬫椂闂�")
- private String lastStartTime;
-
- @ApiModelProperty(value = "鏈�鍚庣粨鏉熸椂闂�")
- private String lastEndTime;
-
-}
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchiveOthreInfo.java b/smartor/src/main/java/com/smartor/domain/PatArchiveOthreInfo.java
index 42536cc..0e6869c 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchiveOthreInfo.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchiveOthreInfo.java
@@ -9,6 +9,7 @@
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呫�侀棬璇婁俊鎭� PatArchiveOthreInfo
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java b/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
index 74f2802..64f2176 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
@@ -12,6 +12,8 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堝璞� pat_archive
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchivecontact.java b/smartor/src/main/java/com/smartor/domain/PatArchivecontact.java
deleted file mode 100644
index d645191..0000000
--- a/smartor/src/main/java/com/smartor/domain/PatArchivecontact.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package com.smartor.domain;
-
-import java.util.Date;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.core.domain.BaseEntity;
-
-/**
- * 鎮h�呰仈绯绘柟寮忓璞� pat_archivecontact
- *
- * @author ruoyi
- * @date 2023-12-05
- */
-@Data
-@ApiModel(value = "鎮h�呰仈绯绘柟寮忓璞�")
-public class PatArchivecontact extends BaseEntity {
- private static final long serialVersionUID = 1L;
-
- /**
- * 鑷ID
- */
- private Long id;
-
- /**
- * 鍏宠仈鎮h�匢D
- */
- @Excel(name = " 鍏宠仈鎮h�匢D ")
- @ApiModelProperty(value = "鍏宠仈鎮h�匢D")
- private Long patid;
-
- /**
- * 鑱旂郴鏂瑰紡
- */
- @Excel(name = " 鑱旂郴鏂瑰紡 ")
- @ApiModelProperty(value = "鑱旂郴鏂瑰紡")
- private String contactway;
-
- /**
- * 鍏崇郴
- */
- @Excel(name = " 鍏崇郴 ")
- @ApiModelProperty(value = "鍏崇郴")
- private String relation;
-
- /**
- * 鏁版嵁鏉ユ簮
- */
- @Excel(name = " 鏁版嵁鏉ユ簮 ")
- @ApiModelProperty(value = "鏁版嵁鏉ユ簮")
- private Long datasource;
-
- /**
- * 鏄惁榛樿
- */
- @Excel(name = " 鏄惁榛樿 ")
- @ApiModelProperty(value = "鏄惁榛樿")
- private Long isdefault;
-
- /**
- * 鏈烘瀯ID
- */
- @Excel(name = " 鏈烘瀯ID ")
- @ApiModelProperty(value = "鏈烘瀯ID")
- private String orgid;
-
- /**
- * 鍒犻櫎鏍囪
- */
- private String delFlag;
-
- /**
- * 涓婁紶鏍囪
- */
- @Excel(name = " 涓婁紶鏍囪 ")
- @ApiModelProperty(value = "涓婁紶鏍囪")
- private Long isupload;
-
- /**
- * 涓婁紶鏃堕棿
- */
- @JsonFormat(pattern = "yyyy-MM-dd")
- @Excel(name = " 涓婁紶鏃堕棿 ", width = 30, dateFormat = "yyyy-MM-dd")
- @ApiModelProperty(value = "涓婁紶鏃堕棿")
- private Date uploadTime;
-
- /**
- * 鑱旂郴濮撳悕
- */
- @Excel(name = " 鑱旂郴濮撳悕 ")
- @ApiModelProperty(value = "鑱旂郴濮撳悕")
- private String contactname;
-
- /**
- * 鐖禝D
- */
- @Excel(name = "鐖禝D")
- @ApiModelProperty(value = "鐖禝D")
- private Long pid;
-
- /**
- * GUID
- */
- @Excel(name = "GUID")
- @ApiModelProperty(value = "GUID")
- private String guid;
-
- /**
- * pageNum
- */
- @ApiModelProperty(value = "pageNum")
- @Excel(name = "pageNum")
- private Integer pageNum;
-
- /**
- * pageSize
- */
- @ApiModelProperty(value = "pageSize")
- @Excel(name = "pageSize")
- private Integer pageSize;
-
- @Override
- public String toString() {
- return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", getId()).append("patid", getPatid()).append("contactway", getContactway()).append("relation", getRelation()).append("datasource", getDatasource()).append("isdefault", getIsdefault()).append("orgid", getOrgid()).append("delFlag", getDelFlag()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).append("contactname", getContactname()).append("pid", getPid()).append("guid", getGuid()).toString();
- }
-}
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchivetag.java b/smartor/src/main/java/com/smartor/domain/PatArchivetag.java
deleted file mode 100644
index 3196395..0000000
--- a/smartor/src/main/java/com/smartor/domain/PatArchivetag.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.smartor.domain;
-
-import java.util.Date;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import com.ruoyi.common.annotation.Excel;
-import com.ruoyi.common.core.domain.BaseEntity;
-
-/**
- * 鎮h�呮。妗堟爣绛惧璞� pat_archivetag
- *
- * @author ruoyi
- * @date 2023-06-02
- */
-@Data
-@ApiModel(value = "PatArchivetag", description = "鎮h�呮。妗堟爣绛惧璞�")
-public class PatArchivetag extends BaseEntity {
- private static final long serialVersionUID = 1L;
-
- /**
- * 鑷ID
- */
- @ApiModelProperty(value = "鑷ID")
- private Long id;
-
- /**
- * 鏍囩鍒嗙被ID
- */
- @ApiModelProperty(value = "鏍囩鍒嗙被ID")
- private Long tagcategoryid;
-
- /**
- * 鏍囩ID
- */
- @ApiModelProperty(value = "鏍囩ID")
- private Long tagid;
-
- /**
- * 鏈烘瀯ID
- */
- @ApiModelProperty(value = "鏈烘瀯ID")
- private String orgid;
-
- /**
- * 鍒犻櫎鏍囪
- */
- @ApiModelProperty(value = "鍒犻櫎鏍囪")
- private String delFlag;
-
- /**
- * 涓婁紶鏍囪
- */
- @ApiModelProperty(value = "涓婁紶鏍囪")
- private Long isupload;
-
- /**
- * 涓婁紶鏃堕棿
- */
- @ApiModelProperty(value = "涓婁紶鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
- @Excel(name = " 涓婁紶鏃堕棿 ", width = 30, dateFormat = "yyyy-MM-dd")
- private Date uploadTime;
-
- /**
- * 鏍囩鍚嶇О(浣滀负鍏ヨ繑鍙備娇鐢紝琛ㄤ腑娌℃湁)
- */
- @ApiModelProperty(value = "鏍囩鍚嶇О")
- private String tagname;
-
- /**
- * 妗fID
- */
- @ApiModelProperty(value = "妗fID")
- private Long patid;
-
- /**
- * 鏄惁瀛樺湪鎿嶄綔锛�1 鏂板 2淇敼 3鍒犻櫎")(浣滀负鍏ヨ繑鍙備娇鐢紝琛ㄤ腑娌℃湁)
- */
- @ApiModelProperty(value = "鏄惁瀛樺湪鎿嶄綔锛�1 鏂板 2淇敼 3鍒犻櫎")
- private Integer isoperation;
-
-
-}
diff --git a/smartor/src/main/java/com/smartor/domain/PatArchivetagAndPatientInfo.java b/smartor/src/main/java/com/smartor/domain/PatArchivetagAndPatientInfo.java
index 79ca725..9b226fd 100644
--- a/smartor/src/main/java/com/smartor/domain/PatArchivetagAndPatientInfo.java
+++ b/smartor/src/main/java/com/smartor/domain/PatArchivetagAndPatientInfo.java
@@ -11,6 +11,8 @@
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堟爣绛惧璞� pat_archivetag
diff --git a/smartor/src/main/java/com/smartor/domain/PatUpInfoVO.java b/smartor/src/main/java/com/smartor/domain/PatUpInfoVO.java
index f810b4a..7571cdd 100644
--- a/smartor/src/main/java/com/smartor/domain/PatUpInfoVO.java
+++ b/smartor/src/main/java/com/smartor/domain/PatUpInfoVO.java
@@ -9,6 +9,7 @@
import java.util.Date;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎮h�呴敊璇俊鎭繑鍥�
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
index 55f23b5..6363c47 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
@@ -5,6 +5,7 @@
import lombok.Data;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
/**
* 鐢佃瘽闂鍥炵瓟鏄庣粏
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java
index a889a8c..fe869d2 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java
@@ -9,6 +9,7 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級瀵硅薄 ivr_tasksingle
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTaskVO.java b/smartor/src/main/java/com/smartor/domain/SvyTaskVO.java
index 3714066..feabf53 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyTaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyTaskVO.java
@@ -9,6 +9,8 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 缁煎悎闂嵎浠诲姟锛堜换鍔★級瀵硅薄 svy_task
diff --git a/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java b/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java
index 1e62015..76b2bd9 100644
--- a/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java
@@ -13,6 +13,7 @@
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 娌冲崡閲囬泦鎮h�呬俊鎭疢apper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java b/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java
index a215622..6787398 100644
--- a/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/PatArchiveMapper.java
@@ -1,12 +1,12 @@
package com.smartor.mapper;
-import com.smartor.domain.PatArchive;
import com.smartor.domain.PatArchiveOthreInfo;
import com.smartor.domain.PatArchiveReq;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎮h�呮。妗圡apper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/PatArchivecontactMapper.java b/smartor/src/main/java/com/smartor/mapper/PatArchivecontactMapper.java
index b710334..f352629 100644
--- a/smartor/src/main/java/com/smartor/mapper/PatArchivecontactMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/PatArchivecontactMapper.java
@@ -1,9 +1,9 @@
package com.smartor.mapper;
-import com.smartor.domain.PatArchivecontact;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
/**
* 鎮h�呰仈绯绘柟寮廙apper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/PatArchivetagMapper.java b/smartor/src/main/java/com/smartor/mapper/PatArchivetagMapper.java
index bff2066..1787eb6 100644
--- a/smartor/src/main/java/com/smartor/mapper/PatArchivetagMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/PatArchivetagMapper.java
@@ -3,10 +3,10 @@
import java.util.List;
import java.util.Map;
-import com.smartor.domain.PatArchivetag;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堟爣绛綧apper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/PatTaskRelevanceMapper.java b/smartor/src/main/java/com/smartor/mapper/PatTaskRelevanceMapper.java
index 748346d..f39ef64 100644
--- a/smartor/src/main/java/com/smartor/mapper/PatTaskRelevanceMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/PatTaskRelevanceMapper.java
@@ -1,9 +1,9 @@
package com.smartor.mapper;
-import com.smartor.domain.PatTaskRelevance;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 鎮h�呬笌瀹f暀浠诲姟鍏宠仈Mapper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java
index 2b78428..c561a63 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java
@@ -2,8 +2,8 @@
import java.util.List;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
/**
* 闅忚瀛愪换鍔°�屾墽琛屾柟寮忔槑缁嗐�嶏紙{@code service_subtask_preachform}锛夆�斺�� <b>杩囨浮鎺ュ彛</b>銆�
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
index 27274b0..0a12208 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
@@ -1,9 +1,9 @@
package com.smartor.mapper;
-import com.smartor.domain.ServiceSubtaskRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java b/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java
index f919cb0..aa83efa 100644
--- a/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ShardingMapper.java
@@ -1,6 +1,5 @@
package com.smartor.mapper;
-import com.smartor.domain.PatArchive;
import com.smartor.domain.PatArchiveOthreInfo;
import com.smartor.domain.PatArchiveReq;
import org.apache.ibatis.annotations.Mapper;
diff --git a/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java b/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
index 8b262bc..e0decd8 100644
--- a/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
+++ b/smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
@@ -8,6 +8,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 娌冲崡閲囬泦鎮h�呬俊鎭帴鍙�
diff --git a/smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java b/smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java
index 18b9979..fa24e7c 100644
--- a/smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java
+++ b/smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java
@@ -1,8 +1,8 @@
package com.smartor.service;
-import com.smartor.domain.IvrTaskVisitResult;
import java.util.List;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
/**
* 浠诲姟闅忚缁撴灉Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IPatArchiveService.java b/smartor/src/main/java/com/smartor/service/IPatArchiveService.java
index 036fcc9..8537b60 100644
--- a/smartor/src/main/java/com/smartor/service/IPatArchiveService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatArchiveService.java
@@ -8,6 +8,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎮h�呮。妗圫ervice鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IPatArchivecontactService.java b/smartor/src/main/java/com/smartor/service/IPatArchivecontactService.java
index b68cc83..820226b 100644
--- a/smartor/src/main/java/com/smartor/service/IPatArchivecontactService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatArchivecontactService.java
@@ -1,8 +1,8 @@
package com.smartor.service;
-import com.smartor.domain.PatArchivecontact;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
/**
* 鎮h�呰仈绯绘柟寮廠ervice鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IPatArchivetagService.java b/smartor/src/main/java/com/smartor/service/IPatArchivetagService.java
index 907c902..5a97e09 100644
--- a/smartor/src/main/java/com/smartor/service/IPatArchivetagService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatArchivetagService.java
@@ -3,8 +3,8 @@
import java.util.List;
import com.ruoyi.common.core.page.TableDataInfo;
-import com.smartor.domain.PatArchivetag;
import com.smartor.domain.PatArchivetagAndPatientInfo;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堟爣绛維ervice鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IPatMedInhospService.java b/smartor/src/main/java/com/smartor/service/IPatMedInhospService.java
index f1030ba..2ef4a0d 100644
--- a/smartor/src/main/java/com/smartor/service/IPatMedInhospService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatMedInhospService.java
@@ -13,6 +13,9 @@
import com.ruoyi.inhospvisit.domain.PatMedInhospVO;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
/**
* 鎮h�呬綇闄㈣褰昐ervice鎺ュ彛
*
diff --git a/smartor/src/main/java/com/smartor/service/IPatTaskRelevanceService.java b/smartor/src/main/java/com/smartor/service/IPatTaskRelevanceService.java
index fdafbe8..d24f181 100644
--- a/smartor/src/main/java/com/smartor/service/IPatTaskRelevanceService.java
+++ b/smartor/src/main/java/com/smartor/service/IPatTaskRelevanceService.java
@@ -1,8 +1,8 @@
package com.smartor.service;
-import com.smartor.domain.PatTaskRelevance;
import java.util.List;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 鎮h�呬笌瀹f暀浠诲姟鍏宠仈Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceExternalService.java b/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
index 06fde72..9d982ba 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceExternalService.java
@@ -3,8 +3,6 @@
import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.smartor.domain.ExternalDept;
-import com.smartor.domain.PatArchive;
-import com.smartor.domain.ServiceSubtaskDetail;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/smartor/src/main/java/com/smartor/service/IServicePhoneService.java b/smartor/src/main/java/com/smartor/service/IServicePhoneService.java
index 77a65f3..983280b 100644
--- a/smartor/src/main/java/com/smartor/service/IServicePhoneService.java
+++ b/smartor/src/main/java/com/smartor/service/IServicePhoneService.java
@@ -2,9 +2,6 @@
import com.smartor.domain.*;
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
-import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
-import com.smartor.domain.VO.TransferDeptVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Date;
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java
index b5ffc18..8c77dfa 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java
@@ -1,7 +1,7 @@
package com.smartor.service;
import java.util.List;
-import com.smartor.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
index 3250aef..53aac40 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
@@ -1,8 +1,8 @@
package com.smartor.service;
-import com.smartor.domain.ServiceSubtaskRecord;
import java.util.List;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/IServiceTaskRuleService.java b/smartor/src/main/java/com/smartor/service/IServiceTaskRuleService.java
index 0a52fc2..ac43459 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceTaskRuleService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceTaskRuleService.java
@@ -1,7 +1,7 @@
package com.smartor.service;
import java.util.List;
-import com.smartor.domain.ServiceTaskRule;
+import com.ruoyi.task.domain.ServiceTaskRule;
/**
* 浠诲姟鎵ц瑙勫垯Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java b/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
index 67a2729..82ed5c9 100644
--- a/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
+++ b/smartor/src/main/java/com/smartor/service/ISvyLibTemplateScriptService.java
@@ -1,11 +1,11 @@
package com.smartor.service;
-import com.smartor.domain.ServiceSubtaskCountReq;
-import com.smartor.domain.ServiceSubtaskScriptCount;
import com.ruoyi.template.domain.SvyLibTemplateScript;
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
/**
* 妯℃澘闂嵎棰樼洰Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/ISvyTaskSingleService.java b/smartor/src/main/java/com/smartor/service/ISvyTaskSingleService.java
index 8cb8d70..2b7bbcd 100644
--- a/smartor/src/main/java/com/smartor/service/ISvyTaskSingleService.java
+++ b/smartor/src/main/java/com/smartor/service/ISvyTaskSingleService.java
@@ -4,6 +4,8 @@
import java.util.List;
import java.util.Map;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTaskVO;
/**
* 鍗曚竴浠诲姟锛堥棶鍗凤級Service鎺ュ彛
diff --git a/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
index 0ce8c04..5113396 100644
--- a/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
@@ -8,10 +8,7 @@
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
-import com.smartor.mapper.ServiceSubtaskMapper;
import com.smartor.service.CommonTaskService;
-import com.smartor.service.IServiceTaskService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -22,6 +19,12 @@
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.service.IServiceTaskService;
/**
diff --git a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
index 5699c5b..3ec5262 100644
--- a/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
@@ -23,6 +23,7 @@
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鎮h�呮。妗圫ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java
index 1e985cc..76bdb2e 100644
--- a/smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java
@@ -1,13 +1,13 @@
package com.smartor.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.IvrTaskVisitResult;
-import com.smartor.mapper.IvrTaskVisitResultMapper;
import com.smartor.service.IIvrTaskVisitResultService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.task.domain.IvrTaskVisitResult;
+import com.ruoyi.task.mapper.IvrTaskVisitResultMapper;
/**
* 浠诲姟闅忚缁撴灉Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
index b0e3038..68499f1 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
@@ -10,7 +10,6 @@
import com.ruoyi.outpatientvisit.domain.PatMedOuthospQueryReq;
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.ruoyi.outpatientvisit.mapper.PatMedOuthospMapper;
import com.smartor.service.IPatArchiveService;
@@ -45,6 +44,12 @@
import com.ruoyi.template.domain.BaseTag;
import com.ruoyi.template.mapper.BaseTagMapper;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
/**
* 鎮h�呮。妗圫ervice涓氬姟灞傚鐞�
*
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatArchivecontactServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatArchivecontactServiceImpl.java
index f7f4b15..898d8c4 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatArchivecontactServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatArchivecontactServiceImpl.java
@@ -1,13 +1,13 @@
package com.smartor.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.PatArchivecontact;
import com.smartor.mapper.PatArchivecontactMapper;
import com.smartor.service.IPatArchivecontactService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
/**
* 鎮h�呰仈绯绘柟寮廠ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatArchivetagServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatArchivetagServiceImpl.java
index c1b8d8d..e0be8ee 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatArchivetagServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatArchivetagServiceImpl.java
@@ -1,13 +1,13 @@
package com.smartor.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.PatArchivetag;
import com.smartor.mapper.PatArchivetagMapper;
import com.smartor.service.IPatArchivetagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.common.core.domain.entity.PatArchivetag;
/**
* 鎮h�呮。妗堟爣绛維ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatFilterlistServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatFilterlistServiceImpl.java
index cda7e2d..c2e250f 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatFilterlistServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatFilterlistServiceImpl.java
@@ -2,10 +2,7 @@
import com.ruoyi.common.utils.DateUtils;
import com.smartor.domain.PatFilterlist;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.PatFilterlistMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
import com.smartor.service.IPatFilterlistService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +10,9 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
/**
* 鎮h�呰繃婊ゅ悕鍗昐ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
index 191d8eb..e299c66 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -13,10 +13,8 @@
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.smartor.common.ScheduleSubtaskBuilder;
import com.smartor.domain.*;
import com.ruoyi.inhospvisit.domain.PatMedInhospDTO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedInhospService;
import lombok.extern.slf4j.Slf4j;
@@ -35,6 +33,28 @@
import com.ruoyi.othervisit.domain.PatMedOperationItem;
import com.ruoyi.inhospvisit.domain.PatMedInhospVO;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskdept;
+import com.ruoyi.task.domain.ServiceTaskdiag;
+import com.ruoyi.task.domain.ServiceTaskmedical;
+import com.ruoyi.task.domain.ServiceTaskoper;
+import com.ruoyi.task.domain.ServiceTaskRule;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskdeptMapper;
+import com.ruoyi.task.mapper.ServiceTaskdiagMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskmedicalMapper;
+import com.ruoyi.task.mapper.ServiceTaskoperMapper;
+import com.ruoyi.task.mapper.ServiceTaskRuleMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleDetailMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleMapper;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.common.ScheduleSubtaskBuilder;
/**
* 鎮h�呬綇闄㈣褰昐ervice涓氬姟灞傚鐞�
*
diff --git a/smartor/src/main/java/com/smartor/service/impl/PatTaskRelevanceServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PatTaskRelevanceServiceImpl.java
index 2428f53..ade0afa 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatTaskRelevanceServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/PatTaskRelevanceServiceImpl.java
@@ -1,13 +1,13 @@
package com.smartor.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.PatTaskRelevance;
import com.smartor.mapper.PatTaskRelevanceMapper;
import com.smartor.service.IPatTaskRelevanceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
+import com.ruoyi.task.domain.PatTaskRelevance;
/**
* 鎮h�呬笌瀹f暀浠诲姟鍏宠仈Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServicPhoneServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServicPhoneServiceImpl.java
index 846d721..77cd697 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServicPhoneServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServicPhoneServiceImpl.java
@@ -17,14 +17,9 @@
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.common.FtpService;
-import com.smartor.common.ScheduleSubtaskBuilder;
import com.ruoyi.common.utils.PhoneUtils;
-import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
import com.smartor.domain.*;
import com.ruoyi.template.domain.VO.HeLibraryCountVO;
-import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
-import com.smartor.domain.VO.TransferDeptVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.*;
import lombok.extern.slf4j.Slf4j;
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index 875f47e..b1395c7 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -14,7 +14,6 @@
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
import com.smartor.service.IServiceExternalService;
@@ -43,6 +42,11 @@
import com.ruoyi.othervisit.domain.PatMedOperation;
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
/**
* 涓婚敭Service涓氬姟灞傚鐞�
*
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
index 057d5ce..da224ee 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -42,6 +42,10 @@
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.service.impl.ServiceSubtaskServiceImpl;
@Slf4j
@Service
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
index 743be2d..aa89ed0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -11,9 +11,7 @@
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.*;
-import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
-import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
import com.smartor.mapper.*;
import com.smartor.service.*;
import lombok.extern.slf4j.Slf4j;
@@ -50,6 +48,21 @@
import com.ruoyi.template.domain.SvyTaskTemplateTargetoption;
import com.ruoyi.template.mapper.SvyLibScriptCategoryMapper;
import com.ruoyi.template.service.ISvyTaskTemplateService;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.DTO.ServiceSubtaskDetailDTO;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceSubtaskDetail;
+import com.ruoyi.task.domain.ServiceSubtaskDetailVO;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.mapper.ServiceSubtaskDetailMapper;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
+import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
+import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.service.IServiceTaskService;
/**
* 浠诲姟闂嵎闂閫夐」Service涓氬姟灞傚鐞�
*
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java
index bd562c6..be5503b 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java
@@ -5,8 +5,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.smartor.mapper.ServiceSubtaskPreachformMapper;
-import com.smartor.domain.ServiceSubtaskPreachform;
import com.smartor.service.IServiceSubtaskPreachformService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
index 42b33a7..b63805f 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
@@ -1,7 +1,6 @@
package com.smartor.service.impl;
import com.ruoyi.common.utils.DateUtils;
-import com.smartor.domain.ServiceSubtaskRecord;
import com.smartor.mapper.ServiceSubtaskRecordMapper;
import com.smartor.service.IServiceSubtaskRecordService;
import org.apache.commons.collections4.CollectionUtils;
@@ -12,6 +11,7 @@
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import com.ruoyi.task.domain.ServiceSubtaskRecord;
/**
* 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskRuleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskRuleServiceImpl.java
index b27cf79..13a40e0 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceTaskRuleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceTaskRuleServiceImpl.java
@@ -4,9 +4,9 @@
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import com.smartor.mapper.ServiceTaskRuleMapper;
-import com.smartor.domain.ServiceTaskRule;
import com.smartor.service.IServiceTaskRuleService;
+import com.ruoyi.task.domain.ServiceTaskRule;
+import com.ruoyi.task.mapper.ServiceTaskRuleMapper;
/**
* 浠诲姟鎵ц瑙勫垯Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/SubtaskSmsServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SubtaskSmsServiceImpl.java
index 32dff40..625abb6 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SubtaskSmsServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SubtaskSmsServiceImpl.java
@@ -1,10 +1,10 @@
package com.smartor.service.impl;
import com.ruoyi.common.core.service.ISubtaskSmsService;
-import com.smartor.domain.ServiceSubtask;
-import com.smartor.mapper.ServiceSubtaskMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
/**
* 鐭俊鍙戦�佽法妯″潡鏈嶅姟瀹炵幇锛堜緵 ruoyi-system 閫氳繃 SpringUtils 璋冪敤锛�
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
index ac0f8b1..6496e4d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateScriptServiceImpl.java
@@ -2,7 +2,6 @@
import com.ruoyi.common.utils.DateUtils;
import com.smartor.domain.*;
-import com.smartor.mapper.ServiceSubtaskMapper;
import com.ruoyi.template.mapper.SvyLibTemplateScriptMapper;
import com.smartor.service.ISvyLibTemplateScriptService;
import com.ruoyi.template.service.ISvyLibTemplateTargetoptionService;
@@ -20,6 +19,9 @@
import com.ruoyi.template.domain.SvyLibTemplateScript;
import com.ruoyi.template.domain.SvyLibTemplateTargetoption;
import static net.sf.jsqlparser.parser.feature.Feature.values;
+import com.ruoyi.task.domain.ServiceSubtaskCountReq;
+import com.ruoyi.task.domain.ServiceSubtaskScriptCount;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
/**
* 妯℃澘闂嵎棰樼洰Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyTaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyTaskServiceImpl.java
index 79c36ee..d9fd859 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyTaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyTaskServiceImpl.java
@@ -27,6 +27,7 @@
import com.ruoyi.template.mapper.SvyLibTemplateTargetoptionMapper;
import com.smartor.mapper.SvyTaskMapper;
import com.smartor.mapper.SvyTaskSingleMapper;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 缁煎悎闂嵎浠诲姟锛堜换鍔★級Service涓氬姟灞傚鐞�
*
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
index 89185dd..ccb8e75 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
@@ -12,11 +12,8 @@
import com.smartor.common.LSHospTokenUtil;
import com.smartor.common.LyraTokenUtil;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.BaseOrganizationMapper;
import com.smartor.mapper.PatArchiveMapper;
-import com.smartor.mapper.ServiceSubtaskMapper;
-import com.smartor.service.IServiceTaskService;
import com.smartor.service.ISvyTaskSingleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -27,6 +24,15 @@
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.TaskSendTimeVO;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.service.IServiceTaskService;
+import com.ruoyi.task.domain.PatTaskRelevance;
+import com.ruoyi.task.domain.ServiceTaskVO;
/**
* 鍗曚竴浠诲姟锛堥棶鍗凤級Service涓氬姟灞傚鐞�
diff --git a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
index 6d868ff..8c74c73 100644
--- a/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
@@ -40,6 +40,7 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 鏂板崕鏁版嵁閲囬泦澶勭悊
diff --git a/smartor/src/main/java/com/smartor/statemachine/InhospStateMachineExample.java b/smartor/src/main/java/com/smartor/statemachine/InhospStateMachineExample.java
index 1d5f50a..1788d3f 100644
--- a/smartor/src/main/java/com/smartor/statemachine/InhospStateMachineExample.java
+++ b/smartor/src/main/java/com/smartor/statemachine/InhospStateMachineExample.java
@@ -1,4 +1,5 @@
package com.smartor.statemachine;
+import com.ruoyi.common.core.domain.entity.PatArchive;
/**
* 浣忛櫌鐘舵�佹満浣跨敤绀轰緥
diff --git a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
index 0439547..f8cd913 100644
--- a/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
@@ -26,7 +26,7 @@
</resultMap>
- <resultMap type="com.smartor.domain.PatArchive" id="PatArchiveResult">
+ <resultMap type="com.ruoyi.common.core.domain.entity.PatArchive" id="PatArchiveResult">
<result property="id" column="id"/>
<result property="patientno" column="patientno"/>
<result property="sourcefrom" column="sourcefrom"/>
@@ -383,7 +383,7 @@
</select>
- <select id="selectPatArchiveList" parameterType="com.smartor.domain.PatArchive" resultMap="PatArchiveResult">
+ <select id="selectPatArchiveList" parameterType="com.ruoyi.common.core.domain.entity.PatArchive" resultMap="PatArchiveResult">
<include refid="selectPatArchiveVo"/>
where 1=1
<if test="name != null and name != ''">and name like concat('%', #{name}, '%')</if>
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
index c934332..f723d16 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.PatArchiveMapper">
- <resultMap type="com.smartor.domain.PatArchive" id="PatArchiveResult">
+ <resultMap type="com.ruoyi.common.core.domain.entity.PatArchive" id="PatArchiveResult">
<result property="id" column="id"/>
<result property="patientno" column="patientno"/>
<result property="sourcefrom" column="sourcefrom"/>
@@ -181,7 +181,7 @@
from pat_archive
</sql>
- <select id="selectPatArchiveList" parameterType="com.smartor.domain.PatArchive" resultMap="PatArchiveResult">
+ <select id="selectPatArchiveList" parameterType="com.ruoyi.common.core.domain.entity.PatArchive" resultMap="PatArchiveResult">
<include refid="selectPatArchiveVo"/>
where 1=1
and del_flag = 0
@@ -292,7 +292,7 @@
</foreach>
</select>
- <insert id="insertPatArchiveSingle" parameterType="com.smartor.domain.PatArchive" useGeneratedKeys="true"
+ <insert id="insertPatArchiveSingle" parameterType="com.ruoyi.common.core.domain.entity.PatArchive" useGeneratedKeys="true"
keyProperty="id">
insert into pat_archive
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -414,7 +414,7 @@
</foreach>
</insert>
- <update id="updatePatArchive" parameterType="com.smartor.domain.PatArchive">
+ <update id="updatePatArchive" parameterType="com.ruoyi.common.core.domain.entity.PatArchive">
update pat_archive
<trim prefix="SET" suffixOverrides=",">
<if test="name != null">name = #{name},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchivecontactMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchivecontactMapper.xml
index 095cb27..f2b7dce 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchivecontactMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchivecontactMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.PatArchivecontactMapper">
- <resultMap type="com.smartor.domain.PatArchivecontact" id="PatArchivecontactResult">
+ <resultMap type="com.ruoyi.common.core.domain.entity.PatArchivecontact" id="PatArchivecontactResult">
<result property="id" column="id"/>
<result property="patid" column="patid"/>
<result property="contactway" column="contactway"/>
@@ -45,7 +45,7 @@
from pat_archivecontact
</sql>
- <select id="selectPatArchivecontactList" parameterType="com.smartor.domain.PatArchivecontact"
+ <select id="selectPatArchivecontactList" parameterType="com.ruoyi.common.core.domain.entity.PatArchivecontact"
resultMap="PatArchivecontactResult">
<include refid="selectPatArchivecontactVo"/>
where 1=1
@@ -70,7 +70,7 @@
where id = #{id}
</select>
- <insert id="insertPatArchivecontact" parameterType="com.smartor.domain.PatArchivecontact" useGeneratedKeys="true"
+ <insert id="insertPatArchivecontact" parameterType="com.ruoyi.common.core.domain.entity.PatArchivecontact" useGeneratedKeys="true"
keyProperty="id">
insert into pat_archivecontact
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -111,7 +111,7 @@
</trim>
</insert>
- <update id="updatePatArchivecontact" parameterType="com.smartor.domain.PatArchivecontact">
+ <update id="updatePatArchivecontact" parameterType="com.ruoyi.common.core.domain.entity.PatArchivecontact">
update pat_archivecontact
<trim prefix="SET" suffixOverrides=",">
<if test="patid != null">patid = #{patid},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/PatArchivetagMapper.xml b/smartor/src/main/resources/mapper/smartor/PatArchivetagMapper.xml
index f00cbe6..9f0aba9 100644
--- a/smartor/src/main/resources/mapper/smartor/PatArchivetagMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatArchivetagMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.PatArchivetagMapper">
- <resultMap type="com.smartor.domain.PatArchivetag" id="PatArchivetagResult">
+ <resultMap type="com.ruoyi.common.core.domain.entity.PatArchivetag" id="PatArchivetagResult">
<result property="id" column="id"/>
<result property="tagcategoryid" column="tagcategoryid"/>
<result property="tagid" column="tagid"/>
@@ -39,7 +39,7 @@
from pat_archivetag
</sql>
- <select id="selectPatArchivetagAndBaseTagList" parameterType="com.smartor.domain.PatArchivetag"
+ <select id="selectPatArchivetagAndBaseTagList" parameterType="com.ruoyi.common.core.domain.entity.PatArchivetag"
resultMap="PatArchivetagResult">
select a.id,
a.tagcategoryid,
@@ -71,7 +71,7 @@
where id = #{id}
</select>
- <insert id="insertPatArchivetag" parameterType="com.smartor.domain.PatArchivetag" useGeneratedKeys="true"
+ <insert id="insertPatArchivetag" parameterType="com.ruoyi.common.core.domain.entity.PatArchivetag" useGeneratedKeys="true"
keyProperty="id">
insert into pat_archivetag
<trim prefix="(" suffix=")" suffixOverrides=",">
@@ -106,7 +106,7 @@
</trim>
</insert>
- <update id="updatePatArchivetag" parameterType="com.smartor.domain.PatArchivetag">
+ <update id="updatePatArchivetag" parameterType="com.ruoyi.common.core.domain.entity.PatArchivetag">
update pat_archivetag
<trim prefix="SET" suffixOverrides=",">
<if test="tagcategoryid != null">tagcategoryid = #{tagcategoryid},</if>
@@ -126,7 +126,7 @@
where id = #{id}
</update>
- <delete id="deletePatArchivetagById" parameterType="com.smartor.domain.PatArchivetag">
+ <delete id="deletePatArchivetagById" parameterType="com.ruoyi.common.core.domain.entity.PatArchivetag">
update pat_archivetag
<trim prefix="SET" suffixOverrides=",">
<if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/PatHetaskRelevanceMapper.xml b/smartor/src/main/resources/mapper/smartor/PatHetaskRelevanceMapper.xml
index 9e5dd6f..a0ad0f3 100644
--- a/smartor/src/main/resources/mapper/smartor/PatHetaskRelevanceMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/PatHetaskRelevanceMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.PatTaskRelevanceMapper">
- <resultMap type="com.smartor.domain.PatTaskRelevance" id="PatTaskRelevanceResult">
+ <resultMap type="com.ruoyi.task.domain.PatTaskRelevance" id="PatTaskRelevanceResult">
<result property="id" column="id"/>
<result property="patid" column="pat_id"/>
<result property="taskId" column="task_id"/>
@@ -55,7 +55,7 @@
from pat_task_relevance
</sql>
- <select id="selectPatTaskRelevanceList" parameterType="com.smartor.domain.PatTaskRelevance"
+ <select id="selectPatTaskRelevanceList" parameterType="com.ruoyi.task.domain.PatTaskRelevance"
resultMap="PatTaskRelevanceResult">
<include refid="selectPatTaskRelevanceVo"/>
where 1=1
@@ -84,7 +84,7 @@
where id = #{id}
</select>
- <insert id="insertPatTaskRelevance" parameterType="com.smartor.domain.PatTaskRelevance">
+ <insert id="insertPatTaskRelevance" parameterType="com.ruoyi.task.domain.PatTaskRelevance">
insert into pat_task_relevance
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="patid != null">pat_id,</if>
@@ -134,7 +134,7 @@
</trim>
</insert>
- <update id="updatePatTaskRelevance" parameterType="com.smartor.domain.PatTaskRelevance">
+ <update id="updatePatTaskRelevance" parameterType="com.ruoyi.task.domain.PatTaskRelevance">
update pat_task_relevance
<trim prefix="SET" suffixOverrides=",">
<if test="patid != null">pat_id = #{patid},</if>
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
index fd7291d..2491254 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.ServiceSubtaskRecordMapper">
- <resultMap type="com.smartor.domain.ServiceSubtaskRecord" id="ServiceSubtaskRecordResult">
+ <resultMap type="com.ruoyi.task.domain.ServiceSubtaskRecord" id="ServiceSubtaskRecordResult">
<result property="id" column="id"/>
<result property="taskid" column="taskid"/>
<result property="subtaskId" column="subtask_id"/>
@@ -53,7 +53,7 @@
from service_subtask_record
</sql>
- <select id="selectServiceSubtaskRecordList" parameterType="com.smartor.domain.ServiceSubtaskRecord"
+ <select id="selectServiceSubtaskRecordList" parameterType="com.ruoyi.task.domain.ServiceSubtaskRecord"
resultMap="ServiceSubtaskRecordResult">
<include refid="selectServiceSubtaskRecordVo"/>
where 1=1
@@ -87,7 +87,7 @@
where id = #{id}
</select>
- <insert id="insertServiceSubtaskRecord" parameterType="com.smartor.domain.ServiceSubtaskRecord">
+ <insert id="insertServiceSubtaskRecord" parameterType="com.ruoyi.task.domain.ServiceSubtaskRecord">
insert into service_subtask_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
@@ -137,7 +137,7 @@
</trim>
</insert>
- <update id="updateServiceSubtaskRecord" parameterType="com.smartor.domain.ServiceSubtaskRecord">
+ <update id="updateServiceSubtaskRecord" parameterType="com.ruoyi.task.domain.ServiceSubtaskRecord">
update service_subtask_record
<trim prefix="SET" suffixOverrides=",">
<if test="taskid != null">taskid = #{taskid},</if>
--
Gitblit v1.9.3