DESKTOP-0GD05B0\Administrator 2 лет назад
Родитель
Сommit
41724e637d

+ 93 - 0
src/main/java/thyyxxk/webserver/entity/drg/BaseInfo.java

@@ -0,0 +1,93 @@
+package thyyxxk.webserver.entity.drg;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+public class BaseInfo {
+
+    /**
+     * 就诊id
+     * 说明 字符型
+     */
+    @JSONField(name = "visit_id")
+    private String visitId;
+
+    /**
+     * 性别
+     * 说明 字符型
+     */
+    @JSONField(name = "gend")
+    private String gend;
+
+    /**
+     * 出生日期
+     * 说明 日期格式
+     */
+    @JSONField(name = "brdy")
+    private String brdy;
+
+    /**
+     * 年龄
+     * 说明 数值型
+     */
+    @JSONField(name = "age")
+    private String age;
+
+    /**
+     * (年龄不足1周岁)年龄
+     * 说明 数值型
+     */
+    @JSONField(name = "nwb_age")
+    private String nwbAge;
+
+    /**
+     * 新生儿出院体重
+     * 说明 数值型
+     */
+    @JSONField(name = "nwb_bir_wt")
+    private String nwbBirWt;
+
+    /**
+     * 新生儿入院体重
+     * 说明 数值型
+     */
+    @JSONField(name = "nwb_adm_wt")
+    private String nwbAdmWt;
+
+    /**
+     * 入院时间
+     * 说明 日期格式
+     */
+    @JSONField(name = "adm_time")
+    private Date admTime;
+
+    /**
+     * 实际住院天数
+     * 说明 字符型
+     */
+    @JSONField(name = "act_ipt_days")
+    private String actIptDays;
+
+    /**
+     * 总费用
+     * 说明 数值型
+     */
+    @JSONField(name = "total_fee")
+    private String totalFee;
+
+    /**
+     * 统筹金额
+     * 说明 数值型
+     */
+    @JSONField(name = "cdntn_pay")
+    private String cdntnPay;
+
+    @JSONField(name = "ill_pay")
+    private String illPay;
+
+}

+ 45 - 0
src/main/java/thyyxxk/webserver/entity/drg/DiseInfoList.java

@@ -0,0 +1,45 @@
+package thyyxxk.webserver.entity.drg;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+public class DiseInfoList {
+    /**
+     * 就诊id
+     * 说明 字符型
+     */
+    @JSONField(name = "visit_id")
+    private String visitId;
+
+    /**
+     * 诊断代码
+     * 说明 字符型
+     */
+    @JSONField(name = "diag_code")
+    private String diagCode;
+
+    /**
+     * 诊断名称
+     * 说明 字符型
+     */
+    @JSONField(name = "diag_name")
+    private String diagName;
+
+    /**
+     * 主诊断标志
+     * 说明 字符型
+     */
+    @JSONField(name = "maindiag_flag")
+    private String maindiagFlag;
+
+    /**
+     * 诊断排序
+     * 说明 字符型
+     */
+    @JSONField(name = "sort_no")
+    private String sortNo;
+
+}

+ 48 - 0
src/main/java/thyyxxk/webserver/entity/drg/OprtInfoList.java

@@ -0,0 +1,48 @@
+package thyyxxk.webserver.entity.drg;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.AssertTrue;
+
+@Data
+@Accessors(chain = true)
+public class OprtInfoList {
+    /**
+     * 就诊id
+     * 说明 字符型
+     */
+    @JSONField(name = "visit_id")
+    private String visitId;
+
+    /**
+     * 手术操作类别
+     * 说明 字符型
+     */
+    @JSONField(name = "oprn_oprt_type")
+    private String oprnOprtType;
+
+    /**
+     * 手术操作代码
+     * 说明 字符型
+     */
+    @JSONField(name = "oprn_oprt_code")
+    private String oprnOprtCode;
+
+    /**
+     * 手术操作名称
+     * 说明 字符型
+     */
+    @JSONField(name = "oprn_oprt_name")
+    private String oprnOprtName;
+
+    /**
+     * 手术排序
+     * 说明 字符型
+     */
+    @JSONField(name = "sort_no")
+    private String sortNo;
+
+
+}

