Explorar el Código

作废医嘱时先停止医嘱

xiaochan hace 2 años
padre
commit
46742a1a04

+ 4 - 0
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/OrderQuashDao.java

@@ -90,4 +90,8 @@ public interface OrderQuashDao extends BaseMapper<ReqOrderQuash> {
 
     @Delete("delete yz_act_order where act_order_no = #{orderNo}")
     void delYzOrder(@Param("orderNo") BigDecimal orderNo);
+
+    @Update("update yz_act_order set end_time = getdate() where act_order_no = #{orderNo} and end_time is null")
+    void stopOrder(@Param("orderNo") BigDecimal orderNo);
+
 }

+ 27 - 12
src/main/java/thyyxxk/webserver/service/hospitalizationCosts/HospitalizationCostsService.java

@@ -52,11 +52,9 @@ public class HospitalizationCostsService {
         private List<String> key;
         private List<ZyDetailChargeTable> feeList;
 
-        // 3221
         public void setFeeList(List<ZyDetailChargeTable> list) {
             feeList = list;
             if (ListUtil.notBlank(list)) {
-
                 if (key == null) {
                     key = new ArrayList<>();
                 }
@@ -305,21 +303,13 @@ public class HospitalizationCostsService {
         return clone;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public int thereAreNoRestrictionsOnRefunds(RefundParam param) {
-        QueryWrapper<ZyDetailChargeTable> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("inpatient_no", param.getPatNo())
-                .eq("admiss_times", param.getTimes())
-                .in("cast(ledger_sn as varchar(500)) + '_' + cast(detail_sn as varchar(500))", param.getKey())
-                .gt("charge_fee", 0)
-                .isNull("ori_detail_sn");
-
+    public int refundsByQueryWrapper(QueryWrapper<ZyDetailChargeTable> queryWrapper, String patNo, Integer times) {
         List<ZyDetailChargeTable> list = dao.selectList(queryWrapper);
         if (ListUtil.isBlank(list)) {
             return 0;
         }
 
-        int maxDetailSn = publicServer.getMaxDetailSn(param.getPatNo(), param.getTimes());
+        int maxDetailSn = publicServer.getMaxDetailSn(patNo, times);
         List<ZyDetailChargeTable> refundOnly = new ArrayList<>();
 
         for (ZyDetailChargeTable item : list) {
@@ -337,5 +327,30 @@ public class HospitalizationCostsService {
         return list.size();
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public int thereAreNoRestrictionsOnRefunds(RefundParam param) {
+        QueryWrapper<ZyDetailChargeTable> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("inpatient_no", param.getPatNo())
+                .eq("admiss_times", param.getTimes())
+                .in("cast(ledger_sn as varchar(500)) + '_' + cast(detail_sn as varchar(500))", param.getKey())
+                .gt("charge_fee", 0)
+                .isNull("ori_detail_sn");
+
+        return refundsByQueryWrapper(queryWrapper, param.getPatNo(), param.getTimes());
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public int refundsByPatientOrder(String patNo, Integer times, BigDecimal orderNo) {
+        QueryWrapper<ZyDetailChargeTable> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("inpatient_no", patNo)
+                .eq("admiss_times", times)
+                .eq("order_no", orderNo)
+                .gt("charge_fee", 0)
+                .isNull("ori_detail_sn");
+
+        return refundsByQueryWrapper(queryWrapper, patNo, times);
+    }
+
 
 }

+ 33 - 52
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/CaoYaoYiZhuService.java

@@ -6,7 +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.apache.commons.collections4.ListUtils;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
@@ -16,7 +16,6 @@ import thyyxxk.webserver.dao.his.zhuyuanyisheng.CaoYaoYiZhuDao;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
-import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.CaoYaoChaXunTiaoJian;
 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.YzActOrderCy;
 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.YzActOrderCyDetail;
@@ -25,6 +24,7 @@ import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.XinZhenYiZhu;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.XinZhenYzActOrder;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.YiZhuMingChen;
 import thyyxxk.webserver.service.PublicServer;
+import thyyxxk.webserver.service.hospitalizationCosts.HospitalizationCostsService;
 import thyyxxk.webserver.utils.*;
 
 import java.math.BigDecimal;
@@ -46,13 +46,15 @@ public class CaoYaoYiZhuService {
     private final YiZhuLuRuDao yiZhuLuRuDao;
     private final YiZhuLuRuServer yiZhuLuRuServer;
     private final XiangMuLuRuDao xiangMuLuRuDao;
+    private final HospitalizationCostsService hospitalizationCostsService;
 
-    public CaoYaoYiZhuService(CaoYaoYiZhuDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, YiZhuLuRuServer yiZhuLuRuServer, XiangMuLuRuDao xiangMuLuRuDao) {
+    public CaoYaoYiZhuService(CaoYaoYiZhuDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, YiZhuLuRuServer yiZhuLuRuServer, XiangMuLuRuDao xiangMuLuRuDao, HospitalizationCostsService hospitalizationCostsService) {
         this.dao = dao;
         this.publicServer = publicServer;
         this.yiZhuLuRuDao = yiZhuLuRuDao;
         this.yiZhuLuRuServer = yiZhuLuRuServer;
         this.xiangMuLuRuDao = xiangMuLuRuDao;
+        this.hospitalizationCostsService = hospitalizationCostsService;
     }
 
     private CaoYaoYiZhuService getThis() {
@@ -175,26 +177,7 @@ public class CaoYaoYiZhuService {
         for (int i = 0; i < param.getList().size(); i++) {
             YzActOrderCyDetail item = param.getList().get(i);
             XinZhenYzActOrder feiYongXinXi = drug.get(item.getChargeCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
-            List<String> errorMessage = new ArrayList<>();
-            if (feiYongXinXi == null) {
-                errorMessage.add("没有找到药品信息,请联系药剂药房。");
-            } else {
-                if (feiYongXinXi.getDelFlag() == 1) {
-                    errorMessage.add("药品已经被停用了,请联系药剂科");
-                }
-                if (feiYongXinXi.getYpLevel() > doctorLevel) {
-                    errorMessage.add("您没有开此药品的权限");
-                }
-                if (BigUtils.bigDaYu(item.getQuantity(), feiYongXinXi.getStockAmount())) {
-                    errorMessage.add("药品领量大于药品的库存,当前库存量" + feiYongXinXi.getStockAmount().stripTrailingZeros().toPlainString());
-                }
-                if (feiYongXinXi.getDeptRestrictions() > 0) {
-                    errorMessage.add("该药品禁止在患者所在的科室使用。");
-                }
-                if (feiYongXinXi.getVisibleFlagZy() == 1) {
-                    errorMessage.add("该药品禁止住院患者使用。");
-                }
-            }
+            List<String> errorMessage = limitation(feiYongXinXi, doctorLevel, item);
             if (ListUtil.notBlank(errorMessage)) {
                 errorMap.put("第" + (i + 1) + "个,名称:" + item.getChargeCodeName(), errorMessage);
             }
@@ -222,6 +205,31 @@ public class CaoYaoYiZhuService {
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
+    @NotNull
+    private static List<String> limitation(XinZhenYzActOrder feiYongXinXi, Integer doctorLevel, YzActOrderCyDetail item) {
+        List<String> errorMessage = new ArrayList<>();
+        if (feiYongXinXi == null) {
+            errorMessage.add("没有找到药品信息,请联系药剂药房。");
+        } else {
+            if (feiYongXinXi.getDelFlag() == 1) {
+                errorMessage.add("药品已经被停用了,请联系药剂科");
+            }
+            if (feiYongXinXi.getYpLevel() > doctorLevel) {
+                errorMessage.add("您没有开此药品的权限");
+            }
+            if (BigUtils.bigDaYu(item.getQuantity(), feiYongXinXi.getStockAmount())) {
+                errorMessage.add("药品领量大于药品的库存,当前库存量" + feiYongXinXi.getStockAmount().stripTrailingZeros().toPlainString());
+            }
+            if (feiYongXinXi.getDeptRestrictions() > 0) {
+                errorMessage.add("该药品禁止在患者所在的科室使用。");
+            }
+            if (feiYongXinXi.getVisibleFlagZy() == 1) {
+                errorMessage.add("该药品禁止住院患者使用。");
+            }
+        }
+        return errorMessage;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public void generateHerbs(YzActOrderCy param, XinZhenYiZhu huanZheXinXi) {
         dao.chaRuCaoYaoYiZhu(param, huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), param.getExecDept());
@@ -276,36 +284,9 @@ public class CaoYaoYiZhuService {
         log.info("删除草药==》操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(cy, GetDateFormat.DATE_TIME));
         dao.genXingCaoYaoShanChuBiaoZhi(patNo, times, orderNo);
         dao.shanChuYiZhu(orderNo);
-        feeRefunds(cy);
+        // 根据医嘱号退费
+        hospitalizationCostsService.refundsByPatientOrder(cy.getInpatientNo(), cy.getAdmissTimes(), cy.getOrderNo());
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
-    /**
-     * 草药退费
-     *
-     * @param cy 草药信息
-     */
-    private void feeRefunds(YzActOrderCy cy) {
-        List<ZyDetailCharge> cyList = dao.caoYaoFeiYong(cy);
-        int maxDetailSn = publicServer.getMaxDetailSn(cy.getInpatientNo(), cy.getAdmissTimes());
-        String userCode = TokenUtil.getTokenUserId();
-        if (ListUtil.notBlank(cyList)) {
-            List<ZyDetailCharge> refundArray = new ArrayList<>(cyList.size());
-            for (ZyDetailCharge item : cyList) {
-                item.setChargeFee(item.getChargeFee().negate());
-                item.setChargeAmount(item.getChargeAmount().negate());
-                item.setOpIdCode(userCode);
-                item.setOriDetailSn(item.getDetailSn());
-                // 设置 流水号
-                item.setDetailSn(maxDetailSn += 1);
-                item.setOrderNo(item.getOrderNo());
-                item.setNewOrderNo(item.getOrderNo());
-                refundArray.add(item);
-            }
-            List<List<ZyDetailCharge>> fenGe = ListUtils.partition(refundArray, 20);
-            fenGe.forEach(xiangMuLuRuDao::xiangMuTuiFei);
-            dao.modifyTheExpenseFlag(cy);
-        }
-    }
-
 }

+ 4 - 0
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/OrderQuashService.java

@@ -38,6 +38,10 @@ public class OrderQuashService {
         if (orderDate == null) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "原医嘱已不存在。");
         }
+
+        // 申请作废先一步要停止医嘱
+        dao.stopOrder(param.getActOrderNo());
+
         Date now = new Date();
         param.setReqId(TokenUtil.getTokenUserId())
                 .setReqDatetime(now);