浏览代码

Merge remote-tracking branch 'upstream/master'

hsh 3 年之前
父节点
当前提交
dd0ad5e272

+ 49 - 0
src/main/java/thyyxxk/webserver/controller/dictionary/EmrDataMaintenanceContorller.java

@@ -0,0 +1,49 @@
+package thyyxxk.webserver.controller.dictionary;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.web.bind.annotation.*;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.EmrDataMaintenance;
+import thyyxxk.webserver.service.dictionary.EmrDataMaintenanceServer;
+
+@RestController
+@RequestMapping("/EmrDataMaintenance")
+public class EmrDataMaintenanceContorller {
+
+    private final EmrDataMaintenanceServer server;
+
+    public EmrDataMaintenanceContorller(EmrDataMaintenanceServer server) {
+        this.server = server;
+    }
+
+
+    @GetMapping("/getElectronicMedicalRecordDataElementSql")
+    public ResultVo<Page<EmrDataMaintenance>> getElectronicMedicalRecordDataElementSql(@RequestParam("currentPage") int currentPage,
+                                                                                       @RequestParam("pageSize") int pageSize,
+                                                                                       @RequestParam("total") long total) {
+        return server.getElectronicMedicalRecordDataElementSql(currentPage, pageSize, total);
+    }
+
+
+    @PostMapping("/testSql")
+    public ResultVo<JSONObject> testSql(@RequestBody EmrDataMaintenance emr) {
+        return server.testSql(emr);
+    }
+
+    @PostMapping("/addData")
+    public ResultVo<String> addData(@RequestBody EmrDataMaintenance emr) {
+        return server.addData(emr);
+    }
+
+    @PostMapping("/getEmrInpatientData")
+    public ResultVo<JSONObject> getEmrInpatientData(@RequestBody EmrDataMaintenance emr) throws Exception {
+        return server.getEmrInpatientData(emr.getPatNo(), emr.getTimes());
+    }
+
+    @PostMapping("/updateData")
+    public ResultVo<String> updateData(@RequestBody EmrDataMaintenance emr) {
+        return server.updateData(emr);
+    }
+}

+ 24 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/EmrController.java

@@ -0,0 +1,24 @@
+package thyyxxk.webserver.controller.zhuyuanyizheng;
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.service.zhuyuanyisheng.EmrServer;
+
+@RequestMapping("/Emr")
+@RestController
+public class EmrController {
+
+    private final EmrServer emrServer;
+
+    public EmrController(EmrServer emrServer) {
+        this.emrServer = emrServer;
+    }
+
+    @GetMapping("/getEmrTree")
+    public ResultVo<JSON> getEmrTree() {
+        return emrServer.getEmrTree();
+    }
+}

+ 45 - 0
src/main/java/thyyxxk/webserver/dao/his/dictionary/EmrDataMaintenanceDao.java

@@ -0,0 +1,45 @@
+package thyyxxk.webserver.dao.his.dictionary;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.*;
+import thyyxxk.webserver.entity.zhuyuanyisheng.EmrDataMaintenance;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface EmrDataMaintenanceDao {
+
+    @Select("select * from emr_data_maintenance with(nolock) ")
+    IPage<EmrDataMaintenance> getElectronicMedicalRecordDataElementSql(IPage<EmrDataMaintenance> page);
+
+    @Select("${sql}")
+    Map<String, Object> testSql(@Param("sql") String sql);
+
+    @Insert("insert into emr_data_maintenance (name, sql_sentence, input_id)\n" +
+            "values (#{name}, #{sqlSentence}, #{inputId})")
+    void addData(@Param("name") String name,
+                 @Param("sqlSentence") String sqlSentence,
+                 @Param("inputId") String inputId);
+
+    @Update("update emr_data_maintenance " +
+            "set name = #{name} , sql_sentence = #{sqlSentence} , modified_by = #{inputId}" +
+            " , modified_date = getdate() " +
+            "where id = #{id} ")
+    void updateData(@Param("name") String name,
+                    @Param("sqlSentence") String sqlSentence,
+                    @Param("inputId") String inputId,
+                    @Param("id") Integer id);
+
+
+    @Select("select id, " +
+            "       name, " +
+            "       sql_sentence, " +
+            "       del_flag, " +
+            "       input_id, " +
+            "       input_date, " +
+            "       modified_by, " +
+            "       modified_date " +
+            "from emr_data_maintenance")
+    List<EmrDataMaintenance> getEmrInpatientData();
+}

