| | |
| | | import com.ruoyi.common.core.service.dto.PatMedReq; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.utils.PageUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.inhospvisit.api.InhospVisitFacade; |
| | | import com.ruoyi.inhospvisit.domain.PatMedInhosp; |
| | |
| | | /** |
| | | * 查询患者住院记录列表。 |
| | | * <p> |
| | | * 原 {@code PatMedInhospController#selectPatMedInhosplist}(L77-87)逐行对应。 |
| | | * 原 {@code PatMedInhospController#selectPatMedInhosplist}(L77-87)逐行对应, |
| | | * 唯一多出来的一行是 {@link #normalizeBedSort} —— 见该方法注释: |
| | | * 原实现里这段归一化在 {@code PatMedInhospServiceImpl} 里,迁到本模块后这条链 |
| | | * 直接调门面,必须把它跟着搬过来,否则 {@code bedSort} 静默失效。 |
| | | */ |
| | | @ApiOperation("查询患者住院记录列表") |
| | | //@PreAuthorize("@ss.hasPermi('smartor:patinhosp:list')") |
| | |
| | | PageUtils.startPageByPost(patMedInhosp.getPageNum(), patMedInhosp.getPageSize()); |
| | | SysUser user = getLoginUser().getUser(); |
| | | patMedInhosp.setOrgid(user.getOrgid()); |
| | | // 前端传的是数字 1 / 2,SQL 只认 "asc" / "desc";不在这里归一就等于没传 |
| | | patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort())); |
| | | List<PatMedInhosp> list = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | // startPage 之后 PageHelper 已经自动执行过一次 count 查询,直接复用 Page 里的 total, |
| | | // 避免用 PageUtils.count 把带 JOIN 的统计语句再跑一遍 |
| | |
| | | * 导出患者住院记录列表。 |
| | | * <p> |
| | | * 原 {@code PatMedInhospController#export}(L165-173)逐行对应。 |
| | | * <p> |
| | | * {@code bedSort} 也要归一:迁出前的 export 同样走 |
| | | * {@code patMedInhospService.selectPatMedInhospList(...)}(见 {@code ccf5fc76} 版本), |
| | | * 归一化是随那次调用生效的。不补这一行就会出现"列表按床号排好了、导出顺序又变回去"。 |
| | | */ |
| | | @ApiOperation("导出患者住院记录列表") |
| | | //@PreAuthorize("@ss.hasPermi('smartor:patinhosp:export')") |
| | | @Log(title = "患者住院记录", businessType = BusinessType.EXPORT) |
| | | @PostMapping("/export") |
| | | public void export(HttpServletResponse response, PatMedInhosp patMedInhosp) { |
| | | patMedInhosp.setBedSort(normalizeBedSort(patMedInhosp.getCry(), patMedInhosp.getBedSort())); |
| | | List<PatMedInhosp> list = inhospVisitFacade.selectPatMedInhospList(patMedInhosp); |
| | | ExcelUtil<PatMedInhosp> util = new ExcelUtil<PatMedInhosp>(PatMedInhosp.class); |
| | | util.exportExcel(response, list, "患者住院记录数据"); |
| | |
| | | public AjaxResult remove(@PathVariable Long[] inhospids) { |
| | | return toAjax(inhospVisitFacade.deletePatMedInhospByInhospids(inhospids)); |
| | | } |
| | | |
| | | /** |
| | | * 归一化"入院床位排序"参数。 |
| | | * <p> |
| | | * 行为与 <b>{@code 接口文档/PatMedInhosp 患者住院记录接口文档.md} 里 bedSort 的说明</b> |
| | | * 以及迁出前的 {@code PatMedInhospServiceImpl#normalizeBedSort}(smartor,L213-219) |
| | | * 完全一致: |
| | | * <pre> |
| | | * asc / 1 -> "asc" 床位正序 |
| | | * desc / 2 -> "desc" 床位倒序 |
| | | * 其余(含不传、空串、非法值)-> null 不排序,保持原有默认排序 |
| | | * 只对「在院」查询(cry=0)生效;出院 / 转科 / 预入院 一律忽略该参数 |
| | | * </pre> |
| | | * <p> |
| | | * ⚠️ <b>为什么必须在 Java 侧归一,而不是让 SQL 也认 "1"/"2"</b>: |
| | | * <ul> |
| | | * <li>前端传的是 <b>数字</b> {@code bedSort:1},Jackson 落到 {@code String} 字段是 |
| | | * {@code "1"},而 mapper 的 {@code <choose>} 只匹配字符串 {@code "asc"/"desc"} |
| | | * —— 不归一就静默落回默认排序,"按床位排序"这个功能等于没生效(真实线上缺陷);</li> |
| | | * <li>同一个排序契约还出现在 {@code VisitInhospMapper.xml}(随访扫描那条链, |
| | | * 入参是 {@code VisitInhospRow}),把"只认 asc/desc"留在 SQL 里, |
| | | * 两条链对外的约定才是一致的;</li> |
| | | * <li>迁到本模块后这条链<b>不再经过</b> {@code PatMedInhospServiceImpl}, |
| | | * 原归一化会随迁出一起丢掉,所以搬到这里补回来。</li> |
| | | * </ul> |
| | | * 由 {@code sql/_probe/verify_patinhosp_bedsort.py} 把关。 |
| | | * |
| | | * @param cry 出入院标识:0 入院(在院) 1 出院 2 转科 3 预入院 |
| | | * @param bedSort 前端传入的床位排序值("asc"/"1"/"desc"/"2"/空) |
| | | * @return {@code "asc"} / {@code "desc"} / {@code null}(不排序) |
| | | */ |
| | | private static String normalizeBedSort(Integer cry, String bedSort) { |
| | | // 只对「在院」查询生效:cry != 0 一律置空,保证出院等场景排序不变 |
| | | 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"; |
| | | } |
| | | // 非法值:不排序(与"不传"同义),避免落到 XML 的 <otherwise> 之外的行为 |
| | | return null; |
| | | } |
| | | } |