|
|
@@ -36,15 +36,14 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
public class RationalUseServer {
|
|
|
-
|
|
|
private final RationalUseDao dao;
|
|
|
private final RationalUseSrvc http;
|
|
|
- private final YiZhuLuRuDao yiZhuLuRuDao;
|
|
|
+ private final YiZhuLuRuDao orderDao;
|
|
|
|
|
|
- public RationalUseServer(RationalUseDao dao, RationalUseSrvc http, YiZhuLuRuDao yiZhuLuRuDao) {
|
|
|
+ public RationalUseServer(RationalUseDao dao, RationalUseSrvc http, YiZhuLuRuDao orderDao) {
|
|
|
this.dao = dao;
|
|
|
this.http = http;
|
|
|
- this.yiZhuLuRuDao = yiZhuLuRuDao;
|
|
|
+ this.orderDao = orderDao;
|
|
|
}
|
|
|
|
|
|
public ResultVo<JSONObject> rationalUseOfMedicine(String patNo, Integer times) {
|
|
|
@@ -56,8 +55,9 @@ public class RationalUseServer {
|
|
|
.eq("a.enter_oper", TokenUtil.getTokenUserId())
|
|
|
.eq("isnull(a.self_buy,'0')", "0")
|
|
|
.ne("a.serial", "00");
|
|
|
- XinZhenYiZhu patInfo = yiZhuLuRuDao.huoQuHuanZheXinXi(patNo, times);
|
|
|
- patInfo.setList(yiZhuLuRuDao.huoQuYiZhuShuJu(qw));
|
|
|
+ XinZhenYiZhu patInfo = orderDao.queryPatientInfo(patNo, times);
|
|
|
+ // 获取医嘱列表
|
|
|
+ patInfo.setList(orderDao.selectOrderNo(qw));
|
|
|
JSONObject js = verify(patInfo);
|
|
|
return ResultVoUtil.success(js);
|
|
|
}
|
|
|
@@ -75,75 +75,40 @@ public class RationalUseServer {
|
|
|
public JSONObject verify(XinZhenYiZhu param) {
|
|
|
String userCode = TokenUtil.getTokenUserId();
|
|
|
// 医生信息
|
|
|
- Map<String, String> doctMap = yiShenXinXi(userCode);
|
|
|
+ Map<String, String> doctMap = doctorInfo(userCode);
|
|
|
String baseXml = doctMap.get("baseXml");
|
|
|
- String doct = doctMap.get("doct");
|
|
|
+ String doctXml = doctMap.get("doct");
|
|
|
List<XinZhenYzActOrder> yp = new ArrayList<>();
|
|
|
QueryWrapper<?> qw = new QueryWrapper<>();
|
|
|
- List<String> yaoPinBianMa = new ArrayList<>();
|
|
|
+ List<String> drugList = new ArrayList<>();
|
|
|
for (XinZhenYzActOrder item : param.getList()) {
|
|
|
if (StringUtil.notBlank(item.getSerial())) {
|
|
|
if (!"00".equals(item.getSerial())) {
|
|
|
yp.add(item);
|
|
|
String key = item.getOrderCode().trim() + item.getSerial().trim();
|
|
|
- if (!yaoPinBianMa.contains(key)) {
|
|
|
- yaoPinBianMa.add(key);
|
|
|
+ if (!drugList.contains(key)) {
|
|
|
+ drugList.add(key);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (ListUtil.isBlank(yaoPinBianMa)) {
|
|
|
+ if (ListUtil.isBlank(drugList)) {
|
|
|
return new JSONObject();
|
|
|
}
|
|
|
- qw.in("rtrim(code) + rtrim(serial)", yaoPinBianMa);
|
|
|
- Map<String, YaoPin> yaoPinMap = dao.yaoPingXinXi(qw).stream().collect(
|
|
|
+ qw.in("rtrim(code) + rtrim(serial)", drugList);
|
|
|
+ Map<String, YaoPin> drugMap = dao.selectDrug(qw).stream().collect(
|
|
|
Collectors.toMap(YaoPin::getId, a -> a, (k1, k2) -> k1)
|
|
|
);
|
|
|
|
|
|
- String detailsXml = yaoPinXinXi(param.getInpatientNo(), param.getAdmissTimes(), yp, doct, yaoPinMap);
|
|
|
+ String detailsXml = drugInfoFunc(param.getInpatientNo(), param.getAdmissTimes(), yp, doctXml, drugMap);
|
|
|
String js = String.format("{\"BaseXml\": \"%s\", \"DetailsXml\" : \"%s\"}", baseXml, detailsXml);
|
|
|
return http.rationalUse(js);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 解析数据
|
|
|
- *
|
|
|
- * @param json
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Map<String, List<String>> parseTheData(JSONObject json) {
|
|
|
- Map<String, List<String>> map = new HashMap<>();
|
|
|
- try {
|
|
|
- if (json.getInteger("result_lv") > 2) {
|
|
|
- JSONArray data = json.getJSONObject("result_xml").getJSONObject("ui_results_xml").getJSONObject("result_data").getJSONArray("result");
|
|
|
- for (int i = 0; i < data.size(); i++) {
|
|
|
- JSONObject item = data.getJSONObject(i);
|
|
|
- String[] orderNos = item.getString("oeridid").split("、");
|
|
|
- List<String> errorMsg = new ArrayList<>();
|
|
|
- errorMsg.add(item.getString("result_title"));
|
|
|
- errorMsg.add(item.getString("title"));
|
|
|
- errorMsg.add(item.getString("detail"));
|
|
|
- for (String str : orderNos) {
|
|
|
- if (map.containsKey(str)) {
|
|
|
- map.get(str).addAll(errorMsg);
|
|
|
- } else {
|
|
|
- map.put(str, errorMsg);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return map;
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- return map;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public Map<String, String> yiShenXinXi(String code) {
|
|
|
- Map<String, String> yiShenXinXi = dao.yiShenXinXi(code);
|
|
|
- if (yiShenXinXi == null || yiShenXinXi.isEmpty()) {
|
|
|
- yiShenXinXi = new HashMap<>(Capacity.TWO);
|
|
|
+ public Map<String, String> doctorInfo(String code) {
|
|
|
+ Map<String, String> doctorInfo = dao.yiShenXinXi(code);
|
|
|
+ if (doctorInfo == null || doctorInfo.isEmpty()) {
|
|
|
+ doctorInfo = new HashMap<>(Capacity.TWO);
|
|
|
}
|
|
|
|
|
|
Map<String, String> map = new HashMap<>(Capacity.TWO);
|
|
|
@@ -152,20 +117,20 @@ public class RationalUseServer {
|
|
|
"<source>HIS</source>" +
|
|
|
"<hosp_code>H43010500370</hosp_code>" +
|
|
|
"<hosp_name>长沙泰和医院</hosp_name>" +
|
|
|
- "<dept_code>" + nullToBlank(yiShenXinXi.get("dept_code")) + "</dept_code>" +
|
|
|
- "<dept_name>" + nullToBlank(yiShenXinXi.get("dept_name")) + "</dept_name>" +
|
|
|
+ "<dept_code>" + nullToBlank(doctorInfo.get("dept_code")) + "</dept_code>" +
|
|
|
+ "<dept_name>" + nullToBlank(doctorInfo.get("dept_name")) + "</dept_name>" +
|
|
|
"<doct>" +
|
|
|
- "<code>" + nullToBlank(yiShenXinXi.get("code")) + "</code>" +
|
|
|
- "<name>" + nullToBlank(yiShenXinXi.get("name")) + "</name>" +
|
|
|
- "<type>" + nullToBlank(yiShenXinXi.get("type")) + "</type>" +
|
|
|
- "<type_name>" + nullToBlank(yiShenXinXi.get("type_name")) + "</type_name>" +
|
|
|
+ "<code>" + nullToBlank(doctorInfo.get("code")) + "</code>" +
|
|
|
+ "<name>" + nullToBlank(doctorInfo.get("name")) + "</name>" +
|
|
|
+ "<type>" + nullToBlank(doctorInfo.get("type")) + "</type>" +
|
|
|
+ "<type_name>" + nullToBlank(doctorInfo.get("type_name")) + "</type_name>" +
|
|
|
"</doct>" +
|
|
|
"</base_xml>";
|
|
|
map.put("baseXml", baseXml);
|
|
|
- String sb = "<dept_code>" + nullToBlank(yiShenXinXi.get("dept_code")) + "</dept_code>" +
|
|
|
- "<dept_name>" + nullToBlank(yiShenXinXi.get("dept_name")) + "</dept_name>" +
|
|
|
- "<doct_code>" + nullToBlank(yiShenXinXi.get("code")) + "</doct_code>" +
|
|
|
- "<doct_name>" + nullToBlank(yiShenXinXi.get("name")) + "</doct_name>";
|
|
|
+ String sb = "<dept_code>" + nullToBlank(doctorInfo.get("dept_code")) + "</dept_code>" +
|
|
|
+ "<dept_name>" + nullToBlank(doctorInfo.get("dept_name")) + "</dept_name>" +
|
|
|
+ "<doct_code>" + nullToBlank(doctorInfo.get("code")) + "</doct_code>" +
|
|
|
+ "<doct_name>" + nullToBlank(doctorInfo.get("name")) + "</doct_name>";
|
|
|
map.put("doct", sb);
|
|
|
return map;
|
|
|
}
|
|
|
@@ -177,18 +142,26 @@ public class RationalUseServer {
|
|
|
return str.trim();
|
|
|
}
|
|
|
|
|
|
- public String yaoPinXinXi(String patNo,
|
|
|
- Integer times,
|
|
|
- List<XinZhenYzActOrder> yaoPinShuZu,
|
|
|
- String doct,
|
|
|
- Map<String, YaoPin> yaoPinMap) {
|
|
|
- log.info("数据:{}", JSON.toJSONString(yaoPinShuZu));
|
|
|
+ /**
|
|
|
+ * @param patNo 住院号
|
|
|
+ * @param times 住院次数
|
|
|
+ * @param drugData 需要审核的药品
|
|
|
+ * @param doct 文档节点
|
|
|
+ * @param drugMap 药品的map用 编码和规格做key
|
|
|
+ * @return 返回节点
|
|
|
+ */
|
|
|
+ public String drugInfoFunc(String patNo,
|
|
|
+ Integer times,
|
|
|
+ List<XinZhenYzActOrder> drugData,
|
|
|
+ String doct,
|
|
|
+ Map<String, YaoPin> drugMap) {
|
|
|
+ log.info("数据:{}", JSON.toJSONString(drugData));
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
RationalUsePatient patient = dao.huanZheXinXi(patNo, times);
|
|
|
if (patient == null) {
|
|
|
throw new BizException(ExceptionEnum.LOGICAL_ERROR, "没有找到对应患者的信息。");
|
|
|
}
|
|
|
- XinZhenYiZhu patient1 = yiZhuLuRuDao.huoQuHuanZheXinXi(patNo, times);
|
|
|
+ XinZhenYiZhu patientInfo = orderDao.queryPatientInfo(patNo, times);
|
|
|
// 中西药处方/医嘱类型标识
|
|
|
// 就诊类型
|
|
|
// 就诊号
|
|
|
@@ -203,7 +176,7 @@ public class RationalUseServer {
|
|
|
// 就诊号
|
|
|
.append("<treat_code>").append(patNo).append("_").append(times).append(DateUtil.formatDatetime(new Date(), "YYYYMMDD")).append("</treat_code>")
|
|
|
.append("<is_repeat>").append("1").append("</is_repeat>")
|
|
|
- .append("<bed_no>").append(nullToBlank(patient1.getBedNo())).append("</bed_no>")
|
|
|
+ .append("<bed_no>").append(nullToBlank(patientInfo.getBedNo())).append("</bed_no>")
|
|
|
.append("<patient>")
|
|
|
.append("<pati_id>").append(patNo).append("_").append(times).append("</pati_id>")
|
|
|
.append("<name>").append(nullToBlank(patient.getName())).append("</name>")
|
|
|
@@ -226,13 +199,13 @@ public class RationalUseServer {
|
|
|
sb.append("</allergic_data>");
|
|
|
// 皮试节点,可循环
|
|
|
sb.append("<skintest_data>");
|
|
|
- List<XunHuanJieDian> piShiShuZu = new ArrayList<>();
|
|
|
- if (ListUtil.isBlank(piShiShuZu)) {
|
|
|
- XunHuanJieDian piShi = new XunHuanJieDian();
|
|
|
- piShi.setCode("").setName("").setResult("");
|
|
|
- piShiShuZu.add(piShi);
|
|
|
+ List<XunHuanJieDian> skinTestData = new ArrayList<>();
|
|
|
+ if (ListUtil.isBlank(skinTestData)) {
|
|
|
+ XunHuanJieDian skinTest = new XunHuanJieDian();
|
|
|
+ skinTest.setCode("").setName("").setResult("");
|
|
|
+ skinTestData.add(skinTest);
|
|
|
}
|
|
|
- for (XunHuanJieDian item : piShiShuZu) {
|
|
|
+ for (XunHuanJieDian item : skinTestData) {
|
|
|
sb.append("<skintest>")
|
|
|
.append("<name>").append(nullToBlank(item.getName())).append("</name>")
|
|
|
.append("<code>").append(nullToBlank(item.getCode())).append("</code>")
|
|
|
@@ -242,7 +215,7 @@ public class RationalUseServer {
|
|
|
sb.append("</skintest_data>");
|
|
|
// 诊断
|
|
|
sb.append("<diagnose_data>");
|
|
|
- List<XunHuanJieDian> zhenDuanShuJu = new ArrayList<>();
|
|
|
+ List<XunHuanJieDian> diagnosticData = new ArrayList<>();
|
|
|
JSONObject medicalRecordDiagnosticData = JSONObject.parseObject(dao.medicalRecordDiagnosticData(patNo, times));
|
|
|
if (medicalRecordDiagnosticData != null) {
|
|
|
JSONArray arr = medicalRecordDiagnosticData.getJSONArray("入院诊断");
|
|
|
@@ -253,13 +226,13 @@ public class RationalUseServer {
|
|
|
temp.setType("0");
|
|
|
temp.setCode(item.getString("code"));
|
|
|
temp.setName(item.getString("name"));
|
|
|
- zhenDuanShuJu.add(temp);
|
|
|
+ diagnosticData.add(temp);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 诊断节点
|
|
|
- xunHuanJieDian(sb, zhenDuanShuJu, "diagnose");
|
|
|
+ xunHuanJieDian(sb, diagnosticData, "diagnose");
|
|
|
sb.append("</diagnose_data>")
|
|
|
.append("</patient>");
|
|
|
|
|
|
@@ -273,8 +246,8 @@ public class RationalUseServer {
|
|
|
.append("<pres_time>").append(DateUtil.formatDatetime(new Date())).append("</pres_time>")
|
|
|
// 药品信息节点,可循环
|
|
|
.append("<medicine_data>");
|
|
|
- for (XinZhenYzActOrder item : yaoPinShuZu) {
|
|
|
- YaoPin yp = yaoPinMap.get(item.getOrderCode().trim() + item.getSerial().trim());
|
|
|
+ for (XinZhenYzActOrder item : drugData) {
|
|
|
+ YaoPin yp = drugMap.get(item.getOrderCode().trim() + item.getSerial().trim());
|
|
|
if (null == yp) {
|
|
|
yp = new YaoPin();
|
|
|
yp.setPackRetprice(BigDecimal.valueOf(1));
|