陈昶聿
2 天以前 c4dc6a5d66524d08b768046d9d2d5974bf96f45c
Merge branch 'smartor_ls_261103' into smartor_ls_merge
已修改13个文件
240 ■■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/service/dto/VisitSubtaskDraft.java
@@ -112,6 +112,19 @@
    /** 诊断名称 */
    private String diagname;
    /**
     * 重要性标记编码(2026-11 新增):来源 {@code pat_med_inhosp.importance_flag_code},
     * 落库到 {@code service_subtask.importance_flag_code}。
     * <p>
     * 判断「日间」就看这个字段({@code ImportFlagEnum} 的 {@code FH0165.01} 日间手术 /
     * {@code FH0165.02} 日间诊疗;现场库存的是中文描述「日间手术」「日间诊疗」,可能多值)。
     * <p>
     * ⚠️ 与 {@code deptcode}/{@code leaveldeptcode} 那批不同:<b>不做维度改写</b>
     * (入院宣教 type=4/5 也照样带原值),它描述的是「这次住院的重要性/日间属性」,与科室无关。
     * 门诊链路({@link OuthospSubtaskDraft})没有这个来源,恒为 {@code null}。
     */
    private String importanceFlagCode;
    // ==================== 模板(原 serviceTask) ====================
    /** 问卷模板ID */
    private Long templateid;
@@ -517,6 +530,14 @@
        this.diagname = diagname;
    }
    public String getImportanceFlagCode() {
        return importanceFlagCode;
    }
    public void setImportanceFlagCode(String importanceFlagCode) {
        this.importanceFlagCode = importanceFlagCode;
    }
    public Long getTemplateid() {
        return templateid;
    }
ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/domain/row/VisitInhospRow.java
@@ -545,7 +545,14 @@
    private String outWayName;
    /** 过滤:就诊来源ID */
    private String encounterSourceId;
    /** 过滤:重要程度代码 */
    /**
     * 重要性标记(2026-11 起<b>不再只是过滤条件</b>:{@code selectForScan} / {@code selectByInhospid}
     * 已经把 {@code b.importance_flag_code} 查出来,建子任务时原样带给 {@code service_subtask})。
     * <p>
     * 取值:现场库存中文描述(「日间手术」「日间诊疗」「无」「特约人员」「离休人员」,可能逗号多值),
     * 也有库按 {@code ImportFlagEnum} 存 {@code FH0165.01} / {@code FH0165.02} 等编码。
     * 判断「日间」就判断它 —— 本类只负责搬运,不做值域归一。
     */
    private String importanceFlagCode;
    /** 过滤:急诊分级代码 */
    private String emergencyLevelCode;