+ 55 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/EmrDataMaintenance.java

@@ -0,0 +1,55 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javafx.scene.control.TextInputDialog;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author 肖蟾
+ */
+@Data
+@Accessors(chain = true)
+public class EmrDataMaintenance implements Serializable {
+
+    private static final long serialVersionUID = 6579338957362461634L;
+
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 数据名称
+     */
+    private String name;
+
+    /**
+     * sql 语句内容
+     */
+    private String sqlSentence;
+
+    /**
+     * 逻辑删除
+     */
+    private Integer delFlag;
+
+    /**
+     * 测试时需要使用的的住院号
+     */
+    private String patNo;
+
+    /**
+     * 测试时需要使用的的住院次数
+     */
+    private Integer times;
+
+    private String inputId;
+    private Date inputDate;
+
+    private String modifiedBy;
+    private Date modifiedDate;
+
+}

+ 127 - 0
src/main/java/thyyxxk/webserver/service/dictionary/EmrDataMaintenanceServer.java

@@ -0,0 +1,127 @@
+package thyyxxk.webserver.service.dictionary;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.dictionary.EmrDataMaintenanceDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.zhuyuanyisheng.EmrDataMaintenance;
+import thyyxxk.webserver.utils.*;
+
+import java.util.*;
+
+@Service
+@Slf4j
+public class EmrDataMaintenanceServer {
+
+    private final EmrDataMaintenanceDao dao;
+
+    public EmrDataMaintenanceServer(EmrDataMaintenanceDao dao) {
+        this.dao = dao;
+    }
+
+    private static String keyParameterSubstitution(String sqlSentence, String patNo, Integer times) {
+        sqlSentence = sqlSentence.replaceAll("\\$\\{PAT_NO}", " '" + patNo + "' ");
+        sqlSentence = sqlSentence.replaceAll("\\$\\{TIMES}", " " + times + " ");
+        return sqlSentence;
+    }
+
+    private static void createObject(Map<String, Map<String, Object>> groupMap, String key, Object value, Map<String, Object> extraMap) {
+        String[] keys = key.split("_");
+        Map<String, Object> groupChild = new HashMap<>();
+        if (keys.length == 4) {
+            extraMap.put(StringUtil.humpToUnderline(keys[3]), value);
+        }
+        if (groupMap.containsKey(keys[1])) {
+            groupChild.putAll(groupMap.get(keys[1]));
+            groupChild.put(keys[2], value);
+            groupMap.put(keys[1], groupChild);
+        } else {
+            groupChild.put(keys[2], value);
+            groupMap.put(keys[1], groupChild);
+        }
+    }
+
+
+    public ResultVo<Page<EmrDataMaintenance>> getElectronicMedicalRecordDataElementSql(int currentPage, int pageSize, long total) {
+        Page<EmrDataMaintenance> page = new Page<>(currentPage, pageSize, total == 0);
+        dao.getElectronicMedicalRecordDataElementSql(page);
+        return ResultVoUtil.success(page);
+    }
+
+    public ResultVo<JSONObject> testSql(EmrDataMaintenance emr) {
+        try {
+            String sql = keyParameterSubstitution(emr.getSqlSentence(), emr.getPatNo(), emr.getTimes());
+
+            Map<String, Object> sqlData = dao.testSql(sql);
+            if (null == sqlData || sqlData.isEmpty()) {
+                return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "sql没问题,但是没得数据。");
+            }
+
+            Map<String, Map<String, Object>> groupingMap = new HashMap<>();
+            Map<String, Object> extraMap = new HashMap<>();
+            List<String> groupKeys = new ArrayList<>();
+
+            for (Map.Entry<String, Object> dbitem : sqlData.entrySet()) {
+                Object value = dbitem.getValue();
+                String key = dbitem.getKey();
+                if (value != null) {
+                    if (value instanceof String) {
+                        sqlData.replace(key, ((String) value).trim());
+                        if (key.startsWith("gy_")) {
+                            groupKeys.add(key);
+                            createObject(groupingMap, key, ((String) value).trim(), extraMap);
+                        }
+                    }
+                }
+            }
+
+            sqlData.putAll(groupingMap);
+            sqlData.putAll(extraMap);
+            for (String item : groupKeys) {
+                sqlData.remove(item);
+            }
+            return ResultVoUtil.success(JSON.parseObject(JSON.toJSONStringWithDateFormat(sqlData, DateUtil.DEFAULT_PATTERN)));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, e.getMessage());
+        }
+    }
+
+
+    public ResultVo<String> addData(EmrDataMaintenance emr) {
+        String userCode = TokenUtil.getTokenUserId();
+        dao.addData(emr.getName(), emr.getSqlSentence(), userCode);
+        log.info("新增电子病历维护 ==> 操作人:{},数据:{}", userCode, JSON.toJSONString(emr));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+    public ResultVo<String> updateData(EmrDataMaintenance emr) {
+        if (emr == null || emr.getId() == null) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到id");
+        }
+        dao.updateData(emr.getName(), emr.getSqlSentence(), TokenUtil.getTokenUserId(), emr.getId());
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+
+    public ResultVo<JSONObject> getEmrInpatientData(String patNo, Integer times) throws Exception {
+        List<EmrDataMaintenance> emrData = dao.getEmrInpatientData();
+        JSONObject obj = new JSONObject();
+        for (EmrDataMaintenance item : emrData) {
+            item.setPatNo(patNo);
+            item.setTimes(times);
+            ResultVo<JSONObject> resultVo = testSql(item);
+            if (resultVo.getCode() == ExceptionEnum.SUCCESS.getCode()) {
+                if (null != resultVo.getData()) {
+                    obj = EntityCopy.jsonMerge(resultVo.getData(), obj);
+                }
+            }
+        }
+        return ResultVoUtil.success(obj);
+    }
+
+}

