|
@@ -39,6 +39,8 @@ import thyyxxk.webserver.service.casefrontsheet.CaseFrontSheetMainService;
|
|
|
import thyyxxk.webserver.service.externalhttp.DrgWebServices;
|
|
|
import thyyxxk.webserver.service.heliyongyao.RationalUseServer;
|
|
|
import thyyxxk.webserver.service.redislike.RedisLikeService;
|
|
|
+import thyyxxk.webserver.service.zhuyuanyisheng.yizhuverify.Repel;
|
|
|
+import thyyxxk.webserver.service.zhuyuanyisheng.yizhuverify.YiZhuCheckData;
|
|
|
import thyyxxk.webserver.utils.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -270,69 +272,44 @@ public class YiZhuLuRuServer {
|
|
|
if (ListUtil.isBlank(yiZhuList)) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有需要确认的医嘱.");
|
|
|
}
|
|
|
+ // 把错误的子医嘱更正回来
|
|
|
correctSubOrders(param.getList());
|
|
|
- // 药品 code
|
|
|
- Set<String> yaoPingCode = new HashSet<>();
|
|
|
- // 项目的 code
|
|
|
- Set<String> xiangMuCode = new HashSet<>();
|
|
|
-
|
|
|
- for (XinZhenYzActOrder item : yiZhuList) {
|
|
|
- if (ITEM.equals(item.getSerial())) {
|
|
|
- xiangMuCode.add(item.getOrderCode());
|
|
|
- } else {
|
|
|
- yaoPingCode.add(item.getOrderCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
String userCode = TokenUtil.getTokenUserId();
|
|
|
// 获取医生开药品的权限
|
|
|
- Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
|
|
|
XinZhenYiZhu patInfo = dao.queryPatientInfo(param.getInpatientNo(), param.getAdmissTimes());
|
|
|
- Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, patInfo.getZkWard());
|
|
|
- Map<String, List<XinZhenYzActOrder>> project = getProjectInformation(xiangMuCode);
|
|
|
|
|
|
// 是否可以确认
|
|
|
- boolean isThereAnyErrorMessage = false;
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
List<BigDecimal> confirmOrderInformation = new ArrayList<>();
|
|
|
|
|
|
- Date excludeOrders = null;
|
|
|
- BigDecimal orderNo = null;
|
|
|
+ YiZhuCheckData checkData = new YiZhuCheckData(dao);
|
|
|
+ checkData.init(yiZhuList, patInfo).judgeExclusion();
|
|
|
|
|
|
- for (XinZhenYzActOrder item : yiZhuList) {
|
|
|
- if (ITEM.equals(item.getSerial())) {
|
|
|
- Integer paiChiYiZhu = dao.shiFouPaiChiYiZhu(item.getOrderCode());
|
|
|
- if (excludeOrders != null) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "一次性不能确认多条全排斥医嘱。");
|
|
|
- }
|
|
|
- if (paiChiYiZhu != null && paiChiYiZhu.equals(1)) {
|
|
|
- excludeOrders = item.getStartTime();
|
|
|
- orderNo = item.getActOrderNo();
|
|
|
- }
|
|
|
- }
|
|
|
+ Map<String, Object> checkMap = checkData.startCheck((item) -> {
|
|
|
confirmOrderInformation.add(item.getActOrderNo());
|
|
|
- Map<String, Object> errorMessageMap = checkData(item, drug, project, patInfo, doctorLevel);
|
|
|
- if (!errorMessageMap.isEmpty()) {
|
|
|
- if (!isThereAnyErrorMessage && errorMessageMap.containsKey("error")) {
|
|
|
- isThereAnyErrorMessage = true;
|
|
|
- }
|
|
|
- errorMessageMap.put("data", item);
|
|
|
- map.put(item.getId(), errorMessageMap);
|
|
|
- }
|
|
|
+ });
|
|
|
+
|
|
|
+ if (checkData.multipleExclusions()) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "一次性不能确认多条全排斥医嘱。");
|
|
|
}
|
|
|
|
|
|
- if (isThereAnyErrorMessage) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改错误的医嘱", map);
|
|
|
+ if (checkData.getFailed()) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改错误的医嘱", checkMap);
|
|
|
}
|
|
|
|
|
|
- if (excludeOrders != null) {
|
|
|
- int count = dao.thereAreUnexecutedOrders(param.getInpatientNo(), param.getAdmissTimes(), orderNo);
|
|
|
+ Repel repel = checkData.getRepel();
|
|
|
+
|
|
|
+ log.info("数据:{}", JSON.toJSONString(repel));
|
|
|
+
|
|
|
+ if (repel != null) {
|
|
|
+ int count = dao.thereAreUnexecutedOrders(param.getInpatientNo(), param.getAdmissTimes(), repel.getOrderNo());
|
|
|
if (count > 0) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "有未确认和未执行的长期医嘱,无法确认全排斥医嘱,请先确认其他医嘱。");
|
|
|
}
|
|
|
- dao.stopOrder(param.getInpatientNo(), param.getAdmissTimes(), excludeOrders, userCode, orderNo);
|
|
|
+ dao.stopOrder(param.getInpatientNo(), param.getAdmissTimes(), repel.getDate(), userCode, repel.getOrderNo());
|
|
|
}
|
|
|
|
|
|
+
|
|
|
for (BigDecimal decimal : confirmOrderInformation) {
|
|
|
dao.confirmOrders(decimal, userCode, new Date());
|
|
|
}
|
|
@@ -424,25 +401,17 @@ public class YiZhuLuRuServer {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "医嘱录入人不是您,无法修改。");
|
|
|
}
|
|
|
}
|
|
|
- // 获取医生开药品的权限
|
|
|
- Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
|
|
|
XinZhenYiZhu huanZheXinXi = dao.queryPatientInfo(param.getInpatientNo(), param.getAdmissTimes());
|
|
|
XinZhenYzActOrder data = param.getData();
|
|
|
if (ITEM.equals(data.getSerial().trim())) {
|
|
|
data.setGroupNo("00");
|
|
|
}
|
|
|
- // 药品的 code
|
|
|
- Set<String> yaoPingCode = new HashSet<>();
|
|
|
- // 项目的 code
|
|
|
- Set<String> xiangMuCode = new HashSet<>();
|
|
|
- if (ITEM.equals(data.getSerial())) {
|
|
|
- xiangMuCode.add(data.getOrderCode());
|
|
|
- } else {
|
|
|
- yaoPingCode.add(data.getOrderCode().trim() + data.getSerial().trim() + data.getGroupNo().trim());
|
|
|
- }
|
|
|
- Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, huanZheXinXi.getZkWard());
|
|
|
- Map<String, List<XinZhenYzActOrder>> project = getProjectInformation(xiangMuCode);
|
|
|
- Map<String, Object> errorMessageMap = checkData(data, drug, project, huanZheXinXi, doctorLevel);
|
|
|
+
|
|
|
+ YiZhuCheckData checkData = new YiZhuCheckData(dao);
|
|
|
+
|
|
|
+ Map<String, Object> errorMessageMap = checkData.init(data, huanZheXinXi)
|
|
|
+ .startCheck(null);
|
|
|
+
|
|
|
|
|
|
if (data.getParentNo() != null) {
|
|
|
XinZhenYzActOrder parentOrder = dao.getActOrderNoOne(data.getParentNo().stripTrailingZeros().toPlainString());
|
|
@@ -455,7 +424,7 @@ public class YiZhuLuRuServer {
|
|
|
// 先删除转科在插入
|
|
|
dao.deleteTransferOrder(param.getActOrderNo());
|
|
|
|
|
|
- if (errorMessageMap.get("error") == null) {
|
|
|
+ if (checkData.getPassTheAudit()) {
|
|
|
if (ZK_CODE.equals(data.getOrderCode())) {
|
|
|
ZyOrderZk transferData = new ZyOrderZk();
|
|
|
transferData
|
|
@@ -467,7 +436,7 @@ public class YiZhuLuRuServer {
|
|
|
dao.insertDoctorSOrder(transferData);
|
|
|
}
|
|
|
// 判断是不是抗菌药物
|
|
|
- XinZhenYzActOrder kssItem = drug.get(data.getOrderCode().trim() + data.getSerial().trim() + data.getGroupNo().trim());
|
|
|
+ XinZhenYzActOrder kssItem = checkData.getDrugData(data.getOrderCode().trim() + data.getSerial().trim() + data.getGroupNo().trim());
|
|
|
if (kssItem != null && kssItem.getKjywFlag() != null && kssItem.getKjywFlag() == 1) {
|
|
|
YzActRecordKss kss = new YzActRecordKss();
|
|
|
kss.setActOrderNo(data.getActOrderNo());
|
|
@@ -487,14 +456,8 @@ public class YiZhuLuRuServer {
|
|
|
dao.howOftenTheSubPhysicianOrderIsModified(param.getData());
|
|
|
}
|
|
|
|
|
|
- if (!errorMessageMap.isEmpty()) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- errorMessageMap.put("data", data);
|
|
|
- map.put(param.getActOrderNo(), errorMessageMap);
|
|
|
-
|
|
|
- if (errorMessageMap.containsKey("error")) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改有错误的医嘱。", map);
|
|
|
- }
|
|
|
+ if (checkData.getFailed()) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改有错误的医嘱。", errorMessageMap);
|
|
|
}
|
|
|
log.info("医嘱录入日志:{}", JSON.toJSONString(param));
|
|
|
return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "添加成功.");
|
|
@@ -902,21 +865,13 @@ public class YiZhuLuRuServer {
|
|
|
* @param param 模板数据
|
|
|
* @return 返回提示信息
|
|
|
*/
|
|
|
- public ResultVo<Map<String, Object>> singleDataCheck(XinZhenYiZhu param) {
|
|
|
- // 获取医生开药品的权限
|
|
|
- Integer doctorLevel = dao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
|
|
|
- Set<String> yaoPingCode = new HashSet<>();
|
|
|
- Set<String> xiangMuCode = new HashSet<>();
|
|
|
- for (XinZhenYzActOrder item : param.getList()) {
|
|
|
- if (ITEM.equals(item.getSerial().trim())) {
|
|
|
- xiangMuCode.add(item.getOrderCode().trim());
|
|
|
- } else {
|
|
|
- yaoPingCode.add(item.getOrderCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
|
|
|
- }
|
|
|
- }
|
|
|
- Map<String, Object> errorMessage = checkData(param.getList().get(0), getDrugInformation(yaoPingCode, null), getProjectInformation(xiangMuCode), null, doctorLevel);
|
|
|
- errorMessage.put("data", param.getList().get(0));
|
|
|
- return ResultVoUtil.success(errorMessage);
|
|
|
+ public ResultVo<Object> singleDataCheck(XinZhenYiZhu param) {
|
|
|
+ param.getList().get(0).setActOrderNo(new BigDecimal(param.getList().get(0).getId()));
|
|
|
+ YiZhuCheckData checkData = new YiZhuCheckData(dao);
|
|
|
+ checkData.init(param.getList(), null);
|
|
|
+ Map<String, Object> errorMessage = checkData.startCheck(null);
|
|
|
+ Object map = errorMessage.get(param.getList().get(0).getId());
|
|
|
+ return ResultVoUtil.success(map);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -996,204 +951,6 @@ public class YiZhuLuRuServer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private Map<String, Object> checkData(XinZhenYzActOrder item,
|
|
|
- Map<String, XinZhenYzActOrder> drug,
|
|
|
- Map<String, List<XinZhenYzActOrder>> project,
|
|
|
- XinZhenYiZhu huanZheXinXi,
|
|
|
- Integer doctorLevel) {
|
|
|
- boolean strictVerification = huanZheXinXi != null;
|
|
|
- List<String> errorMessage = new ArrayList<>();
|
|
|
- List<String> warningMessage = new ArrayList<>();
|
|
|
-
|
|
|
- if (StringUtil.isBlank(item.getGroupNo())) {
|
|
|
- errorMessage.add("没有药房请重新开。");
|
|
|
- }
|
|
|
-
|
|
|
- if (redisLikeService.getDeptName(item.getExecUnit()) == null) {
|
|
|
- errorMessage.add("执行科室有误,请检查。");
|
|
|
- }
|
|
|
-
|
|
|
- if (ITEM.equals(item.getSerial())) {
|
|
|
- List<XinZhenYzActOrder> projectDetails = project.get(item.getOrderCode());
|
|
|
- // 如果这个项目下面没有费用明细,那么这就是一条口头医,口头医嘱每次只能开一个
|
|
|
- if (ListUtil.notBlank(projectDetails)) {
|
|
|
- for (XinZhenYzActOrder detailed : projectDetails) {
|
|
|
- if (detailed.getDelFlag() == 1) {
|
|
|
- errorMessage.add(String.format("项目:【%s】,已经被物价停用了", detailed.getOrderName()));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(detailed.getNationalCode())) {
|
|
|
- warningMessage.add(String.format("项目:【%s】,没有匹配医保码", detailed.getOrderName()));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- item.setDrugOcc(item.getDrugQuan());
|
|
|
- } else {
|
|
|
- if (BigUtils.bigXiaoYu(item.getDose(), 0)) {
|
|
|
- errorMessage.add(String.format("医嘱:【%s】,计量不能开负数", item.getOrderName()));
|
|
|
- }
|
|
|
-
|
|
|
- if (!groupList.contains(item.getGroupNo())) {
|
|
|
- errorMessage.add("药房错误,请重新选择药房。");
|
|
|
- }
|
|
|
- XinZhenYzActOrder detailsOfDrugs = drug.get(item.getOrderCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
|
|
|
- if (detailsOfDrugs != null) {
|
|
|
- if (StringUtil.isBlank(item.getMiniUnit())) {
|
|
|
- if (item.getSerial().equals("01")) {
|
|
|
- item.setMiniUnit(detailsOfDrugs.getMiniUnit());
|
|
|
- } else {
|
|
|
- item.setMiniUnit(detailsOfDrugs.getPackUnit());
|
|
|
- }
|
|
|
- }
|
|
|
- if (detailsOfDrugs.getDelFlag() == 1) {
|
|
|
- errorMessage.add("药品已经被停用了,请联系药剂科");
|
|
|
- }
|
|
|
- if (detailsOfDrugs.getYpLevel() > doctorLevel) {
|
|
|
- errorMessage.add("您没有开此药品的权限");
|
|
|
- }
|
|
|
-
|
|
|
- if (StringUtil.isBlank(detailsOfDrugs.getNationalCode())) {
|
|
|
- warningMessage.add("该药品没有医保编码");
|
|
|
- }
|
|
|
- if (BigUtils.bigXiaoYu(detailsOfDrugs.getStockAmount(), 10)) {
|
|
|
- warningMessage.add(String.format("该药品剩余数量为:【%s】", detailsOfDrugs.getStockAmount().stripTrailingZeros().toPlainString()));
|
|
|
- }
|
|
|
- if (BigUtils.bigDaYu(item.getDrugQuan(), detailsOfDrugs.getStockAmount())) {
|
|
|
- errorMessage.add("药品领量大于药品的库存,当前库存量" + detailsOfDrugs.getStockAmount().stripTrailingZeros().toPlainString());
|
|
|
- }
|
|
|
- if (strictVerification) {
|
|
|
- if (detailsOfDrugs.getDeptRestrictions() > 0) {
|
|
|
- errorMessage.add("该药品禁止在患者所在的科室使用。");
|
|
|
- }
|
|
|
- if (detailsOfDrugs.getVisibleFlagZy() == 1) {
|
|
|
- errorMessage.add("该药品禁止住院患者使用。");
|
|
|
- }
|
|
|
- item.setKjywFlag(detailsOfDrugs.getKjywFlag());
|
|
|
- if (detailsOfDrugs.getKjywFlag() == 1) {
|
|
|
- if (item.getYyfs() == null) {
|
|
|
- errorMessage.add("请填写抗菌药物医嘱附注信息录入");
|
|
|
- } else if (item.getYyfs() == 1 || item.getYyfs() == 2) {
|
|
|
- if (item.getSsqk() == null) {
|
|
|
- errorMessage.add("当用药方式为 1 或 2 时,手术切口和用药时间不能为空");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (item.getSupplyCode() != null && 出院带药.equals(item.getSupplyCode())) {
|
|
|
- if (!ONCE.equals(item.getFrequCode())) {
|
|
|
- errorMessage.add("出院带药不能是长期医嘱。");
|
|
|
- }
|
|
|
- // 如果是临时医嘱 开了就结束了.
|
|
|
-// if ("ONCE".equals(item.getFrequCode())) {
|
|
|
-// item.setEndTime(item.getStartTime());
|
|
|
-// }
|
|
|
-// if (dao.dischargeWithMedicationAdministration(item.getSupplyCode()) == 0) {
|
|
|
-// errorMessage.add("出院带药给药方式不能包含费用。");
|
|
|
-// }
|
|
|
-// if (item.getStartTime() == null) {
|
|
|
-// errorMessage.add("出院带药请输入开始时间。");
|
|
|
-// }
|
|
|
-// if (item.getEndTime() == null) {
|
|
|
-// errorMessage.add("出院带药请输入结束时间。");
|
|
|
-// }
|
|
|
- item.setDrugOcc(item.getDrugQuan());
|
|
|
- } else {
|
|
|
- // 计算普通药品的领量 durg_quan durg_occ
|
|
|
- calculateDrugAmount(item, detailsOfDrugs);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (StringUtil.isBlank(item.getOrderCode())) {
|
|
|
- errorMessage.add("项目编码不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getOrderName())) {
|
|
|
- errorMessage.add("项目名称不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getExecUnit())) {
|
|
|
- errorMessage.add("执行科室不能为空");
|
|
|
- } else if (item.getExecUnit().startsWith("8")) {
|
|
|
- errorMessage.add("执行科室不能选择为病区");
|
|
|
- }
|
|
|
-
|
|
|
- if (ZK_CODE.equals(item.getOrderCode())) {
|
|
|
- if (StringUtil.isBlank(item.getZkWardCode())) {
|
|
|
- errorMessage.add("转科病房不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getZkDeptCode())) {
|
|
|
- errorMessage.add("转科科室不能为空");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (StringUtil.isBlank(item.getFrequCode())) {
|
|
|
- errorMessage.add("频次不能为空");
|
|
|
- }
|
|
|
-
|
|
|
- // 药品的校验
|
|
|
- if (!ITEM.equals(item.getSerial().trim())) {
|
|
|
- if (StringUtil.isBlank(item.getDrugSpecification())) {
|
|
|
- errorMessage.add("药品规格不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getSupplyCode())) {
|
|
|
- errorMessage.add("给药方式不能为空");
|
|
|
- }
|
|
|
- if (item.getDose() == null || BigUtils.dengYu(item.getDose(), 0)) {
|
|
|
- errorMessage.add("一次计量不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getDoseUnit())) {
|
|
|
- errorMessage.add("计量单位不能为空");
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getSerial())) {
|
|
|
- errorMessage.add("包装大小不能为空");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (strictVerification) {
|
|
|
- if (item.getParentNo() != null && item.getActOrderNo() != null) {
|
|
|
- if (BigUtils.bigXiaoYu(item.getActOrderNo(), item.getParentNo())) {
|
|
|
- errorMessage.add("子医嘱的医嘱号,小于父医嘱号,无法成组。【原因如果子医嘱的医嘱号小于父医嘱,会导致打印乱码】");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- UserInfo userInfo = redisLikeService.getUserInfoByCode(TokenUtil.getTokenUserId());
|
|
|
-
|
|
|
- // 获取患者的入院时间
|
|
|
- if (item.getOrderTime() == null) {
|
|
|
- errorMessage.add("医嘱时间不能为空");
|
|
|
- } else if (item.getStartTime() == null) {
|
|
|
- errorMessage.add("开始时间不能为空");
|
|
|
- } else if (huanZheXinXi.getAdmissDate() == null) {
|
|
|
- errorMessage.add("没有查询到患者的入院时间");
|
|
|
- } else if (DateUtil.shiJianDaXiao(item.getStartTime(), huanZheXinXi.getAdmissDate(), "<")) {
|
|
|
- errorMessage.add("开始时间不能在患者入院之前,患者入院时间" + DateUtil.formatDatetime(huanZheXinXi.getAdmissDate()));
|
|
|
- } else if (DateUtil.shiJianDaXiao(item.getStartTime(), item.getOrderTime(), "<") && !userInfo.getDeptCode().equals("1160000")) {
|
|
|
- errorMessage.add("开始时间不能在开医嘱之前");
|
|
|
- }
|
|
|
-
|
|
|
- if (item.getEndTime() != null) {
|
|
|
- if (ONCE.equals(item.getFrequCode().trim())) {
|
|
|
- item.setEndTime(null);
|
|
|
- } else {
|
|
|
- if (DateUtil.shiJianDaXiao(item.getEndTime(), item.getStartTime(), "<")) {
|
|
|
- errorMessage.add("结束时间不能在开始时间之前");
|
|
|
- } else {
|
|
|
- item.setModifier(TokenUtil.getTokenUserId());
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- item.setModifier(null);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Map<String, Object> map = new HashMap<>(Capacity.TWO);
|
|
|
- if (ListUtil.notBlank(errorMessage)) {
|
|
|
- map.put("error", errorMessage);
|
|
|
- }
|
|
|
- if (ListUtil.notBlank(warningMessage)) {
|
|
|
- map.put("warning", warningMessage);
|
|
|
- }
|
|
|
- return map;
|
|
|
- }
|
|
|
|
|
|
public ResultVo<JSONObject> getFrequencyCount(String code) {
|
|
|
// 计算出院带药的领量
|
|
@@ -1525,53 +1282,6 @@ public class YiZhuLuRuServer {
|
|
|
return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "关联成功。");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 批量检验医嘱是否正确
|
|
|
- *
|
|
|
- * @param list 医嘱数据
|
|
|
- * @param huanZheXinXi 患者信息
|
|
|
- * @param rationalUse 是否要用合理用药
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Map<String, Object> batchVerification(List<XinZhenYzActOrder> list,
|
|
|
- XinZhenYiZhu huanZheXinXi,
|
|
|
- boolean rationalUse) {
|
|
|
- Map<String, Object> returnMap = new HashMap<>();
|
|
|
- // 药品 code
|
|
|
- Set<String> yaoPingCode = new HashSet<>();
|
|
|
- // 项目的 code
|
|
|
- Set<String> xiangMuCode = new HashSet<>();
|
|
|
- huanZheXinXi.setList(list);
|
|
|
- // 合理用药校验
|
|
|
-
|
|
|
- for (XinZhenYzActOrder item : list) {
|
|
|
- if (ITEM.equals(item.getSerial())) {
|
|
|
- xiangMuCode.add(item.getOrderCode());
|
|
|
- } else {
|
|
|
- yaoPingCode.add(item.getOrderCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
|
|
|
- }
|
|
|
- }
|
|
|
- String userCode = TokenUtil.getTokenUserId();
|
|
|
- // 获取医生开药品的权限
|
|
|
- Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
|
|
|
- Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, huanZheXinXi.getZkWard());
|
|
|
- Map<String, List<XinZhenYzActOrder>> project = getProjectInformation(xiangMuCode);
|
|
|
- for (XinZhenYzActOrder item : list) {
|
|
|
- String key = item.getId();
|
|
|
- Map<String, Object> errorMessageMap = checkData(item, drug, project, huanZheXinXi, doctorLevel);
|
|
|
-
|
|
|
- if (!errorMessageMap.isEmpty()) {
|
|
|
- if (errorMessageMap.get("error") != null) {
|
|
|
- errorMessageMap.put("data", item);
|
|
|
- returnMap.put(item.getId(), errorMessageMap);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return returnMap;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 确认出院带药医嘱
|
|
|
*
|
|
@@ -1588,45 +1298,31 @@ public class YiZhuLuRuServer {
|
|
|
.eq("isnull(a.supply_code,'0')", 出院带药);
|
|
|
XinZhenYiZhu patInfo = dao.queryPatientInfo(patNo, times);
|
|
|
patInfo.setList(dao.selectOrderNo(qw));
|
|
|
+
|
|
|
+ if (ListUtil.isBlank(patInfo.getList())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到医嘱。");
|
|
|
+ }
|
|
|
+
|
|
|
String userCode = TokenUtil.getTokenUserId();
|
|
|
// 出院带药需要生成药单 key 是不同的药房。不同的药房就要
|
|
|
- Map<String, List<XinZhenYzActOrder>> takeTheMedicineList = new HashMap<>(Capacity.TWO);
|
|
|
|
|
|
- for (XinZhenYzActOrder item : patInfo.getList()) {
|
|
|
- if (takeTheMedicineList.containsKey(item.getGroupNo())) {
|
|
|
- takeTheMedicineList.get(item.getGroupNo()).add(item);
|
|
|
- } else {
|
|
|
- List<XinZhenYzActOrder> temp = new ArrayList<>();
|
|
|
- temp.add(item);
|
|
|
- takeTheMedicineList.put(item.getGroupNo(), temp);
|
|
|
- }
|
|
|
- }
|
|
|
+ YiZhuCheckData checkData = new YiZhuCheckData(dao);
|
|
|
+ checkData.init(patInfo.getList(), patInfo);
|
|
|
+ Map<String, Object> map = checkData.startCheck(null);
|
|
|
|
|
|
- Map<String, Object> check = batchVerification(patInfo.getList(), patInfo, true);
|
|
|
- if (check.isEmpty()) {
|
|
|
- List<Integer> pageNoList = new ArrayList<>();
|
|
|
- for (int i = 0; i < takeTheMedicineList.size(); i++) {
|
|
|
- pageNoList.add(publicServer.getTheDrugListNo());
|
|
|
- }
|
|
|
- sendAMessageToTheNurse(patInfo, userCode, dao.queryPatientInfo(patNo, times), "出院带药");
|
|
|
- return getThis().getMapResultVo(patInfo, userCode, takeTheMedicineList, pageNoList);
|
|
|
+
|
|
|
+ if (checkData.getPassTheAudit()) {
|
|
|
+ sendAMessageToTheNurse(patInfo, userCode, patInfo, "出院带药");
|
|
|
+ return getThis().getMapResultVo(patInfo, userCode);
|
|
|
} else {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改有错误的医嘱。", check);
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改有错误的医嘱。", map);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
@NotNull
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public ResultVo<Map<String, Object>> getMapResultVo(XinZhenYiZhu patInfo, String userCode, Map<String, List<XinZhenYzActOrder>> takeTheMedicineList, List<Integer> pageNoList) {
|
|
|
- // 根据不同的药房,生成不同的单子.
|
|
|
-// int index = 0;
|
|
|
-// for (Map.Entry<String, List<XinZhenYzActOrder>> entry : takeTheMedicineList.entrySet()) {
|
|
|
-// Integer pageNo = pageNoList.get(index);
|
|
|
-// dao.summarySheetOfDrugs(pageNo, patInfo, userCode, entry.getKey());
|
|
|
-// dao.insertDetailedMedicineList(pageNo, patInfo, userCode, entry.getKey(), entry.getValue());
|
|
|
-// index++;
|
|
|
-// }
|
|
|
+ public ResultVo<Map<String, Object>> getMapResultVo(XinZhenYiZhu patInfo, String userCode) {
|
|
|
for (XinZhenYzActOrder order : patInfo.getList()) {
|
|
|
// 出院带药 确认了直接停止医嘱
|
|
|
dao.takeMedicineAfterDischargeStopOrder(order.getActOrderNo(), userCode, new Date());
|
|
@@ -1634,38 +1330,6 @@ public class YiZhuLuRuServer {
|
|
|
return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
|
|
|
}
|
|
|
|
|
|
- @Deprecated
|
|
|
- public ResultVo<String> copyTheDoctorSOrder(BigDecimal orderNo, String deptCode) {
|
|
|
- QueryWrapper<?> qw = new QueryWrapper<>();
|
|
|
- qw.eq("a.act_order_no", orderNo);
|
|
|
- List<XinZhenYzActOrder> yiZhuList = dao.selectOrderNo(qw);
|
|
|
- if (ListUtil.isBlank(yiZhuList)) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "原医嘱已经不存在了。");
|
|
|
- }
|
|
|
- XinZhenYzActOrder fatherOrder = yiZhuList.get(0);
|
|
|
- QueryWrapper<?> childQw = new QueryWrapper<>();
|
|
|
- childQw.eq("a.parent_no", fatherOrder.getActOrderNo());
|
|
|
- List<XinZhenYzActOrder> childOrderList = dao.selectOrderNo(childQw);
|
|
|
- UserInfo us = redisLikeService.getUserInfoByToken();
|
|
|
- revertToTheDefaultState(fatherOrder, us, null);
|
|
|
-
|
|
|
- List<XinZhenYzActOrder> addOrderList = new ArrayList<>();
|
|
|
- setCopyExecUnit(fatherOrder, deptCode);
|
|
|
- addOrderList.add(fatherOrder);
|
|
|
-
|
|
|
- if (ListUtil.notBlank(childOrderList)) {
|
|
|
- childOrderList.forEach(item -> {
|
|
|
- setCopyExecUnit(item, deptCode);
|
|
|
- revertToTheDefaultState(item, us, fatherOrder.getActOrderNo());
|
|
|
- addOrderList.add(item);
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- XinZhenYiZhu patInfo = dao.queryPatientInfo(fatherOrder.getInpatientNo(), fatherOrder.getAdmissTimes());
|
|
|
- getThis().insertATemplate(addOrderList, patInfo);
|
|
|
- return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "复制成功。");
|
|
|
- }
|
|
|
-
|
|
|
private void setCopyExecUnit(XinZhenYzActOrder v, String dept) {
|
|
|
if (StringUtil.notBlank(dept)) {
|
|
|
v.setExecUnit(dept);
|