Sfoglia il codice sorgente

1、新增项目使用时间字段
2、区分his接口

0027005599 2 anni fa
parent
commit
4deede9809

+ 41 - 4
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/controller/HisController.java

@@ -70,8 +70,7 @@ public class HisController extends JeecgController<Audit, IAuditService> {
            advanceWarningVO.setVisit_type(Constant.TREAMENT_TYPE_OUTPATIENT);
        }
        log.info("事前远端请求的服务ip地址:{}", ipStr);
-       ruleEngine.dealPreInterfaceEngin(advanceWarningVO, ipStr);
-       return Result.OK("事前提醒调用完成!");
+       return ruleEngine.dealPreInterfaceEngin(advanceWarningVO, ipStr);
    }
 
 
@@ -88,8 +87,46 @@ public class HisController extends JeecgController<Audit, IAuditService> {
 
         String ipStr = HttpUtils.getIPAddress(httpServletRequest);
         log.info("事中远端请求的服务ip地址:{}", ipStr);
-        ruleEngine.dealMidInterfaceEngin("midIncidentWarning", midIncidentWarningVO, ipStr);
-        return Result.OK("事中预警调用完成!");
+        return ruleEngine.dealMidInterfaceEngin("midIncidentWarning", midIncidentWarningVO, ipStr);
+    }
+
+
+
+
+    /**
+     *   事前提醒
+     *
+     * @param advanceWarningVO
+     * @return
+     */
+    @AutoLog(value = "事前提醒websocket通知接口")
+    @ApiOperation(value="事前提醒接口", notes="事前提醒接口调用")
+    @PostMapping(value = "/advanceWarningSocket")
+    public Result<String> advanceWarningSocket(@RequestBody @Valid AdvanceWarningVO advanceWarningVO, HttpServletRequest httpServletRequest) {
+        String ipStr = HttpUtils.getIPAddress(httpServletRequest);
+        if(StringUtils.isBlank(advanceWarningVO.getVisit_type())){
+            advanceWarningVO.setVisit_type(Constant.TREAMENT_TYPE_OUTPATIENT);
+        }
+        log.info("事前远端请求的服务ip地址:{}", ipStr);
+        ruleEngine.dealPreInterfaceEnginSocket(advanceWarningVO, ipStr);
+        return Result.OK("事前提醒调用完成!");
     }
 
+
+    /**
+     *  事中预警
+     *
+     * @param midIncidentWarningVO
+     * @return
+     */
+    @AutoLog(value = "事中预警websocket通知接口")
+    @ApiOperation(value="事中预警接口", notes="事中预警接口调用")
+    @PostMapping(value = "/midIncidentWarningSocket")
+    public Result<String> midIncidentWarningSocket(@RequestBody @Valid MidIncidentWarningVO midIncidentWarningVO,HttpServletRequest httpServletRequest) {
+
+        String ipStr = HttpUtils.getIPAddress(httpServletRequest);
+        log.info("事中远端请求的服务ip地址:{}", ipStr);
+        ruleEngine.dealMidInterfaceEnginSocket("midIncidentWarning", midIncidentWarningVO, ipStr);
+        return Result.OK("事中预警调用完成!");
+    }
 }

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/entity/AdviceDetailsVO.java