ruoyi-inhospvisit/src/main/java/com/ruoyi/inhospvisit/support/VisitSubtaskFactory.java
@@ -146,6 +146,12 @@
        d.setDeptname(inhosp.getDeptname());
        d.setHospitaldistrictcode(inhosp.getHospitaldistrictcode());
        d.setHospitaldistrictname(inhosp.getHospitaldistrictname());
        // ---- 2026-11 新增:重要性标记(含「日间」)原样带走 ----
        //   背景:判断日间就看 pat_med_inhosp.importance_flag_code(现场库存中文描述
        //         「日间手术」「日间诊疗」,也有库按 ImportFlagEnum 存 FH0165.01/02)。
        //   子任务落一份,随访列表就能直接按「日间」筛,不用每行回查住院登记表。
        //   口径:原样拷贝、不做值域归一;不随 type 4/5 改写(与科室/病区维度无关)。
        d.setImportanceFlagCode(inhosp.getImportanceFlagCode());
        // ---- 原 L1128-1134:type 4/5 改用入院维度 ----
        if (type != null && (type == 4 || type == 5)) {
            d.setLeaveldeptcode(inhosp.getDeptcode());
@@ -308,6 +314,8 @@
        d.setHospitaldistrictname(inhosp.getHospitaldistrictname());
        d.setLeavehospitaldistrictcode(inhosp.getLeavehospitaldistrictcode());
        d.setLeavehospitaldistrictname(inhosp.getLeavehospitaldistrictname());
        // 2026-11:重要性标记(含「日间」)原样带走(口径同 boxedServiceSubtask)
        d.setImportanceFlagCode(inhosp.getImportanceFlagCode());
        // ---- 原 L1242-1251 ----
        d.setTemplateid(serviceTask.getTemplateid());
        d.setTemplatename(serviceTask.getTemplatename());
ruoyi-inhospvisit/src/main/resources/mapper/inhospvisit/VisitInhospMapper.xml
@@ -74,6 +74,8 @@
        <result property="longTaskReason" column="long_task_reason"/>
        <result property="remark" column="remark"/>
        <result property="medicalCode" column="medical_code"/>
        <!-- 2026-11:重要性标记编码(日间手术/日间诊疗/无…),建子任务时原样带给 service_subtask -->
        <result property="importanceFlagCode" column="importance_flag_code"/>
    </resultMap>
    <!--
@@ -125,6 +127,7 @@
        b.fuflag,
        b.fudate,
        b.remark,
        b.importance_flag_code,
        b.medical_code
        FROM
        pat_med_inhosp b
@@ -337,6 +340,7 @@
               leaveldeptname,
               leavehospitaldistrictcode,
               leavehospitaldistrictname,
               importance_flag_code,
               campusid
        from pat_med_inhosp
        where inhospid = #{inhospid}
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/OperationSubtaskWriter.java
@@ -485,6 +485,8 @@
        serviceSubtask.setLeaveldeptname(patMedInhosp1.getLeaveldeptname());
        serviceSubtask.setLeavehospitaldistrictcode(patMedInhosp1.getLeavehospitaldistrictcode());
        serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
        // 2026-11:重要性标记(含「日间」)随任务走,便于子任务列表直接按日间筛选
        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
        serviceSubtask.setTemplateid(serviceTask.getTemplateid());
        serviceSubtask.setTemplatename(serviceTask.getTemplatename());
@@ -620,6 +622,8 @@
        serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
        serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
        serviceSubtask.setDiagname(patMedInhosp1.getDiagname());
        // 2026-11:重要性标记(含「日间」)随任务走(口径同上)
        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
        serviceSubtask.setTemplateid(serviceTask.getTemplateid());
        serviceSubtask.setTemplatename(serviceTask.getTemplatename());
        serviceSubtask.setPatid(patArchive.getId());
ruoyi-task/src/main/java/com/ruoyi/task/api/contract/VisitTaskCreateApiImpl.java
@@ -285,6 +285,10 @@
        e.setLeaveicd10code(d.getLeaveicd10code());
        e.setLeavediagname(d.getLeavediagname());
        e.setDiagname(d.getDiagname());
        // 2026-11:重要性标记编码(日间手术/日间诊疗/无…),来自 pat_med_inhosp.importance_flag_code。
        // 只有「出入院随访」链路会填值(VisitSubtaskFactory);门诊/手术等草稿里为 null →
        // insert 的条件列直接跳过,与改造前这些列不写的效果一致。
        e.setImportanceFlagCode(d.getImportanceFlagCode());
        e.setTemplateid(d.getTemplateid());
        e.setTemplatename(d.getTemplatename());
        e.setLibtemplateid(d.getLibtemplateid());
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtask.java
@@ -708,6 +708,25 @@
    private String diagType;
    /**
     * 重要性标记编码(2026-11 新增,<b>建任务时从 {@code pat_med_inhosp.importance_flag_code} 同步</b>)。
     * <p>
     * 为什么同步:判断「日间」就看这个字段,而 service_subtask 上只有 {@code inhospid},
     * 不落一份的话按「日间」筛子任务每行都要回查住院登记表(JOIN / 子查询),列表与统计都变慢。
     * <p>
     * 取值是<b>原样拷贝</b>,不在本表做归一:
     * <ul>
     *   <li>枚举编码口径({@code ImportFlagEnum}):{@code FH0165.01} 日间手术、{@code FH0165.02} 日间诊疗、
     *       {@code FH0165.03} 无、{@code FH0165.98} 特约人员、{@code FH0165.99} 离休人员;</li>
     *   <li>现场也有存<b>中文描述</b>的库(「日间手术」「日间诊疗」…),还存在逗号多值(如 {@code 无,日间手术})。</li>
     * </ul>
     * 所以查询侧提供「精确值」和「集合 IN」两种条件,见 {@code serviceSubtaskWhere}。
     * <p>
     * ⚠️ 这是<b>建任务那一刻的快照</b>:之后住院记录改了标记,不会自动回写已有子任务。
     */
    @ApiModelProperty(value = "重要性标记编码(日间手术/日间诊疗/无/特约人员/离休人员,或 FH0165.xx)")
    private String importanceFlagCode;
    /**
     * 开始出院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceSubtaskRes.java
@@ -243,6 +243,17 @@
    private String deptname;
    /**
     * 重要性标记编码(2026-11 新增):建任务时从 {@code pat_med_inhosp.importance_flag_code} 同步,
     * 列表接口原样返回。
     * <p>
     * 判断「日间」看这里:{@code ImportFlagEnum} 的 {@code FH0165.01}(日间手术)/
     * {@code FH0165.02}(日间诊疗);现场库存的是中文描述「日间手术」「日间诊疗」,
     * 还可能出现 {@code 无,日间手术} 这类多值 —— 所以前端别用等值判断,按「包含」匹配。
     */
    @ApiModelProperty(value = "重要性标记编码(日间手术/日间诊疗/无/特约人员/离休人员)")
    private String importanceFlagCode;
    /**
     * 晚上开始发送时间限制
     */
    @Excel(name = " 晚上开始发送时间限制 ")
ruoyi-task/src/main/java/com/ruoyi/task/domain/ServiceTaskVO.java
@@ -70,9 +70,9 @@
    private List<String> leavehospitaldistrictcodes;
    /**
     * 出院病区编号
     * 出院部门编号集合(点位编号)
     */
    @ApiModelProperty(value = "出院部门编号集合")
    @ApiModelProperty(value = "出院部门编号集合(点位编号)")
    private List<String> leaveldeptcodes;
    /**
@@ -468,8 +468,8 @@
    /**
     * 适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组
     */
    @ApiModelProperty("适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组  6.按药品编码")
    @Excel(name = "适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组 6.按药品编码" )
    @ApiModelProperty("适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组  6.按药品编码  7.按点位(同德需求)")
    @Excel(name = "适用条件类型:1、按科室、2、按病区、3、按疾病诊断、4、按手术类型、5、按任务组 6.按药品编码   7.按点位(同德需求)" )
    private String appltype;
    @ApiModelProperty(value = "随访部门编码")
ruoyi-task/src/main/java/com/ruoyi/task/domain/entity/ServiceSubtaskEntity.java
@@ -732,6 +732,31 @@
    private String managementDoctor;
    /**
     * 重要性标记编码(2026-11 新增,<b>查询条件</b>):精确匹配。
     * <p>
     * 对应 {@code service_subtask.importance_flag_code}:建任务时从
     * {@code pat_med_inhosp.importance_flag_code} 原样同步。
     * 枚举见 {@code com.ruoyi.common.enums.ImportFlagEnum}
     * ({@code FH0165.01} 日间手术、{@code FH0165.02} 日间诊疗…);
     * 现场库也可能存中文描述。
     */
    @ApiModelProperty(value = "重要性标记编码(精确匹配,如 FH0165.01 / 日间手术)")
    private String importanceFlagCode;
    /**
     * 重要性标记编码集合(查询条件):{@code IN} 匹配,用于「日间」这类
     * 「要同时命中多个取值」的场景。
     * <p>
     * 例:只看日间 → {@code ["日间手术","日间诊疗"]}(中文描述口径)或
     * {@code ["FH0165.01","FH0165.02"]}(枚举编码口径)。
     * <p>
     * ⚠️ 等值/IN 都匹配不到逗号多值(如 {@code 无,日间手术});这类数据极少,
     * 需要时请用 {@code find_in_set} 单独写 SQL,别把语义塞进这个字段。
     */
    @ApiModelProperty(value = "重要性标记编码集合(IN 匹配,用于一次筛多个标记)")
    private List<String> importanceFlagCodes;
    /**
     * 开始出院日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -1599,6 +1599,61 @@
    }
    /**
     * 取逗号串里的第一个值(任务上科室/病区是多选,而 {@code service_subtask} 上都是单值列)。
     */
    private String firstValue(String value) {
        if (StringUtils.isEmpty(value)) {
            return null;
        }
        for (String item : value.split(",")) {
            if (StringUtils.isNotEmpty(item.trim())) {
                return item.trim();
            }
        }
        return null;
    }
    /**
     * 任务配置({@link ServiceTaskVO})→ 子任务({@link ServiceSubtask})的字段搬运。
     * <p>
     * <b>为什么不能直接 {@code DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class)}:</b>
     * 它是纯同名拷贝,而两边同名的 {@code deptcode / deptname} <b>语义不同</b>:
     * <ul>
     *   <li>{@code ServiceTaskVO.deptcode / deptname} = 任务的「适用科室」,
     *       出院随访(serviceType=2)/ 出院宣教(4)/ 门诊随访(3)等场景下就是<b>离院科室</b>;</li>
     *   <li>{@code ServiceSubtask.deptcode / deptname} = <b>在院科室</b>
     *       (2026-11 由原 sendlimitpbegin/pend 复用而来,见 {@code ServiceSubtask} 字段注释)。</li>
     * </ul>
     * 于是纯同名拷贝会把「离院科室」写进「在院科室」列,后果有两个:
     * <ol>
     *   <li>按在院维度筛({@code deptcodes} → {@code service_subtask.deptcode})会误命中这些子任务;</li>
     *   <li>按离院维度筛({@code leaveldeptcodes} → {@code service_subtask.leaveldeptcode})时,
     *       患者自己没带科室的那些(前端手动勾选患者很常见)会因为 {@code leaveldeptcode} 为空而查不到。</li>
     * </ol>
     * 因此这里按项目既定口径({@code doc/service_subtask_字段改名_改动清单.md} §8:这几条
     * 「长期任务 / 任务组 / 手动建任务」路径<b>不填在院维度</b>)统一处理:
     * <b>在院维度 4 列清空</b>(在院科室/在院病区只有 HIS 链路能从 {@code pat_med_inhosp} 拿到),
     * <b>科室 / 病区一律落离院维度</b>({@code leaveldeptcode/name}、{@code leavehospitaldistrictcode/name})。
     *
     * @param serviceTaskVO 建任务入参
     * @return 已按离院维度归位的子任务对象(在院维度为空)
     */
    private ServiceSubtask toSubtaskFromTaskVO(ServiceTaskVO serviceTaskVO) {
        ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
        // ① 在院维度必须清空:任务配置的科室不是患者本人的在院科室
        serviceSubtask.setDeptcode(null);
        serviceSubtask.setDeptname(null);
        serviceSubtask.setHospitaldistrictcode(null);
        serviceSubtask.setHospitaldistrictname(null);
        // ② 科室 / 病区 → 离院维度(多选串取第一个,子任务是单值列)
        serviceSubtask.setLeaveldeptcode(firstValue(serviceTaskVO.getDeptcode()));
        serviceSubtask.setLeaveldeptname(firstValue(serviceTaskVO.getDeptname()));
        serviceSubtask.setLeavehospitaldistrictcode(firstValue(serviceTaskVO.getLeavehospitaldistrictcode()));
        serviceSubtask.setLeavehospitaldistrictname(firstValue(serviceTaskVO.getLeavehospitaldistrictname()));
        return serviceSubtask;
    }
    /**
     * 单一任务
     *
     * @return 结果
@@ -1825,7 +1880,8 @@
//            }
            //将任务信息放到服务表中
            ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
            // 科室/病区按「离院维度」归位(出院随访的科室病区就是离院科室/病区),见 toSubtaskFromTaskVO
            ServiceSubtask serviceSubtask = toSubtaskFromTaskVO(serviceTaskVO);
            serviceSubtask.setTaskid(serviceTask.getTaskid().longValue());
            serviceSubtask.setTemplatename(ObjectUtils.isNotEmpty(tempid) ? tempName : serviceTask.getTemplatename());
            serviceSubtask.setTemplateid(ObjectUtils.isNotEmpty(tempid) ? tempid : serviceTask.getTemplateid());
@@ -1846,15 +1902,18 @@
                    serviceSubtask.setInhospid(patTaskRelevance.getHospid());
                    //新建完成就是待发送状态
                    serviceSubtask.setSendstate(2L);
                    String subtaskDeptCode = patTaskRelevance.getDeptcode();
                    if (StringUtils.isEmpty(subtaskDeptCode) && StringUtils.isNotEmpty(serviceTaskVO.getDeptcode())) {
                        // service_subtask.leaveldeptcode 为单值字段,不能写入任务的多科室拼接串,取第一个科室兜底
                        subtaskDeptCode = serviceTaskVO.getDeptcode().split(",")[0].trim();
                    }
                    serviceSubtask.setLeaveldeptcode(subtaskDeptCode);
                    serviceSubtask.setLeaveldeptname(StringUtils.isNotEmpty(patTaskRelevance.getDeptName()) ? patTaskRelevance.getDeptName() : serviceTaskVO.getDeptname());
                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
                    // 离院维度(出院随访 = 出院科室 / 出院病区):
                    // 患者自带的出院科室/病区优先,患者侧没带(前端手动勾选很常见)时回退到任务配置,
                    // 不能无条件覆盖 —— 否则会把 toSubtaskFromTaskVO 按任务配置兜好的离院维度抹成 null,
                    // 结果「任务配了科室病区、生成出来的子任务离院科室/病区却是空」。
                    serviceSubtask.setLeaveldeptcode(firstNonBlank(patTaskRelevance.getDeptcode(),
                            firstValue(serviceTaskVO.getDeptcode())));
                    serviceSubtask.setLeaveldeptname(firstNonBlank(patTaskRelevance.getDeptName(),
                            firstValue(serviceTaskVO.getDeptname())));
                    serviceSubtask.setLeavehospitaldistrictcode(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictcode(),
                            firstValue(serviceTaskVO.getLeavehospitaldistrictcode())));
                    serviceSubtask.setLeavehospitaldistrictname(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictname(),
                            firstValue(serviceTaskVO.getLeavehospitaldistrictname())));
                    serviceSubtask.setType(serviceTaskVO.getType());
                    serviceSubtask.setHospType(patTaskRelevance.getHospType());
                    serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
@@ -2212,7 +2271,8 @@
            }
            if (CollectionUtils.isNotEmpty(serviceTaskVO.getPatTaskRelevances())) {
                for (PatTaskRelevance patTaskRelevance : serviceTaskVO.getPatTaskRelevances()) {
                    ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTaskVO, ServiceSubtask.class);
                    // 科室/病区按「离院维度」归位(出院随访的科室病区就是离院科室/病区),见 toSubtaskFromTaskVO
                    ServiceSubtask serviceSubtask = toSubtaskFromTaskVO(serviceTaskVO);
                    serviceSubtask.setLibtemplateid(ObjectUtils.isEmpty(serviceTaskVO.getLibtemplateid()) ? null : Long.valueOf(serviceTaskVO.getLibtemplateid()));
                    serviceSubtask.setLibtemplatename(serviceTaskVO.getLibtemplatename());
                    serviceSubtask.setTemplateid(serviceTask.getTemplateid());
@@ -2224,10 +2284,16 @@
                    serviceSubtask.setAddr(patTaskRelevance.getAddr());
                    serviceSubtask.setPatid(patTaskRelevance.getPatid());
                    serviceSubtask.setOpenid(patTaskRelevance.getOpenid());
                    serviceSubtask.setLeaveldeptcode(patTaskRelevance.getDeptcode());
                    serviceSubtask.setLeavehospitaldistrictname(patTaskRelevance.getLeavehospitaldistrictname());
                    serviceSubtask.setLeavehospitaldistrictcode(patTaskRelevance.getLeavehospitaldistrictcode());
                    serviceSubtask.setLeaveldeptname(patTaskRelevance.getDeptName());
                    // 离院维度:患者自带的出院科室/病区优先,没带时回退到任务配置(否则会把
                    // toSubtaskFromTaskVO 按任务配置兜好的值抹成 null,出院随访就成「离院科室/病区为空」)
                    serviceSubtask.setLeaveldeptcode(firstNonBlank(patTaskRelevance.getDeptcode(),
                            firstValue(serviceTaskVO.getDeptcode())));
                    serviceSubtask.setLeaveldeptname(firstNonBlank(patTaskRelevance.getDeptName(),
                            firstValue(serviceTaskVO.getDeptname())));
                    serviceSubtask.setLeavehospitaldistrictcode(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictcode(),
                            firstValue(serviceTaskVO.getLeavehospitaldistrictcode())));
                    serviceSubtask.setLeavehospitaldistrictname(firstNonBlank(patTaskRelevance.getLeavehospitaldistrictname(),
                            firstValue(serviceTaskVO.getLeavehospitaldistrictname())));
                    serviceSubtask.setType(serviceTaskVO.getType());
                    serviceSubtask.setCreateTime(DateUtils.getNowDate());
                    serviceSubtask.setDrname(patTaskRelevance.getDrname());
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
@@ -109,6 +109,8 @@
        <result property="isManuallyCalled" column="is_manually_called"/>
        <result property="campusid" column="campusid"/>
        <result property="diagType" column="diag_type"/>
        <!-- 2026-11:重要性标记编码(日间手术/日间诊疗/无…),建任务时取自 pat_med_inhosp -->
        <result property="importanceFlagCode" column="importance_flag_code"/>
    </resultMap>
    <resultMap type="com.ruoyi.task.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2">
@@ -244,6 +246,7 @@
               hospitaldistrictname,
               deptcode,
               deptname,
               importance_flag_code,
               stop_state,
               leavehospitaldistrictcode,
               leavehospitaldistrictname,
@@ -720,6 +723,26 @@
        <if test="operatorNo != null  and operatorNo != ''">and operator_no = #{operatorNo}</if>
        <if test="wechat != null  and wechat != ''">and wechat = #{wechat}</if>
        <if test="hospType != null  and hospType != ''">and hosp_type = #{hospType}</if>
        <!--
          2026-11:重要性标记筛选(对应 service_subtask.importance_flag_code,建任务时取自
          pat_med_inhosp.importance_flag_code)。两种写法:
            ① 精确单值  importanceFlagCode = 'FH0165.01'(或描述口径 '日间手术')
            ② 精确多值  importanceFlagCodes = ['FH0165.01','FH0165.02']
          该列采集时就被拼成**描述串**(ImportFlagEnum 的 desc),多值用英文逗号拼接,
          如 '无,日间手术'(见 ServiceSLTDHealthcareRecordServiceImpl#hospitalizedApply)——
          等值/IN 只命中单值行;多值行(现场仅 7 条,都在出院记录上)要筛全需自行写
          find_in_set。两种口径并存(有库存枚举编码、有库存中文描述),传什么按什么精确比,
          不做值域归一。
        -->
        <if test="importanceFlagCode != null  and importanceFlagCode != ''">
            and importance_flag_code = #{importanceFlagCode}
        </if>
        <if test="importanceFlagCodes != null and importanceFlagCodes.size() > 0">
            AND importance_flag_code IN
            <foreach collection="importanceFlagCodes" item="impFlagItem" open="(" separator="," close=")">
                #{impFlagItem}
            </foreach>
        </if>
        <if test="libtemplateid != null ">and libtemplateid = #{libtemplateid}</if>
        <if test="libtemplatename != null ">and libtemplatename = #{libtemplatename}</if>
        <if test="openid != null ">and openid = #{openid}</if>
@@ -1191,6 +1214,8 @@
            <if test="hospitaldistrictname != null  and hospitaldistrictname != ''">hospitaldistrictname,</if>
            <if test="deptcode != null  and deptcode != ''">deptcode,</if>
            <if test="deptname != null  and deptname != ''">deptname,</if>
            <!-- 2026-11:重要性标记编码(日间手术/日间诊疗…),建任务时从 pat_med_inhosp 同步 -->
            <if test="importanceFlagCode != null  and importanceFlagCode != ''">importance_flag_code,</if>
            <if test="labelstatus != null">labelstatus,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
@@ -1300,6 +1325,7 @@
            <if test="hospitaldistrictname != null  and hospitaldistrictname != ''">#{hospitaldistrictname},</if>
            <if test="deptcode != null  and deptcode != ''">#{deptcode},</if>
            <if test="deptname != null  and deptname != ''">#{deptname},</if>
            <if test="importanceFlagCode != null  and importanceFlagCode != ''">#{importanceFlagCode},</if>
            <if test="labelstatus != null">#{labelstatus},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -828,6 +828,9 @@
        serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
        serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
        serviceSubtask.setDiagname(patMedInhosp1.getDiagname());
        // 2026-11:重要性标记(含「日间」)随任务走,与 ruoyi-inhospvisit 的口径一致。
        // 本条链路是「人工新增随访 / 疾病维度」仍在用的遗留实现。
        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
        serviceSubtask.setTemplateid(serviceTask.getTemplateid());
        serviceSubtask.setTemplatename(serviceTask.getTemplatename());
        serviceSubtask.setPatid(patArchive.getId());
@@ -933,6 +936,8 @@
        serviceSubtask.setLeavehospitaldistrictname(patMedInhosp1.getLeavehospitaldistrictname());
        serviceSubtask.setLeaveicd10code(patMedInhosp1.getLeaveicd10code());
        serviceSubtask.setLeavediagname(patMedInhosp1.getLeavediagname());
        // 2026-11:重要性标记(含「日间」)随任务走(口径同上)
        serviceSubtask.setImportanceFlagCode(patMedInhosp1.getImportanceFlagCode());
        serviceSubtask.setTemplateid(serviceTask.getTemplateid());
        serviceSubtask.setTemplatename(serviceTask.getTemplatename());