forked from kidgrow-microservices-platform

1.增加后台开通医院/科室的单次支付功能,并自动充入指定套餐
2.新增查询医院科室是否开通单次支付功能的接口
3.新增查询医院科室的支付单价
4.修改扣费业务4个接口,增加支持单次支付的判断与处理
5.增加接口,查看某个诊断的支付状态
8 files added
13 files modified
1347 ■■■■ changed files
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java 4 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java 77 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java 9 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java 34 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java 45 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java 1 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java 570 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java 128 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java 2 ●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java 16 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml 82 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java 167 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java 2 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java 14 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml 1 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml 1 ●●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java 6 ●●●● patch | view | raw | blame | history
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java 21 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html 3 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html 34 ●●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html 130 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
@@ -53,6 +53,10 @@
     */
    private String businessId;
    /**
     * 调用方诊断id
     */
    private String diaId;
    /**
     * 记录类型
     * 1:预扣费
     * 2:退预扣费(需要关联预扣费编号)
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
New file
@@ -0,0 +1,77 @@
package com.kidgrow.oprationcenter.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.kidgrow.common.model.SuperModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 *
 * @version 1.0
 * @Description: <br>
 * @Project: 运营中心<br>
 * @CreateDate: Created in 2020-09-21 14:16:18 <br>
 * @Author: <a href="411269194@kidgrow.com">houruijun</a>
 */
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
@TableName("pay_manager")
public class PayManager extends SuperModel {
    private static final long serialVersionUID = 1L;
    /**
     * 医院标识id
     */
    @NotNull(message = "医院标识id不能为空")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long hospitalId;
    /**
     * 医院名称
     */
    @NotEmpty(message = "医院名称不能为空")
    private String hospitalName;
    /**
     * 科室ID
     */
    @NotNull(message = "科室ID不能为空")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long departmentId;
    /**
     * 科室名称
     */
    @NotEmpty(message = "科室名称不能为空")
    private String departmentName;
    /**
     * 单次支付金额 (单位为分)
     */
    @NotNull(message = "单次支付金额不能为空")
    private Integer payPrice;
    /**
     * 支付给喜高的费用 (单位为分)
     */
    @NotNull(message = "单次支付金额不能为空")
    private Integer payKidgrow;
    /**
     * 支付给客户的费用(单位为分)
     */
    @NotNull(message = "单次支付金额不能为空")
    private Integer payCustom;
    /**
     * 是否删除,1删除,0未删除
     */
    private Boolean isDel;
    /**
     * 状态,1启用,0停用
     */
    private Boolean enabled;
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java
@@ -1,6 +1,8 @@
package com.kidgrow.oprationcenter.vo;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -22,14 +24,17 @@
    /**
     * 医院ID
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long hospitalId;
    /**
     * 科室ID
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long departmentId;
    /**
     * 医生ID
     */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long doctorId;
    /**
     * 调用方业务编号,光片编号
@@ -39,4 +44,8 @@
     * 实际变动数量
     */
    private int consumptionCount;
    /**
     * 诊断id
     */
    private String diaId;
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java
New file
@@ -0,0 +1,34 @@
package com.kidgrow.oprationcenter.mapper;
import com.kidgrow.oprationcenter.model.PayManager;
import com.kidgrow.db.mapper.SuperMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 * @Description: <br>
 * @Project: 运营中心<br>
 * @CreateDate: Created in 2020-09-21 14:16:18 <br>
 * @Author: <a href="411269194@kidgrow.com">houruijun</a>
 * @version 1.0
 */
public interface PayManagerMapper extends SuperMapper<PayManager> {
    /**
     * 分页查询列表
     * @param page
     * @param params
     * @return
     */
    List<PayManager> findList(Page<PayManager> page, @Param("p") Map<String, Object> params);
    /**
     * 根据PayManager对象当做查询条件进行查询
     * @param
     * @return PayManager对象
     */
    PayManager findByObject(@Param("p") PayManager payManager);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java
New file
@@ -0,0 +1,45 @@
package com.kidgrow.oprationcenter.service;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.SysUser;
import com.kidgrow.common.service.ISuperService;
import com.kidgrow.oprationcenter.model.PayManager;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
import java.util.Map;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 * @Description: <br>
 * @Project: 运营中心<br>
 * @CreateDate: Created in 2020-09-21 14:16:18 <br>
 * @Author: <a href="411269194@kidgrow.com">houruijun</a>
 * @version 1.0
 */
public interface IPayManagerService extends ISuperService<PayManager> {
    /**
     * 列表
     * @param params
     * @return
     */
    PageResult<PayManager> findList(Map<String, Object> params);
    /**
    * 根据PayManager对象当做查询条件进行查询
    * @param payManager
    * @return PayManager对象
    */
    PayManager findByObject(PayManager payManager);
    /**
     * 根据PayManager对象当做查询条件进行查询
     * @param hospitalId
     * @param departmentId
     * @return PayManager对象
     */
    PayManager findByObject(Long hospitalId,Long departmentId);
    ProductOrderDetail getProductDetail(Long hospitalId, Long departmentId);
    Boolean saveproductOrder(PayManager payManager, SysUser sysUser);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java
@@ -33,6 +33,7 @@
    * @return SaasClientPay对象
    */
    SaasClientPay findByObject(SaasClientPay saasClientPay);
    SaasClientPay findModelByObject(Long hospitalId,Long departmentId,String diaId);
    /**
     * 批量结算
     * @param list
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.constant.ConsumptionConstant;
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;
@@ -9,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;
@@ -26,7 +31,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.stream.Collectors;
@@ -48,13 +52,16 @@
    @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;
    /**
     * 列表
     *
@@ -102,54 +109,67 @@
        //默认的业务返回码
        int bcode = -1;
        //记录类型
        int recordType=ConsumptionConstant.BEFORE_DEDUCTION;
        int recordType = ConsumptionConstant.BEFORE_DEDUCTION;
        //业务执行结果
        boolean isSuccess = true;
        //业务执行结果信息
        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.没有预扣,查询余额
                    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 = "该业务已经预扣费!";
            //是否开通单次支付
            if (departmentIsPay(consumptionRequest)) {
                //是否支付成功
                if (departmentPayStatus(consumptionRequest)) {
                    //预扣费成功
                    reMsg = "单次支付模拟预扣费成功!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION;
                } else {
                    reMsg = "单次支付未成功,不允许预扣费!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_FAIL;
                }
            } 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);
    }
    /**
@@ -164,61 +184,76 @@
        //默认的业务返回码
        int bcode = -1;
        //记录类型
        int recordType=ConsumptionConstant.DEDUCTION;
        int recordType = ConsumptionConstant.DEDUCTION;
        //业务执行结果
        boolean isSuccess = true;
        //业务执行结果信息
        String reMsg = "";
        if (VateParams(consumptionRequest)) {
            //先获取这个业务关联的扣费记录
            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 = "该业务扣费成功!";
            //是否开通单次支付
            if (departmentIsPay(consumptionRequest)) {
                //是否支付成功
                if (departmentPayStatus(consumptionRequest)) {
                    //预扣费成功
                    reMsg = "单次支付模拟扣费成功!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION;
                    //消息队列通知
                    MessageToBI(consumptionRequest);
                } else {
                    isSuccess = false;
                    reMsg = "该业务扣费失败!";
                    reMsg = "单次支付未成功,不允许扣费!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_FAIL;
                }
            } 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);
    }
    /**
@@ -239,126 +274,124 @@
        //业务执行结果信息
        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))
                        {
                            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 = "没有相关预扣记录!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_ERROR;
            //是否开通单次支付
            if (departmentIsPay(consumptionRequest)) {
                //是否支付成功
                if (departmentPayStatus(consumptionRequest)) {
                    //预扣费成功
                    reMsg = "单次支付模拟退还扣费成功!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_RETURN_DEDUCTION;
                } 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
     */
@@ -374,60 +407,74 @@
        //业务执行结果信息
        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.没有预扣,查询余额
                    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);
                    }
            //是否开通单次支付
            if (departmentIsPay(consumptionRequest))
            {
                //是否支付成功
                if (departmentPayStatus(consumptionRequest)) {
                    //预扣费成功
                    reMsg = "单次支付模拟已经扣费成功!";
                    bcode = ConsumptionConstant.BUSINESS_CODE_IS_DEDUCTION;
                    //消息队列通知
                    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 {
                isSuccess = true;
                //已经扣费
                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
@@ -443,7 +490,7 @@
            productOrderDetail.setAilightCount(productOrderDetail.getAilightCount() - consumptionRequest.getConsumptionCount());
        } else {
            //要是被别人已经用了,就要重新找套餐
            productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId());
            productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(), consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId());
            if (productOrderDetail == null) {
                logger.info("业务编号:【{}】无可用套餐!", consumptionRequest.getBusinessId());
                return false;
@@ -464,6 +511,7 @@
            consumptionRecordNew.setRecordType(ConsumptionConstant.DEDUCTION);
            consumptionRecordNew.setProOrderDetailId(productOrderDetail.getId());
            consumptionRecordNew.setLastRecordId(consumptionRecord.getId());
            consumptionRecordNew.setDiaId(consumptionRequest.getDiaId());
            consumptionRecordNew.setCreateTime(new Date());
            if (SaveConsumptionRecord(consumptionRecordNew)) {
@@ -498,7 +546,7 @@
     * @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());
@@ -514,11 +562,12 @@
    /**
     * 预扣费业务
     *
     * @param consumptionRequest 请求参数
     * @return
     */
    private Boolean beforeConsumption(ConsumptionRequest consumptionRequest) {
        ProductOrderDetail productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(),consumptionRequest.getHospitalId(),consumptionRequest.getDepartmentId());
        ProductOrderDetail productOrderDetail = deductionDepartmentProduct(consumptionRequest.getConsumptionCount(), consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId());
        if (productOrderDetail != null) {
            ConsumptionRecord consumptionRecord = new ConsumptionRecord();
            consumptionRecord.setBusinessCode(ConsumptionConstant.BUSINESS_CODE_IS_BEFORE_DEDUCTION);
@@ -526,6 +575,7 @@
            consumptionRecord.setConsumptionCount(consumptionRequest.getConsumptionCount());
            consumptionRecord.setRecordType(ConsumptionConstant.BEFORE_DEDUCTION);
            consumptionRecord.setProOrderDetailId(productOrderDetail.getId());
            consumptionRecord.setDiaId(consumptionRequest.getDiaId());
            if (SaveConsumptionRecord(consumptionRecord)) {
                return true;
            } else {
@@ -546,11 +596,13 @@
            String hosId = consumptionRequest.getHospitalId().toString();
            String depId = consumptionRequest.getDepartmentId().toString();
            String doctorId = consumptionRequest.getDoctorId().toString();
            String diaId = consumptionRequest.getDiaId().toString();
            if (StringUtils.isNotBlank(consumptionRequest.getBusinessId())
                    && consumptionRequest.getConsumptionCount() > 0
                    && StringUtils.isNotBlank(hosId)
                    && StringUtils.isNotBlank(depId)
                    && StringUtils.isNotBlank(doctorId)) {
                    && StringUtils.isNotBlank(doctorId)
                    && StringUtils.isNotBlank(diaId)) {
                return true;
            } else {
                logger.info("扣费请求参数不完整!");
@@ -563,32 +615,33 @@
    /**
     * 检查余额够不够
     *
     * @param consumptionCount 要扣的数量
     * @return
     */
    private Map<String,Object> VateUserNowProduct(int consumptionCount,Long hospitalId,Long departmentId) {
        Map<String,Object> returnMap=new HashMap<>();
    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) {
                    returnMap.put("vateRe",true);
                    returnMap.put("vateMsg","余额足够!");
                    returnMap.put("vateRe", true);
                    returnMap.put("vateMsg", "余额足够!");
                } else {
                    returnMap.put("vateRe",false);
                    returnMap.put("vateMsg","余额不足!");
                    returnMap.put("vateRe", false);
                    returnMap.put("vateMsg", "余额不足!");
                    logger.info("医院id:【{}】余额不足!", hospitalId);
                }
            } else {
                returnMap.put("vateRe",false);
                returnMap.put("vateMsg","余额获取异常,data为空!");
                returnMap.put("vateRe", false);
                returnMap.put("vateMsg", "余额获取异常,data为空!");
                logger.error("医院id:【{}】余额获取异常!", hospitalId);
            }
         }else {
            returnMap.put("vateRe",false);
            returnMap.put("vateMsg","余额获取异常,Code非0!");
        } else {
            returnMap.put("vateRe", false);
            returnMap.put("vateMsg", "余额获取异常,Code非0!");
            logger.info("医院id:【{}】余额获取异常,返回非0!", hospitalId);
        }
        return returnMap;
@@ -596,10 +649,11 @@
    /**
     * 获取要使用的套餐实体
     * @param consumCount  要使用的数量
     *
     * @param consumCount 要使用的数量
     * @return
     */
    private ProductOrderDetail deductionDepartmentProduct(int consumCount,Long hospitalId,Long departmentId) {
    private ProductOrderDetail deductionDepartmentProduct(int consumCount, Long hospitalId, Long departmentId) {
        UserProductDetail userProductDetail = productOrderDetailService.getUserProductDetail(hospitalId, departmentId);
        //合并集合
        userProductDetail.getProductOrderJoinDetailListShare().addAll(userProductDetail.getProductOrderJoinDetailsListDep());
@@ -643,7 +697,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;
@@ -651,7 +705,6 @@
    /**
     * 获取一个业务关联的扣费记录
     *
     * @param businessId 光片的名称/编号
     * @return
     */
@@ -680,18 +733,51 @@
    /**
     * 发消息到消息队列
     *
     * @return
     */
    //@RabbitListener(queues = "BoneAgeEvaluationData")
    private void MessageToBI(ConsumptionRequest consumptionRequest)
    {
    private void MessageToBI(ConsumptionRequest consumptionRequest) {
        //发消息到队列
        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);
                "\",\"date\":\"" + DateUtils.formatDate(new Date(), "yyyy-MM-dd") + "\"}";
        rabbitTemplate.convertAndSend(ConsumptionConstant.EXCHANGE_DATA, ConsumptionConstant.ROUTINGKEY_DATA + envName, context);
        log.error("骨龄评价扣费消息已发送:"+context);
        log.error("骨龄评价扣费消息已发送:" + context);
    }
    /**
     * 查看当前科室是否开通了单次支付
     *
     * @param consumptionRequest
     * @return
     */
    private Boolean departmentIsPay(ConsumptionRequest consumptionRequest) {
        PayManager payManager = payManagerService.findByObject(consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId());
        if (payManager == null) {
            return false;
        } else {
            return payManager.getId() > 0;
        }
    }
    /**
     * 查看当前科室当前诊断id的支付状态是否成功
     *
     * @param consumptionRequest
     * @return
     */
    private Boolean departmentPayStatus(ConsumptionRequest consumptionRequest) {
        SaasClientPay saasClientPay = saasClientPayService.findModelByObject(consumptionRequest.getHospitalId(), consumptionRequest.getDepartmentId(), consumptionRequest.getDiaId());
        if (saasClientPay == null) {
            return false;
        } else {
            if (saasClientPay.getPayStatus().equals(PayConstants.ORDER_PAY_SUCEESS)) {
                return true;
            }
        }
        return false;
    }
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java
New file
@@ -0,0 +1,128 @@
package com.kidgrow.oprationcenter.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.kidgrow.common.constant.CommonConstant;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.SysUser;
import com.kidgrow.common.service.impl.SuperServiceImpl;
import com.kidgrow.oprationcenter.mapper.PayManagerMapper;
import com.kidgrow.oprationcenter.model.PayManager;
import com.kidgrow.oprationcenter.model.ProductOrder;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
import com.kidgrow.oprationcenter.service.IPayManagerService;
import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
import com.kidgrow.oprationcenter.service.IProductOrderService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 * @Description: <br>
 * @Project: 运营中心<br>
 * @CreateDate: Created in 2020-09-21 14:16:18 <br>
 * @Author: <a href="411269194@kidgrow.com">houruijun</a>
 * @version 1.0
 */
@Slf4j
@Service
public class PayManagerServiceImpl extends SuperServiceImpl<PayManagerMapper, PayManager> implements IPayManagerService {
    @Autowired
    private IProductOrderService productOrderService;
    @Autowired
    private IProductOrderDetailService productOrderDetailService;
    /**
     * 列表
     * @param params
     * @return
     */
    @Override
    public PageResult<PayManager> findList(Map<String, Object> params){
        Page<PayManager> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
        List<PayManager> list  =  baseMapper.findList(page, params);
        return PageResult.<PayManager>builder().data(list).code(0).count(page.getTotal()).build();
    }
    /**
   * 根据PayManager对象当做查询条件进行查询
   * @param payManager
   * @return PayManager
   */
    @Override
    public PayManager findByObject(PayManager payManager){
        return baseMapper.findByObject(payManager);
    }
    /**
     * 查看科室的单次支付功能  如果返回空 则视为未开通
     * @param hospitalId
     * @param departmentId
     * @return PayManager
     */
    @Override
    public PayManager findByObject(Long hospitalId,Long departmentId){
        PayManager payManager = new PayManager();
        ProductOrderDetail productOrderDetail= getProductDetail(hospitalId,departmentId);
        if (productOrderDetail != null) {
            payManager.setDepartmentId(departmentId);
            payManager.setHospitalId(hospitalId);
            payManager.setIsDel(false);
            payManager.setEnabled(true);
            PayManager payManagerModel = baseMapper.findByObject(payManager);
            return payManagerModel;
        }
        else
        {
            return payManager;
        }
    }
    /**
     * 获取科室下的一个业务的套餐数据
     * @param hospitalId
     * @param departmentId
     * @return
     */
    @Override
    public ProductOrderDetail getProductDetail(Long hospitalId, Long departmentId)
    {
        ProductOrder productOrder=new ProductOrder();
        productOrder.setHospitalId(hospitalId);
        productOrder.setDepartmentId(departmentId);
        productOrder.setEnabled(true);
        productOrder.setIsDel(false);
        ProductOrder productOrderModel=productOrderService.findByObject(productOrder);
        if (productOrderModel != null) {
            ProductOrderDetail productOrderDetail =new ProductOrderDetail();
            productOrderDetail.setProId(CommonConstant.PAY_USER_PRODUCT_ID);
            productOrderDetail.setOrderId(productOrderModel.getId());
            productOrderDetail.setEnabled(true);
            productOrderDetail.setIsDel(false);
            ProductOrderDetail modelDetail=productOrderDetailService.findByObject(productOrderDetail);
            return modelDetail;
        }
        return null;
    }
    /**
     * 保存单次支付功能数据
     * @param payManager
     * @param sysUser
     * @return
     */
    @Override
    public Boolean saveproductOrder(PayManager payManager, SysUser sysUser)
    {
        Map<String, Object> params = new HashMap<>();
        params.put("hospitalId", payManager.getHospitalId());
        params.put("departmentId", payManager.getDepartmentId());
        params.put("hospitalName", payManager.getHospitalName());
        params.put("departmentName", payManager.getDepartmentName());
        params.put("proId", CommonConstant.PAY_USER_PRODUCT_ID);
        boolean isResult = productOrderService.saveProductDetail(params, sysUser);
        return isResult;
    }
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java
@@ -107,7 +107,7 @@
    public boolean saveProductDetail(Map<String,Object> params,SysUser sysUser)
    {
        //指定套餐数据
        SysProduct sysProduct=sysProductService.getById(CommonConstant.REG_USER_PRODUCT_ID);
        SysProduct sysProduct=sysProductService.getById(Long.valueOf(params.get("proId").toString()));
        if (sysProduct != null) {
            //订单合同数据
            ProductOrder productOrder=new ProductOrder();
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java
@@ -98,6 +98,22 @@
        return baseMapper.findByObject(saasClientPay);
    }
    /**
     * 查看一个科室的某个诊断的支付状态
     * @param hospitalId
     * @param departmentId
     * @param diaId
     * @return
     */
    @Override
    public SaasClientPay findModelByObject(Long hospitalId,Long departmentId,String diaId) {
        SaasClientPay saasClientPay = new SaasClientPay();
        saasClientPay.setCreateHospitalDepartid(departmentId.toString());
        saasClientPay.setCreateHospitalId(hospitalId);
        saasClientPay.setDiaId(diaId);
        return baseMapper.findByObject(saasClientPay);
    }
    @Override
    public void updateTypeList(List<String> list) {
        for (String s : list) {
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml
New file
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!---->
<mapper namespace="com.kidgrow.oprationcenter.mapper.PayManagerMapper">
    <!--定义查询列-->
    <sql id="Column_List">
       *
    </sql>
    <!--sql查询片段-->
    <sql id="where">
        <where>
            <!--查询条件自行添加-->
            is_del=0
                                    <if test="p.id != null and p.id !=''">
                and  id =  #{p.id}
            </if>
                                                <if test="p.hospitalId != null and p.hospitalId !=''">
                and  hospital_id =  #{p.hospitalId}
            </if>
                                                <if test="p.hospitalName != null and p.hospitalName !=''">
                and  hospital_name =  #{p.hospitalName}
            </if>
                                                <if test="p.departmentId != null and p.departmentId !=''">
                and  department_id =  #{p.departmentId}
            </if>
                                                <if test="p.departmentName != null and p.departmentName !=''">
                and  department_name =  #{p.departmentName}
            </if>
                                                <if test="p.payPrice != null and p.payPrice !=''">
                and  pay_price =  #{p.payPrice}
            </if>
                                                <if test="p.payKidgrow != null and p.payKidgrow !=''">
                and  pay_kidgrow =  #{p.payKidgrow}
            </if>
                                                <if test="p.payCustom != null and p.payCustom !=''">
                and  pay_custom =  #{p.payCustom}
            </if>
                                                <if test="p.isDel != null and p.isDel !=''">
                and  is_del =  #{p.isDel}
            </if>
                                                <if test="p.enabled != null and p.enabled !=''">
                and  enabled =  #{p.enabled}
            </if>
                                                <if test="p.updateTime != null and p.updateTime !=''">
                and  update_time =  #{p.updateTime}
            </if>
                                                <if test="p.createUserId != null and p.createUserId !=''">
                and  create_user_id =  #{p.createUserId}
            </if>
                                                <if test="p.createUserName != null and p.createUserName !=''">
                and  create_user_name =  #{p.createUserName}
            </if>
                                                <if test="p.updateUserId != null and p.updateUserId !=''">
                and  update_user_id =  #{p.updateUserId}
            </if>
                                                <if test="p.updateUserName != null and p.updateUserName !=''">
                and  update_user_name =  #{p.updateUserName}
            </if>
                                                <if test="p.createTime != null and p.createTime !=''">
                and  create_time =  #{p.createTime}
            </if>
                                </where>
    </sql>
    <!--定义根据-PayManager当作查询条件返回对象-->
    <select id="findByObject"  resultType="com.kidgrow.oprationcenter.model.PayManager">
        select <include refid="Column_List"/>
        from pay_manager
        <include refid="where"/>
        order by id desc
        limit 1
    </select>
    <!--定义根据-PayManager当作查询条件返回对象集合-->
    <select id="findList" resultType="com.kidgrow.oprationcenter.model.PayManager">
        select <include refid="Column_List"/>
        from pay_manager
        <include refid="where"/>
        order by id desc
    </select>
</mapper>
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
New file
@@ -0,0 +1,167 @@
package com.kidgrow.oprationcenter.controller;
import com.kidgrow.common.annotation.LoginUser;
import com.kidgrow.common.controller.BaseController;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.model.SysUser;
import com.kidgrow.oprationcenter.model.PayManager;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
import com.kidgrow.oprationcenter.service.IPayManagerService;
import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 *
 * @Description:
 * @Project: 运营中心
 * @CreateDate: Created in 2020-09-21 14:16:18 <br>
 * @Author: <a href="411269194@kidgrow.com">houruijun</a>
 * @version: 1.0
 */
@Slf4j
@RestController
@RequestMapping("/paymanager")
@Api(tags = "")
public class PayManagerController extends BaseController {
    @Autowired
    private IPayManagerService payManagerService;
    @Autowired
    private IProductOrderDetailService productOrderDetailService;
    /**
     * 列表
     */
    @ApiOperation(value = "查询列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "分页起始位置", required = true, dataType = "Integer"),
            @ApiImplicitParam(name = "limit", value = "分页结束位置", required = true, dataType = "Integer")
    })
    @GetMapping
    public ResultBody<PageResult> list(@RequestParam Map<String, Object> params) {
        if (params.size() == 0) {
            params.put("page", 1);
            params.put("limit", 10);
        }
        return ResultBody.ok().data(payManagerService.findList(params));
    }
    /**
     * 查询
     */
    @ApiOperation(value = "查询")
    @GetMapping("/{id}")
    public ResultBody findById(@PathVariable Long id) {
        PayManager model = payManagerService.getById(id);
        return ResultBody.ok().data(model).msg("查询成功");
    }
    /**
     * 查询
     */
    @ApiOperation(value = "查询一个科室的单次支付金额")
    @GetMapping("/getDepartmentPay")
    public ResultBody getDepartmentPay(@RequestParam Long hospitalId, @RequestParam Long departmentId) {
        PayManager payManager = new PayManager();
        payManager.setDepartmentId(departmentId);
        payManager.setHospitalId(hospitalId);
        payManager.setIsDel(false);
        payManager.setEnabled(true);
        PayManager model = payManagerService.findByObject(payManager);
        if (model != null) {
            return ResultBody.ok().data(model.getPayPrice()).msg("已开通");
        }
        return ResultBody.failed().msg("未开通支付功能");
    }
    /**
     * 根据PayManager当做查询条件进行查询
     */
    @ApiOperation(value = "根据PayManager当做查询条件进行查询")
    @PostMapping("/query")
    public ResultBody findByObject(@RequestBody PayManager payManager) {
        PayManager model = payManagerService.findByObject(payManager);
        return ResultBody.ok().data(model).msg("查询成功");
    }
    /**
     * 查询一个科室是否有支付功能
     */
    @ApiOperation(value = "查询一个科室是否有支付功能")
    @GetMapping("/departmentIsPay")
    public ResultBody departmentIsPay(@RequestParam Long hospitalId, @RequestParam Long departmentId) {
        PayManager payManager=payManagerService.findByObject(hospitalId,departmentId);
        if (payManager.getId() == null) {
            return ResultBody.ok().data(false).msg("未开通单次支付功能");
        }
        else
        {
            return ResultBody.ok().data(true).msg("已开通单次支付功能");
        }
    }
    /**
     * 新增or更新
     */
    @ApiOperation(value = "保存")
    @PostMapping
    @Transactional(rollbackFor = {Exception.class})
    public ResultBody save(@Valid @RequestBody PayManager payManager, BindingResult bindingResult, @LoginUser SysUser sysUser) {
        List<String> errMsg = new ArrayList<>();
        if (bindingResult.hasErrors()) {
            for (ObjectError error : bindingResult.getAllErrors()) {
                errMsg.add(error.getDefaultMessage());
            }
            return ResultBody.failed().msg(errMsg.toString());
        } else {
            if (payManager.getId()!=null) {
                //修改支付功能
                ProductOrderDetail modelDetail=payManagerService.getProductDetail(payManager.getHospitalId(),payManager.getDepartmentId());
                if(!payManager.getEnabled()&&modelDetail!=null)
                {
                    //支付禁用  禁用套餐
                    modelDetail.setEnabled(false);
                    modelDetail.setIsDel(true);
                    if(!productOrderDetailService.saveOrUpdate(modelDetail))
                    {
                        return ResultBody.failed().msg("套餐修改失败!支付开通修改失败!");
                    }
                }
                else if(modelDetail==null)
                {
                    Boolean isResult=payManagerService.saveproductOrder(payManager,sysUser);
                    if (!isResult) {
                        return ResultBody.failed().msg("套餐充入失败,支付开通失败!");
                    }
                }
            } else {
                Boolean isResult=payManagerService.saveproductOrder(payManager,sysUser);
                if (!isResult) {
                    return ResultBody.failed().msg("套餐充入失败!支付开通失败!");
                }
            }
            boolean v = payManagerService.saveOrUpdate(payManager);
            if (v) {
                return ResultBody.ok().data(payManager).msg("保存成功");
            } else {
                return ResultBody.failed().msg("保存失败");
            }
        }
    }
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java
@@ -1,6 +1,7 @@
package com.kidgrow.oprationcenter.controller;
import com.kidgrow.common.annotation.LoginUser;
import com.kidgrow.common.constant.CommonConstant;
import com.kidgrow.common.controller.BaseController;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
@@ -125,6 +126,7 @@
                StringUtils.isNotBlank(params.get("departmentId").toString())&&
                        StringUtils.isNotBlank(params.get("hospitalName").toString())&&
                                StringUtils.isNotBlank(params.get("departmentName").toString())) {
            params.put("proId", CommonConstant.REG_USER_PRODUCT_ID);
            boolean isResult= productOrderService.saveProductDetail(params,sysUser);
            if (isResult) {
                return ResultBody.ok().data(isResult).msg("试用套餐充值成功");
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java
@@ -1,5 +1,6 @@
package com.kidgrow.oprationcenter.controller;
import com.kidgrow.common.constant.PayConstants;
import com.kidgrow.common.controller.BaseController;
import com.kidgrow.common.model.PageResult;
import com.kidgrow.common.model.ResultBody;
@@ -117,7 +118,18 @@
            }
        }
    }
    /**
     * 查询 支付状态是否为成功
     */
    @ApiOperation(value = "查询一个诊断的支付状态")
    @GetMapping("/getDepartmentPay")
    public ResultBody getDepartmentPayState(@RequestParam Long hospitalId, @RequestParam Long departmentId, @RequestParam String diaId) {
        SaasClientPay model = saasClientPayService.findModelByObject(hospitalId,departmentId,diaId);
        if (model != null) {
            return ResultBody.ok().data(model.getPayStatus().equals(PayConstants.ORDER_PAY_SUCEESS)).msg("查询成功");
        }
        return ResultBody.failed().data(false).msg("没有相关数据");
    }
    /**
     * 删除
     */
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
@@ -91,6 +91,7 @@
      - product_order_detail
      - product_order_record
      - saas_client_pay
      - pay_manager
    ignoreSqls:
      - com.kidgrow.usercenter.mapper.SysRoleMapper.findAll
      - com.kidgrow.oprationcenter.mapper.ConsumptionRecordMapper.findDetailList
kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml
@@ -90,6 +90,7 @@
        LEFT JOIN sys_role ROLE ON RU.role_id = ROLE.id
        WHERE
        USERS.is_del = 0
        and USERS.enabled = 1
        <if test="type == 0">
            AND ROLE.`code` IN (
            'salemanager',
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java
@@ -283,13 +283,17 @@
     */
    public static final Long REG_USER_PRODUCT_ID=1000000000000000001L;
    /**
     * 单次支付用户固定使用的套餐id
     */
    public static final Long PAY_USER_PRODUCT_ID=1000000000000000000L;
    /**
     * 自主注册的用户合同时长 天
     */
    public static final Integer REG_USER_CONTRACT_DAY=15;
    /**
     * 自主注册的用户合同名
     */
    public static final String REG_USER_CONTRACT_NAME="注册用户免费合同";
    public static final String REG_USER_CONTRACT_NAME="自动创建合同";
    /**
     * 自主注册的创建人id
     */
kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java
New file
@@ -0,0 +1,21 @@
package com.kidgrow.common.constant;
/**
 * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
 *
 * @Description: 支付相关<br>
 * @Project: <br>
 * @CreateDate: Created in 2020/06/23 16:24 <br>
 * @Author: <a href="4345453@kidgrow.com">houruijun</a>
 **/
public interface PayConstants {
    //支付状态
    //0订单创建
    int CREATE_ORDER=0;
    //1订单提交到网关
    int SUBMIT_ORDER=1;
    //2订单支付成功
    int ORDER_PAY_SUCEESS=2;
    //-1订单支付失败
    int ORDER_PAY_FAIL=-1;
}
kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html
@@ -127,9 +127,6 @@
        $('.login-captcha').click(function () {
            this.src = this.src + '?t=' + (new Date).getTime();
        });
    });
</script>
</body>
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
@@ -21,24 +21,16 @@
                <option value="1">-是-</option>
                <option value="0">-否-</option>
            </select>
            &emsp;
            <!-- <select id="isanswer" placeholder="选择医答状态" lay-filter="isanswer">
                <option value="">-是否医答-</option>
            <select id="isanswer" placeholder="支付功能" lay-filter="ispay">
                <option value="">-支付功能-</option>
                <option value="1">-是-</option>
                <option value="0">-否-</option>
            </select>
             &emsp;
            <select id="hospitalstate" placeholder="选择医院状态" lay-filter="hospitalstate">
                <option value="">-医院状态-</option>
                <option value="0">试用</option>
                <option value="1">正式</option>
            </select> -->
            &emsp;
            <input id="hosName" class="layui-input search-input" type="text" placeholder="按医院名" />&emsp;
            <input id="hosName" class="layui-input search-input" type="text" placeholder="按医院名" />
            <button id="hospita-btn-search" class="layui-btn icon-btn"><i class="layui-icon permissions"
                    permissions="hospital-get">&#xe615;</i>搜索</button>&emsp;
            <button id="hospital-btn-add" class="layui-btn icon-btn"><i class="layui-icon permissions"
                    permissions="hospital-save">&#xe654;</i>添加医院/科室</button>
                    permissions="hospital-save"></i>添加医院/科室</button>
        </div>
        <!-- 数据表格 -->
@@ -50,8 +42,9 @@
<script type="text/html" id="businessRecords-table-bar">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="productdetail-List">套餐</a>
    <a class="layui-btn layui-btn-xs permissions" permissions="product-rechage" lay-event="pay">充值</a>
    <a class="layui-btn layui-btn-xs layui-btn-normal" permissions="product-pay" lay-event="userpay">支付</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs permissions" permissions="hospital-save" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs permissions" permissions="hospital-del" lay-event="del">删除科室</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs permissions" permissions="hospital-del" lay-event="del">删除</a>
</script>
<!-- 表格状态列 -->
<script type="text/html" id="hospital-tpl-state">
@@ -161,7 +154,7 @@
                    },
                    {
                        field: 'hospitalId',
                        width: 225,
                        width: 240,
                        align: 'center',
                        toolbar: '#businessRecords-table-bar',
                        title: '操作',
@@ -218,6 +211,19 @@
            {
                productdetailShow(obj);
            }
            else if (layEvent === "userpay") {
                //充值
                admin.putTempData("t_hospital", data);
                admin.popupCenter({
                    title: '单次支付功能',
                    path: 'pages/opration/hospital_pay.html',
                    area: '500px',
                    offset: '50px',
                    finish: function () {
                        $('#hospita-btn-search').click();
                    }
                });
            }
        });
        // 搜索按钮点击事件
        $('#hospita-btn-search').click(function () {
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
New file
@@ -0,0 +1,130 @@
<form id="pay-form" lay-filter="pay-form" class="layui-form model-form" method="POST">
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">医院</label>
        <div class="layui-input-block">
            <input name="hospitalName" type="text" class="layui-input" style="width: 200px;"disabled="disabled"/>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">科室</label>
        <div class="layui-input-block">
            <input name="departmentName" type="text" class="layui-input" style="width: 200px;" disabled="disabled"/>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">功能状态</label>
        <div class="layui-input-block">
            <input type="checkbox" checked="checked" name="enabled" lay-skin="switch" lay-filter="payenabled"
                lay-text="启用|停用" />
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">单次支付金额(元)</label>
        <div class="layui-input-block">
            <input name="payPrice" type="text" class="layui-input" maxlength="8" lay-verify="required|number" required
                autocomplete="off" style="width: 200px;" />
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">客户所得(元)</label>
        <div class="layui-input-block">
            <input name="payCustom" type="text" autocomplete="off" class="layui-input" maxlength="8"
                lay-verify="required|number" required style="width: 200px;" />
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label" style="width: 150px;">喜高所得(元)</label>
        <div class="layui-input-block">
            <input name="payKidgrow" type="text" autocomplete="off" class="layui-input" maxlength="8"
                lay-verify="required|number" required style="width: 200px;" />
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label"></label>
        <div class="layui-input-block">
            喜高所得=单次支付金额-客户所得
        </div>
    </div>
    <div class="layui-form-item model-form-footer">
        <button class="layui-btn layui-btn-primary" ew-event="closeDialog" type="button">取消</button>
        <button class="layui-btn permissions" permissions="productpay-edit" lay-filter="pay-form-submit"
            lay-submit>保存</button>
    </div>
    <input type="hidden" value="" id="id" name="id" />
    <input type="hidden" value="" id="departmentId" name="departmentId" />
    <input type="hidden" value="" id="hospitalId" name="hospitalId" />
    <input type="hidden" value="" id="departmentName" name="departmentName" />
    <input type="hidden" value="" id="hospitalName" name="hospitalName" />
</form>
<script>
    layui.use(['form', 'table', 'util', 'config', 'admin', 'formSelects'], function () {
        var form = layui.form;
        var table = layui.table;
        var config = layui.config;
        var layer = layui.layer;
        var util = layui.util;
        var admin = layui.admin;
        var formSelects = layui.formSelects;
        //回显医院基本数据
        let hospitalData = admin.getTempData('t_hospital');
        form.val('pay-form', hospitalData);
        layer.load(2);
        var queryModel = {
            hospitalId: hospitalData.hospitalId,
            hospitalName: '',
            departmentName: '',
            payPrice: '',
            payKidgrow: '',
            payCustom: '',
            departmentId: hospitalData.departmentId
        };
        admin.req('api-opration/paymanager/query', JSON.stringify(queryModel), function (data) {
            layer.closeAll('loading');
            if (0 === data.code) {
                queryData = data.data;
                if (queryData != null) {
                    form.val('pay-form', queryData);
                }
            }
        }, 'POST');
        form.render();
        // 表单提交事件
        form.on('submit(pay-form-submit)', function (data) {
            layer.load(2);
            if (data.field.enabled === 'on') {
                data.field.enabled = true;
            } else {
                data.field.enabled = false;
            }
            if (parseInt(data.field.payPrice) - parseInt(data.field.payCustom) == parseInt(data.field
                    .payKidgrow)) {
                admin.req('api-opration/paymanager', JSON.stringify(data.field), function (data) {
                    if (data.code === 0) {
                        layer.closeAll('loading');
                        layer.msg(data.msg, {
                            icon: 1,
                            time: 2000
                        });
                        admin.finishPopupCenter();
                    } else {
                        layer.closeAll('loading');
                        layer.msg(data.msg, {
                            icon: 2,
                            time: 2000
                        });
                    }
                }, $('#pay-form').attr('method'));
            } else {
                layer.closeAll('loading');
                layer.msg("金额分配额有误!(喜高所得=单次支付金额-客户所得)", {
                    icon: 2,
                    time: 5000
                });
            }
            return false;
        });
    })
</script>