+ 10 - 0
src/main/java/thyyxxk/webserver/service/externalhttp/EmrSrvc.java

@@ -0,0 +1,10 @@
+package thyyxxk.webserver.service.externalhttp;
+
+import com.alibaba.fastjson.JSON;
+import com.dtflys.forest.annotation.Get;
+
+public interface EmrSrvc {
+
+    @Get("http://172.16.32.122:8001/emr/runtime/api/v1/category/tree")
+    JSON getCategoryTree();
+}

+ 26 - 0
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/EmrServer.java

@@ -0,0 +1,26 @@
+package thyyxxk.webserver.service.zhuyuanyisheng;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.service.externalhttp.EmrSrvc;
+import thyyxxk.webserver.utils.ResultVoUtil;
+
+@Service
+@Slf4j
+public class EmrServer {
+
+    private final EmrSrvc emrSrvc;
+
+    public EmrServer(EmrSrvc emrSrvc) {
+        this.emrSrvc = emrSrvc;
+    }
+
+    public ResultVo<JSON> getEmrTree() {
+        JSON treeJson = emrSrvc.getCategoryTree();
+        log.info("数据:{}", treeJson);
+        return ResultVoUtil.success(treeJson);
+    }
+
+}

+ 40 - 0
src/main/java/thyyxxk/webserver/utils/EntityCopy.java

@@ -1,6 +1,8 @@
 package thyyxxk.webserver.utils;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -71,4 +73,42 @@ public class EntityCopy {
     }
 
 