@@ -82,7 +82,7 @@ public class AdviceDetailsVO {
      * 项目使用日期
      * yyyy-MM-dd HH:mm:ss
      */
-    private String projectUseTime;
+    private String project_use_time;
     private String inspection_site;//检查部位
     private String order_catalog;//医嘱大类
     private String order_type;//医嘱类别

+ 87 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/medical/ruleengine/RuleEngine.java

@@ -368,6 +368,39 @@ public class RuleEngine {
      * @return
      */
     public Result dealPreInterfaceEngin(AdvanceWarningVO advanceWarningVO, String ipStr) {
+        JSONObject sendJson = new JSONObject();
+        try {
+            String jsonStr = JSON.toJSONString(advanceWarningVO);
+            log.info("事中提醒接收报文:{}", jsonStr);
+            JSONObject paramMap = JSON.parseObject(jsonStr);
+
+            AdvanceWarningAudit advanceWarningAudit = insertAdvanceWarning(advanceWarningVO);
+            if (CollectionUtil.isEmpty(advanceWaringRuleIdList)) {
+                log.error("事前提醒未配置对应的提醒规则");
+                return Result.ok();
+            }
+            for (Integer medicalRuleInsInfoId : advanceWaringRuleIdList) {
+                MedicalInsRuleInfo medicalInsRuleInfo = medicalInsRuleInfoService.getById(medicalRuleInsInfoId);
+                paramMap.put(SystemEventAttrConstant.PRE_ADVANCEWARNINGAUDIT_ID_KEY, advanceWarningAudit.getId());
+                runAdvanceWaringEngine(paramMap, medicalInsRuleInfo, advanceWarningAudit);
+            }
+
+            sendJson.put("id", advanceWarningAudit.getId());
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+
+        return Result.ok(sendJson);
+    }
+
+    /**
+     * 事前提醒接口
+     *
+     * @param advanceWarningVO
+     * @param ipStr
+     * @return
+     */
+    public Result dealPreInterfaceEnginSocket(AdvanceWarningVO advanceWarningVO, String ipStr) {
 
         try {
             String jsonStr = JSON.toJSONString(advanceWarningVO);
@@ -397,6 +430,59 @@ public class RuleEngine {
 
 
     public Result dealMidInterfaceEngin(String intefName, MidIncidentWarningVO midIncidentWarningVO, String ipStr) {
+        midIncidentWarningVOThreadLocal.set(midIncidentWarningVO);
+        JSONObject sendJson = new JSONObject();
+        try {
+            List<RuleAttr> ruleAttrList = interfRuleAttrList.get(intefName);
+            if (null == ruleAttrList) {
+                return Result.error("接口:" + intefName + " 未配置 对应的规则属性");
+            }
+            dictUtil.transferMidIncidentWarningVO(midIncidentWarningVO);
+            String jsonStr = JSON.toJSONString(midIncidentWarningVO);
+            log.info("事中提醒接收报文:{}", jsonStr);
+            JSONObject paramMap = JSON.parseObject(jsonStr);
+            List<Map<String, Object>> itemList = interfItemListPlugin.findProIntersection(paramMap, ruleAttrList);
+            MidIncidentAudit midIncidentAudit = insertMidWarning(midIncidentWarningVO);
+            insertLog(midIncidentWarningVO);
+            midIncidentAudit.setInterfName(intefName);
+            Set<String> auditDetailSet = new HashSet<>();
+            boolean sendFlag = false;
+            for (Map<String, Object> itemMap : itemList) {
+                Set<Integer> medicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
+                if (CollectionUtil.isEmpty(medicalInsRuleInfoIdList)) {
+                    log.error("项目编码未匹配到对应的医保规则:{}", itemMap.get(Constant.MEDICAL_PROJECT_CODE_KEY));
+                    continue;
+                }
+                Object diagnose = itemMap.get(Constant.MEDICAL_DIAGNOSE_CODE_KEY);
+                if (null != diagnose) {
+                    List<Object> diagnoseList = (List<Object>) diagnose;
+                    //获取诊断编码配置的规则ID,加入需要执行的规则
+                    for (Object diagnoseObject : diagnoseList) {
+                        Set<Integer> diagnoseMedicalInsRuleInfoIdList = itemCodeAndRuleIdMap.get(diagnoseObject.toString());
+                        if (CollectionUtil.isNotEmpty(diagnoseMedicalInsRuleInfoIdList)) {
+                            medicalInsRuleInfoIdList.addAll(diagnoseMedicalInsRuleInfoIdList);
+                        }
+                    }
+                }
+                paramMap.put(SystemEventAttrConstant.ADVICE_DETAILS_LIST_KEY, itemList);
+                sendFlag = runMidEngine(auditDetailSet, itemMap, medicalInsRuleInfoIdList, midIncidentAudit, itemList);
+            }
+            sendJson.put("id", midIncidentAudit.getId());
+            sendJson.put("violationFlag", sendFlag);
+            if (!sendFlag) {
+                log.error("无违规,事中审核无需提醒 门诊/住院号:{}", midIncidentWarningVO.getVisit_no());
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        } finally {
+            midIncidentWarningVOThreadLocal.remove();
+        }
+
+        return Result.ok(sendJson);
+    }
+
+
+    public Result dealMidInterfaceEnginSocket(String intefName, MidIncidentWarningVO midIncidentWarningVO, String ipStr) {
         midIncidentWarningVOThreadLocal.set(midIncidentWarningVO);
         try {
             List<RuleAttr> ruleAttrList = interfRuleAttrList.get(intefName);
@@ -452,6 +538,7 @@ public class RuleEngine {
     }
 
 
+
     /**
      * 事后明细
      *