package com.ruoyi.outpatientvisit.controller;
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.service.dto.PatMedReq;
import com.ruoyi.common.core.service.dto.PatMedRes;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.PageUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
import com.ruoyi.outpatientvisit.service.OuthospDataService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Array;
import java.util.List;
import java.util.Map;
/**
* 患者门诊记录 Controller —— 从 {@code ruoyi-admin} 的 {@code PatMedOuthospController}
* 整体迁入。
*
*
⚠️ URL 一个都不能变
* 类级路径仍是 {@code /smartor/patouthosp},方法级路径逐字照抄。
* 前端 {@code smartor-web/src/api/AiCentre/EChartsdata.js} 在用其中的
* {@code selectPatMedOuthospCount},改了就无法回归。
* 由 {@code sql/_probe/verify_outhosp_url_equivalence.py} 把关。
*
* 与原实现的等价改写(已登记)
*
* - 不再经 smartor 的 {@code IPatMedOuthospService},改为本模块
* {@link OuthospDataService} —— 原 Service 的 10 个方法全部已迁入本模块
* (含跨域富化与统计,它们改走 ruoyi-common 契约);
* - 原文件里注释掉的 {@code /getInfo/{id}} 端点保持注释状态,不启用
* (启用会新增一个前端未知的端点,且底层 {@code selectPatMedOuthospById} 是空壳);
* - {@code list} 仍调用两次 {@code selectList}(第一次带分页取列表、
* 第二次去掉分页只为拿 count)—— 这是原实现的写法,原样保留。
* 注意富化只在 {@code pageNum != null} 时发生,故第二次调用不会重复富化。
*
*
* 开关
* 本类不挂开关拦截器:这 8 个端点都是门诊记录的基础查询/CRUD
* (前端管理页在用),{@code outpatientvisit.enabled} 只该控制"要不要生成门诊随访"。
*
* ⚠️ 保留的原实现缺陷(原样保留,勿"顺手修")
*
* - {@code getDeptCodeByPatId} 底层在列表为空时会越界(见 {@link OuthospDataService});
* - {@code remove} / {@code selectById} 底层是空壳(恒返回 0 / null)。
*
*/
@Slf4j
@Api(description = "患者门诊记录")
@RestController
@RequestMapping("/smartor/patouthosp")
public class OuthospController extends BaseController {
@Autowired
private OuthospDataService service;
/**
* 查询患者门诊记录列表。
* 逐行对应原 {@code selectPatMedOuthosplist}(L64-75)。
*/
//@PreAuthorize("@ss.hasPermi('smartor:patouthosp:list')")
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/selectPatMedOuthospList")
@ApiOperation("查询患者门诊记录列表")
public Map selectPatMedOuthosplist(@RequestBody PatMedOuthosp patMedOuthosp) {
patMedOuthosp.setPageNum(PageUtils.getOffset(patMedOuthosp.getPageNum(), patMedOuthosp.getPageSize()));
SysUser user = getLoginUser().getUser();
patMedOuthosp.setOrgid(user.getOrgid());
List list = service.selectList(patMedOuthosp);
patMedOuthosp.setPageNum(null);
patMedOuthosp.setPageSize(null);
List all = service.selectList(patMedOuthosp);
Integer count = 0;
if (CollectionUtils.isNotEmpty(all)) {
count = all.size();
}
return getDataTable3(count, list);
}
/**
* 查询门诊看病人次和人数。
*/
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/selectPatMedOuthospCount")
@ApiOperation("查询门诊看病人次和人数")
public AjaxResult selectPatMedOuthospCount(@RequestBody PatMedReq patMedReq) {
SysUser user = getLoginUser().getUser();
patMedReq.setOrgid(user.getOrgid());
PatMedRes patMedRes = service.selectCount(patMedReq);
return success(patMedRes);
}
/**
* 查询部门编码通过 userId。
*/
@PostMapping("/getDeptCodeByPatId")
@ApiOperation("查询部门编码通过userId")
public AjaxResult getDeptCodeByPatId(@RequestBody PatMedOuthosp patMedOuthosp) {
return success(service.getDeptCodeByPatId(patMedOuthosp));
}
/**
* 导出患者门诊记录列表。
*/
//@PreAuthorize("@ss.hasPermi('smartor:patouthosp:export')")
@Log(title = "患者门诊记录", businessType = BusinessType.EXPORT)
@ApiOperation("患者门诊记录")
@PostMapping("/export")
public void export(HttpServletResponse response, PatMedOuthosp patMedOuthosp) {
List list = service.selectList(patMedOuthosp);
ExcelUtil util = new ExcelUtil(PatMedOuthosp.class);
util.exportExcel(response, list, "患者门诊记录数据");
}
// /**
// * 获取患者门诊记录详细信息
// */
// @ApiOperation("获取患者门诊记录详细信息")
// @ApiImplicitParam(name = "getInfo", value = "主键ID", dataType = "long", dataTypeClass = Long.class)
// //@PreAuthorize("@ss.hasPermi('smartor:patouthosp:query')")
// @GetMapping(value = "getInfo/{id}")
// public AjaxResult getInfo(@PathVariable("id") Long id) {
// return success(service.selectById(id));
// }
/**
* 新增患者门诊记录。
*/
@ApiOperation("新增患者门诊记录")
//@PreAuthorize("@ss.hasPermi('smartor:patouthosp:add')")
@Log(title = "患者门诊记录", businessType = BusinessType.INSERT)
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/add")
public AjaxResult add(@RequestBody PatMedOuthosp patMedOuthosp) {
SysUser user = getLoginUser().getUser();
patMedOuthosp.setOrgid(user.getOrgid());
return toAjax(service.insert(patMedOuthosp));
}
/**
* 修改患者门诊记录。
*/
@ApiOperation("修改患者门诊记录")
//@PreAuthorize("@ss.hasPermi('smartor:patouthosp:edit')")
@Log(title = "患者门诊记录", businessType = BusinessType.UPDATE)
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/edit")
public AjaxResult edit(@RequestBody PatMedOuthosp patMedOuthosp) {
return toAjax(service.update(patMedOuthosp));
}
/**
* 删除患者门诊记录。
*/
@ApiOperation("删除患者门诊记录")
//@PreAuthorize("@ss.hasPermi('smartor:patouthosp:remove')")
@ApiImplicitParam(name = "remove", value = "主键ID", dataType = "long", dataTypeClass = Array.class)
@Log(title = "患者门诊记录", businessType = BusinessType.DELETE)
@GetMapping("/remove/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(service.deleteByIds(ids));
}
}