+    /**
+     * 合并JSON对象,用source覆盖target,返回覆盖后的JSON对象。
+     *
+     * @param source JSONObject
+     * @param target JSONObject
+     * @return JSONObject
+     */
+    public static JSONObject jsonMerge(JSONObject source, JSONObject target) {
+        // 覆盖目标JSON为空,直接返回覆盖源
+        if (target == null) {
+            return source;
+        }
+
+        for (String key : source.keySet()) {
+            Object value = source.get(key);
+            if (!target.containsKey(key)) {
+                target.put(key, value);
+            } else {
+                if (value instanceof JSONObject) {
+                    JSONObject valueJson = (JSONObject) value;
+                    JSONObject targetValue = jsonMerge(valueJson, target.getJSONObject(key));
+                    target.put(key, targetValue);
+                } else if (value instanceof JSONArray) {
+                    JSONArray valueArray = (JSONArray) value;
+                    for (int i = 0; i < valueArray.size(); i++) {
+                        JSONObject obj = (JSONObject) valueArray.get(i);
+                        JSONObject targetValue = jsonMerge(obj, (JSONObject) target.getJSONArray(key).get(i));
+                        target.getJSONArray(key).set(i, targetValue);
+                    }
+                } else {
+                    target.put(key, value);
+                }
+            }
+        }
+        return target;
+    }
+
+
 }

+ 75 - 0
src/main/java/thyyxxk/webserver/utils/JsonUtils.java

@@ -0,0 +1,75 @@
+package thyyxxk.webserver.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * json工具类
+ * @Version 1.0
+ */
+public final class JsonUtils {
+
+    /**
+     * 去除json值前后空格
+     * @param jsonStr jsonStr
+     * @return
+     */
+    public static JSONObject jsonTrim(String jsonStr) {
+        return jsonTrim(JSONObject.parseObject(jsonStr));
+    }
+
+    public static String jsonTrimToString(String jsonStr) {
+        return jsonTrim(JSONObject.parseObject(jsonStr)).toJSONString() ;
+    }
+
+
+
+    /**
+     * 去除value的空格
+     *
+     * @param jsonObject jsonObject
+     * @return
+     */
+    public static JSONObject jsonTrim(JSONObject jsonObject) {
+        for (Map.Entry<String, Object> next : jsonObject.entrySet()) {
+            Object value = next.getValue();
+            if (value != null) {
+                if (value instanceof String) {
+                    //清空值前后空格
+                    jsonObject.put(next.getKey(), ((String) value).trim());
+                } else if (value instanceof JSONObject) {
+                    jsonTrim((JSONObject) value);
+                } else if (value instanceof JSONArray) {
+                    jsonTrimArray((JSONArray) value);
+                }
+            }
+        }
+
+        return jsonObject;
+    }
+
+    /**
+     * 清空JSONArray 值前后空格
+     * @param array
+     */
+    private static void jsonTrimArray(JSONArray array) {
+        if (array.size() > 0) {
+            for (int i = 0; i < array.size(); i++) {
+                Object object = array.get(i);
+                if (object != null) {
+                    if (object instanceof String) {
+                        array.set(i, ((String) object).trim());
+                    } else if (object instanceof JSONObject) {
+                        jsonTrim((JSONObject) object);
+                    } else if (object instanceof JSONArray) {
+                        jsonTrimArray((JSONArray) object);
+                    }
+                }
+            }
+        }
+    }
+}

+ 15 - 0
src/main/java/thyyxxk/webserver/utils/StringUtil.java

@@ -113,6 +113,21 @@ public class StringUtil {
         return str.toUpperCase();
     }
 
+    /**
+     * 驼峰转下划线
+     * @param str 数据
+     * @return 返回数据
+     */
+    public static String humpToUnderline(String str) {
+        String regex = "([A-Z])";
+        Matcher matcher = Pattern.compile(regex).matcher(str);
+        while (matcher.find()) {
+            String target = matcher.group();
+            str = str.replaceAll(target, "_"+target.toLowerCase());
+        }
+        return str;
+    }
+
 
     /**
      * 分割字符串,如果开始位置大于字符串长度,返回空