From 6fd4bdff55620c562e0a22eee3c95924951b04a4 Mon Sep 17 00:00:00 2001
From: zhaoxiaohao <279049017@qq.com>
Date: Thu, 24 Sep 2020 14:10:28 +0800
Subject: [PATCH] Merge branch 'pay_master' of ssh://192.168.2.240:29418/kidgrow-microservices-platform into pay_master

---
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml                                                   |    1 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java                |   45 +
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java                   |   34 +
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java     |   14 
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html                                                                       |   34 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java        |  128 +++++
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html                                                                   |  130 +++++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml                                          |   82 +++
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html                                                                                         |    3 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java                          |   77 +++
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java        |  167 +++++++
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml                                                       |    1 
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java                                             |    6 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java                     |    9 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java      |    2 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ConsumptionRecordServiceImpl.java |  570 ++++++++++++++----------
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java      |    2 
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java                                               |   21 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java     |   16 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java                   |    4 
 kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java             |    1 
 21 files changed, 1,085 insertions(+), 262 deletions(-)

diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
index fd7746d..16e20b8 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ConsumptionRecord.java
+++ b/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:退预扣费(需要关联预扣费编号)
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
new file mode 100644
index 0000000..1abf4b7
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/PayManager.java
@@ -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;
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java
index f5f534f..17b47f9 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/vo/ConsumptionRequest.java
+++ b/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;
 }
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java
new file mode 100644
index 0000000..d450afe
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/mapper/PayManagerMapper.java
@@ -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);
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java
new file mode 100644
index 0000000..3b4315d
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IPayManagerService.java
@@ -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);
+}
+
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java
index c28792a..a5b7bfe 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/ISaasClientPayService.java
+++ b/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
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 1a3955b..454c824 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,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;
     }
 }
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java
new file mode 100644
index 0000000..907bed0
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/PayManagerServiceImpl.java
@@ -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;
+    }
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java
index d631229..93a9485 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderServiceImpl.java
+++ b/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();
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java
index b3095f5..ea78e78 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/SaasClientPayServiceImpl.java
@@ -85,6 +85,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) {
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml
new file mode 100644
index 0000000..78d1c37
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/resources/mapper/PayManagerMapper.xml
@@ -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>
\ No newline at end of file
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
new file mode 100644
index 0000000..85e0f7a
--- /dev/null
+++ b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/PayManagerController.java
@@ -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("保存失败");
+            }
+        }
+    }
+}
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java
index 19dda58..bd3005b 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderController.java
+++ b/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("试用套餐充值成功");
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java
index 51ee48c..b6f93e1 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/SaasClientPayController.java
+++ b/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("没有相关数据");
+    }
     /**
      * 删除
      */
diff --git a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml b/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
index 133bc9c..e2fab01 100644
--- a/kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/resources/application.yml
+++ b/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
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml
index 07d25a1..f64ca97 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysUserMapper.xml
+++ b/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',
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java
index 1ae6ce1..767fc85 100644
--- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/CommonConstant.java
+++ b/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
      */
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java
new file mode 100644
index 0000000..e886963
--- /dev/null
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/PayConstants.java
@@ -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;
+}
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html
index ff4eb0e..8bd8345 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/login.html
+++ b/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>
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
index 80b9a41..ea1061a 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
+++ b/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 () {
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
new file mode 100644
index 0000000..e49a159
--- /dev/null
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital_pay.html
@@ -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>
\ No newline at end of file

--
Gitblit v1.8.0