liusheng
2 天以前 1e1814178edf84090b28492bbad340ab13e5c169
代码提交
已添加9个文件
已删除3个文件
已修改38个文件
已重命名12个文件
2986 ■■■■■ 文件已修改
.idea/compiler.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServiceTaskHandler.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsParamController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsRecordsController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsTempletController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-hn.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-ls.yml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-xh.yml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsParam.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsRecords.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsTemplet.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsParamMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsRecordsMapper.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsTempletMapper.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsParamService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsRecordsService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsTempletService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsParamServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsTempletServiceImpl.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SmsParamMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SmsRecordsMapper.xml 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SmsTempletMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | 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/PatMedInhosp.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatSatisfaction.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SmsRecords.java 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/PatMedInhospMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/IServiceTaskService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/IvrLibaTemplateServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/IvrTaskTemplateServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SmsRecordsServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml 611 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/Icd10Mapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SmsRecordsMapper.xml 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml
@@ -2,6 +2,7 @@
<project version="4">
  <component name="CompilerConfiguration">
    <annotationProcessing>
      <profile default="true" name="Default" enabled="true" />
      <profile name="Maven default annotation processors profile" enabled="true">
        <sourceOutputDir name="target/generated-sources/annotations" />
        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
@@ -9,21 +10,12 @@
        <module name="ruoyi-framework" />
        <module name="ruoyi-system" />
        <module name="smartor" />
        <module name="smartor-admin" />
        <module name="ruoyi-common" />
        <module name="ruoyi-generator" />
        <module name="smartor-admin" />
        <module name="smartor-suifang" />
        <module name="ruoyi-quartz" />
      </profile>
    </annotationProcessing>
    <bytecodeTargetLevel>
      <module name="ruoyi" target="1.8" />
      <module name="ruoyi-common" target="1.8" />
      <module name="ruoyi-framework" target="1.8" />
      <module name="ruoyi-generator" target="1.8" />
      <module name="ruoyi-quartz" target="1.8" />
      <module name="ruoyi-system" target="1.8" />
      <module name="smartor" target="1.8" />
      <module name="smartor-admin" target="1.8" />
    </bytecodeTargetLevel>
  </component>
</project>
ServiceTaskHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
private boolean sendLishuiSms(ServiceSubtask serviceSubtask, SendMagParam sendMagParam) {
    Map<String, String> map = MsgLSEnum.getAddressByCode(serviceSubtask.getOrgid());
    String token = LSHospTokenUtil.getToken(serviceSubtask.getOrgid());
    if (ObjectUtils.isNotEmpty(map) && StringUtils.isEmpty(map.get("address"))) {
        ServiceSubtask ss = new ServiceSubtask();
        ss.setResult("error");
        ss.setRemark("短信发送失败,该机构没有配置短信地址");
        ss.setSendstate(5L);
        ss.setId(serviceSubtask.getId());
        serviceSubtaskMapper.updateServiceSubtask(ss);
        return false;
    }
    log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", map.get("address"), sendMagParam, serviceSubtask.getOrgid());
    String dxCode = getDXCode(map.get("address"), sendMagParam.getPhone(), sendMagParam.getContent(), map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(serviceSubtask.getOrgid()), token);
    log.info("【sfHandlle】丽水短信发送结果:{}", dxCode);
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, Object> textParam = objectMapper.readValue(dxCode, Map.class);
    String code = textParam.get("Code").toString();
    return code.equals("0");
}
// åœ¨åŽŸæœ‰ä»£ç ä¸­è°ƒç”¨è¿™ä¸ªæ–¹æ³•
boolean isSuccess = sendLishuiSms(serviceSubtask, sendMagParam);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java
@@ -322,11 +322,7 @@
                            }
                            log.info("==============================Targetregex的值为:{},   Targetregex2的值为:{}", ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex(), ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2());
                            if (StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() &&
                                    StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() ||
                                    StringUtils.isEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) &&
                                            StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) &&
                                            matcher.matches()) {
                            if (StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && matcher2.matches() && StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches() || StringUtils.isEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex2()) && StringUtils.isNotEmpty(ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).getTargetregex()) && matcher.matches()) {
                                log.info("匹配正确了");
                                //说明匹配正确了
                                ivrLibaTemplateScriptVO.getIvrLibaScriptTargetoptionList().get(j).setIsUserOperation(1);
@@ -358,7 +354,7 @@
                                        redisCache.setCacheObject(userId + "isOver", 1, 120, TimeUnit.MINUTES);
                                    } else {
                                        for (IvrLibaTemplateScriptVO script : ivrLibaTemplateScriptVOList) {
                                            if (script.getSort() == nextQuestion) {
                                            if (script.getSort().intValue() == nextQuestion) {
                                                QuestionMessagePhone returnQues = new QuestionMessagePhone();
                                                returnQues.setNowQuestion(script);
                                                redisCache.setCacheObject(userId + "returnQues", returnQues, 120, TimeUnit.MINUTES);
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/HNGatherPatArchiveController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.ruoyi.web.controller.smartor;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
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.PatMedInhosp;
import com.smartor.domain.PatMedOuthosp;
import com.smartor.domain.PatMedReq;
import com.smartor.domain.PatMedRes;
import com.smartor.service.IHNGatherPatArchiveService;
import com.smartor.service.IPatMedOuthospService;
import com.smartor.service.impl.HNGatherPatArchiveServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Array;
import java.util.List;
/**
 * æ²³å—采集患者信息接口Controller
 *
 * @author smartor
 * @date 2025-07-09
 */
@RestController
@RequestMapping("/smartor/hngather")
@Api(description = "河南采集患者信息接口")
public class HNGatherPatArchiveController extends BaseController {
    @Autowired
    private IHNGatherPatArchiveService ihnGatherPatArchiveService;
    /**
     * æ²³å—数据采集
     */
    //@PreAuthorize("@ss.hasPermi('smartor:patouthosp:list')")
    @PostMapping("/selectGatherList")
    @ApiOperation("河南数据采集")
    public Integer selectUserList(@RequestBody SysUser sysUser) {
//        Integer integer = ihnGatherPatArchiveService.selectUserList(null);
//        Integer deptInt = ihnGatherPatArchiveService.selectDeptList(null);
//        Integer icdInt = ihnGatherPatArchiveService.selectIcd10List(null);
        Integer integer = ihnGatherPatArchiveService.selectPatMedInhospList(new PatMedInhosp());
        return integer;
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskAnswerController.java
@@ -152,5 +152,4 @@
        return AjaxResult.success(serviceSubtaskAnswerService.selectPatQuestionResult(serviceSubTaskQueryReq));
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -55,14 +55,18 @@
    //@PreAuthorize("@ss.hasPermi('system:taskcall:list')")
    @PostMapping("/patItem")
    public TableDataInfo patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
        PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize());
        List<ServiceSubtask> serviceSubtaskList = null;
        LoginUser loginUser = getLoginUser();
        SysUser user = loginUser.getUser();
        serviceSubtaskVO.setOrgid(user.getOrgid());
        if (serviceSubtaskVO != null) {
            PageUtils.startPageByPost(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize());
            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO);
        }
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
            ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
            serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
            serviceSubtaskRecord.setOrgid(serviceSubtask.getOrgid());
            if (ObjectUtils.isNotEmpty((serviceSubtask.getTaskid())))
                serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
            serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord));
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskController.java
@@ -135,6 +135,19 @@
    }
    /**
     * èŽ·å–éšè®¿åŠæ—¶çŽ‡
     */
    @ApiOperation("获取随访及时率")
    //@PreAuthorize("@ss.hasPermi('smartor:ServiceTask:add')")
    @Log(title = "获取随访及时率", businessType = BusinessType.INSERT)
    @PostMapping("/selectTimelyRate")
    public AjaxResult selectTimelyRate(@RequestBody ServiceSubtask serviceSubtask) {
        SysUser user = getLoginUser().getUser();
        serviceSubtask.setOrgid(user.getOrgid());
        return success(serviceTaskService.selectTimelyRate(serviceSubtask));
    }
    /**
     * ä¿®æ”¹è¯­éŸ³ä»»åŠ¡
     */
    @ApiOperation("修改任务")
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsParamController.java
@@ -3,12 +3,9 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,8 +14,8 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.smartor.domain.SmsParam;
import com.smartor.service.ISmsParamService;
import com.ruoyi.system.domain.SmsParam;
import com.ruoyi.system.service.ISmsParamService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsRecordsController.java
@@ -3,12 +3,9 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,8 +14,8 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.smartor.domain.SmsRecords;
import com.smartor.service.ISmsRecordsService;
import com.ruoyi.system.domain.SmsRecords;
import com.ruoyi.system.service.ISmsRecordsService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SmsTempletController.java
@@ -2,12 +2,10 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,14 +14,14 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.smartor.domain.SmsTemplet;
import com.smartor.service.ISmsTempletService;
import com.ruoyi.system.domain.SmsTemplet;
import com.ruoyi.system.service.ISmsTempletService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * çŸ­ä¿¡æ¨¡æ¿Controller
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
ruoyi-admin/src/main/resources/application-druid.yml
@@ -13,10 +13,10 @@
        #        å…¬å¸
        #        url: jdbc:mysql://192.168.2.9:3308/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        #        ä¸½æ°´
#        url: jdbc:mysql://127.0.0.1:3308/smartor-lisui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#        username: smartor
#        password: Smartor.2023
#        driverClassName: com.mysql.cj.jdbc.Driver
        #        url: jdbc:mysql://127.0.0.1:3308/smartor-lisui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        #        username: smartor
        #        password: Smartor.2023
        #        driverClassName: com.mysql.cj.jdbc.Driver
        #        æ²³å—
        #        url: jdbc:mysql://127.0.0.1:3308/smartor_hn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        #        username: root
@@ -34,11 +34,11 @@
        password: Hxerp2000
        driverClassName: com.mysql.cj.jdbc.Driver
#        # é«˜æ–¯æ•°æ®åº“配置
#        url: jdbc:postgresql://127.0.0.1:5432/smartorlishui
#        username: gaussdb
#        password: Ls@123456
#        driverClassName: org.postgresql.Driver
      #        # é«˜æ–¯æ•°æ®åº“配置
      #        url: jdbc:postgresql://127.0.0.1:5432/smartorlishui
      #        username: gaussdb
      #        password: Ls@123456
      #        driverClassName: org.postgresql.Driver
      # ä»Žåº“数据源
      slave:
@@ -197,10 +197,10 @@
hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
# 0代表走默认的上传    1 ä»£ç èµ°æ–°åŽåŒ»é™¢çš„上传
uploadSwitch: 1
uploadSwitch: 0
#  æŒ‡å®šasr回调的url路径(本地)
ASRCallBackPath: http://127.0.0.1:8095/smartor/serviceSubtask/phoneCallBackYQ
ASRCallBackPath: http://192.168.100.10:8095/smartor/serviceSubtask/phoneCallBackYQ
#挂断IP(本地)
hangup: http://192.168.100.6:8089/hangup
#fs所使用的阿里的app_key(本地)
ruoyi-admin/src/main/resources/application-hn.yml
@@ -7,7 +7,7 @@
      # ä¸»åº“数据源
      master:
        #   æ²³å—
        url: jdbc:mysql://127.0.0.1:3308/smartor_hn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3308/smartor_hn?useUnicode=true&characterEncoding=utf8&&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        driverClassName: com.mysql.cj.jdbc.Driver
@@ -15,12 +15,12 @@
      # ä»Žåº“数据源
      slave:
      # ä»Žæ•°æ®æºå¼€å…³/默认关闭(公司)
      # enabled: true
      # url: jdbc:sqlserver://116.62.18.175:6001;DatabaseName=iv-ywey;encrypt=false;SelectMethod=cursor
      # username: sa
      # password: Hxerp2000
      # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭(公司)
        enabled: true
        url: jdbc:postgresql://10.10.13.108:5432/hdr
        username: mbsjjk
        password: sjjk@2025
        driver-class-name: org.postgresql.Driver
      # ä»Žæ•°æ®æºå¼€å…³/默认关闭(义乌二院)
      # enabled: true
@@ -91,6 +91,12 @@
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
# PageHelper分页插件
pagehelper:
  helperDialect: postgresql
  supportMethodsArguments: true
  params: count=countSql
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
ruoyi-admin/src/main/resources/application-ls.yml
@@ -103,6 +103,11 @@
  # è¯·æ±‚前缀
  pathMapping: /dev-api
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
magic-api:
  web: /magic/web
ruoyi-admin/src/main/resources/application-xh.yml
@@ -111,6 +111,12 @@
    default-page: 1
    default-size: 10
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
#钉钉的密钥
dingAppid: dingn8iip5ubj7clrrsv
dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
@@ -160,9 +166,8 @@
#新华医院外链请求IP和端口号
req_path: 8093
#localIP: https://wx.lihusmart.com
#丽水外链请求IP和端口号
localIP: http://221.12.19.26
localIP: https://wx.lihusmart.com
#获取患者信息URL(华卓提供)
hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
ruoyi-admin/src/main/resources/application.yml
@@ -117,11 +117,7 @@
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql
# é˜²æ­¢XSS攻击
ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java
@@ -5,6 +5,7 @@
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Component;
@@ -141,21 +142,23 @@
    /**
     * ç¼“å­˜List数据
     *
     * @param cacheKey      ç¼“存的键值
     * @param list å¾…缓存的List数据(这里如果新增的话,是往头部新增)并去重
     * @param cacheKey ç¼“存的键值
     * @param list     å¾…缓存的List数据(这里如果新增的话,是往头部新增)并去重
     * @return ç¼“存的对象
     */
    public void setCacheListLeftAndDistinct(String cacheKey, List<String> list) {
        // èŽ·å– ListOperations å¯¹è±¡ï¼Œç”¨äºŽæ“ä½œ Redis List
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        // æ£€æŸ¥ key ç±»åž‹
        DataType keyType = redisTemplate.type(cacheKey);
        if (keyType != DataType.NONE && keyType != DataType.LIST) {
            // å¦‚果已经存在但不是 list ç±»åž‹ï¼Œåˆ é™¤å®ƒï¼ˆæˆ–直接抛异常也可)
            redisTemplate.delete(cacheKey);
        }
        // èŽ·å–çŽ°æœ‰çš„ cache-0 åˆ—表中的所有值
        ListOperations<String, String> listOps = redisTemplate.opsForList();
        List<String> existingValues = listOps.range(cacheKey, 0, -1);
        // è¿‡æ»¤å‡ºä¸åœ¨ Redis åˆ—表中的值
        List<String> newValues = list.stream().filter(value -> !existingValues.contains(value)).collect(Collectors.toList());
        // å°†æ–°çš„值添加到 Redis åˆ—表的左侧
        if (!newValues.isEmpty()) {
            listOps.leftPushAll(cacheKey, newValues);
        }
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/HospitalFilterInterceptor.java
@@ -54,7 +54,7 @@
        }
        // ä¿®æ”¹ SQL,添加 orgid æ¡ä»¶
        String modifiedSql = modifySqlWithorgidId(originalSql, orgid);
        String modifiedSql = modifySqlWithOrgId(originalSql, orgid);
        // å°†ä¿®æ”¹åŽçš„ SQL å†™å›ž
        metaObject.setValue("delegate.boundSql.sql", modifiedSql);
@@ -67,11 +67,11 @@
     * ä¿®æ”¹ SQL,注入 orgid æ¡ä»¶
     *
     * @param originalSql åŽŸå§‹ SQL
     * @param orgid       å½“前医院 ID
     * @param orgId       å½“前医院 ID
     * @return ä¿®æ”¹åŽçš„ SQL
     */
    private String modifySqlWithorgidId(String originalSql, String orgid) {
        if (originalSql.contains("insert into") || originalSql.contains("INSERT INTO") || originalSql.contains("from sys_menu")  || originalSql.contains("sys_job") || originalSql.contains("update sys_menu") || originalSql.contains("information_schema.tables") || originalSql.contains("information_schema.columns") || originalSql.contains("gen_table") || originalSql.toUpperCase().contains("ORGID IS NULL")) {
    private String modifySqlWithOrgId(String originalSql, String orgid) {
        if (originalSql.contains("insert into") || originalSql.contains("INSERT INTO") || originalSql.contains("from sys_menu") || originalSql.contains("sys_job") || originalSql.contains("update sys_menu") || originalSql.contains("information_schema.tables") || originalSql.contains("information_schema.columns") || originalSql.contains("gen_table") || originalSql.toUpperCase().contains("ORGID IS NULL") || originalSql.toUpperCase().contains("FROM CRYXX") || originalSql.toUpperCase().contains("FROM MZXX") || originalSql.toUpperCase().contains("FROM JBXX") || originalSql.toUpperCase().contains("FROM BMXX")) {
            return originalSql;
        }
        // æå– orgid çš„ WHERE å­å¥
@@ -97,7 +97,7 @@
        }
        // ä¿®æ”¹ SQL
        if (originalSql.toUpperCase().contains("ORGID =") || originalSql.toUpperCase().contains("ORGID=")) {
        if (originalSql.toUpperCase().contains("ORGID =") || originalSql.toUpperCase().contains("ORGID=") || originalSql.toUpperCase().contains("ORGID IN")) {
            return originalSql;
        } else if (originalSql.toUpperCase().contains("WHERE")) {
            // åœ¨å·²æœ‰ WHERE åŽæ·»åŠ  orgid æ¡ä»¶
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -548,7 +548,6 @@
                                serviceSubtask.setResult("error");
                                serviceSubtask.setRemark("系统错误");
                                serviceSubtask.setSendstate(5L);
//                                serviceSubtask.setFinishtime(new Date());
                                serviceSubtask.setGuid(guid);
                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
                            }
@@ -570,14 +569,12 @@
                                    serviceSubtask.setResult("error");
                                    serviceSubtask.setRemark(patArchive.getNotrequiredreason());
                                    serviceSubtask.setSendstate(4L);
//                                    serviceSubtask.setFinishtime(new Date());
                                    iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
                                    continue;
                                }
                                String patid = rsaPublicKeyExample.encryptedData(serviceSubtask.getPatid().toString(), pub_key);
                                String url = null;
                                url = ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false";
//                                String wxCode = getWXCode(serviceSubtask.getSfzh(), url, serviceSubtask.getTaskName(), serviceSubtask.getTaskDesc(), "无");
                                //获取微信公众号请求信息根据机构ID
                                List<String> wxqqxx = WxGZHEnum.getDescByCode(patArchive.getOrgid());
@@ -587,7 +584,6 @@
                                    ss.setRemark("该机构的公众号配置信息不全,无法通过公众号发送");
                                    ss.setSendstate(5L);
                                    ss.setId(serviceSubtask.getId());
//                                    ss.setFinishtime(new Date());
                                    serviceSubtaskMapper.updateServiceSubtask(ss);
                                    continue;
                                }
@@ -598,7 +594,6 @@
                                    ss.setRemark("公众号发送失败,his系统的患者id为空");
                                    ss.setSendstate(5L);
                                    ss.setId(serviceSubtask.getId());
//                                    ss.setFinishtime(new Date());
                                    serviceSubtaskMapper.updateServiceSubtask(ss);
                                    continue;
                                }
@@ -634,7 +629,6 @@
                                serviceSubtask.setResult("error");
                                serviceSubtask.setRemark("系统错误");
                                serviceSubtask.setSendstate(5L);
//                                serviceSubtask.setFinishtime(new Date());
                                serviceSubtask.setGuid(guid);
                                iServiceSubtaskService.updateServiceSubtask(serviceSubtask);
                            }
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsParam.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/SmsParam.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.smartor.domain;
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -9,7 +9,7 @@
/**
 * çŸ­ä¿¡å‚数对象 sms_param
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
@@ -47,75 +47,75 @@
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Date uploadTime;
    public void setParamid(Long paramid)
    public void setParamid(Long paramid)
    {
        this.paramid = paramid;
    }
    public Long getParamid()
    public Long getParamid()
    {
        return paramid;
    }
    public void setParamname(String paramname)
    public void setParamname(String paramname)
    {
        this.paramname = paramname;
    }
    public String getParamname()
    public String getParamname()
    {
        return paramname;
    }
    public void setParamval(String paramval)
    public void setParamval(String paramval)
    {
        this.paramval = paramval;
    }
    public String getParamval()
    public String getParamval()
    {
        return paramval;
    }
    public void setDescirbe(String descirbe)
    public void setDescirbe(String descirbe)
    {
        this.descirbe = descirbe;
    }
    public String getDescirbe()
    public String getDescirbe()
    {
        return descirbe;
    }
    public void setUsestatus(Long usestatus)
    public void setUsestatus(Long usestatus)
    {
        this.usestatus = usestatus;
    }
    public Long getUsestatus()
    public Long getUsestatus()
    {
        return usestatus;
    }
    public void setDelFlag(String delFlag)
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    public Date getUploadTime()
    {
        return uploadTime;
    }
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsRecords.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
package com.ruoyi.system.domain;
import java.util.Date;
import java.util.List;
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;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * çŸ­ä¿¡è®°å½•对象 sms_records
 *
 * @author smartor
 * @date 2023-03-06
 */