+ 30 - 0
src/main/java/thyyxxk/webserver/entity/inpatient/patient/Patient.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.entity.inpatient.patient;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -128,6 +129,35 @@ public class Patient {
     private String expContent;
     private Boolean deathFlag;
 
+    private JSONObject drgGrouping;
+
+
+    /**
+     * DRG权重
+     */
+    private String groupInfoWeight;
+
+    /**
+     * 分组结果名称
+     */
+    private String groupInfoName;
+
+    /**
+     * 倍率(DRG)
+     */
+    private String groupInfoBl;
+
+    /**
+     * 盈亏额
+     */
+    private String groupInfoProfit;
+
+    /**
+     * 标杆费用
+     */
+    private String groupInfoFeeStand;
+
+
     public String getSexName() {
         if (sex == null) {
             return "";

+ 5 - 1
src/main/java/thyyxxk/webserver/service/externalhttp/DrgWebServices.java

@@ -13,11 +13,15 @@ import thyyxxk.webserver.entity.vo.DrgGroupTestVO;
 public interface DrgWebServices {
 
     @Post(url = "http://172.16.32.126:8080/drg_web/localHelp/drg_dagns/list.action")
-    String localHelpDrgDagns(@JSONBody  DrgGroupTestVO drgGroupTestVO);
+    String localHelpDrgDagns(@JSONBody DrgGroupTestVO drgGroupTestVO);
 
     @Post(url = "http://172.16.32.126:8080/drg_web/drgGroupThird/V2/setListDrg.action")
     JSONObject drgQuality(@JSONBody JSONObject obj);
 
     @Post(url = "http://172.16.32.126:8082/etlClient/callHisData.action")
     JSONObject etlClient(@JSONBody JSONObject obj);
+
+    @Post(url = "http://172.16.32.126:8080/drg_web/drgGroupThird/getAllDrgResults.action")
+    JSONObject getDrgCaseQualityControlGroup(@JSONBody JSONObject obj);
+
 }

+ 110 - 5
src/main/java/thyyxxk/webserver/service/inpatient/PatientService.java

@@ -1,5 +1,7 @@
 package thyyxxk.webserver.service.inpatient;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
@@ -14,18 +16,20 @@ import thyyxxk.webserver.dao.his.inpatient.Routines;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.dictionary.CodeName;
+import thyyxxk.webserver.entity.drg.BaseInfo;
+import thyyxxk.webserver.entity.drg.DiseInfoList;
+import thyyxxk.webserver.entity.drg.OprtInfoList;
 import thyyxxk.webserver.entity.inpatient.dismiss.ZyDisYbDiag;
 import thyyxxk.webserver.entity.inpatient.patient.*;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.HuanZheFeiYong;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.XinZhenYiZhu;
+import thyyxxk.webserver.service.externalhttp.DrgWebServices;
 import thyyxxk.webserver.service.redislike.RedisLikeService;
+import thyyxxk.webserver.service.zhuyuanyisheng.EmrServer;
 import thyyxxk.webserver.utils.*;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author dj
@@ -38,13 +42,18 @@ public class PatientService {
     private final Routines routines;
     private final YiZhuLuRuDao yiZhuLuRuDao;
     private final RedisLikeService redis;
+    private final EmrServer emrServer;
+    private final DrgWebServices drgHttp;
+
 
     @Autowired
-    public PatientService(PatientDao dao, Routines routines, YiZhuLuRuDao yiZhuLuRuDao, RedisLikeService redis) {
+    public PatientService(PatientDao dao, Routines routines, YiZhuLuRuDao yiZhuLuRuDao, RedisLikeService redis, EmrServer emrServer, DrgWebServices drgHttp) {
         this.dao = dao;
         this.routines = routines;
         this.yiZhuLuRuDao = yiZhuLuRuDao;
         this.redis = redis;
+        this.emrServer = emrServer;
+        this.drgHttp = drgHttp;
     }
 
     public ResultVo<List<Overview>> getOverView(String ward, Boolean viewBabies) {
@@ -62,9 +71,105 @@ public class PatientService {
             return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "没有住院号【" + inpatientNo + "】的在院业务!");
         }
         setExpenseInformation(data);
+        // todo 要查看患者预分组
+        setDrgPatInfo(data);
         return ResultVoUtil.success(data);
     }
 
+    private void setDrgPatInfo(Patient p) {
+        BaseInfo bf = new BaseInfo();
+        bf.setVisitId(p.getInpatientNo() + "_" + p.getAdmissTimes() + "_" + p.getLedgerSn())
+                .setGend(p.getSex().toString())
+                .setBrdy(p.getBirthDate())
+                .setAge(p.getAge().toString())
+                .setNwbAge("")
+                .setNwbBirWt("")
+                .setNwbAdmWt("")
+                .setAdmTime(p.getAdmissDate())
+                .setActIptDays(String.valueOf(DateUtil.daysBetween(new Date(), p.getAdmissDate())))
+                .setTotalFee(p.getTotalCharge())
+                .setCdntnPay("")
+                .setIllPay("");
+        JSONObject upload = new JSONObject();
+        upload.put("base_info", bf);
+        upload.put("dise_info_list", setDrgDisList(p));
+        upload.put("oprt_info_list", setOprtInfoList(p));
+        JSONObject res = drgHttp.getDrgCaseQualityControlGroup(upload);
+        if (res.getInteger("code") == 0) {
+            if (res.getJSONObject("result") != null) {
+                JSONArray groupInfo = res.getJSONObject("result").getJSONArray("group_info");
+                if (groupInfo != null) {
+                    JSONObject item = groupInfo.getJSONObject(0);
+                    p.setGroupInfoName(item.getString("name"));
+                    p.setGroupInfoWeight(item.getString("weight"));
+                    p.setGroupInfoBl(item.getString("bl"));
+                    p.setGroupInfoProfit(item.getString("profit"));
+                    p.setGroupInfoFeeStand(item.getString("fee_stand"));
+
+                }
+            }
+        }
+
+        log.info("上传数据:{}", upload);
+        log.info("res:{}", res);
+
+    }
+
+    private List<DiseInfoList> setDrgDisList(Patient p) {
+        List<DiseInfoList> list = new ArrayList<>();
+        JSONObject emrJs = emrServer.getEmrPatientData(p.getInpatientNo(), p.getAdmissTimes());
+        String id = p.getInpatientNo() + "_" + p.getAdmissTimes() + "_" + p.getLedgerSn();
+        try {
+            JSONArray disList = emrJs.getJSONArray("入院诊断");
+            for (int i = 0; i < disList.size(); i++) {
+                DiseInfoList temp = new DiseInfoList();
+                JSONObject item = disList.getJSONObject(i);
+                try {
+                    temp.setVisitId(id)
+                            .setDiagCode(item.getString("code"))
+                            .setDiagName(item.getString("name"))
+                            .setMaindiagFlag(i == 0 ? "1" : "0")
+                            .setSortNo(String.valueOf(i + 1));
+                    list.add(temp);
+                } catch (Exception ignored) {
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return list;
+    }
+
+    private List<OprtInfoList> setOprtInfoList(Patient p) {
+        String id = p.getInpatientNo() + "_" + p.getAdmissTimes() + "_" + p.getLedgerSn();
+        List<OprtInfoList> list = new ArrayList<>();
+        JSONArray emrList = emrServer.getPatientSurgery(p.getInpatientNo(), p.getAdmissTimes());
+        for (int i = 0; i < emrList.size(); i++) {
+            JSONObject item = emrList.getJSONObject(i);
+            JSONObject oprtName;
+            try {
+                oprtName = item.getJSONObject("手术名称");
+            } catch (Exception e) {
+                continue;
+            }
+            JSONArray oprtNameVals = oprtName.getJSONArray("value");
+            if (null == oprtNameVals) {
+                continue;
+            }
+            for (int j = 0; j < oprtNameVals.size(); j++) {
+                JSONObject opList = oprtNameVals.getJSONObject(j);
+                OprtInfoList op = new OprtInfoList();
+                op.setVisitId(id)
+                        .setOprnOprtType((i + j) == 0 ? "1" : "2")
+                        .setOprnOprtCode(opList.getString("code"))
+                        .setOprnOprtName(opList.getString("name"))
+                        .setSortNo(String.valueOf((i + j) + 1));
+                list.add(op);
+            }
+
+        }
+        return list;
+    }
+
 
     public ResultVo<Patient> getDisPatient(String inpatientNo, Integer times) {
         Patient data = dao.getPatientInfo(inpatientNo, "zy_inactpatient", times);

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

@@ -434,6 +434,9 @@ public class EmrServer {
         for (int i = 0; i < operation.size(); i++) {
             JSONObject item = operation.getJSONObject(i);
             JSONArray list = item.getJSONObject("手术名称").getJSONArray("value");
+            if (list == null) {
+                continue;
+            }
             for (int a = 0; a < list.size(); a++) {
                 JSONObject valueList = list.getJSONObject(a);
                 mapData.put("ssjczbm" + operationIndex, valueList.getString("code"));