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"))) { pom.xml
@@ -234,6 +234,20 @@ <version>${ruoyi.version}</version> </dependency> <!-- 任塿¨¡åï¼service_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 ä¹åãsmartor ä¹å --> <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> ruoyi-admin/pom.xml
@@ -112,6 +112,26 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-publicity</artifactId> </dependency> <!-- 任塿¨¡åï¼service_task / service_subtaskï¼ã â ï¸ è¿éãå¿ é¡»æ¾å¼å£°æãï¼ä¸è½åªé smartor ä¼ éï¼ æ»¡æåº¦é£æ¬¡å°±æ¯"æ ¹ pom 注åäºæ¨¡åï¼ä½æ²¡æä»»ä½æ¨¡åç´æ¥ä¾èµå®"ï¼ å¯¼è´æ¨¡åæ ¹æ¬æ²¡è¢«æè¿ smartor-suifang.jarï¼æ°æ¬ç端ç¹å ¨é¨ä¸å¯è¾¾ã æ¬æ¨¡åè¦æ¾ Controller ä¸ Mapper XMLï¼æä»¥ç´æ¥ä¾èµã --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-task</artifactId> </dependency> <!-- çµè¯æ¨¡åï¼ä¸æµ·/é¨ç»®/䏿±å¤å¼åè°ã任塿åï¼ã â ï¸ åæ ·ãå¿ é¡»æ¾å¼å£°æãï¼æ¬æ¨¡åè¦æ 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> 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 { 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; /** * ç¥ä¿¡æ¥å£ï¼å¯¹å¤çä¿¡ / å¾®ä¿¡å ¬ä¼å·åéå ¥å£ï¼ã 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 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; /** * æ£è æ¡£æ¡Controller 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; /** * æ£è èç³»æ¹å¼Controller 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; /** * æ£è æ¡£æ¡æ ç¾Controller 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; /** * æ£è ä¸å®£æä»»å¡å ³èController 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 = "é®å·äºç»´ç ") 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; 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 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}ï¼URL ä¿æä¸åï¼ä¸æ±å¹³å°æ éæ¹åè°å°åï¼ã * <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") 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 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 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; /** * ã请填ååè½åç§°ãController 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; /** * ã请填ååè½åç§°ãController 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 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 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 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 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 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; /** * é访任å¡ç»å ³èController 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; 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 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 * 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 * 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åç¹ç»å½æ§å¶å¨ 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ï¼Redis éç¼åç仿¯è¿ä¸ªç±»ï¼ä¾ PhoneServiceImpl æ¶è´¹ï¼ import com.ruoyi.phone.domain.QuestionMessage; public class PhoneTask implements Runnable { private ServiceSubtask ivrTaskSingle; private List<IvrTaskTemplateScriptVO> ivrTaskTemplateScriptVO; 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; 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>å¹é é¿æä»»å¡ â ååä»»å¡ã 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ï¼/ é¨ç»®ï¼phoneCallBackYQãtaskPullãrecordAcceptï¼/ 䏿±ï¼getFirstQuesã processResustï¼ä¸æ¡å¤å¼ééçå ¨é¨ç«¯ç¹ä¸ä¸å¡å®ç°çå¯ä¸å½å±å¤ã æ¬æ¨¡åãä¸èªå¸¦ Mapperãï¼service_subtask / service_subtask_detail / service_task çè¡¨å½ ruoyi-taskï¼ æãè·¨æ¨¡åæ°æ®è®¿é®ååãï¼doc/è·¨æ¨¡åæ°æ®è®¿é®åå䏿¶å£æ¹æ¡.mdï¼åæä½åªè½ç±å½å±æ¨¡åæ§è¡ï¼ æ çµè¯ä¾§ä¸å¾ç» ruoyi-task ç com.ruoyi.task.api.TaskSubtaskApi åæ°ä¸è½åºï¼ 模æ¿è¯æ¯ï¼ivr_task_template* / ivr_liba_extemplatescript / svy_lib_script_categoryï¼ç» ruoyi-template ç service æ¥å£è¯»åã å ¶å®æ¨¡åéè¦çµè¯è½ååªè½éè¿ com.ruoyi.phone.api.PhoneFacadeï¼æ¨¡åé¨é¢ï¼è°ç¨ã æ¯æéè¿ sys_config åæ°è¡¨éç phone.enabled æ´ä½å ³éï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤ 10 ç§çæï¼ã ä¾èµæ¹åï¼ruoyi-phone -> ruoyi-task / ruoyi-template / ruoyi-common ï¼ç»ä¸ä¾èµ smartor / ruoyi-system / ruoyi-framework / ruoyi-adminï¼å¦åå½¢æå¾ªç¯ä¾èµï¼Maven ç´æ¥æå»ºå¤±è´¥ï¼ã </description> <dependencies> <!-- éç¨å·¥å ·ï¼BaseController / RedisCache / StringUtils / PhoneUtils / HttpUtil / RSAPublicKeyExample åæ¶ä¼ éå¸¦å ¥ pagehelper(å« mybatis)ãswagger-annotationsãcommons-lang3ãjackson ç --> <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ï¼ruoyi-common éæ¯ç´æ¥ä¾èµï¼æ¤å¤æ¾å¼å£°æçæ¬ï¼é¿å 注解å¤çå¨ç¼ºå¤± --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> </dependency> <!-- Servlet APIï¼HandlerInterceptorï¼æ¨¡åå¼å ³æ¦æªå¨ç¨ï¼ --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies> </project> ruoyi-phone/src/main/java/com/ruoyi/phone/PhoneModule.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ package com.ruoyi.phone; /** * çµè¯æ¨¡åå æ ¹ã * * <h3>è¿ä¸ªæ¨¡åè£ äºä»ä¹</h3> * åå æ£å¨ {@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} ââ çµè¯ä¼è¯ç¶ææºï¼redis ä¼è¯ãTTS ææ¥ãASR å¹é ãAI å¹é ãéé»/ææºã * éè¯è®°å½è½åºï¼çå ¨é¨å®ç°ï¼</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}ï¼ruoyi-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() { } } 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> * å ¶å®æ¨¡åï¼éè®¿ç¼æã宿¶ä»»å¡ãAI æºå¨äººåè°çï¼è¦"ç¨å°çµè¯çåè½"æ¶ï¼ * æ³¨å ¥ {@link PhoneFacade}ï¼å¸¸é©» Beanï¼è°è¿éçæ¹æ³ï¼<b>ä¸è¦</b>廿³¨å ¥æ¬æ¨¡åç * {@code IPhoneService} å®ç°ãä¹ä¸è¦ import æ¬æ¨¡åç controller/service å é¨å ã * * <h3>æ¹æ³è¯ä¹ï¼ä¸å¤é¨çµè¯å¹³å°çåè°ä¸ä¸å¯¹åºï¼è¡ä¸ºä¸å {@code IServiceSubtaskService} å®å ¨ä¸è´ï¼</h3> * <ul> * <li>{@link #phoneCallBack} ââ 䏿µ·ééï¼è¯é³è¯å«ç»æä¸æ¥ï¼é©±å¨å¤è½®é®ç䏿æºï¼</li> * <li>{@link #phoneCallBackYQ} ââ é¨ç»®ééï¼ASR / éé» / æ¾é³äºä»¶åè°ï¼è¿åä¸ä¸æ¥ææ¥å 容ï¼</li> * <li>{@link #taskPull} ââ é¨ç»®ééï¼æå°æ¶é 颿åå¾ å¤å¼åä»»å¡ï¼å«å¼åºç½ä¸é¦é¢ï¼ï¼</li> * <li>{@link #saveQuestionAnswerPhone} ââ çµè¯ä¾§æ£è ä½çè½åºï¼èµ°å任塿ç»ï¼ï¼</li> * <li>{@link #recordAccept} ââ é¨ç»®ééï¼éè¯è®°å½åè°ï¼æ 人æ¥å¬/已宿/æè®¿ï¼ï¼</li> * <li>{@link #getFirstQues} / {@link #processResust} ââ 䏿±ééï¼åé¦é¢ãASR ç»æå¤çã</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 åè°å ¥åï¼uuid + è¯å«ææ¬ï¼ */ void phoneCallBack(PhoneCallBackVO phoneCallBackVO); /** * çµè¯ ASR éè¯åè°ï¼é¨ç»®ï¼ * * @param phoneCallReqYQVO åè°å ¥åï¼taskid å³åä»»å¡ ID + å½åé¢ç®çè¯å«ææ¬ï¼ * @return ä¸ä¸æ¥è¦ææ¥çå 容ï¼type/value/silent_intervalï¼ï¼æ 坿æ¥å 容æ¶è¿å空对象 */ PhoneCallBackYQVO phoneCallBackYQ(PhoneCallReqYQVO phoneCallReqYQVO); /** * çµè¯ä»»å¡æåï¼é¨ç»®ï¼ * * @return å¾ å¤å¼ä»»å¡åè¡¨ï¼æ å¯æåæ°æ®æ¶è¿å空å表 */ List<PullTaskVO> taskPull(); /** * æ£è é®é¢ç»æè®°å½ï¼çµè¯ï¼ * * @param serviceSubTaskDetailReq æç»éåï¼å ¥å为åä»»å¡ ID æ taskid+patid å å¯ä¸²ï¼ * @return è½åºæ¡æ°ï¼æ¨¡åå ³éæ¶è¿å 0 */ Integer saveQuestionAnswerPhone(ServiceSubTaskDetailReq serviceSubTaskDetailReq); /** * éè¯è®°å½åè°ï¼é¨ç»®ï¼ * * @param phoneCallRecordVO éè¯è®°å½ï¼ææåå ãå½é³è·¯å¾çï¼ * @return å¤çç»æï¼åºå® 1ï¼ä¿æåå®ç°è¯ä¹ï¼ */ Integer recordAccept(PhoneCallRecordVO phoneCallRecordVO); /** * æ ¹æ®çµè¯å·ç è·åé¦ä¸ªé®é¢ï¼ä¸æ±ï¼ * * @param phoneCallReqYQVO å ¥åï¼phoneï¼ * @return åä»»å¡ ID + é¦é¢é¢å·/å å®¹ï¼æ¥ä¸å°æ¶è¿åä» å«é»è®¤ status ç空对象 */ PhoneCallBackSHVO getFirstQues(PhoneCallReqYQVO phoneCallReqYQVO); /** * 䏿± ASR ç»æå¤ç * * @param phoneCallResultYQVO ASR ç»æï¼subIdãscriptIdãè¯å«ææ¬ï¼ * @return ä¸ä¸é¢å 容ï¼å¹é 失败ä¸é鮿¬¡æ°ç¨å°½æ¶è¿åé¢ç®åæ¢ç»æ */ PhoneCallBackSHVO processResust(PhoneCallResultYQVO phoneCallResultYQVO); } 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>ï¼çµè¯æ¯é访ç䏿¡åéééï¼æ¨¡åè¢«å ³ææ¶ä¸è½è®©è°ç¨æ¹ï¼éè®¿ç¼æã宿¶ä»»å¡ï¼ * è·çç¸ãHTTP 侧妿 {@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("ãçµè¯ãæªæ¾å°çµè¯æ¨¡åå®ç°ï¼IPhoneService 缺失ï¼ï¼{} æ¬æ¬¡è°ç¨éçº§ä¸ºç©ºç»æ", method); return false; } return true; } } 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>飿 ·è°ç¨æ¹åªä¼æ¿å° 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ï¼ï¼è¯¥æ¥å£ä¸å¯ç¨"; 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; } } 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> * åæ°é®åï¼phone.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; } 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> * åæ°é®åï¼phone.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å¯ç¨ï¼falseå ³éï¼é»è®¤trueï¼'); * </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ï¼fail-openï¼</h3> * 读 {@code sys_config} éè¦èµ°æ°æ®åºï¼æ°æ®åºæå¨æ¶å¦æ fail-closed ä¼ææ´æ¡çµè¯é¾è·¯ææ» * ï¼åè°å¤±è´¥æå³çæ£å¨éè¯çéè®¿ç´æ¥ææï¼ãè¿éåªæ WARN å¹¶æ¾è¡ã * * <h3>为ä»ä¹æ 10 ç§ç¼å</h3> * {@code SysConfigServiceImpl#selectConfigByKey} å½åæ¯æ¬¡é½æ¥åºï¼èæ¬å¼å ³å¨æ¯æ¬¡çµè¯åè°ã * æ¯æ¬¡å®å«å¤ææ¶é½ä¼è¢«è¯»å°ãè¿éå ä¸ä¸ªè¿ç¨å TTL ç¼åï¼ææ¥åºéå°"æ¯ä¸ªå®ä¾æ¯ 10 ç§æå¤ä¸æ¬¡"ã * 代价æ¯åæ°æ¹å¨æå¤ 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; /** * åæ°é ç½®æå¡ï¼ruoyi-common çæ¥å£ï¼å®ç°å¨ 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; } /** * è§£æå½åå¼å ³å¼ï¼sys_config ä¼å ï¼å ¶æ¬¡ yml å åº */ private boolean resolve() { String value = readFromSysConfig(); if (value != null) { if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) { log.warn("ãçµè¯ãsys_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("ãçµè¯ãsys_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) { // 容卿²¡æå®ç°ãæ°æ®æºå¼å¸¸ãSQL æ¥éâ¦â¦ä¸å¾æ"åæ°ç¼ºå¤±"å¤çï¼fail-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); } } } 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>ï¼å¤é¨çµè¯å¹³å°çåè°å°åä¸è½æ¹ï¼ï¼å æ¤å®æ£è½å¨ä¸¤ä¸ªåç¼ä¸ï¼ * <pre> * /smartor/serviceSubtask/phoneCallBack 䏿µ·ï¼è¯é³è¯å«ç»æåè° * /smartor/serviceSubtask/phoneCallBackYQ é¨ç»®ï¼ASR / éé» / ææ¾äºä»¶åè° * /smartor/serviceSubtask/taskPull é¨ç»®ï¼ä»»å¡æå * /smartor/serviceSubtask/saveQuestionAnswerPhone çµè¯ï¼æ£è é®é¢ç»æè®°å½ * /smartor/serviceSubtask/recordAcceptshanghai 䏿µ·ï¼éè¯è®°å½åè° * /smartor/serviceSubtask/recordAccept é¨ç»®ï¼éè¯è®°å½åè° * /smartor/shphone/getFirstQues 䏿±ï¼æå·ç åé¦ä¸ªé®é¢ * /smartor/shphone/processResust 䏿±ï¼ASR ç»æå¤ç * </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"; /** * é¨ç»®ï¼ASR / éé» / ææ¾äºä»¶åè° */ 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"; /** * 䏿±ï¼ASR ç»æå¤ç */ 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); } } 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>ââåªè¦å®æ´è·¯å¾ä¸éå¤ï¼Spring å¯ä»¥æ£å¸¸æ³¨åã * * <h3>为ä»ä¹èµ°é¨é¢ï¼PhoneApiï¼è䏿¯å é¨ 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; } /** * æ£è é®é¢ç»æè®°å½(çµè¯) */ @ApiOperation("æ£è é®é¢ç»æè®°å½ï¼çµè¯ï¼") @PostMapping("/saveQuestionAnswerPhone") public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) { log.info("æ£è é®é¢ç»æè®°å½(çµè¯):{}", 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(); } } 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>ï¼ä¸æ±å¹³å°æ éæ¹åè°å°åã * å©ä¸é£ä¸ª {@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); } } ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackSHVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallBackSHVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallBackVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallBackYQVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallBackYQVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallRecordVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallRecordVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallReqYQVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallReqYQVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PhoneCallResultYQVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/PhoneCallResultYQVO.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/PullTaskVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-phone/src/main/java/com/ruoyi/phone/domain/QuestionMessage.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/QuestionMessage.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.phone.domain; import lombok.Data; 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); } 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>ï¼key åç¼æ¯æ¬éçµè¯ç uuid æ"åä»»å¡ID-ææºå·"ï¼ï¼ * è¿äº key çæ¼åãTTLã读å顺åºä¸åå®ç°å®å ¨ä¸è´ ââ çµè¯åè°æ¯å¤é¨å¹³å°é©±å¨çã * è¿ç¨éå¯åè¦ç»§ç»ï¼æä»¥è¿äº key å°±æ¯"ä¸å¡ç¶ææº"ï¼è¿ç§»æ¶ä¸è½å¨ã * * <h3>è¢«å»æå æçä¸è¥¿</h3> * å {@code ServiceSubtaskServiceImpl#getSmsCompensate(Long)}ï¼"çµè¯çè¡¥å¿æ¹æ³ï¼èï¼"ï¼æ²¡ææ¬ï¼ * å®ç两个è°ç¨ç¹ï¼{@code phoneCallBackYQ} é"æ£è ææ"ã{@code recordAccept} é"æ 人æ¥å¬"ï¼ * 卿¨¡ååå就已被注éæï¼å±æ»ä»£ç ï¼æ¬è¿æ¥åªä¼æ {@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 ä¾§éé å®ç°æ¬ç«¯å£ã */ @Autowired private TaskPreachformPort taskPreachformPort; /** * å½é³æä»¶ä¸è½½ï¼é¨ç»®éè¯è®°å½åè°éæå½å¤©å½é³ä» FTP æåæ¬å°ï¼ */ @Autowired private TaskFtpPort taskFtpPort; /** * åæ°é 置读åï¼{@code sys.voice.match.ai.url}ï¼AI é项å¹é æå¡å°åï¼ææºæé ç½®ï¼ */ @Autowired private TaskSysConfigPort taskSysConfigPort; /** * AI é项å¹é å¥çº¦ï¼ruoyi-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("该uuidä¸åå¨"); } 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"); //å°uuidæ´æ°å°æ°æ®åºä¸ 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("å»è°ç¨ttsåæåææ¾æ¥å£: {},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("éé»è¯æ¯ + é®é¢,å»è°ç¨ttsåæåææ¾æ¥å£: {},uuid为ï¼{}", date, phoneCallBackVO.getUuid()); phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid()); return; } } else { //isppdç¨æ¥è®°å½æ¯å¦å¹é å° Boolean isppd = false; //æåè¯ï¼å¯¹åççé®é¢,è¿è¡æ£åå¹é ï¼è¿éåªé坹鿩é¢ï¼å ¶å®é¢åä¸è¡ï¼ 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()) { //说æå¹é æ£ç¡®äº //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ 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); //å°å¹é å°çæ è¯æ¹ætrue 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 { //没æå¹é ä¸å½åoption //Targetregex2 为falseï¼è¡¨ç¤ºå¨Targetregex2ä¸åå¨ è¯å¥ä¸çå ³é®åï¼è¿ä¸ªoptionå°±ä¸ç¨åç»§ç»å¹é äºï¼ç´æ¥å¹é ä¸ä¸ä¸ªoption 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ãttsåæåææ¾ï¼ 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) { //å æè¯¥subIdä»cache_existä¸åé¤ï¼åªè¦æåè°å°±åé¤ï¼ç®çæ¯ï¼å°½å¿«è®©cache-exist为空ï¼å»ç¼åä¸ä¸æ¹è¦æççµè¯;è¿éåé¤ä¸å½±åçµè¯çæ£å¸¸ä¸å¡ï¼ // 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("çµè¯åéæåï¼æ£è ææï¼"); 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); //å æé»è®¤çrecordAccept-hungupå é¤ï¼åæ´æ° redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup"); redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES); //è®°å½çµè¯åéç¶æ setFailPreachForm(serviceSubtask2, "3", "çµè¯åéæåï¼æ£è ææï¼", "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ænull表示å½åçasrtext䏿¯ä¸å¥å®æ´çè¯ 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", "éè¯æ£å¸¸ç»æ", "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; } } //éè¿åä»»å¡IDè·åå°æ¨¡æ¿ä¿¡æ¯ 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); //妿ä¸åå¨ï¼å°±æå½åçUUIDå为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()) { //å°ä¸çè¯,就继ç»é®æ£è phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); String scriptContent = ivrTaskTemplateScriptVO.getIvrtext(); log.error("SilentCallbackçé®é¢å 容scriptContentï¼{}", 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()); //å°ç»æåå°detailä¸ 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); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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("å æ´æ°ä¸ä¸åæ°,çµè¯çserviceSubtaskçå¼ä¸ºï¼{}", 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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()); //å°ç»æåè¿detail表 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; } //说æå¹é æ£ç¡®äº if (matchedFlag) { //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ log.info("å¹é æ£ç¡®äºå--------------"); 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); //夿ä¸ä¸å½åçé®é¢æ¯ä¸æ¯æ»¡æåº¦é®é¢ï¼å¹¶ä¸dutyDeptCodeæ¯å¦æå¼ï¼å¹¶ä¸é项æ¯ä¸æ¯å¼å¸¸é项ï¼å¦æå ¨ç¬¦åï¼å徿»¡æåº¦é®é¢å¼å¸¸è¡¨æ°å¢ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsabnormal()) { ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace(); //ç¨taskidãsubidåscriptidå»è·ådetailid 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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()); //å°ç»æåè¿detail表 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)); //å°è¯¥æ£è ç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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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)); //å°è¯¥æ£è ç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çè¯ï¼åéè¦æ ¹æ®é®é¢ä¸çnextScriptnoè¿è¡è·³è½¬ //é®ç颿²¡æè·³è½¬ 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"); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ Long id = serviceSubtask.getId(); Map<String, String> map = delRedisValue(null, id.toString()); redisCache.setCacheObject(map.get("cacheName"), map.get("val")); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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(); //å¿ é¡»çache-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ç¹ä¸ç¹è½æåºå¤å°ä¸ªçµè¯ï¼è·åå°æ»é //妿éè¦ç«å³æ§è¡çæ°æ®é大äºä¸å¤©è¦æ§è¡çä¸éï¼ååªåä¸éçæ°éï¼å ¶å®çåæ¾åredisä¸ 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++) { //ååºä»cache-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ç¨æ¥è®°å½æ¥ä¸æ¥éè¦æ§è¡çåä»»å¡ID // 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("该subIdæé®é¢ï¼å¨è¡¨ä¸æ¥è¯¢ä¸å°ï¼{}", 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 = åä»»å¡ID + é®é¢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("çµè¯æ¨æå·²å®æserviceSubtaskçå¼ä¸º:{}", 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 { //æ£è æç»é访 //å æè¯¥subIdä»cache_existä¸åé¤ï¼åªè¦æåè°å°±åé¤ï¼ç®çæ¯ï¼å°½å¿«è®©cache-exist为空ï¼å»ç¼åä¸ä¸æ¹è¦æççµè¯;è¿éåé¤ä¸å½±åçµè¯çæ£å¸¸ä¸å¡ï¼ // redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid()); ServiceSubtask serviceSubtask = new ServiceSubtask(); serviceSubtask.setRemark("çµè¯æ¥éæåï¼æ£è æç»é访"); 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", "çµè¯æ¥éæåï¼æ£è æç»é访", "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) { // 对该æ¡templateScriptVOè¿è¡å¤ç 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); //妿å½åçpreachformå·²ç»æ¯æåä¸ä¸ªäºï¼é£ç´æ¥å°serviceSubtaskçsendstateç¶ææ¹æ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ï¼å 为ryTaskéçè¡¥å¿ç宿¶ä»»å¡è¿è¡æ¶ï¼ä¼æ¾å°è¿æ¡subtaskï¼å¹¶è¿è¡å¤ç serviceSubtask.setCurrentPreachform(preachform); serviceSubtask.setSendstate(3L); //妿çäº9ï¼å说æçµè¯æ£å¸¸ç»æäº 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 ç¨äºå¼å¯¼æ£è 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); //说æå¹é æ£ç¡®äº if (matched != null && matched >= 0) { IvrTaskTemplateTargetoption chosenOption = options.get(matched); //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ log.info("å¹é æ£ç¡®äºå--------------"); 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); //夿ä¸ä¸å½åçé®é¢æ¯ä¸æ¯æ»¡æåº¦é®é¢ï¼å¹¶ä¸dutyDeptCodeæ¯å¦æå¼ï¼å¹¶ä¸é项æ¯ä¸æ¯å¼å¸¸é项ï¼å¦æå ¨ç¬¦åï¼å徿»¡æåº¦é®é¢å¼å¸¸è¡¨æ°å¢ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == chosenOption.getIsabnormal()) { ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace(); //ç¨taskidãsubidåscriptidå»è·ådetailid 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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为nullæ¶æåæ¯0å¤çï¼é¿å NPE 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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)); //å°è¯¥æ£è ç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("ä¸ä¸é¢èæ¬æªæ¾å°ï¼éé®å½åé¢ï¼nextQuestionï¼{}", 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //ç»æè¯å·²æ¼è¿è¿åå¼ï¼ææºç±å¹³å°æè¿å弿§è¡ back = phoneCallBackYQVO; return back; } } else { //AI没æå¹é ä¸ï¼ç±AI忝èªå·±æ"æ²¡é®æ¸ å°±éé®"çæ¬¡æ°å¤çï¼ä¸åé忣åè¯å« log.info("ai没æå¹é ä¸----------------------------"); //没å¹é ä¸ä¹è¦ææ£è 说çè¯è®°å½ä¸æ¥ï¼matchedtext置空ï¼ä¸æ£åè·¯å¾å£å¾ä¸è´ï¼ 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); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = taskSubtaskApi.getTask(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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 { //è¿æä¸ä¸é¢ï¼ænextScriptnoç»§ç»æé® 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)); //å°è¯¥æ£è ç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å¼å¯¼æ£è éç 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; } } 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() { } } ruoyi-quartz/pom.xml
@@ -82,6 +82,19 @@ <artifactId>ruoyi-message</artifactId> </dependency> <!-- 任塿¨¡åï¼service_task / service_subtaskï¼ã RyTask / CollectHISServiceImpl ç´æ¥æ³¨å ¥ä»»å¡åçæå¡ä¸ Mapper ï¼IServiceSubtaskServiceãServiceTaskMapperãServiceSubtaskMapper çï¼ï¼ è¿äºå·²ç¬å æ¬å ¥ ruoyi-taskï¼æ æ¤å¤éè¦ç¼è¯æä¾èµã â ï¸ ä¸ä¸é¢ ruoyi-othervisit åçï¼åå åªé smartor ä¼ éå¸¦è¿æ¥ï¼ 䏿¦ä¾èµå¾ååå°±ä¼å¨ç¼è¯æï¼ææ´ç³ï¼è¿è¡æï¼æç¸ï¼æ æ¾å¼å£°æã --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-task</artifactId> </dependency> </dependencies> </project> 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 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 { 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 { 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; /** * 宿¶ä»»å¡è°åº¦æµè¯ * 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> 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>é£ä¸ªå®ä½å±äº smartor ç**é访任å¡ç®¡ç**ä¸å¡ï¼è¢«å¤§éæä»¶ä½¿ç¨ï¼å«å¢å æ¹æ¥ï¼ï¼ä¸è½æ¬è¿æ¬æ¨¡åï¼</li> * <li>满æåº¦ææ°ç»è®¡åªç¨å°å®ç 4 ä¸ªåæ®µï¼è§ä¸ï¼ï¼</li> 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ã 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(...)} çè¿åå¼è¢«ä¸¢å¼ï¼ 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> * è¯é³åç±»ï¼IvrLibaScriptAssortServiceImpl.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} è¯å«ï¼ä¸ * ãæ»¡æåº¦å¡«æ¥æç»ãï¼å±äºæ»¡æåº¦å£å¾ï¼æ æ¬å ¥æ¬æ¨¡åã 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> 任塿¨¡åï¼service_taskï¼ä»»å¡ï¼ä¸ service_subtaskï¼åä»»å¡ï¼çå¯ä¸å®ç°å¤ã æ¬æ¨¡åèªå¸¦ Mapper ä¸ SQLï¼ç´æ¥è¯»å service_task / service_subtaskï¼ å ¶å®æ¨¡åéè¦ä»»å¡æ°æ®åªè½éè¿ com.ruoyi.task.api è°ç¨ï¼ æç»ä¸æ²å° ruoyi-common çå¥çº¦ï¼VisitTaskCreateApi / ServiceTaskMatchApi / SubtaskStatApi / SubtaskOptionMatchApiï¼åç¨ã æ¯æéè¿ sys_config åæ°è¡¨éç task.enabled æ´ä½å ³éï¼è¿è¡æ¶è¯»åï¼æ¹å®æå¤ 10 ç§çæï¼ã ä¾èµæ¹åï¼ruoyi-task -> ruoyi-commonï¼ç»ä¸ä¾èµ smartor / smartor-suifang / ruoyi-system / ruoyi-framework / ruoyi-adminï¼å¦åå½¢æå¾ªç¯ä¾èµï¼Maven ç´æ¥æå»ºå¤±è´¥ï¼ã </description> <dependencies> <!-- éç¨å·¥å ·ï¼BaseController / ExcelUtil / PageUtils / Arith / SecurityUtils / DtoConversionUtils åæ¶ä¼ éå¸¦å ¥ pagehelper(å« mybatis)ãswagger-annotationsãcommons-lang3ãjackson ç --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common</artifactId> </dependency> <!-- lombokï¼ruoyi-common éæ¯ç´æ¥ä¾èµï¼æ¤å¤æ¾å¼å£°æçæ¬ï¼é¿å 注解å¤çå¨ç¼ºå¤± --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> </dependency> <!-- MyBatisï¼Mapper æ¥å£ä¸ XMLï¼pagehelper å·²ä¼ éå¸¦å ¥ï¼è¿éåªæ¯æ¾å¼åæå¾ï¼ --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <!-- Servlet APIï¼HttpServletResponseï¼Controller 导åºç¨ï¼ --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <!-- æ¨¡æ¿æ¨¡åï¼ä»»å¡çæ¨¡æ¿ / Script / Targetoption åæ®µç±»åæ¥èª template å ï¼SvyTaskTemplateTargetoptionãHeLibraryCountVOãIvrTaskTemplate* çï¼ã 注æï¼ruoyi-template åªä¾èµ ruoyi-commonï¼ä¸ä¼ä¸ ruoyi-task å½¢æå¾ªç¯ä¾èµã --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-template</artifactId> </dependency> <!-- 以䏿¨¡åãé½åªä¾èµ ruoyi-commonï¼æå ¶ä¸æ¸¸ï¼ãï¼å æ¤ä¸ä¼ä¸ ruoyi-task å½¢æå¾ªç¯ä¾èµï¼ · ruoyi-satisfaction ï¼é访ç»è®¡éçãæ»¡æåº¦ææ°ãç» SatisfactionFacade åç¨ Â· ruoyi-message ï¼çä¿¡ / 微信åéæ¹ï¼SmsSenderFactory / WechatSenderFactoryï¼ Â· ruoyi-inhospvisit / ruoyi-outpatientvisit / ruoyi-othervisitï¼ éè®¿ç¼æé¨é¢ï¼InhospVisitFacade / OuthospDataFacade / OtherVisitFacadeï¼ â ï¸ ä»ç¶ãä¸å¾ãä¾èµ smartor / smartor-suifang / ruoyi-system / ruoyi-framework / ruoyi-adminã ruoyi-system çè½åï¼å¦ ISysConfigService ç 2 å selectConfigByKeyï¼ä¸å¾ç» com.ruoyi.task.api.spi ç端å£ç± 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> 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() { } } ruoyi-task/src/main/java/com/ruoyi/task/api/TaskApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.ruoyi.task.api; /** * 任塿¨¡å<b>坹夿¥å£</b>ï¼å ¶å®æ¨¡åå¯ä¾èµç稳å®å ¥å£ï¼ã * * <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>飿¬æ¥å£åä»ä¹</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(); } 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; } } 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.*}ï¼VisitTaskCreateApi / ServiceTaskMatchApi / * SubtaskStatApi / SubtaskOptionMatchApiï¼ï¼ç» smartor / ruoyi-admin / ruoyi-quartz ç¨ç * "䏿²å° ruoyi-common çæ¥è¯¢å¥çº¦"ï¼èµ°çæ¯ smartor ä¾§å®ç°ï¼</li> * <li>{@link TaskSubtaskApi}ï¼æ¬æ¥å£ï¼ï¼<b>模åå°æ¨¡å</b>çæ°æ®è®¿é®å ¥å£ï¼ * å®ç°å°±å¨æ¬æ¨¡åå ï¼{@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 æ¥è¯¢æ¡ä»¶ï¼taskid / 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}ï¼ï¼ * çµè¯æµç¨ç¨å®åå¼åºç½ï¼kcbï¼ãç»æè¯ï¼jsyï¼ä»¥åè¯æ¯éé 符ï¼textParamï¼ * * @param taskid ä»»å¡ ID * @return ä»»å¡ï¼ä¸åå¨è¿å {@code null} */ ServiceTask getTask(Long taskid); /** * ææ¡ä»¶æ¥å任塿ç»ï¼å {@code ServiceSubtaskDetailMapper#selectServiceSubtaskDetailList}ï¼ * * @param query æ¥è¯¢æ¡ä»¶ï¼subId / 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}ï¼ï¼ * çµè¯æµç¨ææ¯ä¸é¢ç"é®é¢ + æ£è åè¯ + å½ä¸é项"è®°è¿è¯¥è¡¨ * * @param visitResult 访é®ç»æ * @return åå½±åè¡æ° */ int insertVisitResult(IvrTaskVisitResult visitResult); /** * æ°å¢åä»»å¡å¼å¸¸è·è¸ªï¼å {@code IServiceSubtaskDetailTraceService#insertServiceSubtaskDetailTtrace}ï¼ï¼ * çµè¯æµç¨å½ä¸"å¼å¸¸é项ä¸å¸¦è´£ä»»ç§å®¤"æ¶å䏿¡ï¼ä¾é访å¼å¸¸å¤çé¡µä½¿ç¨ * * @param trace å¼å¸¸è·è¸ªè®°å½ * @return åå½±åè¡æ° */ int insertDetailTrace(ServiceSubtaskDetailTrace trace); } 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"}ï¼ä½é£æ¯<b>é¨è¯ç</b>å£å¾ï¼ä¸æ¯æ¬å¥çº¦çå£å¾ã * æ¬ç±»åªè´è´£æå®éä¼ è¿ {@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; } } 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} éè¦ãAI é项å¹é ãè½åï¼ * è该è½åç®åå®ç°å¨ smartor ç {@code ServiceSubtaskServiceImpl#matchOptionIndex} * ï¼åæä»¶å è¿æ 3 å¤èªæè°ç¨ï¼æä»¥ä¸è½æ´ä½æ¬èµ°ï¼ã * æ¨¡æ¿æ¨¡åä¸è½ä¾èµ smartorï¼äºæ¯ææ¢æææ³ææ¥å£æ¾ 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); } } 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); } } 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); } } 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>å å ¥å»éãç¶ææºãé»è®¤å¼è¡¥é½ãåå¹¶æ´æ°ç任使°é»è¾ ââ * é£äºè¯ä¹å¨ {@code ruoyi-inhospvisit} ç {@code writeInSubTask} éã * æ¬ç±»åªåï¼<b>åæ®µæ¬è¿</b> + <b>转åç°æ Mapper è°ç¨</b>ã * éåæ®µå¯¹åºå ³ç³»ç± {@code sql/_probe/verify_inhospvisit_equivalence.py}ï¼A æ¡£ï¼ä¸ * {@code verify_inhospvisit_semantics.py}ï¼B æ¡£å£å¾æè¨ï¼æå ³ã * * <h3>éæ¹æ³æ¥æºï¼è¿ç§»å {@code PatMedInhospServiceImpl}ï¼@ b25c3b51ï¼</h3> * <table border="1"> * <tr><th>æ¬ç±»æ¹æ³</th><th>åå®ç°ä½ç½®</th></tr> * <tr><td>{@link #findPublishedLongTask(Long)}</td><td>L686-728ï¼æ¥ ServiceTaskï¼sendState=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ãL1325-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("ãåºå ¥é¢éè®¿Â·è¿æ¸¡æ¡¥ãinsertSubtask æ¶å° 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ï¼L1325-1328ï¼éãä¸è®¾ taskidãï¼ææ£è å ¨éæ¥ï¼ï¼ // å¨ writeInSubTaskï¼L760-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("ãåºå ¥é¢éè®¿Â·è¿æ¸¡æ¡¥ãupdatePendingSubtask ç¼ºå° idï¼è·³è¿ãpending={}", pending); return false; } ServiceSubtask entity = new ServiceSubtask(); // åªæ å°"åå®ç°ä¼å¸¦è¿å»"çåæ®µï¼ // åå®ç°ä¼ çæ¯ãæ¥è¯¢åºæ¥ç宿´å¯¹è±¡ã+ å¨å åéæ¹çé£å ä¸ªåæ®µã // æ¥è¯¢åºæ¥ç宿´å¯¹è±¡éï¼ä¸æ¬æ¹æ³è¯ä¹ç¸å ³çåªæ 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>ï¼XML 鿝 {@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()); // ------------------------------------------------------------------ // 鍿¥è¯é访ä¸ç¨å段ï¼OuthospSubtaskDraftï¼ã // // â ï¸ ç¨ instanceof åæµï¼è䏿¯ç» VisitSubtaskDraft å åæ®µï¼ // å äºå°±å¿ é¡»å¨è¿éè¡¥æ å°ï¼èè¡¥æ å°ä¼è®©ãåºå ¥é¢é£æ¡å·²éªæ¶çè·¯å¾ãå¤åå // ï¼insertServiceSubtask æ¯ 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; } } 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; /** * æ£è æ¡£æ¡è¯»åè½å ââ <b>ruoyi-task çå¯¹å¤ SPIï¼ç± smartor ä¾§å®ç°</b>ã * * <h3>为ä»ä¹ç«¯å£å£°æå¨ ruoyi-taskãå®ç°å¨ smartor</h3> * ä»»å¡ä¾§è¦è¯» {@code pat_archive}ï¼ä½è¯¥è¡¨ä¸å½ ruoyi-task * ï¼æ£è æ¡£æ¡æ¯ç¬ç«åï¼æ¬æ¬¡åªæ {@link PatArchive} è¿ä¸ª<b>ç±»å</b>䏿å°äº ruoyi-commonï¼ã * æ"忍¡åç¬å èªå·±çæ°æ®è®¿é®"ååï¼ruoyi-task ä¸å¾èªåé对 {@code pat_archive} ç SQLã * <p> * åå 为 ruoyi-task <b>ä¸è½ä¾èµ smartor</b>ï¼ä¼å½¢æ * {@code smartor -> ruoyi-task -> smartor} 硬循ç¯ï¼ï¼æä»¥æ¹åå¿ é¡»åè¿æ¥ï¼ * <b>æ¥å£å£°æå¨ ruoyi-taskãå®ç°æ¾å¨ smartor</b>ï¼ç± Spring å¨è¿è¡ææ³¨å ¥ã * ç¼è¯æ ruoyi-task åªçå°æ¥å£ï¼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 æ¡£æ¡ id * @return æ¡£æ¡ï¼ä¸åå¨è¿å {@code null} */ PatArchive findByPatid(Long patid); /** * ææ¡ä»¶æ¥æ¡£æ¡å表ï¼å {@code PatArchiveMapper#selectPatArchiveList}ï¼ã * * @param query æ¥è¯¢æ¡ä»¶ï¼é null åæ®µåä¸è¿æ»¤ï¼ * @return æ¡£æ¡éå */ List<PatArchive> findList(PatArchive query); /** * æ id æ¥ãå¯¼å ¥æ¡£æ¡ãå¹¶è½¬ææ¡£æ¡è§å¾ï¼å * {@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 æ¡£æ¡ id * @return 转æ¢åçæ¡£æ¡ï¼ä¸åå¨è¿å {@code null} */ PatArchive findImportedByPatid(Long patid); } 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 çéç¨å·¥å ·ï¼ä¸å±ä»»å¡åï¼å æ¤ç»æ¬ç«¯å£åç¨ã * * <h3>为ä»ä¹ç«¯å£å¨ ruoyi-task èä¸å¨ ruoyi-common</h3> * æ¬ç«¯å£åªè¢« ruoyi-task 使ç¨ãä¸åæ°å ¨æ¯åºæ¬ç±»åï¼æ²¡æ"夿¹å ±äº«çå¥çº¦ç±»å"ï¼ * æ¾å¨ ruoyi-task ç {@code api.spi} ä¸å³å¯ï¼ä¸å¿ 污æ ruoyi-commonã * æ¹å仿¯ãæ¥å£å¨ ruoyi-taskãå®ç°å¨ smartorãï¼ç¼è¯ææ ç¯ã * * <h3>â ï¸ å®ç°å¿ é¡»ä¿æ"纯转å"</h3> */ public interface TaskFtpPort { /** * éå½ä¸è½½è¿ç«¯ç®å½å°æ¬å°ï¼å {@code FtpService#downloadFolder}ï¼ã * * @param remoteDir è¿ç«¯ç®å½ * @param localDir æ¬å°ç®å½ */ void downloadFolder(String remoteDir, String localDir); } 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>â ï¸ è¿æ¯ãè¿æ¸¡ã端å£ï¼å½¢æå»æä¸æ§ Mapper ä¸è´</h3> * æ¬ç«¯å£<b>éæ¹æ³éå</b> smartor æ¢æçï¼å·² {@code @Deprecated} çï¼ * {@code ServiceSubtaskPreachformMapper}ï¼ååæ¹æ³ãåååæ°ãåè¿åç±»å * ï¼{@code insert/update} ä»è¿å {@code int}ï¼ã * è¿æ ·é£ 4 个类æ¬è¿ ruoyi-task æ¶<b>åªéææ³¨å ¥çåæ®µç±»åæ¢ææ¬ç«¯å£ï¼è°ç¨ç¹ä¸è¡é½ä¸ç¨æ¹</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); } 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 å¤è°ç¨ï¼è¦è¯»è¿å¼ è¡¨ï¼ * æ ç»æ¬ç«¯å£åç¨ ââ æ¹å仿¯ãæ¥å£å¨ ruoyi-taskãå®ç°å¨ smartorãï¼ç¼è¯ææ ç¯ã * * <h3>â ï¸ è¿æ¯ãè¿æ¸¡ã端å£ï¼å½¢æå»æä¸æ§ Service ä¸è´</h3> * éæ¹æ³éå smartor ç {@code IServiceSubtaskRecordService} ä¸ä»»å¡ä¾§çæ£ç¨å°çé£ä¸¤ä¸ªæ¹æ³ * ï¼ååãååæ°ãåè¿åç±»åï¼ï¼ä½¿ Controller æ¬è¿ ruoyi-task æ¶ * <b>åªéæ¢æ³¨å ¥å段类åï¼è°ç¨ç¹ä¸è¡é½ä¸ç¨æ¹</b>ã * * <h3>å°æ¥å¨ä½</h3> * è¥å°æ¥ {@code service_subtask_record} ä¹çº³å ¥ä»»å¡æ¨¡åï¼æ¬ç«¯å£å³å¯å é¤ï¼ * æ¹ä¸ºæ¨¡åå ç´æ¥è°ç¨ã * * <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); } 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} å±ç³»ç»åãruoyi-task èªå·±ç模åå¼å ³è¯»åæ°èµ° * {@code ruoyi-common} ç {@code IConfigService}ï¼ä½è¿éåæ¬èµ°çæ¯ * {@code SysConfigMapper#checkConfigKeyUnique}ï¼è¿åæ´è¡ï¼ï¼ * ä¸åªç¨å° {@code configValue} ä¸ä¸ªåæ®µï¼æ æ¶æä¸ä¸ª<b>åªè¿åå¼</b>ç端å£ã * * <h3>â ï¸ å ³äº"è¡åå¨ä½å¼ä¸º null"çè¾¹ç</h3> * åå¤å®æ¯"è¡åå¨"ï¼{@code !isNull(sysConfig)}ï¼ï¼æ¬ç«¯å£å¤å®æ¯"å¼é 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); } 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} å±ç³»ç»åï¼ruoyi-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); } 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} å±ç³»ç»åï¼ruoyi-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); } ruoyi-task/src/main/java/com/ruoyi/task/common/ScheduleSubtaskBuilder.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ï¼subtask çæå¨ @@ -37,7 +42,7 @@ private ServiceSubtaskMapper serviceSubtaskMapper; @Autowired private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; private TaskPreachformPort taskPreachformPort; /** * 为å个æ£è æ´¾ç subtaskï¼appltype=5ï¼ââ è§£è¦å ¥å£ï¼èªå¨çº³å ¥ & æå¨å¾éç»ä¸èµ°è¿éï¼ã @@ -174,7 +179,7 @@ pf.setSendstate("1"); pf.setOrgid(serviceTask.getOrgid()); pf.setCreateTime(new Date()); serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(pf); taskPreachformPort.insertServiceSubtaskPreachform(pf); } } 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>飿 ·è°ç¨æ¹åªä¼æ¿å° 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ï¼ï¼è¯¥æ¥å£ä¸å¯ç¨"; 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; } } 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> * åæ°é®åï¼task.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; } 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> * åæ°é®åï¼task.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å¯ç¨ï¼falseå ³éï¼é»è®¤trueï¼'); * </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ï¼fail-openï¼</h3> * 读 {@code sys_config} éè¦èµ°æ°æ®åºï¼æ°æ®åºæå¨æ¶å¦æ fail-closed 伿æ´ä¸ªä»»å¡ä¸å¡ææ»ã * è¿éåªæ WARN å¹¶æ¾è¡ï¼å®å¯å¤å¼ä¸ä¼å¿ï¼ä¹ä¸åæ°æ®åºæå¨æ¾å¤§å¨ã * * <h3>为ä»ä¹æ 10 ç§ç¼å</h3> * {@code SysConfigServiceImpl#selectConfigByKey} å½å<b>æ¯æ¬¡é½æ¥åº</b>ï¼Redis ç¼å飿®µè¢«æ³¨éæäºï¼ï¼ * èæ¬å¼å ³å¨æ¯æ¬¡ä»»å¡è¯·æ±ãæ¯æ¬¡å®å«å¤ææ¶é½ä¼è¢«è¯»å°ãè¿éå ä¸ä¸ªè¿ç¨å 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; /** * åæ°é ç½®æå¡ï¼ruoyi-common çæ¥å£ï¼å®ç°å¨ 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; } /** * è§£æå½åå¼å ³å¼ï¼sys_config ä¼å ï¼å ¶æ¬¡ yml å åº */ private boolean resolve() { String value = readFromSysConfig(); if (value != null) { if (!"true".equalsIgnoreCase(value) && !"false".equalsIgnoreCase(value)) { log.warn("ãä»»å¡ãsys_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("ãä»»å¡ãsys_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) { // 容卿²¡æå®ç°ãæ°æ®æºå¼å¸¸ãSQL æ¥éâ¦â¦ä¸å¾æ"åæ°ç¼ºå¤±"å¤çï¼fail-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); } } } 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/**}ï¼Spring çè·¯å¾å¹é é * {@code serviceSubtask} ä¸ {@code serviceSubtaskDetail} æ¯<b>两个ä¸åçæ®µ</b>ã * <p> * å æ¤è¿éç¨åç¼å³å¯ç²¾ç¡®è¦çï¼æ éåæ»¡æåº¦æ¨¡å飿 ·é个å 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); } } ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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} è¿ä¸åç¼ï¼åªè¦å®æ´è·¯å¾ä¸éå¤å³å¯æ£å¸¸æ³¨åã * * @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}ï¼ * ä¼è®©ã端ç¹å½å±ãä¸ãHIS ééå®ç°ãç»æ»ï¼è¿ 6 个端ç¹çå½å±è¦æ¬è¿ {@code ruoyi-task}ï¼ * èå®ç°ï¼{@code RyTask} 2214 è¡ãæ³¨å ¥çº¦ 20 个 smartor serviceï¼ä¸è½æ¬ï¼ * å¦åå½¢æ {@code ruoyi-task -> smartor} + {@code ruoyi-quartz -> ruoyi-task} ç硬循ç¯ã * <p> * æ¹ä¸ºç» {@code ruoyi-common} ç端å£åç¨ï¼æ¥å£å¨ 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; } /** * æ£è é®é¢ç»æè®°å½ */ @ApiOperation("æ£è é®é¢ç»æè®°å½ï¼çµè¯ï¼") @PostMapping("/saveQuestionAnswerPhone") public AjaxResult saveQuestionAnswerPhone(@RequestBody ServiceSubTaskDetailReq serviceSubTaskDetailReq) { // SysUser user = getLoginUser().getUser(); // serviceSubTaskDetailReq.setOrgid(user.getOrgid()); log.info("æ£è é®é¢ç»æè®°å½(çµè¯):{}", 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("ãcollectHISDaysBeforeã忥任å¡å·²å¯å¨ï¼å¤©æ°ä¸º" + 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("ãdealSubtaskDeadlineã忥任å¡å·²å¯å¨ï¼å¤©æ°ä¸º" + day + "天ï¼è¯·ç¨åæ¥çç»æ"); } @PostMapping("/sendExceptInfo") public AjaxResult sendExceptInfo() throws Exception { ryTask.sendExceptInfo(); taskOpsTriggerApi.sendExceptInfo(); return AjaxResult.success("sendExceptInfo"); } ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceTaskController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/DetailTraceDealDTO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/DTO/ServiceSubtaskDetailDTO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/IvrTaskVisitResult.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import java.util.Date; ruoyi-task/src/main/java/com/ruoyi/task/domain/PatArchiveSrmVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/PatTaskRelevance.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/Question.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/Question.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import lombok.Data; ruoyi-task/src/main/java/com/ruoyi/task/domain/SendMagParam.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/SendMagParam.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import lombok.Data; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceOutPath.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsRequest.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceStatisticsResponse.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubTaskDetailReq.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; /** * çµè¯é®é¢åçæç» ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCount.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskCountReq.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetail.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetail.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import java.util.Date; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTarget.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailTrace.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/ServiceSubtaskDetailTrace.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import java.util.Date; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDetailVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskDiagname.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskExport.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskIsAbnormalStatistic.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskPreachform.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRecord.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/ServiceSubtaskRecord.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.smartor.domain; package com.ruoyi.task.domain; import java.util.Date; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskScriptCount.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskStatistic.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskTemplateVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTask.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskRule.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskSchedule.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleDetail.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScheduleVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ï¼ä¸»è®¡å + æç»åè¡¨ï¼ ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskScriptQues.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 * ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdept.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskdiag.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskmedical.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskoper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/TaskSendTimeVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/DetailTraceDealVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskCotinueCountVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskDetailTraceVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceSubtaskVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/ServiceTaskmedicalVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/VO/TransferDeptVO.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 ruoyi-task/src/main/java/com/ruoyi/task/mapper/IvrTaskVisitResultMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceOutPathMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskDetailTraceMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceSubtaskMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ * ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskRuleMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleDetailMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskScheduleMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdeptMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskdiagMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskmedicalMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/mapper/ServiceTaskoperMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceOutPathService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskDetailTraceService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceSubtaskService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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); /** * è·åé访ãå¤è¯é ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskScheduleService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdeptService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskdiagService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskmedicalService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/IServiceTaskoperService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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æ¥å£ ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceOutPathServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ï¼å½¢æç¡¬å¾ªç¯ã /** * æ¥è¯¢é访任å¡å¼å¸¸è®°å½è·è¸ª ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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; /** * æ¶æ¯å鿹工åï¼çä¿¡/å¾®ä¿¡å ¬ä¼å·ï¼ï¼æ¿ä»£åæ¥ç´æ¥è°ç¨åç«ç¹åé代ç çåæ³ @@ -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 @@ //æ£è è·åé访任å¡-éè¦æ¥è¯¢å个æ£è ï¼èº«ä»½è¯ï¼ææçä»»å¡ æ¯å® 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()); //æ¯å® æ°å¢å次é访ä¸è½è§¦åæ£è åå ¥é¢ 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("该uuidä¸åå¨"); } 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"); //å°uuidæ´æ°å°æ°æ®åºä¸ 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("å»è°ç¨ttsåæåææ¾æ¥å£: {},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("éé»è¯æ¯ + é®é¢,å»è°ç¨ttsåæåææ¾æ¥å£: {},uuid为ï¼{}", date, phoneCallBackVO.getUuid()); phoneUtils.ttsPlayback(slienceText + nowQuestion.getIvrtext(), phoneCallBackVO.getUuid()); return; } } else { //isppdç¨æ¥è®°å½æ¯å¦å¹é å° Boolean isppd = false; //æåè¯ï¼å¯¹åççé®é¢,è¿è¡æ£åå¹é ï¼è¿éåªé坹鿩é¢ï¼å ¶å®é¢åä¸è¡ï¼ 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()) { //说æå¹é æ£ç¡®äº //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ 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); //å°å¹é å°çæ è¯æ¹ætrue 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 { //没æå¹é ä¸å½åoption //Targetregex2 为falseï¼è¡¨ç¤ºå¨Targetregex2ä¸åå¨ è¯å¥ä¸çå ³é®åï¼è¿ä¸ªoptionå°±ä¸ç¨åç»§ç»å¹é äºï¼ç´æ¥å¹é ä¸ä¸ä¸ªoption 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ãttsåæåææ¾ï¼ 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) { //å æè¯¥subIdä»cache_existä¸åé¤ï¼åªè¦æåè°å°±åé¤ï¼ç®çæ¯ï¼å°½å¿«è®©cache-exist为空ï¼å»ç¼åä¸ä¸æ¹è¦æççµè¯;è¿éåé¤ä¸å½±åçµè¯çæ£å¸¸ä¸å¡ï¼ // 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("çµè¯åéæåï¼æ£è ææï¼"); 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); //å æé»è®¤çrecordAccept-hungupå é¤ï¼åæ´æ° redisCache.deleteObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup"); redisCache.setCacheObject(phoneCallReqYQVO.getTaskid() + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES); //è®°å½çµè¯åéç¶æ setFailPreachForm(serviceSubtask2, "3", "çµè¯åéæåï¼æ£è ææï¼", "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ænull表示å½åçasrtext䏿¯ä¸å¥å®æ´çè¯ 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", "éè¯æ£å¸¸ç»æ", "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; } } //éè¿åä»»å¡IDè·åå°æ¨¡æ¿ä¿¡æ¯ 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); //妿ä¸åå¨ï¼å°±æå½åçUUIDå为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()) { //å°ä¸çè¯,就继ç»é®æ£è phoneCallBackYQVO.setType("text"); phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue()); String scriptContent = ivrTaskTemplateScriptVO.getIvrtext(); log.error("SilentCallbackçé®é¢å 容scriptContentï¼{}", 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()); //å°ç»æåå°detailä¸ 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); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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("å æ´æ°ä¸ä¸åæ°,çµè¯çserviceSubtaskçå¼ä¸ºï¼{}", 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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()); //å°ç»æåè¿detail表 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; } //说æå¹é æ£ç¡®äº if (matchedFlag) { //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ log.info("å¹é æ£ç¡®äºå--------------"); 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); //夿ä¸ä¸å½åçé®é¢æ¯ä¸æ¯æ»¡æåº¦é®é¢ï¼å¹¶ä¸dutyDeptCodeæ¯å¦æå¼ï¼å¹¶ä¸é项æ¯ä¸æ¯å¼å¸¸é项ï¼å¦æå ¨ç¬¦åï¼å徿»¡æåº¦é®é¢å¼å¸¸è¡¨æ°å¢ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).getIsabnormal()) { ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace(); //ç¨taskidãsubidåscriptidå»è·ådetailid 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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()); //å°ç»æåè¿detail表 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)); //å°è¯¥æ£è ç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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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)); //å°è¯¥æ£è ç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çè¯ï¼åéè¦æ ¹æ®é®é¢ä¸çnextScriptnoè¿è¡è·³è½¬ //é®ç颿²¡æè·³è½¬ 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"); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ Long id = serviceSubtask.getId(); Map<String, String> map = delRedisValue(null, id.toString()); redisCache.setCacheObject(map.get("cacheName"), map.get("val")); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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(); //å¿ é¡»çache-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ç¹ä¸ç¹è½æåºå¤å°ä¸ªçµè¯ï¼è·åå°æ»é //妿éè¦ç«å³æ§è¡çæ°æ®é大äºä¸å¤©è¦æ§è¡çä¸éï¼ååªåä¸éçæ°éï¼å ¶å®çåæ¾åredisä¸ 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++) { //ååºä»cache-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ç¨æ¥è®°å½æ¥ä¸æ¥éè¦æ§è¡çåä»»å¡ID // 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("该subIdæé®é¢ï¼å¨è¡¨ä¸æ¥è¯¢ä¸å°ï¼{}", 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 = åä»»å¡ID + é®é¢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("çµè¯æ¨æå·²å®æserviceSubtaskçå¼ä¸º:{}", 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 { //æ£è æç»é访 //å æè¯¥subIdä»cache_existä¸åé¤ï¼åªè¦æåè°å°±åé¤ï¼ç®çæ¯ï¼å°½å¿«è®©cache-exist为空ï¼å»ç¼åä¸ä¸æ¹è¦æççµè¯;è¿éåé¤ä¸å½±åçµè¯çæ£å¸¸ä¸å¡ï¼ // redisCache.removeElementFromList("cache-exist", phoneCallRecordVO.getTaskid()); ServiceSubtask serviceSubtask = new ServiceSubtask(); serviceSubtask.setRemark("çµè¯æ¥éæåï¼æ£è æç»é访"); 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", "çµè¯æ¥éæåï¼æ£è æç»é访", "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) { // 对该æ¡templateScriptVOè¿è¡å¤ç 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); //妿å½åçpreachformå·²ç»æ¯æåä¸ä¸ªäºï¼é£ç´æ¥å°serviceSubtaskçsendstateç¶ææ¹æ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ï¼å 为ryTaskéçè¡¥å¿ç宿¶ä»»å¡è¿è¡æ¶ï¼ä¼æ¾å°è¿æ¡subtaskï¼å¹¶è¿è¡å¤ç serviceSubtask.setCurrentPreachform(preachform); serviceSubtask.setSendstate(3L); //妿çäº9ï¼å说æçµè¯æ£å¸¸ç»æäº 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); //è·åæ£è ä¿¡æ¯ 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 ç¨äºå¼å¯¼æ£è 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); //说æå¹é æ£ç¡®äº if (matched != null && matched >= 0) { IvrTaskTemplateTargetoption chosenOption = options.get(matched); //è¿éåºè¯¥å å¤æç±»åï¼å»åä¿®æ¹ï¼è®¾ç½®IsUserOperationæ¯åéé¢çæ¹æ³ log.info("å¹é æ£ç¡®äºå--------------"); 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); //夿ä¸ä¸å½åçé®é¢æ¯ä¸æ¯æ»¡æåº¦é®é¢ï¼å¹¶ä¸dutyDeptCodeæ¯å¦æå¼ï¼å¹¶ä¸é项æ¯ä¸æ¯å¼å¸¸é项ï¼å¦æå ¨ç¬¦åï¼å徿»¡æåº¦é®é¢å¼å¸¸è¡¨æ°å¢ if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == chosenOption.getIsabnormal()) { ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace(); //ç¨taskidãsubidåscriptidå»è·ådetailid 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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为nullæ¶æåæ¯0å¤çï¼é¿å NPE 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ 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)); //å°è¯¥æ£è ç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("ä¸ä¸é¢èæ¬æªæ¾å°ï¼éé®å½åé¢ï¼nextQuestionï¼{}", 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //ç»æè¯å·²æ¼è¿è¿åå¼ï¼ææºç±å¹³å°æè¿å弿§è¡ back = phoneCallBackYQVO; return back; } } else { //AI没æå¹é ä¸ï¼ç±AI忝èªå·±æ"æ²¡é®æ¸ å°±éé®"çæ¬¡æ°å¤çï¼ä¸åé忣åè¯å« log.info("ai没æå¹é ä¸----------------------------"); //没å¹é ä¸ä¹è¦ææ£è 说çè¯è®°å½ä¸æ¥ï¼matchedtext置空ï¼ä¸æ£åè·¯å¾å£å¾ä¸è´ï¼ 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); //å¦ææ²¡æ å¹é ä¸ï¼è¿ä¸ªå¿ 须为null 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"); //å¨redisä¸ä¿åä¸ä¸ç»æè¯ï¼å¨è°ç¨æçµè¯çæ¹æ³æ¶å é¤ ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "- jsy", serviceTask.getJsy(), 120, TimeUnit.MINUTES); //å»redisä¸ï¼æè¯¥åä»»å¡IDå é¤ 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 { //è¿æä¸ä¸é¢ï¼ænextScriptnoç»§ç»æé® 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)); //å°è¯¥æ£è ç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å¼å¯¼æ£è éç 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 = "æ¨å¥½,è¯·é®æ¨æ¯æ£è æ¬äººè¿æ¯å®¶å±ï¼\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 å·²éåéæ¹ä¸èµ·æ¶å£å° ruoyi-message 模å // ï¼XinHuaMpApiï¼ï¼æ¤å¤å·²å é¤ï¼é¿å ä¸ä»½æ·è´ååä¸å¥ç¾åé»è¾ã // // å¦ï¼æ¬ç±»åæ¬è¿æä¸ä¸ª @Test æ æ³¨ç TestMatch()ï¼å¼åææåç AI é项å¹é è°è¯æ¹æ³ï¼ï¼ // å ¨ä»æ ä»»ä½è°ç¨ç¹ãå®ä¼æ org.junit æè¿ãçäº§ãæºç ä¾èµï¼è ruoyi-task æ¯ // jar 模åãä¸å¸¦ junit ââ æ 鿍¡ååä¸å¹¶å é¤ï¼å±æ»ä»£ç ï¼è¡ä¸ºæ å½±åï¼ã // --------------------------------------------------------------------- } ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskScheduleServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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); } } ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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 @@ //è·åæ£è ä¿¡æ¯ 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); } //éè¿æ£è ä¿¡æ¯åä»»å¡ä¿¡æ¯ä¸çtextParam对é®é¢ä¸çåéè¿è¡å¡«å @@ -523,10 +528,9 @@ } //è·åæ£è ä¿¡æ¯ 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); } ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdeptServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskdiagServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskmedicalServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceTaskoperServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/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ä¸å¡å±å¤ç ruoyi-task/src/main/resources/mapper/task/IvrTaskVisitResultMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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> ruoyi-task/src/main/resources/mapper/task/ServiceOutPathMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 = ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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> ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskDetailTraceMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 = ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 ruoyi-task/src/main/resources/mapper/task/ServiceTaskMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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> ruoyi-task/src/main/resources/mapper/task/ServiceTaskRuleMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 = ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleDetailMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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> ruoyi-task/src/main/resources/mapper/task/ServiceTaskScheduleMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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> ruoyi-task/src/main/resources/mapper/task/ServiceTaskdeptMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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, ruoyi-task/src/main/resources/mapper/task/ServiceTaskdiagMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 = ruoyi-task/src/main/resources/mapper/task/ServiceTaskmedicalMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 ruoyi-task/src/main/resources/mapper/task/ServiceTaskoperMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/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 = 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() { } } 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 éç¨æ¨¡æ¿è¯æ¯ 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 éç¨æ¨¡æ¿è¯æ¯ smartor/pom.xml
@@ -223,6 +223,17 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-template</artifactId> </dependency> <!-- 任塿¨¡åï¼service_task / service_subtask çå¯ä¸å®ç°å¤ã smartor åªéè¿å®ç对å¤é¨é¢ / 䏿²å° ruoyi-common çå¥çº¦åç¨ä»»å¡æ°æ®ï¼ ä¸ç´æ¥ä¾èµå ¶å é¨ Service/Mapperã æ³¨æï¼ruoyi-task åªä¾èµ ruoyi-commonï¼å æ¤ä¸ä¼ä¸æ¬æ¨¡åå½¢æå¾ªç¯ä¾èµã --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-task</artifactId> </dependency> </dependencies> 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; /** * åå·²æä»»å¡è¿½å æ£è ç请æ±ä½ï¼ç¨äºæå è§£å³413é®é¢ï¼ 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ä»»å¡ 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; /** * 宣æåä¸ä»»å¡å¯¹è±¡ he_task_single 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; /** * 宣æä»»å¡å¯¹è±¡ he_task * smartor/src/main/java/com/smartor/domain/PatArchive.java
ÎļþÒÑɾ³ý 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; /** * æ£è ãé¨è¯ä¿¡æ¯ PatArchiveOthreInfo 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; /** * æ£è æ¡£æ¡å¯¹è±¡ pat_archive smartor/src/main/java/com/smartor/domain/PatArchivecontact.java
ÎļþÒÑɾ³ý smartor/src/main/java/com/smartor/domain/PatArchivetag.java
ÎļþÒÑɾ³ý 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; /** * æ£è æ¡£æ¡æ ç¾å¯¹è±¡ pat_archivetag 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; /** * æ£è é误信æ¯è¿å 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; /** * çµè¯é®é¢åçæç» 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 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 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; /** * æ²³åé鿣è ä¿¡æ¯Mapperæ¥å£ 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; /** * æ£è æ¡£æ¡Mapperæ¥å£ 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; /** * æ£è èç³»æ¹å¼Mapperæ¥å£ 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; /** * æ£è æ¡£æ¡æ ç¾Mapperæ¥å£ 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; /** * æ£è ä¸å®£æä»»å¡å ³èMapperæ¥å£ 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>ã 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; /** * ã请填ååè½åç§°ãMapperæ¥å£ 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; 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; /** * æ²³åé鿣è ä¿¡æ¯æ¥å£ 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æ¥å£ 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; /** * æ£è æ¡£æ¡Serviceæ¥å£ 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; /** * æ£è èç³»æ¹å¼Serviceæ¥å£ 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; /** * æ£è æ¡£æ¡æ ç¾Serviceæ¥å£ 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; /** * æ£è ä½é¢è®°å½Serviceæ¥å£ * 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; /** * æ£è ä¸å®£æä»»å¡å ³èServiceæ¥å£ 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; 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; 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; /** * ã请填ååè½åç§°ãServiceæ¥å£ 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; /** * ã请填ååè½åç§°ãServiceæ¥å£ 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æ¥å£ 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æ¥å£ 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æ¥å£ 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; /** 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; /** * æ£è æ¡£æ¡Serviceä¸å¡å±å¤ç 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ä¸å¡å±å¤ç 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; /** * æ£è æ¡£æ¡Serviceä¸å¡å±å¤ç * 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; /** * æ£è èç³»æ¹å¼Serviceä¸å¡å±å¤ç 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; /** * æ£è æ¡£æ¡æ ç¾Serviceä¸å¡å±å¤ç 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; /** * æ£è è¿æ»¤ååServiceä¸å¡å±å¤ç 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; /** * æ£è ä½é¢è®°å½Serviceä¸å¡å±å¤ç * 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; /** * æ£è ä¸å®£æä»»å¡å ³èServiceä¸å¡å±å¤ç 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; 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ä¸å¡å±å¤ç * 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 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ä¸å¡å±å¤ç * 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; /** * ã请填ååè½åç§°ãServiceä¸å¡å±å¤ç 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; /** * ã请填ååè½åç§°ãServiceä¸å¡å±å¤ç 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ä¸å¡å±å¤ç 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 è°ç¨ï¼ 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ä¸å¡å±å¤ç 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ä¸å¡å±å¤ç * 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ä¸å¡å±å¤ç 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; /** * æ°åæ°æ®ééå¤ç 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; /** * ä½é¢ç¶ææºä½¿ç¨ç¤ºä¾ 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> 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> 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> 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> 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> 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>