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