فهرست منبع

查看电子病历以及父子医嘱

DESKTOP-0GD05B0\Administrator 2 سال پیش
والد
کامیت
816b6318c7

+ 8 - 7
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/YizhuLuRuController.java

@@ -65,10 +65,16 @@ public class YizhuLuRuController {
 
     @GetMapping("/getParentOrders")
     public ResultVo<List<XinZhenYzActOrder>> getParentOrders(@RequestParam("patNo") String patNo,
-                                                             @RequestParam("times") String times) {
+                                                             @RequestParam("times") Integer times) {
         return server.getParentOrders(patNo, times);
     }
 
+    @GetMapping("/correctSubOrders")
+    public ResultVo<String> correctSubOrders(@RequestParam("patNo") String patNo,
+                                             @RequestParam("times") Integer times) {
+        return server.correctSubOrders(patNo, times);
+    }
+
 
     @GetMapping("/huoQuYiZhuMingCheng")
     public ResultVo<List<GetDropdownBox>> huoQuYiZhuMingCheng(@RequestParam("inpatientNo") String inpatientNo,
@@ -91,7 +97,7 @@ public class YizhuLuRuController {
     @GetMapping("/huoQuXiangMu")
     public ResultVo<List<YiZhuMingChen>> huoQuXiangMu(@RequestParam("code") String code,
                                                       @RequestParam("groupNo") String groupNo) {
-        return server.huoQuXiangMu(code,groupNo);
+        return server.huoQuXiangMu(code, groupNo);
     }
 
     @GetMapping("/huoQuFeiYongXinXi")
@@ -150,11 +156,6 @@ public class YizhuLuRuController {
         return server.singleDataCheck(param);
     }
 
-    @PostMapping("/saveTheDoctorSOrder")
-    public ResultVo<Map<String, Object>> saveTheDoctorSOrder(@RequestBody XinZhenYiZhu param) {
-        return server.saveTheDoctorSOrder(param);
-    }
-
     @PostMapping("/insertTemplateOrder")
     public ResultVo<String> insertTemplateOrder(@RequestBody XinZhenYiZhu param) {
         return server.insertTemplateOrder(param);

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

@@ -239,6 +239,15 @@ public interface YiZhuLuRuDao {
             "${ew.customSqlSegment}")
     List<XinZhenYzActOrder> getOrdersToDelete(@Param(Constants.WRAPPER) Wrapper<?> wq);
 
+    @Update("update yz_act_order " +
+            "set order_time  = #{order.orderTime,jdbcType=TIMESTAMP}, " +
+            "    start_time  = #{order.startTime,jdbcType=TIMESTAMP}, " +
+            "    end_time    = #{order.endTime,jdbcType=TIMESTAMP}, " +
+            "    supply_code = #{order.supplyCode}, " +
+            "    frequ_code  = #{order.frequCode} " +
+            "where act_order_no = ${orderNo} ")
+    void updateSubOrderStatus(BigDecimal orderNo, XinZhenYzActOrder order);
+
     @Delete("delete yz_act_order ${ew.customSqlSegment} ")
     void deleteMultipleOrders(@Param(Constants.WRAPPER) Wrapper<?> wq);
 
@@ -606,15 +615,23 @@ public interface YiZhuLuRuDao {
     List<YiZhuMingChen> composeOrders(String code, String deptCode);
 
 
-    @Select("SELECT act_order_no, " +
-            "       order_name " +
+    @Select("SELECT                 act_order_no, " +
+            "                       order_name, " +
+            "                       order_time, " +
+            "                       start_time, " +
+            "                       rtrim(frequ_code)  frequ_code, " +
+            "    frequ_code_name  = (select rtrim(comm) from yz_order_frequency where frequ_code = code), " +
+            "                       rtrim(supply_code) supply_code, " +
+            "    supply_code_name = (select rtrim(supply_name) " +
+            "                        from yz_supply_type " +
+            "                        where yz_act_order.supply_code = yz_supply_type.supply_code)" +
             "FROM yz_act_order with (NOLOCK) " +
             "WHERE inpatient_no = #{patNo} " +
             "  AND admiss_times = #{times} " +
             "  AND isnull(parent_no, 0) = 0 " +
             "  and status_flag = '1' " +
             "  and serial <> '00' ")
-    List<XinZhenYzActOrder> getParentOrders(String patNo, String times);
+    List<XinZhenYzActOrder> getParentOrders(String patNo, Integer times);
 
 
     @Select("SELECT cast(rtrim(isnull(nullif(del_flag, " +
@@ -1099,7 +1116,9 @@ public interface YiZhuLuRuDao {
             "    self_flag        ='', " +
             "    parent_flag='', " +
             "                       a.exec_unit, " +
-            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit) " +
+            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit)," +
+            "    group_no         = '00', " +
+            "    group_no_name    = N'项目' " +
             "FROM yz_pattern_order a with (NOLOCK), " +
             "     yz_order_item b with (NOLOCK) " +
             "WHERE a.pattern_code = #{code} " +
@@ -1143,7 +1162,11 @@ public interface YiZhuLuRuDao {
             "    self_flag        =b.self_flag, " +
             "    parent_flag='', " +
             "                       a.exec_unit, " +
-            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit) " +
+            "    exec_unit_name   = (select rtrim(name) from zd_unit_code with (NOLOCK) where code = exec_unit)," +
+            "                       a.group_no, " +
+            "                       (select yp_zd_group_name.group_name " +
+            "                        from yp_zd_group_name " +
+            "                        where yp_zd_group_name.group_no = a.group_no) " +
             "FROM yz_pattern_order a with (NOLOCK), " +
             "     view_yp_zd_dict_base_yf b with (NOLOCK) " +
             "WHERE a.pattern_code = #{code} " +

+ 143 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/YzPatternOrder.java

@@ -0,0 +1,143 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+import lombok.Data;
+
+@Data
+public class YzPatternOrder implements Serializable {
+
+    private static final long serialVersionUID = 4210052538313319876L;
+
+    /**
+     * actOrderNo
+     */
+    private BigDecimal actOrderNo;
+
+    /**
+     * orderCode
+     */
+    private String orderCode;
+
+    /**
+     * frequCode
+     */
+    private String frequCode;
+
+    /**
+     * drugFlag
+     */
+    private String drugFlag;
+
+    /**
+     * supplyCode
+     */
+    private String supplyCode;
+
+    /**
+     * drugQuan
+     */
+    private BigDecimal drugQuan;
+
+    /**
+     * instruction
+     */
+    private String instruction;
+
+    /**
+     * drugSpecification
+     */
+    private String drugSpecification;
+
+    /**
+     * miniUnit
+     */
+    private String miniUnit;
+
+    /**
+     * drugWeight
+     */
+    private BigDecimal drugWeight;
+
+    /**
+     * drugWeightUnit
+     */
+    private String drugWeightUnit;
+
+    /**
+     * parentNo
+     */
+    private BigDecimal parentNo;
+
+    /**
+     * drugVolume
+     */
+    private BigDecimal drugVolume;
+
+    /**
+     * drugVolUnit
+     */
+    private String drugVolUnit;
+
+    /**
+     * dose
+     */
+    private BigDecimal dose;
+
+    /**
+     * doseUnit
+     */
+    private String doseUnit;
+
+    /**
+     * drugOcc
+     */
+    private BigDecimal drugOcc;
+
+    /**
+     * excluActOrderNo
+     */
+    private BigDecimal excluActOrderNo;
+
+    /**
+     * orderName
+     */
+    private String orderName;
+
+    /**
+     * discription
+     */
+    private String discription;
+
+    /**
+     * patternCode
+     */
+    private String patternCode;
+
+    /**
+     * orderType
+     */
+    private String orderType;
+
+    /**
+     * serial
+     */
+    private String serial;
+
+    /**
+     * groupNo
+     */
+    private String groupNo;
+
+    /**
+     * selfBuy
+     */
+    private String selfBuy;
+
+    /**
+     * execUnit
+     */
+    private String execUnit;
+
+}

+ 6 - 8
src/main/java/thyyxxk/webserver/service/LoginService.java

@@ -26,13 +26,15 @@ public class LoginService {
     private final TokenService tokenService;
     private final RedisLikeService redisLikeService;
     private final CorpWxSrvc srvc;
+    private final PublicServer publicServer;
 
     @Autowired
-    public LoginService(LoginDao dao, TokenService tokenService, RedisLikeService redisLikeService, CorpWxSrvc srvc) {
+    public LoginService(LoginDao dao, TokenService tokenService, RedisLikeService redisLikeService, CorpWxSrvc srvc, PublicServer publicServer) {
         this.dao = dao;
         this.tokenService = tokenService;
         this.redisLikeService = redisLikeService;
         this.srvc = srvc;
+        this.publicServer = publicServer;
     }
 
     public ResultVo<UserInfo> login(UserInfo userInfo) {
@@ -44,8 +46,7 @@ public class LoginService {
             }
             dao.insertNewUserToDjUserBase(tempUserInfo);
         }
-        if (!Objects.equals("fromTriageScreen", userInfo.getSid()) &&
-                !userInfo.getPassword().equals(tempUserInfo.getPassword())) {
+        if (!Objects.equals("fromTriageScreen", userInfo.getSid()) && !userInfo.getPassword().equals(tempUserInfo.getPassword())) {
             return ResultVoUtil.fail(ExceptionEnum.INVALID_PASSWORD);
         }
         String token = tokenService.getToken(tempUserInfo);
@@ -79,8 +80,7 @@ public class LoginService {
 
     public ResultVo<List<CodeName>> getWards() {
         String code = TokenUtil.getTokenUserId();
-        List<Integer> roles = dao.getUserRoles(code);
-        if (roles.contains(1) || roles.contains(2) || roles.contains(8)) {
+        if (publicServer.needRule(2, 8, 47)) {
             return ResultVoUtil.success(dao.getAllWards());
         } else {
             return ResultVoUtil.success(dao.getUserWards(code));
@@ -92,9 +92,7 @@ public class LoginService {
     }
 
     private String makeSid(String code, String token, String sid) {
-        String tempToken = token.replaceAll("\\.", "")
-                .replaceAll("_", "")
-                .replaceAll("-", "");
+        String tempToken = token.replaceAll("\\.", "").replaceAll("_", "").replaceAll("-", "");
         String flakeIdSub = "-" + SnowFlakeId.instance().nextId() + "-";
         int random = new Random().nextInt(80);
         String tokenSub = tempToken.substring(random, random + 18);

+ 61 - 113
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.ListUtils;
 import org.jetbrains.annotations.NotNull;
@@ -210,10 +211,54 @@ public class YiZhuLuRuServer {
      * @param times 次数
      * @return
      */
-    public ResultVo<List<XinZhenYzActOrder>> getParentOrders(String patNo, String times) {
+    public ResultVo<List<XinZhenYzActOrder>> getParentOrders(String patNo, Integer times) {
         return ResultVoUtil.success(dao.getParentOrders(patNo, times));
     }
 
+    public ResultVo<String> correctSubOrders(String patNo, Integer times) {
+        QueryWrapper<?> qw = new QueryWrapper<>();
+        qw.eq("a.inpatient_no", patNo)
+                .eq("a.admiss_times", times)
+                .eq("a.status_flag", "1")
+                .eq("a.enter_oper", TokenUtil.getTokenUserId());
+        List<XinZhenYzActOrder> list = dao.huoQuYiZhuShuJu(qw);
+        if (ListUtil.isBlank(list)) {
+            return ResultVoUtil.success();
+        }
+        // 父医嘱
+        Map<BigDecimal, XinZhenYzActOrder> parentOrder = new HashMap<>(list.size());
+        list.forEach(item -> parentOrder.put(item.getActOrderNo(), item));
+        list.forEach(item -> {
+            if (item.getParentNo() != null && parentOrder.containsKey(item.getParentNo())) {
+                XinZhenYzActOrder order = parentOrder.get(item.getParentNo());
+                // 判断是否需要更新
+                if (updateSubOrders(order, item)) {
+                    dao.updateSubOrderStatus(item.getActOrderNo(), order);
+                }
+            }
+        });
+        return ResultVoUtil.success();
+    }
+
+    private boolean updateSubOrders(XinZhenYzActOrder parent, XinZhenYzActOrder children) {
+        if (!parent.getOrderTime().equals(children.getOrderTime())) {
+            return true;
+        }
+        if (!parent.getStartTime().equals(children.getStartTime())) {
+            return true;
+        }
+        if (parent.getEndTime() != null && !parent.getEndTime().equals(children.getEndTime())) {
+            return true;
+        }
+        if (!parent.getSupplyCode().equals(children.getSupplyCode())) {
+            return true;
+        }
+        if (!parent.getFrequCode().equals(children.getFrequCode())) {
+            return true;
+        }
+        return false;
+    }
+
 
     /**
      * 确认医嘱 , 这个是最新的正确的
@@ -347,14 +392,9 @@ public class YiZhuLuRuServer {
         Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
         XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
         XinZhenYzActOrder data = param.getData();
-        // 设置 药房
-        data.setGroupNo(param.getGroupNo());
         if (ITEM.equals(data.getSerial().trim())) {
             data.setGroupNo("00");
         }
-        if (data.getParentNo() != null) {
-            data.setSupplyCode("044");
-        }
         // 药品的 code
         Set<String> yaoPingCode = new HashSet<>();
         // 项目的 code
@@ -437,7 +477,7 @@ public class YiZhuLuRuServer {
 
         param.getList().forEach(item -> {
             String key = item.getParentNo() != null ? item.getParentNo().stripTrailingZeros().toPlainString() : "";
-            item.setGroupNo(param.getGroupNo());
+//            item.setGroupNo(param.getGroupNo());
             if (StringUtil.notBlank(key)) {
                 if (fatherAndSonDoctorSAdvice.containsKey(key)) {
                     item.setParentNo(fatherAndSonDoctorSAdvice.get(key).getActOrderNo());
@@ -738,12 +778,17 @@ public class YiZhuLuRuServer {
         return ResultVoUtil.success(dao.huoQuZhiXinKeShi(StringUtil.isContainChinese(code)));
     }
 
+    /**
+     * 这里是校验模板的数据
+     *
+     * @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());
@@ -751,115 +796,12 @@ public class YiZhuLuRuServer {
                 yaoPingCode.add(item.getOrderCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
             }
         }
-        XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
-        Map<String, Object> errorMessage = checkData(param.getList().get(0), getDrugInformation(yaoPingCode, huanZheXinXi == null ? null : huanZheXinXi.getZkWard()), getProjectInformation(xiangMuCode), huanZheXinXi, doctorLevel);
+        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);
     }
 
 
-    /**
-     * 保存医嘱
-     *
-     * @param param 医嘱数据
-     * @return 返回错误提示或者别的
-     */
-    @Deprecated
-    public ResultVo<Map<String, Object>> saveTheDoctorSOrder(XinZhenYiZhu param) {
-        log.info("上传数据:{}", JSON.toJSONStringWithDateFormat(param, DateUtil.DEFAULT_PATTERN));
-        // 获取医生开药品的权限
-        Integer doctorLevel = dao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
-        // 药品的 code
-        Set<String> yaoPingCode = new HashSet<>();
-        // 项目的 code
-        Set<String> xiangMuCode = new HashSet<>();
-        // id 做 map
-        Map<String, XinZhenYzActOrder> doctorSOrderMap = new HashMap<>(param.getList().size());
-
-        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());
-            }
-            doctorSOrderMap.put(item.getId(), item);
-        }
-        // 医嘱 map {医嘱号: { 具体数据 }}
-        // 获取患者信息
-        XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
-        if (huanZheXinXi == null) {
-            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "没有查询到患者的在院信息。");
-        }
-        // 设置婴儿标志
-        huanZheXinXi.setInfantFlag(PublicServer.getInfantFlag(huanZheXinXi.getInpatientNo()));
-
-        boolean isThereAnyErrorMessage = false;
-        Map<String, Object> map = new HashMap<>();
-        Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, huanZheXinXi.getZkWard());
-        Map<String, List<XinZhenYzActOrder>> project = getProjectInformation(xiangMuCode);
-
-        int index = 0;
-        for (XinZhenYzActOrder item : param.getList()) {
-            Map<String, Object> errorMessageMap = checkData(item, drug, project, huanZheXinXi, doctorLevel);
-            if (!errorMessageMap.isEmpty()) {
-                if (!isThereAnyErrorMessage && errorMessageMap.containsKey("error")) {
-                    isThereAnyErrorMessage = true;
-                }
-                map.put(item.getId(), errorMessageMap);
-            }
-            errorMessageMap.put("data", item);
-            errorMessageMap.put("index", index++);
-        }
-
-        if (isThereAnyErrorMessage) {
-            return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改错误的医嘱", map);
-        }
-        /* 在这里上传医嘱,一点错误信息都没了的话 */
-        // 这个是 抗菌药物的信息
-        List<YzActRecordKss> kssList = new ArrayList<>();
-        // 这个是 转科医嘱的
-        ZyOrderZk transferData = null;
-        for (XinZhenYzActOrder item : param.getList()) {
-            // 生成医嘱号
-            item.setActOrderNo(BigDecimal.valueOf(publicServer.getActOrderNo()));
-
-            if (item.getParentNo() != null && doctorSOrderMap.containsKey(item.getParentNo().stripTrailingZeros().toPlainString())) {
-                item.setParentNo(doctorSOrderMap.get(item.getParentNo().stripTrailingZeros().toPlainString()).getActOrderNo());
-            }
-
-            if (item.getKjywFlag() != null && item.getKjywFlag() == 1) {
-                YzActRecordKss kss = new YzActRecordKss();
-                kss.setActOrderNo(item.getActOrderNo());
-                kss.setChargeCode(item.getOrderCode());
-                kss.setYyfs(item.getYyfs());
-                kss.setSsqk(item.getSsqk());
-                kss.setYysj(item.getYysj());
-                kssList.add(kss);
-            }
-            if (ZK_CODE.equals(item.getOrderCode())) {
-                transferData = new ZyOrderZk();
-                transferData.setActOrderNo(item.getActOrderNo().stripTrailingZeros().toPlainString()).setNewDept(item.getZkDeptCode()).setNewWard(item.getZkWardCode());
-            }
-
-        }
-        // 执行人
-        String inputCode = TokenUtil.getTokenUserId();
-        // 判断患者是否结算了
-        publicServer.huanZheJieSuan(param.getInpatientNo(), param.getAdmissTimes());
-        if (ListUtil.notBlank(kssList)) {
-            dao.shanChuYuanKuangJunYaoWu(kssList);
-            dao.chaRuKuangJunYaoWuXinXi(huanZheXinXi.getInpatientNo(), huanZheXinXi.getAdmissTimes(), inputCode, kssList);
-        }
-        if (transferData != null) {
-            transferData.setOldWard(huanZheXinXi.getDeptCode()).setOldDept(huanZheXinXi.getSmallDept());
-            dao.insertDoctorSOrder(transferData);
-        }
-        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(map);
-    }
-
     public ResultVo<String> doesTheTemplateExist(String name) {
         if (dao.duplicateTemplateName(name, TokenUtil.getTokenUserId()) == 0) {
             return ResultVoUtil.success();
@@ -867,6 +809,12 @@ public class YiZhuLuRuServer {
         return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "模板名称重复");
     }
 
+    /**
+     * 保存模板数据
+     *
+     * @param param
+     * @return
+     */
     public ResultVo<String> saveTemplate(YzOrderPattern param) {
         // 如果名字重复了,那么就修改原来的模板
         YzOrderPattern yzOrderPattern = dao.yuanLaiDeMuBanBianMa(param.getPatternName(), TokenUtil.getTokenUserId());
@@ -892,9 +840,9 @@ public class YiZhuLuRuServer {
 
         param.setPyCode(py.length() > 9 ? py.substring(0, 9) : py);
         param.setDCode(wb.length() > 9 ? wb.substring(0, 9) : wb);
+
         param.setInputId(TokenUtil.getTokenUserId());
         param.setDeptCode(userInfo.getDeptCode());
-
         dao.chaRuMuBan(param);
 
         Map<String, XinZhenYzActOrder> map = param.getList().stream().collect(Collectors.toMap(XinZhenYzActOrder::getId, a -> a, (k1, k2) -> k1));