|
|
@@ -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;
|
|
|
+ }
|
|
|
}
|