Browse Source

历史病案导出

lighter 1 year ago
parent
commit
9874134e04

+ 1 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>thyyxxk</groupId>
     <artifactId>web-server</artifactId>
-    <version>12.5.3</version>
+    <version>12.5.6</version>
     <name>web-server</name>
     <description>server for yibao-web</description>
     <properties>

+ 7 - 0
src/main/java/thyyxxk/webserver/controller/inpatient/casefrontsheet/FrontSheetExportController.java

@@ -6,10 +6,12 @@ import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetMain;
 import thyyxxk.webserver.entity.casefrontsheet.request.ExportDclRequest;
+import thyyxxk.webserver.entity.casefrontsheet.request.ExportHistorySheets;
 import thyyxxk.webserver.entity.casefrontsheet.response.ExportDclResponse;
 import thyyxxk.webserver.service.inpatient.casefrontsheet.CaseFrontSheetExportService;
 import thyyxxk.webserver.utils.ResultVoUtil;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 @RestController
@@ -39,4 +41,9 @@ public class FrontSheetExportController {
         }
         return ResultVoUtil.success(list);
     }
+
+    @PostMapping("/getHistorySheets")
+    public void getHistorySheets(@RequestBody ExportHistorySheets request, HttpServletResponse response) {
+        service.getHistorySheets(request, response);
+    }
 }

+ 32 - 3
src/main/java/thyyxxk/webserver/dao/his/inpatient/casefrontsheet/FrontSheetExportDao.java

@@ -1,12 +1,13 @@
 package thyyxxk.webserver.dao.his.inpatient.casefrontsheet;
 
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.mapping.ResultSetType;
+import org.apache.ibatis.session.ResultHandler;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetDisdiag;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetMain;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetSurgery;
 import thyyxxk.webserver.entity.casefrontsheet.response.ExportDclResponse;
+import thyyxxk.webserver.entity.casefrontsheet.response.HistorySheet;
 
 import java.util.List;
 
@@ -104,4 +105,32 @@ public interface FrontSheetExportDao {
             "return_time, lend_staff_phone from t_case_frontsheet_lendout a " +
             " where a.lend_time>=#{begin} and a.lend_time<=#{end}")
     List<ExportDclResponse> getLendOutSheets(String begin, String end);
+
+    @Select("select a.bah,a.admiss_times,a.name,a.sex,a.zy_admiss_way,a.admiss_dept, " +
+            "birthDate=convert(varchar(10),a.birth_date,21),a.social_no,a.phone, " +
+            "admissDate=convert(varchar(19),a.admiss_date,21),a.dismiss_dept, " +
+            "dismissDate=convert(varchar(19),a.dismiss_date,21), " +
+            "qualityControlDate=convert(varchar(19),a.quality_control_date,21)," +
+            "a.admiss_days,a.clinic_diag_code,a.clinic_diag_str,a.hurt_reason_code, " +
+            "a.hurt_reason_name,a.pathologic_diag_code,a.pathologic_diag_str,a.blh, " +
+            "a.leader_doctor_name,a.main_doctor_name,a.admiss_doctor_name, " +
+            "a.duty_nurse_name,a.quality_control_level,a.quality_control_doctor_name, " +
+            "a.quality_control_nurse_name,a.zy_dismiss_way, " +
+            "a.total_cost,a.tumor_level_t,a.tumor_level_n,a.tumor_level_m,a.med_type, " +
+            "disdiagCodeStr=STUFF((SELECT '^' + b.code FROM t_case_frontsheet_disdiag b " +
+            "WHERE b.bah = a.bah and b.times=a.admiss_times order by no " +
+            "FOR XML PATH('')), 1, 1, ''), " +
+            "disdiagNameStr=STUFF((SELECT '^' + b.name FROM t_case_frontsheet_disdiag b " +
+            "WHERE b.bah = a.bah and b.times=a.admiss_times order by no " +
+            "FOR XML PATH('')), 1, 1, ''), " +
+            "surgeryCodeStr=STUFF((SELECT '^' + b.code FROM t_case_frontsheet_surgery b " +
+            "WHERE b.bah = a.bah and b.times=a.admiss_times order by no " +
+            "FOR XML PATH('')), 1, 1, ''), " +
+            "surgeryNameStr=STUFF((SELECT '^' + b.name FROM t_case_frontsheet_surgery b " +
+            "WHERE b.bah = a.bah and b.times=a.admiss_times order by no " +
+            "FOR XML PATH('')), 1, 1, '') from t_case_frontsheet_main a " +
+            "where a.dismiss_date>=#{begin} and a.dismiss_date<#{end} ${statement} " )
+    @Options(resultSetType = ResultSetType.FORWARD_ONLY)
+    @ResultType(HistorySheet.class)
+    void selectHistorySheet2(String begin, String end, String statement, ResultHandler<HistorySheet> handler);
 }

