diff --git a/pom.xml b/pom.xml index 2c99985..0126bbd 100644 --- a/pom.xml +++ b/pom.xml @@ -9,10 +9,10 @@ com.example - springbootDemo + docus_recovery 0.0.1-SNAPSHOT - springbootDemo - springbootDemo + docus_recovery + docus_recovery 1.8 true diff --git a/src/main/java/com/example/duplicate/controller/RcvBasicController.java b/src/main/java/com/example/duplicate/controller/RcvBasicController.java index 18e7eba..8032945 100644 --- a/src/main/java/com/example/duplicate/controller/RcvBasicController.java +++ b/src/main/java/com/example/duplicate/controller/RcvBasicController.java @@ -1,8 +1,10 @@ package com.example.duplicate.controller; +import com.example.duplicate.controller.param.EmrRateRequest; import com.example.duplicate.controller.param.PageRequest; import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.EmrRateVo; import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; import com.example.duplicate.service.RcvBasicService; @@ -18,7 +20,6 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -68,4 +69,12 @@ public class RcvBasicController { } } + @ApiOperation("归档率导出") + @PostMapping("/exportEmrRate") + public CommonResult ExportEmrRate(@RequestBody EmrRateRequest emrRateRequest) { + List emrRateVos = rcvBasicService.ExportEmrRate(emrRateRequest); + return CommonResult.success(emrRateVos); + } + + } diff --git a/src/main/java/com/example/duplicate/controller/param/EmrRateRequest.java b/src/main/java/com/example/duplicate/controller/param/EmrRateRequest.java new file mode 100644 index 0000000..7280a1e --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/param/EmrRateRequest.java @@ -0,0 +1,31 @@ +package com.example.duplicate.controller.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName EmrRateRequest + * @Description 归档率入参 + * @Author linjj + * @Date 2025/8/5 11:02 + * @Version 1.0 + */ +@Data +public class EmrRateRequest { + + + @ApiModelProperty("开始时间") + private String startTime;//开始时间 + @ApiModelProperty("结束时间") + private String endTime;//结束时间 + @ApiModelProperty("出院科室") + private String disDeptName;//出院科室 + + + + +} + + + + diff --git a/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java b/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java index 8033cca..83c51fb 100644 --- a/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java +++ b/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java @@ -49,6 +49,12 @@ public class SginBasicDto { private String disDeptName; @ApiModelProperty(value = "操作人") private String revoveryName; + @ApiModelProperty(value = "年龄") + private String age; + + @ApiModelProperty(value = "身份证信息") + private String idCard; + } diff --git a/src/main/java/com/example/duplicate/controller/vo/DayRateDetailVo.java b/src/main/java/com/example/duplicate/controller/vo/DayRateDetailVo.java new file mode 100644 index 0000000..04e57e6 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/DayRateDetailVo.java @@ -0,0 +1,27 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName RateDetailVo + * @Description 详情 + * @Author linjj + * @Date 2025/8/5 17:04 + * @Version 1.0 + */ +@Data +public class DayRateDetailVo { + + @ApiModelProperty(value = "2天内病案签收情况") + private TimeSlot day2SignStatus; + + @ApiModelProperty(value = "3天内病案签收情况") + private TimeSlot day3SignStatus; + + @ApiModelProperty(value = "5天内病案签收情况") + private TimeSlot day5SignStatus; + + @ApiModelProperty(value = "7天内病案签收情况") + private TimeSlot day7SignStatus; +} diff --git a/src/main/java/com/example/duplicate/controller/vo/EmrRateDetailVo.java b/src/main/java/com/example/duplicate/controller/vo/EmrRateDetailVo.java new file mode 100644 index 0000000..a874785 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/EmrRateDetailVo.java @@ -0,0 +1,33 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName EmrRateDetailVo + * @Description 签收系统数据详情 + * @Author linjj + * @Date 2025/8/5 16:42 + * @Version 1.0 + */ +@Data +public class EmrRateDetailVo { + + @ApiModelProperty(value = "科室名称") + private String disDeptName; + @ApiModelProperty(value = "签收总数") + private Integer signCountNum; + + @ApiModelProperty(value = "2天出院数量") + private Integer day2; + + @ApiModelProperty(value = "3天出院数量") + private Integer day3; + + @ApiModelProperty(value = "5天出院数量") + private Integer day5; + + @ApiModelProperty(value = "7天出院数量") + private Integer day7; + +} diff --git a/src/main/java/com/example/duplicate/controller/vo/EmrRateVo.java b/src/main/java/com/example/duplicate/controller/vo/EmrRateVo.java new file mode 100644 index 0000000..3cb887f --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/EmrRateVo.java @@ -0,0 +1,24 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName EmrRateVo + * @Description 归档率返回 + * @Author linjj + * @Date 2025/8/5 11:49 + * @Version 1.0 + */ +@Data +public class EmrRateVo { + @ApiModelProperty(value = "科室名称") + private String disDeptName; + @ApiModelProperty(value = "出院总数") + private Integer outNum; + @ApiModelProperty(value = "病案签收情况") + private SignStatus signStatus; + + @ApiModelProperty(value = "天数详情") + private DayRateDetailVo dayRateDetailVo; +} diff --git a/src/main/java/com/example/duplicate/controller/vo/HisRateVo.java b/src/main/java/com/example/duplicate/controller/vo/HisRateVo.java new file mode 100644 index 0000000..c15b7d6 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/HisRateVo.java @@ -0,0 +1,21 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName HisRateVo + * @Description his 出院总数 + * @Author linjj + * @Date 2025/8/5 16:29 + * @Version 1.0 + */ +@Data +public class HisRateVo { + + + @ApiModelProperty(value = "科室名称") + private String disDeptName; + @ApiModelProperty(value = "出院总数") + private Integer disCountNum; +} diff --git a/src/main/java/com/example/duplicate/controller/vo/SignStatus.java b/src/main/java/com/example/duplicate/controller/vo/SignStatus.java new file mode 100644 index 0000000..f3cbdca --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/SignStatus.java @@ -0,0 +1,25 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @ClassName SignStatus + * @Description 病案签收情况 + * @Author linjj + * @Date 2025/8/5 11:54 + * @Version 1.0 + */ +@Data +public class SignStatus { + @ApiModelProperty(value = "签收份数") + private Integer signCount; + @ApiModelProperty(value = "签收率") + private String signRate; + + public SignStatus(Integer signCount, String signRate) { + this.signCount = signCount; + this.signRate = signRate; + } + +} diff --git a/src/main/java/com/example/duplicate/controller/vo/TimeSlot.java b/src/main/java/com/example/duplicate/controller/vo/TimeSlot.java new file mode 100644 index 0000000..22e42ec --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/TimeSlot.java @@ -0,0 +1,24 @@ +package com.example.duplicate.controller.vo; + +import lombok.Data; + + +/** + * @ClassName TimeSlot + * @Description 签收份数,签收率 + * @Author linjj + * @Date 2025/8/5 16:54 + * @Version 1.0 + */ +@Data +public class TimeSlot { + //总数 + private int count; + //签收率 + private String rate; + + public TimeSlot(int count, String rate) { + this.count = count; + this.rate = rate; + } +} diff --git a/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java b/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java index c39f60b..8a32e05 100644 --- a/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java +++ b/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java @@ -1,10 +1,8 @@ package com.example.duplicate.infrastructure.dao; -import com.example.duplicate.controller.param.CallRequest; -import com.example.duplicate.controller.param.PageRequest; -import com.example.duplicate.controller.param.RcvPageRequest; -import com.example.duplicate.controller.param.SginBasicDto; +import com.example.duplicate.controller.param.*; import com.example.duplicate.controller.vo.DeptCodeAndName; +import com.example.duplicate.controller.vo.EmrRateDetailVo; import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; import org.apache.ibatis.annotations.Mapper; @@ -36,4 +34,6 @@ public interface BasicMapper { ListgetDeptCodeAndName(); + List getEmrRateDetail(EmrRateRequest emrRateRequest); + } diff --git a/src/main/java/com/example/duplicate/service/RcvBasicService.java b/src/main/java/com/example/duplicate/service/RcvBasicService.java index bf5d7c8..079e785 100644 --- a/src/main/java/com/example/duplicate/service/RcvBasicService.java +++ b/src/main/java/com/example/duplicate/service/RcvBasicService.java @@ -1,7 +1,9 @@ package com.example.duplicate.service; +import com.example.duplicate.controller.param.EmrRateRequest; import com.example.duplicate.controller.param.PageRequest; import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.EmrRateVo; import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; import com.example.utils.CommonResult; @@ -27,4 +29,6 @@ public interface RcvBasicService { CommonResult UpdateSign(String patientId,String revoveryState); ListpageExport(RcvPageRequest rcvPageRequest); + + List ExportEmrRate(EmrRateRequest emrRateRequest); } diff --git a/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java b/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java index acbca02..890b8ed 100644 --- a/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java +++ b/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java @@ -1,10 +1,10 @@ package com.example.duplicate.service.impl; +import com.example.duplicate.controller.param.EmrRateRequest; import com.example.duplicate.controller.param.PageRequest; import com.example.duplicate.controller.param.RcvPageRequest; import com.example.duplicate.controller.param.SginBasicDto; -import com.example.duplicate.controller.vo.ExportBasic; -import com.example.duplicate.controller.vo.PageBasic; +import com.example.duplicate.controller.vo.*; import com.example.duplicate.infrastructure.dao.BasicMapper; import com.example.duplicate.service.RcvBasicService; @@ -13,6 +13,7 @@ import com.example.utils.PageResult; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -26,15 +27,17 @@ import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.net.HttpURLConnection; import java.net.URL; import java.sql.*; +import java.sql.Date; import java.time.LocalDate; import java.time.Period; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @ClassName RcvBasicServiceImpl @@ -58,8 +61,6 @@ public class RcvBasicServiceImpl implements RcvBasicService { private String lzPassword; - - @Value("${jsUrl}") private String jsUrl; @@ -75,26 +76,26 @@ public class RcvBasicServiceImpl implements RcvBasicService { @Override public CommonResult Sign(String patientId) { try { - if (StringUtils.isBlank(patientId)){ - return CommonResult.failed("病案号不能为空!"); - } - //查询是否已经存在数据,存在数据不在新增,直接返回已经签收 - List idByPatientId = basicMapper.getIDByPatientId(patientId); - if (!CollectionUtils.isEmpty(idByPatientId)) { - return CommonResult.failed("病案ID【" + patientId + "】已签收过,不能重复签收"); - } - String userName = getUserName(); - if (StringUtils.isBlank(userName)){ - return CommonResult.failed("获取用户姓名失败!"); - } - SginBasicDto sginBasicDto=new SginBasicDto(); - // SQL Server连接信息 - String url = lzUrl; - String username = lzUserName; - String password = lzPassword; - // SQL语句根据patientId查询患者基础信息 - String selectQuery = "SELECT * FROM dbo.V_sz_cybrxx WHERE 病案号='" + patientId + "'"; - log.info("查询语句为:"+selectQuery); + if (StringUtils.isBlank(patientId)) { + return CommonResult.failed("病案号不能为空!"); + } + //查询是否已经存在数据,存在数据不在新增,直接返回已经签收 + List idByPatientId = basicMapper.getIDByPatientId(patientId); + if (!CollectionUtils.isEmpty(idByPatientId)) { + return CommonResult.failed("病案ID【" + patientId + "】已签收过,不能重复签收"); + } + String userName = getUserName(); + if (StringUtils.isBlank(userName)) { + return CommonResult.failed("获取用户姓名失败!"); + } + SginBasicDto sginBasicDto = new SginBasicDto(); + // SQL Server连接信息 + String url = lzUrl; + String username = lzUserName; + String password = lzPassword; + // SQL语句根据patientId查询患者基础信息 + String selectQuery = "SELECT * FROM dbo.V_sz_cybrxx WHERE 病案号='" + patientId + "'"; + log.info("查询语句为:" + selectQuery); // 1. 加载SQL Server JDBC驱动 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); @@ -114,13 +115,13 @@ public class RcvBasicServiceImpl implements RcvBasicService { sginBasicDto.setDisDate(resultSet.getDate("出院日期")); sginBasicDto.setName(resultSet.getString("姓名")); String sex = resultSet.getString("性别"); - if (sex.equals("1")){ + if (sex.equals("1")) { sginBasicDto.setSex("男"); } - if (sex.equals("2")){ + if (sex.equals("2")) { sginBasicDto.setSex("女"); } - if (sex.equals("3")){ + if (sex.equals("3")) { sginBasicDto.setSex("不详"); } sginBasicDto.setBedNumber(resultSet.getString("床位号")); @@ -128,6 +129,8 @@ public class RcvBasicServiceImpl implements RcvBasicService { sginBasicDto.setDisDeptName(resultSet.getString("出院科室")); sginBasicDto.setRevoveryState("已签收"); sginBasicDto.setRevoveryName(userName); + sginBasicDto.setAge("年龄"); + sginBasicDto.setIdCard("身份证号"); sginBasicDto.setRevoveryTime(new Timestamp(System.currentTimeMillis())); } // 6. 关闭资源 @@ -135,27 +138,28 @@ public class RcvBasicServiceImpl implements RcvBasicService { statement.close(); connection.close(); //先插入数据到2.0中 - if (!getObjectCommonResult(sginBasicDto)){ + if (!getObjectCommonResult(sginBasicDto)) { log.error("传送到病案数码系统失败"); return CommonResult.failed("传送到病案数码系统失败,请联系管理员"); } //插入数据 - if (!basicMapper.addBasic(sginBasicDto)){ + if (!basicMapper.addBasic(sginBasicDto)) { log.error("签收失败"); return CommonResult.failed("签收失败"); } } catch (Exception e) { - log.error("签收失败: " + e,e.getMessage()); + log.error("签收失败: " + e, e.getMessage()); return CommonResult.failed("签收失败: " + e.getMessage()); } return CommonResult.success("签收完成"); } + /** * @description: 获取当前用户名 * @author linjj * @date: 2025/6/27 11:12 */ - private String getUserName() { + private String getUserName() { // 获取当前HttpServletRequest ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); @@ -163,7 +167,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { String token = request.getHeader("token"); try { // 接口URL - String url = powerUer+"/front/sys/getUserInfoByToken"; + String url = powerUer + "/front/sys/getUserInfoByToken"; // 创建URL对象 URL obj = new URL(url); @@ -197,7 +201,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { - response.append(inputLine); + response.append(inputLine); } // 使用Jackson解析JSON响应内容 ObjectMapper mapper = new ObjectMapper(); @@ -208,7 +212,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { con.disconnect(); return name; } catch (Exception e) { - log.error("获取用户失败: " + e,e.getMessage()); + log.error("获取用户失败: " + e, e.getMessage()); return null; } } @@ -219,7 +223,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { String username = jsUserName; String password = jsPassword; // 插入语句 - String insertQuery = "INSERT INTO lee_basic (patient_id, inpatient_no,admiss_times,name,admiss_date,dis_date) VALUES (replace(newid(), '-', ''),?, ?, ?, ?, ?);"; + String insertQuery = "INSERT INTO lee_basic (patient_id, inpatient_no,admiss_times,name,admiss_date,dis_date,id_card,age) VALUES (replace(newid(), '-', ''),?, ?, ?, ?, ?,?,?);"; log.info("执行的SQL语句为: " + insertQuery); try { // 1. 加载SQL Server JDBC驱动 @@ -237,6 +241,8 @@ public class RcvBasicServiceImpl implements RcvBasicService { preparedStatement.setString(3, sginBasicDto.getName()); preparedStatement.setDate(4, new java.sql.Date(sginBasicDto.getAdmissDate().getTime())); preparedStatement.setDate(5, new java.sql.Date(sginBasicDto.getDisDate().getTime())); + preparedStatement.setString(6, sginBasicDto.getIdCard()); + preparedStatement.setString(7, sginBasicDto.getAge()); // 5. 执行插入操作 preparedStatement.executeUpdate(); @@ -244,7 +250,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { preparedStatement.close(); connection.close(); } catch (Exception e) { - log.error("传送到病案数码系统失败: " + e,e.getMessage()); + log.error("传送到病案数码系统失败: " + e, e.getMessage()); return false; } log.info("插入2.0中成功"); @@ -252,7 +258,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { } @Override - public CommonResult>pageAll(PageRequest pageRequest) { + public CommonResult> pageAll(PageRequest pageRequest) { PageResult pageResult = null; try { // 设置分页参数 @@ -261,20 +267,20 @@ public class RcvBasicServiceImpl implements RcvBasicService { pageResult = new PageResult<>(pageAll); } catch (Exception e) { log.error("系统异常: " + e.getMessage()); - return CommonResult.failed("系统异常"); + return CommonResult.failed("系统异常"); } return CommonResult.success(pageResult); } @Override - public CommonResult UpdateSign(String patientId,String revoveryState) { + public CommonResult UpdateSign(String patientId, String revoveryState) { String userName = getUserName(); - if (revoveryState.equals("已签收")){ - basicMapper.UpdateState(patientId,"未签收",userName); + if (revoveryState.equals("已签收")) { + basicMapper.UpdateState(patientId, "未签收", userName); return CommonResult.success("取消签收成功"); } - if (revoveryState.equals("未签收")){ - basicMapper.UpdateState(patientId,"已签收",userName); + if (revoveryState.equals("未签收")) { + basicMapper.UpdateState(patientId, "已签收", userName); return CommonResult.success("签收成功"); } return null; @@ -285,4 +291,135 @@ public class RcvBasicServiceImpl implements RcvBasicService { List pageBasics = basicMapper.pageExport(rcvPageRequest); return pageBasics; } + + @Override + public List ExportEmrRate(EmrRateRequest emrRateRequest) { + List emrRateVos = null; + try { + //查询回收系统中归档率 + List emrRateDetail = basicMapper.getEmrRateDetail(emrRateRequest); + //查询his视图中各个科室出院数量 + List hisRateVo = getHisRateVo(emrRateRequest); + if (hisRateVo.isEmpty()||emrRateDetail.isEmpty()){ + return emrRateVos; + } + // 1. 把 hisRateVo 转成 Map<科室名, 出院人数> + Map deptDischargeMap = hisRateVo.stream() + .collect(Collectors.toMap(HisRateVo::getDisDeptName, HisRateVo::getDisCountNum)); + + //组织最终数据 + emrRateVos = new ArrayList<>(); + for (EmrRateDetailVo detail : emrRateDetail){ + if (deptDischargeMap.get(detail.getDisDeptName())==null) { + continue; + } + EmrRateVo emrRateVo = new EmrRateVo(); + //出院名称 + emrRateVo.setDisDeptName(detail.getDisDeptName()); + //出院人数 + Integer outNum = deptDischargeMap.get(detail.getDisDeptName()); + emrRateVo.setOutNum(outNum); + //组织病案签收情况 + //签收总数 + Integer signCountNum = detail.getSignCountNum(); + //总签收率 + emrRateVo.setSignStatus(new SignStatus(signCountNum,getRate(outNum,signCountNum))); + //组织2,3,5,7天内归档情况 + DayRateDetailVo dayRateDetailVo = new DayRateDetailVo(); + dayRateDetailVo.setDay2SignStatus(new TimeSlot(detail.getDay2(), getRate(outNum,detail.getDay2()))); + dayRateDetailVo.setDay3SignStatus(new TimeSlot(detail.getDay3(), getRate(outNum,detail.getDay3()))); + dayRateDetailVo.setDay5SignStatus(new TimeSlot(detail.getDay5(), getRate(outNum,detail.getDay5()))); + dayRateDetailVo.setDay7SignStatus(new TimeSlot(detail.getDay7(), getRate(outNum,detail.getDay7()))); + emrRateVo.setDayRateDetailVo(dayRateDetailVo); + emrRateVos.add(emrRateVo); + } + } catch (Exception e) { + log.error("查询失败1: {}", e,e.getMessage()); + return emrRateVos; + } + return emrRateVos; + } + + private static String getRate(Integer outNum, Integer signCountNum) { + // 计算签收率(保留两位小数) + BigDecimal rate = new BigDecimal(signCountNum) + .divide(new BigDecimal(outNum), 4, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)) + .setScale(2, RoundingMode.HALF_UP); + + String signRate = rate.toPlainString() + "%"; + return signRate; + } + + /** + * @Author: linjj + * @Description: 查询his视图中各个科室出院数量 + * @DateTime: 2025/8/5 17:17 + * @Params: [emrRateRequest] + * @Return java.util.List + */ + private List getHisRateVo(EmrRateRequest emrRateRequest) { + List hisRateVoList = null; + try { + hisRateVoList = new ArrayList<>(); + // SQL Server连接信息 + String url = lzUrl; + String username = lzUserName; + String password = lzPassword; + // 构建SQL查询语句 + StringBuilder selectQuery = new StringBuilder(); + selectQuery.append("SELECT 出院科室,COUNT(*) as 出院总数 "); + selectQuery.append("FROM dbo.V_sz_cybrxx "); + selectQuery.append("WHERE 1=1 "); + List parameters = new ArrayList<>(); + // 添加出院科室条件 + if (emrRateRequest.getDisDeptName() != null && !emrRateRequest.getDisDeptName().isEmpty()) { + String[] deptNames = emrRateRequest.getDisDeptName().split(","); + String inClause = String.join(",", Collections.nCopies(deptNames.length, "?")); + selectQuery.append(" AND 出院科室 IN (" + inClause + ")"); + parameters.addAll(Arrays.asList(deptNames)); + } + // 添加时间范围条件 + if (emrRateRequest.getStartTime() != null) { + selectQuery.append(" AND 出院日期 >= ?"); + parameters.add(emrRateRequest.getStartTime()); + } + if (emrRateRequest.getEndTime() != null) { + selectQuery.append(" AND 出院日期 <= ?"); + parameters.add(emrRateRequest.getEndTime()); + } + //增加科室分组 + selectQuery.append(" GROUP BY 出院科室"); + // 原始 SQL 模板(带 ? 占位符) + String finalSql = selectQuery.toString(); + // 逐个替换参数(注意类型处理) + for (int i = 0; i < parameters.size(); i++) { + Object param = parameters.get(i); + String value = param instanceof String ? "'" + param + "'" : param.toString(); + finalSql = finalSql.replaceFirst("\\?", value); + } + log.info("最终SQL: " + finalSql); + try (Connection connection = DriverManager.getConnection(url, username, password); + PreparedStatement preparedStatement = connection.prepareStatement(selectQuery.toString())) { + // 设置查询参数 + for (int i = 0; i < parameters.size(); i++) { + preparedStatement.setObject(i + 1, parameters.get(i)); + } + ResultSet resultSet = preparedStatement.executeQuery(); + // 处理查询结果 + while (resultSet.next()) { + HisRateVo hisRateVo = new HisRateVo(); + hisRateVo.setDisDeptName(resultSet.getString("出院科室")); + hisRateVo.setDisCountNum(resultSet.getInt("出院总数")); + hisRateVoList.add(hisRateVo); + } + } catch (Exception e) { + log.error("his查询失败: {}", e,e.getMessage()); + return hisRateVoList; + } + } catch (Exception e) { + log.error("his查询失败: {}", e,e.getMessage()); + } + return hisRateVoList; + } } diff --git a/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java b/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java index a54aa17..ce04de7 100644 --- a/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java +++ b/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java @@ -41,38 +41,6 @@ public class RcvCallServiceImpl implements RcvCallService { @Override public List deptName() { -// // SQL Server连接信息 -// String url = lzUrl; -// String username = lzUserName; -// String password = lzPassword; -// try { -// List deptNames=new ArrayList<>(); -// // SQL语句根据patientId查询患者基础信息 -// String selectQuery = "SELECT 出院科室 FROM dbo.V_sz_cybrxx where 出院科室 is not null AND 出院科室 !='' GROUP BY 出院科室"; -// // 1. 加载SQL Server JDBC驱动 -// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); -// -// // 2. 建立数据库连接 -// Connection connection = DriverManager.getConnection(url, username, password); -// -// // 3. 创建Statement对象用于执行SQL语句 -// Statement statement = connection.createStatement(); -// // 4. 执行查询操作 -// ResultSet resultSet = statement.executeQuery(selectQuery); -// // 5. 遍历查询结果并添加到deptNames列表中 -// while (resultSet.next()) { -// String deptName = resultSet.getString("出院科室"); -// deptNames.add(deptName); -// } -// // 6. 关闭数据库资源 -// resultSet.close(); -// statement.close(); -// connection.close(); -// return deptNames; -// } catch (Exception e) { -// log.error("查询科室失败: " + e, e.getMessage()); -// return null; -// } List deptCodeAndName = basicMapper.getDeptCodeAndName(); return deptCodeAndName; } diff --git a/src/main/resources/mapper/BasicMapper.xml b/src/main/resources/mapper/BasicMapper.xml index c5490b0..fb4d411 100644 --- a/src/main/resources/mapper/BasicMapper.xml +++ b/src/main/resources/mapper/BasicMapper.xml @@ -81,6 +81,33 @@ + \ No newline at end of file