|  | @@ -154,10 +154,10 @@ public class XiangMuLuRuService {
 | 
	
		
			
				|  |  |              zhiXinKeShi.add(userInfo.getDeptCode());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<ZyDetailCharge> xiangMu = new ArrayList<>();
 | 
	
		
			
				|  |  | -        List<ZyDetailCharge> yaoPin = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<ZyDetailCharge> project = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<ZyDetailCharge> drug = new ArrayList<>();
 | 
	
		
			
				|  |  |          List<ZyDetailCharge> tuiFeiList = new ArrayList<>();
 | 
	
		
			
				|  |  | -        List<ZyDetailCharge> yaoPingDan = new ArrayList<>();
 | 
	
		
			
				|  |  | +        List<ZyDetailCharge> medicalTechnologyDrugReturnForm = new ArrayList<>();
 | 
	
		
			
				|  |  |          // 保存被退费的流水号,把这些流水号修改为 -1 代表已经退费了
 | 
	
		
			
				|  |  |          List<Integer> updateRefundFlag = new ArrayList<>();
 | 
	
		
			
				|  |  |          // 把 药品 改成 -1 代表已经退了 -2 代表申请 -3 代表拒绝
 | 
	
	
		
			
				|  | @@ -191,21 +191,21 @@ public class XiangMuLuRuService {
 | 
	
		
			
				|  |  |              if (BigUtils.bigDaYu(item.getOrderNo(), 10)) {
 | 
	
		
			
				|  |  |                  item.setOrderNo(new BigDecimal(0));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            // 00 是项目
 | 
	
		
			
				|  |  |              if ("00".equals(item.getSerial())) {
 | 
	
		
			
				|  |  | -                maxDetailSn = setRefund(xiangMu, tuiFeiList, updateRefundFlag, maxDetailSn, item);
 | 
	
		
			
				|  |  | +                maxDetailSn = setRefund(project, tuiFeiList, updateRefundFlag, maxDetailSn, item);
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                  if (item.getOrderNo().equals(new BigDecimal(3))) {
 | 
	
		
			
				|  |  | -                    // todo 口服药不能退
 | 
	
		
			
				|  |  |                      if (!zhiXinKeShi.contains(item.getExecUnit())) {
 | 
	
		
			
				|  |  |                          return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号:【%s】,此药品为医技科室录入,请对应的医技科室退费。", item.getDetailSn()));
 | 
	
		
			
				|  |  |                      } else {
 | 
	
		
			
				|  |  | -                        maxDetailSn = setRefund(xiangMu, tuiFeiList, updateRefundFlag, maxDetailSn, item);
 | 
	
		
			
				|  |  | -                        yaoPingDan.add(item);
 | 
	
		
			
				|  |  | +                        maxDetailSn = setRefund(project, tuiFeiList, updateRefundFlag, maxDetailSn, item);
 | 
	
		
			
				|  |  | +                        medicalTechnologyDrugReturnForm.add(item);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  } else {
 | 
	
		
			
				|  |  | -                    // 数量变成负数
 | 
	
		
			
				|  |  | +                    // 数量设置为负数
 | 
	
		
			
				|  |  |                      item.setChargeAmount(item.getChargeAmount().negate());
 | 
	
		
			
				|  |  | -                    yaoPin.add(item);
 | 
	
		
			
				|  |  | +                    drug.add(item);
 | 
	
		
			
				|  |  |                      updateDrugLabel.add(item.getDetailSn());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -213,16 +213,17 @@ public class XiangMuLuRuService {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 护士退药单
 | 
	
		
			
				|  |  | -        if (ListUtil.notBlank(yaoPin)) {
 | 
	
		
			
				|  |  | -            Map<String, ZyDetailCharge> getDrugClass = dao.getDrugClass(yaoPin).stream().collect(
 | 
	
		
			
				|  |  | +        if (ListUtil.notBlank(drug)) {
 | 
	
		
			
				|  |  | +            Map<String, ZyDetailCharge> getDrugClass = dao.getDrugClass(drug).stream().collect(
 | 
	
		
			
				|  |  |                      Collectors.toMap(ZyDetailCharge::getChargeCodeMx, a -> a, (k1, k2) -> k1)
 | 
	
		
			
				|  |  |              );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            for (ZyDetailCharge item : yaoPin) {
 | 
	
		
			
				|  |  | +            for (ZyDetailCharge item : drug) {
 | 
	
		
			
				|  |  |                  ZyDetailCharge a = getDrugClass.get(item.getChargeCodeMx());
 | 
	
		
			
				|  |  |                  if (a == null) {
 | 
	
		
			
				|  |  |                      return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号:【%s】,药品无法退费 原因没有查询到原药品请联系药库,编码为:【%s】。", item.getDetailSn(), item.getChargeCodeMx()));
 | 
	
		
			
				|  |  |                  } else {
 | 
	
		
			
				|  |  | +                    // 口服药无法退费
 | 
	
		
			
				|  |  |                      if (a.getDrugClass().equals("d")) {
 | 
	
		
			
				|  |  |                          return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("流水号:【%s】,药品无法退费,原因口服药无法退费,开退费医嘱也不行", item.getDetailSn()));
 | 
	
		
			
				|  |  |                      }
 | 
	
	
		
			
				|  | @@ -231,30 +232,31 @@ public class XiangMuLuRuService {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            ZyActpatient patientInf = publicServer.huoQuHuanZheXinXi(param.getInpatientNo());
 | 
	
		
			
				|  |  | +            ZyActpatient patientInfo = publicServer.huoQuHuanZheXinXi(param.getInpatientNo());
 | 
	
		
			
				|  |  |              Integer pageNo = publicServer.getTheDrugListNo();
 | 
	
		
			
				|  |  |              // 药品单号
 | 
	
		
			
				|  |  |              String groupNo = publicServer.getGroupNo();
 | 
	
		
			
				|  |  |              // 退药单汇总
 | 
	
		
			
				|  |  | -            dao.drugReturnForm(pageNo, patientInf.getWard(), TokenUtil.getTokenUserId(), groupNo);
 | 
	
		
			
				|  |  | +            dao.drugReturnForm(pageNo, patientInfo.getWard(), TokenUtil.getTokenUserId(), groupNo);
 | 
	
		
			
				|  |  |              // 退药明细
 | 
	
		
			
				|  |  | -            dao.detailsOfDrugReturnForm(yaoPin, patientInf.getInpatientNo(), patientInf.getAdmissTimes(),
 | 
	
		
			
				|  |  | -                    patientInf.getName(), patientInf.getBedNo(), patientInf.getWard(),
 | 
	
		
			
				|  |  | +            dao.detailsOfDrugReturnForm(drug, patientInfo.getInpatientNo(), patientInfo.getAdmissTimes(),
 | 
	
		
			
				|  |  | +                    patientInfo.getName(), patientInfo.getBedNo(), patientInfo.getWard(),
 | 
	
		
			
				|  |  |                      infantFlag, groupNo, TokenUtil.getTokenUserId(), pageNo, ledgerSn);
 | 
	
		
			
				|  |  | +            // 药品的退药 标准 为 -2 申请退药
 | 
	
		
			
				|  |  |              dao.genXinZhenShuTuiFeiLiuShui(param.getInpatientNo(), param.getAdmissTimes(), ledgerSn, updateDrugLabel, -2);
 | 
	
		
			
				|  |  | -            log.info("项目录入==》药品退费,操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(yaoPin, DateUtil.DEFAULT_PATTERN));
 | 
	
		
			
				|  |  | +            log.info("项目录入==》药品退费,操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(drug, DateUtil.DEFAULT_PATTERN));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 医技科室药品单
 | 
	
		
			
				|  |  | -        if (ListUtil.notBlank(yaoPingDan)) {
 | 
	
		
			
				|  |  | -            dao.shenQingYaoPing(param, yaoPingDan, infantFlag, ledgerSn, TokenUtil.getTokenUserId());
 | 
	
		
			
				|  |  | +        if (ListUtil.notBlank(medicalTechnologyDrugReturnForm)) {
 | 
	
		
			
				|  |  | +            dao.shenQingYaoPing(param, medicalTechnologyDrugReturnForm, infantFlag, ledgerSn, TokenUtil.getTokenUserId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (ListUtil.notBlank(xiangMu)) {
 | 
	
		
			
				|  |  | -            List<List<ZyDetailCharge>> fenGe = ListUtils.partition(xiangMu, 20);
 | 
	
		
			
				|  |  | +        if (ListUtil.notBlank(project)) {
 | 
	
		
			
				|  |  | +            List<List<ZyDetailCharge>> fenGe = ListUtils.partition(project, 20);
 | 
	
		
			
				|  |  |              fenGe.forEach(dao::xiangMuTuiFei);
 | 
	
		
			
				|  |  |              dao.genXinZhenShuTuiFeiLiuShui(param.getInpatientNo(), param.getAdmissTimes(), ledgerSn, updateRefundFlag, -1);
 | 
	
		
			
				|  |  | -            log.info("项目录入==》项目退费,操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(xiangMu, DateUtil.DEFAULT_PATTERN));
 | 
	
		
			
				|  |  | +            log.info("项目录入==》项目退费,操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(project, DateUtil.DEFAULT_PATTERN));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "退费成功。");
 | 
	
	
		
			
				|  | @@ -743,7 +745,6 @@ public class XiangMuLuRuService {
 | 
	
		
			
				|  |  |              String key = item.getInpatientNo() + item.getAdmissTimes() + item.getDetailSn() + item.getChargeCodeMx();
 | 
	
		
			
				|  |  |              yuErPiPei.put(key, item);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        // TODO: 2022/1/11 这里需要优化 把计算余额的放到程序里面来计算
 | 
	
		
			
				|  |  |          for (int i = 0, len = zhenShuFeiYong.size(); i < len; i++) {
 | 
	
		
			
				|  |  |              ZyDetailCharge zy = zhenShuFeiYong.get(i);
 | 
	
		
			
				|  |  |              String key = zy.getInpatientNo() + zy.getAdmissTimes() + zy.getDetailSn() + zy.getChargeCodeMx();
 |