liusheng
2024-05-07 29d027349c605bda0b7944301cd82a25ec9c1d7a
代码提交
已添加6个文件
已修改5个文件
724 ■■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrLibIntentController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrLibaTemplateController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedPhysicalController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/config/PhoneUtils.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/IvrTaskVisitResultMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/IvrTaskVisitResultMapper.xml 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrLibIntentController.java
@@ -1,4 +1,4 @@
package com.smartor.controller;
package com.ruoyi.web.controller.smartor;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrLibaTemplateController.java
@@ -178,13 +178,4 @@
        return success();
    }
    /**
     * å¼€å§‹æ‰§è¡Œ(测试用)
     */
    @GetMapping("/addUser2")
    public AjaxResult addUser2() {
        String s = phoneUtils.ob("","","","","","","","3001","",true);
        return AjaxResult.success(s);
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/IvrTaskVisitResultController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
package com.ruoyi.web.controller.smartor;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
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;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * ä»»åŠ¡éšè®¿ç»“æžœController
 *
 * @author ruoyi
 * @date 2024-05-06
 */
@Slf4j
@Api(description = "任务随访结果")
@RestController
@RequestMapping("/smartor/visitResult")
public class IvrTaskVisitResultController extends BaseController {
    @Autowired
    private IIvrTaskVisitResultService ivrTaskVisitResultService;
    /**
     *
     */
    @ApiOperation("查询患者随访信息")
    @PreAuthorize("@ss.hasPermi('system:result:list')")
    @PostMapping("/list")
    public TableDataInfo list(IvrTaskVisitResult ivrTaskVisitResult) {
        startPage();
        List<IvrTaskVisitResult> list = ivrTaskVisitResultService.selectIvrTaskVisitResultList(ivrTaskVisitResult);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºä»»åŠ¡éšè®¿ç»“æžœåˆ—è¡¨
     */
    @ApiOperation("导出任务随访结果列表")
    @PreAuthorize("@ss.hasPermi('system:result:export')")
    @Log(title = "任务随访结果", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, IvrTaskVisitResult ivrTaskVisitResult) {
        List<IvrTaskVisitResult> list = ivrTaskVisitResultService.selectIvrTaskVisitResultList(ivrTaskVisitResult);
        ExcelUtil<IvrTaskVisitResult> util = new ExcelUtil<IvrTaskVisitResult>(IvrTaskVisitResult.class);
        util.exportExcel(response, list, "任务随访结果数据");
    }
    /**
     * èŽ·å–ä»»åŠ¡éšè®¿ç»“æžœè¯¦ç»†ä¿¡æ¯
     */
    @ApiOperation("获取任务随访结果详细信息")
    @PreAuthorize("@ss.hasPermi('system:result:query')")
    @GetMapping(value = "/getInfo/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id) {
        return success(ivrTaskVisitResultService.selectIvrTaskVisitResultById(id));
    }
    /**
     * æ–°å¢žä»»åŠ¡éšè®¿ç»“æžœ
     */
    @ApiOperation("新增任务随访结果")
    @PreAuthorize("@ss.hasPermi('system:result:add')")
    @Log(title = "任务随访结果", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@RequestBody IvrTaskVisitResult ivrTaskVisitResult) {
        return toAjax(ivrTaskVisitResultService.insertIvrTaskVisitResult(ivrTaskVisitResult));
    }
    /**
     * ä¿®æ”¹ä»»åŠ¡éšè®¿ç»“æžœ
     */
    @ApiOperation("修改任务随访结果")
    @PreAuthorize("@ss.hasPermi('system:result:edit')")
    @Log(title = "任务随访结果", businessType = BusinessType.UPDATE)
    @PostMapping("/edit")
    public AjaxResult edit(@RequestBody IvrTaskVisitResult ivrTaskVisitResult) {
        return toAjax(ivrTaskVisitResultService.updateIvrTaskVisitResult(ivrTaskVisitResult));
    }
    /**
     * åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœ
     */
    @ApiOperation("删除任务随访结果")
    @PreAuthorize("@ss.hasPermi('system:result:remove')")
    @Log(title = "任务随访结果", businessType = BusinessType.DELETE)
    @GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(ivrTaskVisitResultService.deleteIvrTaskVisitResultByIds(ids));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedPhysicalController.java
@@ -1,4 +1,4 @@
package com.smartor.controller;
package com.ruoyi.web.controller.smartor;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
smartor/src/main/java/com/smartor/config/PhoneUtils.java
@@ -254,13 +254,33 @@
    public String hangup(String kg_uuid, String dnis, String data, String app_id, String ani, String special_ch, String sign, String call_uuid) {
        Map<String, Object> map = new HashMap<>();
        map.put("kg_uuid", kg_uuid);
        map.put("kg_file", kg_uuid);
        map.put("dnis", dnis);
        map.put("data", data);
        map.put("app_id", app_id);
        map.put("ani", ani);
        map.put("special_ch", special_ch);
        map.put("sign", sign);
        map.put("dnis", dnis);
        map.put("call_uuid", call_uuid);
        map.put("fs_node_id", "");
//        map.put("app_id", app_id);
//        map.put("kg_uuid", kg_uuid);
//        map.put("ani", ani);
//        map.put("dnis", dnis);
//        map.put("call_direction", call_direction_str);
//        map.put("hangup_cause", hangup_cause);
//        map.put("endpoint_disposition", endpoint_disposition);
//        map.put("wait_msec", wait_msec);
//        map.put("duration_msec", duration_msec);
//        map.put("answer_msec", answer_msec);
//        map.put("bill_msec", bill_msec);
//        map.put("start_stamp", start_stamp);
//        map.put("answered_stamp", answered_stamp);
//        map.put("end_stamp", end_stamp);
//        map.put("vad_total_talk_time_msec", vad_total_talk_time_msec);
//        map.put("time_stamp", time_stamp);
        return sendReq(map, "/tel/ai_api/hangup");
    }
smartor/src/main/java/com/smartor/domain/IvrTaskVisitResult.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,140 @@
package com.smartor.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * ä»»åŠ¡éšè®¿ç»“æžœå¯¹è±¡ ivr_task_visit_result
 *
 * @author ruoyi
 * @date 2024-05-06
 */
@Data
public class IvrTaskVisitResult extends BaseEntity {
    /**
     * è®°å½•关键值ID
     */
    @ApiModelProperty(value = "记录关键值ID")
    private Long id;
    /**
     * å‘送人 ï¼ˆæ‚£è€…)
     */
    @Excel(name = " å‘送人 ", readConverterExp = "患=者")
    @ApiModelProperty(value = "发送人 ï¼ˆæ‚£è€…)")
    private String sendname;
    /**
     * æ‰‹æœºå·
     */
    @Excel(name = " æ‰‹æœºå· ")
    @ApiModelProperty(value = "手机号")
    private String phone;
    /**
     * æ€§åˆ«
     */
    @Excel(name = "性别")
    @ApiModelProperty(value = "性别")
    private String sex;
    /**
     * å¹´é¾„
     */
    @Excel(name = "年龄 ")
    @ApiModelProperty(value = "年龄")
    private Long age;
    /**
     * èº«ä»½è¯å·
     */
    @Excel(name = " èº«ä»½è¯å· ")
    @ApiModelProperty(value = "身份证号")
    private String sfzh;
    /**
     * ä»»åŠ¡ç±»åž‹(0通知、1宣教、2门诊、3出院、4复诊、5体检、6问卷、7医技……)
     */
    @Excel(name = "任务类型(0通知、1宣教、2门诊、3出院、4复诊、5体检、6问卷、7医技……)")
    @ApiModelProperty(value = "任务类型(0通知、1宣教、2门诊、3出院、4复诊、5体检、6问卷、7医技……)")
    private String type;
    /**
     * ä»»åŠ¡ID
     */
    @Excel(name = " ä»»åŠ¡ID ")
    @ApiModelProperty(value = "任务ID")
    private Long taskid;
    /**
     * æ¨¡æ¿ID
     */
    @Excel(name = "  æ¨¡æ¿ID")
    @ApiModelProperty(value = "模板ID")
    private String templateid;
    /**
     * æ¨¡æ¿å
     */
    @Excel(name = " æ¨¡æ¿å ")
    @ApiModelProperty(value = "模板名")
    private String templatename;
    /**
     * å‘送日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = " å‘送日期 ", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "发送日期")
    private Date senddate;
    /**
     * ç”¨æˆ·ID
     */
    @Excel(name = " ç”¨æˆ·ID ")
    @ApiModelProperty(value = "用户ID")
    private String userid;
    /**
     * ç”¨æˆ·å
     */
    @Excel(name = " ç”¨æˆ·å ")
    @ApiModelProperty(value = "用户名")
    private String username;
    /**
     * åˆ é™¤æ ‡è®°
     */
    @ApiModelProperty(value = "删除标记")
    private String delFlag;
    /**
     * é—®é¢˜
     */
    @Excel(name = "问题")
    @ApiModelProperty(value = "问题")
    private String question;
    /**
     * æ‚£è€…回答的结果
     */
    @Excel(name = "患者回答的结果")
    @ApiModelProperty(value = "患者回答的结果")
    private String patientAnswer;
    /**
     * é€‰é¡¹åŒ¹é…ç»“æžœ
     */
    @Excel(name = "选项匹配结果")
    @ApiModelProperty(value = "选项匹配结果")
    private String optionResult;
}
smartor/src/main/java/com/smartor/mapper/IvrTaskVisitResultMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.smartor.mapper;
import com.smartor.domain.IvrTaskVisitResult;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * ä»»åŠ¡éšè®¿ç»“æžœMapper接口
 *
 * @author ruoyi
 * @date 2024-05-06
 */
@Mapper
public interface IvrTaskVisitResultMapper {
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ä»»åŠ¡éšè®¿ç»“æžœ
     */
    public IvrTaskVisitResult selectIvrTaskVisitResultById(Long id);
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœåˆ—è¡¨
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ä»»åŠ¡éšè®¿ç»“æžœé›†åˆ
     */
    public List<IvrTaskVisitResult> selectIvrTaskVisitResultList(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * æ–°å¢žä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    public int insertIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * ä¿®æ”¹ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    public int updateIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteIvrTaskVisitResultById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteIvrTaskVisitResultByIds(Long[] ids);
}
smartor/src/main/java/com/smartor/service/IIvrTaskVisitResultService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.smartor.service;
import com.smartor.domain.IvrTaskVisitResult;
import java.util.List;
/**
 * ä»»åŠ¡éšè®¿ç»“æžœService接口
 *
 * @author ruoyi
 * @date 2024-05-06
 */
public interface IIvrTaskVisitResultService
{
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ä»»åŠ¡éšè®¿ç»“æžœ
     */
    public IvrTaskVisitResult selectIvrTaskVisitResultById(Long id);
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœåˆ—è¡¨
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ä»»åŠ¡éšè®¿ç»“æžœé›†åˆ
     */
    public List<IvrTaskVisitResult> selectIvrTaskVisitResultList(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * æ–°å¢žä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    public int insertIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * ä¿®æ”¹ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    public int updateIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult);
    /**
     * æ‰¹é‡åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ids éœ€è¦åˆ é™¤çš„任务随访结果主键集合
     * @return ç»“æžœ
     */
    public int deleteIvrTaskVisitResultByIds(Long[] ids);
    /**
     * åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœä¿¡æ¯
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteIvrTaskVisitResultById(Long id);
}
smartor/src/main/java/com/smartor/service/impl/IvrTaskSingleServiceImpl.java
@@ -49,6 +49,9 @@
    private IvrLibaTemplateTargetoptionMapper ivrLibaScriptTargetoptionMapper;
    @Autowired
    private IvrTaskVisitResultMapper ivrTaskVisitResultMapper;
    @Autowired
    private RedisCache redisCache;
    @Autowired
@@ -326,7 +329,8 @@
    }
    @Override
    public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
    public void phoneCallBack(PhoneCallBackVO phoneCallBackVO) {
        phoneCallBackVO.setTextResult(phoneCallBackVO.getTextResult().substring(0, phoneCallBackVO.getTextResult().length() - 1));
        //获取数据
        Boolean aBoolean = redisCache.hasKey(phoneCallBackVO.getUuid());
@@ -338,8 +342,7 @@
        if (hangupValue != null && hangupValue == 1) {
            log.info("电话要挂断了");
            //hangupValue == 1  éšè®¿ç»“束,直接可以挂电话
            phoneUtils.hangup(null, null, null, null, null, null, null, phoneCallBackVO.getUuid());
            log.info("电话挂断----------------------------");
            phoneUtils.hangup("", "", "", "", "", "", "", phoneCallBackVO.getUuid());
            return;
        }
@@ -388,6 +391,8 @@
            }
        } else {
            //isppd用来记录是否匹配到
            Boolean isppd = false;
            //有回话,对回答的问题,进行正则匹配(这里只针对选择题,其它题型不行)
            for (int j = 0; j < nowQuestion.getIvrLibaScriptTargetoptionList().size(); j++) {
                //包含
@@ -403,7 +408,9 @@
                    matcher2 = pattern2.matcher(phoneCallBackVO.getTextResult());
                }
                log.info("phoneCallBack--Targetregex的值为:{}, phoneCallBack--Targetregex2的值为:{}", nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
                if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
                if (StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()
                        || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches()
                        || StringUtils.isEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
                    //说明匹配正确了
                    //这里应该先判断类型,去再修改,设置IsUserOperation是单选题的改法
                    nowQuestion.getIvrLibaScriptTargetoptionList().get(j).setIsUserOperation(true);
@@ -412,6 +419,19 @@
                    //将静默置为0
                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "noVoice", 0, 120, TimeUnit.MINUTES);
                    redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", 0, 120, TimeUnit.MINUTES);
                    //将患者的回签写进表里
                    IvrTaskVisitResult ivrTaskVisitResult = DtoConversionUtils.sourceToTarget(ivrTaskcall, IvrTaskVisitResult.class);
                    ivrTaskVisitResult.setId(null);
                    ivrTaskVisitResult.setQuestion(nowQuestion.getQuestionText());
                    ivrTaskVisitResult.setPatientAnswer(phoneCallBackVO.getTextResult());
                    ivrTaskVisitResult.setCreateTime(new Date());
                    ivrTaskVisitResult.setOptionResult(nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getTargetvalue());
                    ivrTaskVisitResultMapper.insertIvrTaskVisitResult(ivrTaskVisitResult);
                    //将匹配到的标识改成true
                    isppd = true;
                    //获取下一题
                    Integer nextQuestion = nowQuestion.getIvrLibaScriptTargetoptionList().get(j).getNextQuestion();
                    for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOs) {
@@ -426,17 +446,29 @@
                            //没有下一题了,就结束了
                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                            phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
                            phoneUtils.hangup(null, null, null, null, null, null, null, phoneCallBackVO.getUuid());
                            try {
                                Thread.sleep(3000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            phoneUtils.hangup("", "", ivrLibaTemplateVO.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 == ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
                if (mateNum == ivrLibaTemplateVO.getMateNum().intValue()) {
                        //如果下一题为空.则新的数据返回,并加上感谢语
                        if (nowQuestion.getTargetid() < ivrLibaTemplateScriptVOs.size()) {
                            QuestionMessage questionMessage = new QuestionMessage();
@@ -451,15 +483,18 @@
                            //就可以挂断电话了
                            redisCache.setCacheObject(phoneCallBackVO.getUuid() + "hangup", 1, 120, TimeUnit.MINUTES);
                            phoneUtils.ttsPlayback(ivrLibaTemplateVO.getRevisitAfter(), phoneCallBackVO.getUuid());
                            phoneUtils.hangup(null, null, null, null, null, null, null, phoneCallBackVO.getUuid());
                        try {
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        phoneUtils.hangup("", "", ivrLibaTemplateVO.getRevisitAfter(), "", "", "", "", phoneCallBackVO.getUuid());
                            return;
                        }
                    } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue() && j == nowQuestion.getIvrLibaScriptTargetoptionList().size() - 1) {
                } else if (mateNum < ivrLibaTemplateVO.getMateNum().intValue()) {
                        //没有问到规定次数
                        mateNum = mateNum + 1;
                        redisCache.setCacheObject(phoneCallBackVO.getUuid() + "mateNum", mateNum, 120, TimeUnit.MINUTES);
                    }
                }
            }
            //选项匹配完成后,需要再去通过库再进行匹配一次
smartor/src/main/java/com/smartor/service/impl/IvrTaskVisitResultServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
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;
/**
 * ä»»åŠ¡éšè®¿ç»“æžœService业务层处理
 *
 * @author ruoyi
 * @date 2024-05-06
 */
@Service
public class IvrTaskVisitResultServiceImpl implements IIvrTaskVisitResultService {
    @Autowired
    private IvrTaskVisitResultMapper ivrTaskVisitResultMapper;
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ä»»åŠ¡éšè®¿ç»“æžœ
     */
    @Override
    public IvrTaskVisitResult selectIvrTaskVisitResultById(Long id) {
        return ivrTaskVisitResultMapper.selectIvrTaskVisitResultById(id);
    }
    /**
     * æŸ¥è¯¢ä»»åŠ¡éšè®¿ç»“æžœåˆ—è¡¨
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ä»»åŠ¡éšè®¿ç»“æžœ
     */
    @Override
    public List<IvrTaskVisitResult> selectIvrTaskVisitResultList(IvrTaskVisitResult ivrTaskVisitResult) {
        return ivrTaskVisitResultMapper.selectIvrTaskVisitResultList(ivrTaskVisitResult);
    }
    /**
     * æ–°å¢žä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    @Override
    public int insertIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult) {
        ivrTaskVisitResult.setCreateTime(DateUtils.getNowDate());
        return ivrTaskVisitResultMapper.insertIvrTaskVisitResult(ivrTaskVisitResult);
    }
    /**
     * ä¿®æ”¹ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ivrTaskVisitResult ä»»åŠ¡éšè®¿ç»“æžœ
     * @return ç»“æžœ
     */
    @Override
    public int updateIvrTaskVisitResult(IvrTaskVisitResult ivrTaskVisitResult) {
        ivrTaskVisitResult.setUpdateTime(DateUtils.getNowDate());
        return ivrTaskVisitResultMapper.updateIvrTaskVisitResult(ivrTaskVisitResult);
    }
    /**
     * æ‰¹é‡åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœ
     *
     * @param ids éœ€è¦åˆ é™¤çš„任务随访结果主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteIvrTaskVisitResultByIds(Long[] ids) {
        return ivrTaskVisitResultMapper.deleteIvrTaskVisitResultByIds(ids);
    }
    /**
     * åˆ é™¤ä»»åŠ¡éšè®¿ç»“æžœä¿¡æ¯
     *
     * @param id ä»»åŠ¡éšè®¿ç»“æžœä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteIvrTaskVisitResultById(Long id) {
        return ivrTaskVisitResultMapper.deleteIvrTaskVisitResultById(id);
    }
}
smartor/src/main/resources/mapper/smartor/IvrTaskVisitResultMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.IvrTaskVisitResultMapper">
    <resultMap type="com.smartor.domain.IvrTaskVisitResult" id="IvrTaskVisitResultResult">
        <result property="id" column="id"/>
        <result property="sendname" column="sendname"/>
        <result property="phone" column="phone"/>
        <result property="sex" column="sex"/>
        <result property="age" column="age"/>
        <result property="sfzh" column="sfzh"/>
        <result property="type" column="type"/>
        <result property="taskid" column="taskid"/>
        <result property="templateid" column="templateid"/>
        <result property="templatename" column="templatename"/>
        <result property="senddate" column="senddate"/>
        <result property="userid" column="userid"/>
        <result property="username" column="username"/>
        <result property="delFlag" column="del_flag"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="question" column="question"/>
        <result property="patientAnswer" column="patient_answer"/>
        <result property="optionResult" column="option_result"/>
    </resultMap>
    <sql id="selectIvrTaskVisitResultVo">
        select id,
               sendname,
               phone,
               sex,
               age,
               sfzh,
               type,
               taskid,
               templateid,
               templatename,
               senddate,
               userid,
               username,
               del_flag,
               update_by,
               update_time,
               create_by,
               create_time,
               question,
               patient_answer,
               option_result
        from ivr_task_visit_result
    </sql>
    <select id="selectIvrTaskVisitResultList" parameterType="com.smartor.domain.IvrTaskVisitResult"
            resultMap="IvrTaskVisitResultResult">
        <include refid="selectIvrTaskVisitResultVo"/>
        <where>
            <if test="sendname != null  and sendname != ''">and sendname like concat('%', #{sendname}, '%')</if>
            <if test="phone != null  and phone != ''">and phone = #{phone}</if>
            <if test="sex != null  and sex != ''">and sex = #{sex}</if>
            <if test="age != null ">and age = #{age}</if>
            <if test="sfzh != null  and sfzh != ''">and sfzh = #{sfzh}</if>
            <if test="type != null  and type != ''">and type = #{type}</if>
            <if test="taskid != null ">and taskid = #{taskid}</if>
            <if test="templateid != null  and templateid != ''">and templateid = #{templateid}</if>
            <if test="templatename != null  and templatename != ''">and templatename like concat('%', #{templatename},
                '%')
            </if>
            <if test="senddate != null ">and senddate = #{senddate}</if>
            <if test="userid != null  and userid != ''">and userid = #{userid}</if>
            <if test="username != null  and username != ''">and username like concat('%', #{username}, '%')</if>
            <if test="question != null  and question != ''">and question = #{question}</if>
            <if test="patientAnswer != null  and patientAnswer != ''">and patient_answer = #{patientAnswer}</if>
            <if test="optionResult != null  and optionResult != ''">and option_result = #{optionResult}</if>
        </where>
    </select>
    <select id="selectIvrTaskVisitResultById" parameterType="Long" resultMap="IvrTaskVisitResultResult">
        <include refid="selectIvrTaskVisitResultVo"/>
        where id = #{id}
    </select>
    <insert id="insertIvrTaskVisitResult" parameterType="com.smartor.domain.IvrTaskVisitResult" useGeneratedKeys="true"
            keyProperty="id">
        insert into ivr_task_visit_result
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="sendname != null">sendname,</if>
            <if test="phone != null">phone,</if>
            <if test="sex != null">sex,</if>
            <if test="age != null">age,</if>
            <if test="sfzh != null">sfzh,</if>
            <if test="type != null">type,</if>
            <if test="taskid != null">taskid,</if>
            <if test="templateid != null">templateid,</if>
            <if test="templatename != null">templatename,</if>
            <if test="senddate != null">senddate,</if>
            <if test="userid != null">userid,</if>
            <if test="username != null">username,</if>
            <if test="delFlag != null and delFlag != ''">del_flag,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="question != null">question,</if>
            <if test="patientAnswer != null">patient_answer,</if>
            <if test="optionResult != null">option_result,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="sendname != null">#{sendname},</if>
            <if test="phone != null">#{phone},</if>
            <if test="sex != null">#{sex},</if>
            <if test="age != null">#{age},</if>
            <if test="sfzh != null">#{sfzh},</if>
            <if test="type != null">#{type},</if>
            <if test="taskid != null">#{taskid},</if>
            <if test="templateid != null">#{templateid},</if>
            <if test="templatename != null">#{templatename},</if>
            <if test="senddate != null">#{senddate},</if>
            <if test="userid != null">#{userid},</if>
            <if test="username != null">#{username},</if>
            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="question != null">#{question},</if>
            <if test="patientAnswer != null">#{patientAnswer},</if>
            <if test="optionResult != null">#{optionResult},</if>
        </trim>
    </insert>
    <update id="updateIvrTaskVisitResult" parameterType="com.smartor.domain.IvrTaskVisitResult">
        update ivr_task_visit_result
        <trim prefix="SET" suffixOverrides=",">
            <if test="sendname != null">sendname = #{sendname},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="sex != null">sex = #{sex},</if>
            <if test="age != null">age = #{age},</if>
            <if test="sfzh != null">sfzh = #{sfzh},</if>
            <if test="type != null">type = #{type},</if>
            <if test="taskid != null">taskid = #{taskid},</if>
            <if test="templateid != null">templateid = #{templateid},</if>
            <if test="templatename != null">templatename = #{templatename},</if>
            <if test="senddate != null">senddate = #{senddate},</if>
            <if test="userid != null">userid = #{userid},</if>
            <if test="username != null">username = #{username},</if>
            <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="question != null">question = #{question},</if>
            <if test="patientAnswer != null">patient_answer = #{patientAnswer},</if>
            <if test="optionResult != null">option_result = #{optionResult},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteIvrTaskVisitResultById" parameterType="Long">
        update ivr_task_visit_result
        set del_flag =1
        where id = #{id}
    </delete>
    <update id="deleteIvrTaskVisitResultByIds" parameterType="Long">
        update ivr_task_single
        <trim prefix="SET" suffixOverrides=",">
            del_flag =1
        </trim>
        where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
</mapper>