@Data
public class SmsRecords extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * è®°å½•ID
     */
    private Long recordid;
    /**
     * å­ä»»åŠ¡ID
     */
    private Long subId;
    /**
     *
     */
    @Excel(name = "用户ID")
    private String userid;
    /**
     *
     */
    @Excel(name = "用户名")
    private String username;
    /**
     *
     */
    @Excel(name = "手机号")
    private String phone;
    /**
     * çŸ­ä¿¡ç¼–号
     */
    @Excel(name = "短信编号")
    private String msgno;
    /**
     * çŸ­ä¿¡å†…容
     */
    @Excel(name = "短信内容")
    private String msg;
    /**
     * æ–°å¢žæ—¶é—´
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
    private Date inserttime;
    /**
     * å‘送时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
    private Date sendtime;
    /**
     * å‘送失败次数
     */
    @Excel(name = "发送失败次数")
    private Long sendfailedcount;
    /**
     * ç»“果时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
    private Date resulttime;
    /**
     * ç»“果内容
     */
    @Excel(name = "")
    private String resultmsg;
    /**
     * å‘送状态
     */
    @Excel(name = "发送状态: 0未发送    1.已发送")
    private Long sendstate;
    /**
     *
     */
    @Excel(name = "")
    private Long inserttype;
    /**
     *
     */
    @Excel(name = "")
    private Long insertsystem;
    /**
     *
     */
    @Excel(name = "")
    private String insertmodule;
    /**
     *
     */
    @Excel(name = "")
    private String moduleid;
    /**
     *
     */
    @Excel(name = "")
    private String msgidentify;
    /**
     * $column.columnComment
     */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Long accountid;
    /**
     * æœºæž„ID
     */
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private String orgid;
    private List<String> orgidList;
    /**
     * åˆ é™¤æ ‡å¿—
     */
    private String delFlag;
    /**
     *
     */
    @Excel(name = "")
    private Long isupload;
    /**
     *
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
    private Date uploadTime;
    /**
     *
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "", width = 30, dateFormat = "yyyy-MM-dd")
    private Date visitTime;
}
ruoyi-system/src/main/java/com/ruoyi/system/domain/SmsTemplet.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/domain/SmsTemplet.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.smartor.domain;
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -9,7 +9,7 @@
/**
 * çŸ­ä¿¡æ¨¡æ¿å¯¹è±¡ sms_templet
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
@@ -43,66 +43,66 @@
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    private Date uploadTime;
    public void setTempletid(Long templetid)
    public void setTempletid(Long templetid)
    {
        this.templetid = templetid;
    }
    public Long getTempletid()
    public Long getTempletid()
    {
        return templetid;
    }
    public void setTempletno(String templetno)
    public void setTempletno(String templetno)
    {
        this.templetno = templetno;
    }
    public String getTempletno()
    public String getTempletno()
    {
        return templetno;
    }
    public void setTempletname(String templetname)
    public void setTempletname(String templetname)
    {
        this.templetname = templetname;
    }
    public String getTempletname()
    public String getTempletname()
    {
        return templetname;
    }
    public void setTempletcontent(String templetcontent)
    public void setTempletcontent(String templetcontent)
    {
        this.templetcontent = templetcontent;
    }
    public String getTempletcontent()
    public String getTempletcontent()
    {
        return templetcontent;
    }
    public void setDelFlag(String delFlag)
    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }
    public String getDelFlag()
    public String getDelFlag()
    {
        return delFlag;
    }
    public void setIsupload(Long isupload)
    public void setIsupload(Long isupload)
    {
        this.isupload = isupload;
    }
    public Long getIsupload()
    public Long getIsupload()
    {
        return isupload;
    }
    public void setUploadTime(Date uploadTime)
    public void setUploadTime(Date uploadTime)
    {
        this.uploadTime = uploadTime;
    }
    public Date getUploadTime()
    public Date getUploadTime()
    {
        return uploadTime;
    }
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsParamMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/mapper/SmsParamMapper.java ÐÞ¸Ä
@@ -1,8 +1,8 @@
package com.smartor.mapper;
package com.ruoyi.system.mapper;
import java.util.List;
import com.smartor.domain.SmsParam;
import com.ruoyi.system.domain.SmsParam;
import org.apache.ibatis.annotations.Mapper;
/**
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsRecordsMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/mapper/SmsRecordsMapper.java ÐÞ¸Ä
@@ -1,19 +1,20 @@
package com.smartor.mapper;
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SmsRecords;
import java.util.List;
import com.smartor.domain.SmsRecords;
/**
 * çŸ­ä¿¡è®°å½•Mapper接口
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
public interface SmsRecordsMapper
public interface SmsRecordsMapper
{
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•
     *
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return çŸ­ä¿¡è®°å½•
     */
@@ -21,7 +22,7 @@
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•列表
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return çŸ­ä¿¡è®°å½•集合
     */
@@ -29,7 +30,7 @@
    /**
     * æ–°å¢žçŸ­ä¿¡è®°å½•
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
@@ -37,7 +38,7 @@
    /**
     * ä¿®æ”¹çŸ­ä¿¡è®°å½•
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
@@ -45,7 +46,7 @@
    /**
     * åˆ é™¤çŸ­ä¿¡è®°å½•
     *
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return ç»“æžœ
     */
@@ -53,7 +54,7 @@
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡è®°å½•
     *
     *
     * @param recordids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SmsTempletMapper.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/mapper/SmsTempletMapper.java ÐÞ¸Ä
@@ -1,19 +1,20 @@
package com.smartor.mapper;
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.SmsTemplet;
import java.util.List;
import com.smartor.domain.SmsTemplet;
/**
 * çŸ­ä¿¡æ¨¡æ¿Mapper接口
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
public interface SmsTempletMapper
public interface SmsTempletMapper
{
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return çŸ­ä¿¡æ¨¡æ¿
     */
@@ -21,7 +22,7 @@
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿åˆ—表
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return çŸ­ä¿¡æ¨¡æ¿é›†åˆ
     */
@@ -29,7 +30,7 @@
    /**
     * æ–°å¢žçŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -37,7 +38,7 @@
    /**
     * ä¿®æ”¹çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -45,7 +46,7 @@
    /**
     * åˆ é™¤çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return ç»“æžœ
     */
@@ -53,7 +54,7 @@
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsParamService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/ISmsParamService.java ÐÞ¸Ä
@@ -1,8 +1,8 @@
package com.smartor.service;
package com.ruoyi.system.service;
import java.util.List;
import com.smartor.domain.SmsParam;
import com.ruoyi.system.domain.SmsParam;
/**
 * çŸ­ä¿¡å‚æ•°Service接口
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsRecordsService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/ISmsRecordsService.java ÐÞ¸Ä
@@ -1,19 +1,19 @@
package com.smartor.service;
package com.ruoyi.system.service;
import java.util.List;
import com.smartor.domain.SmsRecords;
import com.ruoyi.system.domain.SmsRecords;
/**
 * çŸ­ä¿¡è®°å½•Service接口
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
public interface ISmsRecordsService
{
public interface ISmsRecordsService {
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•
     *
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return çŸ­ä¿¡è®°å½•
     */
@@ -21,7 +21,7 @@
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•列表
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return çŸ­ä¿¡è®°å½•集合
     */
@@ -29,15 +29,23 @@
    /**
     * æ–°å¢žçŸ­ä¿¡è®°å½•
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
    public int insertSmsRecords(SmsRecords smsRecords);
    /**
     * çŸ­ä¿¡å‘送
     *
     * @param smsRecords
     * @return
     */
    public Boolean sendSmsRecords(SmsRecords smsRecords);
    /**
     * ä¿®æ”¹çŸ­ä¿¡è®°å½•
     *
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
@@ -45,7 +53,7 @@
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡è®°å½•
     *
     *
     * @param recordids éœ€è¦åˆ é™¤çš„短信记录主键集合
     * @return ç»“æžœ
     */
@@ -53,7 +61,7 @@
    /**
     * åˆ é™¤çŸ­ä¿¡è®°å½•信息
     *
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return ç»“æžœ
     */
ruoyi-system/src/main/java/com/ruoyi/system/service/ISmsTempletService.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/ISmsTempletService.java ÐÞ¸Ä
@@ -1,19 +1,19 @@
package com.smartor.service;
package com.ruoyi.system.service;
import java.util.List;
import com.smartor.domain.SmsTemplet;
import com.ruoyi.system.domain.SmsTemplet;
/**
 * çŸ­ä¿¡æ¨¡æ¿Service接口
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
public interface ISmsTempletService
public interface ISmsTempletService
{
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return çŸ­ä¿¡æ¨¡æ¿
     */
@@ -21,7 +21,7 @@
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿åˆ—表
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return çŸ­ä¿¡æ¨¡æ¿é›†åˆ
     */
@@ -29,7 +29,7 @@
    /**
     * æ–°å¢žçŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -37,7 +37,7 @@
    /**
     * ä¿®æ”¹çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -45,7 +45,7 @@
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetids éœ€è¦åˆ é™¤çš„短信模板主键集合
     * @return ç»“æžœ
     */
