1.处理药品宣教的问题
2.处理南华满意度的功能
3.处理随访导出的问题
4.处理南华短信的问题
已修改50个文件
已添加2个文件
1974 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/dx/MessageSend.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScript.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScriptVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScript.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyFinish.java 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyFinishoption.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyFinishtopic.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibResult.java 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibScript.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibTemplateScript.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibTemplateScriptVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTaskScriptoption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScript.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTopicoption.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/VO/TransferDeptVO.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/entity/PatSatisfactionDetailEntity.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 571 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/SmsController.java
@@ -127,7 +127,7 @@
            serviceOutPath.setRadix(format);
            serviceOutPath.setCreateTime(new Date());
            serviceOutPath.setOrgid(vo.getOrgid());
            String url = ip + ":" + req_path + "/wt?p=" + format;
            String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
            content = "您好,邀请您填写出院调查表,请点击" + url + "填写。感谢您配合!";
            serviceOutPath.setUrl(url);
            iServiceOutPathService.insertServiceOutPath(serviceOutPath);
@@ -222,7 +222,7 @@
            serviceOutPath.setCreateTime(new Date());
            serviceOutPath.setOrgid(vo.getOrgid());
            iServiceOutPathService.insertServiceOutPath(serviceOutPath);
            String url = ip + ":" + req_path + "/wt?p=" + format;
            String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
            sendMsg = smsUtils.sendChat(url, vo.getPhone(), vo.getIdCard());
        }
        return AjaxResult.success(sendMsg);
@@ -251,7 +251,7 @@
            serviceOutPath.setRadix(format);
            serviceOutPath.setCreateTime(new Date());
            serviceOutPath.setOrgid(vo.getOrgid());
            String url = ip + ":" + req_path + "/wt?p=" + format;
            String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
//            content = "您好,邀请您填写出院调查表,请点击" + url + "填写。感谢您配合!";
            content = url;
            serviceOutPath.setUrl(url);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MedicationItemController.java
