|
@@ -50,8 +50,8 @@ public class XiangMuLuRuService {
|
|
|
* @return 返回患者费用
|
|
|
*/
|
|
|
public ResultVo<List<ZyDetailCharge>> getHuanZheFeiYong(ZyDetailCharge param) {
|
|
|
- log.info("查询患者费用==》住院号{},住院次数:{},项目名称:{},录入日期:{},费用类型:{}", param.getInpatientNo(), param.getAdmissTimes(),
|
|
|
- param.getChargeCode(), param.getStartTime(), param.getOrderNo());
|
|
|
+ log.info("查询患者费用==》住院号{},住院次数:{},项目名称:{},录入日期:{},费用类型:{},科室:{}", param.getInpatientNo(), param.getAdmissTimes(),
|
|
|
+ param.getChargeCode(), param.getStartTime(), param.getOrderNo(), param.getDept());
|
|
|
int infantFlag = 0;
|
|
|
// 如果是婴儿的话那么就需要截取 字符串了 在通过婴儿标识来判断
|
|
|
if (param.getInpatientNo().contains("$")) {
|
|
@@ -59,18 +59,19 @@ public class XiangMuLuRuService {
|
|
|
infantFlag = 1;
|
|
|
}
|
|
|
List<ZyDetailCharge> list = dao.getHuanZheFeiYong(param.getInpatientNo(), param.getAdmissTimes(), param.getChargeCode(), infantFlag,
|
|
|
- param.getStartTime(), param.getOrderNo());
|
|
|
+ param.getStartTime(), param.getOrderNo(), param.getDept());
|
|
|
+ List<ZyDetailCharge> tuiFeiList = dao.tuiFeiList(param.getInpatientNo(), param.getAdmissTimes());
|
|
|
Map<Integer, Integer> map = new HashMap<>();
|
|
|
- for (int i = 0; i < list.size(); i++) {
|
|
|
- // 判断一下这一条数据 是否为 退费数据 再把原数据和 本身添加一个退费的 flag
|
|
|
- if (map.containsKey(list.get(i).getOriDetailSn())) {
|
|
|
- // 把当前的数据 添加一个有 退费标志的
|
|
|
- list.get(i).setTuiFeiFlag(1);
|
|
|
- // 在吧 对应退费的原数据 也添加一个
|
|
|
- list.get(map.get(list.get(i).getOriDetailSn())).setTuiFeiFlag(1);
|
|
|
- } else {
|
|
|
- // 保存下标
|
|
|
- map.put(list.get(i).getDetailSn(), i);
|
|
|
+ for (ZyDetailCharge zyDetailCharge : tuiFeiList) {
|
|
|
+ map.put(zyDetailCharge.getOriDetailSn(), zyDetailCharge.getDetailSn());
|
|
|
+ }
|
|
|
+ for (ZyDetailCharge zyDetailCharge : list) {
|
|
|
+ // 判断 退费的数据
|
|
|
+ if (map.containsKey(zyDetailCharge.getDetailSn())) {
|
|
|
+ zyDetailCharge.setTuiFeiFlag(1);
|
|
|
+ }
|
|
|
+ if (zyDetailCharge.getOriDetailSn() != null) {
|
|
|
+ zyDetailCharge.setTuiFeiFlag(1);
|
|
|
}
|
|
|
}
|
|
|
return ResultVoUtil.success(list);
|
|
@@ -92,14 +93,16 @@ public class XiangMuLuRuService {
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public ResultVo<String> xiangMuTuiFei(ZyDetailCharge param) {
|
|
|
- if (param.getList().size() > 100) {
|
|
|
+ if (param.getList().isEmpty()) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请先选择需要退费的数据,一次性退费不得超过100条");
|
|
|
+ } else if (param.getList().size() > 100) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "项目退费一次性大于100条数据");
|
|
|
}
|
|
|
- if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null || param.getLedgerSn() == null || param.getList().size() == 0) {
|
|
|
+ if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null || param.getList().size() == 0) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "患者信息不全");
|
|
|
}
|
|
|
// 判断数据是否为 退费数据
|
|
|
- List<ZyDetailCharge> chaKanSFtuiFei = dao.chaKanSFYiJingTuiFeiLe(param.getInpatientNo(), param.getAdmissTimes(), param.getLedgerSn(), param.getList());
|
|
|
+ List<ZyDetailCharge> chaKanSFtuiFei = dao.chaKanSFYiJingTuiFeiLe(param.getInpatientNo(), param.getAdmissTimes(), param.getList());
|
|
|
|
|
|
for (ZyDetailCharge charge : chaKanSFtuiFei) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为:【%s】已退费,请勿重复退费", charge.getOriDetailSn()));
|
|
@@ -115,7 +118,7 @@ public class XiangMuLuRuService {
|
|
|
List<String> zhiXinKeShi = dao.chaXunZhiZXinKeShi(param.getDeptCode());
|
|
|
|
|
|
// 获取原来的数据
|
|
|
- List<ZyDetailCharge> yuanTuiFeiList = dao.huoQuJuTiFeiYong(param.getInpatientNo(), param.getAdmissTimes(), param.getLedgerSn(), param.getList());
|
|
|
+ List<ZyDetailCharge> yuanTuiFeiList = dao.huoQuJuTiFeiYong(param.getInpatientNo(), param.getAdmissTimes(), param.getList());
|
|
|
// 获取患者的总费用
|
|
|
BigDecimal sum = new BigDecimal(0);
|
|
|
// 退费的list
|
|
@@ -129,14 +132,19 @@ public class XiangMuLuRuService {
|
|
|
}
|
|
|
// 管理员角色可以无视
|
|
|
if (!yongHuJueSe.contains(1)) {
|
|
|
- if (!zhiXinKeShi.contains(pojo.getExecUnit())) {
|
|
|
+ // 人员角色为 3 就不是医技科室 只有医技科室可以退药品
|
|
|
+ if (yongHuJueSe.contains(3)) {
|
|
|
+ if (!zhiXinKeShi.contains(pojo.getExecUnit())) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,请对应的执行科室进行退费。", pojo.getDetailSn()));
|
|
|
+ }
|
|
|
+ // 护士是不可以退药品的
|
|
|
+ if (pojo.getChargeCode().equals("BILL01") || pojo.getChargeCode().equals("BILL02")) {
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,中草药费或西药费,无法退费。", pojo.getDetailSn()));
|
|
|
+ }
|
|
|
+ } else if (!param.getDeptCode().equals(pojo.getExecUnit())) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,请对应的执行科室进行退费。", pojo.getDetailSn()));
|
|
|
}
|
|
|
}
|
|
|
- // 判断如果这个药品的医嘱号 大于0 那么就不能退
|
|
|
- if (pojo.getChargeCode().equals("BILL01") || pojo.getChargeCode().equals("BILL02")) {
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号为【%s】,中草药费或西药费,无法退费。", pojo.getDetailSn()));
|
|
|
- }
|
|
|
sum = sum.add(pojo.getChargeFee().multiply(pojo.getChargeAmount()));
|
|
|
pojo.setChargeFee(pojo.getChargeFee().negate());
|
|
|
pojo.setChargeAmount(pojo.getChargeAmount().negate());
|
|
@@ -170,7 +178,7 @@ public class XiangMuLuRuService {
|
|
|
* @return 返回模板
|
|
|
*/
|
|
|
public ResultVo<List<ZyDetailCharge>> getMuBan(String deptCode) {
|
|
|
- return ResultVoUtil.success(dao.getMuBan(deptCode));
|
|
|
+ return ResultVoUtil.success(dao.getMuBan(deptCode, 1));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -184,14 +192,36 @@ public class XiangMuLuRuService {
|
|
|
return ResultVoUtil.success(dao.getMuBanXinXi(patternName, opIdCode));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取科室
|
|
|
+ *
|
|
|
+ * @return 返回科室信息
|
|
|
+ */
|
|
|
+ public ResultVo<List<GetDropdownBox>> getDept() {
|
|
|
+ return ResultVoUtil.success(dao.getDpet());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取科室
|
|
|
+ *
|
|
|
+ * @return 返回科室信息
|
|
|
+ */
|
|
|
+ public ResultVo<List<GetDropdownBox>> getWard() {
|
|
|
+ return ResultVoUtil.success(dao.getWard());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 通过拼音码 来搜索项目
|
|
|
*
|
|
|
- * @param pyCode 拼音码
|
|
|
+ * @param pyCode 拼音码
|
|
|
+ * @param xiangMuHuoYaoPinFlag 判断是查询项目还是药品 0 - 项目 1- 药品
|
|
|
* @return 返回项目
|
|
|
*/
|
|
|
- public ResultVo<List<ZyDetailCharge>> queryXiangMu(String pyCode) {
|
|
|
- return ResultVoUtil.success(dao.queryXiangMu(pyCode.toUpperCase() + "%"));
|
|
|
+ public ResultVo<List<ZyDetailCharge>> queryXiangMu(String pyCode, Integer xiangMuHuoYaoPinFlag) {
|
|
|
+ if (xiangMuHuoYaoPinFlag == 0) {
|
|
|
+ return ResultVoUtil.success(dao.queryXiangMu(pyCode.toUpperCase() + "%"));
|
|
|
+ }
|
|
|
+ return ResultVoUtil.success();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -205,7 +235,7 @@ public class XiangMuLuRuService {
|
|
|
if (param.getList().size() > 50) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "一次性项目录入大于50条");
|
|
|
}
|
|
|
- if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null || param.getLedgerSn() == null || param.getList().size() == 0
|
|
|
+ if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null || param.getList().size() == 0
|
|
|
|| StringUtil.isBlank(param.getWard()) || StringUtil.isBlank(param.getDept()) || StringUtil.isBlank(param.getZySerialNo())) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "患者信息不全。");
|
|
|
}
|
|
@@ -231,7 +261,7 @@ public class XiangMuLuRuService {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.EXIST_NEGATIVE_FEES);
|
|
|
}
|
|
|
sum = sum.add(zyDetailCharge.getChargeAmount().multiply(zyDetailCharge.getAmount()));
|
|
|
- // 这里不会保存
|
|
|
+ // 这里不会保存单价 只会总价
|
|
|
zyDetailCharge.setChargeAmount(zyDetailCharge.getChargeAmount().multiply(zyDetailCharge.getAmount()));
|
|
|
if (StringUtil.isBlank(zyDetailCharge.getChargeCode())) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "项目编码空值。");
|
|
@@ -239,6 +269,9 @@ public class XiangMuLuRuService {
|
|
|
if (StringUtil.isBlank(zyDetailCharge.getDeptCode())) {
|
|
|
return ResultVoUtil.fail(ExceptionEnum.NULL_POINTER, "执行科室为空。");
|
|
|
}
|
|
|
+ if (zyDetailCharge.getChargeCodeMx() == null) {
|
|
|
+ zyDetailCharge.setChargeCodeMx(zyDetailCharge.getChargeCode());
|
|
|
+ }
|
|
|
}
|
|
|
FeiYongLeiXin fy = JiSuanFeiYong.jiSuan(param.getList(), true);
|
|
|
fy.setTotalCharge(sum);
|