Browse Source

添加医嘱的转科的操作

xiaochan 3 years ago
parent
commit
94c3bc2273

+ 5 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/YiZhuLuRuDao.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.*;
 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 java.math.BigDecimal;
@@ -866,5 +867,9 @@ public interface YiZhuLuRuDao {
                                      @Param("userCode") String userCode,
                                      @Param("endTime") String endTime);
 
+    @Insert("insert into zy_order_zk (act_order_no, old_ward, " +
+            "old_dept, new_ward, new_dept) " +
+            "values (#{actOrderNo},#{oldWard},#{oldDept},#{newWard},#{newDept})")
+    void insertDoctorSOrder(ZyOrderZk zk);
 
 }

+ 238 - 157
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -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;

+ 1 - 1
src/main/resources/application.yml

@@ -8,7 +8,7 @@ spring:
     cache: false
   datasource:
     dynamic:
-      primary: dev
+      primary: his
       strict: false
       datasource:
         his: