陈昶聿
2 天以前 50443fef22aaa77a1456e1981b51c10e69618b34
Merge branch 'refs/heads/master' into master-手术随访
已修改29个文件
已添加3个文件
1063 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-nhfy.yml 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-sltd.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java 107 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -23,6 +23,7 @@
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.common.LSHospTokenUtil;
import com.smartor.common.MtSubmitSmUtil;
import com.smartor.domain.*;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
@@ -114,6 +115,9 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Autowired
    private MtSubmitSmUtil mtSubmitSmUtil;
    @Autowired
    private ISysConfigService configService;
@@ -307,7 +311,7 @@
                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                        sendMagParam.setPhone(serviceSubtask.getPhone());
                        sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
                        if (active.equals("ls") || active.equals("sltd")) {
                        if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                            sendMagParam.setContent("您好,邀请您填写出院随访调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
                        } else if (active.equals("xh")) {
                            sendMagParam.setContent("【新华医院】您好,邀请您填写出院随访调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
@@ -331,12 +335,12 @@
                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
//                                sendMagParam.setUrl(ip + ":" + req_path + "/outsideChainwt?param1=" + taskId + "&param2=" + patid + "&param3=" + URLEncoder.encode(ivrTask1.getTaskName(), StandardCharsets.UTF_8.toString()) + "&param5=false");
                        sendMagParam.setPhone(serviceSubtask.getPhone());
                        sendMagParam.setUrl(ip + ":" + req_path + "/wt?p=" + format);
                        sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format);
                        log.info("sendMagParam的值为:{}", sendMagParam);
                        //如果type是语音随访的话(说明补偿发送方式中有电话随访的方式,这里的外链就地址只能用/sf)
                        if (serviceSubtask.getType().equals("1"))
                            sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
                        if (active.equals("ls") || active.equals("sltd")) {
                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/sf?p=" + format : ip + "/sf?p=" + format);
                        if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                            sendMagParam.setContent("您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
                        } else if (active.equals("xh")) {
                            sendMagParam.setContent("【新华医院】您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
@@ -362,8 +366,8 @@
                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
                        if (heLibrary.getHetype().equals("1")) {
                            sendMagParam.setPhone(serviceSubtask.getPhone());
                            sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format);
                            if (active.equals("ls") || active.equals("sltd")) {
                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/xj?p=" + format : ip + "/xj?p=" + format);
                            if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                                sendMagParam.setContent("您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
                            } else if (active.equals("xh")) {
                                sendMagParam.setContent("【新华医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
@@ -425,23 +429,37 @@
                            setFailPreachForm(serviceSubtask, sendPreachform, "短信发送失败", "5");
                            throw new BaseException("短信发送失败");
                        }
                    } else if (active.equals("sltd")) {
                    } else if (active.equals("sltd") || active.equals("nhfy")) {
                        //省立同德的短信发送方式
                        String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                        if (StringUtils.isNotEmpty(data)) {
                            ObjectMapper mapper = new ObjectMapper();
                            JsonNode root = mapper.readTree(data);
                            String status = root.get("result").get(0).get("status").asText();
                            if (status.equals("00000")) {
                                s = "true";
                        String data = null;
                        Map<String, Object> smsResult = null;
                        if (active.equals("sltd")) {
                            data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                            if (StringUtils.isNotEmpty(data)) {
                                ObjectMapper mapper = new ObjectMapper();
                                JsonNode root = mapper.readTree(data);
                                String status = root.get("result").get(0).get("status").asText();
                                if (status.equals("00000")) {
                                    s = "true";
                                } else {
                                    setFailPreachForm(serviceSubtask, sendPreachform, "短信发送失败: " + data, "5");
                                    throw new BaseException("短信发送失败");
                                }
                            } else {
                                setFailPreachForm(serviceSubtask, sendPreachform, "短信发送失败: " + data, "5");
                                throw new BaseException("短信发送失败");
                            }
                        } else {
                            setFailPreachForm(serviceSubtask, sendPreachform, "短信发送失败: " + data, "5");
                            throw new BaseException("短信发送失败");
                        } else if (active.equals("nhfy")) {
                            smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent());
                            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                                s = "true";
                            } else {
                                setFailPreachForm(serviceSubtask, sendPreachform, "短信发送失败", "5");
                                throw new BaseException("短信发送失败");
                            }
                        }
                    } else if (active.equals("hzszlyy")) {
                        //市一
                        long timestamp = new Date().getTime();
@@ -531,7 +549,7 @@
                        serviceOutPath.setRadix(format);
                        serviceOutPath.setUpdateTime(new Date());
                        iServiceOutPathService.updateServiceOutPath(serviceOutPath);
                        url = ip + ":" + req_path + "/wt?p=" + format;
                        url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
                        //如果type是语音随访的话(说明补偿发送方式中有电话随访的方式,这里的外链就地址只能用/sf)
                        if (serviceSubtask.getType().equals("1"))
                            sendMagParam.setUrl(ip + ":" + req_path + "/sf?p=" + format);
@@ -845,9 +863,9 @@
                    if (failSendstate.equals("4") || failSendstate.equals("5")) {
                        serviceSubtask.setCurrentPreachform(preachform);
                        serviceSubtask.setSendstate(5L);
                        serviceSubtask.setRemark("setFailPreachForm方法 å½“前的preachform已经是最后一个了,全部执行失败");
                        serviceSubtask.setRemark("处理补偿任务,当前处理最后补偿,全部执行失败");
                        //人工发送超时
                        if(ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")){
                        if (ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")) {
                            serviceSubtask.setSendstate(7L);
                            serviceSubtask.setRemark("人工发送超时");
                        }
@@ -865,7 +883,7 @@
        serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
        serviceSubtask.setSendstate(3L);
        //人工发送超时
        if(ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")){
        if (ObjectUtils.isNotEmpty(preachform) && preachform.equals("1") && failSendstate.equals("7")) {
            serviceSubtask.setSendstate(7L);
            serviceSubtask.setRemark("人工发送超时");
        }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSLTDHealthcareRecordController.java
@@ -2,6 +2,8 @@
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.smartor.common.MtSubmitSmUtil;
import com.smartor.domain.MtSubmitSmResp;
import com.smartor.domain.ServiceSLTDDeptReqVO;
import com.smartor.domain.ServiceSLTDInhospReqVO;
import com.smartor.domain.ServiceSLTDInhospResDTO;
@@ -10,12 +12,10 @@
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * çœç«‹åŒå¾·å¥åº·è®°å½•查询Controller
@@ -32,6 +32,9 @@
    @Autowired
    private IServiceSLTDHealthcareRecordService serviceSLTDHealthcareRecordService;
    @Autowired
    private MtSubmitSmUtil mtSubmitSmUtil;
    /**
     * æŸ¥è¯¢åœ¨é™¢æ‚£è€…健康记录列表
     */
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -119,16 +119,6 @@
        // ç›´æŽ¥ä»Žå·²æœ‰èšåˆç»“果推算total,避免去掉分页后再全量查一遍大表
        long total = 0L;
        try {
//                 * wzx: æœªæ‰§è¡Œæ•°é‡
//                    * ysf: å·²éšè®¿æ•°é‡
//                    * fssb: å‘送失败数量
//                    * yfs: å·²å‘送数量
//                    * dsf: å¾…随访数量
//            long wzx = map.get("wzx") != null ? ((Number) map.get("wzx")).longValue() : 0L;
//            long ysf = map.get("ysf") != null ? ((Number) map.get("ysf")).longValue() : 0L;
//            long dsf = map.get("dsf") != null ? ((Number) map.get("dsf")).longValue() : 0L;
//            long fssb = map.get("fssb") != null ? ((Number) map.get("fssb")).longValue() : 0L;
            total = map.get("total") != null ? ((Number) map.get("total")).longValue() : 0L;
        } catch (Exception e) {
@@ -185,7 +175,7 @@
                if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) {
                    redisFlag = true;
                    map = redisMap;
                    redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
                    redisCache.setCacheObject(userId + "patItemCount", map, 60, TimeUnit.MINUTES);
                }
            }
            if (!redisFlag) {
@@ -447,6 +437,37 @@
    }
    /**
     * æ–°å¢žæˆ–修改删除单一任务(临时接口)
     */
    @ApiOperation("新增或修改删除单一任务(临时接口)")
    //@PreAuthorize("@ss.hasPermi('system:task:add')")
    @Log(title = "单一任务(随访)", businessType = BusinessType.INSERT)
    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
    @PostMapping("/insertOrUpdateTaskByTaskId")
    public AjaxResult insertOrUpdateTaskByTaskId(@RequestBody ServiceTaskVO ivrTaskVO) {
        log.info("insertOrUpdateTaskByTaskId的入参为:{}", ivrTaskVO);
        LoginUser loginUser = getLoginUser();
        SysUser user = loginUser.getUser();
        ivrTaskVO.setCreateBy(user.getNickName());
        ivrTaskVO.setUpdateBy(user.getNickName());
        ivrTaskVO.setOrgid(user.getOrgid());
        //根据入参查询信息-用户关系
        ServiceSubtask serviceSubtask = new ServiceSubtask();
        if(ObjectUtils.isNotEmpty(ivrTaskVO.getTaskid())){
            serviceSubtask.setTaskid(ivrTaskVO.getTaskid());
            serviceSubtask.setOrgid(user.getOrgid());
            serviceSubtask.setCampusid(user.getCampusid());
            ServiceTaskVO ivrTaskVO1 = serviceSubtaskService.queryTaskByCondition(serviceSubtask);
            ivrTaskVO.setPatTaskRelevances(ivrTaskVO1.getPatTaskRelevances());
            return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
        }else {
            return error("insertOrUpdateTaskByTaskId taskid不可为空");
        }
    }
    /**
     * ç”µè¯å›žè°ƒä»»åŠ¡(上海)
     */
    @ApiOperation("电话回调任务")
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.annotation.IpWhitelist;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
@@ -97,12 +98,12 @@
     */
//    @IpWhitelist
    @GetMapping("/SSOLogin")
    public RedirectView SSOLogin(@RequestParam(required = false) String userName,
                                 @RequestParam(required = false) String orgid,
                                 @RequestParam(required = false) String campusid,
    public RedirectView SSOLogin(@RequestParam(required = false) String campusid,
                                 @RequestParam(required = false) String deptId,
                                 String orgid,
                                 String userName,
                                 String token) {
        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token)) {
        if (StringUtils.isEmpty(userName) && StringUtils.isEmpty(token) && StringUtils.isEmpty(orgid)) {
            throw new BaseException("参数不能为空");
        }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -155,7 +155,7 @@
     */
    //@PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PostMapping("/changeStatus")
    @PostMapping("/changeStatus/edit")
    public AjaxResult changeStatus(@RequestBody SysRole role) {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@
    druid:
      # ä¸»åº“数据源
      master:
        #    ä¹‰ä¹ŒäºŒé™¢
        #        ä¹‰ä¹ŒäºŒé™¢
        #        url: jdbc:mysql://127.0.0.1:3306/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        #        username: root
        #        password: 123456
@@ -34,7 +34,7 @@
        #        password: Hxerp2000
        #        driverClassName: com.mysql.cj.jdbc.Driver
        #  å…¬å¸æœ¬åœ°
        url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_lishui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_xinhua?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=120000&socketTimeout=240000
        username: smartor
        password: Smartor.2023
        driverClassName: com.mysql.cj.jdbc.Driver
@@ -78,7 +78,11 @@
      # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxActive: 20
      # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      maxWait: 60000
      maxWait: 120000
      # é…ç½®è¿žæŽ¥è¶…时时间(毫秒),防止慢查询导致连接断开
      queryTimeout: 120
      # é…ç½®è¿žæŽ¥æœ‰æ•ˆæ€§æ£€æµ‹è¶…æ—¶
      validationQueryTimeout: 5
      # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
@@ -105,8 +109,8 @@
        stat:
          enabled: false
          # æ…¢SQL记录
          log-slow-sql: false
          slow-sql-millis: 1000
          log-slow-sql: true
          slow-sql-millis: 3000
          merge-sql: true
        wall:
          config:
@@ -148,7 +152,7 @@
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /dev-api
@@ -215,10 +219,9 @@
#  æŒ‡å®šasr回调的url路径(本地)
ASRCallBackPath: http://192.168.100.10:8095/smartor/serviceSubtask/phoneCallBackYQ
#挂断IP(本地)
hangup: http://192.168.100.6:8089/hangup
hangup: http://192.168.100.10:8089/hangup
#fs所使用的阿里的app_key(本地)
app_key_yq: ZurNHpaQLq6P55YS
##  æŒ‡å®šasr回调的url路径(新华)
#ASRCallBackPath: http://192.168.101.135:8095/smartor/serviceSubtask/phoneCallBackYQ
##挂断IP(新华)
@@ -255,7 +258,7 @@
#第个小时电话拨打的上限
phoneUpEveryHour: 12
#电话每天结束时间
phoneEndHour: 20
phoneEndHour: 23
#新员工默认密码
defaultPwd: 123456
@@ -267,10 +270,12 @@
isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
isEncryp:
isEncryp: 0
dealDeptCode:
#文件上传地址
fileUpload:
profile:
ai_answer: http://localhost:8088/ai_answer
ruoyi-admin/src/main/resources/application-nhfy.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,256 @@
# æ•°æ®æºé…ç½®
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    #    driverClassName: com.mysql.cj.jdbc.Driver
    druid:
      # ä¸»åº“数据源
      master:
        #        å—华附一
        url: jdbc:mysql://192.168.99.192:3306/smartor_nhfy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=60000&socketTimeout=120000
        username: root
        password: Smartor.2023
        driverClassName: com.mysql.cj.jdbc.Driver
      #        # é«˜æ–¯æ•°æ®åº“配置
      #        url: jdbc:postgresql://127.0.0.1:5432/smartorlishui
      #        username: gaussdb
      #        password: Ls@123456
      #        driverClassName: org.postgresql.Driver
      # ä»Žåº“数据源
      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:sqlserver://127.0.0.1:1433;DatabaseName=IntelligentVoice;encrypt=false;SelectMethod=cursor
      # username: sa
      # password: sfxt#2023
      # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
      # åˆå§‹è¿žæŽ¥æ•°
      initialSize: 5
      # æœ€å°è¿žæŽ¥æ± æ•°é‡
      minIdle: 10
      # æœ€å¤§è¿žæŽ¥æ± æ•°é‡
      maxActive: 20
      # é…ç½®èŽ·å–è¿žæŽ¥ç­‰å¾…è¶…æ—¶çš„æ—¶é—´
      maxWait: 60000
      # é…ç½®é—´éš”多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å°ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      minEvictableIdleTimeMillis: 300000
      # é…ç½®ä¸€ä¸ªè¿žæŽ¥åœ¨æ± ä¸­æœ€å¤§ç”Ÿå­˜çš„æ—¶é—´ï¼Œå•位是毫秒
      maxEvictableIdleTimeMillis: 900000
      # é…ç½®æ£€æµ‹è¿žæŽ¥æ˜¯å¦æœ‰æ•ˆ
      validationQuery: SELECT 1 FROM DUAL
      #      validationQuery: SELECT 1
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      webStatFilter:
        enabled: true
      statViewServlet:
        enabled: false
        # è®¾ç½®ç™½åå•,不填则允许所有访问
        allow:
        url-pattern: /druid/*
        # æŽ§åˆ¶å°ç®¡ç†ç”¨æˆ·åå’Œå¯†ç 
        login-username: lihu
        login-password: Lihu@1363419#$
      filter:
        stat:
          enabled: false
          # æ…¢SQL记录
          log-slow-sql: false
          slow-sql-millis: 1000
          merge-sql: true
        wall:
          config:
            multi-statement-allow: true
  # redis é…ç½®
  redis:
    host: 127.0.0.1
    port: 6020
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: Smartor
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
    lettuce:
      pool:
        # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
        min-idle: 0
        # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
        max-idle: 8
        # è¿žæŽ¥æ± çš„æœ€å¤§æ•°æ®åº“连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /dev-api
# PageHelper分页插件
#pagehelper:
#  helperDialect: mysql
#  supportMethodsArguments: true
#  params: count=countSql
magic-api:
  web: /magic/web
  resource:
    type: database   # é…ç½®å­˜å‚¨åœ¨æ•°æ®åº“中
    tableName: magic_config  # æ•°æ®åº“中的表名
    prefix: /api
    readonly: false
  sql-column-case: camel
  show-sql: true #配置打印SQL
  page-config:
    size: size
    page: page
    default-page: 1
    default-size: 10
#钉钉的密钥
dingAppid: dingn8iip5ubj7clrrsv
dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
# websocket超时时间
server:
websocket:
timeout=60000:
accessKeyId: LTAI5tPfc1VJzz7VuhzcBwug
accessKeySecret: gG1srKxPFDBNWe2oHfqmK1qsSQkf1e
signName: æ­å·žåˆ©æ¹–科技
#智能呼叫(上海)
phoneIP: http://124.220.50.51
phonePort: 8001
#杭州
hzphoneIP: http://121.43.112.160
hzphonePort: 8088
#电话线路(1 ä¸Šæµ·ï¼Œ2 æ­å·žï¼‰
phonePath: 2
#自己的电话号码
phoneMySelf: 83234089
##授权 id(杭州)
#app_id: hzgs
##授权 key(已加密过的 key)(杭州)
#app_key: 605453540c4a0a692fe07e1cae1162f3
#授权 id(杭州)
app_id: hz_ali
#授权 key(已加密过的 key)(杭州)
app_key: a2f3b5799d635216aa280362fafd8c35
pub_key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALQzqW1EIXBKGMu+2oEYSB5gM7Ox/ihyYTeeoE0yPX1qtt4++5yNOeTBVd6EEM4iKzVEzWj6REIWVwaSNPn/SvUCAwEAAQ==
#这个是后端的私钥,用不到
pri_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==
#前端私钥(用不到了)
#pri_key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEApHTIe/StslZAT5Jzv8XClbrqox32pfaTrP5IOCRJ3FaH/UZsGgA/tsNBBEXq9eagqwPbJrjYfpdEtINcChrK4wIDAQABAkEAilDujdKshGGmlUZHs/NQRT6AOdDpsYxBiC4V76IVvQpw0IW6c4HGEvH4T+xRufika7/48L0eu0f06H+YtL5lgQIhANUd0a6oSsVxWifAjtKwMZcXD3OaIxQIQSCN4NT4VFY3AiEAxYxYrIhkIyg+UVw3WOSvBpXKxM4/WL9HRzkxDLvp2rUCIQCK23P8tgCJ5xJT5l3onw6goFDcBKkoazxsBqVgfjENPwIgWbuTd+OIYPPhwsE5ntZZrosSDO2GlsBkFzUiU59z7VUCIA0LL+9IFb+FWCl3DGTwIQ9SZYbv61T83LKjebUcSOfe
#二维码路径
qrpath: D:\qrcode
#外链请求IP和端口号
req_path:
localIP: https://xiniuhisintcus.nhfyyy.com/aifollowup
#获取患者信息URL(华卓提供)
hosp_info_url: http://esb-core-rest.wowjoy.cn/esb/exchange
# 0代表走默认的上传    1 ä»£ç èµ°æ–°åŽåŒ»é™¢çš„上传
uploadSwitch: 1
#  æŒ‡å®šasr回调的url路径(新华)
ASRCallBackPath: http://192.168.101.135:8095/smartor/serviceSubtask/phoneCallBackYQ
#挂断IP(新华)
hangup: http://192.16.4.220:8091/hangup
#fs所使用的阿里的app_key(新华)
app_key_yq: ZurNHpaQLq6P55YS
#短信请求地址(这里为空,同德提供的是ws)
xhsmsPath:
#帐号
xhsmsAccount:
#接口密码
xhsmsPwd:
#虚拟接入码
xhsmsjrm:
##本地FTP连接
#FTP_SERVER: "192.168.2.13"
#FTP_USERNAME: voice
#FTP_PASSWORD: xh@2023
#新华FTP连接
FTP_SERVER: "192.16.4.220"
FTP_USERNAME: voice
FTP_PASSWORD: xh@2023
#语音地址访问前缀(新华)
voicePathPrefix: http://192.168.191.181:8095/profile/upload/vadio/
#语音地址访问前缀(公司)
#voicePathPrefix: http://192.168.2.13:8095/profile/upload/vadio/
#第个小时电话拨打的上限
phoneUpEveryHour: 12
#电话每天结束时间
phoneEndHour: 20
#新员工默认密码
defaultPwd: 123456
#是否需要根据疾病建立出院患者随访
createIcd10Visit: false
#admin管理员userId
isAdmin: 1,2,3,4,5,6,7,8,9,10,11,12,13
#用户默认密码
userPwd: nhfy@0230
#处理投诉建议的部门编码
dealDeptCode: 40003024
#是否加密  0不加   1加密
isEncryp: 0
#文件上传地址
fileUpload: https://xiniuhisintcus.nhfyyy.com/aifollowup
profile: /prod-api/profile
# æ¥æœªæ¥app_key
lwl_app_key: ak-LMyQUE4rjW25UO7otb8XMXzv
# å—华附一取数据公共接口
sltd_pub_path: "http://open.nhyfy.cn/kapi/gw-api/"
sms_accountName: S200232
sms_password: lD94Yo
sms_url: http://open.nhyfy.cn/kapi/gw-api/hntypt/ucpmsg/send
sms_sourceAddr: 1069100020341
sms_serviceCode: PUSH
sms_appkey: ak-BFq4NN0TMf92J7KAioNYGz74
sms_flag: ã€å—华大学附属第一医院】
ruoyi-admin/src/main/resources/application-sltd.yml
@@ -244,3 +244,6 @@
#文件上传地址
fileUpload: http://192.88.117.236:8090
profile: /prod-api/profile
# æ¥æœªæ¥app_key
lwl_app_key: ak-zUMiOWhqXiJQWPB1pCbz0pjr
ruoyi-admin/src/main/resources/application.yml
@@ -74,7 +74,7 @@
    # å›½é™…化资源文件路径
    basename: i18n/messages
  profiles:
    active: ls
    active: durid
  # æ–‡ä»¶ä¸Šä¼ 
  servlet:
@@ -115,6 +115,8 @@
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # åŠ è½½å…¨å±€çš„é…ç½®æ–‡ä»¶
  configLocation: classpath:mybatis/mybatis-config.xml
  # æ³¨å†Œè‡ªå®šä¹‰TypeHandler包
  typeHandlersPackage: com.smartor.typehandler
  #configuration:
  #  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
@@ -160,3 +162,13 @@
#用户默认密码
userPwd: 123456
#这些空值都是来未来的变量,先占位
lwl_app_key:
sms_accountName:
sms_password:
sms_url:
sms_sourceAddr:
sms_serviceCode:
sms_appkey:
sms_flag:
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,20 +1,6 @@
package com.ruoyi.framework.web.service;
import javax.annotation.Resource;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.smartor.service.impl.ServiceSLTDHealthcareRecordServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -24,17 +10,24 @@
import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.security.context.AuthenticationContextHolder;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@@ -75,6 +68,9 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Value("${lwl_app_key}")
    private String APP_KEY;
    /**
     * ç™»å½•验证
@@ -134,7 +130,7 @@
     */
    public String ssoLogin(String userName, String orgid, String deptId, String campusid, String token) {
        // sltd çŽ¯å¢ƒï¼šé€šè¿‡ SSO token èŽ·å–å‘˜å·¥è´¦å·
        if ("sltd".equals(active)) {
        if ("sltd".equals(active) || "nhfy".equals(active)) {
            userName = resolveUserNameBySltdToken(token);
            if (userName == null) {
                return null;
@@ -166,7 +162,7 @@
     */
    private String resolveUserNameBySltdToken(String token) {
        Map<String, String> headers = new HashMap<>();
        headers.put("app-key", ServiceSLTDHealthcareRecordServiceImpl.APP_KEY);
        headers.put("app-key", APP_KEY);
        Map<String, String> requestParams = new HashMap<>();
        requestParams.put("token", token);
        String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null);
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -11,6 +11,7 @@
import com.ruoyi.common.enums.MsgLSEnum;
import com.ruoyi.common.enums.ServiceFromEnum;
import com.ruoyi.common.enums.WxGZHEnum;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.sms.smsUtils;
@@ -19,6 +20,7 @@
import com.ruoyi.system.domain.SysConfig;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.common.LSHospTokenUtil;
import com.smartor.common.MtSubmitSmUtil;
import com.smartor.domain.*;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
@@ -162,6 +164,8 @@
    @Value("${server.port}")
    private String port;
    @Autowired
    private MtSubmitSmUtil mtSubmitSmUtil;
    @Value("${spring.profiles.active}")
    private String active;
@@ -264,7 +268,9 @@
            } catch (Exception e) {
                log.error("【dealHisData】河南数据采集异常", e);
            }
        } else if (active.trim().equals("sltd")) {
        } else if (active.trim().equals("sltd") || active.trim().equals("nhfy")) {
            //省立同德与华南附一用同一套采集方法(都是来未来提供)
            try {
                //获取是否需要采集用户、部门信息
                SysConfig config = new SysConfig();
@@ -536,12 +542,12 @@
            ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
            serviceSubtaskVO.setTaskid(commonTaskcallMQ.getTaskid());
            serviceSubtaskVO.setSendstate(2L);
            serviceSubtaskVO.setIsVisitAgain(1);
            serviceSubtaskVO.setVisitTime(new Date());
            List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.queryServiceSubtaskList(serviceSubtaskVO);
            for (ServiceSubtask serviceSubtask : selectServiceSubtaskList) {
                sfHandlle(serviceSubtask);
            }
        }
    }
@@ -599,11 +605,8 @@
                //3.不是最后一个,获取到下一个执行方式(因为都是在今天执行,那就直接发出去就完了)
                sfHandlle(serviceSubtask);
            }
        }
    }
@@ -649,7 +652,7 @@
        if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
            //不需要发送
            serviceSubtask.setResult("患者不需要随访");
            serviceSubtask.setRemark(patArchive.getNotrequiredreason());
            serviceSubtask.setRemark("患者不需要随访," + patArchive.getNotrequiredreason());
            serviceSubtask.setSendstate(4L);
            iServiceSubtaskService.insertServiceSubtask(serviceSubtask);
            setSuccessPreachForm(serviceSubtask, "-1", "不需要执行", "6");
@@ -745,10 +748,11 @@
                    //先判断一下发的是不是宣教
                    if (!"3".equals(serviceSubtask.getType())) {
                        sendMagParam.setPhone(serviceSubtask.getPhone());
                        sendMagParam.setUrl(localIP + ":" + req_path + "/wt?p=" + format);
                        sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + format : localIP + "/wt?p=" + format);
                        //如果type是语音随访的话(说明补偿发送方式中有电话随访的方式,这里的外链就地址只能用/sf)
                        if (serviceSubtask.getType().equals("1"))
                            sendMagParam.setUrl(localIP + ":" + req_path + "/sf?p=" + format);
                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/sf?p=" + format : localIP + "/sf?p=" + format);
                        sendMagParam.setContent("您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
                        if (active.equals("xh")) {
                            sendMagParam.setContent("【新华医院】您好,邀请您填写出院调查表,请点击" + sendMagParam.getUrl() + "填写。感谢您配合!");
@@ -757,8 +761,8 @@
                        HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
                        if (heLibrary.getHetype().equals("1")) {
                            sendMagParam.setPhone(serviceSubtask.getPhone());
                            sendMagParam.setUrl(localIP + ":" + req_path + "/xj?p=" + format);
                            if (active.equals("ls") || active.equals("sltd")) {
                            sendMagParam.setUrl(StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/xj?p=" + format : localIP + "/xj?p=" + format);
                            if (active.equals("ls") || active.equals("sltd") || active.equals("nhfy")) {
                                sendMagParam.setContent("您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
                            } else if (active.equals("xh")) {
                                sendMagParam.setContent("【新华医院】您好,邀请您填写出院宣教调查表,请点击" + sendMagParam.getUrl() + "查看。感谢您配合!");
@@ -810,15 +814,22 @@
                        if (code.equals("0")) {
                            isSuccess = "true";
                        }
                    } else if (active.equals("sltd")) {
                    } else if (active.equals("sltd") || active.equals("nhfy")) {
                        log.info("sltd进来了吗?{}   ,---sendMagParam.getContent()的参数为:{}", active, sendMagParam.getContent());
                        //省立同德的短信发送方式
                        String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                        if (StringUtils.isNotEmpty(data)) {
                            ObjectMapper mapper = new ObjectMapper();
                            JsonNode root = mapper.readTree(data);
                            String status = root.get("result").get(0).get("status").asText();
                            if (status.equals("00000")) {
                        if (active.equals("sltd")) {
                            //省立同德的短信发送方式
                            String data = MessageSend.sendMsg(sendMagParam.getContent(), "6", sendMagParam.getPhone(), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
                            if (StringUtils.isNotEmpty(data)) {
                                ObjectMapper mapper = new ObjectMapper();
                                JsonNode root = mapper.readTree(data);
                                String status = root.get("result").get(0).get("status").asText();
                                if (status.equals("00000")) {
                                    isSuccess = "true";
                                }
                            }
                        } else if (active.equals("nhfy")) {
                            Map<String, Object> smsResult = mtSubmitSmUtil.submitSm(sendMagParam.getPhone(), sendMagParam.getContent());
                            if (smsResult != null && smsResult.get("result") != null && smsResult.get("result").toString().equals("0")) {
                                isSuccess = "true";
                            }
                        }
@@ -847,11 +858,11 @@
                    serviceSubtask.setSendstate(3L);
                    if (StringUtils.isNotEmpty(isSuccess) && isSuccess.equals("true")) {
                        serviceSubtask.setResult("success");
                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "短信发送成功");
                        serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ",短信发送成功" : "短信发送成功");
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送成功", "2");
                    } else {
                        serviceSubtask.setResult("error");
                        serviceSubtask.setRemark(serviceSubtask.getRemark() + "," + "短信发送失败" + now);
                        serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ",短信发送失败" + now : "短信发送失败" + now);
                        setSuccessPreachForm(serviceSubtask, sendPreachform, "短信发送失败" + now, "5");
                    }
                } catch (Exception e) {
@@ -923,7 +934,12 @@
                    Boolean wxCodeSuccess = false;
                    if (active.equals("hzszlyy")) {
                        if (!map.isEmpty() && map.get("success") != null) {
                            wxCodeSuccess = (boolean) map.get("success");
                            Integer wxCodeSuccessShiyi = (Integer) map.get("success");
                            if (ObjectUtils.isNotEmpty(wxCodeSuccessShiyi) && wxCodeSuccessShiyi == 1) {
                                wxCodeSuccess = true;
                            } else {
                                wxCodeSuccess = false;
                            }
                        }
                    } else {
                        if (!map.isEmpty() && map.get("succ") != null) {
smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.smartor.common;
import com.alibaba.fastjson2.JSON;
import com.smartor.domain.MtSubmitSmResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * MT消息发送工具类(SP向行业汇聚平台提交MT消息)
 * æŽ¥å£åœ°å€ï¼šhttp://ip:port/submitsm
 * ç¼–码:UTF-8,鉴权算法:MD5
 */
@Slf4j
@Component
public class MtSubmitSmUtil {
    private static final RestTemplate restTemplate = new RestTemplate();
    @Value("${sms_password}")
    private String password;
    @Value("${sms_accountName}")
    private String accountName;
    @Value("${sms_url}")
    private String url;
    @Value("${sms_sourceAddr}")
    private String sourceAddr;
    @Value("${sms_serviceCode}")
    private String serviceCode;
    @Value("${sms_appkey}")
    private String appKey;
    @Value("${sms_flag}")
    private String smsFlag;
    /**
     * å‘送MT消息
     *
     * @param destAddr ç›®æ ‡å·ç 
     * @param content  çŸ­ä¿¡å†…容
     * @return MtSubmitSmResp å“åº”结果
     */
    public Map<String, Object> submitSm(String destAddr, String content) {
        try {
            log.info("南华附一发送短信,destAddr:{},content:{}", destAddr, content);
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            String hashHex = buildHashHex(accountName, password, date);
            Map<String, Object> authMap = new HashMap<>();
            authMap.put("Algorithm", "MD5");
            authMap.put("Date", date);
            authMap.put("HASHHEX", hashHex);
            Map<String, Object> reqMap = new HashMap<>();
            reqMap.put("accountName", accountName);
            reqMap.put("Authorization", authMap);
            reqMap.put("DestAddr", destAddr);
            reqMap.put("SourceAddr", sourceAddr);
            reqMap.put("Content", smsFlag + content);
            reqMap.put("ServiceCode", serviceCode);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
            headers.set("Accept-Language", "UTF-8");
            headers.set("app-key", "ak-BFq4NN0TMf92J7KAioNYGz74");
            HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(reqMap), headers);
            log.info("MtSubmitSm è¯·æ±‚地址:{},请求参数:{}", url + "/submitsm", JSON.toJSONString(reqMap));
            ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
            log.info("MtSubmitSm å“åº”结果:{}", response.getBody());
            return JSON.parseObject(response.getBody(), Map.class);
        } catch (Exception e) {
            log.error("MtSubmitSm å‘送失败,url:{},destAddr:{},error:{}", url, destAddr, e.getMessage(), e);
            Map<String, Object> resp = new HashMap<>();
            resp.put("code", -1);
            resp.put("message", "发送异常:" + e.getMessage());
            return resp;
        }
    }
    /**
     * è®¡ç®—HASHHEX:MD5(Algorithm:帐号名:密码:Date)
     * ä¾‹ï¼šMD5:95555:12345:2016-10-09 16:19:43
     */
    private static String buildHashHex(String accountName, String password, String date) throws Exception {
        String plain = "MD5:" + accountName + ":" + password + ":" + date;
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(plain.getBytes(StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}
smartor/src/main/java/com/smartor/domain/MtSubmitSmResp.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.smartor.domain;
import lombok.Data;
import java.util.List;
/**
 * MT消息发送响应参数
 */
@Data
public class MtSubmitSmResp {
    /**
     * ä¸‹å‘状态,0 æˆåŠŸï¼Œå…¶ä»–å¤±è´¥
     */
    private Integer code;
    /**
     * å¤±è´¥æ—¶çš„错误提示
     */
    private String message;
    /**
     * å¤±è´¥æ—¶çš„错误提示
     */
    private String success;
    /**
     * å“åº”结果
     */
    private String result;
    /**
     * ä¸‹å‘状态=0时有效,为系统产生的msgid,如发生了长短信拆分,则返回多条msgid
     */
    private List<String> mtSubmitSm;
}
smartor/src/main/java/com/smartor/domain/PatMedOuthosp.java
@@ -33,7 +33,7 @@
    @ApiModelProperty(value = "门诊编号")
    private String outhospno;
    @ApiModelProperty(value = "长期任务随访标识:0不需要,1需要")
    @ApiModelProperty(value = "长期任务随访标识:0需要,1不需要")
    private String fuflag;
    /**
smartor/src/main/java/com/smartor/domain/ServiceStatisticsRequest.java
@@ -28,7 +28,7 @@
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date endDate;
    @ApiModelProperty(value = "统计维度:day-按天, month-按月, year-按年", example = "day")
    @ApiModelProperty(value = "统计维度:day-按天, month-按月, year-按年(暂时没有)", example = "day")
    private String timeType = "day";
    @ApiModelProperty(value = "机构ID,为空则查询所有")
smartor/src/main/java/com/smartor/domain/ServiceSubTaskAnswerReq.java
@@ -22,6 +22,9 @@
    @ApiModelProperty(value = "患者ID")
    private String param2;
    @ApiModelProperty(value = "subID")
    private String param6;
    @ApiModelProperty(value = "异常标识")
    private String excep;
smartor/src/main/java/com/smartor/domain/ServiceSubTaskMYDAnswerReq.java
@@ -25,6 +25,9 @@
    @ApiModelProperty(value = "任务ID")
    private String taskId;
    @ApiModelProperty(value = "subId")
    private Long subId;
    @ApiModelProperty(value = "住院 1   é—¨è¯Š2    æŠ•诉3")
    private String mzzy;
}
smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -162,6 +162,9 @@
    @ApiModelProperty(value = "服务类型(1、监测评估;2、出院随访;3、门诊随访;4、宣教关怀;5、复诊管理;6、住院满意度调查;7、患者报告; 8、其他通知 9体检随访 10.医技随访  11,影像专科随访  12、心电专科随访, 13专科随访   14、门诊满意度调查  15投诉建议  16课题随访")
    private String serviceType;
    @ApiModelProperty(value = "服务类型集合,按逗号分割")
    private String serviceTypes;
    /**
     * æ¨¡æ¿ID
     */
smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -51,7 +51,7 @@
    @ApiModelProperty(value = "子任务Id集合")
    private List<Long> subTaskIds;
    @ApiModelProperty(value = "科室病区")
    @ApiModelProperty(value = "科室病区:1,病区统计  2,科室统计")
    private Integer statisticaltype;
    private String visitDeptCode;
smartor/src/main/java/com/smartor/domain/VO/ServiceSubtaskVO.java
@@ -668,24 +668,28 @@
    /**
     * å¼€å§‹å‡ºé™¢æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始出院日期")
    private Date startOutHospTime;
    /**
     * å¼€å§‹å‘送日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始发送日期")
    private Date startSendDateTime;
    /**
     * ç»“束发送日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束发送日期")
    private Date endSendDateTime;
    /**
     * ç»“束出院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束出院日期")
    private Date endOutHospTime;
smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
@@ -667,24 +667,28 @@
    /**
     * å¼€å§‹å‡ºé™¢æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始出院日期")
    private Date startOutHospTime;
    /**
     * å¼€å§‹å‘送日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "开始发送日期")
    private Date startSendDateTime;
    /**
     * ç»“束发送日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束发送日期")
    private Date endSendDateTime;
    /**
     * ç»“束出院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "结束出院日期")
    private Date endOutHospTime;
smartor/src/main/java/com/smartor/mapper/SvyTaskTemplateMapper.java
@@ -19,7 +19,7 @@
     * @param svyid ä»»åŠ¡é—®å·æ¨¡æ¿ä¸»é”®
     * @return ä»»åŠ¡é—®å·æ¨¡æ¿
     */
    public SvyTaskTemplate selectSvyTaskTemplateBySvyid(Long svyid);
    public SvyTaskTemplate selectSvyTaskTemplateBySvyid(Long id);
    /**
     * æŸ¥è¯¢ä»»åŠ¡é—®å·æ¨¡æ¿åˆ—è¡¨
smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
@@ -30,6 +30,10 @@
import java.io.FileOutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -650,11 +654,13 @@
        List<PatArchive> patArchiveList1 = DtoConversionUtils.sourceToTarget(patArchiveList, PatArchive.class);
        //给患者联系人赋值
//        for (PatArchive pa : patArchives) {
        for (PatArchive pa : patArchiveList1) {
            PatArchivecontact patArchivecontact = new PatArchivecontact();
            patArchivecontact.setPatid(pa.getId());
            pa.setPatArchivecontactList(patArchivecontactMapper.selectPatArchivecontactList(patArchivecontact));
            Map<String, String> map = calculateAge(pa.getBirthdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), LocalDate.now());
            pa.setAge(StringUtils.isNotEmpty(map.get("age")) ? Long.valueOf(map.get("age")) : null);
            pa.setAgeUnit(map.get("ageUnit") != null ? map.get("ageUnit") : "");
        }
        return patArchiveList1;
@@ -831,6 +837,7 @@
     * @return
     */
//    @Override
    /**
     * èŽ·å–æ‚£è€…ä¿¡æ¯æ€»æ•°ï¼ˆåŽ»é‡ï¼‰
     *
@@ -854,7 +861,7 @@
        } else if (patArchiveReq.getAllhosp() != null && patArchiveReq.getAllhosp() == 2) {
            // æŸ¥çœ‹ä½é™¢  1  æŸ¥çœ‹é—¨è¯Š  2   æŸ¥çœ‹ä½“检  3 æŸ¥çœ‹å‡ºé™¢ 4
//            count = patArchiveMapper.countPatArchiveInfoByOuthospQC(patArchiveReq);
            PatMedOuthospQueryReq req=new PatMedOuthospQueryReq();
            PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
            String deptcodes = CollectionUtils.isEmpty(patArchiveReq.getLeaveldeptcodes()) ? null : String.join(",", patArchiveReq.getLeaveldeptcodes());
            String leavehospitaldistrictcodes = CollectionUtils.isEmpty(patArchiveReq.getLeavehospitaldistrictcodes()) ? null : String.join(",", patArchiveReq.getLeavehospitaldistrictcodes());
            req.setDeptcode(deptcodes);
@@ -882,7 +889,7 @@
        List<PatArchiveOthreInfo> patArchiveList = new ArrayList<>();
        //门急诊信息,采用分表查询(先查门急诊的存储过程,再查患者基本信息表,关联条件:patid)
        PatMedOuthospQueryReq req=new PatMedOuthospQueryReq();
        PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
        String deptcodes = CollectionUtils.isEmpty(patArchiveReq.getLeaveldeptcodes()) ? null : String.join(",", patArchiveReq.getLeaveldeptcodes());
        String leavehospitaldistrictcodes = CollectionUtils.isEmpty(patArchiveReq.getLeavehospitaldistrictcodes()) ? null : String.join(",", patArchiveReq.getLeavehospitaldistrictcodes());
        req.setDeptcode(deptcodes);
@@ -891,10 +898,10 @@
        req.setDrname(StringUtils.isNotEmpty(patArchiveReq.getDrname()) ? patArchiveReq.getDrname() : null);
        req.setPatname(StringUtils.isNotEmpty(patArchiveReq.getName()) ? patArchiveReq.getName() : null);
        req.setDiagname(StringUtils.isNotEmpty(patArchiveReq.getLeavediagname()) ? patArchiveReq.getLeavediagname() : null);
        req.setPageNum(patArchiveReq.getPageNum()==null?null:patArchiveReq.getPageNum());
        req.setPageSize(patArchiveReq.getPageSize()==null?null:patArchiveReq.getPageSize());
        req.setPageNum(patArchiveReq.getPageNum() == null ? null : patArchiveReq.getPageNum());
        req.setPageSize(patArchiveReq.getPageSize() == null ? null : patArchiveReq.getPageSize());
        List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.callSpQueryOuthosp(req);
        for (PatMedOuthosp patMedOuthosp:patMedOuthosps ) {
        for (PatMedOuthosp patMedOuthosp : patMedOuthosps) {
            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp.getPatid());
            PatArchiveOthreInfo patArchiveOthreInfo = DtoConversionUtils.sourceToTarget(patArchive, PatArchiveOthreInfo.class);
            patArchiveOthreInfo.setDeptcode(patMedOuthosp.getDeptcode());
@@ -905,5 +912,57 @@
        }
        return patArchiveList;
    }
    public Map<String, String> calculateAge(LocalDate birthdate, LocalDate today) {
        if (birthdate == null || today.isBefore(birthdate)) {
            return null;
        }
        Map<String, String> ageMap = new HashMap<>();
        Period period = Period.between(birthdate, today);
        long totalDays = ChronoUnit.DAYS.between(birthdate, today);
        long totalMonths = ChronoUnit.MONTHS.between(birthdate, today);
        int years = period.getYears();
        int months = period.getMonths();
        int days = period.getDays();
        String ageUnit;
        Integer age;
        String ageUnit2 = null;
        Integer age2 = null;
        if (totalDays < 90) {
            // å°äºŽ 1 ä¸ªæœˆï¼ŒæŒ‰å¤©è®¡ç®—
            ageUnit = "天";
            age = (int) totalDays;
            ageMap.put("age", age != null ? age.toString() : null);
            ageMap.put("ageUnit", ageUnit);
            ageMap.put("age2", null);
            ageMap.put("ageUnit2", null);
        } else if (totalMonths < 36) {
            // å°äºŽ 1 å¹´ï¼ŒæŒ‰æœˆ + å¤©è®¡ç®—
            ageUnit = "月";
            age = (int) totalMonths;
            ageUnit2 = "天";
            age2 = days;
            ageMap.put("age", age != null ? age.toString() : null);
            ageMap.put("ageUnit", ageUnit);
            ageMap.put("age2", age2 != null ? age2.toString() : null);
            ageMap.put("ageUnit2", ageUnit2);
        } else {
            // å¤§äºŽ 1 å¹´ï¼ŒæŒ‰å¹´ + æœˆè®¡ç®—
            ageUnit = "岁";
            age = years;
            ageUnit2 = "月";
            age2 = months;
            ageMap.put("age", age != null ? age.toString() : null);
            ageMap.put("ageUnit", ageUnit);
            ageMap.put("age2", age2 != null ? age2.toString() : null);
            ageMap.put("ageUnit2", ageUnit2);
        }
        return ageMap;
    }
}
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -1295,18 +1295,15 @@
                                //如果当前循环的子任务的出院时间在“准备新增的子任务”的出院时间之前,则将循环的子任务停掉
//                            log.error("患者再入院的serviceSubtask1为:{}", serviceSubtask1);
                                serviceSubtask1.setSendstate(4L);
                                serviceSubtask1.setIsVisitAgain(2);
                                serviceSubtask1.setRemark("患者再入院");
                                serviceSubtask1.setResult("error");
//                            serviceSubtask1.setFinishtime(new Date());
                                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
                            }
                        }
                    }
                }
                //将患入的入院数据设置为已处理
                //更新状态值 patMedInhosp1.setDeptcheckFlag("0");
                //patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            } catch (Exception e) {
                log.error("入院数据信息出异常了:{},{}", patMedInhosp1, e.getMessage());
            }
smartor/src/main/java/com/smartor/service/impl/PatMedOuthospServiceImpl.java
@@ -304,7 +304,7 @@
        PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
        String deptcodes = CollectionUtils.isEmpty(patMedReq.getDeptcodeList()) ? null : String.join(",", patMedReq.getDeptcodeList());
        req.setBeginAdmitdate(patMedReq.getStartDate());
        req.setEndAdmitdate(patMedReq.getEndDate());
        req.setEndAdmitdate(DateUtils.addDays(patMedReq.getEndDate(),1));
        req.setDeptcode(deptcodes);
        req.setOrgid(patMedReq.getOrgid());
//        req.setCampusid(patMedReq.getCampusid());
@@ -334,6 +334,7 @@
    public Integer dealOutpatientInfo() {
        PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
        patMedOuthosp.setDiagcheckFlag("0");
        patMedOuthosp.setFuflag("1");
        List<PatMedOuthosp> patMedOuthosps = selectPatMedOuthospList(patMedOuthosp);
        for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
            PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOuthosp1.getPatid());
smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -154,7 +154,7 @@
        sysUser.setCampusid("1");
        //根据userName判断一下,是不是之前有新增
        SysUser sysUser1 = null;
        if(StringUtils.isEmpty(sysUser.getUserName()) || StringUtils.isEmpty(sysUser.getOrgid())){
        if (StringUtils.isEmpty(sysUser.getUserName()) || StringUtils.isEmpty(sysUser.getOrgid())) {
            return false;
        }
        List<SysUser> sysUserList = sysUserMapper.selectUserList(sysUser);
@@ -553,9 +553,9 @@
        if (CollectionUtils.isNotEmpty(epli)) externalInHospPatientLiaisonInfo = epli2.get(0);
        List<HashMap<String, Object>> bingRenKZXXList = ObjectUtils.isNotEmpty(yeWuXX) ? (List<HashMap<String, Object>>) yeWuXX.get("BingRenKZXXList") : null;
        if (CollectionUtils.isNotEmpty(bingRenKZXXList)) {
            for(HashMap<String, Object> bingRenKZXX : bingRenKZXXList){
            for (HashMap<String, Object> bingRenKZXX : bingRenKZXXList) {
                String XiangMuDM = ObjectUtils.isNotEmpty(bingRenKZXX.get("XiangMuDM")) ? bingRenKZXX.get("XiangMuDM").toString() : null;
                if(StringUtils.isNotEmpty(XiangMuDM) && XiangMuDM.equals("DuanHaoXX")){
                if (StringUtils.isNotEmpty(XiangMuDM) && XiangMuDM.equals("DuanHaoXX")) {
                    externalInHospPatientInfo.setDuanHaoXX(ObjectUtils.isNotEmpty(bingRenKZXX.get("XiangMuZMC")) ? bingRenKZXX.get("XiangMuZMC").toString() : null);
                    break;
                }
@@ -610,7 +610,7 @@
        patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
        if (ObjectUtils.isNotEmpty(SuiFangJH)) {
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
            if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                try {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -644,9 +644,10 @@
        patMedInhosp1.setInhospstate("1");
        if (deathFlag) {
            //病人死亡无须随访
            patMedInhosp1.setFuflag("1");
            patMedInhosp1.setFuflag("0");
            //更新病人 notrequiredFlag
            patArchive.setNotrequiredFlag("1");
            patArchive.setNotrequiredreason("患者已离世");
            patArchiveMapper.updatePatArchive(patArchive);
            //对已经生成的随访任务进行处理
            ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
@@ -654,8 +655,8 @@
            serviceSubtaskVO.setSendstate(2L);
            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
            for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
                serviceSubtask.setSendstate(6L);
                serviceSubtask.setRemark(serviceSubtask.getRemark() + ";病人已死亡,不随访");
                serviceSubtask.setSendstate(4L);
                serviceSubtask.setRemark(serviceSubtask.getRemark() + ";患者已离世,不随访");
                serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
            }
        }
@@ -666,7 +667,7 @@
            patMedInhosp1.setCampusid("1");
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                //不需要长期任务随访
                patMedInhosp1.setFuflag("1");
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
@@ -689,7 +690,7 @@
            patMedInhosp1.setCreateTime(new Date());
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                //不需要长期任务随访
                patMedInhosp1.setFuflag("1");
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
@@ -768,7 +769,7 @@
        patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
        if (ObjectUtils.isNotEmpty(SuiFangJH)) {
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
            if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                try {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -811,7 +812,7 @@
            patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                //不需要长期任务随访
                patMedInhosp1.setFuflag("1");
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
@@ -834,7 +835,7 @@
            patMedInhosp1.setCreateTime(new Date());
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedInhosp1.getOrgid())) {
                //不需要长期任务随访
                patMedInhosp1.setFuflag("1");
                patMedInhosp1.setFuflag("0");
            }
            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
            if (i != 1) return false;
@@ -984,7 +985,7 @@
        patMedInhosp1.setDeptcode(externalInHospPatientInfo.getDangQianKSID());
        if (ObjectUtils.isNotEmpty(SuiFangJH)) {
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : null);
            patMedInhosp1.setFuflag(ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangBS")) ? SuiFangJH.get("SuiFangBS").toString() : "1");
            if (ObjectUtils.isNotEmpty(SuiFangJH.get("SuiFangRQ"))) {
                try {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -1174,7 +1175,7 @@
                patMedOuthosp.setDrcode(externalDiagnosisInfo.getZhenDuanYSID());
                patMedOuthosp.setDrname(externalDiagnosisInfo.getZhenDuanYSXM());
                patMedOuthosp.setIcd10code(externalDiagnosisInfo.getIcd10());
                patMedOuthosp.setFuflag("0");
                patMedOuthosp.setFuflag("1");
            }
        }
        for (ExternalWZInfo externalWZInfo : ExternalWZInfoList) {
@@ -1191,7 +1192,7 @@
            patMedOuthosp.setUpdateTime(new Date());
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) {
                //不需要长期任务随访,由医生自己去随访(丽水中医院首次提出)
                patMedOuthosp.setFuflag("1");
                patMedOuthosp.setFuflag("0");
            }
            i = patMedOuthospService.updatePatMedOuthosp(patMedOuthosp);
        } else {
@@ -1199,7 +1200,7 @@
            patMedOuthosp.setUpdateTime(new Date());
            if (CollectionUtils.isNotEmpty(noLongTask) && noLongTask.contains(patMedOuthosp.getOrgid())) {
                //不需要长期任务随访
                patMedOuthosp.setFuflag("1");
                patMedOuthosp.setFuflag("0");
            }
            i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp);
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -40,7 +40,6 @@
public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService {
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
    @Autowired
    private IPatArchiveService patArchiveService;
@@ -71,6 +70,9 @@
    @Value("${userPwd}")
    private String userPwd;
    @Value("${lwl_app_key}")
    private String APP_KEY;
    @Override
    public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
@@ -290,19 +292,19 @@
                    sysUserDept.setCreateTime(new Date());
                    sysUserDept.setDelFlag(0L);
                    //判断一下是不是已经存在了
                    if (ObjectUtils.isNotEmpty(sysUser1) && ObjectUtils.isNotEmpty(sysDept)) {
                    //判断一下用户-部门关系是不是已经存在了(无论新用户还是老用户都需要去重)
                    if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) {
                        SysUserDept sud = new SysUserDept();
                        sud.setUserId(sysUser1.getUserId());
                        sud.setUserId(sysUser.getUserId());
                        sud.setDeptId(sysDept.getDeptId());
                        sud.setOrgid(sysDept.getOrgid());
                        List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud);
                        if (CollectionUtils.isNotEmpty(sysUserDepts)) {
                            sysUserDept.setId(sysUserDepts.get(0).getId());
                            sysUserDeptMapper.updateSysUserDept(sysUserDept);
                        } else {
                            sysUserDeptMapper.insertSysUserDept(sysUserDept);
                        }
                    } else {
                        //不存在,则新增
                        sysUserDeptMapper.insertSysUserDept(sysUserDept);
                    }
                    if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) {
                        hospInfoList.add(Arrays.asList(sysDept.getDeptCode()));
@@ -325,7 +327,7 @@
            sur.setOrgid(sysUser.getOrgid());
            //先查询一下,是否存在
            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(sysUser.getUserId(), 3L);
            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(3L, sysUser.getUserId());
            if (ObjectUtils.isNotEmpty(sysUserRole)) continue;
            userRoleList.add(sur);
@@ -551,6 +553,9 @@
        patMedOuthosp.setCreateTime(new Date());
        patMedOuthosp.setOrgid(dto.getOrgId());
        patMedOuthosp.setCampusid(dto.getCampusId());
        patMedOuthosp.setFuflag("1");
        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
            patMedOuthosp.setFuflag("0");
        return patMedOuthosp;
    }
@@ -704,6 +709,8 @@
        patMedInhosp.setNurseName(dto.getChiefNurseName());
        patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
        patMedInhosp.setFuflag("1");
        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
            patMedInhosp.setFuflag("0");
        if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
        if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
        if ("3".equals(cry)) patMedInhosp.setInhospstate("3");
@@ -751,9 +758,20 @@
    }
    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
        PatArchive queryArchive = new PatArchive();
        queryArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
        List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive);
        List<PatArchive> existingArchives = null;
        // ä¼˜å…ˆæŒ‰ patientno ç²¾ç¡®æŸ¥é‡ï¼ŒæŸ¥ä¸åˆ°å†æŒ‰ idcardno æŸ¥é‡ï¼ˆAND条件会漏查同一人不同patientno的情况)
        if (dto.getPatientId() != null) {
            PatArchive queryByPatientNo = new PatArchive();
            queryByPatientNo.setPatientno(String.valueOf(dto.getPatientId()));
            queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null);
            existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
        }
//        if (CollectionUtils.isEmpty(existingArchives) && !StringUtils.isEmpty(dto.getIdCardNo())) {
//            PatArchive queryByIdCard = new PatArchive();
//            queryByIdCard.setIdcardno(dto.getIdCardNo().trim());
//            existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard);
//        }
        PatArchive patArchive = buildPatientArchive(dto);
@@ -762,6 +780,8 @@
            log.debug("【processPatientArchive】新增患者档案,患者编号:{}", patArchive.getPatientno());
        } else {
            patArchive.setId(existingArchives.get(0).getId());
            patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
            patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
            patArchiveService.updateArchive(patArchive);
            log.debug("【processPatientArchive】更新患者档案,患者编号:{}", patArchive.getPatientno());
        }
@@ -771,7 +791,7 @@
    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
        PatArchive patArchive = new PatArchive();
        patArchive.setPatientno("" + dto.getPatientId());
        patArchive.setPatientno(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
        patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
        patArchive.setName(dto.getPatientName());
        patArchive.setSourcefrom(2L);
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -14,9 +14,7 @@
import com.smartor.domain.VO.ServiceSubtaskDetailTraceVO;
import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IServiceSubtaskAnswerService;
import com.smartor.service.IServiceSubtaskDetailTraceService;
import com.smartor.service.IServiceTaskService;
import com.smartor.service.*;
import com.sun.org.apache.bcel.internal.generic.NEW;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@@ -75,6 +73,18 @@
    @Autowired
    private IServiceSubtaskDetailTraceService traceService;
    @Autowired
    private ISvyTaskTemplateService svyTaskTemplateService;
    @Autowired
    private ISvyLibTemplateScriptService svyLibTemplateScriptService;
    @Autowired
    private IIvrTaskTemplateService ivrTaskTemplateService;
    @Autowired
    private IIvrLibaTemplateScriptService ivrLibaTemplateScriptService;
    @Value("${pri_key}")
    private String pri_key;
@@ -154,6 +164,7 @@
    public Integer saveQuestionAnswer(ServiceSubTaskAnswerReq serviceSubTaskAnswerReq, Long flag) {
        Long tid = null;
        Long pid = null;
        Long subid = null;
        Double score = null;
        Long isabno = 0L;
        Set<String> allKeys = redisCache.getAllKeys();
@@ -164,16 +175,19 @@
            if (flag == 0) {
                tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam1(), pri_key));
                pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam2(), pri_key));
                if (StringUtils.isNotEmpty(serviceSubTaskAnswerReq.getParam6()))
                    subid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskAnswerReq.getParam6(), pri_key));
            } else if (flag == 1) {
                tid = Long.valueOf(serviceSubTaskAnswerReq.getParam1());
                pid = Long.valueOf(serviceSubTaskAnswerReq.getParam2());
                subid = Long.valueOf(serviceSubTaskAnswerReq.getParam6());
            }
            if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 2) {
                allKeys = new HashSet<>();
                allKeys.add(pid + "-" + tid + "-WJscriptCache");
                allKeys.add(pid + "-" + tid + "-" + subid + "-WJscriptCache");
            } else if (serviceSubTaskAnswerReq.getType() != null && serviceSubTaskAnswerReq.getType() == 1) {
                allKeys = new HashSet<>();
                allKeys.add(pid + "-" + tid + "-SFscriptCache");
                allKeys.add(pid + "-" + tid + "-" + subid + "-SFscriptCache");
            }
        }
@@ -183,7 +197,7 @@
            String[] split = key.split("-");
            //先判断,是不是当前提交人的,不是当前提交人的,跳过
            try {
                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid)) {
                if (ObjectUtils.isNotEmpty(split[0]) && ObjectUtils.isNotEmpty(split[1]) && !Long.valueOf(split[0]).equals(pid) && !Long.valueOf(split[1]).equals(tid) && !Long.valueOf(split[2]).equals(subid)) {
                    continue;
                }
            } catch (Exception e) {
@@ -202,7 +216,7 @@
                                //说明是第一题
                                List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions();
                                svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, null);
                                Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid);
                                if (map == null) continue aa;
                                if (!Objects.isNull(map.get("nextScriptNo")))
                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -224,7 +238,7 @@
                        if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
//                            log.error("svyTaskTemplateScriptVO的值为:{}", svyTaskTemplateScriptVO);
                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
                            log.error("nextScriptNo的信息为:{}", map.get("nextScriptNo"));
                            if (!Objects.isNull(map.get("nextScriptNo")))
                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -250,7 +264,7 @@
                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList();
//                                List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class);
                                ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, null);
                                Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid);
                                if (!Objects.isNull(map.get("nextScriptNo")))
                                    nextScriptno = Long.valueOf(map.get("nextScriptNo"));
                                if (score == null) {
@@ -267,7 +281,7 @@
                        ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions);
                        if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) {
                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null);
                            Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), Long.valueOf(split[2]));
                            log.error("----nextScriptNo2的信息为:{}", map.get("nextScriptNo"));
                            if (!Objects.isNull(map.get("nextScriptNo")))
                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -377,9 +391,7 @@
                }
            } else if (serviceSubTaskCacheReq.getType() == 1) {
                List<IvrTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList();
                cacheList.sort(Comparator.comparingLong(
                        vo -> Optional.ofNullable(vo.getSort()).orElse(0)
                ));
                cacheList.sort(Comparator.comparingLong(vo -> Optional.ofNullable(vo.getSort()).orElse(0)));
                log.error("电话随访问卷回答结果:{}", cacheList.size());
                for (int i = 0; i < cacheList.size(); i++) {
                    if (i == 0) {
@@ -507,7 +519,7 @@
                            List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptVOS.get(0).getSvyTaskTemplateTargetoptions();
//                            List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyTaskTemplateTargetoptions, SvyTaskTemplateTargetoption.class);
                            svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions);
                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
                            Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, serviceSubTaskMYDAnswerReq.getSubId());
                            if (map == null) continue;
                            if (!Objects.isNull(map.get("nextScriptNo")))
                                nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -531,7 +543,7 @@
                    if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) {
                        log.error("svyTaskTemplateScriptVO的值为:{}", svyTaskTemplateScriptVO);
                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null);
                        Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, serviceSubTaskMYDAnswerReq.getSubId());
                        log.error("map的信息为:{}", map);
                        if (!Objects.isNull(map.get("nextScriptNo")))
                            nextScriptno = Long.valueOf(map.get("nextScriptNo"));
@@ -640,28 +652,33 @@
            RSAPublicKeyExample rsaPublicKeyExample = new RSAPublicKeyExample();
            Long tid = null;
            Long pid = null;
            Long subid = null;
            if (flag == 0L) {
                tid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam1(), pri_key));
                pid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam2(), pri_key));
                if (StringUtils.isNotEmpty(serviceSubTaskCacheReq.getParam6()))
                    subid = Long.valueOf(rsaPublicKeyExample.decryptedData(serviceSubTaskCacheReq.getParam6(), pri_key));
            } else if (flag == 1L) {
                tid = Long.valueOf(serviceSubTaskCacheReq.getParam1());
                pid = Long.valueOf(serviceSubTaskCacheReq.getParam2());
                subid = Long.valueOf(serviceSubTaskCacheReq.getParam6());
            }
            if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS()) && serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS().size() > 0) {
                //问卷
                redisCache.deleteObject(pid + "-" + tid + "-WJscriptCache");
                redisCache.setCacheListRight(pid + "-" + tid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS());
                redisCache.deleteObject(pid + "-" + tid + "-" + subid + "-WJscriptCache");
                redisCache.setCacheListRight(pid + "-" + tid + "-" + subid + "-WJscriptCache", serviceSubTaskCacheReq.getSvyTaskTemplateScriptVOS());
                //设置过期时间 3天
                Long tims = Long.valueOf(3 * 24 * 3600);
                boolean expire = redisCache.expire(pid + "-" + tid + "-WJscriptCache", tims);
                boolean expire = redisCache.expire(pid + "-" + tid + "-" + subid + "-WJscriptCache", tims);
                return 1;
            } else if (CollectionUtils.isNotEmpty(serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList()) && serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList().size() > 0) {
                //问卷
                redisCache.deleteObject(pid + "-" + tid + "-SFscriptCache");
                redisCache.setCacheListRight(pid + "-" + tid + "-SFscriptCache", serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList());
                redisCache.deleteObject(pid + "-" + tid + "-" + subid + "-SFscriptCache");
                redisCache.setCacheListRight(pid + "-" + tid + "-" + subid + "-SFscriptCache", serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList());
                //设置过期时间 3天
                Long tims = Long.valueOf(3 * 24 * 3600);
                redisCache.expire(pid + "-" + tid + "-SFscriptCache", tims);
                redisCache.expire(pid + "-" + tid + "-" + subid + "-SFscriptCache", tims);
                return 1;
            }
        } catch (Exception e) {
@@ -801,6 +818,7 @@
        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
        serviceSubtaskVO.setTaskid(taskid);
        serviceSubtaskVO.setPatid(patid);
        serviceSubtaskVO.setSubId(subid);
        List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
        String score = "0";
        //下题跳转
@@ -819,6 +837,9 @@
            }
            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
            if (StringUtils.isEmpty(nextScriptNo)) {
                nextScriptNo = getNextScriptNo(svyTaskTemplateScriptVO.getTemplateID(), svyTaskTemplateScriptVO.getScriptContent());
            }
            if (svyTaskTemplateScriptVO.getScore() != null) {
                score = String.valueOf(svyTaskTemplateScriptVO.getScore());
            }
@@ -833,7 +854,10 @@
                    score = String.valueOf(svyTaskTemplateScriptVO.getScore());
                }
            }
            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno().toString();
            nextScriptNo = svyTaskTemplateScriptVO.getNextScriptno();
            if (StringUtils.isEmpty(nextScriptNo)) {
                nextScriptNo = getNextScriptNo(svyTaskTemplateScriptVO.getTemplateID(), svyTaskTemplateScriptVO.getScriptContent());
            }
        }
        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(taskid);
        serviceSubtaskDetailVO.setQuestiontext(svyTaskTemplateScriptVO.getScriptContent());
@@ -848,9 +872,7 @@
        serviceSubtaskDetailVO.setCreateTime(new Date());
        serviceSubtaskDetailVO.setUpdateTime(new Date());
        serviceSubtaskDetailVO.setTemplateType(2);
        serviceSubtaskDetailVO.setLibTemplateid(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ?
                (ObjectUtils.isNotEmpty(selectServiceSubtaskList.get(0).getLibtemplateid()) ?
                        selectServiceSubtaskList.get(0).getLibtemplateid().intValue() : null): null);
        serviceSubtaskDetailVO.setLibTemplateid(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? (ObjectUtils.isNotEmpty(selectServiceSubtaskList.get(0).getLibtemplateid()) ? selectServiceSubtaskList.get(0).getLibtemplateid().intValue() : null) : null);
        if (ObjectUtils.isNotEmpty(serviceTask)) {
            serviceSubtaskDetailVO.setGuid(serviceTask.getGuid());
            serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid());
@@ -955,6 +977,33 @@
        return map;
    }
    private String getNextScriptNo(Long taskTemplateID, String scriptContent) {
        SvyTaskTemplate svyTaskTemplate = svyTaskTemplateService.selectSvyTaskTemplateBySvyid(taskTemplateID);
        SvyLibTemplateScript svyLibTemplateScript = new SvyLibTemplateScript();
        svyLibTemplateScript.setSvyid(svyTaskTemplate.getTemplateid());
        svyLibTemplateScript.setScriptContent(scriptContent);
        List<SvyLibTemplateScript> svyLibTemplateScriptList = svyLibTemplateScriptService.selectSvyLibTemplateScriptList(svyLibTemplateScript);
        if (CollectionUtils.isNotEmpty(svyLibTemplateScriptList)) {
            return svyLibTemplateScriptList.get(0).getNextScriptno();
        }
        return null;
    }
    private Long getVoiceNextScriptNo(Long taskTemplateID, String scriptContent) {
        IvrTaskTemplate ivrTaskTemplate = ivrTaskTemplateService.selectIvrTaskTemplateByID(taskTemplateID);
        IvrLibaTemplateScript ivrLibaTemplateScript = new IvrLibaTemplateScript();
        if (StringUtils.isEmpty(ivrTaskTemplate.getLibtemplateid())) return null;
        ivrLibaTemplateScript.setTemplateid(Long.valueOf(ivrTaskTemplate.getLibtemplateid()));
        ivrLibaTemplateScript.setScriptContent(scriptContent);
        List<IvrLibaTemplateScript> ivrLibaTemplateScriptList = ivrLibaTemplateScriptService.selectIvrLibaTemplateScriptList(ivrLibaTemplateScript);
        if (CollectionUtils.isNotEmpty(ivrLibaTemplateScriptList)) {
            return ivrLibaTemplateScriptList.get(0).getNextScriptno();
        }
        return null;
    }
    private Boolean sendTaskIds(List<Integer> sendTaskids, ServiceSubtask serviceSubtask) {
        for (Integer taskId : sendTaskids) {
            ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(Long.valueOf(taskId));
@@ -1042,6 +1091,7 @@
        ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
        serviceSubtaskVO.setTaskid(taskid);
        serviceSubtaskVO.setPatid(patid);
        serviceSubtaskVO.setPatid(subid);
        List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
        String score = "0";
@@ -1061,6 +1111,10 @@
            }
            nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString();
            if (StringUtils.isEmpty(nextScriptNo)) {
                nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
            }
            if (ivrTaskTemplateScriptVO.getScore() != null) {
                score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
            }
@@ -1079,6 +1133,9 @@
                serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext());
                serviceSubtaskDetailVO.setScore(ivrTaskTemplateScriptVO.getScore() != null ? ivrTaskTemplateScriptVO.getScore().toString() : "0");
                nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString();
                if (StringUtils.isEmpty(nextScriptNo)) {
                    nextScriptNo = "" + getVoiceNextScriptNo(ivrTaskTemplateScriptVO.getTemplateID(), ivrTaskTemplateScriptVO.getScriptContent());
                }
                if (ivrTaskTemplateScriptVO.getScore() != null) {
                    score = String.valueOf(ivrTaskTemplateScriptVO.getScore());
                }
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -456,18 +456,18 @@
        if (patMedInhospList.size() > 0) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";患者再入院了");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";患者再入院了" : "患者再入院了");
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            return "无需再次随访,患者再入院了";
        } else if (serviceSubtask1.getSendstate() == 4L) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";无需再次随访,任务被标记不在执行");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";无需再次随访,任务被标记不在执行" : "无需再次随访,任务被标记不在执行");
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            return "无需再次随访,任务被标记不在执行";
        } else if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) {
            serviceSubtask1.setIsVisitAgain(2);
            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask1);
            serviceSubtask1.setRemark(serviceSubtask1.getRemark() + ";无需再次随访,患者被标记不需要被服务");
            serviceSubtask1.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + ";无需再次随访,患者被标记不需要被服务" : "无需再次随访,患者被标记不需要被服务");
            return "无需再次随访,患者被标记不需要被服务";
        } else if (ObjectUtils.isNotEmpty(serviceSubtask1.getIsVisitAgain()) && serviceSubtask1.getIsVisitAgain() == 2) {
            return "无需再次随访,该任务已经再次随访过了";
@@ -2303,7 +2303,7 @@
            String deptcodes = CollectionUtils.isEmpty(request.getDeptcodes()) ? null : String.join(",", request.getDeptcodes());
            if (!request.getTimeType().equals("month")) {
                req.setBeginAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
                req.setEndAdmitdate(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()));
                req.setEndAdmitdate(DateUtils.addDays(DateUtils.parseDate(serviceStatisticsResponse.getTimePeriod()), 1));
            } else {
                // year ç±»åž‹ï¼štimePeriod æ ¼å¼ä¸º "yyyy-MM",取当月第一天和最后一天
                java.time.YearMonth ym = java.time.YearMonth.parse(serviceStatisticsResponse.getTimePeriod());
@@ -2371,13 +2371,13 @@
    public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
        log.info("getSfStatistics的入参为:{}", serviceSubtaskCountReq);
        String groupKey = "drcode";
        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && !serviceSubtaskCountReq.getLeavehospitaldistrictcodes().isEmpty()) {
        if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 1) {
            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                groupKey = "drcode";
            } else {
                groupKey = "leavehospitaldistrictcode";
            }
        } else if (serviceSubtaskCountReq.getDeptcodes() != null && !serviceSubtaskCountReq.getDeptcodes().isEmpty()) {
        } else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2) {
            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
                groupKey = "drcode";
            } else {
@@ -4046,23 +4046,19 @@
        List<Map<String, Object>> detail = new ArrayList<>();
        for (Map<String, Object> row : districtRows) {
            String groupName = row.get("groupName") == null
                    ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString())
                    : row.get("groupName").toString();
            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
            long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
            long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
            totalNoContinue += noCnt;
            totalContinue += yesCnt;
            Map<String, Object> item = new LinkedHashMap<>();
            item.put("未延续_" + groupName, noCnt);
            item.put("已延续_"+groupName, yesCnt);
            item.put("已延续_" + groupName, yesCnt);
            detail.add(item);
        }
        for (Map<String, Object> row : deptRows) {
            String groupName = row.get("groupName") == null
                    ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString())
                    : row.get("groupName").toString();
            String groupName = row.get("groupName") == null ? (row.get("groupCode") == null ? "" : row.get("groupCode").toString()) : row.get("groupName").toString();
            long noCnt = row.get("noContinueCnt") == null ? 0L : Long.parseLong(row.get("noContinueCnt").toString());
            long yesCnt = row.get("continueCnt") == null ? 0L : Long.parseLong(row.get("continueCnt").toString());
            totalNoContinue += noCnt;
smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
@@ -316,6 +316,8 @@
        // ä½é™¢ä¿¡æ¯
        patMedInhosp.setSerialnum(thiedInhospInfo.getInpatientId());
        patMedInhosp.setFuflag("1");
        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
            patMedInhosp.setFuflag("0");
        patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
        // åŒ»é™¢å’ŒåºŠä½ä¿¡æ¯
smartor/src/main/resources/mapper/smartor/ServiceOutPathMapper.xml
@@ -10,6 +10,7 @@
        <result property="param2" column="param2"/>
        <result property="param3" column="param3"/>
        <result property="param5" column="param5"/>
        <result property="param6" column="param6"/>
        <result property="createTime" column="create_time"/>
        <result property="updateTime" column="update_time"/>
        <result property="delFlag" column="del_flag"/>
@@ -24,6 +25,7 @@
               param2,
               param3,
               param5,
               param6,
               create_time,
               update_time,
               radix,
@@ -37,26 +39,29 @@
            resultMap="ServiceOutPathResult">
        <include refid="selectServiceOutPathVo"/>
        where 1=1
            and del_flag = 0
            and orgid is null
            <if test="param1 != null ">
                and param1 = #{param1}
            </if>
            <if test="param2 != null ">
                and param2 = #{param2}
            </if>
            <if test="param3 != null  and param3 != ''">
                and param3 = #{param3}
            </if>
            <if test="param5 != null  and param5 != ''">
                and param5 = #{param5}
            </if>
            <if test="createTime != null">
                and create_time = #{createTime}
            </if>
            <if test="radix != null  and radix != ''">
                and radix=#{radix}
            </if>
        and del_flag = 0
        and orgid is null
        <if test="param1 != null ">
            and param1 = #{param1}
        </if>
        <if test="param2 != null ">
            and param2 = #{param2}
        </if>
        <if test="param3 != null  and param3 != ''">
            and param3 = #{param3}
        </if>
        <if test="param5 != null  and param5 != ''">
            and param5 = #{param5}
        </if>
        <if test="param6 != null  and param6 != ''">
            and param6 = #{param6}
        </if>
        <if test="createTime != null">
            and create_time = #{createTime}
        </if>
        <if test="radix != null  and radix != ''">
            and radix=#{radix}
        </if>
    </select>
@@ -119,6 +124,9 @@
            <if test="param5 != null">param5 =
                #{param5},
            </if>
            <if test="param6 != null">param6 =
                #{param6},
            </if>
            <if test="radix != null">radix =
                #{radix},
            </if>
@@ -150,9 +158,12 @@
            #{id}
        </foreach>
    </update>
    <select id="selectAutoId" resultType="Integer" >
        SELECT AUTO_INCREMENT FROM  INFORMATION_SCHEMA.TABLES
         WHERE  TABLE_NAME  = 'service_out_path'  AND table_schema = DATABASE() and onorgid
    <select id="selectAutoId" resultType="Integer">
        SELECT AUTO_INCREMENT
        FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_NAME = 'service_out_path'
          AND table_schema = DATABASE()
          and onorgid
    </select>
</mapper>
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -346,8 +346,9 @@
            </if>
        </if>
        <if test="deptOrDistrict==2">
            AND (1=1
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND (leavehospitaldistrictcode IN
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                         separator=","
                         close=")">
@@ -357,14 +358,15 @@
            <if test=" leaveldeptcodes != null and leaveldeptcodes.size()>0">
                OR deptcode IN
                <foreach collection="leaveldeptcodes" item="leaveldeptcode" open="(" separator=","
                         close="))">
                         close=")">
                    #{leaveldeptcode}
                </foreach>
            </if>
            </if>)
        </if>
        <if test="deptOrDistrict==3">
            AND (1=1
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND (leavehospitaldistrictcode IN
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                         separator=","
                         close=")">
@@ -372,17 +374,19 @@
                </foreach>
            </if>
            <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
                and visit_dept_code IN
                AND visit_dept_code IN
                <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
                         close="))">
                         close=")">
                    #{visitDeptCode}
                </foreach>
            </if>
            )
        </if>
        <if test="deptOrDistrict==4">
            AND (1=1
            <if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
                AND (leavehospitaldistrictcode IN
                AND leavehospitaldistrictcode IN
                <foreach collection="leavehospitaldistrictcodes" item="leavehospitaldistrictcode" open="("
                         separator=","
                         close=")">
@@ -392,10 +396,11 @@
            <if test=" visitDeptCodes != null and visitDeptCodes.size()>0">
                OR visit_dept_code IN
                <foreach collection="visitDeptCodes" item="visitDeptCode" open="(" separator=","
                         close="))">
                         close=")">
                    #{visitDeptCode}
                </foreach>
            </if>
            )
        </if>
        <if test="visitTime != null">
@@ -643,6 +648,8 @@
            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="serviceType != null and serviceType != ''">and service_type = #{serviceType}</if>
        <if test="serviceTypes != null and serviceTypes != ''">and service_type IN (#{serviceTypes})</if>
        <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
        <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>
        <if test="isabnormal != null">and isabnormal = #{isabnormal}</if>
@@ -722,6 +729,8 @@
            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="serviceType != null and serviceType != ''">and service_type = #{serviceType}</if>
        <if test="serviceTypes != null and serviceTypes != ''">and service_type IN (#{serviceTypes})</if>
        <if test="isabnormal != null ">and isabnormal = #{isabnormal}</if>
        <if test="deptcode != null  and deptcode != ''">and deptcode = #{deptcode}</if>
        <if test="deptname != null  and deptname != ''">and deptname = #{deptname}</if>