+ 23 - 0
src/main/java/thyyxxk/webserver/entity/casefrontsheet/request/ExportHistorySheets.java

@@ -0,0 +1,23 @@
+package thyyxxk.webserver.entity.casefrontsheet.request;
+
+import lombok.Data;
+import thyyxxk.webserver.entity.dictionary.CodeName;
+
+import java.util.List;
+
+@Data
+public class ExportHistorySheets {
+    private String start;
+    private String end;
+    private Boolean needAllDiagnoses;
+    private Boolean needAllSurgeries;
+    private List<CodeName> field;
+
+    public Boolean needAllDiagnoses() {
+        return null != needAllDiagnoses && needAllDiagnoses;
+    }
+
+    public Boolean needAllSurgeries() {
+        return null != needAllSurgeries && needAllSurgeries;
+    }
+}

+ 229 - 0
src/main/java/thyyxxk/webserver/entity/casefrontsheet/response/HistorySheet.java

@@ -0,0 +1,229 @@
+package thyyxxk.webserver.entity.casefrontsheet.response;
+
+import lombok.Data;
+
+@Data
+public class HistorySheet {
+    /**
+     * 病案号,和住院号一样
+     */
+    private String bah;
+
+    /**
+     * 住院次数
+     */
+    private Integer admissTimes;
+
+    private String name;
+
+    private String sex;
+
+    /**
+     * 出生日期
+     */
+    private String birthDate;
+
+    /**
+     * 身份证
+     */
+    private String socialNo;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 入院方式
+     */
+    private String zyAdmissWay;
+
+    /**
+     * 入院日期
+     */
+    private String admissDate;
+
+    /**
+     * 入院科室
+     */
+    private String admissDept;
+
+    /**
+     * 出院日期
+     */
+    private String dismissDate;
+
+    /**
+     * 出院科室
+     */
+    private String dismissDept;
+
+    /**
+     * 住院天数
+     */
+    private String admissDays;
+
+    /**
+     * 门诊诊断编码
+     */
+    private String clinicDiagCode;
+
+    /**
+     * 门诊诊断名称
+     */
+    private String clinicDiagStr;
+
+    /**
+     * 意外伤害编码
+     */
+    private String hurtReasonCode;
+
+    /**
+     * 意外伤害名称
+     */
+    private String hurtReasonName;
+
+    /**
+     * 病理诊断编码
+     */
+    private String pathologicDiagCode;
+
+    /**
+     * 病理诊断名称
+     */
+    private String pathologicDiagStr;
+
+    /**
+     * 病历号
+     */
+    private String blh;
+
+    /**
+     * 主任(副主任)医师姓名
+     */
+    private String leaderDoctorName;
+
+    /**
+     * 主治医师姓名
+     */
+    private String mainDoctorName;
+
+    /**
+     * 住院医师姓名
+     */
+    private String admissDoctorName;
+
+    /**
+     * 责任护士姓名
+     */
+    private String dutyNurseName;
+
+    /**
+     * 病案质量
+     */
+    private String qualityControlLevel;
+
+    /**
+     * 质控医师姓名
+     */
+    private String qualityControlDoctorName;
+
+    /**
+     * 质控护士姓名
+     */
+    private String qualityControlNurseName;
+
+    /**
+     * 质控日期
+     */
+    private String qualityControlDate;
+
+    /**
+     * 离院方式
+     */
+    private String zyDismissWay;
+
+    /**
+     * 住院总费用
+     */
+    private String totalCost;
+
+    /**
+     * 肿瘤分期(T)
+     */
+    private String tumorLevelT;
+
+    /**
+     * 肿瘤分期(N)
+     */
+    private String tumorLevelN;
+
+    /**
+     * 肿瘤分期(M)
+     */
+    private String tumorLevelM;
+
+    /**
+     * 肿瘤分期
+     */
+    private String tumorLevel;
+
+    /**
+     * 医疗类别
+     */
+    private String medType;
+
+    private String disdiag0;
+//    private String disdiag1;
+//    private String disdiag2;
+//    private String disdiag3;
+//    private String disdiag4;
+//    private String disdiag5;
+//    private String disdiag6;
+//    private String disdiag7;
+//    private String disdiag8;
+//    private String disdiag9;
+//    private String disdiag10;
+//    private String disdiag11;
+//    private String disdiag12;
+//    private String disdiag13;
+//    private String disdiag14;
+//    private String disdiag15;
+//    private String disdiag16;
+//    private String disdiag17;
+//    private String disdiag18;
+//    private String disdiag19;
+//    private String disdiag20;
+//    private String disdiag21;
+//    private String disdiag22;
+//    private String disdiag23;
+//    private String disdiag24;
+//    private String disdiag25;
+
+    private String surgery0;
+//    private String surgery1;
+//    private String surgery2;
+//    private String surgery3;
+//    private String surgery4;
+
+    private String disdiagCodeStr;
+    private String disdiagNameStr;
+    private String surgeryCodeStr;
+    private String surgeryNameStr;
+
+    public String getDisdiagCodeStr() {
+        return null == disdiagCodeStr ? "" : disdiagCodeStr;
+    }
+
+    public String getDisdiagNameStr() {
+        return null == disdiagNameStr ? "" : disdiagNameStr;
+    }
+
+    public String getSurgeryCodeStr() {
+        return null == surgeryCodeStr ? "" : surgeryCodeStr;
+    }
+
+    public String getSurgeryNameStr() {
+        return null == surgeryNameStr ? "" : surgeryNameStr;
+    }
+}

