Przeglądaj źródła

病案首页从电子病历获取诊断和手术

lighter 2 lat temu
rodzic
commit
0b16d177d7

+ 6 - 0
src/main/java/thyyxxk/webserver/dao/his/casefrontsheet/CaseFrontSheetDao.java

@@ -283,6 +283,9 @@ public interface CaseFrontSheetDao extends BaseMapper<CaseFrontsheetMain> {
             "where inpatient_no=#{bah} and admiss_times=#{times}")
     List<CaseFrontsheetDisdiag> getDisdiags(@Param("bah") String bah, @Param("times") int times);
 
+    @Select("select rtrim(code) as code,rtrim(name) as name from zd_icd_code_new where code=#{code}")
+    CaseFrontsheetDisdiag selectDiagInfoByCode(@Param("code") String code);
+
     @Select("select no=rtrim(ssxh)," +
             "name=rtrim(ssmc)," +
             "date=ssrq, " +
@@ -304,6 +307,9 @@ public interface CaseFrontSheetDao extends BaseMapper<CaseFrontsheetMain> {
             "where bah=#{bah} and zycs=#{times}")
     List<CaseFrontsheetSurgery> getSurgeries(@Param("bah") String bah, @Param("times") int times);
 
+    @Select("select rtrim(code) as code,name from zd_icd9_cm3 where code=#{code}")
+    CaseFrontsheetSurgery selectSurgeryByCode(@Param("code") String code);
+
     @Select("select (select count(1) from yz_act_order with(nolock) where order_code in ('06026','06053','06027') " +
             "and inpatient_no=#{bah} and admiss_times=#{times}) + " +
             "(select count(1) from yz_inact_order with(nolock) where order_code in ('06026','06053','06027') and " +

+ 51 - 8
src/main/java/thyyxxk/webserver/service/casefrontsheet/CaseFrontSheetMainService.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.client.RestTemplate;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.constants.EmrType;
 import thyyxxk.webserver.constants.sidicts.Insutype;
 import thyyxxk.webserver.constants.sidicts.MedType;
 import thyyxxk.webserver.dao.his.LoginDao;
@@ -40,17 +41,15 @@ public class CaseFrontSheetMainService {
     private final BasSelectOverviewDao basDao;
     private final LoginDao userDao;
     private final PowersiSrvc srvc;
-    private final RedisLikeService redis;
     private final EmrServer emrService;
 
-    public CaseFrontSheetMainService(SheetCreatedDao createdDao, CaseFrontSheetDao dao,
-                                     BasSelectOverviewDao basDao, LoginDao userDao, PowersiSrvc srvc, RedisLikeService redis, EmrServer emrService) {
+    public CaseFrontSheetMainService(SheetCreatedDao createdDao, CaseFrontSheetDao dao, BasSelectOverviewDao basDao,
+                                     LoginDao userDao, PowersiSrvc srvc, EmrServer emrService) {
         this.dao = dao;
         this.createdDao = createdDao;
         this.basDao = basDao;
         this.userDao = userDao;
         this.srvc = srvc;
-        this.redis = redis;
         this.emrService = emrService;
         if (allDictionary == null) {
             allDictionary = new ConcurrentHashMap<>();
@@ -348,8 +347,14 @@ public class CaseFrontSheetMainService {
     private List<CaseFrontsheetDisdiag> getSheetDisDiags(String bah, int times, int status) {
         List<CaseFrontsheetDisdiag> disdiags = status == 1 ?
                 dao.selectSignedSheetDiags(bah, times) : dao.getDisdiags(bah, times);
-        if (disdiags == null) {
-            disdiags = new ArrayList<>();
+        if (disdiags.isEmpty()) {
+            JSONArray diagList = emrService.getEmrData(bah, times, EmrType.DIAGNOSIS);
+            for (int i = 0; i < diagList.size(); i++) {
+                JSONObject diagItem = diagList.getJSONObject(i);
+                CaseFrontsheetDisdiag diag = dao.selectDiagInfoByCode(diagItem.getString("code"));
+                diag.setNo(i + 1);
+                disdiags.add(diag);
+            }
         }
         while (disdiags.size() < 27) {
             disdiags.add(new CaseFrontsheetDisdiag());
@@ -360,8 +365,46 @@ public class CaseFrontSheetMainService {
     private List<CaseFrontsheetSurgery> getSheetSurgeries(String bah, int times, int status) {
         List<CaseFrontsheetSurgery> surgeries = status == 1 ?
                 dao.selectSignedSheetSurgeries(bah, times) : dao.getSurgeries(bah, times);
-        if (surgeries == null) {
-            surgeries = new ArrayList<>();
+        if (surgeries.isEmpty()) {
+            JSONArray oprtList = emrService.getEmrData(bah, times, EmrType.OPERATION);
+            for (int i = 0; i < oprtList.size(); i++) {
+                JSONObject oprtItem = oprtList.getJSONObject(i);
+                JSONObject oprtName = oprtItem.getJSONObject("手术名称");
+                if (null == oprtName) {
+                    continue;
+                }
+                JSONArray oprtNameVals = oprtName.getJSONArray("value");
+                if (null == oprtNameVals) {
+                    continue;
+                }
+                String opdate = oprtItem.getJSONObject("手术日期").getString("value");
+                JSONArray oprtorArr = oprtItem.getJSONObject("术者").getJSONArray("value");
+                JSONObject oprtor = null == oprtorArr ? new JSONObject() : oprtorArr.getJSONObject(0);
+
+                JSONArray assis1Arr = oprtItem.getJSONObject("第一助手").getJSONArray("value");
+                JSONObject assis1 = null == assis1Arr ? new JSONObject() : assis1Arr.getJSONObject(0);
+
+                JSONArray assis2Arr = oprtItem.getJSONObject("第二助手").getJSONArray("value");
+                JSONObject assis2 = null == assis2Arr ? new JSONObject() : assis2Arr.getJSONObject(0);
+
+                JSONArray anstorArr = oprtItem.getJSONObject("麻醉医生").getJSONArray("value");
+                JSONObject anstor = null == anstorArr ? new JSONObject() : anstorArr.getJSONObject(0);
+
+                for (int j = 0; j < oprtNameVals.size(); j++) {
+                    JSONObject oprtCodeName = oprtNameVals.getJSONObject(j);
+                    CaseFrontsheetSurgery surgery = dao.selectSurgeryByCode(oprtCodeName.getString("code"));
+                    surgery.setDate(DateUtil.parse(opdate));
+                    surgery.setOperator(oprtor.getString("code"));
+                    surgery.setOperatorName(oprtor.getString("name"));
+                    surgery.setAssistantOne(assis1.getString("code"));
+                    surgery.setAssistantOneName(assis1.getString("name"));
+                    surgery.setAssistantTwo(assis2.getString("code"));
+                    surgery.setAssistantTwoName(assis2.getString("name"));
+                    surgery.setAnaesthesiaor(anstor.getString("code"));
+                    surgery.setAnaesthesiaorName(anstor.getString("name"));
+                    surgeries.add(surgery);
+                }
+            }
         }
         while (surgeries.size() < 5) {
             surgeries.add(new CaseFrontsheetSurgery());

+ 6 - 0
src/main/java/thyyxxk/webserver/utils/DateUtil.java

@@ -45,6 +45,9 @@ public class DateUtil {
     }
 
     public static Date parse(String source) {
+        if (StringUtil.isBlank(source)) {
+            return null;
+        }
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
             return sdf.parse(source);
@@ -55,6 +58,9 @@ public class DateUtil {
     }
 
     public static Date parse(String source, String pattern) {
+        if (StringUtil.isBlank(source)) {
+            return null;
+        }
         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
         try {
             return sdf.parse(source);