|
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import thyyxxk.webserver.config.exception.BizException;
|
|
@@ -14,9 +15,9 @@ import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
|
|
|
import thyyxxk.webserver.entity.ResultVo;
|
|
|
import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
|
|
|
import thyyxxk.webserver.entity.datamodify.YzActOrder;
|
|
|
+import thyyxxk.webserver.entity.zhuyuanyisheng.ZyOrderZk;
|
|
|
import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
|
|
|
import thyyxxk.webserver.service.PublicServer;
|
|
|
-import thyyxxk.webserver.service.yibao.PatientService;
|
|
|
import thyyxxk.webserver.utils.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
@@ -41,6 +42,7 @@ public class YiZhuLuRuServer {
|
|
|
private final PublicServer publicServer;
|
|
|
|
|
|
private final String ZK_CODE = "06286";
|
|
|
+ private final String ONCE = "ONCE";
|
|
|
|
|
|
|
|
|
public YiZhuLuRuServer(YiZhuLuRuDao dao, PublicServer publicServer) {
|
|
@@ -108,7 +110,7 @@ public class YiZhuLuRuServer {
|
|
|
} else if (param.getZhuangTai() == 3) {
|
|
|
qw.in("status_flag", 3, 4);
|
|
|
} else if (param.getZhuangTai() == 6) {
|
|
|
- qw.ne("frequ_code", "ONCE")
|
|
|
+ qw.ne("frequ_code", ONCE)
|
|
|
.isNull("end_time")
|
|
|
.eq("doctor_flag", "1")
|
|
|
.ne("status_flag", "5");
|
|
@@ -117,9 +119,9 @@ public class YiZhuLuRuServer {
|
|
|
.ge("status_flag", "2")
|
|
|
.ge("start_time", DateUtil.formatDatetime(DateUtil.addDateMinut(new Date(), -24)));
|
|
|
} else if (param.getZhuangTai() == 8) {
|
|
|
- qw.eq("frequ_code", "ONCE");
|
|
|
+ qw.eq("frequ_code", ONCE);
|
|
|
} else if (param.getZhuangTai() == 9) {
|
|
|
- qw.ne("frequ_code", "ONCE");
|
|
|
+ qw.ne("frequ_code", ONCE);
|
|
|
}
|
|
|
IPage<YzActOrder> page = new Page<>();
|
|
|
if (param.getTotal() == 0) {
|
|
@@ -308,149 +310,21 @@ public class YiZhuLuRuServer {
|
|
|
}
|
|
|
}
|
|
|
// 这个是药品的一些信息
|
|
|
- Map<String, XinZhenYzActOrder> yaoPingXinXi = new HashMap<>();
|
|
|
- Map<String, XinZhenYzActOrder> xiangMuXinXi = new HashMap<>();
|
|
|
+ Map<String, XinZhenYzActOrder> yaoPingXinXi = getDrugInformation(yaoPingCode);
|
|
|
+ Map<String, XinZhenYzActOrder> xiangMuXinXi = getProjectInformation(xiangMuCode);
|
|
|
// 获取医生开药品的权限
|
|
|
Integer yiShenDengJi = dao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
|
|
|
- if (!yaoPingCode.isEmpty()) {
|
|
|
- yaoPingXinXi = dao.huoQuYaoPinXinXi(yaoPingCode).stream().collect(
|
|
|
- Collectors.toMap(item -> item.getOrderCode().trim() + item.getSerial().trim(), a -> a, (k1, k2) -> k1));
|
|
|
- }
|
|
|
- if (!xiangMuCode.isEmpty()) {
|
|
|
- xiangMuXinXi = dao.huoQuXiangMuXinXi(xiangMuCode).stream().collect(
|
|
|
- Collectors.toMap(item -> item.getOrderCode().trim(), a -> a, (k1, k2) -> k1));
|
|
|
- }
|
|
|
// 这个是 抗菌药物的信息
|
|
|
List<YzActRecordKss> kssList = new ArrayList<>();
|
|
|
+ // 这个是 转科医嘱的
|
|
|
+ int transferCount = 0;
|
|
|
+ ZyOrderZk transferData = null;
|
|
|
// 判断一些基本信息错误 以及生成医嘱号
|
|
|
int index = 0;
|
|
|
int listSize = param.getList().size();
|
|
|
for (XinZhenYzActOrder item : param.getList()) {
|
|
|
index++;
|
|
|
- if (StringUtil.isBlank(item.getOrderCode())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("项目编码不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getOrderName())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("项目名称不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getExecUnit())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("执行科室不能为空", listSize, index));
|
|
|
- } else if (item.getExecUnit().startsWith("8")) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("执行科室不能选择为病区", listSize, index));
|
|
|
- } else if (ZK_CODE.equals(item.getOrderCode()) ){
|
|
|
-
|
|
|
- }
|
|
|
- if (!"00".equals(item.getSerial().trim())) {
|
|
|
- if (StringUtil.isBlank(item.getFrequCode())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("频次不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getDiscription())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("描述不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getDrugSpecification())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("药品规格不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getSupplyCode())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("给药方式不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (item.getDose() == null || BigUtils.dengYu(item.getDose(), 0)) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("一次计量不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getDoseUnit())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("计量单位不能为空", listSize, index));
|
|
|
- }
|
|
|
- if (StringUtil.isBlank(item.getSerial())) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("包装大小不能为空", listSize, index));
|
|
|
- }
|
|
|
- // 插入模板就不需要 填写时间 这里为什么不要使用 插入医嘱 这个判断就是因为还需要校验数据
|
|
|
- if (!param.getChaRuMuBan()) {
|
|
|
- if (item.getOrderTime() == null) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("医嘱时间不能为空", listSize, index));
|
|
|
- } else if (item.getStartTime() == null) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("开始时间不能为空", listSize, index));
|
|
|
- } else if (DateUtil.shiJianDaXiao(item.getStartTime(), item.getOrderTime(), "<")) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("开始时间不能在开医嘱之前", listSize, index));
|
|
|
- }
|
|
|
- if (item.getEndTime() != null) {
|
|
|
- if ("ONCE".equals(item.getFrequCode().trim())) {
|
|
|
- item.setEndTime(null);
|
|
|
- } else {
|
|
|
- if (DateUtil.shiJianDaXiao(item.getEndTime(), item.getStartTime(), "<")) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("结束时间不能在开始时间之前", listSize, index));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- XinZhenYzActOrder feiYongXinXi = yaoPingXinXi.get(item.getOrderCode().trim() + item.getSerial().trim());
|
|
|
- if (feiYongXinXi != null) {
|
|
|
- // 跳过 权限判断
|
|
|
- if (feiYongXinXi.getYpLevel() > yiShenDengJi && needRule) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("您没有开此药品的权限", listSize, index));
|
|
|
- }
|
|
|
- if (feiYongXinXi.getDelFlag() == 1) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
|
|
|
- }
|
|
|
- } else {
|
|
|
- feiYongXinXi = xiangMuXinXi.get(item.getOrderCode().trim());
|
|
|
- if (feiYongXinXi != null) {
|
|
|
- if (feiYongXinXi.getDelFlag() == 1) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果项目和药品全部没有那么就代表这是一个不会产生费用的医嘱
|
|
|
- }
|
|
|
- if (!"00".equals(item.getSerial()) && feiYongXinXi != null) {
|
|
|
- // 判断抗菌药物
|
|
|
- if (param.getChaRuYiZhu()) {
|
|
|
- item.setKjywFlag(feiYongXinXi.getKjywFlag());
|
|
|
- if (feiYongXinXi.getKjywFlag() == 1) {
|
|
|
- if (item.getYyfs() == null) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("请填写抗菌药物医嘱附注信息录入。", listSize, index));
|
|
|
- } else if (item.getYyfs() == 1 || item.getYyfs() == 2) {
|
|
|
- if (item.getSsqk() == null || item.getYyfs() == null) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("当用药方式为 1 或 2 时,手术切口和用药时间不能为空。", listSize, index));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // 如果药品已经是最小包装规格了就不能带小数点
|
|
|
- // 同时计算药品的执行用量 以及 领量
|
|
|
- if (StringUtil.notBlank(feiYongXinXi.getDrugWeightUnit()) &&
|
|
|
- item.getDoseUnit().trim().equals(feiYongXinXi.getDrugWeightUnit().trim())) {
|
|
|
- if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugWeight())) {
|
|
|
- item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
- item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
- } else {
|
|
|
- item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight()));
|
|
|
- item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight(), 2));
|
|
|
- }
|
|
|
- } else if (StringUtil.notBlank(feiYongXinXi.getDrugVolUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getDrugVolUnit())) {
|
|
|
- if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugVolume())) {
|
|
|
- item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
- item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
- } else {
|
|
|
- item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume()));
|
|
|
- item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume(), 2));
|
|
|
- }
|
|
|
- } else if (StringUtil.notBlank(feiYongXinXi.getPackUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getPackUnit())) {
|
|
|
- if (new BigDecimal(item.getDose().intValue()).compareTo(item.getDose()) != 0) {
|
|
|
- cuoWuXinXi.append(getCuoWuXinXi("已经是最小单位了请不要带小数点。", listSize, index));
|
|
|
- }
|
|
|
- item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize()));
|
|
|
- item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize(), 2));
|
|
|
- }
|
|
|
- try {
|
|
|
- // 这里把查询出来的一些信息 放到item 中 ,这个克隆不会影响已经有值的数据 这样就不用一个个set 了
|
|
|
- EntityCopy.Copy(feiYongXinXi, item);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- } else {
|
|
|
- item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
- item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
- }
|
|
|
+ wrongInformationOnDoctorSOrders(param, cuoWuXinXi, needRule, yaoPingXinXi, xiangMuXinXi, yiShenDengJi, index, listSize, item);
|
|
|
// 判断是否需要上传
|
|
|
if (param.getChaRuYiZhu()) {
|
|
|
item.setActOrderNo(BigDecimal.valueOf(publicServer.getActOrderNo()));
|
|
@@ -463,6 +337,16 @@ public class YiZhuLuRuServer {
|
|
|
kss.setYysj(item.getYysj());
|
|
|
kssList.add(kss);
|
|
|
}
|
|
|
+ if (ZK_CODE.equals(item.getOrderCode())) {
|
|
|
+ transferCount++;
|
|
|
+ if (transferCount > 1) {
|
|
|
+ throw new BizException(ExceptionEnum.LOGICAL_ERROR, "转科医嘱一次,只能开一个.");
|
|
|
+ }
|
|
|
+ transferData = new ZyOrderZk();
|
|
|
+ transferData.setActOrderNo(item.getActOrderNo().stripTrailingZeros().toPlainString())
|
|
|
+ .setNewDept(item.getZkDeptCode())
|
|
|
+ .setNewWard(item.getZkWardCode());
|
|
|
+ }
|
|
|
}
|
|
|
// 判断是不是需要 插入 模板数据
|
|
|
if (param.getChaRuMuBan()) {
|
|
@@ -481,7 +365,7 @@ public class YiZhuLuRuServer {
|
|
|
String inputCode = TokenUtil.getTokenUserId();
|
|
|
// 在这里插入医嘱
|
|
|
if (param.getChaRuYiZhu()) {
|
|
|
- return chaRuYiZhu(param, kssList, inputCode);
|
|
|
+ return chaRuYiZhu(param, kssList, inputCode, transferData);
|
|
|
}
|
|
|
if (param.getChaRuMuBan()) {
|
|
|
dao.chaRuMuBanShuJu(param.getList(), param.getPatternCode());
|
|
@@ -489,24 +373,230 @@ public class YiZhuLuRuServer {
|
|
|
return ResultVoUtil.success();
|
|
|
}
|
|
|
|
|
|
- public ResultVo<String> chaRuYiZhu(XinZhenYiZhu param, List<YzActRecordKss> kssList, String inputCode) {
|
|
|
+ /***
|
|
|
+ * 获取项目信息
|
|
|
+ * @param xiangMuCode 项目编码
|
|
|
+ * @return 返回数据
|
|
|
+ */
|
|
|
+ private Map<String, XinZhenYzActOrder> getProjectInformation(Set<String> xiangMuCode) {
|
|
|
+ if (!xiangMuCode.isEmpty()) {
|
|
|
+ return dao.huoQuXiangMuXinXi(xiangMuCode).stream().collect(
|
|
|
+ Collectors.toMap(item -> item.getOrderCode().trim(), a -> a, (k1, k2) -> k1));
|
|
|
+ }
|
|
|
+ return new HashMap<>(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取药品信息
|
|
|
+ *
|
|
|
+ * @param yaoPingCode 药品编码
|
|
|
+ * @return 返回数据
|
|
|
+ */
|
|
|
+ private Map<String, XinZhenYzActOrder> getDrugInformation(Set<String> yaoPingCode) {
|
|
|
+ if (!yaoPingCode.isEmpty()) {
|
|
|
+ return dao.huoQuYaoPinXinXi(yaoPingCode).stream().collect(
|
|
|
+ Collectors.toMap(item -> item.getOrderCode().trim() + item.getSerial().trim(), a -> a, (k1, k2) -> k1));
|
|
|
+ }
|
|
|
+ return new HashMap<>(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 医嘱错误信息
|
|
|
+ *
|
|
|
+ * @param param 新增医嘱信息
|
|
|
+ * @param cuoWuXinXi 错误信息
|
|
|
+ * @param needRule 需要的权限
|
|
|
+ * @param yaoPingXinXi 药品信息
|
|
|
+ * @param xiangMuXinXi 项目信息
|
|
|
+ * @param yiShenDengJi 医生登记
|
|
|
+ * @param index 当前下标
|
|
|
+ * @param listSize 数据大小
|
|
|
+ * @param item 当前数据
|
|
|
+ */
|
|
|
+ private void wrongInformationOnDoctorSOrders(XinZhenYiZhu param,
|
|
|
+ StringBuilder cuoWuXinXi,
|
|
|
+ Boolean needRule,
|
|
|
+ Map<String, XinZhenYzActOrder> yaoPingXinXi,
|
|
|
+ Map<String, XinZhenYzActOrder> xiangMuXinXi,
|
|
|
+ Integer yiShenDengJi,
|
|
|
+ int index,
|
|
|
+ int listSize,
|
|
|
+ @NotNull XinZhenYzActOrder item) {
|
|
|
+ if (StringUtil.isBlank(item.getOrderCode())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("项目编码不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getOrderName())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("项目名称不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getExecUnit())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("执行科室不能为空", listSize, index));
|
|
|
+ } else if (item.getExecUnit().startsWith("8")) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("执行科室不能选择为病区", listSize, index));
|
|
|
+ } else if (ZK_CODE.equals(item.getOrderCode())) {
|
|
|
+ if (StringUtil.isBlank(item.getZkWardCode())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("转科病房不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getZkDeptCode())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("转科科室不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!"00".equals(item.getSerial().trim())) {
|
|
|
+ if (StringUtil.isBlank(item.getFrequCode())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("频次不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getDiscription())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("描述不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getDrugSpecification())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("药品规格不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getSupplyCode())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("给药方式不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (item.getDose() == null || BigUtils.dengYu(item.getDose(), 0)) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("一次计量不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getDoseUnit())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("计量单位不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ if (StringUtil.isBlank(item.getSerial())) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("包装大小不能为空", listSize, index));
|
|
|
+ }
|
|
|
+ // 插入模板就不需要 填写时间 这里为什么不要使用 插入医嘱 这个判断就是因为还需要校验数据
|
|
|
+ if (!param.getChaRuMuBan()) {
|
|
|
+ if (item.getOrderTime() == null) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("医嘱时间不能为空", listSize, index));
|
|
|
+ } else if (item.getStartTime() == null) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("开始时间不能为空", listSize, index));
|
|
|
+ } else if (DateUtil.shiJianDaXiao(item.getStartTime(), item.getOrderTime(), "<")) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("开始时间不能在开医嘱之前", listSize, index));
|
|
|
+ }
|
|
|
+ if (item.getEndTime() != null) {
|
|
|
+ if (ONCE.equals(item.getFrequCode().trim())) {
|
|
|
+ item.setEndTime(null);
|
|
|
+ } else {
|
|
|
+ if (DateUtil.shiJianDaXiao(item.getEndTime(), item.getStartTime(), "<")) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("结束时间不能在开始时间之前", listSize, index));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ XinZhenYzActOrder feiYongXinXi = yaoPingXinXi.get(item.getOrderCode().trim() + item.getSerial().trim());
|
|
|
+ if (feiYongXinXi != null) {
|
|
|
+ // 跳过 权限判断
|
|
|
+ if (feiYongXinXi.getYpLevel() > yiShenDengJi && needRule) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("您没有开此药品的权限", listSize, index));
|
|
|
+ }
|
|
|
+ if (feiYongXinXi.getDelFlag() == 1) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ feiYongXinXi = xiangMuXinXi.get(item.getOrderCode().trim());
|
|
|
+ if (feiYongXinXi != null) {
|
|
|
+ if (feiYongXinXi.getDelFlag() == 1) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("已被物价科停用,请联系物价科。", listSize, index));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果项目和药品全部没有那么就代表这是一个不会产生费用的医嘱
|
|
|
+ }
|
|
|
+ if (!"00".equals(item.getSerial()) && feiYongXinXi != null) {
|
|
|
+ // 判断抗菌药物
|
|
|
+ if (param.getChaRuYiZhu()) {
|
|
|
+ item.setKjywFlag(feiYongXinXi.getKjywFlag());
|
|
|
+ if (feiYongXinXi.getKjywFlag() == 1) {
|
|
|
+ if (item.getYyfs() == null) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("请填写抗菌药物医嘱附注信息录入。", listSize, index));
|
|
|
+ } else if (item.getYyfs() == 1 || item.getYyfs() == 2) {
|
|
|
+ if (item.getSsqk() == null || item.getYyfs() == null) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("当用药方式为 1 或 2 时,手术切口和用药时间不能为空。", listSize, index));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ calculateTheAmountOfExecutionAndClaims(cuoWuXinXi, index, listSize, item, feiYongXinXi);
|
|
|
+ try {
|
|
|
+ // 这里把查询出来的一些信息 放到item 中 ,这个克隆不会影响已经有值的数据 这样就不用一个个set 了
|
|
|
+ EntityCopy.Copy(feiYongXinXi, item);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
+ item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 如果药品已经是最小包装规格了就不能带小数点
|
|
|
+ * 同时计算药品的执行用量 以及 领量
|
|
|
+ *
|
|
|
+ * @param cuoWuXinXi 错误信息
|
|
|
+ * @param index 下标
|
|
|
+ * @param listSize 数据大小
|
|
|
+ * @param item 当前数据
|
|
|
+ * @param feiYongXinXi 费用信息
|
|
|
+ */
|
|
|
+ private void calculateTheAmountOfExecutionAndClaims(StringBuilder cuoWuXinXi, int index, int listSize, XinZhenYzActOrder item, XinZhenYzActOrder feiYongXinXi) {
|
|
|
+ if (StringUtil.notBlank(feiYongXinXi.getDrugWeightUnit()) &&
|
|
|
+ item.getDoseUnit().trim().equals(feiYongXinXi.getDrugWeightUnit().trim())) {
|
|
|
+ if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugWeight())) {
|
|
|
+ item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
+ item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
+ } else {
|
|
|
+ item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight()));
|
|
|
+ item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugWeight(), 2));
|
|
|
+ }
|
|
|
+ } else if (StringUtil.notBlank(feiYongXinXi.getDrugVolUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getDrugVolUnit())) {
|
|
|
+ if (BigUtils.bigXiaoYu(item.getDose(), feiYongXinXi.getDrugVolume())) {
|
|
|
+ item.setDrugQuan(BigDecimal.valueOf(1));
|
|
|
+ item.setDrugOcc(BigDecimal.valueOf(1));
|
|
|
+ } else {
|
|
|
+ item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume()));
|
|
|
+ item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getDrugVolume(), 2));
|
|
|
+ }
|
|
|
+ } else if (StringUtil.notBlank(feiYongXinXi.getPackUnit()) && item.getDoseUnit().trim().equals(feiYongXinXi.getPackUnit())) {
|
|
|
+ if (new BigDecimal(item.getDose().intValue()).compareTo(item.getDose()) != 0) {
|
|
|
+ cuoWuXinXi.append(getCuoWuXinXi("已经是最小单位了请不要带小数点。", listSize, index));
|
|
|
+ }
|
|
|
+ item.setDrugQuan(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize()));
|
|
|
+ item.setDrugOcc(DecimalUtil.divide(item.getDose(), feiYongXinXi.getPackSize(), 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public ResultVo<String> chaRuYiZhu(XinZhenYiZhu param,
|
|
|
+ List<YzActRecordKss> kssList,
|
|
|
+ String inputCode,
|
|
|
+ ZyOrderZk zk) {
|
|
|
if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
|
|
|
throw new BizException(ExceptionEnum.LOGICAL_ERROR, "请先选择患者信息");
|
|
|
}
|
|
|
-
|
|
|
XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
|
|
|
if (huanZheXinXi == null) {
|
|
|
throw new BizException(ExceptionEnum.LOGICAL_ERROR, "没有查询到患者的在院信息。");
|
|
|
}
|
|
|
-
|
|
|
huanZheXinXi.setInfantFlag(publicServer.getInfantFlag(huanZheXinXi.getInpatientNo()));
|
|
|
publicServer.huanZheJieSuan(param.getInpatientNo(), param.getAdmissTimes());
|
|
|
if (ListUtil.notBlank(kssList)) {
|
|
|
dao.shanChuYuanKuangJunYaoWu(kssList);
|
|
|
dao.chaRuKuangJunYaoWuXinXi(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, kssList);
|
|
|
}
|
|
|
- List<String> content = new ArrayList<>();
|
|
|
+ if (zk != null) {
|
|
|
+ zk.setOldWard(huanZheXinXi.getDeptCode())
|
|
|
+ .setOldDept(huanZheXinXi.getSmallDept());
|
|
|
+ dao.insertDoctorSOrder(zk);
|
|
|
+ }
|
|
|
String groupNo = publicServer.getGroupNo();
|
|
|
+ sendAMessageToTheNurse(param, inputCode, huanZheXinXi, groupNo);
|
|
|
+ dao.chaRuYiZhu(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, huanZheXinXi.getInfantFlag(),
|
|
|
+ huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getReferPhysician(), param.getList());
|
|
|
+ return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "医嘱保存成功。");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void sendAMessageToTheNurse(XinZhenYiZhu param, String inputCode, XinZhenYiZhu huanZheXinXi, String groupNo) {
|
|
|
+ List<String> content = new ArrayList<>();
|
|
|
for (XinZhenYzActOrder item : param.getList()) {
|
|
|
if (StringUtil.isBlank(item.getDrugFlag())) {
|
|
|
item.setDrugFlag("o");
|
|
@@ -526,10 +616,7 @@ public class YiZhuLuRuServer {
|
|
|
"频次:<span style='color:#409eff'>【%s】</span>",
|
|
|
item.getOrderName(), item.getOrderTime(), huanZheXinXi.getName(), huanZheXinXi.getBedNo(), item.getFrequCode()));
|
|
|
}
|
|
|
- dao.chaRuYiZhu(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, huanZheXinXi.getInfantFlag(),
|
|
|
- huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getReferPhysician(), param.getList());
|
|
|
publicServer.faSongXiaoXi(huanZheXinXi, content, "新增医嘱", inputCode);
|
|
|
- return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "医嘱保存成功。");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -566,33 +653,27 @@ public class YiZhuLuRuServer {
|
|
|
|
|
|
public ResultVo<List<YzActOrder>> huoQuMuBanShuJu(String code) {
|
|
|
List<YzActOrder> muBanShuJu = dao.huoQuMuBanShuJu(code);
|
|
|
-
|
|
|
- Map<BigDecimal, YzActOrder> wuFuJi = muBanShuJu.stream().collect(
|
|
|
- Collectors.toMap(YzActOrder::getId, a -> a, (k1, k2) -> k1));
|
|
|
-
|
|
|
- Map<BigDecimal, YzActOrder> map = new HashMap<>();
|
|
|
+ Map<BigDecimal, YzActOrder> map = new HashMap<>(muBanShuJu.size());
|
|
|
List<YzActOrder> tree = new ArrayList<>();
|
|
|
for (YzActOrder item : muBanShuJu) {
|
|
|
if (item.getParentNo() == null) {
|
|
|
tree.add(item);
|
|
|
- wuFuJi.remove(item.getId());
|
|
|
}
|
|
|
map.put(item.getId(), item);
|
|
|
}
|
|
|
for (YzActOrder item : muBanShuJu) {
|
|
|
YzActOrder yzActOrder = map.get(item.getParentNo());
|
|
|
if (yzActOrder != null) {
|
|
|
- wuFuJi.remove(item.getId());
|
|
|
item.setIsChildren(true);
|
|
|
if (yzActOrder.getChildren() == null) {
|
|
|
yzActOrder.setChildren(new ArrayList<>());
|
|
|
}
|
|
|
yzActOrder.getChildren().add(item);
|
|
|
+ } else {
|
|
|
+ item.setParentNo(null);
|
|
|
+ tree.add(item);
|
|
|
}
|
|
|
}
|
|
|
- if (!wuFuJi.isEmpty()) {
|
|
|
- tree.addAll(wuFuJi.values());
|
|
|
- }
|
|
|
return ResultVoUtil.success(tree);
|
|
|
}
|
|
|
|
|
@@ -801,7 +882,7 @@ public class YiZhuLuRuServer {
|
|
|
if (DateUtil.shiJianDaXiao(content, DateUtil.formatDatetime(yz.getStartTime()), "<")) {
|
|
|
return "停止时间不能在开始时间前面。";
|
|
|
}
|
|
|
- if ("ONCE".equals(yz.getFrequCode().trim())) {
|
|
|
+ if (ONCE.equals(yz.getFrequCode().trim())) {
|
|
|
return "临时医嘱,无法设置停止时间。";
|
|
|
}
|
|
|
return null;
|