@@ -6,6 +6,7 @@
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.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.smartor.domain.MedicationItem;
import com.smartor.service.IMedicationItemService;
@@ -16,6 +17,7 @@
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * è¯å“ä¿¡æ¯Controller
@@ -37,10 +39,13 @@
    //@PreAuthorize("@ss.hasPermi('smartor:item:list')")
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/list")
    public TableDataInfo list(@RequestBody MedicationItem medicationItem) {
        startPage();
    public Map<String, Object> list(@RequestBody MedicationItem medicationItem) {
        medicationItem.setPageNum(PageUtils.getOffset(medicationItem.getPageNum(), medicationItem.getPageSize()));
        List<MedicationItem> list = medicationItemService.selectMedicationItemList(medicationItem);
        return getDataTable(list);
        medicationItem.setPageNum(null);
        medicationItem.setPageSize(null);
        List<MedicationItem> total = medicationItemService.selectMedicationItemList(medicationItem);
        return getDataTable3(total.size(), list);
    }
    /**
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -27,6 +27,7 @@
import com.smartor.domain.VO.HeLibraryCountVO;
import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO;
import com.smartor.domain.VO.ServiceSubtaskVO;
import com.smartor.domain.VO.TransferDeptVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.service.IServiceSubtaskRecordService;
import com.smartor.service.IServiceSubtaskService;
@@ -102,6 +103,18 @@
    @Autowired
    private RedisCache redisCache;
    /**
     * è½¬ç§»ç§‘室病区
     */
    @ApiOperation("转移科室病区")
    @PostMapping("/transferDept")
    public Map<String, Object> transferDept(@RequestBody TransferDeptVO transferDeptVO) {
        Integer i = serviceSubtaskService.transferDept(transferDeptVO);
        return success(i == 1 ? true : false);
    }
    /**
     * æŸ¥è¯¢æ‚£è€…随访信息
     */
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java
@@ -8,6 +8,7 @@
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;
@@ -91,13 +92,24 @@
    }
    /**
     * åˆ é™¤ä»»åŠ¡è¯å“å…³è”
     * åˆ é™¤ä»»åŠ¡è¯å“å…³è”é›†åˆ
     */
    @ApiOperation("删除任务药品关联")
    @ApiOperation("删除任务药品关联集合")
    //@PreAuthorize("@ss.hasPermi('smartor:taskmedical:remove')")
    @Log(title = "任务药品关联", businessType = BusinessType.DELETE)
    @GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
    public AjaxResult removeList(@PathVariable Long[] ids) {
        return toAjax(serviceTaskmedicalService.deleteServiceTaskmedicalByIds(ids));
    }
    /**
     * åˆ é™¤ä»»åŠ¡è¯å“å…³è”
     */
    @ApiOperation("删除模板科室关联")
    //@PreAuthorize("@ss.hasPermi('smartor:taskdiag:remove')")
    @Log(title = "删除模板科室关联", businessType = BusinessType.DELETE)
    @PostMapping("/remove")
    public AjaxResult remove(@RequestBody ServiceTaskmedicalVO serviceTaskmedicalReq) {
        return toAjax(serviceTaskmedicalService.deleteServiceTaskmedical(serviceTaskmedicalReq));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/dx/MessageSend.java
@@ -29,7 +29,7 @@
        try {
            if ("6".equals(sMessageType)) {
                result = soap.i5GSend("202508291634227086", "T202508291635259440", UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime);
                log.info("----短信返回的数据为:{},    ----sMessageContent çš„值为:{}", UUID.randomUUID().toString());
                log.info("----短信返回的数据为:{},    ----sMessageContent çš„值为:{}", result,UUID.randomUUID().toString());
            } else if ("7".equals(sMessageType)) {
                result = soap.i5GSend("202508291634227086", "T202607211306131891", UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime);
                log.info("----钉钉返回的原始数据为:{}", result);
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -287,6 +287,17 @@
    }
    /**
     * æ¯æœˆ15号和月底,查询并处理 HIS æ•°æ®ï¼ˆåŒå¾·ï¼Œå—华)
     */
    public void dealHisDataHalfMonth() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedNow = now.format(formatter);
        dealHisData(formattedNow);
    }
    /**
     * HIS数据采集
     * å®šæ—¶ä»»åŠ¡ï¼šé‡‡é›†æ‚£è€…ä¿¡æ¯ã€å‡ºé™¢ã€é—¨è¯Šæ•°æ®
     * todayZeroStr  å½“前的时间   ä¾‹å¦‚:2026-05-06 00:00:00
@@ -423,7 +434,7 @@
                        list.add("FH0109.23");
                        list.add("FH0109.53");
                        serviceSLTDInhospReqVO.setStatusList(list);
                        log.info("【dealHisData】省立同德“预入院”采集数据入参:{}", serviceSLTDInhospReqVO);
//                        log.info("【dealHisData】省立同德“预入院”采集数据入参:{}", serviceSLTDInhospReqVO);
                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                        log.info("【dealHisData】省立同德“预入院”結束采集数据,院区:{}", cid);
@@ -441,7 +452,7 @@
                        List<String> listStr = new ArrayList<>();
                        listStr.add("FH0109.24");
                        serviceSLTDInhospReqVO.setStatusList(listStr);
                        log.info("【dealHisData】省立同德“入院”采集数据入参:{}", serviceSLTDInhospReqVO);
//                        log.info("【dealHisData】省立同德“入院”采集数据入参:{}", serviceSLTDInhospReqVO);
                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                        log.info("【dealHisData】省立同德“入院”結束采集数据,院区:{}", cid);
@@ -464,7 +475,7 @@
                        //预出院
                        list2.add("FH0109.25");
                        serviceSLTDInhospReqVO.setStatusList(list2);
                        log.info("【dealHisData】省立同德“出院”采集数据入参:{}", serviceSLTDInhospReqVO);
//                        log.info("【dealHisData】省立同德“出院”采集数据入参:{}", serviceSLTDInhospReqVO);
                        serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
                        log.info("【dealHisData】省立同德“出院”束采集数据,院区:{}", cid);
                    }
@@ -485,7 +496,7 @@
     * @param endDateStr   æ—¥æœŸç»“束 yyyy-MM-dd
     */
    private void collectSegmentData(Long cid, String startDateStr, String endDateStr) {
        // é¢„入院
//        // é¢„入院
        log.info("【dealHisData】预入院开始采集数据,院区:{},时间段:{} ~ {}", cid, startDateStr, endDateStr);
        ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO();
        reqVO.setOrgId("20001001");
@@ -1550,7 +1561,7 @@
//        //人工的未发送状态,需要查2
//        if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
//            serviceSubtaskPreachform.setSendstate("2");
        log.error("-----serviceSubtaskPreachform的入参是?{}", serviceSubtaskPreachform);
        List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
        if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
            ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScript.java
@@ -96,7 +96,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * è¯æœ¯ID
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScriptVO.java
@@ -74,7 +74,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private Long score;
    private String score;
    /**
     * è¯æœ¯å†…容
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateTargetoption.java
@@ -153,7 +153,7 @@
     */
    @Excel(name = "选项分数")
    @ApiModelProperty(value = "选项分数")
    private BigDecimal score;
    private String score;
//    /**
//     * é¢„警阀值上限
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScript.java
@@ -53,7 +53,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * æ ‡é¢˜
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateScriptVO.java
@@ -46,7 +46,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * ä»»åŠ¡id
smartor/src/main/java/com/smartor/domain/IvrTaskTemplateTargetoption.java
@@ -51,7 +51,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * æŒ‡æ ‡ID
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -327,10 +327,16 @@
    private String inDeptcheckFlag;
    /**
     * å…¥é™¢ç—…区长期任务,是否处理:0未处理   1处理
     * å…¥é™¢ç—…区长期任务,是否处理:0 æœªå¤„理   1 å¤„理
     */
    @ApiModelProperty(value = "入院病区长期任务,是否处理:0未处理   1处理成功    2处理失败 ")
    @ApiModelProperty(value = "入院病区长期任务,是否处理:0 æœªå¤„理   1 å¤„理成功    2 å¤„理失败 ")
    private String inWardcheckFlag;
    /**
     * è¯å“å®£æ•™é•¿æœŸä»»åŠ¡ï¼Œæ˜¯å¦å¤„ç†ï¼š0 æœªå¤„理   1 å¤„理
     */
    @ApiModelProperty(value = "药品宣教长期任务,是否处理:0 æœªå¤„理   1 å¤„理成功    2 å¤„理失败 ")
    private String medcheckFlag;
    /**
     * å¹´é¾„
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -530,7 +530,7 @@
     */
    @Excel(name = "总分")
    @ApiModelProperty(value = "总分")
    private BigDecimal score;
    private String score;
    /**
     * æ¨¡æ¿åº“模版名称
smartor/src/main/java/com/smartor/domain/ServiceSubtaskExportVO.java
@@ -466,7 +466,7 @@
     */
    @Excel(name = "总分")
    @ApiModelProperty(value = "总分")
    private BigDecimal score;
    private String score;
    /**
     * æ¨¡æ¿åº“模版名称
smartor/src/main/java/com/smartor/domain/ServiceSubtaskRes.java
@@ -536,7 +536,7 @@
     */
    @Excel(name = "总分")
    @ApiModelProperty(value = "总分")
    private BigDecimal score;
    private String score;
    /**
     * æ¨¡æ¿åº“模版名称
smartor/src/main/java/com/smartor/domain/ServiceTaskVO.java
@@ -458,7 +458,7 @@
     * é€‚用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组
     */
    @ApiModelProperty("适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组  6.按药品编码")
    @Excel(name = "适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组")
    @Excel(name = "适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组 6.按药品编码" )
    private String appltype;
    @ApiModelProperty(value = "随访部门编码")
smartor/src/main/java/com/smartor/domain/SvyFinish.java
@@ -1,8 +1,8 @@
package com.smartor.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -10,10 +10,11 @@
/**
 * é—®å·æœ€ç»ˆç»“果对象 svy_finish
 *
 *
 * @author ruoyi
 * @date 2023-03-03
 */
@Data
public class SvyFinish extends BaseEntity
{
    private static final long serialVersionUID = 1L;
@@ -39,7 +40,7 @@
    /**  æ€»å¾—分  */
    @Excel(name = " æ€»å¾—分 ")
    private BigDecimal totalscore;
    private String totalscore;
    /**  åé¦ˆç»“果内容  */
    @Excel(name = " åé¦ˆç»“果内容 ")
@@ -51,7 +52,7 @@
    /**  å±•示得分  */
    @Excel(name = " å±•示得分 ")
    private Long isshowscore;
    private String isshowscore;
    /**  è®¡åˆ’ID  */
    @Excel(name = " è®¡åˆ’ID ")
@@ -74,164 +75,4 @@
    /**  ä¸Šä¼ æ—¶é—´  */
    private Date uploadTime;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setPatid(Long patid)
    {
        this.patid = patid;
    }
    public Long getPatid()
    {
        return patid;
    }
    public void setSchemeid(Long schemeid)
    {
        this.schemeid = schemeid;
    }
    public Long getSchemeid()
    {
        return schemeid;
    }
    public void setSvytitle(String svytitle)
    {
        this.svytitle = svytitle;
    }
    public String getSvytitle()
    {
        return svytitle;
    }
    public void setSvyid(Long svyid)
    {
        this.svyid = svyid;
    }
    public Long getSvyid()
    {
        return svyid;
    }
    public void setTotalscore(BigDecimal totalscore)
    {
        this.totalscore = totalscore;
    }
    public BigDecimal getTotalscore()
    {
        return totalscore;
    }
    public void setResultcontent(String resultcontent)
    {
        this.resultcontent = resultcontent;
    }
    public String getResultcontent()
    {
        return resultcontent;
    }
    public void setOrgid(String orgid)
    {
        this.orgid = orgid;
    }
    public String getOrgid()
    {
        return orgid;
    }
    public void setIsshowscore(Long isshowscore)
    {
        this.isshowscore = isshowscore;
    }
    public Long getIsshowscore()
    {
        return isshowscore;
    }
    public void setSchemeplanid(Long schemeplanid)
    {
        this.schemeplanid = schemeplanid;
    }
    public Long getSchemeplanid()
    {
        return schemeplanid;
    }
    public void setSchemetaskid(Long schemetaskid)
    {
        this.schemetaskid = schemetaskid;
    }
    public Long getSchemetaskid()
    {
        return schemetaskid;
    }
    public void setIsabnormal(Long isabnormal)
    {
        this.isabnormal = isabnormal;
    }
    public Long getIsabnormal()
    {
        return isabnormal;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    {
        return uploadTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("patid", getPatid())
            .append("schemeid", getSchemeid())
            .append("svytitle", getSvytitle())
            .append("svyid", getSvyid())
            .append("totalscore", getTotalscore())
            .append("resultcontent", getResultcontent())
            .append("orgid", getOrgid())
            .append("isshowscore", getIsshowscore())
            .append("schemeplanid", getSchemeplanid())
            .append("schemetaskid", getSchemetaskid())
            .append("isabnormal", getIsabnormal())
            .append("delFlag", getDelFlag())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("isupload", getIsupload())
            .append("uploadTime", getUploadTime())
            .toString();
    }
}
smartor/src/main/java/com/smartor/domain/SvyFinishoption.java
@@ -3,6 +3,7 @@
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -10,10 +11,11 @@
/**
 * é—®å·æœ€ç»ˆç»“果选项详情对象 svy_finishoption
 *
 *
 * @author ruoyi
 * @date 2023-03-03
 */
@Data
public class SvyFinishoption extends BaseEntity
{
    private static final long serialVersionUID = 1L;
@@ -35,7 +37,7 @@
    /**  å½“前选项得分  */
    @Excel(name = " å½“前选项得分 ")
    private BigDecimal score;
    private String score;
    /**  æœºæž„ID  */
    @Excel(name = " æœºæž„ID ")
@@ -57,124 +59,4 @@
    @Excel(name = " æœºå™¨äººé€‰æ‹©æ ‡è®° ")
    private Long isrobot;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setFinshresultdetailid(Long finshresultdetailid)
    {
        this.finshresultdetailid = finshresultdetailid;
    }
    public Long getFinshresultdetailid()
    {
        return finshresultdetailid;
    }
    public void setPsqoptionid(Long psqoptionid)
    {
        this.psqoptionid = psqoptionid;
    }
    public Long getPsqoptionid()
    {
        return psqoptionid;
    }
    public void setContent(String content)
    {
        this.content = content;
    }
    public String getContent()
    {
        return content;
    }
    public void setScore(BigDecimal score)
    {
        this.score = score;
    }
    public BigDecimal getScore()
    {
        return score;
    }
    public void setOrgid(String orgid)
    {
        this.orgid = orgid;
    }
    public String getOrgid()
    {
        return orgid;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    {
        return uploadTime;
    }
    public void setIsabnormal(Long isabnormal)
    {
        this.isabnormal = isabnormal;
    }
    public Long getIsabnormal()
    {
        return isabnormal;
    }
    public void setIsrobot(Long isrobot)
    {
        this.isrobot = isrobot;
    }
    public Long getIsrobot()
    {
        return isrobot;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("finshresultdetailid", getFinshresultdetailid())
            .append("psqoptionid", getPsqoptionid())
            .append("content", getContent())
            .append("score", getScore())
            .append("orgid", getOrgid())
            .append("delFlag", getDelFlag())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("isupload", getIsupload())
            .append("uploadTime", getUploadTime())
            .append("isabnormal", getIsabnormal())
            .append("isrobot", getIsrobot())
            .toString();
    }
}
smartor/src/main/java/com/smartor/domain/SvyFinishtopic.java
@@ -3,6 +3,7 @@
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -10,10 +11,11 @@
/**
 * é—®å·è°ƒæŸ¥ç»“果详情对象 svy_finishtopic
 *
 *
 * @author ruoyi
 * @date 2023-03-03
 */
@Data
public class SvyFinishtopic extends BaseEntity
{
    private static final long serialVersionUID = 1L;
@@ -35,7 +37,7 @@
    /**  å½“前选项得分  */
    @Excel(name = " å½“前选项得分 ")
    private BigDecimal score;
    private String score;
    /**  æœºæž„ID  */
    @Excel(name = " æœºæž„ID ")
@@ -53,104 +55,4 @@
    @Excel(name = " ä¸Šä¼ æ—¶é—´ ", width = 30, dateFormat = "yyyy-MM-dd")
    private Date uploadTime;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setPsqid(Long psqid)
    {
        this.psqid = psqid;
    }
    public Long getPsqid()
    {
        return psqid;
    }
    public void setResultid(Long resultid)
    {
        this.resultid = resultid;
    }
    public Long getResultid()
    {
        return resultid;
    }
    public void setTopicid(Long topicid)
    {
        this.topicid = topicid;
    }
    public Long getTopicid()
    {
        return topicid;
    }
    public void setScore(BigDecimal score)
    {
        this.score = score;
    }
    public BigDecimal getScore()
    {
        return score;
    }
    public void setOrgid(String orgid)
    {
        this.orgid = orgid;
    }
    public String getOrgid()
    {
        return orgid;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    {
        return uploadTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("psqid", getPsqid())
            .append("resultid", getResultid())
            .append("topicid", getTopicid())
            .append("score", getScore())
            .append("orgid", getOrgid())
            .append("delFlag", getDelFlag())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("isupload", getIsupload())
            .append("uploadTime", getUploadTime())
            .toString();
    }
}
smartor/src/main/java/com/smartor/domain/SvyLibResult.java
@@ -1,7 +1,9 @@
package com.smartor.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@@ -9,161 +11,71 @@
/**
 * é—®å·ç»“果对象 svy_lib_result
 *
 *
 * @author ruoyi
 * @date 2023-03-02
 */
public class SvyLibResult extends BaseEntity
{
@Data
public class SvyLibResult extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**  è‡ªå¢žID  */
    /**
     * è‡ªå¢žID
     */
    private Long resultid;
    /**  é—®å·ID  */
    /**
     * é—®å·ID
     */
    @Excel(name = " é—®å·ID ")
    private Long svyid;
    /**  ç»“果内容  */
    /**
     * ç»“果内容
     */
    @Excel(name = " ç»“果内容 ")
    private String resultcontent;
    /**  æˆ–且  */
    /**
     * æˆ–且
     */
    @Excel(name = " æˆ–且 ")
    private Long orand;
    /**  æ˜¯å¦æ˜¾ç¤ºå¾—分  */
    /**
     * æ˜¯å¦æ˜¾ç¤ºå¾—分
     */
    @Excel(name = " æ˜¯å¦æ˜¾ç¤ºå¾—分 ")
    private Long isshowscore;
    private String isshowscore;
    /**  æŽ’序  */
    /**
     * æŽ’序
     */
    @Excel(name = " æŽ’序 ")
    private Long sort;
    /**  æœºæž„ID  */
    /**
     * æœºæž„ID
     */
    @Excel(name = " æœºæž„ID ")
    private String orgid;
    /**  åˆ é™¤æ ‡è®°  */
    /**
     * åˆ é™¤æ ‡è®°
     */
    private String delFlag;
    /**  ä¸Šä¼ æ ‡è®°  */
    /**
     * ä¸Šä¼ æ ‡è®°
     */
    @Excel(name = " ä¸Šä¼ æ ‡è®° ")
    private Long isupload;
    /**  ä¸Šä¼ æ—¶é—´  */
    /**
     * ä¸Šä¼ æ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = " ä¸Šä¼ æ—¶é—´ ", width = 30, dateFormat = "yyyy-MM-dd")
    private Date uploadTime;
    public void setResultid(Long resultid)
    {
        this.resultid = resultid;
    }
    public Long getResultid()
    {
        return resultid;
    }
    public void setSvyid(Long svyid)
    {
        this.svyid = svyid;
    }
    public Long getSvyid()
    {
        return svyid;
    }
    public void setResultcontent(String resultcontent)
    {
        this.resultcontent = resultcontent;
    }
    public String getResultcontent()
    {
        return resultcontent;
    }
    public void setOrand(Long orand)
    {
        this.orand = orand;
    }
    public Long getOrand()
    {
        return orand;
    }
    public void setIsshowscore(Long isshowscore)
    {
        this.isshowscore = isshowscore;
    }
    public Long getIsshowscore()
    {
        return isshowscore;
    }
    public void setSort(Long sort)
    {
        this.sort = sort;
    }
    public Long getSort()
    {
        return sort;
    }
    public void setOrgid(String orgid)
    {
        this.orgid = orgid;
    }
    public String getOrgid()
    {
        return orgid;
    }
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    {
        return uploadTime;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("resultid", getResultid())
            .append("svyid", getSvyid())
            .append("resultcontent", getResultcontent())
            .append("orand", getOrand())
            .append("isshowscore", getIsshowscore())
            .append("sort", getSort())
            .append("orgid", getOrgid())
            .append("delFlag", getDelFlag())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("isupload", getIsupload())
            .append("uploadTime", getUploadTime())
            .toString();
    }
}
smartor/src/main/java/com/smartor/domain/SvyLibScript.java
@@ -163,7 +163,7 @@
    private String scoretype;
    @ApiModelProperty(value = "题目分值:数字1,2等;字母A、B,C,D等;")
    private BigDecimal score;
    private String score;
    @ApiModelProperty(value = "适用疾病")
    private String icd10Name;
smartor/src/main/java/com/smartor/domain/SvyLibScriptOption.java
@@ -91,7 +91,7 @@
     * åˆ†æ•°
     */
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * æç¤º
smartor/src/main/java/com/smartor/domain/SvyLibTemplateScript.java
@@ -237,7 +237,7 @@
     */
    @Excel(name = "题目分值:数字1,2等;字母A、B,C,D等;")
    @ApiModelProperty("题目分值:数字1,2等;字母A、B,C,D等;")
    private BigDecimal score;
    private String score;
    /**
     * é¢˜ç›®ä¸»é¢˜
smartor/src/main/java/com/smartor/domain/SvyLibTemplateScriptVO.java
@@ -274,7 +274,7 @@
     */
    @Excel(name = "题目分值:数字1,2等;字母A、B,C,D等;")
    @ApiModelProperty("题目分值:数字1,2等;字母A、B,C,D等;")
    private BigDecimal score;
    private String score;
    /**
     * é¢˜ç›®ä¸»é¢˜
smartor/src/main/java/com/smartor/domain/SvyLibTemplateTargetoption.java
@@ -42,7 +42,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * æŒ‡æ ‡åç§°
smartor/src/main/java/com/smartor/domain/SvyTaskScriptoption.java
@@ -108,7 +108,7 @@
     */
    @Excel(name = " åˆ†æ•° ")
    @ApiModelProperty(value = "分数")
    private Long score;
    private String score;
    /**
     * æç¤º
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScript.java
@@ -80,7 +80,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * ç±»åˆ«å
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateScriptVO.java
@@ -5,10 +5,6 @@
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -262,7 +258,7 @@
     */
    @Excel(name = "分数")
    @ApiModelProperty(value = "分数")
    private BigDecimal score = BigDecimal.ZERO;
    private String score = "0";
    /**
     * é€‰ä¸­æç¤º
smartor/src/main/java/com/smartor/domain/SvyTaskTemplateTargetoption.java
@@ -251,14 +251,14 @@
     * åˆ†æ•°
     */
    @ApiModelProperty(value = "分数")
    private BigDecimal score;
    private String score;
    /**
     * æ˜¯å¦æ˜¯ç”¨æˆ·é€‰æ‹©çš„选项
     */
    @ApiModelProperty(value = "是否是用户选择的选项")
    private Boolean isUserOperation = false;
    /**
     * é»˜è®¤é€‰é¡¹ï¼š1 å¦     2 æ˜¯
     */
smartor/src/main/java/com/smartor/domain/SvyTopicoption.java
@@ -85,7 +85,7 @@
     * åˆ†æ•°
     */
    @ApiModelProperty(value = "分数")
    private Long score;
    private String score;
    /**
     * æç¤º
smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
@@ -554,7 +554,7 @@
     */
    @Excel(name = "总分")
    @ApiModelProperty(value = "总分")
    private Long score;
    private String score;
    /**
smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.smartor.domain.VO;
import com.ruoyi.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * ä»»åŠ¡è¯å“å…³è”å¯¹è±¡ service_taskmedical
 *
 * @author lihu
 * @date 2026-07-29
 */
@Data
@ApiModel("任务药品关联")
public class ServiceTaskmedicalVO {
    /**
     * ä»»åŠ¡id
     */
    @ApiModelProperty("任务id")
    @Excel(name = "任务id")
    private Long taskId;
    /**
     * è¯å“ç¼–码
     */
    @ApiModelProperty("药品编码")
    @Excel(name = "药品编码")
    private String medicalCode;
}
smartor/src/main/java/com/smartor/domain/VO/TransferDeptVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.smartor.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;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * è½¬ç§»ç§‘室病区入参
 *
 * @author ruoyi
 * @date 2024-02-02
 */
@ApiModel(value = "TransferDeptVO", description = "转移科室病区入参")
@Data
public class TransferDeptVO extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @ApiModelProperty(value = "主键id")
    private Long subId;
    /**
     * ç¦»é™¢éƒ¨é—¨code
     */
    @Excel(name = "  ç¦»é™¢éƒ¨é—¨code")
    @ApiModelProperty(value = "离院部门code")
    private String leavelDeptCode;
    /**
     * ç¦»é™¢éƒ¨é—¨åç§°
     */
    @Excel(name = "  ç¦»é™¢éƒ¨é—¨åç§°")
    @ApiModelProperty(value = "离院部门名称")
    private String leavelDeptName;
    /**
     * å‡ºé™¢ç—…区编号
     */
    @ApiModelProperty(value = "出院病区编号")
    private String leavehospitaldistrictcode;
    /*
     * å‡ºé™¢ç—…区名称
     */
    @ApiModelProperty(value = "出院病区名称")
    @Excel(name = " å‡ºé™¢ç—…区名称 ")
    private String leavehospitaldistrictname;
}
smartor/src/main/java/com/smartor/domain/entity/PatSatisfactionDetailEntity.java
@@ -46,19 +46,19 @@
     * å¹³å‡åˆ†
     */
    @ApiModelProperty(value = "平均分")
    private Double averageScore;
    private String averageScore;
    /**
     * æœ€é«˜åˆ†
     */
    @ApiModelProperty(value = "最高分")
    private Double maxScore;
    private String maxScore;
    /**
     * æœ€ä½Žåˆ†
     */
    @ApiModelProperty(value = "最低分")
    private Double minScore;
    private String minScore;
    /**
     * ç­”题率
smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
@@ -569,7 +569,7 @@
     */
    @Excel(name = "总分")
    @ApiModelProperty(value = "总分")
    private Long score;
    private String score;
    /**
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskDetailMapper.java
@@ -42,6 +42,7 @@
     * æŸ¥è¯¢éšè®¿è¯¦æƒ…-指标记录
     */
    public List<Map<String, Object>> getServiceSubtaskDetails(ServiceSubtaskDetailVO serviceSubtaskDetailVo);
    /**
     * æ–°å¢žè¯­éŸ³ä»»åŠ¡å‘¼å«æ˜Žç»†
     *
@@ -84,4 +85,19 @@
     * @return æŒ‡æ ‡ç»Ÿè®¡
     */
    public List<ServiceSubtaskDetailTarget> countPatByTarget(Long targetid);
    /**
     * æŸ¥è¯¢åŒä¸ªsubid重复的detail数据ID列表
     *
     * @return é‡å¤è®°å½•ID列表
     */
    public List<Long> selectRepeatDetailIds();
    /**
     * æ ¹æ®ID列表批量标记重复detail数据为删除
     *
     * @param ids é‡å¤è®°å½•ID列表
     * @return æ›´æ–°è¡Œæ•°
     */
    public Integer deleteRepeatDetailByIds(@Param("ids") List<Long> ids);
}
smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java
@@ -1,6 +1,7 @@
package com.smartor.mapper;
import com.smartor.domain.ServiceTaskmedical;
import com.smartor.domain.VO.ServiceTaskmedicalVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@@ -61,4 +62,6 @@
     * @return ç»“æžœ
     */
    public int deleteServiceTaskmedicalByIds(Long[] ids);
    public int deleteServiceTaskmedical(ServiceTaskmedicalVO serviceTaskmedicalVO);
}
smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -5,6 +5,7 @@
import com.smartor.domain.ServiceSubtask;
import com.smartor.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;
@@ -52,6 +53,13 @@
     */
    public List<ServiceSubtaskRes> patItem(ServiceSubtaskEntity serviceSubtaskEntity);
    /**
     * è½¬ç§»ç§‘室病区
     * @param transferDeptVO
     * @return
     */
    public Integer transferDept(TransferDeptVO transferDeptVO);
    public List<ServiceSubtask> patItem2(ServiceSubtaskEntity serviceSubtaskEntity);
    public Map<String, Object> patItemCount(ServiceSubtaskEntity serviceSubtaskEntity);
smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java
@@ -1,6 +1,7 @@
package com.smartor.service;
import com.smartor.domain.ServiceTaskmedical;
import com.smartor.domain.VO.ServiceTaskmedicalVO;
import java.util.List;
@@ -59,4 +60,11 @@
     * @return ç»“æžœ
     */
    public int deleteServiceTaskmedicalById(Long id);
    /**
     * åˆ é™¤ä»»åŠ¡è¯å“å…³è”ä¿¡æ¯
     *
     * @param id ä»»åŠ¡è¯å“å…³è”ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteServiceTaskmedical(ServiceTaskmedicalVO serviceTaskmedicalVO);
}
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -342,38 +342,40 @@
            }
        }
        //2.药品宣教
        for (PatMedInhosp patMedInhosp : patMedInhosps) {
            String medicalCode = patMedInhosp.getMedicalCode();
            if (StringUtils.isNotEmpty(medicalCode)) {
                String[] split = medicalCode.split(",");
                // é˜²å¾¡æ€§ç¼–程:确保 medicalCompany å’Œ medicalName ä¸ä¸º null
                String medicalCompanyStr = patMedInhosp.getMedicalCompany() != null ? patMedInhosp.getMedicalCompany() : "";
                String medicalNameStr = patMedInhosp.getMedicalName() != null ? patMedInhosp.getMedicalName() : "";
                String[] medicalCompanyArray = medicalCompanyStr.split(",");
                String[] medicalNameArray = medicalNameStr.split(",");
        //2.药品宣教(省立同德的需求,其它地方没提)
        if (active.equals("sltd")) {
            for (PatMedInhosp patMedInhosp : patMedInhosps) {
                String medicalCode = patMedInhosp.getMedicalCode();
                if (StringUtils.isNotEmpty(medicalCode)) {
                    String[] split = medicalCode.split(",");
                    // é˜²å¾¡æ€§ç¼–程:确保 medicalCompany å’Œ medicalName ä¸ä¸º null
                    String medicalCompanyStr = patMedInhosp.getMedicalCompany() != null ? patMedInhosp.getMedicalCompany() : "";
                    String medicalNameStr = patMedInhosp.getMedicalName() != null ? patMedInhosp.getMedicalName() : "";
                    String[] medicalCompanyArray = medicalCompanyStr.split(",");
                    String[] medicalNameArray = medicalNameStr.split(",");
                for (int i = 0; i < split.length; i++) {
                    ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical();
                    //拿药品编码和公司去查
                    serviceTaskmedical.setMedicalCode(split[i]);
                    // é˜²æ­¢ä¸‹æ ‡è¶Šç•Œï¼šå¦‚果数组长度不一致,取最小长度
                    if (i < medicalCompanyArray.length) {
                        serviceTaskmedical.setMedicalName(medicalCompanyArray[i]);
                    } else {
                        log.warn("【药品宣教】药品编码{}对应的公司信息下标越界,medicalCompany æ•°ç»„长度={}, å½“前索引={}", split[i], medicalCompanyArray.length, i);
                        serviceTaskmedical.setMedicalName(""); // è¶Šç•Œæ—¶è®¾ç½®ä¸ºç©º
                    for (int i = 0; i < split.length; i++) {
                        ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical();
                        //拿药品编码和公司去查
                        serviceTaskmedical.setMedicalCode(split[i]);
                        // é˜²æ­¢ä¸‹æ ‡è¶Šç•Œï¼šå¦‚果数组长度不一致,取最小长度
                        if (i < medicalCompanyArray.length) {
                            serviceTaskmedical.setMedicalCompany(medicalCompanyArray[i]);
                        } else {
                            log.warn("【药品宣教】药品编码{}对应的公司信息下标越界,medicalCompany æ•°ç»„长度={}, å½“前索引={}", split[i], medicalCompanyArray.length, i);
                            serviceTaskmedical.setMedicalName(""); // è¶Šç•Œæ—¶è®¾ç½®ä¸ºç©º
                        }
                        List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalMapper.selectServiceTaskmedicalList(serviceTaskmedical);
                        if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) {
                            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
                            // check=true,让 writeInSubTask å†…部做去重校验
                            writeInSubTask(serviceTaskmedicals.get(0).getTaskId(), true, patMedInhosp, patArchive, 0, config);
                        }
                        //查不到的药品就是不需要宣教的,就不管了
                    }
                    List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalMapper.selectServiceTaskmedicalList(serviceTaskmedical);
                    if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) {
                        PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedInhosp.getPatid());
                        writeInSubTask(serviceTaskmedicals.get(0).getTaskId(), false, patMedInhosp, patArchive, 0, config);
                    }
                    //查不到的药品就是不需要宣教的,就不管了
                }
            }
        }
        //3.出院随访 - åŸºäºŽè§„则的任务生成
        // èŽ·å–æ‰€æœ‰éœ€è¦å¤„ç†çš„å‡ºé™¢æ‚£è€…ï¼ˆç§‘å®¤ç»´åº¦æœªå¤„ç†ï¼‰
@@ -409,12 +411,12 @@
        if (CollectionUtils.isNotEmpty(serviceTasks)) {
            for (ServiceTask serviceTask : serviceTasks) {
                if(!ObjectUtils.isEmpty(serviceTask.getTaskid())){
                if (!ObjectUtils.isEmpty(serviceTask.getTaskid())) {
                    ServiceTaskSchedule serviceTaskSchedule = new ServiceTaskSchedule();
                    ServiceTaskSchedule taskSchedule = new ServiceTaskSchedule();
                    taskSchedule.setTaskid(serviceTask.getTaskid());
                    List<ServiceTaskSchedule> serviceTaskSchedules = serviceTaskScheduleMapper.selectServiceTaskScheduleList(taskSchedule);
                    if(CollectionUtils.isNotEmpty(serviceTaskSchedules)){
                    if (CollectionUtils.isNotEmpty(serviceTaskSchedules)) {
                        serviceTaskSchedule = serviceTaskSchedules.get(0);
                        String deptCodes = serviceTaskSchedule.getDeptCodes();
                        String wardCodes = serviceTaskSchedule.getWardCodes();
@@ -434,11 +436,11 @@
                            type = 1;
                            deptCodeList = new ArrayList<>(Arrays.asList(deptCodes.split(",")));
                        }
                        if(StringUtils.isNotEmpty(wardCodes)) {
                        if (StringUtils.isNotEmpty(wardCodes)) {
                            type = 2;
                            wardCodeList = new ArrayList<>(Arrays.asList(wardCodes.split(",")));
                        }
                        if(StringUtils.isNotEmpty(icd10Codes)) {
                        if (StringUtils.isNotEmpty(icd10Codes)) {
                            type = 3;
                            icd10CodeList = new ArrayList<>(Arrays.asList(icd10Codes.split(",")));
                        }
@@ -447,7 +449,7 @@
                            opLevelCodeList = new ArrayList<>(Arrays.asList(opLevelCodes.split(",")));
                        }
                        //非手术处理方式
                        if(type != 6){
                        if (type != 6) {
                            PatMedInhosp patMedInhospVo = new PatMedInhosp();
                            patMedInhospVo.setScheduleCheckFlag("0");
                            patMedInhospVo.setInhospstate("1");
@@ -459,7 +461,7 @@
                            List<PatMedInhosp> patList = patMedInhospMapper.selectPatMedInhospList(patMedInhospVo);
                            log.info("dealOutHospInfoBySchedule ä»»åŠ¡ç»„éšè®¿, taskid = {}, æ‰«ææ‚£è€…人数 {}", serviceTask.getTaskid(), patList.size());
                            for(PatMedInhosp patMedInhosp : patList){
                            for (PatMedInhosp patMedInhosp : patList) {
                                ServiceTaskScheduleDetail scheduleDetailVo = new ServiceTaskScheduleDetail();
                                scheduleDetailVo.setTaskid(serviceTask.getTaskid());
                                scheduleDetailVo.setScheduleid(serviceTaskSchedule.getId());
@@ -473,11 +475,11 @@
                                ServiceSubtask serviceSubtask = boxedServiceSubtask(serviceTask, patMedInhosp, patArchive, config, type);
                                List<Map<String, Object>> preachformList = new ArrayList<>();
                                if(StringUtils.isNotEmpty(serviceTask.getPreachformDesc())){
                                if (StringUtils.isNotEmpty(serviceTask.getPreachformDesc())) {
                                    try {
                                        ObjectMapper objectMapper = new ObjectMapper();
                                        preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
                                    }catch (Exception e){
                                    } catch (Exception e) {
                                        log.error("任务组preachformDesc解析失败,taskid={},inhospid={}", serviceTask.getTaskid(), patMedInhosp.getInhospid());
                                    }
                                }
@@ -488,9 +490,9 @@
                                flagUpd.setScheduleCheckFlag("1");
                                patMedInhospMapper.updatePatMedInhosp(flagUpd);
                            }
                        }else {
                        } else {
                            //任务组 - æ‰‹æœ¯éšè®¿
                            if(CollectionUtils.isNotEmpty(opLevelCodeList)){
                            if (CollectionUtils.isNotEmpty(opLevelCodeList)) {
                                PatMedOperationItem pmoi = new PatMedOperationItem();
                                //获取需要出院疾病随访,未处理的数据
                                pmoi.setOpercheckFlag("0");
@@ -499,7 +501,7 @@
                                pmoi.setWardCodes(wardCodeList);
                                pmoi.setOpLevelCodes(opLevelCodeList);
                                List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectOperationItemList(pmoi);
                                for(PatMedOperationItem patMedOperationItem : patMedOperationItems){
                                for (PatMedOperationItem patMedOperationItem : patMedOperationItems) {
                                    PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperationItem.getPatid());
                                    if (Objects.isNull(patArchive)) {
                                        continue;
@@ -510,7 +512,7 @@
                                    patMedInhospVo.setInhospstate("1");
                                    patMedInhospVo.setFuflag("1");
                                    List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhospVo);
                                    if(CollectionUtils.isNotEmpty(patMedInhospList)){
                                    if (CollectionUtils.isNotEmpty(patMedInhospList)) {
                                        ServiceTaskScheduleDetail scheduleDetailVo = new ServiceTaskScheduleDetail();
                                        scheduleDetailVo.setTaskid(serviceTask.getTaskid());
                                        scheduleDetailVo.setScheduleid(serviceTaskSchedule.getId());
@@ -518,11 +520,11 @@
                                        //封装serviceSubtask
                                        ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedInhospList.get(0), patMedOperationItem, patArchive, config);
                                        List<Map<String, Object>> preachformList = new ArrayList<>();
                                        if(StringUtils.isNotEmpty(serviceTask.getPreachformDesc())){
                                        if (StringUtils.isNotEmpty(serviceTask.getPreachformDesc())) {
                                            try {
                                                ObjectMapper objectMapper = new ObjectMapper();
                                                preachformList = objectMapper.readValue(serviceTask.getPreachformDesc(), List.class);
                                            }catch (Exception e){
                                            } catch (Exception e) {
                                                log.error("任务组(手术)preachformDesc解析失败,taskid={}", serviceTask.getTaskid());
                                            }
                                        }
@@ -619,6 +621,13 @@
        List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st);
        ServiceTask serviceTask = null;
        if (CollectionUtils.isEmpty(serviceTasks)) {
            if (type == 0) {
                log.info("该患者药品宣教长期任务不存在,任务ID为:{}", taskid);
                patMedInhosp1.setMedcheckFlag("2");
                patMedInhosp1.setLongTaskReason(longTaskReason + " & è¯¥æ‚£è€…药品宣教长期任务不存在,任务ID为:" + taskid);
                patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
                return;
            }
            if (type == 1) {
                log.info("该患者出院随访长期任务不存在,任务ID为:{}", taskid);
                patMedInhosp1.setDeptcheckFlag("2");
@@ -797,7 +806,7 @@
                addServiceSubtaskPreachform(serviceSubtask, null);
            }
            //将check_flag改成1(已处理)
            //将 check_flag æ”¹æˆ 1(已处理)
            if (i == 1) {
                PatMedInhosp patMedInhosp2 = new PatMedInhosp();
                patMedInhosp2.setInhospid(patMedInhosp1.getInhospid());
@@ -828,6 +837,7 @@
            if (type == 1) patMedInhosp2.setDeptcheckFlag("2");
            if (type == 2) patMedInhosp2.setWardcheckFlag("2");
            if (type == 3) patMedInhosp2.setDiagcheckFlag("2");
            if (type == 0) patMedInhosp2.setMedcheckFlag("2");
            patMedInhosp2.setRemark("生成子任务报错回滚 " + type);
            patMedInhospMapper.updatePatMedInhosp(patMedInhosp2);
            e.printStackTrace();
smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
@@ -220,9 +220,9 @@
                patSatisfactionDetailEntity.setScriptContent(ivrLibaTemplateScript.getScriptContent());
                patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
                patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
                patSatisfactionDetailEntity.setMaxScore(maxScore(ivrLibaTemplateTargetoptions));
                patSatisfactionDetailEntity.setMinScore(minScore(ivrLibaTemplateTargetoptions));
                patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
                patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore(ivrLibaTemplateTargetoptions)));
                patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore(ivrLibaTemplateTargetoptions)));
                patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
                patSatisfactionDetailEntities.add(patSatisfactionDetailEntity);
@@ -292,13 +292,23 @@
                patSatisfactionDetailEntity.setScriptContent(svyLibTemplateScript.getScriptContent());
                patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
                patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
                patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
                OptionalDouble maxOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
                patSatisfactionDetailEntity.setMaxScore(maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
                Double maxScore = svyLibTemplateTargetoptions.stream()
                        .map(dto -> dto.getScore())
                        .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                        .mapToDouble(Double::parseDouble)
                        .max()
                        .orElse(0.0);
                patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore));
                OptionalDouble minOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
                patSatisfactionDetailEntity.setMinScore(minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
                Double minScore = svyLibTemplateTargetoptions.stream()
                        .map(dto -> dto.getScore())
                        .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                        .mapToDouble(Double::parseDouble)
                        .min()
                        .orElse(0.0);
                patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore));
                patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
@@ -397,9 +407,9 @@
                    patSatisfactionDetailEntity.setScriptContent(ivrLibaTemplateScript.getScriptContent());
                    patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                    patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
                    patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
                    patSatisfactionDetailEntity.setMaxScore(maxScore(ivrLibaTemplateTargetoptions));
                    patSatisfactionDetailEntity.setMinScore(minScore(ivrLibaTemplateTargetoptions));
                    patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
                    patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore(ivrLibaTemplateTargetoptions)));
                    patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore(ivrLibaTemplateTargetoptions)));
                    patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                    patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
                    patSatisfactionDetailEntities.add(patSatisfactionDetailEntity);
@@ -467,13 +477,23 @@
                    patSatisfactionDetailEntity.setScriptContent(svyLibTemplateScript.getScriptContent());
                    patSatisfactionDetailEntity.setAnswerPerson(CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size());
                    patSatisfactionDetailEntity.setNoAnswerPerson(CollectionUtils.isNotEmpty(fillCount) && CollectionUtils.isNotEmpty(subids) ? (subids.size() - fillCount.size()) : CollectionUtils.isNotEmpty(subids) ? subids.size() : 0);
                    patSatisfactionDetailEntity.setAverageScore(averageScore(fillCount));
                    OptionalDouble maxOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
                    patSatisfactionDetailEntity.setMaxScore(maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
                    OptionalDouble minOpt = svyLibTemplateTargetoptions.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
                    patSatisfactionDetailEntity.setMinScore(minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0);
                    patSatisfactionDetailEntity.setAverageScore(String.valueOf(averageScore(fillCount)));
                    Double maxScore = svyLibTemplateTargetoptions.stream()
                            .map(dto -> dto.getScore())
                            .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                            .mapToDouble(Double::parseDouble)
                            .max()
                            .orElse(0.0);
                    patSatisfactionDetailEntity.setMaxScore(String.valueOf(maxScore));
                    Double minScore = svyLibTemplateTargetoptions.stream()
                            .map(dto -> dto.getScore())
                            .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                            .mapToDouble(Double::parseDouble)
                            .min()
                            .orElse(0.0);
                    patSatisfactionDetailEntity.setMinScore(String.valueOf(minScore));
                    patSatisfactionDetailEntity.setAnswerRate(CollectionUtils.isEmpty(subids) ? 0 : CollectionUtils.isEmpty(fillCount) ? 0 : fillCount.size() * 1.0 / subids.size());
                    patSatisfactionDetailEntity.setMatchedtextStats(matchedtextStats);
@@ -766,8 +786,13 @@
     */
    private Double maxScore(List<IvrLibaTemplateTargetoption> options) {
        if (CollectionUtils.isEmpty(options)) return 0.0;
        OptionalDouble maxOpt = options.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).max();
        return maxOpt.isPresent() ? new BigDecimal(maxOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0;
        Double maxScore = options.stream()
                .map(IvrLibaTemplateTargetoption::getScore)
                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                .mapToDouble(Double::parseDouble)
                .max()
                .orElse(0.0);
        return maxScore;
    }
    /**
@@ -778,8 +803,13 @@
     */
    private Double minScore(List<IvrLibaTemplateTargetoption> options) {
        if (CollectionUtils.isEmpty(options)) return 0.0;
        OptionalDouble minOpt = options.stream().filter(dto -> dto.getScore() != null).mapToDouble(dto -> dto.getScore().doubleValue()).min();
        return minOpt.isPresent() ? new BigDecimal(minOpt.getAsDouble()).setScale(1, RoundingMode.HALF_UP).doubleValue() : 0.0;
        Double minScore = options.stream()
                .map(IvrLibaTemplateTargetoption::getScore)
                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
                .mapToDouble(Double::parseDouble)
                .min()
                .orElse(0.0);
        return minScore;
    }
    /**
smartor/src/main/java/com/smartor/service/impl/ServiceOutPathServiceImpl.java
@@ -2,6 +2,7 @@
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;
@@ -77,8 +78,8 @@
        ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(Long.valueOf(serviceOutPath.getParam1()));
        RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
        String taskId = rsaPublicKeyExample.encryptedData(serviceOutPath.getParam1().toString(), pub_key);
        String patid= rsaPublicKeyExample.encryptedData(serviceOutPath.getParam2().toString(), pub_key);
        String subid= rsaPublicKeyExample.encryptedData(serviceOutPath.getParam6().toString(), pub_key);
        String patid = rsaPublicKeyExample.encryptedData(serviceOutPath.getParam2().toString(), pub_key);
        String subid = rsaPublicKeyExample.encryptedData(serviceOutPath.getParam6().toString(), pub_key);
        Date now = DateUtils.getNowDate();
        ServiceOutPath sop = new ServiceOutPath();
        sop.setParam1(taskId);
@@ -95,7 +96,7 @@
        serviceOutPathMapper.insertServiceOutPath(sop);
        //转成16进制并回写radix和updateTime
        serviceOutPath.setRadix(String.format("%03X", sop.getId()));
        serviceOutPath.setUrl(localIP + ":" + req_path + "/wt?p=" + sop.getRadix());
        serviceOutPath.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + sop.getRadix() : localIP + "/wt?p=" + sop.getRadix());
        serviceOutPathMapper.updateServiceOutPath(serviceOutPath);
        return serviceOutPath.getUrl();
    }
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -690,7 +690,7 @@
        queryInhosp.setSerialnum(StringUtils.trim(patMedInhosp.getSerialnum()));
        queryInhosp.setOrgid(StringUtils.trim(dto.getOrgId()));
        queryInhosp.setInhospstate(cry);
        log.info("----------------这里的入参为:{},{}", queryInhosp.getPatno(), queryInhosp.getSerialnum());
//        log.info("----------------这里的入参为:{},{}", queryInhosp.getPatno(), queryInhosp.getSerialnum());
        List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp);
        if (cry.equals("0")) {
@@ -733,7 +733,7 @@
            } else {
                // ä¸å­˜åœ¨å‡ºé™¢è®°å½•,先查预入院(state=3),再查入院(state=0)
                queryInhosp.setInhospstate("3");
                log.info("-----查询预入院记录,入参为:{}", queryInhosp);
//                log.info("-----查询预入院记录,入参为:{}", queryInhosp);
                List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp);
                log.info("----预入院查询结果:{}", CollectionUtils.isEmpty(patMedInhospList) ? "空" : patMedInhospList.get(0).getSerialnum());
                if (CollectionUtils.isNotEmpty(patMedInhospList)) {
@@ -786,13 +786,14 @@
                    if (CollectionUtils.isEmpty(patMedInhospList3)) {
                        try {
                            //获取一下入院申请单
                            Map<String, String> headers = buildRequestHeaders();
                            Map<String, Object> requestParams = new HashMap<>();
                            requestParams.put("orgId", "20001001");
                            requestParams.put("20001001", patArchive.getPatidHis());
                            String result = HttpUtils.sendPostByHeader(sltdPubPath + "/hospitalizedApply/query", new Gson().toJson(requestParams), headers);
                            //根据 encounterSourceId èŽ·å– importanceFlagCode   emergencyLevelCode
                            if (active.equals("sltd")) {
                                Map<String, String> applyInfo = hospitalizedApply(dto.getEncounterSourceId(), dto.getOrgId());
                                if (ObjectUtils.isNotEmpty(applyInfo)) {
                                    patMedInhosp.setImportanceFlagCode(applyInfo.get("importanceFlagCode"));
                                    patMedInhosp.setEmergencyLevelCode(applyInfo.get("emergencyLevelCode"));
                                }
                            }
                            patMedInhospService.insertPatMedInhosp(patMedInhosp);
                            log.debug("成功插入预入院记录:serialnum={}", patMedInhosp.getSerialnum());
                        } catch (Exception e) {
@@ -842,7 +843,7 @@
        if ("1".equals(cry)) {
            patMedInhosp.setInhospstate("1");
            ServiceSLTDDiagnosisResDTO mainDischargeDiagnosis = dto.getMainDischargeDiagnosis();
            log.info("-----------mainDischargeDiagnosis的值有了吗?{}", mainDischargeDiagnosis);
//            log.info("-----------mainDischargeDiagnosis的值有了吗?{}", mainDischargeDiagnosis);
            if (!Objects.isNull(mainDischargeDiagnosis)) {
                if (mainDischargeDiagnosis.getIsMainDiagnosis() == 1) {
                    patMedInhosp.setLeavediagname(StringUtils.defaultString(mainDischargeDiagnosis.getDiagnosisDictName(), ""));
@@ -871,11 +872,13 @@
        } else {
            setAdmissionInfo(patMedInhosp, dto);
            patMedInhosp.setEncounterSourceId(dto.getEncounterSourceId() == null ? "" : dto.getEncounterSourceId());
            if (StringUtils.isNotEmpty(dto.getEncounterSourceId())) {
            if (StringUtils.isNotEmpty(dto.getEncounterSourceId()) && active.equals("sltd")) {
                //根据 encounterSourceId èŽ·å– importanceFlagCode   emergencyLevelCode
                Map<String, String> applyInfo = hospitalizedApply(dto.getEncounterSourceId(), dto.getOrgId());
                patMedInhosp.setImportanceFlagCode(applyInfo.get("importanceFlagCode"));
                patMedInhosp.setEmergencyLevelCode(applyInfo.get("emergencyLevelCode"));
                if (!Objects.isNull(applyInfo)) {
                    patMedInhosp.setImportanceFlagCode(applyInfo.get("importanceFlagCode"));
                    patMedInhosp.setEmergencyLevelCode(applyInfo.get("emergencyLevelCode"));
                }
            }
        }
@@ -903,7 +906,6 @@
                patMedInhosp.setMedicalName(drugInfoMap.get("drugItemNames"));
                patMedInhosp.setMedicalCode(drugInfoMap.get("drugItemIds"));
                patMedInhosp.setMedicalCompany(drugInfoMap.get("drugManufacturerNames"));
                log.info("获取药品信息成功:名称={}, ç¼–码={}, åނ家={}", drugInfoMap.get("drugItemNames"), drugInfoMap.get("drugItemIds"), drugInfoMap.get("drugManufacturerNames"));
            }
        }
@@ -958,7 +960,7 @@
                String code = BigDecimal.valueOf(((Number) codeObj).longValue()).toPlainString();
                if (!"200".equals(code)) {
                    log.error("【queryMedicalOrders】接口返回失败,code={}, message={}", code, responseMap.get("message"));
                    return result;
                    return null;
                }
            }
@@ -969,7 +971,7 @@
                // éåŽ†åŒ»å˜±åˆ—è¡¨ï¼Œæå–è¯å“ä¿¡æ¯
                Set<String> processedItemIds = new HashSet<>(); // ç”¨äºŽåŽ»é‡ï¼ˆåªæ ¹æ® itemId åŽ»é‡ï¼‰
                for (Object item : dataList) {
                    if (item instanceof Map) {
                        Map<String, Object> itemMap = (Map<String, Object>) item;
@@ -995,7 +997,7 @@
                        // è‡³å°‘有一个有值,处理每个字段
                        String itemName = (itemNameObj != null && StringUtils.isNotEmpty(itemNameObj.toString())) ? itemNameObj.toString() : "";
                        // itemId ç‰¹æ®Šå¤„理:避免科学计数法(Gson å¯èƒ½å°†æ•°å­—解析为 Double)
                        String itemId = "";
                        if (itemIdObj != null && StringUtils.isNotEmpty(itemIdObj.toString())) {
@@ -1006,7 +1008,7 @@
                                itemId = itemIdObj.toString();
                            }
                        }
                        String manufacturerName = (manufacturerNameObj != null && StringUtils.isNotEmpty(manufacturerNameObj.toString())) ? manufacturerNameObj.toString() : "";
                        // åªæ ¹æ® itemId åŽ»é‡ï¼ˆåŒä¸€ç¼–ç çš„è¯å“åªä¿ç•™ä¸€ä¸ªï¼‰
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -165,14 +165,11 @@
    @Override
    public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq, Long flag) {
        //参数解密
        Long tid = null;
        Long pid = null;
        Long subid = null;
        Double score = null;
        Long isabno = 0L;
        Set<String> allKeys = redisCache.getAllKeys();
        if (ObjectUtils.isNotEmpty(serviceSubTaskAnswerReq)) {
            //需要立即执行
            RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
            if (flag == 0) {
@@ -185,18 +182,53 @@
                pid = Long.valueOf(serviceSubTaskAnswerReq.getParam2());
                subid = Long.valueOf(serviceSubTaskAnswerReq.getParam6());
            }
            if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 2) {
                allKeys = new HashSet<>();
                allKeys.add(pid + "-" + tid + "-" + subid + "-WJscriptCache");
            } else if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 1) {
                allKeys = new HashSet<>();
                allKeys.add(pid + "-" + tid + "-" + subid + "-SFscriptCache");
        }
        //根据 PID、TID、SUBID æž„建需要处理的 cache key
        String scriptCacheKeyPrefix = pid + "-" + tid + "-" + subid;
        Set<String> targetKeys = new HashSet<>();
        if (serviceSubTaskAnswerReq != null && serviceSubTaskAnswerReq.getType() != null) {
            if (serviceSubTaskAnswerReq.getType() == 2) {
                targetKeys.add(scriptCacheKeyPrefix + "-WJscriptCache");
            } else if (serviceSubTaskAnswerReq.getType() == 1) {
                targetKeys.add(scriptCacheKeyPrefix + "-SFscriptCache");
            }
        } else {
            //如果没有 type,则遍历所有 key(保留原有兼容性)
            Set<String> allKeys = redisCache.getAllKeys();
            for (String key : allKeys) {
                try {
                    if (key.contains(scriptCacheKeyPrefix) && (key.endsWith("-WJscriptCache") || key.endsWith("-SFscriptCache"))) {
                        targetKeys.add(key);
                    }
                } catch (Exception e) {
                    continue;
                }
            }
        }
        //用于批量更新的子任务列表(避免在循环中重复查询)
        Map<String, ServiceSubtask> subtaskCache = new HashMap<>();
        String subtaskCacheKey = subid != null ? subid.toString() : pid + "-" + tid;
        //先查询一次子任务信息
        ServiceSubtaskEntity ssVO = new ServiceSubtaskEntity();
        if (subid != null) {
            ssVO.setSubId(subid);
        } else {
            ssVO.setTaskid(tid);
            ssVO.setPatid(pid);
        }
        List<ServiceSubtask> initialSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ssVO);
        if (CollectionUtils.isNotEmpty(initialSubtaskList)) {
            subtaskCache.put(subtaskCacheKey, initialSubtaskList.get(0));
        }
        String score = "0";
        Long nextScriptno = null;
        aa:
        for (String key : allKeys) {
        for (String key : targetKeys) {
            String[] split = key.split("-");
            //先判断,是不是当前提交人的,不是当前提交人的,跳过
            try {
@@ -227,10 +259,10 @@
                                if (map == null) continue aa;
                                if (!Objects.isNull(map.get("nextScriptNo")))
                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                if (score == null) {
                                    score = Double.valueOf(map.get("score"));
                                if (score == null || score.isEmpty()) {
                                    score = map.get("score");
                                } else {
                                    score = score + Double.valueOf(map.get("score"));
                                    score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                                }
                            }
                        }
@@ -247,9 +279,9 @@
                            if (!Objects.isNull(map.get("nextScriptNo")))
                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                            if (score == null) {
                                score = Double.valueOf(map.get("score"));
                                score = map.get("score");
                            } else {
                                score = score + Double.valueOf(map.get("score"));
                                score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                            }
                        }
                    }
@@ -269,10 +301,10 @@
                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                if (!Objects.isNull(map.get("nextScriptNo")))
                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                if (score == null) {
                                    score = Double.valueOf(map.get("score"));
                                if (score == null || score.isEmpty()) {
                                    score = map.get("score");
                                } else {
                                    score = score + Double.valueOf(map.get("score"));
                                    score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                                }
                            }
                        }
@@ -288,9 +320,9 @@
                            if (!Objects.isNull(map.get("nextScriptNo")))
                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                            if (score == null) {
                                score = Double.valueOf(map.get("score"));
                                score = map.get("score");
                            } else {
                                score = score + Double.valueOf(map.get("score"));
                                score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                            }
                        }
                    }
@@ -298,39 +330,74 @@
            } else {
                continue;
            }
            //将该key和value从redis中,删除
            //将该 key å’Œ value ä»Ž redis ä¸­ï¼Œåˆ é™¤
            redisCache.deleteObject(key);
            //查询出该任务中正在执行的患者信息
            ServiceSubtaskEntity ssVO = new ServiceSubtaskEntity();
            ssVO.setTaskid(tid);
            ssVO.setPatid(pid);
//            ssVO.setSendstate(3L);
            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(ssVO);
            //查询出该任务中正在执行的患者信息(使用缓存)
            String currentSubtaskKey = subid != null ? subid.toString() : pid + "-" + tid;
            ServiceSubtask serviceSubtask;
            ServiceSubtask serviceSubtask = new ServiceSubtask();
            serviceSubtask.setTaskid(tid);
            serviceSubtask.setPatid(pid);
            serviceSubtask.setSubmit(1L);
            if (!subtaskCache.containsKey(currentSubtaskKey)) {
                ServiceSubtaskEntity serviceSubtaskEntity = new ServiceSubtaskEntity();
                if (subid != null) {
                    serviceSubtaskEntity.setSubId(subid);
                } else {
                    serviceSubtaskEntity.setTaskid(tid);
                    serviceSubtaskEntity.setPatid(pid);
                }
//            ssVO.setSendstate(3L);
                List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskEntity);
                if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
                    serviceSubtask = serviceSubtaskList.get(0);
                    subtaskCache.put(currentSubtaskKey, serviceSubtask);
                } else {
                    continue;
                }
            } else {
                serviceSubtask = subtaskCache.get(currentSubtaskKey);
            }
            serviceSubtask.setIsabnormal(serviceSubTaskAnswerReq.getIsabnormal());
            serviceSubtask.setSendstate(6L);
            serviceSubtask.setExcep(serviceSubTaskAnswerReq.getExcep());
            serviceSubtask.setFinishtime(new Date());
            serviceSubtask.setUpdateTime(new Date());
            log.error("将该key和value从redis中,serviceSubtask的值为--------:{}", serviceSubtask);
            if (score != null) serviceSubtask.setScore(BigDecimal.valueOf(score));
            if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
            serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
            //修改住院满意度状态(避免重复查询)
            if (serviceSubtask.getServiceType() != null && "6".equals(serviceSubtask.getServiceType())) {
                Long inhospid = serviceSubtask.getInhospid();
                if (inhospid != null) {
                    PatMedInhosp patMedInhosp = new PatMedInhosp();
                    patMedInhosp.setInhospMydFlag("1");
                    patMedInhosp.setInhospid(inhospid);
                    patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
                }
            }
            //将当前发送状态改成9完成
            ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
            serviceSubtaskPreachform.setPreachform(serviceSubtaskList.get(0).getCurrentPreachform());
            serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
            serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
            List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
            if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
                ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
                ssp.setSendstate("9");
                serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
            //将当前发送状态改成 9 å®Œæˆï¼ˆç¼“å­˜ preachform æŸ¥è¯¢ï¼‰
            String currentPreachform = serviceSubtask.getCurrentPreachform();
            if (StringUtils.isNotEmpty(currentPreachform)) {
                ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
                serviceSubtaskPreachform.setPreachform(currentPreachform);
                if (subid != null) {
                    serviceSubtaskPreachform.setSubid(subid);
                } else {
                    Long id = serviceSubtask.getId();
                    Long tid_ = serviceSubtask.getTaskid();
                    if (id != null) {
                        serviceSubtaskPreachform.setSubid(id);
                    } else if (tid_ != null) {
                        serviceSubtaskPreachform.setTaskid(tid_);
                    }
                }
                List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
                if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
                    ServiceSubtaskPreachform ssp = serviceSubtaskPreachforms.get(0);
                    ssp.setSendstate("9");
                    serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(ssp);
                }
            }
        }
@@ -342,7 +409,7 @@
        Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
        Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
        Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
        Double score = null;
        String score = "0";
        if (ObjectUtils.isNotEmpty(serviceSubTaskCacheReq)) {
            Long nextScriptno = null;
            String isabnormalFlag = "0";
@@ -396,9 +463,9 @@
                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                        if (score == null) {
                            score = Double.valueOf(map.get("score"));
                            score = map.get("score");
                        } else {
                            score = score + Double.valueOf(map.get("score"));
                            score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                        }
                        isabnormalFlag = map.get("isabnormal");
                    }
@@ -439,9 +506,9 @@
                        if (!Objects.isNull(map.get("nextScriptNo")))
                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                        if (score == null) {
                            score = Double.valueOf(map.get("score"));
                            score = map.get("score");
                        } else {
                            score = score + Double.valueOf(map.get("score"));
                            score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                        }
                        isabnormalFlag = map.get("isabnormal");
                    }
@@ -464,7 +531,7 @@
            serviceSubtask.setExcep(isabnormalFlag);
            serviceSubtask.setFinishtime(new Date());
            serviceSubtask.setUpdateTime(new Date());
            if (score != null) serviceSubtask.setScore(BigDecimal.valueOf(score));
            if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
            serviceSubtaskMapper.updateServiceSubtaskByCondition(serviceSubtask);
            //将当前发送状态改成9完成
@@ -520,7 +587,7 @@
        }
        if (CollectionUtils.isNotEmpty(serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS())) {
            Double score = null;
            String score = "0";
            List<SvyTaskTemplateScriptVO> svyTaskTemplateScriptVOS = serviceSubTaskMYDAnswerReq.getSvyTaskTemplateScriptVOS();
            Long nextScriptno = null;
@@ -552,13 +619,12 @@
                    if (map == null) continue;
                    log.error("nextScriptNo çš„信息为:{}", map.get("nextScriptNo"));
                    if (!Objects.isNull(map.get("nextScriptNo")))
                        nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                    if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                    if (score == null) {
                        score = Double.valueOf(map.get("score"));
                    if (score == null || score.isEmpty()) {
                        score = map.get("score");
                    } else {
                        score = score + Double.valueOf(map.get("score"));
                        score = String.valueOf(Double.parseDouble(score) + Double.parseDouble(map.get("score")));
                    }
                    if (!Objects.isNull(map.get("id"))) {
@@ -621,7 +687,7 @@
                serviceSubtask.setUpdateTime(new Date());
                serviceSubtask.setCreateTime(new Date());
                serviceSubtask.setVisitTime(new Date());
                if (score != null) serviceSubtask.setScore(BigDecimal.valueOf(score));
                if (score != null && !score.isEmpty()) serviceSubtask.setScore(score);
                serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
                //将当前发送状态改成9完成
                ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
@@ -982,13 +1048,23 @@
        //获取一下问题选项
        SvyTaskTemplateTargetoption stt = null;
        Long isabnormalFlag = 0L;
        String scriptResultRaw = svyTaskTemplateScriptVO.getScriptResult();
        //去除中文双引号和英文双引号以及空白字符
        String scriptResult = scriptResultRaw != null ? scriptResultRaw.replaceAll("^[\"\"]|[\"\"]$", "").trim() : null;
        for (SvyTaskTemplateTargetoption svyTaskTemplateTargetoption : svyTaskTemplateScriptVO.getSvyTaskTemplateTargetoptions()) {
            if (StringUtils.isNotEmpty(svyTaskTemplateTargetoption.getOptioncontent()) && svyTaskTemplateTargetoption.getOptioncontent().trim().equals(svyTaskTemplateScriptVO.getScriptResult()))
                stt = svyTaskTemplateTargetoption;
            String optionContent = svyTaskTemplateTargetoption.getOptioncontent();
            if (StringUtils.isNotEmpty(optionContent) && StringUtils.isNotEmpty(scriptResult)) {
                //去除两端空白并处理特殊字符进行比较
                if (optionContent.trim().replaceAll("\\s+", "").equals(scriptResult.replaceAll("\\s+", ""))) {
                    stt = svyTaskTemplateTargetoption;
                    log.error("找到匹配的选项");
                    break; // æ‰¾åˆ°åŒ¹é…é¡¹åŽè·³å‡ºå¾ªçޝ
                }
            }
        }
        //判断一下当前的问题是不是满意度问题,并且dutyDeptCode是否有值,并且选项是不是异常选项,如果全符合,则往满意度问题异常表新增
        if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getDutyDeptCode()) && stt != null && 1 == stt.getIsabnormal()) {
        //判断一下当前的问题是不是满意度问题,并且 dutyDeptCode æ˜¯å¦æœ‰å€¼ï¼Œå¹¶ä¸”选项是不是异常选项,如果全符合,则往满意度问题异常表新增
        if (StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getDutyDeptCode()) && stt != null && Long.valueOf(1L).equals(stt.getIsabnormal()) || StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getDutyDeptCode()) && StringUtils.isNotEmpty(svyTaskTemplateScriptVO.getIsMydException())) {
            isabnormalFlag = 1L;
            ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
            subtaskDetailTrace.setDetailId(serviceSubtaskDetail.getId());
@@ -996,24 +1072,25 @@
            subtaskDetailTrace.setTaskid(serviceSubtaskDetailVO.getTaskid());
            subtaskDetailTrace.setTemplateid(StringUtils.isNotEmpty(serviceSubtaskDetailVO.getTemplateid()) ? Long.valueOf(serviceSubtaskDetailVO.getTemplateid()) : null);
            subtaskDetailTrace.setTemplatequestionnum(svyTaskTemplateScriptVO.getScriptid());
            subtaskDetailTrace.setSwitchid(stt.getId());
            subtaskDetailTrace.setSwitchid(stt != null ? stt.getId() : null);
            subtaskDetailTrace.setQuestiontext(svyTaskTemplateScriptVO.getScriptContent());
            subtaskDetailTrace.setQuestionvoice(null);
            subtaskDetailTrace.setCategoryname(svyTaskTemplateScriptVO.getCategoryName());
            subtaskDetailTrace.setCategoryid(svyTaskTemplateScriptVO.getCategoryid());
            //获取所有选项
            subtaskDetailTrace.setTargetid(stt.getId());
            subtaskDetailTrace.setTargetid(stt != null ? stt.getId() : null);
            subtaskDetailTrace.setTargetvalue(serviceSubtaskDetailVO.getTargetvalue());
            subtaskDetailTrace.setMatchedtext(stt.getOptioncontent());
            subtaskDetailTrace.setMatchedtext(stt != null ? stt.getOptioncontent() : svyTaskTemplateScriptVO.getIsMydException());
            subtaskDetailTrace.setGuid(svyTaskTemplateScriptVO.getGuid());
            subtaskDetailTrace.setValueType(serviceSubtaskDetail.getValueType());
            subtaskDetailTrace.setIsMydException(svyTaskTemplateScriptVO.getIsMydException());
            subtaskDetailTrace.setTemplateType(2);
            SvyLibScriptCategory svyLibScriptCategory = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryById(svyTaskTemplateScriptVO.getCategoryid());
            subtaskDetailTrace.setType(svyLibScriptCategory != null ? svyLibScriptCategory.getType() : null);
            subtaskDetailTrace.setScriptid(svyTaskTemplateScriptVO.getId());
            subtaskDetailTrace.setAsrtext(stt.getOptioncontent());
            subtaskDetailTrace.setAsrtext(stt != null ? stt.getOptioncontent() : svyTaskTemplateScriptVO.getIsMydException());
            subtaskDetailTrace.setRecordpath(null);
            subtaskDetailTrace.setPatid(selectServiceSubtaskList.get(0).getPatid());
            JSONObject patdescJson1 = new JSONObject();
@@ -1039,7 +1116,7 @@
                subtaskDetailTrace.setId(existTraceId);
                traceService.updateServiceSubtaskDetailTtrace(subtaskDetailTrace);
            } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace);
        } else if (ObjectUtils.isNotEmpty(stt) && stt.getIsabnormal() != 1L) {
        } else if (ObjectUtils.isNotEmpty(stt) && !Long.valueOf(1L).equals(stt.getIsabnormal())) {
            //这里主要是怕医护人员把异常选项改成了非异常的,这里就需要查一下这条数据是不是在满意度异常表,如果在,则要删除
            Long existTraceId = existingTraceIdMap.get(svyTaskTemplateScriptVO.getId());
            if (existTraceId != null) {
@@ -1261,12 +1338,13 @@
        //判断一下当前的问题是不是满意度问题,并且dutyDeptCode是否有值,并且选项是不是异常选项,如果全符合,则往满意度问题异常表新增
        if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == stt.getIsabnormal()) {
        if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && 1 == stt.getIsabnormal() || StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getDutyDeptCode()) && StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIsMydException())) {
            isabnormalFlag = "1";
            ServiceSubtaskDetailTrace subtaskDetailTrace = new ServiceSubtaskDetailTrace();
            subtaskDetailTrace.setDetailId(serviceSubtaskDetail.getId());
            subtaskDetailTrace.setSubId(serviceSubtaskDetailVO.getSubId());
            subtaskDetailTrace.setTaskid(serviceSubtaskDetailVO.getTaskid());
            subtaskDetailTrace.setIsMydException(serviceSubtaskDetailVO.getIsMydException());
            subtaskDetailTrace.setTemplateid(ivrTaskTemplateScriptVO.getTemplateID() != null ? Long.valueOf(ivrTaskTemplateScriptVO.getTemplateID()) : null);
            subtaskDetailTrace.setTemplatequestionnum(ivrTaskTemplateScriptVO.getSort() == null ? null : Long.valueOf(ivrTaskTemplateScriptVO.getSort()));
@@ -1276,7 +1354,7 @@
                ivrLibaScriptAssort = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortById(ivrTaskTemplateScriptVO.getScriptAssortid());
            //获取用户选出的选项的ID
            subtaskDetailTrace.setSwitchid(stt.getId());
            subtaskDetailTrace.setSwitchid(stt != null ? stt.getId() : null);
            subtaskDetailTrace.setQuestiontext(ivrTaskTemplateScriptVO.getScriptContent());
            subtaskDetailTrace.setQuestionvoice(null);
            subtaskDetailTrace.setCategoryname(StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getScriptAssortname()) ? ivrTaskTemplateScriptVO.getScriptAssortname() : (ivrLibaScriptAssort != null ? ivrLibaScriptAssort.getIndexAssortName() : ""));
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -25,6 +25,7 @@
import com.smartor.domain.*;
import com.smartor.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.*;
@@ -416,9 +417,9 @@
        }
        //患者获取随访任务-需要查询同个患者(身份证)所有的任务 æ™¯å®
        if (StringUtils.isNotEmpty(serviceSubtaskEntity.getOrgid()) && serviceSubtaskEntity.getOrgid().equals("47255004333112711A1001")) {
            if(ObjectUtils.isNotEmpty(serviceSubtaskEntity.getPatid())){
            if (ObjectUtils.isNotEmpty(serviceSubtaskEntity.getPatid())) {
                PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtaskEntity.getPatid());
                if(ObjectUtils.isNotEmpty(patArchive) && StringUtils.isNotEmpty(patArchive.getIdcardno())){
                if (ObjectUtils.isNotEmpty(patArchive) && StringUtils.isNotEmpty(patArchive.getIdcardno())) {
                    serviceSubtaskEntity.setPatid(null);
                    serviceSubtaskEntity.setSfzh(patArchive.getIdcardno());
                }
@@ -460,6 +461,28 @@
            serviceSubtaskResList.add(serviceSubtaskRes);
        }
        return serviceSubtaskResList;
    }
    @Override
    public Integer transferDept(TransferDeptVO transferDeptVO) {
        log.info("transferDept的入参为:{}", transferDeptVO);
        //查询该患者的子任务信息
        ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(transferDeptVO.getSubId());
        if (ObjectUtils.isEmpty(serviceSubtask)) throw new BaseException("转患者失败,请联系管理员处理");
        //删除该患者的信息通过subid
        serviceSubtaskMapper.deleteServiceSubtaskById(transferDeptVO.getSubId());
        //修改患者的离院科室病区通过inhospid和患者的任务生成状态
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setInhospid(serviceSubtask.getInhospid());
        patMedInhosp.setLeaveldeptcode(transferDeptVO.getLeavelDeptCode());
        patMedInhosp.setLeaveldeptname(transferDeptVO.getLeavelDeptName());
        patMedInhosp.setLeavehospitaldistrictcode(transferDeptVO.getLeavehospitaldistrictcode());
        patMedInhosp.setLeavehospitaldistrictname(transferDeptVO.getLeavehospitaldistrictname());
        patMedInhosp.setDeptcheckFlag("0");
        patMedInhosp.setWardcheckFlag("0");
        patMedInhosp.setDiagcheckFlag("0");
        return patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
    }
    public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) {
@@ -625,8 +648,8 @@
        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
        Map<String, Object> result = new HashMap<>();
        result.put("url", localIP + ":" + req_path + "/wt?p=" + format);
        result.put("subId",serviceSubtask.getId());
        result.put("url", StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + format : localIP + "/wt?p=" + format);
        result.put("subId", serviceSubtask.getId());
        return result;
    }
@@ -924,7 +947,7 @@
                            serviceTaskmedical.setMedicalCode(medicalNames[i]);
                            serviceTaskmedical.setMedicalName(medicalcodes[i]);
                            if (ObjectUtils.isNotEmpty(medicalCompanys))
                                serviceTaskmedical.setMedicalCompany(medicalcodes[i]);
                                serviceTaskmedical.setMedicalCompany(medicalCompanys[i]);
                            serviceTaskmedicalService.insertServiceTaskmedical(serviceTaskmedical);
                        }
                    }
@@ -1020,10 +1043,8 @@
                        if (schedule == null) {
                            throw new BaseException("appltype=5 ä»»åŠ¡ç»„ï¼šæœªæ‰¾åˆ° taskid=" + serviceTask.getTaskid() + " çš„计划");
                        }
                        List<ServiceTaskScheduleDetail> detailList =
                                serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                        scheduleSubtaskBuilder.buildSubtasksForPatient(
                                serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                        List<ServiceTaskScheduleDetail> detailList = serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                        scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                        continue;
                    }
@@ -1050,7 +1071,8 @@
                }
            }
        } else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
        }
        else if (serviceTaskVO.getIsoperation() != null && serviceTaskVO.getIsoperation() == 2) {
            //任务修改
            if (ObjectUtils.isNotEmpty(serviceTaskVO.getSendTimeslot()))
                serviceTask.setSendTimeSlot(JSON.toJSONString(serviceTaskVO.getSendTimeslot()));
@@ -1205,7 +1227,7 @@
                    ServiceTaskmedical serviceTaskmedical = new ServiceTaskmedical();
                    serviceTaskmedical.setTaskId(serviceTask.getTaskid());
                    serviceTaskmedical.setTaskName(serviceTask.getTaskName());
                    if (StringUtils.isEmpty(serviceTaskVO.getIcd10code())) {
                    if (StringUtils.isEmpty(serviceTaskVO.getMedicalCode())) {
                        throw new BaseException("药品编码为空");
                    }
                    serviceTaskmedical.setLongtask(Long.valueOf(serviceTask.getLongTask()));
@@ -1221,21 +1243,24 @@
                    if (StringUtils.isNotEmpty(serviceTaskVO.getMedicalCode())) {
                        String[] medicalCodes = serviceTaskVO.getMedicalCode().split(",");
                        String[] medicalNames = serviceTaskVO.getMedicalName().split(",");
                        String[] medicalCompany = serviceTaskVO.getMedicalCompany().split(",");
                        String[] medicalCompanys = serviceTaskVO.getMedicalCompany().split(",");
                        if (!active.equals("nhfy") && !active.equals("druid")) {
                            if (medicalCodes.length != medicalNames.length) {
                                throw new BaseException("药品编码和药品名称数量不一致");
                            if (medicalCodes.length != medicalNames.length && medicalNames.length != medicalCompanys.length) {
                                throw new BaseException("药品编码和药品名称数量不一致或者药品名称和药品公司数量不一致");
                            }
                        }
                        for (int i = 0; i < medicalCodes.length; i++) {
                            //先查询一下是否存在
                            ServiceTaskmedical serviceTaskmedical1 = new ServiceTaskmedical();
                            serviceTaskmedical1.setTaskId(serviceTaskVO.getTaskid());
                            serviceTaskmedical1.setMedicalCode(medicalCodes[i]);
                            serviceTaskmedical1.setMedicalName(medicalNames[i]);
                            serviceTaskmedical1.setMedicalCompany(medicalCompanys[i]);
                            List<ServiceTaskmedical> serviceTaskmedicals = serviceTaskmedicalService.selectServiceTaskmedicalList(serviceTaskmedical1);
                            serviceTaskmedical.setMedicalCode(medicalCodes[i]);
                            serviceTaskmedical.setMedicalName(medicalNames[i]);
                            serviceTaskmedical.setMedicalCompany(medicalCompanys[i]);
                            log.info("----serviceTaskmedical更新的值为:{}", serviceTaskmedical);
                            if (CollectionUtils.isNotEmpty(serviceTaskmedicals)) {
                                serviceTaskmedical.setId(serviceTaskmedicals.get(0).getId());
@@ -1363,12 +1388,10 @@
                            if (schedule == null) {
                                throw new BaseException("appltype=5 ä»»åŠ¡ç»„ï¼šæœªæ‰¾åˆ° taskid=" + serviceTask.getTaskid() + " çš„计划");
                            }
                            List<ServiceTaskScheduleDetail> detailList =
                                    serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                            List<ServiceTaskScheduleDetail> detailList = serviceTaskScheduleService.selectDetailByScheduleid(schedule.getId());
                            serviceSubtask.setUpdateBy(serviceTask.getUpdateBy());
                            serviceSubtask.setCreateBy(serviceTask.getUpdateBy());
                            scheduleSubtaskBuilder.buildSubtasksForPatient(
                                    serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                            scheduleSubtaskBuilder.buildSubtasksForPatient(serviceTask, serviceTaskVO.getPreachformList(), schedule, detailList, patTaskRelevance, serviceSubtask);
                            continue;
                        }
                        if (patTaskRelevance.getIsoperation() == 2) {
@@ -1830,7 +1853,7 @@
                Long id = serviceSubtask.getId();
                //先更新一下分数
                double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                serviceSubtask.setScore(BigDecimal.valueOf(score));
                serviceSubtask.setScore(String.valueOf(score));
                serviceSubtask.setFinishtime(new Date());
                serviceSubtask.setUpdateTime(new Date());
                log.error("先更新一下分数,电话的serviceSubtask的值为:{}", serviceSubtask);
@@ -1924,236 +1947,48 @@
                //用来标记,是否有匹配上的
                Integer flag = 0;
                //1-AI识别
                String url = configService.selectConfigByKey("sys.voice.match.ai.url",phoneCallReqYQVO.getOrgid());
                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;
                if (ObjectUtils.isNotEmpty(url)) {
                    PhoneCallBackYQVO aiMatchResult = AiMatch(url, phoneCallReqYQVO, phoneCallBackYQVO, ivrTaskTemplateScriptVO, serviceSubtask, ivrTaskTemplate, ivrTaskTemplateScripts, scriptId, flag, phoneCallReqYQVO.getUuid());
                    if (aiMatchResult != null) {
                        return aiMatchResult;
                    }
                    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);
                            }
                } else {
                    //是选择题
                    for (int j = 0; j < ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size(); j++) {
                        log.error("phoneCallReqYQVO.getAsrtext()的值为:{}", phoneCallReqYQVO.getAsrtext());
                        if (StringUtils.isEmpty(phoneCallReqYQVO.getAsrtext())) {
                            continue;
                        }
                        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);
                        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 (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;
                        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));
                        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(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(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(BigDecimal.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) {
                            //将患者的回签写进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())) {
@@ -2165,17 +2000,203 @@
                                }
                            }
                            serviceSubtaskDetailList.add(serviceSubtaskDetail);
                            //如果没有 åŒ¹é…ä¸Šï¼Œè¿™ä¸ªå¿…须为null
                            serviceSubtaskDetailList.get(0).setMatchedtext("");
                            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;
                        }
                        continue;
                    }
                }
            }
                //都没有匹配到
                if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
                    log.info("都没有匹配到-------------------------");
@@ -2197,7 +2218,7 @@
                            Double score = null;
                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                            serviceSubtask.setScore(BigDecimal.valueOf(score));
                            serviceSubtask.setScore(String.valueOf(score));
                            serviceSubtask.setFinishtime(new Date());
                            serviceSubtask.setSendstate(6L);
                            serviceSubtask.setRemark("电话拨打已完成");
@@ -2231,7 +2252,7 @@
                                    Double score = null;
                                    Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                                    if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                                    score = BigDecimal.valueOf(score).add(script.getScore()).doubleValue();
                                    score = BigDecimal.valueOf(score).add(new BigDecimal(script.getScore())).doubleValue();
                                    redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                                }
@@ -2286,7 +2307,7 @@
                            Double score = null;
                            Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                            score = BigDecimal.valueOf(score).add(ivrTaskTemplateScriptVO.getScore()).doubleValue();
                            score = BigDecimal.valueOf(score).add(new BigDecimal(ivrTaskTemplateScriptVO.getScore())).doubleValue();
                            redisCache.setCacheObject(phoneCallReqYQVO.getUuid() + "SCORE", score, 120, TimeUnit.MINUTES);
                        }
@@ -2302,7 +2323,7 @@
                    Double score = null;
                    Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                    if (ObjectUtils.isNotEmpty(scoreObj)) score = (Double) scoreObj;
                    serviceSubtask.setScore(BigDecimal.valueOf(score));
                    serviceSubtask.setScore(String.valueOf(score));
                    serviceSubtask.setFinishtime(new Date());
                    serviceSubtask.setRemark("电话拨打已完成");
                    serviceSubtask.setSendstate(6L);
@@ -2799,7 +2820,7 @@
        log.info("getSfStatistics的入参为:{}", serviceSubtaskCountReq);
        String drcode = "drcode";
        //缙云人民 æ ¹æ®ç»ç®¡åŒ»ç”Ÿåˆ†ç»„
        if(serviceSubtaskCountReq.getOrgid().equals("47246116333112211A1001")){
        if (serviceSubtaskCountReq.getOrgid().equals("47246116333112211A1001")) {
            drcode = "management_doctor_code";
        }
        String groupKey = drcode;
@@ -4901,9 +4922,10 @@
            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                resultMap.put("code", "200");
                resultMap.put("msg", "发送成功");
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";短信发送成功" : "短信发送成功");
                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";短信发送成功(手动提交)" : "短信发送成功(手动提交)");
                log.info("是否发送成功:{}", serviceSubtask.getRemark());
                updateServiceSubtask(serviceSubtask);
                serviceSubtask.setSendstate(3L);
                serviceSubtask.setCurrentPreachform("4");
            }
        }
        return resultMap;
@@ -4911,6 +4933,11 @@
    @Override
    public List<ServiceSubtaskDetailRatioExport> statQuestionOption(List<Long> taskIds, Date startOutHospTime, Date endOutHospTime) {
        //先清理一下重复数据
        List<Long> repeatIds = serviceSubtaskDetailMapper.selectRepeatDetailIds();
        if (!CollectionUtils.isEmpty(repeatIds)) {
            serviceSubtaskDetailMapper.deleteRepeatDetailByIds(repeatIds);
        }
        return serviceSubtaskMapper.statQuestionOption(taskIds, startOutHospTime, endOutHospTime);
    }
@@ -5102,7 +5129,7 @@
                        String format = String.format("%03X", serviceOutPath.getId());
                        serviceOutPath.setRadix(format);
                        serviceOutPath.setUpdateTime(new Date());
                        String url = ip + ":" + req_path + "/wt?p=" + format;
                        String url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
                        content = url;
                        serviceOutPath.setUrl(url);
                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
@@ -5126,10 +5153,10 @@
//        serviceSubtask.setNurseName(patMedInhosp1.getNurseName());
//        serviceSubtask.setDrcode(patMedInhosp1.getDrcode());
//        serviceSubtask.setDrname(patMedInhosp1.getDrname());
        if(StringUtils.isNotEmpty(serviceTaskdept.getDeptType()) && serviceTaskdept.getDeptType().equals("1")){
        if (StringUtils.isNotEmpty(serviceTaskdept.getDeptType()) && serviceTaskdept.getDeptType().equals("1")) {
            serviceSubtask.setDeptcode(serviceTaskdept.getDeptCode());
            serviceSubtask.setDeptname(serviceTaskdept.getDeptName());
        }else {
        } else {
            serviceSubtask.setLeavehospitaldistrictcode(serviceTaskdept.getDeptCode());
            serviceSubtask.setLeavehospitaldistrictname(serviceTaskdept.getDeptName());
        }
@@ -5164,22 +5191,23 @@
    /**
     * Ai åŒ¹é…é€‰é¡¹
     *
     * @param questionText
     * @param voiceText
     * @param options
     * @return
     */
    public Integer matchOptionIndex(String url, String questionText, String voiceText, List<IvrTaskTemplateTargetoption> options, String uuid){
    public Integer matchOptionIndex(String url, String questionText, String voiceText, List<IvrTaskTemplateTargetoption> options, String uuid) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("userQuestion",questionText);
        jsonObject.put("userAnswer",voiceText);
        jsonObject.put("userQuestion", questionText);
        jsonObject.put("userAnswer", voiceText);
        jsonObject.put("options", options);
        jsonObject.put("uuid", uuid);
        String jsonString = jsonObject.toJSONString();
        String result = null;
//        String url = "http://localhost:8099/matchOptionIndex";
        if(StringUtils.isNotEmpty(url)){
        if (StringUtils.isNotEmpty(url)) {
            try {
                Map<String, String> headers = new HashMap<>();
                headers.put("Content-Type", "application/json");
@@ -5189,16 +5217,14 @@
                log.error("AI识别失败", e);
            }
        }
        if(StringUtils.isNotEmpty(result) && result.matches("^-?\\d+$")){
        if (StringUtils.isNotEmpty(result) && result.matches("^-?\\d+$")) {
            return Integer.parseInt(result);
        }else {
        } else {
            return -1;
        }
    }
    public PhoneCallBackYQVO AiMatch(String url, PhoneCallReqYQVO phoneCallReqYQVO, PhoneCallBackYQVO phoneCallBackYQVO,
                        IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate,
                        List<IvrTaskTemplateScript> ivrTaskTemplateScripts, String scriptId, Integer flag, String uuid){
    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();
@@ -5206,7 +5232,7 @@
        Integer matched = -1;
        matched = matchOptionIndex(url, questionText, voiceText, options, uuid);
        //说明匹配正确了
        if(matched != null && matched >= 0){
        if (matched != null && matched >= 0) {
            IvrTaskTemplateTargetoption chosenOption = options.get(matched);
            //这里应该先判断类型,去再修改,设置IsUserOperation是单选题的改法
            log.info("匹配正确了吗--------------");
@@ -5311,14 +5337,14 @@
                    nextQuestion = chosenOption.getNextQuestion();
                    //更新分数
                    double score = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                    score = BigDecimal.valueOf(score).add(chosenOption.getScore()).doubleValue();
                    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(chosenOption.getScore()).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) {
@@ -5373,7 +5399,7 @@
                double score = 0.0;
                Object scoreObj = redisCache.getCacheObject(phoneCallReqYQVO.getUuid() + "SCORE");
                if (ObjectUtils.isNotEmpty(scoreObj)) score = (double) scoreObj;
                serviceSubtask.setScore(BigDecimal.valueOf(score));
                serviceSubtask.setScore(String.valueOf(score));
                serviceSubtask.setFinishtime(new Date());
                serviceSubtask.setSendstate(6L);
                serviceSubtask.setRemark("电话拨打已完成");
@@ -5385,8 +5411,7 @@
                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"));
                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");
@@ -5441,7 +5466,7 @@
    }
    @Test
    public void TestMatch(){
    public void TestMatch() {
        String questionText = "您好,请问您是患者本人还是家属?\n";
        String voiceText = "我自己";
        String matchedText = "";
@@ -5457,9 +5482,9 @@
        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){
        Integer matched = matchOptionIndex(url, questionText, voiceText, options, "1");
        if (ObjectUtils.isNotEmpty(matched)) {
            if (matched >= 0) {
                matchedText = options.get(matched).getTargetvalue();
            }
        }
smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java
@@ -1,7 +1,9 @@
package com.smartor.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;
@@ -16,8 +18,7 @@
 * @date 2026-07-29
 */
@Service
public class ServiceTaskmedicalServiceImpl implements IServiceTaskmedicalService
{
public class ServiceTaskmedicalServiceImpl implements IServiceTaskmedicalService {
    @Autowired
    private ServiceTaskmedicalMapper serviceTaskmedicalMapper;
@@ -28,8 +29,7 @@
     * @return ä»»åŠ¡è¯å“å…³è”
     */
    @Override
    public ServiceTaskmedical selectServiceTaskmedicalById(Long id)
    {
    public ServiceTaskmedical selectServiceTaskmedicalById(Long id) {
        return serviceTaskmedicalMapper.selectServiceTaskmedicalById(id);
    }
@@ -40,8 +40,7 @@
     * @return ä»»åŠ¡è¯å“å…³è”
     */
    @Override
    public List<ServiceTaskmedical> selectServiceTaskmedicalList(ServiceTaskmedical serviceTaskmedical)
    {
    public List<ServiceTaskmedical> selectServiceTaskmedicalList(ServiceTaskmedical serviceTaskmedical) {
        return serviceTaskmedicalMapper.selectServiceTaskmedicalList(serviceTaskmedical);
    }
@@ -52,8 +51,7 @@
     * @return ç»“æžœ
     */
    @Override
    public int insertServiceTaskmedical(ServiceTaskmedical serviceTaskmedical)
    {
    public int insertServiceTaskmedical(ServiceTaskmedical serviceTaskmedical) {
        serviceTaskmedical.setCreateTime(DateUtils.getNowDate());
        return serviceTaskmedicalMapper.insertServiceTaskmedical(serviceTaskmedical);
    }
@@ -65,8 +63,7 @@
     * @return ç»“æžœ
     */
    @Override
    public int updateServiceTaskmedical(ServiceTaskmedical serviceTaskmedical)
    {
    public int updateServiceTaskmedical(ServiceTaskmedical serviceTaskmedical) {
        serviceTaskmedical.setUpdateTime(DateUtils.getNowDate());
        return serviceTaskmedicalMapper.updateServiceTaskmedical(serviceTaskmedical);
    }
@@ -78,8 +75,7 @@
     * @return ç»“æžœ
     */
    @Override
    public int deleteServiceTaskmedicalByIds(Long[] ids)
    {
    public int deleteServiceTaskmedicalByIds(Long[] ids) {
        return serviceTaskmedicalMapper.deleteServiceTaskmedicalByIds(ids);
    }
@@ -90,8 +86,21 @@
     * @return ç»“æžœ
     */
    @Override
    public int deleteServiceTaskmedicalById(Long id)
    {
    public int deleteServiceTaskmedicalById(Long id) {
        return serviceTaskmedicalMapper.deleteServiceTaskmedicalById(id);
    }
    /**
     * åˆ é™¤ä»»åŠ¡è¯å“å…³è”ä¿¡æ¯
     *
     * @param serviceTaskmedicalVO
     * @return ç»“æžœ
     */
    @Override
    public int deleteServiceTaskmedical(ServiceTaskmedicalVO serviceTaskmedicalVO) {
        if (StringUtils.isNotEmpty(serviceTaskmedicalVO.getMedicalCode()) && serviceTaskmedicalVO.getTaskId() != null) {
            return serviceTaskmedicalMapper.deleteServiceTaskmedical(serviceTaskmedicalVO);
        }
        return 0;
    }
}
smartor/src/main/resources/mapper/smartor/PatArchiveMapper.xml
@@ -1204,11 +1204,6 @@
        WHERE 1=1
            AND d.del_flag != 1
            AND d.orgid = #{orgid}
            <if test="name != null  and name != ''">AND a.name like concat('%', #{name}, '%')</if>
            <if test="idcardno != null  and idcardno != ''">AND a.idcardno = #{idcardno}</if>
            <if test="pid != null  and pid != ''">AND a.id = #{id}</if>
            <if test="telcode != null  and telcode != ''">AND a.telcode = #{telcode}</if>
            <if test="notrequiredFlag != null  and notrequiredFlag != ''">AND a.notrequired_flag = #{notrequiredFlag}</if>
            <if test="hospitalname != null and hospitalname != ''">AND d.hospitalname = #{hospitalname}</if>
            <if test="hospitaldistrictname != null and hospitaldistrictname != ''">AND d.hospitaldistrictname LIKE concat('%',#{hospitaldistrictname}, '%')</if>
            <if test="leaveicd10code != null and leaveicd10code != ''">AND d.leaveicd10code LIKE concat('%',#{leaveicd10code}, '%')</if>
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -80,10 +80,16 @@
        <result property="encounterSourceId" column="encounter_source_id"/>
        <result property="importanceFlagCode" column="importance_flag_code"/>
        <result property="emergencyLevelCode" column="emergency_level_code"/>
        <result property="medicalCode" column="medical_code"/>
        <result property="medicalName" column="medical_name"/>
        <result property="medicalCompany" column="medical_company"/>
    </resultMap>
    <sql id="selectPatMedInhospVo">
        select inhospid,
               medical_code,
               medical_name,
               medical_company,
               encounter_source_id,
               importance_flag_code,
               emergency_level_code,
@@ -158,7 +164,7 @@
    </sql>
    <select id="selectPatMedInhospList" parameterType="com.smartor.domain.PatMedInhosp" resultMap="PatMedInhospResult">
        select CONCAT( a.age, a.age_unit ) AS age,
        select a.age AS age,
        a.telcode as telcode,
        a.sex,
        b.inhospid,
@@ -228,6 +234,9 @@
        b.encounter_source_id,
        b.importance_flag_code,
        b.emergency_level_code,
        b.medical_code,
        b.medical_name,
        b.medical_company,
        a.idcardno
        FROM
        pat_med_inhosp b
@@ -257,6 +266,7 @@
            concat('%', #{hospitaldistrictname}, '%')
        </if>
        <if test="endtime != null ">and b.endtime = #{endtime}</if>
        <if test="bedNo != null ">and b.bed_no = #{bedNo}</if>
        <if test="inhospMydFlag != null ">and b.inhosp_myd_flag = #{inhospMydFlag}</if>
        <if test="managementDoctor != null ">and b.management_doctor = #{managementDoctor}</if>
        <if test="managementDoctorCode != null ">and b.management_doctor_code = #{managementDoctorCode}</if>
@@ -463,6 +473,9 @@
        select CONCAT( a.age, a.age_unit ) AS age,
        a.telcode as telcode,
        b.inhospid,
        b.medical_code,
        b.medical_name,
        b.medical_company,
        b.encounter_source_id,
        b.importance_flag_code,
        b.emergency_level_code,
@@ -593,6 +606,13 @@
                #{leaveldeptcode}
            </foreach>
        </if>
        <if test="medicalCode != null  and medicalCode != ''">and b.medical_code like concat('%'#{medicalCode}, '%')
        </if>
        <if test="medicalName != null  and medicalName != ''">and b.medical_name like concat('%'#{medicalName}, '%')
        </if>
        <if test="medicalCompany != null  and medicalCompany != ''">and b.medical_company like
            concat('%'#{medicalCompany}, '%')
        </if>
        order by b.inhospid desc
    </select>
@@ -684,6 +704,11 @@
        <if test="importanceFlagCode != null ">and importance_flag_code = #{importanceFlagCode}</if>
        <if test="emergencyLevelCode != null ">and emergency_level_code = #{emergencyLevelCode}</if>
        <if test="encounterSourceId != null ">and encounter_source_id = #{encounterSourceId}</if>
        <if test="medicalCode != null  and medicalCode != ''">and medical_code like concat('%'#{medicalCode}, '%')</if>
        <if test="medicalName != null  and medicalName != ''">and medical_name like concat('%'#{medicalName}, '%')</if>
        <if test="medicalCompany != null  and medicalCompany != ''">and medical_company like
            concat('%'#{medicalCompany}, '%')
        </if>
    </select>
@@ -760,6 +785,9 @@
            <if test="importanceFlagCode != null ">importance_flag_code,</if>
            <if test="emergencyLevelCode != null ">emergency_level_code,</if>
            <if test="encounterSourceId != null ">encounter_source_id,</if>
            <if test="medicalCode != null  and medicalCode != ''">medical_code,</if>
            <if test="medicalName != null  and medicalName != ''">medical_name,</if>
            <if test="medicalCompany != null  and medicalCompany != ''">medical_company,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="serialnum != null">#{serialnum},</if>
@@ -830,6 +858,9 @@
            <if test="importanceFlagCode != null ">#{importanceFlagCode},</if>
            <if test="emergencyLevelCode != null ">#{emergencyLevelCode},</if>
            <if test="encounterSourceId != null ">#{encounterSourceId},</if>
            <if test="medicalCode != null  and medicalCode != ''">#{medicalCode},</if>
            <if test="medicalName != null  and medicalName != ''">#{medicalName},</if>
            <if test="medicalCompany != null  and medicalCompany != ''">#{medicalCompany},</if>
        </trim>
    </insert>
@@ -848,7 +879,8 @@
        nurse_id, nurse_name, out_way_id, out_way_name, guid,
        operator, operator_id, inhospno, remark,
        fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice, management_doctor,
        management_doctor_doctor,campusid, inhosp_myd_flag, importance_flag_code, emergency_level_code, encounter_source_id
        management_doctor_doctor,campusid, inhosp_myd_flag, importance_flag_code, emergency_level_code, encounter_source_id,
        medical_code, medical_name, medical_company
        )
        values
        <foreach collection="list" item="item" separator=",">
@@ -871,7 +903,8 @@
            #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark},
            #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice},
            #{item.fuspecialadvice}, #{item.managementDoctor}, #{item.managementDoctorCode}, #{item.campusid}, #{item.inhospMydFlag},
            #{item.importanceFlagCode}, #{item.emergencyLevelCode}, #{item.encounterSourceId}
            #{item.importanceFlagCode}, #{item.emergencyLevelCode}, #{item.encounterSourceId},
            #{item.medicalCode}, #{item.medicalName}, #{item.medicalCompany}
            )
        </foreach>
    </insert>
@@ -949,6 +982,9 @@
            <if test="importanceFlagCode != null ">importance_flag_code = #{importanceFlagCode},</if>
            <if test="emergencyLevelCode != null ">emergency_level_code = #{emergencyLevelCode},</if>
            <if test="encounterSourceId != null ">encounter_source_id = #{encounterSourceId},</if>
            <if test="medicalCode != null  and medicalCode != ''">medical_code = #{medicalCode},</if>
            <if test="medicalName != null  and medicalName != ''">medical_name = #{medicalName},</if>
            <if test="medicalCompany != null  and medicalCompany != ''">medical_company = #{medicalCompany},</if>
        </trim>
        where inhospid = #{inhospid}
    </update>
smartor/src/main/resources/mapper/smartor/ServiceSubtaskDetailMapper.xml
@@ -546,4 +546,34 @@
            ivr_liba_target.targetname,
            service_subtask_detail.matchedtext
    </select>
    <select id="selectRepeatDetailIds" resultType="Long">
        SELECT d1.id
        FROM service_subtask_detail d1
        INNER JOIN (
            SELECT sub_id, questiontext,
                   MAX(create_time) AS max_create_time,
                   MAX(id) AS keep_id
            FROM service_subtask_detail
            WHERE del_flag = 0
            GROUP BY sub_id, questiontext
            HAVING COUNT(*) &gt; 1
        ) d2 ON d1.sub_id = d2.sub_id
            AND d1.questiontext = d2.questiontext
            AND (
                d1.create_time &lt; d2.max_create_time
                OR (d1.create_time = d2.max_create_time AND d1.id &lt; d2.keep_id)
            )
        WHERE d1.del_flag = 0
    </select>
    <update id="deleteRepeatDetailByIds">
        UPDATE service_subtask_detail
        SET del_flag = 1
        WHERE del_flag = 0
        AND id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
</mapper>
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -1367,16 +1367,17 @@
            <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if>
            <if test="continueContent != null ">continue_content = #{continueContent},</if>
        </trim>
        where
        <if test="patid != null ">
            patid = #{patid}
        </if>
        <if test="taskid != null ">
            and taskid = #{taskid}
        </if>
        <if test="id != null ">
            and id = #{id}
        </if>
        <where>
            <if test="patid != null ">
                patid = #{patid}
            </if>
            <if test="taskid != null ">
                and taskid = #{taskid}
            </if>
            <if test="id != null ">
                and id = #{id}
            </if>
        </where>
    </update>
    <update id="updateServiceSubtaskByTaskGuid" parameterType="com.smartor.domain.ServiceSubtask">
@@ -3057,6 +3058,7 @@
            #{taskId}
        </foreach>
        and s.sendstate=6
        and d.del_flag=0
        GROUP BY
        t.taskid,
        d.questiontext
@@ -3066,6 +3068,7 @@
            #{taskId}
        </foreach>
        AND s.sendstate = 6
        and d.del_flag=0
      <if test="startOutHospTime != null">
        AND date_format(s.endtime,'%y%m%d') &gt;= date_format(#{startOutHospTime},'%y%m%d')
    </if>
smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml
@@ -322,5 +322,18 @@
        </foreach>
    </update>
    <update id="deleteServiceTaskmedical" parameterType="com.smartor.domain.VO.ServiceTaskmedicalVO">
        update service_taskmedical
        <trim prefix="SET" suffixOverrides=",">
            del_flag =1
        </trim>
        <where>
            <if test="taskId != null">task_id =
                #{taskId}
            </if>
            <if test="medicalCode != null">and medical_code = #{medicalCode}
            </if>
        </where>
    </update>
</mapper>