Browse Source

住院规则

DESKTOP-0GD05B0\Administrator 2 năm trước cách đây
mục cha
commit
a7d5a472ca

+ 0 - 1
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/CaoYaoYiZhuController.java

@@ -28,7 +28,6 @@ import java.util.Map;
 @RestController
 @RequestMapping("/caoYaoYiZhu")
 public class CaoYaoYiZhuController {
-
     private final CaoYaoYiZhuServer server;
 
     public CaoYaoYiZhuController(CaoYaoYiZhuServer server) {

+ 34 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/EmrControlRuleController.java

@@ -0,0 +1,34 @@
+package thyyxxk.webserver.controller.zhuyuanyizheng;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.bind.annotation.*;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.PerformAValidation;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.RuleAdd;
+import thyyxxk.webserver.service.zhuyuanyisheng.EmrControlRuleSever;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ */
+@RestController
+@RequestMapping("/emrControlRule")
+public class EmrControlRuleController {
+    private final EmrControlRuleSever server;
+
+    public EmrControlRuleController(EmrControlRuleSever server) {
+        this.server = server;
+    }
+
+    @PostMapping("/addRule")
+    public ResultVo<String> addRule(@RequestBody RuleAdd data) {
+        return server.addTimeRule(data);
+    }
+
+    @GetMapping("/getAvailableObjects")
+    public ResultVo<List<Map<String, Object>>> getAvailableObjects() {
+        return server.getAvailableObjects();
+    }
+}

+ 4 - 2
src/main/java/thyyxxk/webserver/dao/his/dictionary/EmrDataMaintenanceDao.java

@@ -11,7 +11,7 @@ import java.util.Map;
 @Mapper
 public interface EmrDataMaintenanceDao {
 
-    @Select("select * from emr_data_maintenance with(nolock) where del_flag = 0 ")
+    @Select("select * from emr_data_maintenance with(nolock) where del_flag = 0 and data_type <> 3 ")
     IPage<EmrDataMaintenance> getElectronicMedicalRecordDataElementSql(IPage<EmrDataMaintenance> page);
 
     @Select("${sql}")
@@ -53,7 +53,7 @@ public interface EmrDataMaintenanceDao {
             "       modified_date," +
             "       data_type," +
             "       group_name " +
-            "from emr_data_maintenance")
+            "from emr_data_maintenance where del_flag = 0 and data_type <> 3 ")
     List<EmrDataMaintenance> getEmrInpatientData();
 
 
@@ -70,4 +70,6 @@ public interface EmrDataMaintenanceDao {
     @Select("insert into emr_data_extract (emr_category_code, data_extract, name) values (#{param.emrCategoryCode},#{param.dataExtract},#{param.name})")
     void insertExtractDataSource(@Param("param") EmrDataExtract param);
 
+
+
 }

+ 2 - 3
src/main/java/thyyxxk/webserver/dao/his/heliyongyao/RationalUseDao.java

@@ -274,9 +274,8 @@ public interface RationalUseDao {
             "  a.inpatient_no = #{patNo} " +
             "  and a.admiss_times = #{times} " +
             "  and frequ_code <> 'ONCE' " +
-            "  and status_flag in ('3', '4') " +
-            "  and serial <> '00' " +
-            " ")
+            "  and status_flag in ('2','3','4') " +
+            "  and serial <> '00' ")
     List<XinZhenYzActOrder> getHistoricalMedicalOrders(@Param("patNo") String patNo,
                                                        @Param("times") Integer times);
 

+ 45 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/EmrControlDao.java

@@ -0,0 +1,45 @@
+package thyyxxk.webserver.dao.his.zhuyuanyisheng;
+
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.EmrRule;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.RuleAdd;
+
+import java.util.List;
+import java.util.Map;
+
+public interface EmrControlDao {
+
+    @Select("select count(1) " + "from emr_control_temp_code a, " + "     emr_control_rule b " + "where a.rule_id = b.id " + "  and code = #{code} " + "  and b.type = #{type} ")
+    int getEmrRuleCount(String code, int type);
+
+    @Insert("insert into emr_control_temp_code (code, rule_id) values (#{code},#{id})")
+    void insertControlRule(@Param("id") String id, @Param("code") String code);
+
+
+    @Insert("insert into emr_control_rule (id, type, data,off_or_on_rule,prompt_statement) " +
+            "values (#{id},#{param.type},#{param.data},#{param.offOrOnRule},#{param.promptStatement})")
+    void insertRule(@Param("id") String id, @Param("param") RuleAdd param);
+
+    /**
+     * 获取规则
+     *
+     * @param code 病历编码
+     * @return 返回该病历的规则
+     */
+    @Select("select code, rule_id, id, type, data, off_or_on_rule, prompt_statement " +
+            "from emr_control_temp_code a, " +
+            "     emr_control_rule b " +
+            "where a.rule_id = b.id " +
+            "  and code = #{code} " +
+            "  and off_or_on_rule = 1 ")
+    List<EmrRule> selectEmrRule(String code);
+
+    @Select("select name, id, group_name " +
+            "from emr_data_maintenance " +
+            "where data_type = 3")
+    List<Map<String, Object>> getAvailableObjects();
+
+}

+ 39 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emrcontrolrule/EmrRule.java

@@ -0,0 +1,39 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule;
+
+import lombok.Data;
+
+@Data
+public class EmrRule {
+
+    /**
+     * 病历编码
+     */
+    private String code;
+    /**
+     * 规则id  emr_control_temp_code 表
+     */
+    private String ruleId;
+
+    /**
+     * 规则id emr_control_rule 表
+     */
+    private String id;
+    /**
+     * 类型 1=时间 2=创建顺序
+     */
+    private int type;
+    /**
+     * 规则
+     */
+    private String data;
+
+    /**
+     * 是否开启
+     */
+    private Integer offOrOnRule;
+
+    /**
+     * 提示语
+     */
+    private String promptStatement;
+}

+ 11 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emrcontrolrule/PerformAValidation.java

@@ -0,0 +1,11 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+
+@Data
+public class PerformAValidation {
+    private String code;
+    private JSONObject patData;
+    private JSONObject extractData;
+}

+ 22 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/emrcontrolrule/RuleAdd.java

@@ -0,0 +1,22 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Null;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class RuleAdd {
+    private int type;
+    private List<String> medicalRecordCode;
+    private Map<String, Object> medicalRecord;
+    private String data;
+    /**
+     * 是否开启
+     */
+    private Integer offOrOnRule;
+
+    private String promptStatement;
+}

+ 17 - 22
src/main/java/thyyxxk/webserver/service/heliyongyao/RationalUseServer.java

@@ -80,11 +80,10 @@ public class RationalUseServer {
         Map<String, String> doctMap = doctorInfo(userCode);
         String baseXml = doctMap.get("baseXml");
         String doctXml = doctMap.get("doct");
-        List<XinZhenYzActOrder> yp = new ArrayList<>();
         QueryWrapper<?> qw = new QueryWrapper<>();
         List<String> drugList = new ArrayList<>();
-        addTheDrugCode(param.getList(), yp, drugList);
-        addTheDrugCode(historicalData, yp, drugList);
+        addTheDrugCode(param.getList(), drugList);
+        addTheDrugCode(historicalData, drugList);
 
         if (ListUtil.isBlank(drugList)) {
             return new JSONObject();
@@ -93,7 +92,7 @@ public class RationalUseServer {
         Map<String, YaoPin> drugMap = dao.selectDrug(qw).stream().collect(
                 Collectors.toMap(YaoPin::getId, a -> a, (k1, k2) -> k1)
         );
-        String detailsXml = drugInfoFunc(param.getInpatientNo(), param.getAdmissTimes(), yp, doctXml, drugMap, historicalData);
+        String detailsXml = drugInfoFunc(param.getInpatientNo(), param.getAdmissTimes(), param.getList(), doctXml, drugMap, historicalData);
         String js = String.format("{\"BaseXml\": \"%s\", \"DetailsXml\" : \"%s\"}", baseXml, detailsXml);
         log.info("js:{}", js);
         return http.rationalUse(js);
@@ -106,15 +105,12 @@ public class RationalUseServer {
      * @param yp
      * @param drugList
      */
-    private static void addTheDrugCode(List<XinZhenYzActOrder> list, List<XinZhenYzActOrder> yp, List<String> drugList) {
+    private static void addTheDrugCode(List<XinZhenYzActOrder> list, List<String> drugList) {
         for (XinZhenYzActOrder item : list) {
             if (StringUtil.notBlank(item.getSerial())) {
-                if (!"00".equals(item.getSerial())) {
-                    yp.add(item);
-                    String key = item.getOrderCode().trim() + item.getSerial().trim();
-                    if (!drugList.contains(key)) {
-                        drugList.add(key);
-                    }
+                String key = item.getOrderCode().trim() + item.getSerial().trim();
+                if (!drugList.contains(key)) {
+                    drugList.add(key);
                 }
             }
         }
@@ -252,23 +248,23 @@ public class RationalUseServer {
         sb.append("</diagnose_data>")
                 .append("</patient>");
         sb.append("<prescription_data>");
+        sb.append("<prescription>").append("<id>").append("0").append("</id>")
+                .append("<reason>").append("</reason>")
+                .append("<is_current>").append(1).append("</is_current>")
+                .append("<pres_type>").append("</pres_type>")
+                .append("<pres_time>").append(DateUtil.formatDatetime(new Date())).append("</pres_time>")
+                // 药品信息节点,可循环
+                .append("<medicine_data>");
         // 循环处方节点
         prescribingInformation(drugData, doct, drugMap, sb, 1);
         prescribingInformation(historicalData, doct, drugMap, sb, 0);
-
+        sb.append("</medicine_data></prescription>");
         sb.append("</prescription_data></details_xml>");
         return sb.toString();
     }
 
     private void prescribingInformation(List<XinZhenYzActOrder> drugData, String doct, Map<String, YaoPin> drugMap, StringBuilder sb,
                                         int current) {
-        sb.append("<prescription>").append("<id>").append("0").append("</id>")
-                .append("<reason>").append("</reason>")
-                .append("<is_current>").append(current).append("</is_current>")
-                .append("<pres_type>").append("</pres_type>")
-                .append("<pres_time>").append(DateUtil.formatDatetime(new Date())).append("</pres_time>")
-                // 药品信息节点,可循环
-                .append("<medicine_data>");
         for (XinZhenYzActOrder item : drugData) {
             YaoPin yp = drugMap.get(item.getOrderCode().trim() + item.getSerial().trim());
             if (null == yp) {
@@ -291,8 +287,8 @@ public class RationalUseServer {
                     .append("<reason>").append("</reason>")
                     .append("<dose_unit>").append(nullToBlank(item.getDoseUnitName())).append("</dose_unit>")
                     .append("<dose>").append(item.getDose()).append("</dose>")
-                    .append("<kyzl>").append(item.getDose()).append("</kyzl>")
-                    .append("<zl_unit>").append(item.getDoseUnit()).append("</zl_unit>")
+                    .append("<kyzl>").append(item.getDrugQuan()).append("</kyzl>")
+                    .append("<zl_unit>").append(item.getDrugQuanName()).append("</zl_unit>")
                     .append("<freq>").append("ZY").append(nullToBlank(item.getFrequCode())).append("</freq>")
                     .append("<administer>").append("ZY").append(item.getSupplyCode()).append("</administer>")
                     .append("<begin_time>").append(DateUtil.formatDatetime(item.getStartTime())).append("</begin_time>")
@@ -303,7 +299,6 @@ public class RationalUseServer {
                     .append("<money>").append(yp.getPackRetprice().multiply(item.getDrugQuan())).append("</money>")
                     .append("</medicine>");
         }
-        sb.append("</medicine_data></prescription>");
     }
 
     /**

+ 69 - 0
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/EmrControlRuleSever.java

@@ -0,0 +1,69 @@
+package thyyxxk.webserver.service.zhuyuanyisheng;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.zhuyuanyisheng.EmrControlDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.EmrRule;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.PerformAValidation;
+import thyyxxk.webserver.entity.zhuyuanyisheng.emrcontrolrule.RuleAdd;
+import thyyxxk.webserver.utils.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ */
+@Service
+@Slf4j
+public class EmrControlRuleSever {
+
+    private final EmrControlDao dao;
+    private final EmrServer emrServer;
+
+
+    public EmrControlRuleSever(EmrControlDao dao, EmrServer emrServer) {
+        this.dao = dao;
+        this.emrServer = emrServer;
+    }
+
+    public ResultVo<String> addTimeRule(RuleAdd data) {
+        if (ListUtil.isBlank(data.getMedicalRecordCode())) {
+            return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "病历模板编码不能为空。");
+        }
+        if (StringUtil.isBlank(data.getData())) {
+            return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "规则不能为空。");
+        }
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<String, Object> item : data.getMedicalRecord().entrySet()) {
+            JSONObject js = JSONObject.parseObject(JSON.toJSONString(item.getValue()));
+            if (dao.getEmrRuleCount(js.getString("code"), data.getType()) > 0) {
+                sb.append("病历规则重复添加:病历名称:").append(js.getString("name")).append("<br/>");
+            }
+        }
+        if (StringUtil.notBlank(sb.toString())) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_HTML_ERROR, sb.toString());
+        }
+        String id = SnowFlakeId.instance().nextId();
+        dao.insertRule(id, data);
+        data.getMedicalRecordCode().forEach(item -> {
+            dao.insertControlRule(id, item);
+        });
+        log.info("数据:{}", JSON.toJSONString(data));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "创建成功。");
+    }
+
+    @DS("his")
+    public ResultVo<List<Map<String, Object>>> getAvailableObjects() {
+        return ResultVoUtil.success(dao.getAvailableObjects());
+    }
+
+
+}

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

@@ -347,16 +347,6 @@ public class DateUtil {
         return day;
     }
 
-    public static boolean judgmentDate(Date date1, Date date2) {
-        long cha = date1.getTime() - date2.getTime();
-        if (cha < 0) {
-            return false;
-        }
-        double result = cha * 1.0 / (1000 * 60 * 60);
-        return result <= 24;
-    }
-
-
     public static boolean within24Hours(Date date) {
         long l = System.currentTimeMillis();
         long mills = l - date.getTime();

+ 5 - 1
src/main/java/thyyxxk/webserver/utils/SnowFlakeId.java

@@ -42,7 +42,11 @@ public class SnowFlakeId {
         return INSTANCE;
     }
 
-    //下一个ID生成算法
+    /**
+     * 下一个ID生成算法
+     *
+     * @return 返回 18 位字符串
+     */
     public synchronized String nextId() {
         long timestamp = System.currentTimeMillis();