@@ -53,7 +53,7 @@
    /**
     * åˆ é™¤çŸ­ä¿¡æ¨¡æ¿ä¿¡æ¯
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return ç»“æžœ
     */
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsParamServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/impl/SmsParamServiceImpl.java ÐÞ¸Ä
@@ -1,11 +1,11 @@
package com.smartor.service.impl;
package com.ruoyi.system.service.impl;
import WebServiceClient.MessagingInsertLocator;
import WebServiceClient.MessagingInsertSoap12Stub;
import com.ruoyi.common.utils.DateUtils;
import com.smartor.domain.SmsParam;
import com.smartor.mapper.SmsParamMapper;
import com.smartor.service.ISmsParamService;
import com.ruoyi.system.domain.SmsParam;
import com.ruoyi.system.mapper.SmsParamMapper;
import com.ruoyi.system.service.ISmsParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsRecordsServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,207 @@
package com.ruoyi.system.service.impl;
import java.io.IOException;
import java.sql.Date;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.ruoyi.common.enums.MsgLSEnum;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.OkHttpExample;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.common.LSHospTokenUtil;
import com.smartor.domain.ServiceSubtask;
import com.smartor.mapper.ServiceSubtaskMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SmsRecordsMapper;
import com.ruoyi.system.domain.SmsRecords;
import com.ruoyi.system.service.ISmsRecordsService;
/**
 * çŸ­ä¿¡è®°å½•Service业务层处理
 *
 * @author smartor
 * @date 2023-03-06
 */