+ 0 - 2
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emr/EmrAuditDetail.java

@@ -2,7 +2,6 @@ package thyyxxk.webserver.entity.zhuyuanyisheng.emr;
 
 import java.io.Serializable;
 
-import cn.hutool.core.util.EnumUtil;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -12,7 +11,6 @@ import lombok.Getter;
 import lombok.experimental.Accessors;
 
 import java.util.Date;
-import java.util.Map;
 
 @Data
 @Accessors(chain = true)

+ 150 - 4
src/main/java/thyyxxk/webserver/service/inpatient/casefrontsheet/CaseFrontSheetExportService.java

@@ -1,25 +1,31 @@
 package thyyxxk.webserver.service.inpatient.casefrontsheet;
 
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import thyyxxk.webserver.constants.frntsheet.DismissWay;
 import thyyxxk.webserver.constants.frntsheet.Hbsag;
 import thyyxxk.webserver.constants.frntsheet.Provinces;
+import thyyxxk.webserver.constants.sidicts.MedType;
 import thyyxxk.webserver.dao.his.inpatient.casefrontsheet.FrontSheetExportDao;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetDisdiag;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetMain;
 import thyyxxk.webserver.entity.casefrontsheet.CaseFrontsheetSurgery;
 import thyyxxk.webserver.entity.casefrontsheet.request.ExportDclRequest;
+import thyyxxk.webserver.entity.casefrontsheet.request.ExportHistorySheets;
 import thyyxxk.webserver.entity.casefrontsheet.response.ExportDclResponse;
+import thyyxxk.webserver.entity.casefrontsheet.response.HistorySheet;
+import thyyxxk.webserver.entity.dictionary.CodeName;
+import thyyxxk.webserver.entity.login.UserInfo;
 import thyyxxk.webserver.service.redislike.RedisLikeService;
-import thyyxxk.webserver.utils.DateUtil;
-import thyyxxk.webserver.utils.DecimalUtil;
-import thyyxxk.webserver.utils.StringUtil;
+import thyyxxk.webserver.utils.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 @Slf4j
 @Service
@@ -124,4 +130,144 @@ public class CaseFrontSheetExportService {
                 return new ArrayList<>();
         }
     }
