From 34589cd092e0de8cfd704cd59608ed0f36f6093a Mon Sep 17 00:00:00 2001 From: bingbing <zhaobingliang@aliyun.com> Date: Mon, 26 Oct 2020 09:56:30 +0800 Subject: [PATCH] Merge branch 'pay_master' into dev --- kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java | 611 ++++++++++++++++++++++++++++++++---------------------- 1 files changed, 361 insertions(+), 250 deletions(-) diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java index 5026604..20b935b 100644 --- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java +++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java @@ -2,7 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.kidgrow.common.constant.ConsumptionConstant; -import com.kidgrow.common.constant.SecurityConstants; +import com.kidgrow.common.constant.PayConstants; import com.kidgrow.common.model.PageResult; import com.kidgrow.common.model.ResultBody; import com.kidgrow.common.service.impl.SuperServiceImpl; @@ -10,9 +10,13 @@ import com.kidgrow.common.utils.StringUtils; import com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper; import com.kidgrow.oprationcenter.model.ConsumptionRecord; +import com.kidgrow.oprationcenter.model.PayManager; import com.kidgrow.oprationcenter.model.ProductOrderDetail; +import com.kidgrow.oprationcenter.model.SaasClientPay; import com.kidgrow.oprationcenter.service.IConsumptionRecordService; +import com.kidgrow.oprationcenter.service.IPayManagerService; import com.kidgrow.oprationcenter.service.IProductOrderDetailService; +import com.kidgrow.oprationcenter.service.ISaasClientPayService; import com.kidgrow.oprationcenter.vo.ConsumptionRequest; import com.kidgrow.oprationcenter.vo.ConsumptionVo; import com.kidgrow.oprationcenter.vo.ProductOrderJoinDetail; @@ -21,15 +25,17 @@ 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.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -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> @@ -46,11 +52,15 @@ @Autowired private IProductOrderDetailService productOrderDetailService; @Autowired - private HttpServletRequest httpServletRequest; + private IPayManagerService payManagerService; + @Autowired + private ISaasClientPayService saasClientPayService; @Autowired private RabbitTemplate rabbitTemplate; private static final Logger logger = LoggerFactory.getLogger(ConsumptionRecordServiceImpl.class); + @Value("${spring.profiles.active}") + private String envName; /** * 列表 @@ -99,53 +109,68 @@ //默认的业务返回码 int bcode = -1; //记录类型 - int recordType=ConsumptionConstant.BEFORE_DEDUCTION; + 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.没有扣费,检查是否已经预扣费 - if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { - //3.没有预扣,查询余额 - if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { - //4.余额充足 获取要扣的套餐 写预扣费记录 - if (beforeConsumption(consumptionRequest)) { - //预扣费成功 - isSuccess = true; - reMsg = "预扣费成功!"; - bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION; - } else { - //预扣费执行失败 - reMsg = "预扣费执行失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; - } - } else { - //余额不足 - reMsg = "余额不足或获取失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; - } - } else { - //已经预扣费 - reMsg = "该业务已经预扣费!"; + //是否开通单次支付 + if (departmentIsPay(consumptionRequest)) { + //是否支付成功 + if (departmentPayStatus(consumptionRequest)) { + //预扣费成功 + reMsg = "单次支付模拟预扣费成功!"; bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION; + } else { + reMsg = "单次支付未成功,不允许预扣费!"; + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; + isSuccess = false; } } else { - //已经扣费 - reMsg = "该业务已经扣费!"; - bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + //先获取这个业务关联的扣费记录 + List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); + //1.先检查是否已经扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { + //2.没有扣费,检查是否已经预扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { + //3.没有预扣,查询余额 + Map<String, Object> vateMap = VateUserNowProduct(consumptionRequest.getConsumptionCount(), consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId()); + if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { + //4.余额充足 获取要扣的套餐 写预扣费记录 + if (beforeConsumption(consumptionRequest)) { + //预扣费成功 + reMsg = "预扣费成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION; + } else { + //预扣费执行失败 + isSuccess = false; + reMsg = "预扣费执行失败!"; + bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; + } + } else { + //余额不足 或获取异常 + isSuccess = false; + reMsg = vateMap.get("vateMsg").toString(); + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; + } + } else { + //已经预扣费 + reMsg = "该业务已经预扣费!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION; + } + } else { + //已经扣费 + reMsg = "该业务已经扣费!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + } } } else { + isSuccess = false; reMsg = "传入参数有误!"; bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; } - return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); + return ResultReturn(consumptionRequest, bcode, recordType, reMsg, isSuccess); } /** @@ -160,57 +185,77 @@ //默认的业务返回码 int bcode = -1; //记录类型 - int recordType=ConsumptionConstant.DEDUCTION; + 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.没有扣费,检查是否已经预扣费 - if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { - //2.1.没有预扣,查询余额 - if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { - //2.2.余额充足 获取要扣的套餐 写预扣费记录 - if (beforeConsumption(consumptionRequest)) { - //预扣费成功 - logger.info("医院id:【{}】AI返回结果应该不走预扣,目前确已经预扣!", hospitalId); - } else { - //预扣费执行失败 - reMsg = "预扣费执行失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; - return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); - } - } else { - //余额不足 - reMsg = "余额不足或获取失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; - return ResultReturn(consumptionRequest, bcode,ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); - } - } - if (consumptionBusiess(consumptionRequest, consumptionRecordList)) { - isSuccess = true; - reMsg = "该业务扣费成功!"; + //是否开通单次支付 + if (departmentIsPay(consumptionRequest)) { + //是否支付成功 + if (departmentPayStatus(consumptionRequest)) { + //预扣费成功 + reMsg = "单次支付模拟扣费成功!"; bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + //消息队列通知 + MessageToBI(consumptionRequest); } else { - reMsg = "该业务扣费失败!"; + reMsg = "单次支付未成功,不允许扣费!"; bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; + isSuccess=false; } } else { - //已经扣费 - reMsg = "该业务已经扣费!"; - bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + //先获取这个业务关联的扣费记录 + List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); + Long hospitalId = consumptionRequest.getHospitalId(); + + //1.先检查是否已经扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { + //2.没有扣费,检查是否已经预扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { + //2.1.没有预扣,查询余额 + Map<String, Object> vateMap = VateUserNowProduct(consumptionRequest.getConsumptionCount(), hospitalId, consumptionRequest.getDepartmentId()); + if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { + //2.2.余额充足 获取要扣的套餐 写预扣费记录 + if (beforeConsumption(consumptionRequest)) { + //预扣费成功 + 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 = vateMap.get("vateMsg").toString(); + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; + return ResultReturn(consumptionRequest, bcode, ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); + } + } + if (consumptionBusiess(consumptionRequest, consumptionRecordList)) { + reMsg = "该业务扣费成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + } else { + isSuccess = false; + reMsg = "该业务扣费失败!"; + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; + } + } else { + //已经扣费 + reMsg = "该业务已经扣费!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + } } } else { + isSuccess = false; reMsg = "传入参数有误!"; bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; } - return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); + return ResultReturn(consumptionRequest, bcode, recordType, reMsg, isSuccess); } /** @@ -231,125 +276,125 @@ //业务执行结果信息 String reMsg = ""; if (VateParams(consumptionRequest)) { - //先获取这个业务关联的扣费记录 - List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); - //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&&f.getProOrderDetailId()>0).collect(Collectors.toList()).get(0); - //把占用的套餐id还回去 - Long tempProOrderDetailId=consumptionRecord.getProOrderDetailId(); - consumptionRecord.setProOrderDetailId(0L); - consumptionRecord.setUpdateTime(new Date()); - if (SaveConsumptionRecord(consumptionRecord)) - { - //退预扣记录 - ConsumptionRecord consumptionRecordNew = new ConsumptionRecord(); - consumptionRecordNew.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION); - consumptionRecordNew.setBusinessId(consumptionRequest.getBusinessId()); - consumptionRecordNew.setConsumptionCount(0-consumptionRequest.getConsumptionCount()); - consumptionRecordNew.setRecordType(ConsumptionConstant.RETURN_BEFORE_DEDUCTION); - consumptionRecordNew.setProOrderDetailId(tempProOrderDetailId); - consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); - if (SaveConsumptionRecord(consumptionRecordNew)) - { - reMsg = "有预扣,写退还预扣成功!"; - bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION; - } - else - { - reMsg = "写退还预扣失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; - } - } - else{ - reMsg = "更新预扣费记录失败!"; - bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; - } - } - else - { - reMsg = "没有相关预扣记录!"; - bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; + //是否开通单次支付 + if (departmentIsPay(consumptionRequest)) { + //是否支付成功 + if (departmentPayStatus(consumptionRequest)) { + //预扣费成功 + reMsg = "单次支付模拟退还扣费成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION; + isSuccess=true; + } else { + reMsg = "单次支付未成功,不允许退扣费!"; + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; } } else { - recordType=ConsumptionConstant.RETURN_DEDUCTION; - //3.有扣费记录 这种情况的流程,实际业务中不会出现,但理论上应该这样处理 - //3.1 退还账户 - //获取预扣的时候占住的套餐id - ConsumptionRecord consumptionRecord = consumptionRecordList.stream().filter(f -> f.getRecordType() == ConsumptionConstant.DEDUCTION).collect(Collectors.toList()).get(0); - if (consumptionRecord != null) { - ProductOrderDetail productOrderDetail = productOrderDetailService.getById(consumptionRecord.getProOrderDetailId()); - if (productOrderDetail != null) { - //退还金额 - productOrderDetail.setAilightCount(productOrderDetail.getAilightCount()+consumptionRecord.getConsumptionCount()); - productOrderDetail.setUpdateTime(new Date()); - //退费 - boolean consumptionRe = productOrderDetailService.saveOrUpdate(productOrderDetail); - if (consumptionRe) { - //更新扣费记录 还回占用套餐 - 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; - } + //先获取这个业务关联的扣费记录 + List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); + //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 && f.getProOrderDetailId() > 0).collect(Collectors.toList()).get(0); + //把占用的套餐id还回去 + Long tempProOrderDetailId = consumptionRecord.getProOrderDetailId(); + consumptionRecord.setProOrderDetailId(0L); + consumptionRecord.setUpdateTime(new Date()); + if (SaveConsumptionRecord(consumptionRecord)) { + //退预扣记录 + ConsumptionRecord consumptionRecordNew = new ConsumptionRecord(); + consumptionRecordNew.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION); + consumptionRecordNew.setBusinessId(consumptionRequest.getBusinessId()); + consumptionRecordNew.setConsumptionCount(0 - consumptionRequest.getConsumptionCount()); + consumptionRecordNew.setRecordType(ConsumptionConstant.RETURN_BEFORE_DEDUCTION); + consumptionRecordNew.setProOrderDetailId(tempProOrderDetailId); + consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); + consumptionRecordNew.setDiaId(consumptionRequest.getDiaId()); + if (SaveConsumptionRecord(consumptionRecordNew)) { + isSuccess = true; + reMsg = "有预扣,写退还预扣成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_BEFORE_DEDUCTION; + } else { + reMsg = "写退还预扣失败!"; + bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; } - else - { - //更新扣费失败 - reMsg = "更新扣费失败!"; - bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; - } - } - else - { - //退费失败 - reMsg = "退还扣费失败!"; + } else { + reMsg = "更新预扣费记录失败!"; bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; } + } else { + reMsg = "没有相关预扣记录!"; + bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; } - else - { - reMsg = "无相关套餐数据!"; + } else { + recordType = ConsumptionConstant.RETURN_DEDUCTION; + //3.有扣费记录 这种情况的流程,实际业务中不会出现,但理论上应该这样处理 + //3.1 退还账户 + //获取预扣的时候占住的套餐id + ConsumptionRecord consumptionRecord = consumptionRecordList.stream().filter(f -> f.getRecordType() == ConsumptionConstant.DEDUCTION).collect(Collectors.toList()).get(0); + if (consumptionRecord != null) { + ProductOrderDetail productOrderDetail = productOrderDetailService.getById(consumptionRecord.getProOrderDetailId()); + if (productOrderDetail != null) { + //退还金额 + productOrderDetail.setAilightCount(productOrderDetail.getAilightCount() + consumptionRecord.getConsumptionCount()); + productOrderDetail.setUpdateTime(new Date()); + //退费 + boolean consumptionRe = productOrderDetailService.saveOrUpdate(productOrderDetail); + if (consumptionRe) { + //更新扣费记录 还回占用套餐 + 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()); + consumptionRecordNew.setDiaId(consumptionRequest.getDiaId()); + if (SaveConsumptionRecord(consumptionRecordNew)) { + //写退费记录成功 + isSuccess = true; + reMsg = "退还扣费成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION; + } else { + reMsg = "退还扣费失败!"; + bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; + } + } else { + //更新扣费失败 + reMsg = "更新扣费失败!"; + bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; + } + } else { + //退费失败 + reMsg = "退还扣费失败!"; + bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; + } + } else { + reMsg = "无相关套餐数据!"; + bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; + } + } else { + reMsg = "无相关扣费数据!"; bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; } - } - else - { - reMsg = "无相关扣费数据!"; - bcode = ConsumptionConstant.BUSINESS_RUN_FAIL; } } } else { reMsg = "传入参数有误!"; bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; } - return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); + return ResultReturn(consumptionRequest, bcode, recordType, reMsg, isSuccess); } /** * 发起人工读片-调用 + * * @param consumptionRequest 请求的数据实体 * @return */ @@ -365,58 +410,75 @@ //业务执行结果信息 String reMsg = ""; if (VateParams(consumptionRequest)) { - //先获取这个业务关联的扣费记录 - List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); - //1.先检查是否已经扣费 - if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { - //2.没有扣费,检查是否已经预扣费 - if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { - //3.没有预扣,查询余额 - if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) { - //4.余额充足 获取要扣的套餐 写预扣费记录 - if (!beforeConsumption(consumptionRequest)) { - //预扣费执行失败 - 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); - } + //是否开通单次支付 + if (departmentIsPay(consumptionRequest)) + { + //是否支付成功 + if (departmentPayStatus(consumptionRequest)) { + //预扣费成功 + reMsg = "单次支付模拟已经扣费成功!"; + bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; + isSuccess = true; + //消息队列通知 + MessageToBI(consumptionRequest); + } else { + reMsg = "单次支付未成功,不允许业务进行!"; + bcode = ConsumptionConstant.BUSINESS_CODE_FAIL; } - //扣费业务 - isSuccess= consumptionBusiess(consumptionRequest,consumptionRecordList); - if (isSuccess) { + } + else { + //先获取这个业务关联的扣费记录 + List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); + //1.先检查是否已经扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.DEDUCTION)) { + //2.没有扣费,检查是否已经预扣费 + if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) { + //3.没有预扣,查询余额 + Map<String, Object> vateMap = VateUserNowProduct(consumptionRequest.getConsumptionCount(), consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId()); + if (Boolean.parseBoolean(vateMap.get("vateRe").toString())) { + //4.余额充足 获取要扣的套餐 写预扣费记录 + if (!beforeConsumption(consumptionRequest)) { + //预扣费执行失败 + reMsg = "预扣费执行失败!"; + bcode = ConsumptionConstant.BUSINESS_CODE_ERROR; + return ResultReturn(consumptionRequest, bcode, ConsumptionConstant.BEFORE_DEDUCTION, reMsg, isSuccess); + } else { + //发起了一个新的预扣,需要更新扣费业务数据列表 + consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId()); + } + } else { + //余额不足 + reMsg = vateMap.get("vateMsg").toString(); + 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; } - else - { - reMsg = "该业务扣费失败!"; - bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; - } - } else { - //已经扣费 - reMsg = "该业务已经扣费!"; - bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION; } } else { reMsg = "传入参数有误!"; bcode = ConsumptionConstant.BUSINESS_CODE_PARAMS_ERROR; } - return ResultReturn(consumptionRequest, bcode,recordType, reMsg, isSuccess); + return ResultReturn(consumptionRequest, bcode, recordType, reMsg, isSuccess); } /** * 扣费业务(扣费 更新预扣 写扣费记录) + * * @param consumptionRequest 请求参数 * @param consumptionRecordList 扣费业务数据 * @return @@ -432,7 +494,7 @@ 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; @@ -453,6 +515,7 @@ consumptionRecordNew.setRecordType(ConsumptionConstant.DEDUCTION); consumptionRecordNew.setProOrderDetailId(productOrderDetail.getId()); consumptionRecordNew.setLastRecordId(consumptionRecord.getId()); + consumptionRecordNew.setDiaId(consumptionRequest.getDiaId()); consumptionRecordNew.setCreateTime(new Date()); if (SaveConsumptionRecord(consumptionRecordNew)) { @@ -465,7 +528,7 @@ } } //消息队列通知 - MessageToBI(); + MessageToBI(consumptionRequest); //已经扣费 logger.info("业务编号:【{}】该业务已经扣费!", consumptionRequest.getBusinessId()); return true; @@ -487,13 +550,15 @@ * @param isSuccess 业务执行是否成功 * @return */ - private ResultBody ResultReturn(ConsumptionRequest consumptionRequest, int bcode,int recordType, 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(recordType); + logger.info("扣费业务返回参数实体:"+consumptionRequest.toString()); + logger.info("扣费业务返回其他参数:bcode:{},recordType:{},reMsg:{},isSuccess:{}",bcode,recordType,reMsg,isSuccess); if (isSuccess) { return ResultBody.ok().data(consumptionVo).msg(reMsg); } else { @@ -503,13 +568,12 @@ /** * 预扣费业务 + * * @param consumptionRequest 请求参数 * @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); @@ -517,13 +581,14 @@ consumptionRecord.setConsumptionCount(consumptionRequest.getConsumptionCount()); consumptionRecord.setRecordType(ConsumptionConstant.BEFORE_DEDUCTION); consumptionRecord.setProOrderDetailId(productOrderDetail.getId()); + consumptionRecord.setDiaId(consumptionRequest.getDiaId()); 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; } @@ -532,14 +597,19 @@ * 参数验证 */ private Boolean VateParams(ConsumptionRequest consumptionRequest) { + logger.info("收到扣费请求的参数:"+consumptionRequest.toString()); 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(); + String diaId = consumptionRequest.getDiaId(); if (StringUtils.isNotBlank(consumptionRequest.getBusinessId()) && consumptionRequest.getConsumptionCount() > 0 && StringUtils.isNotBlank(hosId) - && StringUtils.isNotBlank(depId)) { + && StringUtils.isNotBlank(depId) + && StringUtils.isNotBlank(doctorId) + && StringUtils.isNotBlank(diaId)) { return true; } else { logger.info("扣费请求参数不完整!"); @@ -552,39 +622,45 @@ /** * 检查余额够不够 + * * @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 Map<String, Object> VateUserNowProduct(int consumptionCount, Long hospitalId, Long departmentId) { + Map<String, Object> returnMap = new HashMap<>(); ResultBody biUserPro = productOrderDetailService.biUserNowProduct(hospitalId, departmentId); if (biUserPro.getCode() == 0) { if (StringUtils.isNotBlank(biUserPro.getData().toString())) { //余额 int userAICount = Integer.parseInt(biUserPro.getData().toString()); if (userAICount >= consumptionCount) { - return true; + returnMap.put("vateRe", true); + returnMap.put("vateMsg", "余额足够!"); } else { + returnMap.put("vateRe", false); + returnMap.put("vateMsg", "余额不足!"); logger.info("医院id:【{}】余额不足!", hospitalId); } } else { - logger.error("医院id:【{}】余额获取异常!", hospitalId); + returnMap.put("vateRe", false); + returnMap.put("vateMsg", "余额获取异常,data为空!"); + logger.info("医院id:【{}】余额获取异常!", hospitalId); } } else { + returnMap.put("vateRe", false); + returnMap.put("vateMsg", "余额获取异常,Code非0!"); logger.info("医院id:【{}】余额获取异常,返回非0!", hospitalId); } - return false; + return returnMap; } /** * 获取要使用的套餐实体 - * @param consumCount 要使用的数量 + * + * @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()); @@ -628,7 +704,7 @@ if (consumptionRecordList != null) { if (consumptionRecordList.size() > 0) { //过滤预扣费的记录 - return consumptionRecordList.stream().filter(f -> f.getRecordType() == recordType&&f.getProOrderDetailId()>0).collect(Collectors.toList()).size() == 1; + return consumptionRecordList.stream().filter(f -> f.getRecordType() == recordType && f.getProOrderDetailId() > 0).collect(Collectors.toList()).size() == 1; } } return false; @@ -636,7 +712,6 @@ /** * 获取一个业务关联的扣费记录 - * * @param businessId 光片的名称/编号 * @return */ @@ -665,19 +740,55 @@ /** * 发消息到消息队列 + * * @return */ - @RabbitListener(queues = "BoneAgeEvaluationData") - private void MessageToBI() - { - 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)); + //@RabbitListener(queues = "BoneAgeEvaluationData") + private void MessageToBI(ConsumptionRequest consumptionRequest) { //发消息到队列 - String context = "{\"hospitalId\":\"" + hospitalId + - "\",\"departmentId\":\"" + departmentId + - "\",\"doctorId\":\"" + doctorId + - "\",\"date\":\"" + DateUtils.formatDate(new Date(),"yyyy-MM-dd")+"\"}"; - rabbitTemplate.convertAndSend(ConsumptionConstant.EXCHANGE_DATA, ConsumptionConstant.ROUTINGKEY_DATA, context); + 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 + envName, context); + + log.info("骨龄评价扣费消息已发送:" + context); + } + + /** + * 查看当前科室是否开通了单次支付 + * + * @param consumptionRequest + * @return + */ + private Boolean departmentIsPay(ConsumptionRequest consumptionRequest) { + log.info("查看当前科室是否开通了单次支付请求参数:"+consumptionRequest.toString()); + PayManager payManager = payManagerService.findByObject(consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId()); + log.info("查看当前科室是否开通了单次支付请求查询后数据:"+payManager.toString()); + if (payManager == null) { + return false; + } else { + return payManager.getId()!=null; + } + } + + /** + * 查看当前科室当前诊断id的支付状态是否成功 + * + * @param consumptionRequest + * @return + */ + private Boolean departmentPayStatus(ConsumptionRequest consumptionRequest) { + log.info("查看当前科室当前诊断id的支付状态是否成功请求参数:"+consumptionRequest.toString()); + SaasClientPay saasClientPay = saasClientPayService.findModelByObject(consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId(), consumptionRequest.getDiaId()); + log.info("查看当前科室当前诊断id的支付状态是否成功查询后数据:"+saasClientPay.toString()); + if (saasClientPay == null) { + return false; + } else { + if (saasClientPay.getPayStatus().equals(PayConstants.ORDER_PAY_SUCEESS)) { + return true; + } + } + return false; } } -- Gitblit v1.8.0