@Slf4j
@Service
public class SmsRecordsServiceImpl implements ISmsRecordsService {
    @Autowired
    private SmsRecordsMapper smsRecordsMapper;
    @Autowired
    private ISysConfigService iSysConfigService;
    @Autowired
    private ServiceSubtaskMapper serviceSubtaskMapper;
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return çŸ­ä¿¡è®°å½•
     */
    @Override
    public SmsRecords selectSmsRecordsByRecordid(Long recordid) {
        return smsRecordsMapper.selectSmsRecordsByRecordid(recordid);
    }
    /**
     * æŸ¥è¯¢çŸ­ä¿¡è®°å½•列表
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return çŸ­ä¿¡è®°å½•
     */
    @Override
    public List<SmsRecords> selectSmsRecordsList(SmsRecords smsRecords) {
        return smsRecordsMapper.selectSmsRecordsList(smsRecords);
    }
    /**
     * æ–°å¢žçŸ­ä¿¡è®°å½•
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
    @Override
    public int insertSmsRecords(SmsRecords smsRecords) {
        smsRecords.setCreateTime(DateUtils.getNowDate());
        return smsRecordsMapper.insertSmsRecords(smsRecords);
    }
    /**
     * æ–°å¢žçŸ­ä¿¡è®°å½•
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
    @Override
    public Boolean sendSmsRecords(SmsRecords smsRecords) {
        //获取通知短信提前"几天"发送
        Integer days = 0;
        String noticeSmsBeforeSend = iSysConfigService.selectConfigByKey("notice_sms_before_send");
        //获取医院机构ID
        String hospOrgid = iSysConfigService.selectConfigByKey("hosp_orgid");
        if (StringUtils.isNotEmpty(noticeSmsBeforeSend)) days = Integer.valueOf(noticeSmsBeforeSend);
        //通过当前日期,加上提前的天数,获取要
        LocalDate newDate = LocalDate.now().plusDays(days);
        Date date = Date.valueOf(newDate);
        smsRecords.setVisitTime(date);
        List<String> orgidList = null;
        if (StringUtils.isNotEmpty(hospOrgid)) {
            orgidList = Arrays.asList(hospOrgid.split(","));
            smsRecords.setOrgidList(orgidList);
        }
        List<SmsRecords> selectSmsRecordsList = smsRecordsMapper.selectSmsRecordsList(smsRecords);
        for (SmsRecords record : selectSmsRecordsList) {
            Boolean aBoolean = sendSMS(record.getOrgid(), record.getPhone(), record.getMsg());
            ServiceSubtask serviceSubtask = new ServiceSubtask();
            serviceSubtask.setId(record.getSubId());
            if (aBoolean) serviceSubtask.setVisitNotice(1);
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
        }
        return true;
    }
    public Boolean sendSMS(String orgid, String phone, String content) {
        //丽水的短信发送方式
        Boolean isSuccess = false;
        try {
            Map<String, String> map = MsgLSEnum.getAddressByCode(orgid);
            String token = LSHospTokenUtil.getToken(orgid);
            log.info("【sfHandlle】丽水短信发送,地址:{},参数:{},机构ID:{}", map.get("address"), orgid);
            String dxCode = getDXCode(map.get("address"), phone, content, map.get("sendPersonId"), map.get("sendPersonName"), MsgLSEnum.getHeaderByCode(orgid), token);
            log.info("【sfHandlle】丽水短信发送结果:{}", dxCode);
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, Object> textParam = null;
            textParam = objectMapper.readValue(dxCode, Map.class);
            String code = textParam.get("Code").toString();
            if (code.equals("0")) {
                isSuccess = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return isSuccess;
    }
    /**
     * ä¿®æ”¹çŸ­ä¿¡è®°å½•
     *
     * @param smsRecords çŸ­ä¿¡è®°å½•
     * @return ç»“æžœ
     */
    @Override
    public int updateSmsRecords(SmsRecords smsRecords) {
        smsRecords.setUpdateTime(DateUtils.getNowDate());
        return smsRecordsMapper.updateSmsRecords(smsRecords);
    }
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡è®°å½•
     *
     * @param recordids éœ€è¦åˆ é™¤çš„短信记录主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteSmsRecordsByRecordids(Long[] recordids) {
        return smsRecordsMapper.deleteSmsRecordsByRecordids(recordids);
    }
    /**
     * åˆ é™¤çŸ­ä¿¡è®°å½•信息
     *
     * @param recordid çŸ­ä¿¡è®°å½•主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteSmsRecordsByRecordid(Long recordid) {
        return smsRecordsMapper.deleteSmsRecordsByRecordid(recordid);
    }
    private String getDXCode(String address, String ShouJiHM, String FaSongNR, String FaSongRID, String FaSongRXM, Map<String, Object> headerMap, String token) {
        Map<String, Object> map = new LinkedHashMap<>();
        Map<String, Object> YeWuXX = new LinkedHashMap<>();
        Map<String, Object> DuanXinXX = new LinkedHashMap<>();
        DuanXinXX.put("ShouJiHM", ShouJiHM);
        DuanXinXX.put("FaSongNR", FaSongNR);
        DuanXinXX.put("FaSongRID", FaSongRID);
        DuanXinXX.put("FaSongRXM", FaSongRXM);
        YeWuXX.put("DuanXinXX", DuanXinXX);
        map.put("XiaoXiTou", headerMap);
        map.put("YeWuXX", YeWuXX);
        String body = new Gson().toJson(map);
//        String result = HttpUtils.sendPost(address, body);
        String result = null;
        try {
            result = OkHttpExample.sendPostRequest(address, body, token);
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.info("【getDXCode】短信发送结果:{}", result);
        JSONObject jsonObject = JSONObject.parseObject(result);
        String code = (String) jsonObject.toString();
        return code;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SmsTempletServiceImpl.java
ÎļþÃû´Ó smartor/src/main/java/com/smartor/service/impl/SmsTempletServiceImpl.java ÐÞ¸Ä
@@ -1,28 +1,28 @@
package com.smartor.service.impl;
package com.ruoyi.system.service.impl;
import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.smartor.mapper.SmsTempletMapper;
import com.smartor.domain.SmsTemplet;
import com.smartor.service.ISmsTempletService;
import com.ruoyi.system.mapper.SmsTempletMapper;
import com.ruoyi.system.domain.SmsTemplet;
import com.ruoyi.system.service.ISmsTempletService;
/**
 * çŸ­ä¿¡æ¨¡æ¿Service业务层处理
 *
 *
 * @author smartor
 * @date 2023-03-06
 */
@Service
public class SmsTempletServiceImpl implements ISmsTempletService
public class SmsTempletServiceImpl implements ISmsTempletService
{
    @Autowired
    private SmsTempletMapper smsTempletMapper;
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return çŸ­ä¿¡æ¨¡æ¿
     */
@@ -34,7 +34,7 @@
    /**
     * æŸ¥è¯¢çŸ­ä¿¡æ¨¡æ¿åˆ—表
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return çŸ­ä¿¡æ¨¡æ¿
     */
@@ -46,7 +46,7 @@
    /**
     * æ–°å¢žçŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -59,7 +59,7 @@
    /**
     * ä¿®æ”¹çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param smsTemplet çŸ­ä¿¡æ¨¡æ¿
     * @return ç»“æžœ
     */
@@ -72,7 +72,7 @@
    /**
     * æ‰¹é‡åˆ é™¤çŸ­ä¿¡æ¨¡æ¿
     *
     *
     * @param templetids éœ€è¦åˆ é™¤çš„短信模板主键
     * @return ç»“æžœ
     */
@@ -84,7 +84,7 @@
    /**
     * åˆ é™¤çŸ­ä¿¡æ¨¡æ¿ä¿¡æ¯
     *
     *
     * @param templetid çŸ­ä¿¡æ¨¡æ¿ä¸»é”®
     * @return ç»“æžœ
     */
ruoyi-system/src/main/resources/mapper/system/SmsParamMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/SmsParamMapper.xml ÐÞ¸Ä
@@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.SmsParamMapper">
<mapper namespace="com.ruoyi.system.mapper.SmsParamMapper">
    <resultMap type="SmsParam" id="SmsParamResult">
        <result property="paramid"    column="paramid"    />
ruoyi-system/src/main/resources/mapper/system/SmsRecordsMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SmsRecordsMapper">
    <resultMap type="com.ruoyi.system.domain.SmsRecords" id="SmsRecordsResult">
        <result property="recordid" column="recordid"/>
        <result property="userid" column="userid"/>
        <result property="username" column="username"/>
        <result property="phone" column="phone"/>
        <result property="msgno" column="msgno"/>
        <result property="msg" column="msg"/>
        <result property="inserttime" column="inserttime"/>
        <result property="sendtime" column="sendtime"/>
        <result property="sendfailedcount" column="sendfailedcount"/>
        <result property="resulttime" column="resulttime"/>
        <result property="resultmsg" column="resultmsg"/>
        <result property="sendstate" column="sendstate"/>
        <result property="inserttype" column="inserttype"/>
        <result property="insertsystem" column="insertsystem"/>
        <result property="insertmodule" column="insertmodule"/>
        <result property="moduleid" column="moduleid"/>
        <result property="msgidentify" column="msgidentify"/>
        <result property="accountid" column="accountid"/>
        <result property="orgid" column="orgid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="isupload" column="isupload"/>
        <result property="uploadTime" column="upload_time"/>
        <result property="guid" column="guid"/>
        <result property="visitTime" column="visit_time"/>
    </resultMap>
    <sql id="selectSmsRecordsVo">
        select recordid,
               userid,
               guid,
               username,
               phone,
               msgno,
               msg,
               inserttime,
               sendtime,
               sendfailedcount,
               resulttime,
               resultmsg,
               sendstate,
               inserttype,
               insertsystem,
               insertmodule,
               moduleid,
               msgidentify,
               accountid,
               orgid,
               del_flag,
               update_by,
               update_time,
               create_by,
               create_time,
               isupload,
               visit_time,
               upload_time
        from sms_records
    </sql>
    <select id="selectSmsRecordsList" parameterType="com.ruoyi.system.domain.SmsRecords" resultMap="SmsRecordsResult">
        <include refid="selectSmsRecordsVo"/>
        <where>
            del_flag=0
            <if test="userid != null  and userid != ''">and userid = #{userid}</if>
            <if test="username != null  and username != ''">and username like concat('%', #{username}, '%')</if>
            <if test="phone != null  and phone != ''">and phone = #{phone}</if>
            <if test="msgno != null  and msgno != ''">and msgno = #{msgno}</if>
            <if test="msg != null  and msg != ''">and msg = #{msg}</if>
            <if test="inserttime != null ">and inserttime = #{inserttime}</if>
            <if test="sendtime != null ">and sendtime = #{sendtime}</if>
            <if test="sendfailedcount != null ">and sendfailedcount = #{sendfailedcount}</if>
            <if test="resulttime != null ">and resulttime = #{resulttime}</if>
            <if test="resultmsg != null  and resultmsg != ''">and resultmsg = #{resultmsg}</if>
            <if test="sendstate != null ">and sendstate = #{sendstate}</if>
            <if test="inserttype != null ">and inserttype = #{inserttype}</if>
            <if test="insertsystem != null ">and insertsystem = #{insertsystem}</if>
            <if test="insertmodule != null  and insertmodule != ''">and insertmodule = #{insertmodule}</if>
            <if test="moduleid != null  and moduleid != ''">and moduleid = #{moduleid}</if>
            <if test="msgidentify != null  and msgidentify != ''">and msgidentify = #{msgidentify}</if>
            <if test="accountid != null ">and accountid = #{accountid}</if>
            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
            <if test="isupload != null ">and isupload = #{isupload}</if>
            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
            <if test="visitTime != null ">and date_format(visit_time,'%y%m%d') =
                date_format(#{visitTime},'%y%m%d')
            </if>
        </where>
    </select>
    <select id="selectSmsRecordsByRecordid" parameterType="Long" resultMap="SmsRecordsResult">
        <include refid="selectSmsRecordsVo"/>
        where del_flag=0 and recordid = #{recordid}
    </select>
    <insert id="insertSmsRecords" parameterType="com.ruoyi.system.domain.SmsRecords">
        insert into sms_records
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="recordid != null">recordid,</if>
            <if test="userid != null">userid,</if>
            <if test="username != null">username,</if>
            <if test="phone != null">phone,</if>
            <if test="msgno != null">msgno,</if>
            <if test="msg != null">msg,</if>
            <if test="inserttime != null">inserttime,</if>
            <if test="sendtime != null">sendtime,</if>
            <if test="sendfailedcount != null">sendfailedcount,</if>
            <if test="resulttime != null">resulttime,</if>
            <if test="resultmsg != null">resultmsg,</if>
            <if test="sendstate != null">sendstate,</if>
            <if test="inserttype != null">inserttype,</if>
            <if test="insertsystem != null">insertsystem,</if>
            <if test="insertmodule != null">insertmodule,</if>
            <if test="moduleid != null">moduleid,</if>
            <if test="msgidentify != null">msgidentify,</if>
            <if test="accountid != null">accountid,</if>
            <if test="orgid != null">orgid,</if>
            <if test="delFlag != null">del_flag,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="isupload != null">isupload,</if>
            <if test="uploadTime != null">upload_time,</if>
            <if test="guid != null">guid,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="recordid != null">#{recordid},</if>
            <if test="userid != null">#{userid},</if>
            <if test="username != null">#{username},</if>
            <if test="phone != null">#{phone},</if>
            <if test="msgno != null">#{msgno},</if>
            <if test="msg != null">#{msg},</if>
            <if test="inserttime != null">#{inserttime},</if>
            <if test="sendtime != null">#{sendtime},</if>
            <if test="sendfailedcount != null">#{sendfailedcount},</if>
            <if test="resulttime != null">#{resulttime},</if>
            <if test="resultmsg != null">#{resultmsg},</if>
            <if test="sendstate != null">#{sendstate},</if>
            <if test="inserttype != null">#{inserttype},</if>
            <if test="insertsystem != null">#{insertsystem},</if>
            <if test="insertmodule != null">#{insertmodule},</if>
            <if test="moduleid != null">#{moduleid},</if>
            <if test="msgidentify != null">#{msgidentify},</if>
            <if test="accountid != null">#{accountid},</if>
            <if test="orgid != null">#{orgid},</if>
            <if test="delFlag != null">#{delFlag},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="isupload != null">#{isupload},</if>
            <if test="uploadTime != null">#{uploadTime},</if>
            <if test="guid != null">#{guid},</if>
        </trim>
    </insert>
    <update id="updateSmsRecords" parameterType="com.ruoyi.system.domain.SmsRecords">
        update sms_records
        <trim prefix="SET" suffixOverrides=",">
            <if test="userid != null">userid = #{userid},</if>
            <if test="username != null">username = #{username},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="msgno != null">msgno = #{msgno},</if>
            <if test="msg != null">msg = #{msg},</if>
            <if test="inserttime != null">inserttime = #{inserttime},</if>
            <if test="sendtime != null">sendtime = #{sendtime},</if>
            <if test="sendfailedcount != null">sendfailedcount = #{sendfailedcount},</if>
            <if test="resulttime != null">resulttime = #{resulttime},</if>
            <if test="resultmsg != null">resultmsg = #{resultmsg},</if>
            <if test="sendstate != null">sendstate = #{sendstate},</if>
            <if test="inserttype != null">inserttype = #{inserttype},</if>
            <if test="insertsystem != null">insertsystem = #{insertsystem},</if>
            <if test="insertmodule != null">insertmodule = #{insertmodule},</if>
            <if test="moduleid != null">moduleid = #{moduleid},</if>
            <if test="msgidentify != null">msgidentify = #{msgidentify},</if>
            <if test="accountid != null">accountid = #{accountid},</if>
            <if test="orgid != null">orgid = #{orgid},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="isupload != null">isupload = #{isupload},</if>
            <if test="uploadTime != null">upload_time = #{uploadTime},</if>
            <if test="guid != null">guid = #{guid},</if>
        </trim>
        where recordid = #{recordid}
    </update>
    <delete id="deleteSmsRecordsByRecordid" parameterType="Long">
        delete
        from sms_records
        where recordid = #{recordid}
    </delete>
    <delete id="deleteSmsRecordsByRecordids" parameterType="String">
        delete from sms_records where recordid in
        <foreach item="recordid" collection="array" open="(" separator="," close=")">
            #{recordid}
        </foreach>
    </delete>
</mapper>
ruoyi-system/src/main/resources/mapper/system/SmsTempletMapper.xml
ÎļþÃû´Ó smartor/src/main/resources/mapper/smartor/SmsTempletMapper.xml ÐÞ¸Ä
@@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.SmsTempletMapper">
<mapper namespace="com.ruoyi.system.mapper.SmsTempletMapper">
    <resultMap type="SmsTemplet" id="SmsTempletResult">
        <result property="templetid"    column="templetid"    />
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScript.java
@@ -280,7 +280,7 @@
     * åºå·
     */
    @ApiModelProperty(value = "序号")
    private Integer sort;
    private Long sort;
    /**
smartor/src/main/java/com/smartor/domain/IvrLibaTemplateScriptVO.java
@@ -283,7 +283,7 @@
     * åºå·
     */
    @ApiModelProperty(value = "序号")
    private Integer sort;
    private Long sort;
//    /**
//     * åŸºç¡€æŒ‡æ ‡ç±»åž‹
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -327,6 +327,18 @@
     */
    @ApiModelProperty("pageSize")
    private Integer pageSize;
    /**
     * pageNum
     */
    @ApiModelProperty("pn")
    private Integer pn;
    /**
     * pageSize
     */
    @ApiModelProperty("ps")
    private Integer ps;
    /**
     * å‡ºé™¢æ–¹å¼åºå·
     */
smartor/src/main/java/com/smartor/domain/PatSatisfaction.java
@@ -28,49 +28,49 @@
     * $column.columnComment
     */
    @ApiModelProperty("患者姓名")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "患者姓名")
    private String patName;
    /**
     * $column.columnComment
     */
    @ApiModelProperty("患者编码")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "患者编码")
    private String patCode;
    /**
     * $column.columnComment
     */
    @ApiModelProperty("手机号")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "手机号")
    private String phone;
    /**
     * $column.columnComment
     */
    @ApiModelProperty("病区名称")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "病区名称")
    private String hospitaldistrictname;
    /**
     * $column.columnComment
     */
    @ApiModelProperty("病区编码")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "病区编码")
    private String hospitaldistrictcode;
    /**
     * $column.columnComment
     */
    @ApiModelProperty("部门名称")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "部门名称")
    private String deptname;
    /**
     * éƒ¨é—¨ç¼–码
     */
    @ApiModelProperty("部门编码")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "部门编码")
    private String deptcode;
    /**
@@ -126,10 +126,11 @@
     * $column.columnComment
     */
    @ApiModelProperty("护士满意度")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @Excel(name = "护士满意度")
    private double nurseSatisfaction;
    @ApiModelProperty("总分")
    @Excel(name = "总分")
    private double total;
    /**
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -76,12 +76,14 @@
     * å‡ºé™¢æ—¶é—´
     */
    @ApiModelProperty(value = "出院时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endtime;
    /**
     * å…¥é™¢æ—¶é—´
     */
    @ApiModelProperty(value = "入院时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date starttime;
    /**
@@ -573,6 +575,12 @@
    private Integer visitCount;
    /**
     * å¤è¯Šé€šçŸ¥ï¼š0已通知    1未通知
     */
    @ApiModelProperty(value = "复诊通知:0已通知    1未通知")
    private Integer visitNotice;
    /**
     * æ˜¯å¦åœ¨æ¬¡éšè®¿ï¼š1否    2是
     */
    @ApiModelProperty(value = "是否在次随访:1是    2否")
@@ -585,6 +593,7 @@
    private Integer upid;
    @ApiModelProperty(value = "随访时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date visitTime;
    /**
@@ -592,7 +601,6 @@
     */
    @ApiModelProperty(value = "随访方式")
    private String visitType;
    @ApiModelProperty(value = "随访部门编码")
@@ -603,4 +611,18 @@
    @ApiModelProperty(value = "随访部门编码集合")
    private List<String> visitDeptCodes;
    /**
     * pageNum
     */
    @Excel(name = "pn")
    @ApiModelProperty(value = "pn")
    private Integer pn;
    /**
     * pageSize
     */
    @Excel(name = "ps")
    @ApiModelProperty(value = "ps")
    private Integer ps;
}
smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
@@ -17,36 +17,28 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "服务总量")
    @Excel(name = " æœåŠ¡æ€»é‡ ")
    private Integer serviceCount = 0;
    @ApiModelProperty(value = "患者过滤量(不执行数量)")
    @Excel(name = " æ‚£è€…过滤量 ")
    private Long bzxCount = 0L;
    @ApiModelProperty(value = "应随访量")
    @Excel(name = " åº”随访量 ")
    private Long ysfCount = 0L;
    @ApiModelProperty(value = "发送失败访量")
    @Excel(name = " å‘送失败 ")
    private Long fssbCount = 0L;
    @ApiModelProperty(value = "待发送数量")
    @Excel(name = " å¾…发送 ")
    private Long dfsCount = 0L;
    @ApiModelProperty(value = "已发送数量")
    @Excel(name = " å·²å‘送 ")
    private Long yfsCount = 0L;
    @ApiModelProperty(value = "已完成数量")
    @Excel(name = " å·²å®Œæˆ ")
    private Long ywcCount = 0L;
    @ApiModelProperty(value = "随访完成率")
    @Excel(name = " éšè®¿å®Œæˆçއ ")
    private String sfwcl;
    @ApiModelProperty(value = "短信发送次数")
@@ -68,15 +60,17 @@
    private Long dhsfwcl = 0L;
    @ApiModelProperty(value = "异常总数")
    @Excel(name = " å¼‚常总数 ")
    private Long yczs = 0L;
    @ApiModelProperty(value = "回复异常数")
    @Excel(name = " å›žå¤å¼‚常数 ")
    private Long hfycs = 0L;
    @ApiModelProperty(value = "及时率")
    @Excel(name = " åŠæ—¶çއ ")
    private Double rate = 0.0;
    /**
     *   06-04新统计页面字段
     * 06-04新统计页面字段
     */
    @ApiModelProperty(value = "出院病区编号")
@@ -106,40 +100,72 @@
    private Long followUpNeeded = 0L;
    @ApiModelProperty(value = "首次应随访")
    @Excel(name = " é¦–次应随访 ")
    private Long needFollowUp = 0L;
    @ApiModelProperty(value = "首次待随访")
    @Excel(name = " é¦–次待随访 ")
    private Long pendingFollowUp = 0L;
    @ApiModelProperty(value = "首次随访成功")
    @Excel(name = " é¦–次随访成功 ")
    private Long followUpSuccess = 0L;
    @ApiModelProperty(value = "首次随访失败")
    @Excel(name = " é¦–次随访失败 ")
    private Long followUpFail = 0L;
    @ApiModelProperty(value = "首次随访率")
    @Excel(name = " é¦–次随访率 ")
    private String followUpRate;
    @ApiModelProperty(value = "首次人工")
    @Excel(name = " é¦–次人工 ")
    private Long manual = 0L;
    @ApiModelProperty(value = "首次短信")
    @Excel(name = " é¦–次短信 ")
    private Long sms = 0L;
    @ApiModelProperty(value = "首次微信")
    @Excel(name = " é¦–次微信 ")
    private Long weChat = 0L;
    @ApiModelProperty(value = "结果异常")
    private Long abnormal = 0L;
    @ApiModelProperty(value = "二次应随访")
    @Excel(name = " äºŒæ¬¡åº”随访 ")
    private Long needFollowUpAgain = 0L;
    @ApiModelProperty(value = "二次待随访")
    @Excel(name = " äºŒæ¬¡å¾…随访 ")
    private Long pendingFollowUpAgain = 0L;
    @ApiModelProperty(value = "二次随访成功")
    @Excel(name = " äºŒæ¬¡éšè®¿æˆåŠŸ ")
    private Long followUpSuccessAgain = 0L;
    @ApiModelProperty(value = "二次随访失败")
    @Excel(name = " äºŒæ¬¡éšè®¿å¤±è´¥ ")
    private Long followUpFailAgain = 0L;
    @ApiModelProperty(value = "二次随访率")
    @Excel(name = " äºŒæ¬¡éšè®¿çއ ")
    private String followUpRateAgain;
    @ApiModelProperty(value = "二次人工")
    @Excel(name = " äºŒæ¬¡äººå·¥ ")
    private Long manualAgain = 0L;
    @ApiModelProperty(value = "二次短信")
    @Excel(name = " äºŒæ¬¡çŸ­ä¿¡ ")
    private Long smsAgain = 0L;
    @ApiModelProperty(value = "二次微信")
    @Excel(name = " äºŒæ¬¡å¾®ä¿¡ ")
    private Long weChatAgain = 0L;
    @ApiModelProperty(value = "结果异常")
    private Long abnormalAgain = 0L;
smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
@@ -42,6 +42,12 @@
    private Integer visitCount;
    /**
     * å¤è¯Šé€šçŸ¥ï¼š0已通知    1未通知
     */
    @ApiModelProperty(value = "复诊通知:0已通知    1未通知")
    private Integer visitNotice;
    /**
     * æ˜¯å¦åœ¨æ¬¡éšè®¿ï¼š1否    2是
     */
    @ApiModelProperty(value = "是否在次随访:1是    2否")
@@ -603,12 +609,14 @@
     * å‡ºé™¢æ—¶é—´
     */
    @ApiModelProperty(value = "出院时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endtime;
    /**
     * å…¥é™¢æ—¶é—´
     */
    @ApiModelProperty(value = "入院时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date starttime;
@@ -695,7 +703,7 @@
     */
    @ApiModelProperty(value = "随访方式")
    private String visitType;
    @ApiModelProperty(value = "随访部门编码")
    private String visitDeptCode;
smartor/src/main/java/com/smartor/domain/SmsRecords.java
ÎļþÒÑɾ³ý
smartor/src/main/java/com/smartor/mapper/HNGatherPatArchiveMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.smartor.mapper;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.DataSourceType;
import com.smartor.domain.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * æ²³å—采集患者信息Mapper接口
 *
 * @author smartor
 * @date 2025-07-09
 */
@DataSource(value = DataSourceType.SLAVE)
@Mapper
public interface HNGatherPatArchiveMapper {
    /**
     * æŸ¥è¯¢æ‚£è€…档案列表
     *
     * @param patArchive æ‚£è€…档案
     * @return æ‚£è€…档案集合
     */
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive);
    /**
     * å‡ºå…¥é™¢ä¿¡æ¯
     *
     * @param patMedInhosp
     * @return
     */
    public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp);
    public Long selectPatMedInhospListCount(PatMedInhosp patMedInhosp);
    /**
     * é—¨æ€¥è¯Šä¿¡æ¯
     *
     * @param patMedOuthosp
     * @return
     */
    public List<PatMedOuthosp> selectPatMedOuthospList(PatMedOuthosp patMedOuthosp);
    /**
     * /**
     * æŸ¥è¯¢ç–¾ç—…列表
     *
     * @param icd10 ç–¾ç—…
     * @return ç–¾ç—…集合
     */
    public List<Icd10> selectIcd10List(Icd10 icd10);
    /**
     * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢ç”¨æˆ·åˆ—表
     *
     * @param sysUser ç”¨æˆ·ä¿¡æ¯
     * @return ç”¨æˆ·ä¿¡æ¯é›†åˆä¿¡æ¯
     */
    public List<SysUser> selectUserList(SysUser sysUser);
    /**
     * æŸ¥è¯¢éƒ¨é—¨ç®¡ç†æ•°æ®
     *
     * @param dept éƒ¨é—¨ä¿¡æ¯
     * @return éƒ¨é—¨ä¿¡æ¯é›†åˆ
     */
    public List<SysDept> selectDeptList(SysDept dept);
}
smartor/src/main/java/com/smartor/mapper/PatMedInhospMapper.java
@@ -7,6 +7,7 @@
import com.smartor.domain.PatMedReq;
import com.smartor.domain.PatMedRes;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
 * æ‚£è€…住院记录Mapper接口
@@ -44,6 +45,8 @@
     */
    public int insertPatMedInhosp(PatMedInhosp patMedInhosp);
    public int insertPatMedInhospBatch(@Param("list") List<PatMedInhosp> list);
    /**
     * ä¿®æ”¹æ‚£è€…住院记录
     *
smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -45,11 +45,28 @@
    public int insertServiceSubtask(ServiceSubtask ServiceSubtask);
    /**
     * éšè®¿åŠæ—¶çŽ‡ï¼šåº”éšè®¿æ—¶é—´<实际随访时间
     *
     * @param ServiceSubtask
     * @return
     */
    public Double selectTimelyRate(ServiceSubtask ServiceSubtask);
    /**
     * éšè®¿åŠæ—¶çŽ‡è¯¦æƒ…
     *
     * @param ServiceSubtask
     * @return
     */
    public List<ServiceSubtask> selectTimelyRateDetail(ServiceSubtask ServiceSubtask);
    /**
     * ä¿®æ”¹å•一任务(随访)
     *
     * @return ç»“æžœ
     */
    public Boolean updateServiceSubtask(ServiceSubtask ServiceSubtask);
    public Boolean updateServiceSubtaskByPatId(ServiceSubtask ServiceSubtask);
    public Boolean updateServiceSubtaskByCondition(ServiceSubtask ServiceSubtask);
smartor/src/main/java/com/smartor/service/IHNGatherPatArchiveService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.smartor.service;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.smartor.domain.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * æ²³å—采集患者信息接口
 *
 * @author smartor
 * @date 2023-03-04
 */
public interface IHNGatherPatArchiveService {
    /**
     * æŸ¥è¯¢æ‚£è€…档案列表
     *
     * @param patArchive æ‚£è€…档案
     * @return æ‚£è€…档案集合
     */
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive);
    /**
     * å‡ºå…¥é™¢ä¿¡æ¯
     *
     * @param patMedInhosp
     * @return
     */
    public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp);
    /**
     * é—¨æ€¥è¯Šä¿¡æ¯
     *
     * @param id
     * @return
     */
    public Integer selectPatMedOuthospList(PatMedOuthosp patMedOuthosp);
    /**
     * æŸ¥è¯¢ç–¾ç—…列表
     *
     * @param icd10 ç–¾ç—…
     * @return ç–¾ç—…集合
     */
    public Integer selectIcd10List(Icd10 icd10);
    /**
     * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢ç”¨æˆ·åˆ—表
     *
     * @param sysUser ç”¨æˆ·ä¿¡æ¯
     * @return ç”¨æˆ·ä¿¡æ¯é›†åˆä¿¡æ¯
     */
    public Integer selectUserList(SysUser sysUser);
    /**
     * æŸ¥è¯¢éƒ¨é—¨ç®¡ç†æ•°æ®
     *
     * @param dept éƒ¨é—¨ä¿¡æ¯
     * @return éƒ¨é—¨ä¿¡æ¯é›†åˆ
     */
    public Integer selectDeptList(SysDept dept);
}
smartor/src/main/java/com/smartor/service/IServiceTaskService.java
@@ -4,6 +4,7 @@
import java.util.Map;
import com.smartor.domain.IvrLibaTemplateScriptVO;
import com.smartor.domain.ServiceSubtask;
import com.smartor.domain.ServiceTask;
import com.smartor.domain.SvyLibTemplateScriptVO;
@@ -65,6 +66,11 @@
    public Boolean deleteServiceTaskByTaskid(Long taskid);
    /**
     * èŽ·å–éšè®¿åŠæ—¶çŽ‡
     */
    public Map<String, Object> selectTimelyRate(ServiceSubtask serviceSubtask);
    /**
     * @param taskid
     * @param patid
     * @return
smartor/src/main/java/com/smartor/service/impl/CommonTaskServiceImpl.java
@@ -10,9 +10,7 @@
import com.smartor.domain.*;
import com.smartor.mapper.ServiceSubtaskMapper;
import com.smartor.service.CommonTaskService;
import com.smartor.service.IServiceSubtaskService;
import com.smartor.service.IServiceTaskService;
import com.smartor.service.ISvyTaskService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -20,7 +18,6 @@
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
smartor/src/main/java/com/smartor/service/impl/HNGatherPatArchiveServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
package com.smartor.service.impl;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.*;
import com.smartor.mapper.*;
import com.smartor.service.IHNGatherPatArchiveService;
import com.smartor.service.IPatArchiveService;
import com.smartor.service.IPatMedInhospService;
import com.smartor.service.IPatMedPhysicalService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.FileOutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
 * æ‚£è€…档案Service业务层处理
 *
 * @author smartor
 * @date 2023-03-04
 */
