| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.kidgrow.common.constant.ConsumptionConstant; |
| | | import com.kidgrow.common.constant.SecurityConstants; |
| | | import com.kidgrow.common.model.PageResult; |
| | | import com.kidgrow.common.model.ResultBody; |
| | | import com.kidgrow.common.service.impl.SuperServiceImpl; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | //import org.springframework.amqp.rabbit.annotation.RabbitListener; |
| | | //import org.springframework.amqp.rabbit.core.RabbitTemplate; |
| | | |
| | | /** |
| | | * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br> |
| | |
| | | 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)) { |
| | | //3.没有预扣,查询余额 |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) { |
| | | //4.余额充足 获取要扣的套餐 写预扣费记录 |
| | | if (beforeConsumption(consumptionRequest)) { |
| | | //预扣费成功 |
| | |
| | | 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)); |
| | | Long hospitalId = consumptionRequest.getHospitalId(); |
| | | |
| | | //1.先检查是否已经扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { |
| | | //2.没有扣费,检查是否已经预扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { |
| | | //2.1.没有预扣,查询余额 |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),hospitalId,consumptionRequest.getDepartmentId())) { |
| | | //2.2.余额充足 获取要扣的套餐 写预扣费记录 |
| | | if (beforeConsumption(consumptionRequest)) { |
| | | //预扣费成功 |
| | |
| | | //2.没有扣费,检查是否已经预扣费 |
| | | if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { |
| | | //3.没有预扣,查询余额 |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { |
| | | if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) { |
| | | //4.余额充足 获取要扣的套餐 写预扣费记录 |
| | | if (!beforeConsumption(consumptionRequest)) { |
| | | //预扣费执行失败 |
| | |
| | | productOrderDetail.setAilightCount(productOrderDetail.getAilightCount() - consumptionRequest.getConsumptionCount()); |
| | | } else { |
| | | //要是被别人已经用了,就要重新找套餐 |
| | | productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount()); |
| | | productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId()); |
| | | if (productOrderDetail == null) { |
| | | logger.info("业务编号:【{}】无可用套餐!", consumptionRequest.getBusinessId()); |
| | | return false; |
| | |
| | | } |
| | | } |
| | | //消息队列通知 |
| | | MessageToBI(); |
| | | MessageToBI(consumptionRequest); |
| | | //已经扣费 |
| | | logger.info("业务编号:【{}】该业务已经扣费!", consumptionRequest.getBusinessId()); |
| | | return true; |
| | |
| | | * @return |
| | | */ |
| | | 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()); |
| | | ProductOrderDetail productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId()); |
| | | if (productOrderDetail != null) { |
| | | ConsumptionRecord consumptionRecord = new ConsumptionRecord(); |
| | | consumptionRecord.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION); |
| | |
| | | if (SaveConsumptionRecord(consumptionRecord)) { |
| | | return true; |
| | | } else { |
| | | logger.info("医院id:【{}】预扣费执行失败!", hospitalId); |
| | | logger.info("医院id:【{}】预扣费执行失败!", consumptionRequest.getHospitalId()); |
| | | } |
| | | } else { |
| | | logger.info("医院id:【{}】套餐获取失败!", hospitalId); |
| | | logger.info("医院id:【{}】套餐获取失败!", consumptionRequest.getHospitalId()); |
| | | } |
| | | return false; |
| | | } |
| | |
| | | private Boolean VateParams(ConsumptionRequest consumptionRequest) { |
| | | if (consumptionRequest != null) { |
| | | //从请求头获取医院和科室id |
| | | String hosId = httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER); |
| | | String depId = httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER); |
| | | String hosId = consumptionRequest.getHospitalId().toString(); |
| | | String depId = consumptionRequest.getDepartmentId().toString(); |
| | | String doctorId = consumptionRequest.getDoctorId().toString(); |
| | | if (StringUtils.isNotBlank(consumptionRequest.getBusinessId()) |
| | | && consumptionRequest.getConsumptionCount() > 0 |
| | | && StringUtils.isNotBlank(hosId) |
| | | && StringUtils.isNotBlank(depId)) { |
| | | && StringUtils.isNotBlank(depId) |
| | | && StringUtils.isNotBlank(doctorId)) { |
| | | return true; |
| | | } else { |
| | | logger.info("扣费请求参数不完整!"); |
| | |
| | | * @param consumptionCount 要扣的数量 |
| | | * @return |
| | | */ |
| | | private Boolean VateUserNowProduct(int consumptionCount) { |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | private Boolean VateUserNowProduct(int consumptionCount,Long hospitalId,Long departmentId) { |
| | | ResultBody biUserPro = productOrderDetailService.biUserNowProduct(hospitalId, departmentId); |
| | | if (biUserPro.getCode() == 0) { |
| | | if (StringUtils.isNotBlank(biUserPro.getData().toString())) { |
| | |
| | | * @param consumCount 要使用的数量 |
| | | * @return |
| | | */ |
| | | private ProductOrderDetail deductionDepartmentProduct(int consumCount) { |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | private ProductOrderDetail deductionDepartmentProduct(int consumCount,Long hospitalId,Long departmentId) { |
| | | UserProductDetail userProductDetail = productOrderDetailService.getUserProductDetail(hospitalId, departmentId); |
| | | //合并集合 |
| | | userProductDetail.getProductOrderJoinDetailListShare().addAll(userProductDetail.getProductOrderJoinDetailsListDep()); |
| | |
| | | * @return |
| | | */ |
| | | @RabbitListener(queues = "BoneAgeEvaluationData") |
| | | private void MessageToBI() |
| | | private void MessageToBI(ConsumptionRequest consumptionRequest) |
| | | { |
| | | Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_ID_HEADER)); |
| | | Long departmentId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_DEP_ID_HEADER)); |
| | | Long doctorId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.DOCTOR_ID_HEADER)); |
| | | //发消息到队列 |
| | | String context = "{\"hospitalId\":\"" + hospitalId + |
| | | "\",\"departmentId\":\"" + departmentId + |
| | | "\",\"doctorId\":\"" + doctorId + |
| | | String context = "{\"hospitalId\":\"" + consumptionRequest.getHospitalId() + |
| | | "\",\"departmentId\":\"" + consumptionRequest.getDepartmentId() + |
| | | "\",\"doctorId\":\"" + consumptionRequest.getDoctorId() + |
| | | "\",\"date\":\"" + DateUtils.formatDate(new Date(),"yyyy-MM-dd")+"\"}"; |
| | | rabbitTemplate.convertAndSend(ConsumptionConstant.EXCHANGE_DATA, ConsumptionConstant.ROUTINGKEY_DATA, context); |
| | | } |