diff --git a/pom.xml b/pom.xml index 07cecb1..2c99985 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,16 @@ log4jdbc-log4j2-jdbc4.1 1.16 + + com.alibaba + easyexcel + 2.2.6 + + + + + + com.alibaba druid diff --git a/src/main/java/com/example/duplicate/controller/RcvBasicController.java b/src/main/java/com/example/duplicate/controller/RcvBasicController.java index 8e4e08e..18e7eba 100644 --- a/src/main/java/com/example/duplicate/controller/RcvBasicController.java +++ b/src/main/java/com/example/duplicate/controller/RcvBasicController.java @@ -2,18 +2,26 @@ package com.example.duplicate.controller; import com.example.duplicate.controller.param.PageRequest; +import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; -import com.example.duplicate.controller.vo.RcvBasic; import com.example.duplicate.service.RcvBasicService; import com.example.utils.CommonResult; +import com.example.utils.ExcelExportHandler; import com.example.utils.PageResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +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; + /** * @ClassName RcvBasicController * @Description 示踪接口查询 @@ -29,6 +37,9 @@ public class RcvBasicController { @Autowired private RcvBasicService rcvBasicService; + @Resource + private ExcelExportHandler excelExportHandler; + @ApiOperation("签收接口") @PostMapping("/Sign") @@ -48,4 +59,13 @@ public class RcvBasicController { @RequestParam @ApiParam(required = false, name = "revoveryState", value = "签收状态")String revoveryState) { return rcvBasicService.UpdateSign(patientId,revoveryState); } + @ApiOperation("导出") + @PostMapping("/export") + public void pageExport(@RequestBody RcvPageRequest rcvPageRequest, HttpServletResponse response) { + List pageBasics = rcvBasicService.pageExport(rcvPageRequest); + if (!CollectionUtils.isEmpty(pageBasics)) { + excelExportHandler.export(response, "病案回收管理列表", pageBasics, ExportBasic.class); + } + } + } diff --git a/src/main/java/com/example/duplicate/controller/RcvCallController.java b/src/main/java/com/example/duplicate/controller/RcvCallController.java new file mode 100644 index 0000000..34e41d4 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/RcvCallController.java @@ -0,0 +1,62 @@ +package com.example.duplicate.controller; + +import com.example.duplicate.controller.param.CallRequest; +import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.CallBasic; +import com.example.duplicate.controller.vo.CallExpoetBasic; +import com.example.duplicate.controller.vo.DeptCodeAndName; +import com.example.duplicate.controller.vo.PageBasic; +import com.example.duplicate.service.RcvCallService; +import com.example.utils.CommonResult; +import com.example.utils.ExcelExportHandler; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + +/** + * @ClassName RcvCallController + * @Description 回收系统催缴页面接口 + * @Author linjj + * @Date 2025/6/26 16:22 + * @Version 1.0 + */ +@RestController +@RequestMapping("/rcv/call") +@Api(value = "催缴页面接口", tags = "催缴页面接口") +@Slf4j +public class RcvCallController { + @Autowired + private RcvCallService rcvCallService; + @Resource + private ExcelExportHandler excelExportHandler; + @ApiOperation("获取科室接口") + @PostMapping("/getDeptName") + public CommonResult> deptName() { + return CommonResult.success(rcvCallService.deptName()); + } + + @ApiOperation("催缴查询") + @PostMapping("/callAll") + public CommonResult>> callAll(@RequestBody CallRequest callRequest) { + return rcvCallService.callAll(callRequest); + } + @ApiOperation("催缴导出") + @PostMapping("/callExport") + public void pageExport(@RequestBody CallRequest callRequest, HttpServletResponse response) { + List callExpoetBasics = rcvCallService.exportCall(callRequest); + if (!CollectionUtils.isEmpty(callExpoetBasics)) { + excelExportHandler.export(response, "催缴列表", callExpoetBasics, CallExpoetBasic.class); + } + } +} diff --git a/src/main/java/com/example/duplicate/controller/param/CallRequest.java b/src/main/java/com/example/duplicate/controller/param/CallRequest.java new file mode 100644 index 0000000..d4b707e --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/param/CallRequest.java @@ -0,0 +1,27 @@ +package com.example.duplicate.controller.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @ClassName CallPageRequest + * @Description 催缴页面分页参数 + * @Author linjj + * @Date 2025/6/26 18:58 + * @Version 1.0 + */ +@Data +public class CallRequest { + + @ApiModelProperty("出院天数") + private String outNum;//出院天数 + @ApiModelProperty("开始时间") + private String startTime;//开始时间 + @ApiModelProperty("结束时间") + private String endTime;//结束时间 + @ApiModelProperty("出院科室") + private String disDeptName;//出院科室 +} diff --git a/src/main/java/com/example/duplicate/controller/param/PageRequest.java b/src/main/java/com/example/duplicate/controller/param/PageRequest.java index 17fefec..234288a 100644 --- a/src/main/java/com/example/duplicate/controller/param/PageRequest.java +++ b/src/main/java/com/example/duplicate/controller/param/PageRequest.java @@ -1,7 +1,11 @@ package com.example.duplicate.controller.param; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * @ClassName PageRequest * @Description 分页请求参数 @@ -12,10 +16,20 @@ import lombok.Data; @Data public class PageRequest { - + @ApiModelProperty(value = "页码") private int page; // 页码(通常从1开始) + @ApiModelProperty(value = "每页大小") private int size; // 每页大小 + @ApiModelProperty(value = "病人ID") private String patientId; // 病人ID + @ApiModelProperty(value = "病人姓名") private String name; // 病人姓名 + @ApiModelProperty(value = "出院天数") + private String outNum;//出院天数 + @ApiModelProperty(value = "开始时间") + private String startTime;//开始时间 + + @ApiModelProperty(value = "结束时间") + private String endTime;//结束时间 } diff --git a/src/main/java/com/example/duplicate/controller/param/RcvPageRequest.java b/src/main/java/com/example/duplicate/controller/param/RcvPageRequest.java new file mode 100644 index 0000000..4d6659e --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/param/RcvPageRequest.java @@ -0,0 +1,29 @@ +package com.example.duplicate.controller.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +/** + * @ClassName RcvPageRequest + * @Description 回收页面导出 + * @Author linjj + * @Date 2025/6/26 14:32 + * @Version 1.0 + */ +@Data +public class RcvPageRequest { + @ApiModelProperty(value = "病人ID") + private String patientId; // 病人ID + @ApiModelProperty(value = "病人姓名") + private String name; // 病人姓名 + @ApiModelProperty(value = "出院天数") + private String outNum;//出院天数 + @ApiModelProperty(value = "开始时间") + private String startTime;//开始时间 + + @ApiModelProperty(value = "结束时间") + private String endTime;//结束时间 +} 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 0d1a14c..8033cca 100644 --- a/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java +++ b/src/main/java/com/example/duplicate/controller/param/SginBasicDto.java @@ -21,7 +21,8 @@ public class SginBasicDto { @ApiModelProperty(value = "住院次数") private Integer admissTimes; - + @ApiModelProperty(value = "入院日期") + private Date admissDate; @ApiModelProperty(value = "出院日期") private Date disDate; @ApiModelProperty(value = "姓名") @@ -44,6 +45,10 @@ public class SginBasicDto { @ApiModelProperty(value = "回收状态") private String revoveryState; + @ApiModelProperty(value = "出院科室") + private String disDeptName; + @ApiModelProperty(value = "操作人") + private String revoveryName; } diff --git a/src/main/java/com/example/duplicate/controller/vo/CallBasic.java b/src/main/java/com/example/duplicate/controller/vo/CallBasic.java new file mode 100644 index 0000000..498e72f --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/CallBasic.java @@ -0,0 +1,59 @@ +package com.example.duplicate.controller.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @ClassName CallBasic + * @Description 催缴分页查询 + * @Author linjj + * @Date 2025/6/26 18:55 + * @Version 1.0 + */ +@Data +public class CallBasic { + + @ApiModelProperty(value = "病案主键") + private String patientId; + + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + + @ApiModelProperty(value = "出院日期") + private Date disDate; + @ApiModelProperty(value = "姓名") + private String name; + + @ApiModelProperty(value = "性别") + private String sex; + + @ApiModelProperty(value = "出院科室") + private String disDeptName; + + @ApiModelProperty(value = "床位号") + private String bedNumber; + + @ApiModelProperty(value = "住院医师") + private String attendingName; + + @ApiModelProperty(value = "出院天数") + private Integer outNum; + + + // 格式化 disDate + public String getFormattedDisDate() { + if (disDate != null) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.format(disDate); + } catch (Exception e) { + return null; + } + } else { + return null; + } + } +} diff --git a/src/main/java/com/example/duplicate/controller/vo/CallExpoetBasic.java b/src/main/java/com/example/duplicate/controller/vo/CallExpoetBasic.java new file mode 100644 index 0000000..060aa4f --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/CallExpoetBasic.java @@ -0,0 +1,61 @@ +package com.example.duplicate.controller.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @ClassName CallBasic + * @Description 导出催缴 + * @Author linjj + * @Date 2025/6/26 18:55 + * @Version 1.0 + */ +@Data +public class CallExpoetBasic { + @ExcelProperty(value = {"病案主键"}, index = 0) + @ApiModelProperty(value = "病案主键") + private String patientId; + @ExcelProperty(value = {"住院次数"}, index = 1) + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + @ExcelProperty(value = {"出院日期"}, index = 2) + @ApiModelProperty(value = "出院日期") + private Date disDate; + @ExcelProperty(value = {"姓名"}, index = 3) + @ApiModelProperty(value = "姓名") + private String name; + @ExcelProperty(value = {"性别"}, index = 4) + @ApiModelProperty(value = "性别") + private String sex; + @ExcelProperty(value = {"出院科室"}, index = 5) + @ApiModelProperty(value = "出院科室") + private String disDeptName; + @ExcelProperty(value = {"床位号"}, index = 6) + @ApiModelProperty(value = "床位号") + private String bedNumber; + @ExcelProperty(value = {"住院医师"}, index = 7) + @ApiModelProperty(value = "住院医师") + private String attendingName; + @ExcelProperty(value = {"出院天数"}, index = 8) + @ApiModelProperty(value = "出院天数") + private Integer outNum; + + + // 格式化 disDate + public String getFormattedDisDate() { + if (disDate != null) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.format(disDate); + } catch (Exception e) { + return null; + } + } else { + return null; + } + } +} diff --git a/src/main/java/com/example/duplicate/controller/vo/DeptCodeAndName.java b/src/main/java/com/example/duplicate/controller/vo/DeptCodeAndName.java new file mode 100644 index 0000000..7caee61 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/DeptCodeAndName.java @@ -0,0 +1,18 @@ +package com.example.duplicate.controller.vo; + +import lombok.Data; + +/** + * @ClassName DeptCodeAndName + * @Description + * @Author linjj + * @Date 2025/7/1 12:25 + * @Version 1.0 + */ +@Data +public class DeptCodeAndName { + + private String disDeptCode;//科室代码 + + private String disDeptName;//科室名称 +} diff --git a/src/main/java/com/example/duplicate/controller/vo/ExportBasic.java b/src/main/java/com/example/duplicate/controller/vo/ExportBasic.java new file mode 100644 index 0000000..1c1dfd9 --- /dev/null +++ b/src/main/java/com/example/duplicate/controller/vo/ExportBasic.java @@ -0,0 +1,82 @@ +package com.example.duplicate.controller.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @ClassName ExportBasic + * @Description 导出实体类 + * @Author linjj + * @Date 2025/6/26 17:34 + * @Version 1.0 + */ +@Data +public class ExportBasic { + @ExcelProperty(value = {"病案主键"}, index = 0) + @ApiModelProperty(value = "病案主键") + private String patientId; + @ExcelProperty(value = {"住院次数"}, index = 1) + @ApiModelProperty(value = "住院次数") + private Integer admissTimes; + @ExcelProperty(value = {"出院日期"}, index = 2) + @ApiModelProperty(value = "出院日期") + private Date disDate; + @ExcelProperty(value = {"姓名"}, index = 3) + @ApiModelProperty(value = "姓名") + private String name; + @ExcelProperty(value = {"性别"}, index = 4) + @ApiModelProperty(value = "性别") + private String sex; + + @ExcelProperty(value = {"住院医师"}, index = 5) + @ApiModelProperty(value = "住院医师") + private String attendingName; + + @ExcelProperty(value = {"床位号"}, index = 6) + @ApiModelProperty(value = "床位号") + private String bedNumber; + @ExcelProperty(value = {"已签收天数"}, index = 7) + @ApiModelProperty(value = "已签收天数") + private Integer outNum; + @ExcelProperty(value = {"回收时间"}, index = 8) + @ApiModelProperty(value = "回收时间") + private Date revoveryTime; + @ExcelProperty(value = {"回收状态"}, index = 9) + @ApiModelProperty(value = "回收状态") + private String revoveryState; + @ExcelProperty(value = {"出院科室"}, index = 10) + @ApiModelProperty(value = "出院科室") + private String disDeptName; + + // 格式化 disDate + public String getFormattedDisDate() { + if (disDate != null) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.format(disDate); + } catch (Exception e) { + return null; + } + } else { + return null; + } + } + + // 格式化 revoveryTime + public String getFormattedRevoveryTime() { + if (revoveryTime != null) { + try { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + return formatter.format(revoveryTime); + } catch (Exception e) { + return null; + } + } else { + return null; + } + } +} diff --git a/src/main/java/com/example/duplicate/controller/vo/PageBasic.java b/src/main/java/com/example/duplicate/controller/vo/PageBasic.java index b0bd13f..76e2bd3 100644 --- a/src/main/java/com/example/duplicate/controller/vo/PageBasic.java +++ b/src/main/java/com/example/duplicate/controller/vo/PageBasic.java @@ -40,7 +40,7 @@ public class PageBasic { @ApiModelProperty(value = "床位号") private String bedNumber; - @ApiModelProperty(value = "出院天数") + @ApiModelProperty(value = "已签收天数") private Integer outNum; @ApiModelProperty(value = "回收时间") private Date revoveryTime; @@ -48,11 +48,18 @@ public class PageBasic { @ApiModelProperty(value = "回收状态") private String revoveryState; + @ApiModelProperty(value = "出院科室") + private String disDeptName; + + @ApiModelProperty(value = "操作人") + private String revoveryName; + + // 格式化 disDate public String getFormattedDisDate() { if (disDate != null) { try { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); return formatter.format(disDate); } catch (Exception e) { return null; @@ -66,7 +73,7 @@ public class PageBasic { public String getFormattedRevoveryTime() { if (revoveryTime != null) { try { - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); return formatter.format(revoveryTime); } catch (Exception e) { return null; diff --git a/src/main/java/com/example/duplicate/controller/vo/RcvBasic.java b/src/main/java/com/example/duplicate/controller/vo/RcvBasic.java index f4c3ed4..7f1cedc 100644 --- a/src/main/java/com/example/duplicate/controller/vo/RcvBasic.java +++ b/src/main/java/com/example/duplicate/controller/vo/RcvBasic.java @@ -38,7 +38,7 @@ public class RcvBasic { @ApiModelProperty(value = "床位号") private String bedNumber; - @ApiModelProperty(value = "出院天数") + @ApiModelProperty(value = "已签收天数") private String outNum; @ApiModelProperty(value = "回收时间") private Date revoveryTime; 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 c7ec09b..c39f60b 100644 --- a/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java +++ b/src/main/java/com/example/duplicate/infrastructure/dao/BasicMapper.java @@ -1,9 +1,12 @@ 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.vo.DeptCodeAndName; +import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; -import com.example.duplicate.controller.vo.RcvBasic; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -25,6 +28,12 @@ public interface BasicMapper { List getIDByPatientId(String patientId); - Boolean UpdateState(@Param("patientId") String patientId, @Param("revoveryState") String revoveryState); + Boolean UpdateState(@Param("patientId") String patientId, @Param("revoveryState") String revoveryState,@Param("userName") String userName); + + ListpageExport(RcvPageRequest rcvPageRequest); + + List getBasciByState(CallRequest callRequest); + + ListgetDeptCodeAndName(); } diff --git a/src/main/java/com/example/duplicate/service/RcvBasicService.java b/src/main/java/com/example/duplicate/service/RcvBasicService.java index ba81a45..bf5d7c8 100644 --- a/src/main/java/com/example/duplicate/service/RcvBasicService.java +++ b/src/main/java/com/example/duplicate/service/RcvBasicService.java @@ -1,12 +1,15 @@ package com.example.duplicate.service; import com.example.duplicate.controller.param.PageRequest; +import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.ExportBasic; import com.example.duplicate.controller.vo.PageBasic; -import com.example.duplicate.controller.vo.RcvBasic; import com.example.utils.CommonResult; import com.example.utils.PageResult; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + /** * @InterfaceName RcvBasicService @@ -22,4 +25,6 @@ public interface RcvBasicService { CommonResult> pageAll(PageRequest pageRequest); CommonResult UpdateSign(String patientId,String revoveryState); + + ListpageExport(RcvPageRequest rcvPageRequest); } diff --git a/src/main/java/com/example/duplicate/service/RcvCallService.java b/src/main/java/com/example/duplicate/service/RcvCallService.java new file mode 100644 index 0000000..c9270b6 --- /dev/null +++ b/src/main/java/com/example/duplicate/service/RcvCallService.java @@ -0,0 +1,29 @@ +package com.example.duplicate.service; + +import com.example.duplicate.controller.param.CallRequest; +import com.example.duplicate.controller.param.RcvPageRequest; +import com.example.duplicate.controller.vo.CallBasic; +import com.example.duplicate.controller.vo.CallExpoetBasic; +import com.example.duplicate.controller.vo.DeptCodeAndName; +import com.example.duplicate.controller.vo.PageBasic; +import com.example.utils.CommonResult; + +import java.util.List; +import java.util.Map; + +/** + * @InterfaceName RcvCallService + * @Description 催缴接口 + * @Author linjj + * @Date 2025/6/26 16:25 + * @Version 1.0 + */ +public interface RcvCallService{ + + List deptName(); + + CommonResult>> callAll(CallRequest callRequest); + + List exportCall(CallRequest callRequest); + +} 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 93ae298..acbca02 100644 --- a/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java +++ b/src/main/java/com/example/duplicate/service/impl/RcvBasicServiceImpl.java @@ -1,21 +1,33 @@ package com.example.duplicate.service.impl; 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.RcvBasic; import com.example.duplicate.infrastructure.dao.BasicMapper; import com.example.duplicate.service.RcvBasicService; import com.example.utils.CommonResult; import com.example.utils.PageResult; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.sql.*; import java.time.LocalDate; import java.time.Period; @@ -36,6 +48,30 @@ import java.util.List; public class RcvBasicServiceImpl implements RcvBasicService { @Autowired private BasicMapper basicMapper; + @Value("${lzUrl}") + private String lzUrl; + + @Value("${lzUserName}") + private String lzUserName; + + @Value("${lzPassword}") + private String lzPassword; + + + + + @Value("${jsUrl}") + private String jsUrl; + + @Value("${jsUserName}") + private String jsUserName; + + @Value("${jsPassword}") + private String jsPassword; + @Value("${powerUer}") + private String powerUer; + + @Override public CommonResult Sign(String patientId) { try { @@ -47,15 +83,15 @@ public class RcvBasicServiceImpl implements RcvBasicService { 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 = "jdbc:sqlserver://10.1.1.21:1433;databaseName=trasen;encrypt=false;useUnicode=true;characterEncoding=utf-8"; - String username = "SZJK"; - String password = "SZJK"; -// String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=trasen;encrypt=false;useUnicode=true;characterEncoding=utf-8"; -// String username = "sa"; -// String password = "admin123"; - + String url = lzUrl; + String username = lzUserName; + String password = lzPassword; // SQL语句根据patientId查询患者基础信息 String selectQuery = "SELECT * FROM dbo.V_sz_cybrxx WHERE 病案号='" + patientId + "'"; log.info("查询语句为:"+selectQuery); @@ -74,6 +110,7 @@ public class RcvBasicServiceImpl implements RcvBasicService { while (resultSet.next()) { sginBasicDto.setPatientId(resultSet.getString("病案号")); sginBasicDto.setAdmissTimes(resultSet.getInt("住院次数")); + sginBasicDto.setAdmissDate(resultSet.getDate("入院日期")); sginBasicDto.setDisDate(resultSet.getDate("出院日期")); sginBasicDto.setName(resultSet.getString("姓名")); String sex = resultSet.getString("性别"); @@ -88,7 +125,9 @@ public class RcvBasicServiceImpl implements RcvBasicService { } sginBasicDto.setBedNumber(resultSet.getString("床位号")); sginBasicDto.setAttendingName(resultSet.getString("责任人")); + sginBasicDto.setDisDeptName(resultSet.getString("出院科室")); sginBasicDto.setRevoveryState("已签收"); + sginBasicDto.setRevoveryName(userName); sginBasicDto.setRevoveryTime(new Timestamp(System.currentTimeMillis())); } // 6. 关闭资源 @@ -111,17 +150,76 @@ public class RcvBasicServiceImpl implements RcvBasicService { } return CommonResult.success("签收完成"); } + /** + * @description: 获取当前用户名 + * @author linjj + * @date: 2025/6/27 11:12 + */ + private String getUserName() { + // 获取当前HttpServletRequest + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = requestAttributes.getRequest(); + // 从请求头中获取token + String token = request.getHeader("token"); + try { + // 接口URL + String url = powerUer+"/front/sys/getUserInfoByToken"; + + // 创建URL对象 + URL obj = new URL(url); + // 打开连接 + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + + // 设置请求方法为POST + con.setRequestMethod("POST"); + + // 设置请求头 + con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + // 启用输出流 + con.setDoOutput(true); + + // 构建请求参数 + String urlParameters = "token=" + token; + + // 发送请求 + try (OutputStream os = con.getOutputStream()) { + os.write(urlParameters.getBytes()); + os.flush(); + } + + // 获取响应码 + int responseCode = con.getResponseCode(); + System.out.println("响应码: " + responseCode); + + // 读取响应内容 + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuilder response = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + // 使用Jackson解析JSON响应内容 + ObjectMapper mapper = new ObjectMapper(); + JsonNode rootNode = mapper.readTree(response.toString()); + JsonNode dataNode = rootNode.get("data"); + String name = dataNode.get("userName").asText(); + // 断开连接 + con.disconnect(); + return name; + } catch (Exception e) { + log.error("获取用户失败: " + e,e.getMessage()); + return null; + } + } private Boolean getObjectCommonResult(SginBasicDto sginBasicDto) { // SQL Server连接信息 -// String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=gm_record;encrypt=false;useUnicode=true;characterEncoding=utf-8"; -// String username = "sa"; -// String password = "admin123"; - String url = "jdbc:sqlserver://10.1.1.147:1433;databaseName=csssemrrcord;encrypt=false;useUnicode=true;characterEncoding=utf-8"; - String username = "sa"; - String password = "xjgs+docus911"; + String url = jsUrl; + String username = jsUserName; + String password = jsPassword; // 插入语句 - String insertQuery = "INSERT INTO commomtable (patient_id,admiss_times, inpatient_no, name, sex, dis_date, attending) VALUES (replace(newid(), '-', ''),?, ?, ?, ?, ?, ?);"; + String insertQuery = "INSERT INTO lee_basic (patient_id, inpatient_no,admiss_times,name,admiss_date,dis_date) VALUES (replace(newid(), '-', ''),?, ?, ?, ?, ?);"; log.info("执行的SQL语句为: " + insertQuery); try { // 1. 加载SQL Server JDBC驱动 @@ -134,13 +232,11 @@ public class RcvBasicServiceImpl implements RcvBasicService { PreparedStatement preparedStatement = connection.prepareStatement(insertQuery); // 4. 设置参数 - preparedStatement.setInt(1, sginBasicDto.getAdmissTimes()); - preparedStatement.setString(2, sginBasicDto.getPatientId()); + preparedStatement.setString(1, sginBasicDto.getPatientId()); + preparedStatement.setInt(2, sginBasicDto.getAdmissTimes()); preparedStatement.setString(3, sginBasicDto.getName()); - preparedStatement.setString(4, sginBasicDto.getSex()); + preparedStatement.setDate(4, new java.sql.Date(sginBasicDto.getAdmissDate().getTime())); preparedStatement.setDate(5, new java.sql.Date(sginBasicDto.getDisDate().getTime())); - preparedStatement.setString(6, sginBasicDto.getAttendingName()); - // 5. 执行插入操作 preparedStatement.executeUpdate(); @@ -172,14 +268,21 @@ public class RcvBasicServiceImpl implements RcvBasicService { @Override public CommonResult UpdateSign(String patientId,String revoveryState) { + String userName = getUserName(); if (revoveryState.equals("已签收")){ - basicMapper.UpdateState(patientId,"未签收"); + basicMapper.UpdateState(patientId,"未签收",userName); return CommonResult.success("取消签收成功"); } if (revoveryState.equals("未签收")){ - basicMapper.UpdateState(patientId,"已签收"); + basicMapper.UpdateState(patientId,"已签收",userName); return CommonResult.success("签收成功"); } return null; } + + @Override + public List pageExport(RcvPageRequest rcvPageRequest) { + List pageBasics = basicMapper.pageExport(rcvPageRequest); + return pageBasics; + } } diff --git a/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java b/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java new file mode 100644 index 0000000..add88cd --- /dev/null +++ b/src/main/java/com/example/duplicate/service/impl/RcvCallServiceImpl.java @@ -0,0 +1,248 @@ +package com.example.duplicate.service.impl; + +import com.example.duplicate.controller.param.CallRequest; +import com.example.duplicate.controller.vo.CallBasic; +import com.example.duplicate.controller.vo.CallExpoetBasic; +import com.example.duplicate.controller.vo.DeptCodeAndName; +import com.example.duplicate.infrastructure.dao.BasicMapper; +import com.example.duplicate.service.RcvCallService; +import com.example.utils.CommonResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.sql.*; +import java.util.*; +import java.util.Date; +import java.util.stream.Collectors; + +/** + * @ClassName RcvCallServiceImpl + * @Description 催缴业务层 + * @Author linjj + * @Date 2025/6/26 16:25 + * @Version 1.0 + */ +@Service +@Slf4j +public class RcvCallServiceImpl implements RcvCallService { + + @Value("${lzUrl}") + private String lzUrl; + + @Value("${lzUserName}") + private String lzUserName; + + @Value("${lzPassword}") + private String lzPassword; + @Autowired + private BasicMapper basicMapper; + + @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; + } + + @Override + public CommonResult>> callAll(CallRequest callRequest) { + // SQL Server连接信息 + String url = lzUrl; + String username = lzUserName; + String password = lzPassword; + // 构建SQL查询语句 + StringBuilder selectQuery = new StringBuilder(); + selectQuery.append("SELECT * "); + selectQuery.append("FROM dbo.V_sz_cybrxx "); + selectQuery.append("WHERE 1=1 "); + List parameters = new ArrayList<>(); + List> result = new ArrayList<>(); + // 添加出院科室条件 + if (callRequest.getDisDeptName() != null && !callRequest.getDisDeptName().isEmpty()) { + String[] deptNames = callRequest.getDisDeptName().split(","); + String inClause = String.join(",", Collections.nCopies(deptNames.length, "?")); + selectQuery.append(" AND 出院科室 IN (" + inClause + ")"); + parameters.addAll(Arrays.asList(deptNames)); + } + + // 添加时间范围条件 + if (callRequest.getStartTime() != null) { + selectQuery.append(" AND 出院日期 >= ?"); + parameters.add(callRequest.getStartTime()); + } + + if (callRequest.getEndTime() != null) { + selectQuery.append(" AND 出院日期 <= ?"); + parameters.add(callRequest.getEndTime()); + } + + // 添加出院天数条件 + if (callRequest.getOutNum() != null && !callRequest.getOutNum().isEmpty()) { + selectQuery.append(" AND DATEDIFF(day, 出院日期, GETDATE()) >= ?"); + parameters.add(callRequest.getOutNum()); + } + 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(); + // 处理查询结果 + List callBasicList = new ArrayList<>(); + while (resultSet.next()) { + CallBasic callBasic = new CallBasic(); + callBasic.setDisDeptName(resultSet.getString("出院科室")); + callBasic.setPatientId(resultSet.getString("病案号")); + callBasic.setAdmissTimes(resultSet.getInt("住院次数")); + callBasic.setDisDate(resultSet.getDate("出院日期")); + callBasic.setName(resultSet.getString("姓名")); + String sex = resultSet.getString("性别"); + if (sex.equals("1")){ + callBasic.setSex("男"); + } + if (sex.equals("2")){ + callBasic.setSex("女"); + } + if (sex.equals("3")){ + callBasic.setSex("不详"); + } + callBasic.setBedNumber(resultSet.getString("床位号")); + callBasic.setOutNum(resultSet.getInt("已出院天数")); + callBasic.setAttendingName(resultSet.getString("责任人")); + callBasicList.add(callBasic); + } + //查询已经签收数据 + List basciByState = basicMapper.getBasciByState(callRequest); + //将 basciByState 转换为一个 Set,因为 Set 的 contains 方法性能更高 + Set basciByStateSet = new HashSet<>(basciByState); + //使用已经签收数据,跟查询到的联众数据进行匹配,有相同的病案号则去掉改记录 + callBasicList.removeIf(callBasic -> basciByStateSet.contains(callBasic.getPatientId())); + // 按科室分组并构建新的返回结构 + Map> groupedByDept = callBasicList.stream() + .collect(Collectors.groupingBy(CallBasic::getDisDeptName)); + + for (Map.Entry> entry : groupedByDept.entrySet()) { + Map deptEntry = new LinkedHashMap<>(); + deptEntry.put("disDeptNameTree", "出院科室:"+entry.getKey()+"("+entry.getValue().size()+"份)"); + deptEntry.put("patients", entry.getValue()); + result.add(deptEntry); + } + return CommonResult.success(result); + } catch (Exception e) { + log.error("查询失败: {}", e.getMessage()); + return CommonResult.failed("查询失败"+e.getMessage()); + } + } + + @Override + public List exportCall(CallRequest callRequest) { + // SQL Server连接信息 + String url = lzUrl; + String username = lzUserName; + String password = lzPassword; + // 构建SQL查询语句 + StringBuilder selectQuery = new StringBuilder(); + selectQuery.append("SELECT * "); + selectQuery.append("FROM dbo.V_sz_cybrxx "); + selectQuery.append("WHERE 1=1 "); + List parameters = new ArrayList<>(); + List> result = new ArrayList<>(); + // 添加出院科室条件(假设 CallPageRequest 中有 deptName 字段) + if (callRequest.getDisDeptName() != null && !callRequest.getDisDeptName().isEmpty()) { + String[] deptNames = callRequest.getDisDeptName().split(","); + String inClause = String.join(",", Collections.nCopies(deptNames.length, "?")); + selectQuery.append(" AND 出院科室 IN (" + inClause + ")"); + parameters.addAll(Arrays.asList(deptNames)); + } + // 添加时间范围条件 + if (callRequest.getStartTime() != null) { + selectQuery.append(" AND 出院日期 >= ?"); + parameters.add(callRequest.getStartTime()); + } + if (callRequest.getEndTime() != null) { + selectQuery.append(" AND 出院日期 <= ?"); + parameters.add(callRequest.getEndTime()); + } + // 添加出院天数条件 + if (callRequest.getOutNum() != null && !callRequest.getOutNum().isEmpty()) { + selectQuery.append(" AND DATEDIFF(day, 出院日期, GETDATE()) >= ?"); + parameters.add(callRequest.getOutNum()); + } + 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(); + // 处理查询结果 + List callBasicList = new ArrayList<>(); + while (resultSet.next()) { + CallExpoetBasic callBasic = new CallExpoetBasic(); + callBasic.setDisDeptName(resultSet.getString("出院科室")); + callBasic.setPatientId(resultSet.getString("病案号")); + callBasic.setAdmissTimes(resultSet.getInt("住院次数")); + callBasic.setDisDate(resultSet.getDate("出院日期")); + callBasic.setName(resultSet.getString("姓名")); + String sex = resultSet.getString("性别"); + if (sex.equals("1")){ + callBasic.setSex("男"); + } + if (sex.equals("2")){ + callBasic.setSex("女"); + } + if (sex.equals("3")){ + callBasic.setSex("不详"); + } + callBasic.setBedNumber(resultSet.getString("床位号")); + callBasic.setOutNum(resultSet.getInt("已出院天数")); + callBasic.setAttendingName(resultSet.getString("责任人")); + callBasicList.add(callBasic); + } + //查询已经签收数据 + List basciByState = basicMapper.getBasciByState(callRequest); + //将 basciByState 转换为一个 Set,因为 Set 的 contains 方法性能更高 + Set basciByStateSet = new HashSet<>(basciByState); + //使用已经签收数据,跟查询到的联众数据进行匹配,有相同的病案号则去掉改记录 + callBasicList.removeIf(callBasic -> basciByStateSet.contains(callBasic.getPatientId())); + return callBasicList; + } catch (Exception e) { + log.error("查询失败: {}", e.getMessage()); + return null; + } + } +} diff --git a/src/main/java/com/example/utils/ExcelExportHandler.java b/src/main/java/com/example/utils/ExcelExportHandler.java new file mode 100644 index 0000000..93ef468 --- /dev/null +++ b/src/main/java/com/example/utils/ExcelExportHandler.java @@ -0,0 +1,80 @@ +package com.example.utils; + + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.metadata.style.WriteCellStyle; +import com.alibaba.excel.write.metadata.style.WriteFont; +import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletResponse; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * 将数据以Excel的格式写入输出流 + * EasyExcel参考文档:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write + * + * @author wangrubin + + */ +@Slf4j +@Component +public class ExcelExportHandler { + /** + * 下载Excel格式的数据 + * + * @param response response + * @param fileName 文件名(支持中文) + * @param data 待下载的数据 + * @param clazz 封装数据的POJO + * @param 数据泛型 + */ + public void export(HttpServletResponse response, String fileName, + List data, Class clazz) { + try { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename*=utf-8''" + encodedFileName + ".xlsx"); + // 这里需要设置不关闭流 + EasyExcel.write(response.getOutputStream(), clazz) + .sheet("Sheet1") + // 设置单元格宽度自适应 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 设置单元格高度和字体 + .registerWriteHandler(getHeightAndFontStrategy()) + .doWrite(data); + log.info("下载{}条记录到文件{}", data.size(), fileName); + } catch (Exception e) { + // 重置response + log.error("文件下载失败" + e.getMessage()); + throw new RuntimeException("下载文件失败", e); + } + } + + /** + * 自定义Excel导出策略,设置表头和数据行的字体和高度 + * + * @return Excel导出策略 + */ + private HorizontalCellStyleStrategy getHeightAndFontStrategy() { + WriteCellStyle headWriteCellStyle = new WriteCellStyle(); + WriteFont headWriteFont = new WriteFont(); + headWriteFont.setFontHeightInPoints((short) 11); + headWriteFont.setBold(true); + headWriteCellStyle.setWriteFont(headWriteFont); + WriteCellStyle contentWriteCellStyle = new WriteCellStyle(); + WriteFont contentWriteFont = new WriteFont(); + contentWriteFont.setFontHeightInPoints((short) 11); + contentWriteCellStyle.setWriteFont(contentWriteFont); + contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER); + return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle); + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..844a94a --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,19 @@ +# ????????? +#lzUrl=jdbc:sqlserver://10.1.1.21:1433;databaseName=trasen;encrypt=false;useUnicode=true;characterEncoding=utf-8 +#lzUserName=SZJK +#lzPassword=SZJK +## 2.0?????? +#jsUrl=jdbc:sqlserver://10.1.1.147:1433;databaseName=csssemrrcord;encrypt=false;useUnicode=true;characterEncoding=utf-8 +#jsUserName=sa +#jsPassword=xjgs+docus911 + +# ??????????? +lzUrl =jdbc:sqlserver://127.0.0.1:1433;databaseName=trasen;encrypt=false;useUnicode=true;characterEncoding=utf-8"; +lzUserName= sa +lzPassword=admin123 +# 2.0???????? +jsUrl=jdbc:sqlserver://127.0.0.1:1433;databaseName=qf_record;encrypt=false;useUnicode=true;characterEncoding=utf-8 +jsUserName=sa +jsPassword=admin123 + +powerUer=http://127.0.0.1:9101 \ No newline at end of file diff --git a/src/main/resources/mapper/BasicMapper.xml b/src/main/resources/mapper/BasicMapper.xml index ba87f2e..3dd9f6b 100644 --- a/src/main/resources/mapper/BasicMapper.xml +++ b/src/main/resources/mapper/BasicMapper.xml @@ -4,14 +4,15 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - INSERT INTO basic (patientId,admissTimes,disDate,name,sex, bedNumber,attendingName,revoveryState,revoveryTime) - values (#{patientId},#{admissTimes},#{disDate},#{name},#{sex},#{bedNumber},#{attendingName},#{revoveryState}, #{revoveryTime}) + INSERT INTO basic (patientId,admissTimes,disDate,name,sex, bedNumber,attendingName,revoveryState,revoveryTime,disDeptName,revoveryName) + values (#{patientId},#{admissTimes},#{disDate},#{name},#{sex},#{bedNumber},#{attendingName},#{revoveryState}, #{revoveryTime},#{disDeptName},#{revoveryName}) + - update basic set revoveryState=#{revoveryState}, revoveryTime=NOW() where patientId=#{patientId} + update basic set revoveryState=#{revoveryState}, revoveryTime=NOW(),revoveryName=#{userName} where patientId=#{patientId} + + + \ No newline at end of file