@Slf4j
@Service
public class HNGatherPatArchiveServiceImpl implements IHNGatherPatArchiveService {
    @Autowired
    private HNGatherPatArchiveMapper hnGatherPatArchiveMapper;
    @Autowired
    private SysUser2Mapper sysUser2Mapper;
    @Autowired
    private SysDept2Mapper sysDept2Mapper;
    @Autowired
    private Icd10Mapper icd10Mapper;
    @Autowired
    private PatMedOuthospMapper patMedOuthospMapper;
    @Autowired
    private PatMedInhospMapper patMedInhospMapper;
    @Override
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
        return hnGatherPatArchiveMapper.selectPatArchiveList(patArchive);
    }
    @Override
    public Integer selectPatMedInhospList(PatMedInhosp patMedInhosp) {
        Long count = hnGatherPatArchiveMapper.selectPatMedInhospListCount(null);
        Long aa = (count + 1000 - 1) / 1000;
        //进行分页查询
        for (int i = 0; i <= aa; i++) {
            patMedInhosp.setPs(1000);
            patMedInhosp.setPn(1000 * i);
            List<PatMedInhosp> patMedInhospList = hnGatherPatArchiveMapper.selectPatMedInhospList(patMedInhosp);
            if (patMedInhospList != null && !patMedInhospList.isEmpty()) {
                patMedInhospMapper.insertPatMedInhospBatch(patMedInhospList);
            }
        }
        return null;
    }
    @Override
    public Integer selectPatMedOuthospList(PatMedOuthosp patMedOuthosp) {
        List<PatMedOuthosp> patMedOuthosps = hnGatherPatArchiveMapper.selectPatMedOuthospList(patMedOuthosp);
        log.info("selectPatMedOuthospList的采集到的数量为:{}", patMedOuthosps.size());
        int i = patMedOuthospMapper.batchPatMedOuthosp(patMedOuthosps);
        return i;
    }
    @Override
    public Integer selectIcd10List(Icd10 icd10) {
        List<Icd10> icd10s = hnGatherPatArchiveMapper.selectIcd10List(icd10);
        log.info("selectIcd10List的采集到的数量为:{}", icd10s.size());
        int i = icd10Mapper.batchIcd10(icd10s);
        return i;
    }
    @Override
    public Integer selectUserList(SysUser sysUser) {
        List<SysUser> sysUserList = hnGatherPatArchiveMapper.selectUserList(sysUser);
        log.info("sysUserList的采集到的数量为:{}", sysUserList.size());
        int i = sysUser2Mapper.batchUser(sysUserList);
        return i;
    }
    @Override
    public Integer selectDeptList(SysDept dept) {
        List<SysDept> sysDepts = hnGatherPatArchiveMapper.selectDeptList(dept);
        log.info("selectDeptList的采集到的数量为:{}", sysDepts.size());
        int i = sysDept2Mapper.batchDept(sysDepts);
        return i;
    }
}
smartor/src/main/java/com/smartor/service/impl/IvrLibaTemplateServiceImpl.java
@@ -39,9 +39,6 @@
    @Autowired
    private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
    @Autowired
    private TemplateDeptMapper tempDetpRelevanceMapper;
    /**
     * æŸ¥è¯¢æ¨¡æ¿åº“
     *
@@ -179,25 +176,12 @@
            }
        }
        //对科室进行处理
        for (TemplateDept tempDetpRelevance : ivrLibaTemplateVO.getTempDetpRelevances()) {
            if (tempDetpRelevance.getId() == null) {
                //新增
                tempDetpRelevance.setTempid(ivrLibaTemplate.getId());
                tempDetpRelevance.setType(2L);
                tempDetpRelevance.setCreateTime(new Date());
                tempDetpRelevanceMapper.insertTemplateDept(tempDetpRelevance);
            } else {
                tempDetpRelevance.setUpdateTime(new Date());
                tempDetpRelevanceMapper.updateTemplateDept(tempDetpRelevance);
            }
        }
        return i;
    }
    private IvrLibaTemplateScript scriptHandle(IvrLibaTemplate ivrLibaTemplate, IvrLibaTemplateScriptVO ivrLibaTemplateScriptVO, Integer isoperation) {
        IvrLibaTemplateScript ivrLibaTemplateScript = DtoConversionUtils.sourceToTarget(ivrLibaTemplateScriptVO, IvrLibaTemplateScript.class);
        ivrLibaTemplateScript.setScriptno(ivrLibaTemplateScript.getSort());
        if (isoperation == 1) {
            //新增
            ivrLibaTemplateScript.setTemplateid(ivrLibaTemplate.getId());
smartor/src/main/java/com/smartor/service/impl/IvrTaskTemplateServiceImpl.java
@@ -11,7 +11,6 @@
import com.smartor.mapper.IvrTaskTemplateMapper;
import com.smartor.mapper.IvrTaskTemplateScriptMapper;
import com.smartor.mapper.IvrTaskTemplateTargetoptionMapper;
import com.smartor.mapper.TemplateDeptMapper;
import com.smartor.service.IIvrTaskTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -41,8 +40,6 @@
    @Autowired
    private IvrTaskTemplateTargetoptionMapper ivrTaskTemplateTargetoptionMapper;
    @Autowired
    private TemplateDeptMapper templateDeptMapper;
    /**
     * æŸ¥è¯¢éšè®¿ä»»åŠ¡éšè®¿æ¨¡æ¿åº“
@@ -177,16 +174,6 @@
     */
    @Override
    public int deleteIvrTaskTemplateByIDs(Long[] IDs) {
        if (IDs[0] != null) {
            IvrTaskTemplate ivrTaskTemplate = selectIvrTaskTemplateByID(IDs[0]);
            if (StringUtils.isNotEmpty(ivrTaskTemplate.getLongTemp()) && ivrTaskTemplate.getLongTemp().equals("1")) {
                //如果这个模板是长期任务,则需要删除模板与部门的关联
                TemplateDept templateDept = new TemplateDept();
                templateDept.setType(21L);
                templateDept.setTempid(IDs[0]);
                templateDeptMapper.deleteTemplateDeptByTemplateId(templateDept);
            }
        }
        return ivrTaskTemplateMapper.deleteIvrTaskTemplateByIDs(IDs);
    }
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -396,6 +396,9 @@
        //新增患者基本信息新增或修改
        PatArchive patArchive = addPatArchive(externalInHospPatientInfo, externalInHospPatientAddrInfo, externalInHospPatientLiaisonInfo);
        PatMedInhosp patMedInhosp = new PatMedInhosp();
        patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
        patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
@@ -939,12 +942,13 @@
            // 4. æ–°å»º(此时只剩冷表,PatMedOuthosp没了,需要新建一个)
            patMedOuthospMapper.createPatMedOuthosp(newName, oldName);
            //设置新表自增主键
            //5.设置新表自增主键
            patMedOuthospMapper.createPatMedOuthospAutoAdd(oldName);
            // 5. è®¾ç½®æ–°è¡¨è‡ªå¢žèµ·å§‹å€¼
            //6. è®¾ç½®æ–°è¡¨è‡ªå¢žèµ·å§‹å€¼
            patMedOuthospMapper.setAutoIncrement(oldName, maxId + 1);
            // 6. æ›´æ–°/新建视图
            // 7. æ›´æ–°/新建视图
            // é‡æ–°èŽ·å–æ‰€æœ‰è¡¨åï¼ˆåŒ…å«åˆšæ–°å»ºçš„ä¸»è¡¨ï¼‰
            List<String> allTables = patMedOuthospMapper.getAllOuthospTableNames();
            StringBuilder sb = new StringBuilder();
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailServiceImpl.java
@@ -109,7 +109,8 @@
                }
            }
        }
        Collections.sort(serviceSubtaskDetailSET, Comparator.comparingLong(ServiceSubtaskDetail::getTemplatequestionnum));
        Collections.sort(serviceSubtaskDetailSET,
                Comparator.comparing(ServiceSubtaskDetail::getTemplatequestionnum, Comparator.nullsLast(Long::compareTo)));
        map1.put("filteredDetails", serviceSubtaskDetailSET);
        map1.put("voice", "");
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -1243,6 +1243,7 @@
                    }
                    break;
                }
                log.info("是否需要挂机:{}", les);
                if (ObjectUtils.isNotEmpty(les)) {
                    //对匹配的结果处理一下(看看是不是需要挂机)
                    if (les.getIsEnd() != null && les.getIsEnd() == 1) {
@@ -1301,6 +1302,7 @@
                    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()) {
                        //说明匹配正确了
                        //这里应该先判断类型,去再修改,设置IsUserOperation是单选题的改法
                        log.info("匹配正确了吗--------------");
                        ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j).setIsUserOperation(1);
                        serviceTaskScriptTargetoptionMapper.updateIvrTaskTemplateTargetoption(ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().get(j));
@@ -1389,8 +1391,9 @@
                                if (script.getSort() == nextQuestion.intValue()) {
                                    phoneCallBackYQVO.setType("text");
                                    phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
                                    String scriptContent = script.getIvrtext();
                                    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);
@@ -1429,6 +1432,7 @@
                        }
                    } else {
                        log.info("没有匹配上----------------------------");
                        //flag=0,说明没 åŒ¹é…ä¸Šï¼Œä¹Ÿè¦æŠŠæ‚£è€…说的话记录下来
                        if (j == ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList().size() - 1 && flag == 0) {
                            ServiceSubTaskDetailReq serviceSubTaskDetailReq = new ServiceSubTaskDetailReq();
@@ -1456,6 +1460,7 @@
                }
                //都没有匹配到
                if (StringUtils.isEmpty(phoneCallBackYQVO.getValue())) {
                    log.info("都没有匹配到-------------------------");
                    Integer count = null;
                    Object countObj = redisCache.getCacheObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
                    if (ObjectUtils.isNotEmpty(countObj)) count = (Integer) countObj;
@@ -1486,9 +1491,11 @@
                            //去redis中,把该子任务ID删除
                            Long id = serviceSubtask.getId();
                            Map<String, String> map = delRedisValue(null, id.toString());
                            redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                            redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                            redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            if (ObjectUtils.isNotEmpty(map)) {
                                redisCache.setCacheObject(map.get("cacheName"), map.get("val"));
                                redisCache.deleteObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone());
                                redisCache.deleteObject(phoneCallReqYQVO.getUuid() + "SCORE");
                            }
//                            return phoneCallBackYQVO;
                        } else {
                            //根据ivrTaskTemplateScriptVO.getNextScriptno()获取下一题进行提问
@@ -1496,7 +1503,7 @@
                                if (script.getSort() == ivrTaskTemplateScriptVO.getNextScriptno().intValue()) {
                                    phoneCallBackYQVO.setType("text");
                                    phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
                                    String scriptContent = script.getIvrtext();
                                    String scriptContent = StringUtils.isNotEmpty(script.getIvrtext()) ? script.getIvrtext() : script.getScriptContent();
                                    phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
                                    //将该患者的Redis中的题目ID,进行修改
                                    redisCache.setCacheObject(phoneCallReqYQVO.getTaskid().trim() + "-" + phoneCallReqYQVO.getPhone().trim(), script.getId().toString(), 120, TimeUnit.MINUTES);
@@ -1550,7 +1557,8 @@
                        if (ivrTaskTemplateScriptVO.getNextScriptno().intValue() == ivrTaskTemplateScript1.getSort()) {
                            phoneCallBackYQVO.setType("text");
                            phoneCallBackYQVO.setSilent_interval(ivrTaskTemplate.getSilencetime().intValue());
                            String scriptContent = ivrTaskTemplateScript1.getIvrtext();
                            String scriptContent = StringUtils.isNotEmpty(ivrTaskTemplateScript1.getIvrtext()) ? ivrTaskTemplateScript1.getIvrtext() : ivrTaskTemplateScript1.getScriptContent();
                            phoneCallBackYQVO.setValue(phoneCallBackYQVO.getCommonValue() + getObject(serviceSubtask, scriptContent));
                            redisCache.deleteObject(phoneCallReqYQVO.getTaskid().trim() + "&&" + "mate" + "&&" + phoneCallReqYQVO.getUuid());
                            redisCache.setCacheObject(serviceSubtask.getId() + "-" + serviceSubtask.getPhone(), ivrTaskTemplateScript1.getId().toString());
@@ -1603,6 +1611,9 @@
            for (String key : map.keySet()) {
                scriptContent = scriptContent.replace(key, StringUtils.isNotEmpty(map.get(key)) ? map.get(key) : "");
            }
        }
        if (StringUtils.isEmpty(scriptContent)) {
            return scriptContent;
        }
        scriptContent = scriptContent.replace("${name}", StringUtils.isNotEmpty(serviceSubtask.getSendname()) ? serviceSubtask.getSendname() : "");
        scriptContent = scriptContent.replace("${dzz}", StringUtils.isNotEmpty(serviceSubtask.getAddr()) ? serviceSubtask.getAddr() : "");
@@ -1676,10 +1687,9 @@
        //必须等ache-exist全部打完才能拉取下一批(主要是怕所有的数据都堆在电话的缓存里,在规定的时间打不完)
        long existSize = listOps.size("cache-exist");
        if (existSize > 0) return pullTaskVOList;
        int count = 0;
        long size = listOps.size("cache-0");
        log.error("---------打电话之前缓存中的数据量:{}", size);
        int count = 0;
        if (size > 0) {
            //phoneCount()  é€šè¿‡ç»™å‡ºçš„æ¯ä¸ªå°æ—¶éœ€è¦æ‰“出的电话量,算出到晚上8点一点能打出多少个电话,获取到总量
            //如果需要立即执行的数据量大于一天要执行的上限,则只取上限的数量,其它的则放回redis中
@@ -1688,6 +1698,7 @@
                cacheList = listOps.range("cache-0", 0, count - 1);
            }
        }
        log.error("任务拉取cache-0的值是多少:{}", cacheList);
        //  cache-0为立即发起的,其它的先推迟
@@ -1699,17 +1710,21 @@
        } else {
            for (int i = 1; i < 6; i++) {
                //取出从cache-1 åˆ° cache-5的第一个子任务信息
                Long size1 = listOps.size("cache-" + i);
                if (size1 == null || size1 == 0) continue;
                int count1 = Math.min(phoneCount(), size1.intValue());
                List<String> value = listOps.range("cache-0" + i, 0, count1 - 1);
                try {
                    Long size1 = listOps.size("cache-" + i);
                    if (size1 == null || size1 == 0) continue;
                    int count1 = Math.min(phoneCount(), size1.intValue());
                    List<String> value = listOps.range("cache-0" + i, 0, count1 - 1);
                List<PullTaskVO> pullTaskVOList2 = getPullTaskList(value, "cache-" + i);
                if (CollectionUtils.isNotEmpty(pullTaskVOList2) && pullTaskVOList2.size() > 0) {
                    pullTaskVOList.addAll(pullTaskVOList2);
                    List<PullTaskVO> pullTaskVOList2 = getPullTaskList(value, "cache-" + i);
                    if (CollectionUtils.isNotEmpty(pullTaskVOList2) && pullTaskVOList2.size() > 0) {
                        pullTaskVOList.addAll(pullTaskVOList2);
                    }
                    //将处理过的数据删除
                    listOps.trim("cache-0" + i, count1, -1);
                } catch (Exception e) {
//                    log.error("看着烦");
                }
                //将处理过的数据删除
                listOps.trim("cache-0" + i, count1, -1);
            }
        }
        //existList用来记录接下来需要执行的子任务ID
@@ -2068,7 +2083,7 @@
                    ServiceSubtaskDetail ssd = new ServiceSubtaskDetail();
                    ssd.setSubId(serviceSubtaskDetail.getSubId());
                    ssd.setTaskid(serviceSubtaskDetail.getTaskid());
                    ssd.setTemplatequestionnum(serviceSubtaskDetail.getTemplatequestionnum());
                    ssd.setScriptid(serviceSubtaskDetail.getScriptid());
                    if (serviceSubtaskDetail.getSubId() != null) {
                        ServiceSubtask serviceSubtask = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtaskDetail.getSubId());
                        ssd.setGuid(serviceSubtask.getGuid());
@@ -2194,6 +2209,23 @@
                continue;
            }
            ServiceSubtaskStatistic statistic = getStatistic(serviceSubtaskList);
            //及时率
            ServiceSubtask ss = new ServiceSubtask();
            ss.setOrgid(serviceSubtaskList.get(0).getOrgid());
            if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
                ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
            } else {
                ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
            }
            ss.setStarttime(serviceSubtaskCountReq.getStartTime());
            ss.setEndtime(serviceSubtaskCountReq.getEndTime());
            if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
                ss.setEndtime(new Date());
            }
            Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss);
            statistic.setRate(jsRate);
            if (ObjectUtils.isNotEmpty(statistic)) {
                serviceSubtaskStatistics.add(statistic);
            }
