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