liusheng
3 天以前 a03671b4fa1ce464f66fbbc1876627e3d13b0f9d
1.出入院查询接口,新增床号排序
已修改3个文件
78 ■■■■■ 文件已修改
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -400,6 +400,14 @@
    private Integer cry;
    /**
     * 入院床位排序:asc(或 1)=正序,desc(或 2)=倒序,不传=不排序
     * <p>
     * 只对「在院」患者查询(cry=0)生效,其它查询忽略该参数。
     */
    @ApiModelProperty("入院床位排序:asc/1=正序,desc/2=倒序,不传=不排序(仅 cry=0 在院患者生效)")
    private String bedSort;
    /**
     * 出院病区编号
     */
    @ApiModelProperty(value = "出院病区编号集合")
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -99,6 +99,8 @@
     */
    @Override
    public List<PatMedInhosp> selectPatMedInhospList(PatMedInhosp patMedInhosp) {
        //入院床位排序只在「在院」查询(cry=0)下生效,其它查询一律忽略,保证原有排序不变
        patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort()));
        if (patMedInhosp.getCry() != null && patMedInhosp.getCry() == 0) {
            patMedInhosp.setDeptcodeList(patMedInhosp.getLeaveldeptcodes());
            patMedInhosp.setHospitaldistrictcodeList(patMedInhosp.getLeavehospitaldistrictcodes());
@@ -121,6 +123,24 @@
        return patMedInhospList;
    }
    /**
     * 归一化入院床位排序参数
     * <p>
     * asc / 1 -> asc(床位正序),desc / 2 -> desc(床位倒序),其余(含不传)-> null(不排序)。
     * 只对「在院」患者查询(cry=0)生效,出院/转科等查询忽略该参数。
     *
     * @param cry     出入院标识:0入院 1出院 2转科 3预入院
     * @param bedSort 前端传入的床位排序值
     * @return 归一化后的排序值(asc / desc / null)
     */
    private String normalizeBedSort(Integer cry, String bedSort) {
        if (cry == null || cry != 0 || StringUtils.isEmpty(bedSort)) return null;
        String value = bedSort.trim().toLowerCase();
        if ("asc".equals(value) || "1".equals(value)) return "asc";
        if ("desc".equals(value) || "2".equals(value)) return "desc";
        return null;
    }
    @Override
    public List<PatMedInhospDTO> selectPatMedInhospByApplication(PatMedInhosp patMedInhosp) {
        List<PatMedInhosp> patMedInhosps = selectPatMedInhospList(patMedInhosp);
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -370,7 +370,38 @@
            order by b.endtime desc
        </if>
        <if test="cry != null and cry==0">
            order by b.starttime desc , b.bed_no asc
            <!--
              在院患者:可按入院床位正/倒序(bedSort=asc 或 desc),不传时保持默认排序(入院时间倒序 + 床位正序)。
              床位按自然序排(只用 5.7 也支持的 REGEXP/CAST/TRIM/LENGTH,不依赖 8.0 的 REGEXP_REPLACE):
                1) 床位为空/空串的排最后
                2) 纯数字床位排前面,按数值大小(2 在 10 前)
                3) 带字母/汉字的床位按长度 + 字符串(A2 在 A12 前)
                4) inhospid 兜底,保证翻页顺序稳定
              倒序只反转 2)、3) 两组内部顺序:空床位仍排最后,纯数字仍在前。
            -->
            <choose>
                <when test='"asc".equals(bedSort)'>
                    order by
                    coalesce(trim(b.bed_no), '') = '' ,
                    (trim(b.bed_no) regexp '^[0-9]+$') = 0 ,
                    cast(trim(b.bed_no) as unsigned) asc ,
                    length(trim(b.bed_no)) asc ,
                    trim(b.bed_no) asc ,
                    b.inhospid asc
                </when>
                <when test='"desc".equals(bedSort)'>
                    order by
                    coalesce(trim(b.bed_no), '') = '' ,
                    (trim(b.bed_no) regexp '^[0-9]+$') = 0 ,
                    cast(trim(b.bed_no) as unsigned) desc ,
                    length(trim(b.bed_no)) desc ,
                    trim(b.bed_no) desc ,
                    b.inhospid asc
                </when>
                <otherwise>
                    order by b.starttime desc , b.bed_no asc
                </otherwise>
            </choose>
        </if>
    </select>
@@ -808,7 +839,8 @@
            <if test="deptcode != null">#{deptcode},</if>
            <if test="deptname != null">#{deptname},</if>
            <if test="roomno != null">#{roomno},</if>
            <if test="bedNo != null">#{bedNo},</if>
            <!-- 床位空串(HIS 无当前床位)落库为 null,保持"有值 or null"两种状态 -->
            <if test="bedNo != null">nullif(#{bedNo}, ''),</if>
            <if test="orgid != null">#{orgid},</if>
            <if test="campusid != null">#{campusid},</if>
            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
@@ -894,7 +926,7 @@
            #{item.serialnum}, #{item.hospitalname}, #{item.hospitalcode}, #{item.hospitaldistrictcode},
            #{item.hospitaldistrictname},
            #{item.icd10code}, #{item.diagname}, #{item.starttime}, #{item.endtime}, #{item.deptcode}, #{item.deptname},
            #{item.roomno}, #{item.bedNo},
            #{item.roomno}, nullif(#{item.bedNo}, ''),
            #{item.orgid}, #{item.delFlag}, #{item.updateBy}, #{item.updateTime}, #{item.createBy}, #{item.createTime},
            #{item.isupload},
            #{item.uploadTime}, #{item.patid}, #{item.leavediagname}, #{item.leaveicd10code}, #{item.drcode},
@@ -919,6 +951,11 @@
    <update id="updatePatMedInhosp" parameterType="com.smartor.domain.PatMedInhosp">
        update pat_med_inhosp
        <trim prefix="SET" suffixOverrides=",">
            <!--
              兜底:下面字段全为空时(例如调用方只传了 inhospid),如果没有任何 SET 项会生成
              "update pat_med_inhosp where inhospid = ?" 这种非法 SQL。这里放一个自赋值,保证 SET 不为空且不改数据。
            -->
            inhospid = inhospid,
            <if test="serialnum != null">serialnum = #{serialnum},</if>
            <if test="hospitalname != null">hospitalname = #{hospitalname},</if>
            <if test="hospitalcode != null">hospitalcode = #{hospitalcode},</if>
@@ -931,7 +968,12 @@
            <if test="deptcode != null">deptcode = #{deptcode},</if>
            <if test="deptname != null">deptname = #{deptname},</if>
            <if test="roomno != null">roomno = #{roomno},</if>
            <if test="bedNo != null">bed_no = #{bedNo},</if>
            <!--
              床位:HIS 传空串代表"当前没有床位"(换床、或人已离院还没办出院手续),落库为 null;
              完全不传(null)则不改动床位。空串与 null 必须分开判断,不能都跳过,否则床位不会被清掉。
            -->
            <if test='bedNo != null and !"".equals(bedNo)'>bed_no = #{bedNo},</if>
            <if test='bedNo != null and "".equals(bedNo)'>bed_no = null,</if>
            <if test="orgid != null">orgid = #{orgid},</if>
            <if test="campusid != null">campusid = #{campusid},</if>
            <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>