@@ -2220,6 +2252,7 @@
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
                serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L);
            }
            //首次出院随访
            if (serviceSubtask.getVisitCount() != null && serviceSubtask.getVisitCount() == 1) {
                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
@@ -2288,48 +2321,6 @@
        }
        /*serviceSubtaskStatistic.setServiceCount(serviceSubtaskList.size());
        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
            //不随访数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                serviceSubtaskStatistic.setBzxCount(serviceSubtaskStatistic.getBzxCount() + 1L);
            }
            //应随访数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
                serviceSubtaskStatistic.setYsfCount(serviceSubtaskStatistic.getYsfCount() + 1L);
            }
            //发送失败数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
                serviceSubtaskStatistic.setFssbCount(serviceSubtaskStatistic.getFssbCount() + 1L);
            }
            //待发送数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
                serviceSubtaskStatistic.setDfsCount(serviceSubtaskStatistic.getDfsCount() + 1L);
            }
            //已发送数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 3) {
                serviceSubtaskStatistic.setYfsCount(serviceSubtaskStatistic.getYfsCount() + 1L);
            }
            //已完成数量
            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 6) {
                //已发送,包含已完成
                serviceSubtaskStatistic.setYfsCount(serviceSubtaskStatistic.getYfsCount() + 1L);
                serviceSubtaskStatistic.setYwcCount(serviceSubtaskStatistic.getYwcCount() + 1L);
            }
            if (StringUtils.isNotEmpty(serviceSubtask.getExcep()) && serviceSubtask.getExcep().equals("1")) {
                //异常标识
                serviceSubtaskStatistic.setYczs(serviceSubtaskStatistic.getYczs() + 1L);
            }
        }
        //随访完成率=已完成/应随访量
        if (serviceSubtaskStatistic.getYwcCount() == 0 || CollectionUtils.isEmpty(serviceSubtaskList)) {
            serviceSubtaskStatistic.setSfwcl("0");
        } else {
//            BigDecimal multiply = BigDecimal.valueOf(serviceSubtaskStatistic.getYfsCount()).divide(BigDecimal.valueOf(serviceSubtaskList.size()), 2, BigDecimal.ROUND_HALF_UP);
            BigDecimal multiply = new BigDecimal(serviceSubtaskStatistic.getYwcCount().toString()).divide(new BigDecimal(serviceSubtaskStatistic.getYsfCount().toString()), 2, BigDecimal.ROUND_HALF_UP);
            serviceSubtaskStatistic.setSfwcl(multiply.toString());
        }*/
        return serviceSubtaskStatistic;
@@ -2347,6 +2338,8 @@
    }
    private ServiceSubtaskDetail getServiceSubtaskDetail(PhoneCallReqYQVO phoneCallReqYQVO, IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, ServiceSubtask serviceSubtask, IvrTaskTemplate ivrTaskTemplate) {
        log.info("-----------------phoneCallReqYQVO的值为:{}", phoneCallReqYQVO);
        ServiceSubtaskDetail serviceSubtaskDetail = new ServiceSubtaskDetail();
        serviceSubtaskDetail.setSubId(Long.valueOf(phoneCallReqYQVO.getTaskid()));
        ServiceSubtask serviceSubtask1 = serviceSubtaskMapper.selectServiceSubtaskById(Long.valueOf(phoneCallReqYQVO.getTaskid()));
@@ -2370,7 +2363,7 @@
        serviceSubtaskDetail.setSentEnd(1L);
        serviceSubtaskDetail.setTemplateid(ivrTaskTemplate.getId().toString());
        serviceSubtaskDetail.setTemplatequestionnum(ivrTaskTemplateScriptVO.getScriptno());
        serviceSubtaskDetail.setQuestiontext(ivrTaskTemplateScriptVO.getIvrtext());
        serviceSubtaskDetail.setQuestiontext(StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext()) ? ivrTaskTemplateScriptVO.getIvrtext() : ivrTaskTemplateScriptVO.getScriptContent());
        serviceSubtaskDetail.setQuestionvoice(phoneCallReqYQVO.getRecordpath());
        serviceSubtaskDetail.setCategoryname(ivrTaskTemplateScriptVO.getScriptType());
        serviceSubtaskDetail.setTargetoptions(ivrTaskTemplateScriptVO.getTargetOptions());
smartor/src/main/java/com/smartor/service/impl/ServiceTaskServiceImpl.java
@@ -187,6 +187,37 @@
        return isSuccess;
    }
    /**
     * èŽ·å–éšè®¿åŠæ—¶çŽ‡
     *
     * @param serviceSubtask
     * @return
     */
    public Map<String, Object> selectTimelyRate(ServiceSubtask serviceSubtask) {
        if (serviceSubtask.getEndtime() != null && new Date().before(serviceSubtask.getEndtime())) {
            serviceSubtask.setEndtime(new Date());
        }
        Double dob = serviceSubtaskMapper.selectTimelyRate(serviceSubtask);
        // 1. æŸ¥è¯¢å…¨éƒ¨æ•°æ®ï¼ˆSQL不分页)
        List<ServiceSubtask> allList = serviceSubtaskMapper.selectTimelyRateDetail(serviceSubtask);
        // 2. Java代码分页
        int pageNum = serviceSubtask.getPn() != null ? serviceSubtask.getPn() : 1;
        int pageSize = serviceSubtask.getPs() != null ? serviceSubtask.getPs() : 10;
        int fromIndex = (pageNum - 1) * pageSize;
        int toIndex = Math.min(fromIndex + pageSize, allList.size());
        List<ServiceSubtask> pageList = new ArrayList<>();
        if (fromIndex < allList.size()) {
            pageList = allList.subList(fromIndex, toIndex);
        }
        log.info("代码分页参数: pageNum={}, pageSize={}, fromIndex={}, toIndex={}, total={}", pageNum, pageSize, fromIndex, toIndex, allList.size());
        Map<String, Object> map = new HashMap<>();
        map.put("rate", dob);
        map.put("detail", pageList);
        map.put("total", allList.size()); // å¯é€‰ï¼šè¿”回总数
        return map;
    }
    @Override
    public Map<String, Object> getScriptInfoByCondition(Long taskid, Long patid, Boolean isFinish, String patfrom) {
        Map<String, Object> map = new HashMap<>();
@@ -303,7 +334,7 @@
                ivrLibaTemplateScriptVO.setIvrLibaScriptTargetoptionList(ivrLibaTemplateTargetoptions);
            }
        }
        Collections.sort(ivrLibaTemplateScriptVOS, Comparator.comparingInt(IvrLibaTemplateScriptVO::getSort));
        Collections.sort(ivrLibaTemplateScriptVOS, Comparator.comparingLong(IvrLibaTemplateScriptVO::getSort));
        return ivrLibaTemplateScriptVOS;
    }
smartor/src/main/java/com/smartor/service/impl/SmsRecordsServiceImpl.java
ÎļþÒÑɾ³ý
smartor/src/main/java/com/smartor/service/impl/SvyLibTemplateServiceImpl.java
@@ -33,8 +33,6 @@
    @Autowired
    private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
    @Autowired
    private TemplateDeptMapper templateDeptMapper;
    @Autowired
    private SvyLibTemplateTagMapper svyLibTemplateTagMapper;
    @Autowired
    private Icd10AssociationMapper icd10AssociationMapper;
@@ -108,12 +106,6 @@
            }
            //将题目放到问卷列表中
            svyLibTemplateVOS.get(i).setSvyTemplateLibScripts(svyLibTemplateScripts);
            //获取每个问卷对应的科室
            TemplateDept templateDept = new TemplateDept();
            templateDept.setTempid(svyLibTemplateVOS.get(i).getSvyid());
            List<TemplateDept> tempDetpRelevances = templateDeptMapper.selectTemplateDeptList(templateDept);
            svyLibTemplateVOS.get(i).setTempDetpRelevances(CollectionUtils.isNotEmpty(tempDetpRelevances) ? tempDetpRelevances : new ArrayList<>());
            //获取标签
            SvyLibTemplateTag svyLibTemplateTag = new SvyLibTemplateTag();
@@ -211,22 +203,6 @@
                    }
                }
            }
        }
        if (CollectionUtils.isNotEmpty(svyLibTemplate.getTempDetpRelevances())) {
            for (TemplateDept tempDetpRelevance : svyLibTemplate.getTempDetpRelevances()) {
                tempDetpRelevance.setGuid(svyLibTemplateVO.getGuid());
                tempDetpRelevance.setOrgid(svyLibTemplateVO.getOrgid());
                if (tempDetpRelevance.getId() == null) {
                    //新增
                    tempDetpRelevance.setTempid(svyLibTemplate.getSvyid());
                    tempDetpRelevance.setType(1L);
                    templateDeptMapper.insertTemplateDept(tempDetpRelevance);
                } else {
                    templateDeptMapper.updateTemplateDept(tempDetpRelevance);
                }
            }
        }
        //标签处理
smartor/src/main/java/com/smartor/service/impl/SvyTaskSingleServiceImpl.java
@@ -279,6 +279,7 @@
        serviceSubtask.setDeptname(serviceTaskVO.getDeptname());
        serviceSubtask.setDeptcode(serviceTaskVO.getDeptcode());
        serviceSubtask.setSendstate(6L);
        serviceSubtask.setVisitTime(serviceTaskVO.getVisittime());
        serviceSubtask.setCreateTime(new Date());
        serviceSubtask.setLeavehospitaldistrictcode(serviceTaskVO.getDistrictcode());
        //先查询一遍,该taskGuid是否存在
