| | |
| | | import org.apache.commons.collections4.MapUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | //import org.springframework.amqp.rabbit.annotation.RabbitListener; |
| | | //import org.springframework.amqp.rabbit.core.RabbitTemplate; |
| | | import org.springframework.amqp.rabbit.annotation.RabbitListener; |
| | | import org.springframework.amqp.rabbit.core.RabbitTemplate; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | private RabbitTemplate rabbitTemplate; |
| | | |
| | | private static final Logger logger = LoggerFactory.getLogger(ConsumptionRecordServiceImpl.class); |
| | | |
| | | |
| | | /** |
| | | * 列表 |
| | |
| | | public ResultBody consumptionAIStart(ConsumptionRequest consumptionRequest) { |
| | | //默认的业务返回码 |
| | | int bcode = -1; |
| | | //记录类型 |
| | | int recordType=ConsumptionConstant.BEFORE_DEDUCTION; |
| | | //业务执行结果 |
| | | boolean isSuccess = false; |
| | | boolean isSuccess = true; |
| | | //业务执行结果信息 |
| | | String reMsg = ""; |
| | | if (VateParams(consumptionRequest)) { |
| | | //先获取这个业务关联的扣费记录 |
| | | List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | //1.先检查是否已经扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { |
| | | //2.没有扣费,检查是否已经预扣费 |
| | |
| | | //4.余额充足 获取要扣的套餐 写预扣费记录 |
| | | if (beforeConsumption(consumptionRequest)) { |
| | | //预扣费成功 |
| | | isSuccess = true; |
| | | reMsg = "预扣费成功!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION; |
| | | } else { |
| | | //预扣费执行失败 |
| | | isSuccess = false; |
| | | reMsg = "预扣费执行失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; |
| | | } |
| | | } else { |
| | | //余额不足 |
| | | isSuccess = false; |
| | | reMsg = "余额不足或获取失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; |
| | | } |
| | |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; |
| | | } |
| | | } else { |
| | | isSuccess = false; |
| | | reMsg = "传入参数有误!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; |
| | | } |
| | | return ResultReturn(consumptionRequest, bcode, reMsg, isSuccess); |
| | | return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); |
| | | } |
| | | |
| | | /** |
| | |
| | | public ResultBody consumptionAIReturn(ConsumptionRequest consumptionRequest) { |
| | | //默认的业务返回码 |
| | | int bcode = -1; |
| | | //记录类型 |
| | | int recordType=ConsumptionConstant.DEDUCTION; |
| | | //业务执行结果 |
| | | boolean isSuccess = false; |
| | | boolean isSuccess = true; |
| | | //业务执行结果信息 |
| | | String reMsg = ""; |
| | | if (VateParams(consumptionRequest)) { |
| | | //先获取这个业务关联的扣费记录 |
| | | List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | |
| | | //1.先检查是否已经扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { |
| | | //2.没有扣费,检查是否已经预扣费 |
| | |
| | | logger.info("医院id:【{}】AI返回结果应该不走预扣,目前确已经预扣!", hospitalId); |
| | | } else { |
| | | //预扣费执行失败 |
| | | isSuccess = false; |
| | | reMsg = "预扣费执行失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; |
| | | return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); |
| | | } |
| | | } else { |
| | | //余额不足 |
| | | isSuccess = false; |
| | | reMsg = "余额不足或获取失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; |
| | | return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); |
| | | } |
| | | } |
| | | if (consumptionBusiess(consumptionRequest, consumptionRecordList)) { |
| | | isSuccess = true; |
| | | reMsg = "该业务扣费成功!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; |
| | | } else { |
| | | isSuccess = false; |
| | | reMsg = "该业务扣费失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; |
| | | } |
| | |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; |
| | | } |
| | | } else { |
| | | isSuccess = false; |
| | | reMsg = "传入参数有误!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; |
| | | } |
| | | return ResultReturn(consumptionRequest, bcode, reMsg, isSuccess); |
| | | return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); |
| | | } |
| | | |
| | | /** |
| | |
| | | public ResultBody consumptionAIFail(ConsumptionRequest consumptionRequest) { |
| | | //默认的业务返回码 |
| | | int bcode = -1; |
| | | //记录类型 |
| | | int recordType = ConsumptionConstant.RETURN_BEFORE_DEDUCTION; |
| | | //业务执行结果 |
| | | boolean isSuccess = false; |
| | | //业务执行结果信息 |
| | |
| | | if (VateParams(consumptionRequest)) { |
| | | //先获取这个业务关联的扣费记录 |
| | | List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | //1.先检查是否已经扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { |
| | | //2.没有扣费,检查是否已经预扣费 |
| | | if (isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { |
| | | //2.1.有预扣费 |
| | | ConsumptionRecord consumptionRecord = consumptionRecordList.stream().filter(f -> f.getRecordType() == ConsumptionConstant.BEFORE_DEDUCTION).collect(Collectors.toList()).get(0); |
| | | ConsumptionRecord consumptionRecord = consumptionRecordList.stream().filter(f -> f.getRecordType() == ConsumptionConstant.BEFORE_DEDUCTION&&f.getProOrderDetailId()>0).collect(Collectors.toList()).get(0); |
| | | //把占用的套餐id还回去 |
| | | Long tempProOrderDetailId=consumptionRecord.getProOrderDetailId(); |
| | | consumptionRecord.setProOrderDetailId(0L); |
| | |
| | | { |
| | | //退预扣记录 |
| | | ConsumptionRecord consumptionRecordNew = new ConsumptionRecord(); |
| | | consumptionRecordNew.setBusinessCode(ConsumptionConstant.RETURN_BEFORE_DEDUCTION); |
| | | consumptionRecordNew.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION); |
| | | consumptionRecordNew.setBusinessId(consumptionRequest.getBusinessId()); |
| | | consumptionRecordNew.setConsumptionCount(consumptionRequest.getConsumptionCount()); |
| | | consumptionRecordNew.setRecordType(ConsumptionConstant.DEDUCTION); |
| | | consumptionRecordNew.setConsumptionCount(0-consumptionRequest.getConsumptionCount()); |
| | | consumptionRecordNew.setRecordType(ConsumptionConstant.RETURN_BEFORE_DEDUCTION); |
| | | consumptionRecordNew.setProOrderDetailId(tempProOrderDetailId); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getLastRecordId()); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); |
| | | if (SaveConsumptionRecord(consumptionRecordNew)) |
| | | { |
| | | isSuccess=true; |
| | | reMsg = "有预扣,写退还预扣成功!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION; |
| | | } |
| | |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; |
| | | } |
| | | } else { |
| | | //3.有扣费记录 |
| | | recordType=ConsumptionConstant.RETURN_DEDUCTION; |
| | | //3.有扣费记录 这种情况的流程,实际业务中不会出现,但理论上应该这样处理 |
| | | //3.1 退还账户 |
| | | //获取预扣的时候占住的套餐id |
| | | ConsumptionRecord consumptionRecord = consumptionRecordList.stream().filter(f -> f.getRecordType() == ConsumptionConstant.DEDUCTION).collect(Collectors.toList()).get(0); |
| | |
| | | //退费 |
| | | boolean consumptionRe = productOrderDetailService.saveOrUpdate(productOrderDetail); |
| | | if (consumptionRe) { |
| | | //退费成功 |
| | | //3.2 写退费记录 |
| | | ConsumptionRecord consumptionRecordNew = new ConsumptionRecord(); |
| | | consumptionRecordNew.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION); |
| | | consumptionRecordNew.setBusinessId(consumptionRecord.getBusinessId()); |
| | | consumptionRecordNew.setConsumptionCount(consumptionRecord.getConsumptionCount()); |
| | | consumptionRecordNew.setRecordType(ConsumptionConstant.RETURN_DEDUCTION); |
| | | consumptionRecordNew.setProOrderDetailId(productOrderDetail.getId()); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getLastRecordId()); |
| | | if (SaveConsumptionRecord(consumptionRecordNew)) { |
| | | //写退费记录成功 |
| | | isSuccess=true; |
| | | reMsg = "退还扣费成功!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION; |
| | | //更新扣费记录 还回占用套餐 |
| | | consumptionRecord.setProOrderDetailId(0L); |
| | | consumptionRecord.setUpdateTime(new Date()); |
| | | if (SaveConsumptionRecord(consumptionRecord)) |
| | | { |
| | | //退费成功 |
| | | //3.2 写退费记录 |
| | | ConsumptionRecord consumptionRecordNew = new ConsumptionRecord(); |
| | | consumptionRecordNew.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION); |
| | | consumptionRecordNew.setBusinessId(consumptionRecord.getBusinessId()); |
| | | consumptionRecordNew.setConsumptionCount(0-consumptionRecord.getConsumptionCount()); |
| | | consumptionRecordNew.setRecordType(ConsumptionConstant.RETURN_DEDUCTION); |
| | | consumptionRecordNew.setProOrderDetailId(productOrderDetail.getId()); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); |
| | | if (SaveConsumptionRecord(consumptionRecordNew)) { |
| | | //写退费记录成功 |
| | | isSuccess=true; |
| | | reMsg = "退还扣费成功!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION; |
| | | } |
| | | else |
| | | { |
| | | reMsg = "退还扣费失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | reMsg = "退还扣费失败!"; |
| | | //更新扣费失败 |
| | | reMsg = "更新扣费失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; |
| | | } |
| | | } |
| | |
| | | reMsg = "传入参数有误!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; |
| | | } |
| | | return ResultReturn(consumptionRequest, bcode, reMsg, isSuccess); |
| | | return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); |
| | | } |
| | | |
| | | /** |
| | |
| | | public ResultBody consumptionArtificial(ConsumptionRequest consumptionRequest) { |
| | | //默认的业务返回码 |
| | | int bcode = -1; |
| | | //记录类型 |
| | | int recordType = ConsumptionConstant.DEDUCTION; |
| | | //业务执行结果 |
| | | boolean isSuccess = false; |
| | | //业务执行结果信息 |
| | |
| | | if (VateParams(consumptionRequest)) { |
| | | //先获取这个业务关联的扣费记录 |
| | | List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | //1.先检查是否已经扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { |
| | | //2.没有扣费,检查是否已经预扣费 |
| | |
| | | //预扣费执行失败 |
| | | reMsg = "预扣费执行失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; |
| | | return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); |
| | | } |
| | | else |
| | | { |
| | | //发起了一个新的预扣,需要更新扣费业务数据列表 |
| | | consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); |
| | | } |
| | | } else { |
| | | //余额不足 |
| | | reMsg = "余额不足或获取失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; |
| | | return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); |
| | | } |
| | | } |
| | | //扣费业务 |
| | | isSuccess= consumptionBusiess(consumptionRequest,consumptionRecordList); |
| | | if (isSuccess) { |
| | | reMsg = "该业务已经扣费!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; |
| | | } |
| | | else |
| | | { |
| | | reMsg = "该业务扣费失败!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; |
| | | } |
| | | } else { |
| | | isSuccess = true; |
| | | //已经扣费 |
| | | reMsg = "该业务已经扣费!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; |
| | |
| | | reMsg = "传入参数有误!"; |
| | | bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; |
| | | } |
| | | return ResultReturn(consumptionRequest, bcode, reMsg, isSuccess); |
| | | return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); |
| | | } |
| | | |
| | | /** |
| | |
| | | consumptionRecordNew.setConsumptionCount(consumptionRequest.getConsumptionCount()); |
| | | consumptionRecordNew.setRecordType(ConsumptionConstant.DEDUCTION); |
| | | consumptionRecordNew.setProOrderDetailId(productOrderDetail.getId()); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getLastRecordId()); |
| | | consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); |
| | | consumptionRecordNew.setCreateTime(new Date()); |
| | | |
| | | if (SaveConsumptionRecord(consumptionRecordNew)) { |
| | | //3.3 扣费成功 如果套餐id变化,则更新预扣费的套餐id |
| | |
| | | * @param isSuccess 业务执行是否成功 |
| | | * @return |
| | | */ |
| | | private ResultBody ResultReturn(ConsumptionRequest consumptionRequest, int bcode, String reMsg, boolean isSuccess) { |
| | | private ResultBody ResultReturn(ConsumptionRequest consumptionRequest, int bcode,int recordType, String reMsg, boolean isSuccess) { |
| | | //返回的数据实体 |
| | | ConsumptionVo consumptionVo = new ConsumptionVo(); |
| | | consumptionVo.setConsumptionCount(consumptionRequest.getConsumptionCount()); |
| | | consumptionVo.setBusinessId(consumptionRequest.getBusinessId()); |
| | | consumptionVo.setBcode(bcode); |
| | | consumptionVo.setRecordType(ConsumptionConstant.BEFORE_DEDUCTION); |
| | | consumptionVo.setRecordType(recordType); |
| | | if (isSuccess) { |
| | | return ResultBody.ok().data(consumptionVo).msg(reMsg); |
| | | } else { |
| | |
| | | */ |
| | | private Boolean beforeConsumption(ConsumptionRequest consumptionRequest) { |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | |
| | | ProductOrderDetail productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount()); |
| | | if (productOrderDetail != null) { |
| | | ConsumptionRecord consumptionRecord = new ConsumptionRecord(); |
| | |
| | | */ |
| | | private Boolean SaveConsumptionRecord(ConsumptionRecord consumptionRecord) { |
| | | if (consumptionRecord != null) { |
| | | if (consumptionRecord.getCreateTime() == null) { |
| | | consumptionRecord.setCreateTime(new Date()); |
| | | } |
| | | return this.saveOrUpdate(consumptionRecord); |
| | | } else { |
| | | logger.info("扣费数据写入参数为空!"); |
| | |
| | | if (consumptionRecordList != null) { |
| | | if (consumptionRecordList.size() > 0) { |
| | | //过滤预扣费的记录 |
| | | return consumptionRecordList.stream().filter(f -> f.getRecordType() == recordType).collect(Collectors.toList()).size() == 1; |
| | | return consumptionRecordList.stream().filter(f -> f.getRecordType() == recordType&&f.getProOrderDetailId()>0).collect(Collectors.toList()).size() == 1; |
| | | } |
| | | } |
| | | return false; |