package thyyxxk.webserver.service.heliyongyao; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import thyyxxk.webserver.config.exception.BizException; import thyyxxk.webserver.config.exception.ExceptionEnum; import thyyxxk.webserver.constants.Capacity; import thyyxxk.webserver.dao.his.heliyongyao.RationalUseDao; import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao; import thyyxxk.webserver.entity.ResultVo; import thyyxxk.webserver.entity.heliyongyao.RationalUsePatient; import thyyxxk.webserver.entity.heliyongyao.XunHuanJieDian; import thyyxxk.webserver.entity.heliyongyao.YaoPin; import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.XinZhenYiZhu; import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.XinZhenYzActOrder; import thyyxxk.webserver.service.PublicServer; import thyyxxk.webserver.service.externalhttp.RationalUseSrvc; import thyyxxk.webserver.utils.*; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** *

* 描述: 合理用药 *

* * @author xc * @date 2022-03-29 11:27 */ @Service @Slf4j public class RationalUseServer { private final RationalUseDao dao; private final RationalUseSrvc http; private final YiZhuLuRuDao yiZhuLuRuDao; private final PublicServer publicServer; public RationalUseServer(RationalUseDao dao, RationalUseSrvc http, YiZhuLuRuDao yiZhuLuRuDao, PublicServer publicServer) { this.dao = dao; this.http = http; this.yiZhuLuRuDao = yiZhuLuRuDao; this.publicServer = publicServer; } public ResultVo jiaoYan(XinZhenYiZhu param) { log.info("数据:{}", JSON.toJSONString(param)); String userCode = "99999".equals(TokenUtil.getTokenUserId()) ? param.getUserCode() : TokenUtil.getTokenUserId(); // 医生信息 Map doctMap = yiShenXinXi(userCode); String baseXml = doctMap.get("baseXml"); String doct = doctMap.get("doct"); List yp = new ArrayList<>(); QueryWrapper qw = new QueryWrapper<>(); List yaoPinBianMa = 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); } } } } qw.in("rtrim(code) + rtrim(serial)", yaoPinBianMa); Map yaoPinMap = dao.yaoPingXinXi(qw).stream().collect( Collectors.toMap(YaoPin::getId, a -> a, (k1, k2) -> k1) ); String detailsXml = yaoPinXinXi(param.getInpatientNo(), param.getAdmissTimes(), param.getCfType(), yp, doct, yaoPinMap); String js = String.format("{\"BaseXml\": \"%s\", \"DetailsXml\" : \"%s\"}", baseXml, detailsXml); log.info("上传数据:{} ", js); try { JSONObject fanHuiXinXi = http.rationalUse(js); log.info("返回的数据:{}", fanHuiXinXi); return ResultVoUtil.success(fanHuiXinXi); } catch (Exception e) { e.printStackTrace(); return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "网络错误"); } } public Map yiShenXinXi(String code) { Map yiShenXinXi = dao.yiShenXinXi(code); if (yiShenXinXi == null || yiShenXinXi.isEmpty()) { yiShenXinXi = new HashMap<>(Capacity.TWO); } Map map = new HashMap<>(Capacity.TWO); String baseXml = "" + "HIS" + "H43010500370" + "长沙泰和医院" + "" + nullToBlank(yiShenXinXi.get("dept_code")) + "" + "" + nullToBlank(yiShenXinXi.get("dept_name")) + "" + "" + "" + nullToBlank(yiShenXinXi.get("code")) + "" + "" + nullToBlank(yiShenXinXi.get("name")) + "" + "" + nullToBlank(yiShenXinXi.get("type")) + "" + "" + nullToBlank(yiShenXinXi.get("type_name")) + "" + "" + ""; map.put("baseXml", baseXml); String sb = "" + nullToBlank(yiShenXinXi.get("dept_code")) + "" + "" + nullToBlank(yiShenXinXi.get("dept_name")) + "" + "" + nullToBlank(yiShenXinXi.get("code")) + "" + "" + nullToBlank(yiShenXinXi.get("name")) + ""; map.put("doct", sb); return map; } public String nullToBlank(String str) { if (StringUtil.isBlank(str)) { return ""; } return str.trim(); } public String yaoPinXinXi(String patNo, Integer times, String cfType, List yaoPinShuZu, String doct, Map yaoPinMap) { log.info("数据:{}", JSON.toJSONString(yaoPinShuZu)); 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); // 中西药处方/医嘱类型标识 // 就诊类型 // 就诊号 sb.append("") .append("H43010500370") .append("").append(DateUtil.formatDatetime(new Date())).append("") .append("ip") // 中西药处方/医嘱类型标识 .append("").append(cfType).append("") // 就诊类型 .append("").append("400").append("") // 就诊号 .append("").append(patNo).append("_").append(times).append(DateUtil.formatDatetime(new Date(), "YYYYMMDD")).append("") .append("").append("1").append("") .append("").append(nullToBlank(patient1.getBedNo())).append("") .append("") .append("").append(patNo).append("_").append(times).append("") .append("").append(nullToBlank(patient.getName())).append("") .append("").append(PublicServer.getInfantFlag(patNo)).append("") .append("").append(nullToBlank(patient.getBirth())).append("") .append("").append(nullToBlank(patient.getSex())).append("") .append("").append("").append("") .append("").append("").append("") .append("").append(patient.getIdCard()).append("") .append("").append("").append("") .append("").append("").append("") .append("").append("").append("") .append("").append("").append("") .append("").append("").append(""); // 过敏节点,可循环 sb.append(""); List guoMinShuZu = dao.guoMin(patNo); xunHuanJieDian(sb, guoMinShuZu, "allergic"); sb.append(""); // 皮试节点,可循环 sb.append(""); List piShiShuZu = new ArrayList<>(); if (ListUtil.isBlank(piShiShuZu)) { XunHuanJieDian piShi = new XunHuanJieDian(); piShi.setCode("").setName("").setResult(""); piShiShuZu.add(piShi); } for (XunHuanJieDian item : piShiShuZu) { sb.append("") .append("").append(nullToBlank(item.getName())).append("") .append("").append(nullToBlank(item.getCode())).append("") .append("").append(nullToBlank(item.getResult())).append("") .append(""); } sb.append(""); // 诊断 sb.append(""); List zhenDuanShuJu = dao.zhenDuan(patNo, times); // 诊断节点 xunHuanJieDian(sb, zhenDuanShuJu, "diagnose"); sb.append("") .append(""); // 处方信息 sb.append("") .append("") .append("").append("0").append("") .append("").append("").append("") .append("").append("1").append("") .append("").append("T").append("") .append("").append(DateUtil.formatDatetime(new Date())).append("") // 药品信息节点,可循环 .append(""); for (XinZhenYzActOrder item : yaoPinShuZu) { YaoPin yp = yaoPinMap.get(item.getOrderCode().trim() + item.getSerial().trim()); if (null == yp) { yp = new YaoPin(); yp.setPackRetprice(BigDecimal.valueOf(1)); } item.setRationalDrugUseId(SnowFlakeId.instance().nextId()); // 因为我要入库才能生成医嘱号所以这里用雪花算法 sb.append("") .append("").append("0").append("") // 因为我要入库才能生成医嘱号所以这里用雪花算法 .append("").append(item.getRationalDrugUseId()).append("") .append("").append("1").append("") .append("").append("ONCE".equals(item.getFrequCode()) ? "T" : "L").append("") .append("").append(DateUtil.formatDatetime(item.getOrderTime())).append("") .append("").append(item.getOrderName()).append("") .append("").append(nullToBlank(item.getOrderCode() + "_" + item.getSerial())).append("") .append("").append(nullToBlank(yp.getNationalCode())).append("") .append("").append(nullToBlank(yp.getPzwh())).append("") .append("").append(nullToBlank(item.getDrugSpecification())).append("") .append("").append(nullToBlank(item.getDrugQuan() + item.getMiniUnitName())).append("") .append("").append(publicServer.getGroupNo()).append("") .append("").append("").append("") .append("").append(nullToBlank(item.getDoseUnitName())).append("") .append("").append(item.getDose()).append("") .append("").append("").append("") .append("").append("").append("") .append("").append("ZY").append(nullToBlank(item.getFrequCode())).append("") .append("").append("ZY").append(item.getSupplyCode()).append("") .append("").append(DateUtil.formatDatetime(item.getStartTime())).append("") .append("").append(DateUtil.formatDatetime(item.getEndTime())).append("") .append("").append("").append("") .append(doct) .append("").append("2").append("") .append("").append(yp.getPackRetprice().multiply(item.getDrugQuan())).append("") .append(""); } sb.append(""); return sb.toString(); } public void xunHuanJieDian(StringBuilder sb, List jieDian, String name) { if (ListUtil.isBlank(jieDian)) { XunHuanJieDian zhenDuan = new XunHuanJieDian(); zhenDuan.setType("").setCode("").setName(""); jieDian.add(zhenDuan); } for (XunHuanJieDian item : jieDian) { sb.append("<").append(name).append(">"). append("").append(nullToBlank(item.getType())).append("") .append("").append(nullToBlank(item.getName())).append("") .append("").append(nullToBlank(item.getCode())).append("") .append(""); } } }