@@ -343,9 +344,9 @@
            String jsonString = objectMapper.writeValueAsString(serviceQueryInfo);
            log.error("token的值为:{}", token);
            if (serviceQueryInfo.getXiaoXiTou().getFaSongJGID().equals("47255004333112711A1001"))  //景宁
            result = OkHttpExample.sendPostRequest("https://9.0.124.104:13021/mediinfo-grus-fuwuzxwg/api/esb/lyraSyncRun", jsonString, token);
                result = OkHttpExample.sendPostRequest("https://9.0.124.104:13021/mediinfo-grus-fuwuzxwg/api/esb/lyraSyncRun", jsonString, token);
            if (serviceQueryInfo.getXiaoXiTou().getFaSongJGID().equals("47231022633110211A2101"))  //中医院
            result = OkHttpExample.sendPostRequest("https://9.0.124.104:13011/mediinfo-grus-fuwuzxwg/api/esb/lyraSyncRun", jsonString, token);
                result = OkHttpExample.sendPostRequest("https://9.0.124.104:13011/mediinfo-grus-fuwuzxwg/api/esb/lyraSyncRun", jsonString, token);
            map = objectMapper.readValue(result, Map.class);
        } catch (Exception e) {
            e.printStackTrace();
smartor/src/main/resources/mapper/smartor/HNGatherPatArchiveMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,611 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smartor.mapper.HNGatherPatArchiveMapper">
    <resultMap type="com.smartor.domain.PatArchive" id="PatArchiveResult">
        <result property="id" column="id"/>
        <result property="patientno" column="patientno"/>
        <result property="sourcefrom" column="sourcefrom"/>
        <result property="notrequiredFlag" column="notrequired_flag"/>
        <result property="notrequiredreason" column="notrequiredreason"/>
        <result property="patidHis" column="patid_his"/>
        <result property="sdFlag" column="sd_flag"/>
        <result property="pattype" column="pattype"/>
        <result property="viptype" column="viptype"/>
        <result property="name" column="name"/>
        <result property="sex" column="sex"/>
        <result property="nation" column="nation"/>
        <result property="nativePlace" column="native_place"/>
        <result property="placeOfResidence" column="place_of_residence"/>
        <result property="birthplace" column="birthplace"/>
        <result property="idcardno" column="idcardno"/>
        <result property="birthdate" column="birthdate"/>
        <result property="age" column="age"/>
        <result property="age2" column="age2"/>
        <result property="sourcefrom" column="sourcefrom"/>
        <result property="archivetime" column="archivetime"/>
        <result property="archiveby" column="archiveby"/>
        <result property="telcode" column="telcode"/>
        <result property="relativetelcode" column="relativetelcode"/>
        <result property="idcardtype" column="idcardtype"/>
        <result property="orgid" column="orgid"/>
        <result property="openid" column="openid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="dept" column="deptname"/>
        <result property="deptcode" column="deptcode"/>
        <result property="drcode" column="drcode"/>
        <result property="drname" column="drname"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="isupload" column="isupload"/>
        <result property="uploadTime" column="upload_time"/>
        <result property="tag" column="tag"/>
        <result property="pattype" column="pattype"/>
        <result property="bedNo" column="bedno"/>
        <result property="inhosptime" column="inhosptime"/>
        <result property="ageUnit" column="age_unit"/>
        <result property="ageUnit2" column="age_unit2"/>
        <result property="leavehospitaldistrictname" column="leavehospitaldistrictname"/>
        <result property="leavehospitaldistrictcode" column="leavehospitaldistrictcode"/>
        <result property="careFacilities" column="care_facilities"/>
        <result property="casePath" column="case_path"/>
        <result property="degreeOfEducation" column="degree_of_education"/>
        <result property="maritalStatus" column="marital_status"/>
        <result property="income" column="income"/>
        <result property="medicareType" column="medicare_type"/>
        <result property="carePerson" column="care_person"/>
        <result property="casePersonAge" column="case_person_age"/>
        <result property="guid" column="guid"/>
        <result property="filterDrname" column="filter_drname"/>
        <result property="filterDrcode" column="filter_drcode"/>
    </resultMap>
    <resultMap type="com.smartor.domain.PatArchiveOthreInfo" id="PatArchiveOthreInfoResult">
        <result property="id" column="id"/>
        <result property="notrequiredFlag" column="notrequired_flag"/>
        <result property="notrequiredreason" column="notrequiredreason"/>
        <result property="patientno" column="patientno"/>
        <result property="sourcefrom" column="sourcefrom"/>
        <result property="patidHis" column="patid_his"/>
        <result property="sdFlag" column="sd_flag"/>
        <result property="pattype" column="pattype"/>
        <result property="viptype" column="viptype"/>
        <result property="name" column="name"/>
        <result property="sex" column="sex"/>
        <result property="nation" column="nation"/>
        <result property="nativePlace" column="native_place"/>
        <result property="placeOfResidence" column="place_of_residence"/>
        <result property="birthplace" column="birthplace"/>
        <result property="idcardno" column="idcardno"/>
        <result property="birthdate" column="birthdate"/>
        <result property="age" column="age"/>
        <result property="age2" column="age2"/>
        <result property="sourcefrom" column="sourcefrom"/>
        <result property="archivetime" column="archivetime"/>
        <result property="archiveby" column="archiveby"/>
        <result property="telcode" column="telcode"/>
        <result property="relativetelcode" column="relativetelcode"/>
        <result property="idcardtype" column="idcardtype"/>
        <result property="orgid" column="orgid"/>
        <result property="openid" column="openid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="dept" column="deptname"/>
        <result property="deptcode" column="deptcode"/>
        <result property="drcode" column="drcode"/>
        <result property="drname" column="drname"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="isupload" column="isupload"/>
        <result property="uploadTime" column="upload_time"/>
        <result property="tag" column="tag"/>
        <result property="pattype" column="pattype"/>
        <result property="bedNo" column="bedno"/>
        <result property="starttime" column="starttime"/>
        <result property="endtime" column="endtime"/>
        <result property="ageUnit" column="age_unit"/>
        <result property="ageUnit2" column="age_unit2"/>
        <result property="inhospno" column="inhospno"/>
        <result property="nurseId" column="nurse_id"/>
        <result property="nurseName" column="nurse_name"/>
        <result property="outWayName" column="out_way_name"/>
        <result property="outWayId" column="out_way_id"/>
        <result property="leavehospitaldistrictname" column="leavehospitaldistrictname"/>
        <result property="leavehospitaldistrictcode" column="leavehospitaldistrictcode"/>
        <result property="guid" column="guid"/>
        <result property="leavediagname" column="leavediagname"/>
        <result property="leaveicd10code" column="leaveicd10code"/>
        <result property="filterDrname" column="filter_drname"/>
        <result property="filterDrcode" column="filter_drcode"/>
    </resultMap>
    <resultMap type="com.smartor.domain.PatMedInhosp" id="PatMedInhospResult">
        <result property="inhospid" column="inhospid"/>
        <result property="inhospno" column="inhospno"/>
        <result property="serialnum" column="serialnum"/>
        <result property="hospitalname" column="hospitalname"/>
        <result property="hospitalcode" column="hospitalcode"/>
        <result property="hospitaldistrictcode" column="hospitaldistrictcode"/>
        <result property="hospitaldistrictname" column="hospitaldistrictname"/>
        <result property="icd10code" column="icd10code"/>
        <result property="diagname" column="diagname"/>
        <result property="starttime" column="starttime"/>
        <result property="endtime" column="endtime"/>
        <result property="deptcode" column="deptcode"/>
        <result property="deptname" column="deptname"/>
        <result property="roomno" column="roomno"/>
        <result property="bedNo" column="bed_no"/>
        <result property="orgid" column="orgid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="isupload" column="isupload"/>
        <result property="uploadTime" column="upload_time"/>
        <result property="patid" column="patid"/>
        <result property="leavediagname" column="leavediagname"/>
        <result property="leaveicd10code" column="leaveicd10code"/>
        <result property="drcode" column="drcode"/>
        <result property="drname" column="drname"/>
        <result property="schemestatus" column="schemestatus"/>
        <result property="generalschemestatus" column="generalschemestatus"/>
        <result property="leaveldeptcode" column="leaveldeptcode"/>
        <result property="leaveldeptname" column="leaveldeptname"/>
        <result property="hospitaldistrictid" column="hospitaldistrictid"/>
        <result property="leavehospitaldistrictcode" column="leavehospitaldistrictcode"/>
        <result property="leavehospitaldistrictname" column="leavehospitaldistrictname"/>
        <result property="leavehospitaldistrictid" column="leavehospitaldistrictid"/>
        <result property="deptid" column="deptid"/>
        <result property="leaveldeptid" column="leaveldeptid"/>
        <result property="schemetime" column="schemetime"/>
        <result property="patname" column="patname"/>
        <result property="patno" column="patno"/>
        <result property="inhospstate" column="inhospstate"/>
        <result property="deptcheckFlag" column="deptcheck_flag"/>
        <result property="wardcheckFlag" column="wardcheck_flag"/>
        <result property="diagcheckFlag" column="diagcheck_flag"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
        <result property="telcode" column="telcode"/>
        <result property="longTaskReason" column="long_task_reason"/>
        <result property="nurseId" column="nurse_id"/>
        <result property="nurseName" column="nurse_name"/>
        <result property="outWayId" column="out_way_id"/>
        <result property="outWayName" column="out_way_name"/>
        <result property="guid" column="guid"/>
        <result property="operator" column="operator"/>
        <result property="operatorId" column="operator_id"/>
        <result property="remark" column="remark"/>
        <result property="tagname" column="tagname"/>
        <result property="fuflag" column="fuflag"/>
        <result property="fudate" column="fudate"/>
        <result property="fuperiod" column="fuperiod"/>
        <result property="futypecode" column="futypecode"/>
        <result property="futypedesc" column="futypedesc"/>
        <result property="fuadvice" column="fuadvice"/>
        <result property="fuspecialadvice" column="fuspecialadvice"/>
    </resultMap>
    <resultMap type="com.smartor.domain.PatMedOuthosp" id="PatMedOuthospResult">
        <result property="id" column="id"/>
        <result property="serialnum" column="serialnum"/>
        <result property="patid" column="patid"/>
        <result property="hospitalname" column="hospitalname"/>
        <result property="hospitalcode" column="hospitalcode"/>
        <result property="icd10code" column="icd10code"/>
        <result property="diagname" column="diagname"/>
        <result property="deptcode" column="deptcode"/>
        <result property="deptname" column="deptname"/>
        <result property="drcode" column="drcode"/>
        <result property="drname" column="drname"/>
        <result property="admitdate" column="admitdate"/>
        <result property="orgid" column="orgid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="isupload" column="isupload"/>
        <result property="uploadTime" column="upload_time"/>
        <result property="schemestatus" column="schemestatus"/>
        <result property="deptid" column="deptid"/>
        <result property="schemetime" column="schemetime"/>
        <result property="hpi" column="hpi"/>
        <result property="mainsuit" column="mainsuit"/>
        <result property="outhospno" column="outhospno"/>
        <result property="patname" column="patname"/>
        <result property="guid" column="guid"/>
        <result property="patno" column="patno"/>
        <result property="diagcheckFlag" column="diagcheck_flag"/>
        <result property="idcardno" column="idcardno"/>
        <result property="remark" column="remark"/>
    </resultMap>
    <resultMap type="com.smartor.domain.Icd10" id="Icd10Result">
        <result property="icdid" column="icdid"/>
        <result property="icdcode" column="icdcode"/>
        <result property="icdname" column="icdname"/>
        <result property="icdpym" column="icdpym"/>
        <result property="icdwbm" column="icdwbm"/>
        <result property="orgid" column="orgid"/>
        <result property="delFlag" column="del_flag"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="pid" column="pid"/>
        <result property="guid" column="guid"/>
        <result property="lastflag" column="lastflag"/>
        <result property="chimedflag" column="chimedflag"/>
        <result property="hisIcdid" column="his_icdid"/>
    </resultMap>
    <resultMap type="com.ruoyi.common.core.domain.entity.SysDept" id="SysDeptResult">
        <id property="deptId" column="dept_id"/>
        <id property="hisDeptId" column="his_dept_id"/>
        <result property="parentId" column="parent_id"/>
        <result property="hisParentId" column="his_parent_id"/>
        <result property="ancestors" column="ancestors"/>
        <result property="deptName" column="dept_name"/>
        <result property="orderNum" column="order_num"/>
        <result property="leader" column="leader"/>
        <result property="phone" column="phone"/>
        <result property="email" column="email"/>
        <result property="status" column="status"/>
        <result property="delFlag" column="del_flag"/>
        <result property="parentName" column="parent_name"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
        <result property="deptCode" column="dept_code"/>
        <result property="deptType" column="dept_type"/>
        <result property="guid" column="guid"/>
        <result property="orgid" column="orgid"/>
        <result property="type" column="type"/>
    </resultMap>
    <resultMap type="com.ruoyi.common.core.domain.entity.SysUser" id="SysUserResult">
        <id property="userId" column="user_id"/>
        <id property="orgid" column="orgid"/>
        <id property="hisUserId" column="his_user_id"/>
        <result property="deptId" column="dept_id"/>
        <result property="hospInfo" column="hosp_info"/>
        <result property="deptInfo" column="dept_info"/>
        <result property="userName" column="user_name"/>
        <result property="nickName" column="nick_name"/>
        <result property="email" column="email"/>
        <result property="phonenumber" column="phonenumber"/>
        <result property="sex" column="sex"/>
        <result property="avatar" column="avatar"/>
        <result property="password" column="password"/>
        <result property="status" column="status"/>
        <result property="delFlag" column="del_flag"/>
        <result property="loginIp" column="login_ip"/>
        <result property="loginDate" column="login_date"/>
        <result property="createBy" column="create_by"/>
        <result property="idCard" column="id_card"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="title" column="title"/>
        <result property="birthday" column="birthday"/>
        <result property="jobPhone" column="job_phone"/>
        <result property="updateTime" column="update_time"/>
        <result property="remark" column="remark"/>
        <result property="userType" column="user_type"/>
        <result property="searchscope" column="searchscope"/>
        <result property="guid" column="guid"/>
    </resultMap>
    <sql id="selectPatArchiveVo">
        select id,
               notrequired_flag,
               notrequiredreason,
               patientno,
               filter_drname,
               filter_drcode,
               patid_his,
               age_unit,
               age_unit2,
               sd_flag,
               name,
               sex,
               idcardno,
               birthdate,
               age,
               age2,
               nation,
               native_place,
               place_of_residence,
               birthplace,
               sourcefrom,
               archivetime,
               archiveby,
               telcode,
               relativetelcode,
               idcardtype,
               orgid,
               openid,
               del_flag,
               update_by,
               update_time,
               create_by,
               create_time,
               isupload,
               pattype,
               viptype,
               upload_time,
               care_facilities,
               case_path,
               degree_of_education,
               marital_status,
               income,
               medicare_type,
               care_person,
               guid,
               case_person_age
        from mbsjjk.hzjbxx
    </sql>
    <select id="selectPatArchiveList" parameterType="com.smartor.domain.PatArchive" resultMap="PatArchiveResult">
        <include refid="selectPatArchiveVo"/>
        <where>
            <if test="name != null  and name != ''">and name like concat('%', #{name}, '%')</if>
            <if test="idcardno != null  and idcardno != ''">and idcardno = #{idcardno}</if>
            <if test="sourcefrom != null ">and sourcefrom = #{sourcefrom}</if>
            <if test="telcode != null  and telcode != ''">and telcode = #{telcode}</if>
            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
            <if test="id != null  and id != ''">and id = #{id}</if>
            <if test="isupload != null ">and isupload = #{isupload}</if>
            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
            <if test="viptype != null ">and viptype = #{viptype}</if>
            <if test="pattype != null ">and pattype = #{pattype}</if>
            <if test="patientno != null ">and patientno = #{patientno}</if>
            <if test="patidHis != null ">and patid_his = #{patidHis}</if>
            <if test="sdFlag != null ">and sd_flag = #{sdFlag}</if>
            <if test="ageUnit != null ">and age_unit = #{ageUnit}</if>
            <if test="age != null ">and age = #{age}</if>
            <if test="age2 != null ">and age2 = #{age2}</if>
            <if test="ageUnit2 != null ">and age_unit2 = #{ageUnit2}</if>
            <if test="notrequiredFlag != null ">and notrequired_flag = #{notrequiredFlag}</if>
            <if test="notrequiredreason != null ">and notrequiredreason = #{notrequiredreason}</if>
            <if test="careFacilities != null ">and care_facilities = #{careFacilities}</if>
            <if test="casePath != null ">and case_path = #{casePath}</if>
            <if test="degreeOfEducation != null ">and degree_of_education = #{degreeOfEducation}</if>
            <if test="maritalStatus != null ">and marital_status = #{maritalStatus}</if>
            <if test="income != null ">and income = #{income}</if>
            <if test="medicareType != null ">and medicare_type = #{medicareType}</if>
            <if test="carePerson != null ">and care_person = #{carePerson}</if>
            <if test="casePersonAge != null ">and case_person_age = #{casePersonAge}</if>
            <if test="filterDrname != null ">and filter_drname = #{filterDrname}</if>
            <if test="filterDrcode != null ">and filter_drcode = #{filterDrcode}</if>
        </where>
    </select>
    <select id="selectPatMedInhospListCount" parameterType="com.smartor.domain.PatMedInhosp" resultType="Long">
        select count(*)
        FROM cryxx
    </select>
    <select id="selectPatMedInhospList" parameterType="com.smartor.domain.PatMedInhosp" resultMap="PatMedInhospResult">
        select
        b.nurse_id,
        b.nurse_name,
        b.patname,
        b.out_way_id,
        b.out_way_name,
        b.inhospstate,
        b.patno,
        b.inhospno,
        b.serialnum,
        b.hospitalname,
        b.hospitalcode,
        b.hospitaldistrictcode,
        b.hospitaldistrictname,
        b.icd10code,
        b.diagname,
        b.starttime,
        b.endtime,
        b.deptcode,
        b.deptname,
        b.roomno,
        b.bed_no,
        b.orgid,
        b.leavediagname,
        b.leaveicd10code,
        b.drcode,
        b.drname,
        b.leaveldeptcode,
        b.leaveldeptname,
        b.hospitaldistrictid,
        b.leavehospitaldistrictcode,
        b.leavehospitaldistrictname,
        b.leavehospitaldistrictid,
        b.deptid,
        b.leaveldeptid,
        b.schemetime,
        b.fuflag,
        b.fudate,
        b.fuperiod,
        b.futypecode,
        b.futypedesc,
        b.fuadvice
        FROM
        cryxx b
        <where>
            <if test="startOutHospTime != null ">and date_format(b.endtime,'%y%m%d') &gt;=
                date_format(#{startOutHospTime},'%y%m%d')
            </if>
            <if test="endOutHospTime != null ">and date_format(b.endtime,'%y%m%d') &lt;=
                date_format(#{endOutHospTime},'%y%m%d')
            </if>
            <if test="startInHospTime != null ">and date_format(b.starttime,'%y%m%d') &gt;=
                date_format(#{startInHospTime},'%y%m%d')
            </if>
            <if test="endInHospTime != null ">and date_format(b.starttime,'%y%m%d') &lt;=
                date_format(#{endInHospTime},'%y%m%d')
            </if>
            <if test="inhospno != null ">and b.inhospno = #{inhospno}</if>
            <if test="fuflag != null ">and b.fuflag = #{fuflag}</if>
            <if test="serialnum != null ">and b.serialnum = #{serialnum}</if>
            <if test="patno != null ">and b.patno = #{patno}</if>
            <if test="nurseId != null ">and b.nurse_id = #{nurseId}</if>
            <if test="nurseName != null and nurseName != ''">and b.nurse_name = #{nurseName}</if>
            <if test="inhospstate != null ">and b.inhospstate = #{inhospstate}</if>
            <if test="outWayId != null ">and b.out_way_id = #{outWayId}</if>
            <if test="outWayName != null ">and b.out_way_name = #{outWayName}</if>
            <if test="orgid != null ">and b.orgid = #{orgid}</if>
        </where>
        limit #{ps} OFFSET #{pn}
    </select>
    <select id="selectPatMedOuthospList" parameterType="com.smartor.domain.PatMedOuthosp"
            resultMap="PatMedOuthospResult">
        select
        outhospno,
        patno,
        remark,
        serialnum,
        hospitalname,
        hospitalcode,
        icd10code,
        diagname,
        deptcode,
        deptname,
        drcode,
        drname,
        admitdate,
        orgid,
        update_by,
        update_time,
        create_by,
        create_time,
        isupload,
        upload_time,
        schemestatus,
        deptid,
        schemetime,
        hpi,
        patname,
        mainsuit
        from mzxx
        <where>
            <if test="deptname != null  and deptname != ''">and deptname like concat('%', #{deptname}, '%')</if>
            <if test="drname != null  and drname != ''">and drname like concat('%', #{drname}, '%')</if>
            <if test="patname != null  and patname != ''">and patname like concat('%', #{patname}, '%')</if>
            <if test="beginTime != null ">and date_format( admitdate,'%y%m%d') &gt;=
                date_format(#{beginTime},'%y%m%d')
            </if>
            <if test="endTime != null ">and date_format( admitdate,'%y%m%d') &lt;=
                date_format(#{endTime},'%y%m%d')
            </if>
            <if test="patid != null ">and patid = #{patid}</if>
            <if test="patno != null ">and patno = #{patno}</if>
            <if test="outhospno != null  and outhospno != ''">and outhospno = #{outhospno}</if>
            <if test="diagcheckFlag != null  and diagcheckFlag != ''">and diagcheck_flag = #{diagcheckFlag}</if>
        </where>
    </select>
    <select id="selectIcd10List" parameterType="com.smartor.domain.Icd10" resultMap="Icd10Result">
        select
        icdcode,
        his_icdid,
        lastflag,
        chimedflag,
        icdname,
        icdpym
        from jbxx
        <where>
            <if test="icdcode != null  and icdcode != ''">and icdcode = #{icdcode}</if>
            <if test="lastflag != null  and lastflag != ''">and lastflag = #{lastflag}</if>
            <if test="chimedflag != null  and chimedflag != ''">and chimedflag = #{chimedflag}</if>
            <if test="icdname != null  and icdname != ''">and icdname like concat('%', #{icdname}, '%')</if>
            <if test="icdpym != null  and icdpym != ''">and icdpym = #{icdpym}</if>
            <if test="icdwbm != null  and icdwbm != ''">and icdwbm = #{icdwbm}</if>
            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
            <if test="pid != null ">and pid = #{pid}</if>
            <if test="guid != null  and guid != ''">and guid = #{guid}</if>
            <if test="hisIcdid != null  and hisIcdid != ''">and his_icdid = #{hisIcdid}</if>
        </where>
    </select>
    <select id="selectUserList" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserResult">
        select
        u.title,u.his_user_id, u.searchscope, u.dept_id, u.user_type,
        u.nick_name, u.user_name, u.email,u.id_card, u.avatar,
        u.birthday,u.orgid,u.job_phone,u.phonenumber, u.sex, u.status,
        u.login_ip, u.login_date, u.create_by, u.create_time, u.remark
        from ryxx u
        <where>
            <if test="userId != null and userId != 0">
                AND u.user_id = #{userId}
            </if>
            <if test="userName != null and userName != ''">
                AND u.user_name like concat('%', #{userName}, '%')
            </if>
            <if test="nickName != null and nickName != ''">
                AND u.nick_name like concat('%', #{nickName}, '%')
            </if>
            <if test="status != null and status != ''">
                AND u.status = #{status}
            </if>
            <if test="idCard != null and idCard != ''">
                AND u.id_card = #{idCard}
            </if>
            <if test="title != null and title != ''">
                AND u.title = #{title}
            </if>
            <if test="jobPhone != null and jobPhone != ''">
                AND u.job_phone = #{jobPhone}
            </if>
            <if test="birthday != null and birthday != ''">
                AND u.birthday = #{birthday}
            </if>
            <if test="hisUserId != null and hisUserId != ''">
                AND u.his_user_id = #{hisUserId}
            </if>
            <if test="phonenumber != null and phonenumber != ''">
                AND u.phonenumber like concat('%', #{phonenumber}, '%')
            </if>
            <if test="params.beginTime != null and params.beginTime != ''"><!-- å¼€å§‹æ—¶é—´æ£€ç´¢ -->
                AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
            </if>
            <if test="params.endTime != null and params.endTime != ''"><!-- ç»“束时间检索 -->
                AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
            </if>
        </where>
    </select>
    <select id="selectDeptList" parameterType="com.ruoyi.common.core.domain.entity.SysDept" resultMap="SysDeptResult">
        SELECT d.dept_code,
               d.TYPE,
               d.ancestors,
               d.dept_name,
               d.order_num,
               d.leader,
               d.phone,
               d.dept_type,
               d.email,
               d.status,
               d.create_by,
               d.create_time,
               d.his_dept_id,
               d.his_parent_id
        FROM bmxx d
    </select>
</mapper>
smartor/src/main/resources/mapper/smartor/Icd10Mapper.xml
@@ -131,14 +131,14 @@
            #{item.orgid},
            #{item.delFlag},
            #{item.createBy},
            #{item. createTime},
            #{item.createTime},
            #{item.updateBy},
            #{item.updateTime},
            #{item.pid},
            #{item.guid},
            #{item.lastflag},
            #{item.chimedflag},
            #{item.  hisIcdid,}
            #{item.hisIcdid}
            )
        </foreach>
    </insert>
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -425,6 +425,9 @@
        where inhospid = #{inhospid}
    </select>
    <insert id="insertPatMedInhosp" parameterType="com.smartor.domain.PatMedInhosp" useGeneratedKeys="true"
            keyProperty="inhospid">
        insert into pat_med_inhosp
@@ -554,6 +557,40 @@
        </trim>
    </insert>
    <insert id="insertPatMedInhospBatch" parameterType="java.util.List">
        insert into pat_med_inhosp (
        serialnum, hospitalname, hospitalcode, hospitaldistrictcode, hospitaldistrictname,
        icd10code, diagname, starttime, endtime, deptcode, deptname, roomno, bed_no,
        orgid, del_flag, update_by, update_time, create_by, create_time, isupload,
        upload_time, patid, leavediagname, leaveicd10code, drcode, drname,
        schemestatus, generalschemestatus, leaveldeptcode, leaveldeptname, hospitaldistrictid,
        leavehospitaldistrictcode, leavehospitaldistrictname, leavehospitaldistrictid,
        deptid, leaveldeptid, schemetime, patname, patno, inhospstate,
        deptcheck_flag, wardcheck_flag, diagcheck_flag, long_task_reason,
        nurse_id, nurse_name, out_way_id, out_way_name, guid,
        operator, operator_id, inhospno, remark,
        fuflag, fudate, fuperiod, futypecode, futypedesc, fuadvice, fuspecialadvice
        )
        values
        <foreach collection="list" item="item" separator=",">
            (
            #{item.serialnum}, #{item.hospitalname}, #{item.hospitalcode}, #{item.hospitaldistrictcode}, #{item.hospitaldistrictname},
            #{item.icd10code}, #{item.diagname}, #{item.starttime}, #{item.endtime}, #{item.deptcode}, #{item.deptname}, #{item.roomno}, #{item.bedNo},
            #{item.orgid}, #{item.delFlag}, #{item.updateBy}, #{item.updateTime}, #{item.createBy}, #{item.createTime}, #{item.isupload},
            #{item.uploadTime}, #{item.patid}, #{item.leavediagname}, #{item.leaveicd10code}, #{item.drcode}, #{item.drname},
            #{item.schemestatus}, #{item.generalschemestatus}, #{item.leaveldeptcode}, #{item.leaveldeptname}, #{item.hospitaldistrictid},
            #{item.leavehospitaldistrictcode}, #{item.leavehospitaldistrictname}, #{item.leavehospitaldistrictid},
            #{item.deptid}, #{item.leaveldeptid}, #{item.schemetime}, #{item.patname}, #{item.patno}, #{item.inhospstate},
            #{item.deptcheckFlag}, #{item.wardcheckFlag}, #{item.diagcheckFlag}, #{item.longTaskReason},
            #{item.nurseId}, #{item.nurseName}, #{item.outWayId}, #{item.outWayName}, #{item.guid},
            #{item.operator}, #{item.operatorId}, #{item.inhospno}, #{item.remark},
            #{item.fuflag}, #{item.fudate}, #{item.fuperiod}, #{item.futypecode}, #{item.futypedesc}, #{item.fuadvice}, #{item.fuspecialadvice}
            )
        </foreach>
    </insert>
    <update id="updatePatMedInhosp" parameterType="com.smartor.domain.PatMedInhosp">
        update pat_med_inhosp
        <trim prefix="SET" suffixOverrides=",">
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -170,6 +170,7 @@
               leavehospitaldistrictname,
               leavediagname,
               leaveicd10code,
               orgid,
               visit_type
        from service_subtask
    </sql>
@@ -414,6 +415,63 @@
          and b.patid = #{patid}
    </select>
    <select id="selectTimelyRate" parameterType="com.smartor.domain.ServiceSubtask" resultType="double">
        SELECT sum( a.finished )/ sum( 1 ) FROM
        (SELECT id, visit_time, finishtime,
        (CASE WHEN ( DATE_FORMAT( visit_time, '%y%m%d' )&lt; DATE_FORMAT( IF ( ISNULL( finishtime ), NOW(), finishtime
        ), '%y%m%d' ) )
        THEN 1 ELSE 0 END ) finished,1 AS tasknumber FROM service_subtask
        WHERE del_flag=0
        <if test="starttime == null and endtime==null">
            AND visit_time &lt; NOW()
        </if>
        <if test="starttime != null and endtime!=null">
            AND date_format(visit_time,'%y%m%d') >= date_format(#{starttime},'%y%m%d')
            AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endtime},'%y%m%d')
        </if>
        <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
        <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
        <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>
        <if test="leavehospitaldistrictcode != null  and leavehospitaldistrictcode != ''">and
            leavehospitaldistrictcode = #{leavehospitaldistrictcode}
        </if>
        <if test="leavehospitaldistrictname != null  and leavehospitaldistrictname != ''">and
            leavehospitaldistrictname = #{leavehospitaldistrictname}
        </if>
        ) a
    </select>
    <select id="selectTimelyRateDetail" parameterType="com.smartor.domain.ServiceSubtask"
            resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        <where>
            id in (
            SELECT id FROM
            (SELECT id, visit_time, finishtime,
            (CASE WHEN ( DATE_FORMAT( visit_time, '%y%m%d' ) &lt; DATE_FORMAT( IF ( ISNULL( finishtime ), NOW(),
            finishtime
            ), '%y%m%d' ) )
            THEN 1 ELSE 0 END ) finished,1 AS tasknumber FROM service_subtask
            WHERE del_flag=0
            -- AND visit_time &lt; NOW()
            <if test="starttime != null and endtime!=null">
                AND date_format(visit_time,'%y%m%d') >= date_format(#{starttime},'%y%m%d')
                AND date_format(visit_time,'%y%m%d') &lt;= date_format(#{endtime},'%y%m%d')
            </if>
            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
            <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
            <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>
            <if test="leavehospitaldistrictcode != null  and leavehospitaldistrictcode != ''">and
                leavehospitaldistrictcode = #{leavehospitaldistrictcode}
            </if>
            <if test="leavehospitaldistrictname != null  and leavehospitaldistrictname != ''">and
                leavehospitaldistrictname = #{leavehospitaldistrictname}
            </if>
            ) a where a.finished =1)
        </where>
    </select>
    <select id="selectServiceSubtaskById" parameterType="Long" resultMap="ServiceSubtaskResult">
        <include refid="selectServiceSubtaskVo"/>
        where id = #{id}
smartor/src/main/resources/mapper/smartor/SmsRecordsMapper.xml
ÎļþÒÑɾ³ý