forked from kidgrow-microservices-platform

zhaoxiaohao
2020-07-25 cb9bc5daaa7ee5978c07d5107d3301473617f367
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
@@ -2,7 +2,6 @@
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;
@@ -30,6 +29,9 @@
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>
@@ -112,7 +114,7 @@
                //2.没有扣费,检查是否已经预扣费
                if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) {
                    //3.没有预扣,查询余额
                    if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) {
                    if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) {
                        //4.余额充足 获取要扣的套餐 写预扣费记录
                        if (beforeConsumption(consumptionRequest)) {
                            //预扣费成功
@@ -168,14 +170,14 @@
        if (VateParams(consumptionRequest)) {
            //先获取这个业务关联的扣费记录
            List<ConsumptionRecord> consumptionRecordList = GetBusinessConsumptionList(consumptionRequest.getBusinessId());
            Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_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)) {
                            //预扣费成功
@@ -376,7 +378,7 @@
                //2.没有扣费,检查是否已经预扣费
                if (!isBeforeDeduction(consumptionRecordList, ConsumptionConstant.BEFORE_DEDUCTION)) {
                    //3.没有预扣,查询余额
                    if (VateUserNowProduct(consumptionRequest.getConsumptionCount())) {
                    if (VateUserNowProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId())) {
                        //4.余额充足 获取要扣的套餐 写预扣费记录
                        if (!beforeConsumption(consumptionRequest)) {
                            //预扣费执行失败
@@ -437,7 +439,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;
@@ -470,7 +472,7 @@
                    }
                }
                //消息队列通知
                MessageToBI();
                MessageToBI(consumptionRequest);
                //已经扣费
                logger.info("业务编号:【{}】该业务已经扣费!", consumptionRequest.getBusinessId());
                return true;
@@ -512,9 +514,7 @@
     * @return
     */
    private Boolean beforeConsumption(ConsumptionRequest consumptionRequest) {
        Long hospitalId = Long.valueOf(httpServletRequest.getHeader(SecurityConstants.USER_HOSPITAL_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);
@@ -525,10 +525,10 @@
            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;
    }
@@ -539,12 +539,14 @@
    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("扣费请求参数不完整!");
@@ -560,9 +562,7 @@
     * @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())) {
@@ -587,9 +587,7 @@
     * @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());
@@ -673,15 +671,12 @@
     * @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);
    }