+
+    public void getHistorySheets(ExportHistorySheets request, HttpServletResponse response) {
+        UserInfo userInfo = redis.getUserInfoByCode(TokenUtil.getInstance().getTokenUserId());
+        String statement = "";
+        StringBuilder builder = new StringBuilder();
+        if (!userInfo.getRoles().contains(1) && !userInfo.getRoles().contains(70)) {
+            builder.append(",'").append(userInfo.getDeptCode()).append("'");
+            for (String item : userInfo.getPartTimeDept()) {
+                builder.append(",'").append(item).append("'");
+            }
+            statement = "and a.dismiss_dept_code in (" + builder.substring(1) + ")";
+        }
+        JSONArray array = new JSONArray();
+        AtomicInteger maxDiagSize = new AtomicInteger(1);
+        AtomicInteger maxSurgerySize = new AtomicInteger(1);
+        dao.selectHistorySheet2(request.getStart(), request.getEnd(), statement, result -> {
+            HistorySheet sheet = result.getResultObject();
+            sheet.setSex(translateGender(sheet.getSex()));
+            sheet.setZyAdmissWay(translateAdmissWay(sheet.getZyAdmissWay()));
+            sheet.setQualityControlLevel(translateQualityLevel(sheet.getQualityControlLevel()));
+            sheet.setZyDismissWay(translateDismissWay(sheet.getZyDismissWay()));
+            sheet.setMedType(MedType.getName(sheet.getMedType()));
+            String[] diagCodeArr = sheet.getDisdiagCodeStr().split("\\^");
+            String[] diagNameArr = sheet.getDisdiagNameStr().split("\\^");
+            String[] surgeryCodeArr = sheet.getSurgeryCodeStr().split("\\^");
+            String[] surgeryNameArr = sheet.getSurgeryNameStr().split("\\^");
+            sheet.setDisdiag0(makeExportFormat(diagCodeArr[0], diagNameArr[0]));
+            sheet.setSurgery0(makeExportFormat(surgeryCodeArr[0], surgeryNameArr[0]));
+
+            JSONObject obj = JSONObject.parseObject(JSONObject.toJSONString(sheet));
+            if (request.needAllDiagnoses() && diagCodeArr.length > 1) {
+                for (int i = 1; i < diagCodeArr.length; i++) {
+                    obj.put("disdiag" + i, makeExportFormat(diagCodeArr[i], diagNameArr[i]));
+                }
+                maxDiagSize.set(Math.max(maxDiagSize.get(), diagCodeArr.length));
+            }
+            if (request.needAllSurgeries() && surgeryCodeArr.length > 1) {
+                for (int i = 1; i < surgeryCodeArr.length; i++) {
+                    obj.put("surgery" + i, makeExportFormat(surgeryCodeArr[i], surgeryNameArr[i]));
+                }
+                maxSurgerySize.set(Math.max(maxSurgerySize.get(), surgeryCodeArr.length));
+            }
+            array.add(obj);
+        });
+
+        ToolExcel excel = new ToolExcel();
+        for (CodeName field : request.getField()) {
+            excel.addTitle(field.getCode(), field.getName());
+        }
+
+        excel.addTitle("disdiag0", "主要诊断", 30);
+        for (int i = 0; i < maxDiagSize.get(); i++) {
+            excel.addTitle("disdiag" + (i + 1), "其他诊断" + (i + 1), 30);
+        }
+
+        excel.addTitle("surgery0", "主要手术", 30);
+        for (int i = 0; i < maxDiagSize.get(); i++) {
+            excel.addTitle("surgery" + (i + 1), "其他手术" + (i + 1), 30);
+        }
+        excel.exportExcel(array, response);
+    }
+
+    private String translateGender(String gender) {
+        if (null == gender) {
+            return "未知";
+        }
+        switch (gender) {
+            case "1":
+                return "男";
+            case "2":
+                return "女";
+            default:
+                return "未知";
+        }
+    }
+
+    private String translateAdmissWay(String code) {
+        if (null == code) {
+            return "其他";
+        }
+        switch (code) {
+            case "1":
+                return "急诊";
+            case "2":
+                return "门诊";
+            case "3":
+                return "其他医疗机构转入";
+            case "4":
+                return "GCP实验";
+            default:
+                return "其他";
+        }
+    }
+
+    private String translateQualityLevel(String code) {
+        if (null == code) {
+            return "";
+        }
+        switch (code) {
+            case "1":
+                return "I";
+            case "2":
+                return "II";
+            case "3":
+                return "III";
+            case "4":
+                return "IV";
+            case "5":
+                return "V";
+            default:
+                return "";
+        }
+    }
+
+    private String translateDismissWay(String code) {
+        if (null == code) {
+            return "其他";
+        }
+        switch (code) {
+            case "0":
+                return "医嘱离院";
+            case "1":
+                return "医嘱转院";
+            case "2":
+                return "医嘱转社区卫生服务机构/乡镇卫生院";
+            case "3":
+                return "非医嘱离院";
+            case "4":
+                return "死亡";
+            default:
+                return "其他";
+        }
+    }
+
+    private String makeExportFormat(String code, String name) {
+        if (StringUtil.isBlank(code)) {
+            return null;
+        }
+        return "[" + code + "] " + name;
+    }
 }

+ 1 - 2
src/main/java/thyyxxk/webserver/utils/ToolExcel.java

@@ -42,8 +42,7 @@ public class ToolExcel {
         DataFormat dataFormat = writer.getWorkbook().createDataFormat();
         short format = dataFormat.getFormat(FORMAT);
         StyleSet styleSet = writer.getStyleSet();
-        styleSet.getCellStyleForDate()
-                .setDataFormat(format);
+        styleSet.getCellStyleForDate().setDataFormat(format);
     }
 
     private void setCellWeight() {

+ 0 - 5
src/main/resources/application-show.yml

@@ -28,11 +28,6 @@ spring:
           username: "sa"
           password: "hnthxyyy"
           driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
-        adicon:
-          url: "jdbc:sqlserver://172.16.32.100:1433;databaseName=CYYFCheckUPV5_HNTHYY"
-          username: "sa"
-          password: "*ThyyHis2018#"
-          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
     druid:
       #type: com.alibaba.druid.pool.DruidDataSource
       #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时