Pārlūkot izejas kodu

Merge branch 'review-zjh'

周箭河 5 gadi atpakaļ
vecāks
revīzija
7d5e1881e0
25 mainītis faili ar 2444 papildinājumiem un 699 dzēšanām
  1. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysAccountDao.java
  3. 226 0
      mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java
  4. 0 9
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  5. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysAccountService.java
  6. 52 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  7. 22 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  8. 47 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysAccountServiceImpl.java
  9. 340 322
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  10. 10 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  11. 3 0
      mec-biz/src/main/resources/config/mybatis/SysAccountMapper.xml
  12. 15 0
      mec-student/src/main/java/com/ym/mec/student/StudentApplication.java
  13. 96 45
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  14. 10 2
      mec-thirdparty/pom.xml
  15. 0 82
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/NotifyCallback.java
  16. 0 198
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Pay.java
  17. 134 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/AdapayTools.java
  18. 88 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Bill.java
  19. 65 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/ConfigInit.java
  20. 153 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/CorpMember.java
  21. 107 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/MainDemo.java
  22. 244 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Member.java
  23. 201 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Payment.java
  24. 156 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Refund.java
  25. 457 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/SettleAccount.java

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -267,12 +267,21 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     /**
      * 统计充值金额
+     *
      * @param params
      * @return
      */
     BigDecimal getChargeAmount(Map<String, Object> params);
 
     /**
+     * 统计商户当月收款金额
+     * @param merNo
+     * @param firstDate
+     * @return
+     */
+    BigDecimal sumAccountAmount(@Param("merNo") String merNo, @Param("firstDate") Date firstDate);
+
+    /**
      * @describe 统计课程组非失败订单数量
      * @author Joburgess
      * @date 2020.06.22

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysAccountDao.java

@@ -33,8 +33,14 @@ public interface SysAccountDao extends BaseDAO<Integer, SysAccount> {
 
     /**
      * 获取所有私有账户
+     *
      * @param channel
      * @return
      */
     List<SysAccount> getPerAccount(@Param("channel") String channel);
+
+
+    SysAccount getAdaAccount(@Param("organId") Integer organId, @Param("channel") String channel);
+
+
 }

+ 226 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java

@@ -0,0 +1,226 @@
+package com.ym.mec.biz.service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.notify.MQTTCallbackHandler;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.thirdparty.adapay2.ConfigInit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+
+@Service
+public class NotifyCallback implements MQTTCallbackHandler {
+
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private TenantPaymentOrderService tenantPaymentOrderService;
+
+    private static NotifyCallback notifyCallback;
+
+    @PostConstruct
+    public void init() {
+        notifyCallback = this;
+    }
+
+    /**
+     * 用户接收并处理支付成功的异步消息
+     *
+     * @param payment 成功的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentSuccessMessageArrived(String payment) throws Exception {
+        System.out.println(String.format("receive paymentSuccess  msg=%s", payment));
+        JSONObject dataObj = JSON.parseObject(payment);
+        if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
+            return;
+        }
+        String orderNo = dataObj.getString("order_no");
+        StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
+
+        if (studentPaymentOrder != null) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("channelType", dataObj.getString("pay_channel"));
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+            notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+            notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
+        } else {
+            TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
+            tenantPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+            tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
+            tenantPaymentOrder.setActualAmount(new BigDecimal(dataObj.getString("pay_amt")));
+            notifyCallback.tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
+        }
+    }
+
+    /**
+     * 用户接收并处理支付失败的异步消息
+     *
+     * @param payment 失败的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentFailedMessageArrived(String payment) throws Exception {
+        System.out.println(String.format("receive paymentFailed msg=%s", payment));
+
+        JSONObject dataObj = JSON.parseObject(payment);
+        if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
+            return;
+        }
+
+        String orderNo = dataObj.getString("order_no");
+        StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
+
+        if (studentPaymentOrder != null) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("channelType", dataObj.getString("pay_channel"));
+            notifyMap.put("tradeState", "0");
+            notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+            notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+            notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
+        } else {
+            TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
+            tenantPaymentOrder.setStatus(DealStatusEnum.FAILED);
+            tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
+            notifyCallback.tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
+        }
+    }
+
+
+    /**
+     * 用户接收并处理关闭支付交易成功的异步消息
+     *
+     * @param payment 关闭成功的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentCloseSuccessMessageArrived(String payment) throws Exception {
+        System.out.println(String.format("receive paymentCloseSuccess msg=%s", payment));
+        JSONObject dataObj = JSON.parseObject(payment);
+        if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
+            return;
+        }
+        String orderNo = dataObj.getString("order_no");
+        StudentPaymentOrder studentPaymentOrder = notifyCallback.studentPaymentOrderService.findOrderByOrderNo(orderNo);
+
+        if (studentPaymentOrder != null) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("channelType", dataObj.getString("pay_channel"));
+            notifyMap.put("tradeState", "0");
+            notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+            notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+            notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
+        } else {
+            TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
+            tenantPaymentOrder.setStatus(DealStatusEnum.FAILED);
+            tenantPaymentOrder.setPaymentBusinessChannel(dataObj.getString("pay_channel"));
+            tenantPaymentOrderService.paymentForCallback(tenantPaymentOrder);
+        }
+    }
+
+    /**
+     * 用户接收并处理关闭支付交易失败的异步消息
+     *
+     * @param payment 关闭失败的支付对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void paymentCloseFailedMessageArrived(String payment) throws Exception {
+        System.out.println(String.format("receive paymentCloseFailed msg=%s", payment));
+    }
+
+    @Override
+    public void paymentReverseFailedMessageArrived(String payment) throws Exception {
+
+        System.out.println(String.format("receive payment ReverseFailed msg=%s", payment));
+    }
+
+    @Override
+    public void paymentReverseSuccessMessageArrived(String payment) throws Exception {
+        System.out.println(String.format("receive payment ReverseSuccess msg=%s", payment));
+    }
+
+    /**
+     * 用户接收并处理退款成功的异步消息
+     *
+     * @param refund 成功的退款对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void refundSuccessMessageArrived(String refund) throws Exception {
+        System.out.println(String.format("receive refundSuccess msg=%s", refund));
+    }
+
+    /**
+     * 用户接收并处理退款失败的异步消息
+     *
+     * @param refund 失败的退款对象
+     * @throws Exception 异常
+     */
+    @Override
+    public void refundFailedMessageArrived(String refund) throws Exception {
+        System.out.println(String.format("receive refundFailed   msg=%s", refund));
+    }
+
+    @Override
+    public void corpMemberSuccessMessageArrived(String corpMember) throws Exception {
+        System.out.println(String.format("receive corpMember   msg=%s", corpMember));
+    }
+
+    @Override
+    public void corpMemberFailedMessageArrived(String corpMember) throws Exception {
+        System.out.println(String.format("receive corpMember  msg=%s", corpMember));
+    }
+
+    @Override
+    public void unknowMessageArrived(String message) throws Exception {
+        System.out.println(String.format("receive unknow  msg=%s", message));
+    }
+
+    @Override
+    public void drawCashFailedMessageArrived(String drawCash) throws Exception {
+        System.out.println(String.format("receive unknow  msg=%s", drawCash));
+
+    }
+
+    @Override
+    public void drawCashSuccessedMessageArrived(String drawCash) throws Exception {
+
+        System.out.println(String.format("receive unknow  msg=%s", drawCash));
+
+    }
+
+    @Override
+    public void pagePaymentFailedMessageArrived(String arg0) throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void pagePaymentSuccessedMessageArrived(String arg0) throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void connectionLost(String message) throws Exception {
+        // TODO Auto-generated method stub
+        System.out.println("mqtt...........lost.............");
+
+    }
+
+    @Override
+    public void connectSuccess() throws Exception {
+        System.out.println("mqtt...........connect.............");
+    }
+}

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -1,16 +1,7 @@
 package com.ym.mec.biz.service;
 
 
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.SysAccount;
-import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
-import com.ym.mec.thirdparty.adapay.Pay;
-import com.ym.mec.thirdparty.yqpay.Msg;
-import com.ym.mec.thirdparty.yqpay.YqPayUtil;
-
 import java.math.BigDecimal;
-import java.util.HashMap;
 import java.util.Map;
 
 /**

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysAccountService.java

@@ -38,4 +38,7 @@ public interface SysAccountService extends BaseService<Integer, SysAccount> {
      */
     SysAccount getPerAccount(@Param("channel") String channel,SysAccount account);
 
+
+    List<SysAccount> getAdaAccount(Integer organId, String channel, BigDecimal amount);
+
 }

+ 52 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -2,8 +2,6 @@ package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
-import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.SysAccount;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
 import com.ym.mec.biz.dal.enums.PaymentChannelTypeEnum;
@@ -11,7 +9,7 @@ import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.biz.service.SysAccountService;
 import com.ym.mec.biz.service.SysPaymentConfigService;
-import com.ym.mec.thirdparty.adapay.Pay;
+import com.ym.mec.thirdparty.adapay2.Payment;
 import com.ym.mec.thirdparty.union.UnionPay;
 import com.ym.mec.thirdparty.union.UnionPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
@@ -72,7 +70,7 @@ public class PayServiceImpl implements PayService {
             payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), routingAccount.getRoutingMerNo());
             type = "YQPAY";
         } else {
-            payMap = new Pay().getPayMap(amount, orderNo, notifyUrl, orderSubject, orderBody);
+            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), null);
             type = "ADAPAY";
         }
 
@@ -89,31 +87,42 @@ public class PayServiceImpl implements PayService {
         //支付通道决策
         Map<String, Object> unionPay = new HashMap<>();
         Map<String, BigDecimal> routingFee = getRoutingFee(company, amount, fee, organId);
-        List<SysAccount> accounts = getRoutingAccount(routingFee, company);
+        List<SysAccount> accounts = getRoutingAccount(routingFee, company, organId);
         SysAccount routingAccount = accounts.get(0);
 
         Map<String, Object> payMap = null;
         String type = null;
-        if (routingAccount.getChannel().equals("YQPAY")) {
-            List<Map<String, Object>> tempRoutingList = new ArrayList();
-            for (SysAccount account : accounts) {
-                Map<String, Object> routingList = new HashMap<>();
+        List<Map<String, Object>> tempRoutingList = new ArrayList();
+        for (SysAccount account : accounts) {
+            Map<String, Object> routingList = new HashMap<>();
+            if (account.getChannel().equals("YQPAY")) {
                 routingList.put("routingMerNo", account.getRoutingMerNo());//分佣账户
                 routingList.put("routingFee", account.getRoutingFee().subtract((account.getRoutingFee().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额
-                tempRoutingList.add(routingList);
+            } else {
+                routingList.put("member_id", account.getMerNo());//分佣账户
+                routingList.put("amount", amount);//分佣金额
+                routingList.put("fee_flag", "Y"); //承担手续费
             }
+            tempRoutingList.add(routingList);
+        }
+
+        String routingMerNos;
+        if (routingAccount.getChannel().equals("YQPAY")) {
             if (accounts.size() == 1 && routingAccount.getMerNo().equals(routingAccount.getRoutingMerNo())) {
                 tempRoutingList = null;
             }
-
             payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
             type = "YQPAY";
+            routingMerNos = accounts.stream().map(sysAccount -> sysAccount.getRoutingMerNo()).collect(Collectors.joining(","));
         } else {
-            payMap = new Pay().getPayMap(amount, orderNo, notifyUrl, orderSubject, orderBody);
+            if (accounts.size() == 1 && routingAccount.getRoutingOrganId().equals(organId)) {
+                tempRoutingList = null;
+            }
+            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
             type = "ADAPAY";
+            routingMerNos = accounts.stream().map(SysAccount::getMerNo).collect(Collectors.joining(","));
         }
 
-        String routingMerNos = accounts.stream().map(sysAccount -> sysAccount.getRoutingMerNo()).collect(Collectors.joining(","));
 
         unionPay.put("orderNo", orderNo);
         unionPay.put("type", type);
@@ -134,45 +143,55 @@ public class PayServiceImpl implements PayService {
         if (companies.contains(receiver)) {
             company = receiver;
             receiver = null;
-        }else {
+        } else {
             receiver = null;
         }
 
         //支付通道决策
         Map<String, Object> unionPay = new HashMap<>();
         Map<String, BigDecimal> routingFee = getRoutingFee(company, amount, fee, organId, receiver);
-        List<SysAccount> accounts = getRoutingAccount(routingFee, company);
+        List<SysAccount> accounts = getRoutingAccount(routingFee, company, organId);
         SysAccount routingAccount = accounts.get(0);
 
         Map<String, Object> payMap = null;
         String type = null;
-        if (routingAccount.getChannel().equals("YQPAY")) {
-            List<Map<String, Object>> tempRoutingList = new ArrayList();
-            for (SysAccount account : accounts) {
-                Map<String, Object> routingList = new HashMap<>();
+        List<Map<String, Object>> tempRoutingList = new ArrayList();
+        for (SysAccount account : accounts) {
+            Map<String, Object> routingList = new HashMap<>();
+            if (account.getChannel().equals("YQPAY")) {
                 routingList.put("routingMerNo", account.getRoutingMerNo());//分佣账户
                 routingList.put("routingFee", account.getRoutingFee().subtract((account.getRoutingFee().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_UP))); //分佣金额
-                tempRoutingList.add(routingList);
+            } else {
+                routingList.put("member_id", account.getMerNo());//分佣账户
+                routingList.put("amount", account.getRoutingFee());//分佣金额
+                routingList.put("fee_flag", "Y"); //承担手续费
             }
+            tempRoutingList.add(routingList);
+        }
+
+        String routingMerNos;
+        if (routingAccount.getChannel().equals("YQPAY")) {
             if (accounts.size() == 1 && routingAccount.getMerNo().equals(routingAccount.getRoutingMerNo())) {
                 tempRoutingList = null;
             }
-
             payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
             type = "YQPAY";
+            routingMerNos = accounts.stream().map(SysAccount::getRoutingMerNo).collect(Collectors.joining(","));
         } else {
-            payMap = new Pay().getPayMap(amount, orderNo, notifyUrl, orderSubject, orderBody);
+            if (accounts.size() == 1 && routingAccount.getRoutingOrganId().equals(organId)) {
+                tempRoutingList = null;
+            }
+            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routingAccount.getMerNo(), tempRoutingList);
             type = "ADAPAY";
+            routingMerNos = accounts.stream().map(SysAccount::getMerNo).collect(Collectors.joining(","));
         }
-
-        String routingMerNos = accounts.stream().map(sysAccount -> sysAccount.getRoutingMerNo()).collect(Collectors.joining(","));
-
         unionPay.put("orderNo", orderNo);
         unionPay.put("type", type);
         unionPay.put("payMap", payMap);
         unionPay.put("routingFee", routingFee);
         unionPay.put("routingMerNos", routingMerNos);
         unionPay.put("routingOrganId", accounts.get(0).getRoutingOrganId());
+        unionPay.put("paymentAccountNo", accounts.get(0).getCompany());
         return unionPay;
     }
 
@@ -219,7 +238,7 @@ public class PayServiceImpl implements PayService {
      * @param company
      * @return
      */
-    private List<SysAccount> getRoutingAccount(Map<String, BigDecimal> routingFee, String company) {
+    private List<SysAccount> getRoutingAccount(Map<String, BigDecimal> routingFee, String company, Integer organId) {
         String channel = "";
         String type = "";
 
@@ -235,6 +254,13 @@ public class PayServiceImpl implements PayService {
         }
         List<SysAccount> accounts = sysAccountService.getAccount(company, channel, type, null);
 
+        if (sysConfigDao.findConfigValue("com_account_channel").equals("ADAPAY") &&
+                sysConfigDao.findConfigValue("per_account_channel").equals("ADAPAY")
+        ) {
+            BigDecimal amount = routingFee.get("COM").add(routingFee.get("PER"));
+            accounts = sysAccountService.getAdaAccount(organId, channel, amount);
+        }
+
         for (SysAccount account : accounts) {
             if (account.getType().equals("COM")) {
                 account.setRoutingFee(routingFee.get("COM"));

+ 22 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
@@ -9,23 +8,20 @@ import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
 import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
 import com.ym.mec.biz.dal.entity.Goods;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
-import com.ym.mec.biz.dal.entity.StudentRepair;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.thirdparty.adapay.Pay;
+import com.ym.mec.thirdparty.adapay2.Payment;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
 import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.collection.MapUtil;
 
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -140,8 +136,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                         updateOrder(rpMap); //更新订单
                     } catch (Exception e) {
                         e.printStackTrace();
-                        continue;
                     }
+                    continue;
                 }
             }
             closeOrders(orderNoList); //关闭订单
@@ -161,19 +157,32 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                 orderNoList.add(payingOrder.getOrderNo());
                 continue;
             }
-            Payment payment = new Pay().queryPayment(payingOrder.getTransNo());
+            Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo());
             Map<String, String> rpMap = new HashMap<>();
             rpMap.put("merOrderNo", payingOrder.getOrderNo());
-            rpMap.put("remarks", payment.getReason());
-            rpMap.put("orderNo", payment.getId());
-            rpMap.put("channelType", payment.getPayChannel());
-            if (payment.getStatus().equals("succeeded")) {
+            rpMap.put("orderNo", (String) payment.get("id"));
+            rpMap.put("channelType", (String) payment.get("pay_channel"));
+            String status = (String) payment.get("status");
+            if(payment.containsKey("error_msg")){
+                rpMap.put("remarks", (String) payment.get("error_msg"));
+            }
+            if (status.equals("succeeded")) {
                 rpMap.put("tradeState", "1");
             }
-            if (payment.getStatus().equals("failed")) {
+            if (status.equals("failed")) {
                 rpMap.put("tradeState", "0");
             }
-            if (payment.getStatus().equals("pending")) {
+
+            if (rpMap.containsKey("tradeState")) {
+                try {
+                    updateOrder(rpMap); //更新订单
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    continue;
+                }
+            }
+
+            if (status.equals("pending")) {
                 orderNoList.add(payingOrder.getOrderNo());
             }
         }

+ 47 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysAccountServiceImpl.java

@@ -6,19 +6,24 @@ import com.ym.mec.biz.dal.entity.SysAccount;
 import com.ym.mec.biz.dal.entity.SysArea;
 import com.ym.mec.biz.service.SysAccountService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 @Service
 public class SysAccountServiceImpl extends BaseServiceImpl<Integer, SysAccount> implements SysAccountService {
 
+    static private SysAccount originalAccount;
+
     @Autowired
     private SysAccountDao sysAccountDao;
     @Autowired
@@ -45,7 +50,7 @@ public class SysAccountServiceImpl extends BaseServiceImpl<Integer, SysAccount>
         Date nowDate = new Date();
         Date firstDayOfMonth = DateUtil.getFirstDayOfMonth(nowDate);
 
-        BigDecimal amount = studentPaymentOrderDao.sumPerAccountAmount(account.getRoutingMerNo(),firstDayOfMonth);
+        BigDecimal amount = studentPaymentOrderDao.sumPerAccountAmount(account.getRoutingMerNo(), firstDayOfMonth);
 
         if (amount == null || amount.compareTo(maxReceive) < 0) {
             return account;
@@ -54,7 +59,7 @@ public class SysAccountServiceImpl extends BaseServiceImpl<Integer, SysAccount>
         SysAccount newAccount = null;
         List<SysAccount> perAccounts = sysAccountDao.getPerAccount(channel);
         for (SysAccount perAccount : perAccounts) {
-            amount = studentPaymentOrderDao.sumPerAccountAmount(perAccount.getRoutingMerNo(),firstDayOfMonth);
+            amount = studentPaymentOrderDao.sumPerAccountAmount(perAccount.getRoutingMerNo(), firstDayOfMonth);
             if (amount == null || amount.compareTo(maxReceive) < 0) {
                 newAccount = perAccount;
                 break;
@@ -63,4 +68,44 @@ public class SysAccountServiceImpl extends BaseServiceImpl<Integer, SysAccount>
         return newAccount;
     }
 
+    @Override
+    public List<SysAccount> getAdaAccount(Integer organId, String channel, BigDecimal amount) {
+        List<SysAccount> accounts = new ArrayList<>();
+        SysAccount account = sysAccountDao.getAdaAccount(organId, channel);
+
+        if (account == null && originalAccount == null) {
+            throw new BizException("分部账户未设置请设置");
+        } else if (account == null) {
+            accounts.add(originalAccount);
+            return accounts;
+        }
+
+        if (originalAccount != null && originalAccount.getRoutingOrganId().equals(account.getRoutingOrganId())) {
+            accounts.add(originalAccount);
+            return accounts;
+        }
+        originalAccount = account;
+
+        if (account.getMaxReceipt().compareTo(BigDecimal.ZERO) <= 0) {
+            accounts.add(account);
+            return accounts;
+        }
+
+        Date nowDate = new Date();
+        Date firstDayOfMonth = DateUtil.getFirstDayOfMonth(nowDate);
+        BigDecimal hasReceipt = studentPaymentOrderDao.sumAccountAmount(account.getMerNo(), firstDayOfMonth);
+        hasReceipt = hasReceipt == null ? BigDecimal.ZERO : hasReceipt;
+        if (hasReceipt.add(amount).compareTo(account.getMaxReceipt()) < 0) {
+            accounts.add(account);
+        } else {
+            if(StringUtils.isBlank(account.getRoutingMerNo())){
+                accounts.add(originalAccount);
+            }else {
+                String routingMerNo = account.getRoutingMerNo();
+                getAdaAccount(Integer.parseInt(routingMerNo), channel, amount);
+            }
+        }
+        return accounts;
+    }
+
 }

+ 340 - 322
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java

@@ -10,6 +10,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.thirdparty.adapay2.Payment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,7 +21,6 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
-import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.TenantEntryActivitiesDao;
@@ -42,7 +43,6 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
 import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
@@ -53,324 +53,342 @@ import com.ym.mec.util.date.DateUtil;
 @Service
 public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantPaymentOrder> implements TenantPaymentOrderService {
 
-	private static final Logger logger = LoggerFactory.getLogger(TenantPaymentOrderServiceImpl.class);
-
-	@Autowired
-	private TenantPaymentOrderDao tenantPaymentOrderDao;
-
-	@Autowired
-	private TenantEntryActivitiesDao tenantEntryActivitiesDao;
-
-	@Autowired
-	private IdGeneratorService idGeneratorService;
-
-	@Autowired
-	private PayService payService;
-
-	@Autowired
-	private SysConfigDao sysConfigDao;
-
-	@Autowired
-	private TeacherDao teacherDao;
-
-	@Autowired
-	private SysTenantAccountService sysTenantAccountService;
-
-	@Autowired
-	private YqPayFeignService yqPayFeignService;
-
-	@Override
-	public BaseDAO<Long, TenantPaymentOrder> getDAO() {
-		return tenantPaymentOrderDao;
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public HttpResponseResult createOrder(Integer userId, Integer activitiesId, boolean isContinuePay) {
-
-		Teacher teacher = teacherDao.get(userId);
-		if (teacher == null) {
-			throw new BizException("用户信息不存在");
-		}
-
-		Integer organId = teacher.getTeacherOrganId();
-
-		TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId);
-		if (tenantEntryActivities == null) {
-			throw new BizException("活动不存在");
-		}
-
-		Date date = new Date();
-		// 判断活动是否有效
-		if (tenantEntryActivities.getDelFlag() == true) {
-			throw new BizException("活动已下架");
-		}
-		if (date.before(tenantEntryActivities.getStartDate())) {
-			throw new BizException("活动未开始");
-		}
-		if (date.after(tenantEntryActivities.getEndDate())) {
-			throw new BizException("活动已结束");
-		}
-
-		// 查询用户订单
-		List<TenantPaymentOrder> orderList = tenantPaymentOrderDao.queryByUserIdAndActivitiesId(userId, activitiesId);
-		if (orderList != null && orderList.size() > 0) {
-			for (TenantPaymentOrder po : orderList) {
-				// 是否满足条件
-				if (tenantEntryActivities.getSuitableUser() == SuitableUser.NEW) {
-					if (po.getStatus() == DealStatusEnum.SUCCESS) {
-						throw new BizException("首充优惠活动每个用户限参与一次。");
-					}
-
-					if (po.getStatus() == DealStatusEnum.ING) {
-						int i = 35 - DateUtil.minutesBetween(po.getCreateTime(), date);
-						if (i <= 0) {
-							throw new BizException("您有支付中的订单出现异常,请联系客服");
-						}
-						// throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", i);
-						if (isContinuePay == false) {
-							HttpResponseResult result = new HttpResponseResult(true, HttpStatus.CONTINUE, "您存在支付中的订单,是否重新付款?", null);
-							return result;
-						} else {
-							// 关闭原订单
-							po.setStatus(DealStatusEnum.CLOSE);
-							po.setMemo("用户主动关闭");
-							po.setUpdateTime(date);
-							tenantPaymentOrderDao.update(po);
-						}
-					}
-				}
-			}
-		}
-
-		TenantPaymentOrder tenantPaymentOrder = new TenantPaymentOrder();
-		tenantPaymentOrder.setUserId(userId);
-		tenantPaymentOrder.setTransMinutes(tenantEntryActivities.getPurchaseMinutes());
-		tenantPaymentOrder.setGiveMinutes(tenantEntryActivities.getGiveMinutes());
-		tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("tenant_payment") + "");
-		tenantPaymentOrder.setType(TenantPaymentType.RECHARGE);
-		tenantPaymentOrder.setExpectAmount(tenantEntryActivities.getDiscountPrice());
-		tenantPaymentOrder.setStatus(DealStatusEnum.ING);
-		tenantPaymentOrder.setCreateTime(date);
-		tenantPaymentOrder.setUpdateTime(date);
-		tenantPaymentOrder.setVersion(0);
-		tenantPaymentOrder.setOrganId(organId);
-		tenantPaymentOrder.setActivitiesId(activitiesId);
-		tenantPaymentOrderDao.insert(tenantPaymentOrder);
-
-		String baseApiUrl = sysConfigDao.findConfigValue("teacher_base_url");
-
-		// 分类费用 course,instrument,accessories,other
-		Map<String, BigDecimal> classFee = new HashMap<>();
-		classFee.put("course", BigDecimal.ZERO);
-		classFee.put("instrument", BigDecimal.ZERO);
-		classFee.put("accessories", BigDecimal.ZERO);
-		classFee.put("other", tenantPaymentOrder.getExpectAmount());
-
-		try {
-
-			Map<String, Object> payMap = payService.getPayMap(tenantPaymentOrder.getExpectAmount(), tenantPaymentOrder.getOrderNo(), baseApiUrl
-					+ "/api-teacher/teacherOrder/notify", baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(),
-					"商户入驻", "商户充值", userId, classFee, organId, "sdaya");
-
-			Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
-			tenantPaymentOrder.setComAmount(routingFee.get("COM"));
-			tenantPaymentOrder.setPerAmount(routingFee.get("PER"));
-			tenantPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
-			tenantPaymentOrder.setPaymentChannel(PaymentChannelEnum.valueOf(payMap.get("type").toString()));
-			tenantPaymentOrder.setUpdateTime(date);
-			tenantPaymentOrderDao.update(tenantPaymentOrder);
-
-			HttpResponseResult result = new HttpResponseResult(true, HttpStatus.OK, payMap, null);
-			return result;
-		} catch (Exception e) {
-			throw new BizException("调用支付接口出错", e);
-		}
-	}
-
-	@Override
-	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-	public boolean paymentForCallback(TenantPaymentOrder tenantPaymentOrder) {
-
-		Integer activitiesId = tenantPaymentOrder.getActivitiesId();
-
-		Date date = new Date();
-		tenantPaymentOrder.setUpdateTime(date);
-		tenantPaymentOrderDao.update(tenantPaymentOrder);
-
-		Integer userId = tenantPaymentOrder.getUserId();
-
-		if (tenantPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
-
-			TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId);
-			if (tenantEntryActivities == null) {
-				throw new BizException("活动找不到");
-			}
-
-			// 更新账户表信息
-			sysTenantAccountService.update(userId, tenantEntryActivities.getPurchaseMinutes() + tenantEntryActivities.getGiveMinutes(),
-					tenantPaymentOrder.getOrderNo(), TransType.RECHARGE, "", tenantEntryActivities.getDiscountPrice(), "");
-		} else {
-
-		}
-
-		return true;
-	}
-
-	@Override
-	public void queryOrderStatusFromRemote() {
-		try {
-			yqPayQuery();
-		} catch (Exception e) {
-			throw new BizException("查询订单状态出现异常");
-		}
-		try {
-			adaPayQuery();
-		} catch (Exception e) {
-			throw new BizException("查询订单状态出现异常");
-		}
-	}
-
-	private void yqPayQuery() throws Exception {
-		List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
-
-		if (payingOrders.size() == 0) {
-			return;
-		}
-		List<String> orderNoList = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.toList());
-		String merOrderNos = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.joining(","));
-
-		String notifyUrl = ""; // 回调地址
-		Map<String, Object> resultMap = new LinkedHashMap<>();
-		resultMap.put("merOrderNoList", merOrderNos);
-		Map<String, Object> requestMap = YqPayUtil.getRequestMap(notifyUrl, resultMap);
-
-		RsqMsg rsqMsg = new RsqMsg(requestMap);
-
-		Msg queryRs = yqPayFeignService.orderQuery(rsqMsg);
-		logger.info("支付状态查询结果:{}", queryRs);
-		if (queryRs.getCode().equals("88")) {
-			// 更新订单状态
-			String[] statusArr = { "0", "1", "7" };
-			String responseParameters = queryRs.getResponseParameters();
-			List<Map<String, Object>> responseList = JSON.parseObject(responseParameters, List.class);
-			for (Map<String, Object> response : responseList) {
-				Map<String, Object> rpMap = response;
-				String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
-				rpMap.put("channelType", channelType);
-
-				if (orderNoList.contains(rpMap.get("merOrderNo"))) {
-					orderNoList.remove(rpMap.get("merOrderNo"));
-				}
-
-				if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) {
-					try {
-						DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
-						TenantPaymentOrder order = tenantPaymentOrderDao.findOrderByOrderNo(rpMap.get("merOrderNo").toString());
-						if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) {
-							continue;
-						}
-
-						if (status.equals(DealStatusEnum.SUCCESS)) {
-							order.setPayTime(new Date());
-						} else {
-							Object remarks = rpMap.get("remarks");
-							if (remarks != null) {
-								order.setMemo(remarks.toString());
-							}
-						}
-						order.setStatus(status);
-						order.setTransNo(rpMap.get("orderNo").toString());
-						order.setPaymentBusinessChannel(channelType);
-						order.setActualAmount(new BigDecimal(rpMap.get("moneyPayed").toString()));
-						paymentForCallback(order);
-					} catch (Exception e) {
-						e.printStackTrace();
-						continue;
-					}
-				}
-			}
-
-			Date date = new Date();
-			for (TenantPaymentOrder po : payingOrders) {
-				if (orderNoList.contains(po.getOrderNo())) {
-					// 超过30分钟的关闭订单
-					if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) {
-						po.setStatus(DealStatusEnum.FAILED);
-						po.setMemo("超时未支付关闭");
-						paymentForCallback(po);
-					}
-				}
-			}
-		}
-	}
-
-	private void adaPayQuery() throws Exception {
-		List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
-		if (payingOrders.size() == 0) {
-			return;
-		}
-
-		List<String> orderNoList = new ArrayList<String>();
-
-		for (TenantPaymentOrder payingOrder : payingOrders) {
-			if (payingOrder.getTransNo() == null) {
-				orderNoList.add(payingOrder.getOrderNo());
-				continue;
-			}
-			Payment payment = new Pay().queryPayment(payingOrder.getTransNo());
-			Map<String, String> rpMap = new HashMap<>();
-			rpMap.put("merOrderNo", payingOrder.getOrderNo());
-			rpMap.put("remarks", payment.getReason());
-			rpMap.put("orderNo", payment.getId());
-			rpMap.put("channelType", payment.getPayChannel());
-			if (payment.getStatus().equals("succeeded")) {
-				rpMap.put("tradeState", "1");
-			}
-			if (payment.getStatus().equals("failed")) {
-				rpMap.put("tradeState", "0");
-			}
-			if (payment.getStatus().equals("pending")) {
-				orderNoList.add(payingOrder.getOrderNo());
-			}
-		}
-
-		Date date = new Date();
-		for (TenantPaymentOrder po : payingOrders) {
-			if (orderNoList.contains(po.getOrderNo())) {
-				// 超过30分钟的关闭订单
-				if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) {
-					po.setStatus(DealStatusEnum.FAILED);
-					po.setMemo("超时未支付关闭");
-					paymentForCallback(po);
-				}
-			}
-		}
-	}
-
-	@Override
-	public TenantPaymentOrder queryByOrderNo(String orderNo) {
-		return tenantPaymentOrderDao.findOrderByOrderNo(orderNo);
-	}
-
-	@Override
-	public Object queryTenanPaymentPage(TenantPaymentOrderQueryInfo queryInfo) {
-		PageInfoOrder<TenantPaymentOrder> pageInfo = new PageInfoOrder<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		List<TenantPaymentOrder> dataList = new ArrayList<>();
-		int count = this.findCount(params);
-		if (count > 0) {
-			TenantPaymentOrder orderMoneyAmount = tenantPaymentOrderDao.getOrderMoneyAmount(params);
-			if (orderMoneyAmount != null) {
-				pageInfo.setTotalExpectAmount(orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO);
-				pageInfo.setTotalActualAmount(orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO);
-			}
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = tenantPaymentOrderDao.queryPage(params);
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
+    private static final Logger logger = LoggerFactory.getLogger(TenantPaymentOrderServiceImpl.class);
+
+    @Autowired
+    private TenantPaymentOrderDao tenantPaymentOrderDao;
+
+    @Autowired
+    private TenantEntryActivitiesDao tenantEntryActivitiesDao;
+
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+
+    @Autowired
+    private PayService payService;
+
+    @Autowired
+    private SysConfigDao sysConfigDao;
+
+    @Autowired
+    private TeacherDao teacherDao;
+
+    @Autowired
+    private SysTenantAccountService sysTenantAccountService;
+
+    @Autowired
+    private YqPayFeignService yqPayFeignService;
+
+    @Override
+    public BaseDAO<Long, TenantPaymentOrder> getDAO() {
+        return tenantPaymentOrderDao;
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public HttpResponseResult createOrder(Integer userId, Integer activitiesId, boolean isContinuePay) {
+
+        Teacher teacher = teacherDao.get(userId);
+        if (teacher == null) {
+            throw new BizException("用户信息不存在");
+        }
+
+        Integer organId = teacher.getTeacherOrganId();
+
+        TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId);
+        if (tenantEntryActivities == null) {
+            throw new BizException("活动不存在");
+        }
+
+        Date date = new Date();
+        // 判断活动是否有效
+        if (tenantEntryActivities.getDelFlag() == true) {
+            throw new BizException("活动已下架");
+        }
+        if (date.before(tenantEntryActivities.getStartDate())) {
+            throw new BizException("活动未开始");
+        }
+        if (date.after(tenantEntryActivities.getEndDate())) {
+            throw new BizException("活动已结束");
+        }
+
+        // 查询用户订单
+        List<TenantPaymentOrder> orderList = tenantPaymentOrderDao.queryByUserIdAndActivitiesId(userId, activitiesId);
+        if (orderList != null && orderList.size() > 0) {
+            for (TenantPaymentOrder po : orderList) {
+                // 是否满足条件
+                if (tenantEntryActivities.getSuitableUser() == SuitableUser.NEW) {
+                    if (po.getStatus() == DealStatusEnum.SUCCESS) {
+                        throw new BizException("首充优惠活动每个用户限参与一次。");
+                    }
+
+                    if (po.getStatus() == DealStatusEnum.ING) {
+                        int i = 35 - DateUtil.minutesBetween(po.getCreateTime(), date);
+                        if (i <= 0) {
+                            throw new BizException("您有支付中的订单出现异常,请联系客服");
+                        }
+                        // throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", i);
+                        if (isContinuePay == false) {
+                            HttpResponseResult result = new HttpResponseResult(true, HttpStatus.CONTINUE, "您存在支付中的订单,是否重新付款?", null);
+                            return result;
+                        } else {
+                            // 关闭原订单
+                            po.setStatus(DealStatusEnum.CLOSE);
+                            po.setMemo("用户主动关闭");
+                            po.setUpdateTime(date);
+                            tenantPaymentOrderDao.update(po);
+                        }
+                    }
+                }
+            }
+        }
+
+        TenantPaymentOrder tenantPaymentOrder = new TenantPaymentOrder();
+        tenantPaymentOrder.setUserId(userId);
+        tenantPaymentOrder.setTransMinutes(tenantEntryActivities.getPurchaseMinutes());
+        tenantPaymentOrder.setGiveMinutes(tenantEntryActivities.getGiveMinutes());
+        tenantPaymentOrder.setOrderNo(idGeneratorService.generatorId("tenant_payment") + "");
+        tenantPaymentOrder.setType(TenantPaymentType.RECHARGE);
+        tenantPaymentOrder.setExpectAmount(tenantEntryActivities.getDiscountPrice());
+        tenantPaymentOrder.setStatus(DealStatusEnum.ING);
+        tenantPaymentOrder.setCreateTime(date);
+        tenantPaymentOrder.setUpdateTime(date);
+        tenantPaymentOrder.setVersion(0);
+        tenantPaymentOrder.setOrganId(organId);
+        tenantPaymentOrder.setActivitiesId(activitiesId);
+        tenantPaymentOrderDao.insert(tenantPaymentOrder);
+
+        String baseApiUrl = sysConfigDao.findConfigValue("teacher_base_url");
+
+        // 分类费用 course,instrument,accessories,other
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course", BigDecimal.ZERO);
+        classFee.put("instrument", BigDecimal.ZERO);
+        classFee.put("accessories", BigDecimal.ZERO);
+        classFee.put("other", tenantPaymentOrder.getExpectAmount());
+
+        try {
+
+            Map<String, Object> payMap = payService.getPayMap(tenantPaymentOrder.getExpectAmount(), tenantPaymentOrder.getOrderNo(), baseApiUrl
+                            + "/api-teacher/teacherOrder/notify", baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(),
+                    "商户入驻", "商户充值", userId, classFee, organId, "sdaya");
+
+            Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
+            tenantPaymentOrder.setComAmount(routingFee.get("COM"));
+            tenantPaymentOrder.setPerAmount(routingFee.get("PER"));
+            tenantPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+            tenantPaymentOrder.setPaymentChannel(PaymentChannelEnum.valueOf(payMap.get("type").toString()));
+            tenantPaymentOrder.setUpdateTime(date);
+            tenantPaymentOrderDao.update(tenantPaymentOrder);
+
+            HttpResponseResult result = new HttpResponseResult(true, HttpStatus.OK, payMap, null);
+            return result;
+        } catch (Exception e) {
+            throw new BizException("调用支付接口出错", e);
+        }
+    }
+
+    @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    public boolean paymentForCallback(TenantPaymentOrder tenantPaymentOrder) {
+
+        Integer activitiesId = tenantPaymentOrder.getActivitiesId();
+
+        Date date = new Date();
+        tenantPaymentOrder.setUpdateTime(date);
+        tenantPaymentOrderDao.update(tenantPaymentOrder);
+
+        Integer userId = tenantPaymentOrder.getUserId();
+
+        if (tenantPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
+
+            TenantEntryActivities tenantEntryActivities = tenantEntryActivitiesDao.get(activitiesId);
+            if (tenantEntryActivities == null) {
+                throw new BizException("活动找不到");
+            }
+
+            // 更新账户表信息
+            sysTenantAccountService.update(userId, tenantEntryActivities.getPurchaseMinutes() + tenantEntryActivities.getGiveMinutes(),
+                    tenantPaymentOrder.getOrderNo(), TransType.RECHARGE, "", tenantEntryActivities.getDiscountPrice(), "");
+        } else {
+
+        }
+
+        return true;
+    }
+
+    @Override
+    public void queryOrderStatusFromRemote() {
+        try {
+            yqPayQuery();
+        } catch (Exception e) {
+            throw new BizException("查询订单状态出现异常");
+        }
+        try {
+            adaPayQuery();
+        } catch (Exception e) {
+            throw new BizException("查询订单状态出现异常");
+        }
+    }
+
+    private void yqPayQuery() throws Exception {
+        List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
+
+        if (payingOrders.size() == 0) {
+            return;
+        }
+        List<String> orderNoList = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.toList());
+        String merOrderNos = payingOrders.stream().map(TenantPaymentOrder::getOrderNo).collect(Collectors.joining(","));
+
+        String notifyUrl = ""; // 回调地址
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        resultMap.put("merOrderNoList", merOrderNos);
+        Map<String, Object> requestMap = YqPayUtil.getRequestMap(notifyUrl, resultMap);
+
+        RsqMsg rsqMsg = new RsqMsg(requestMap);
+
+        Msg queryRs = yqPayFeignService.orderQuery(rsqMsg);
+        logger.info("支付状态查询结果:{}", queryRs);
+        if (queryRs.getCode().equals("88")) {
+            // 更新订单状态
+            String[] statusArr = {"0", "1", "7"};
+            String responseParameters = queryRs.getResponseParameters();
+            List<Map<String, Object>> responseList = JSON.parseObject(responseParameters, List.class);
+            for (Map<String, Object> response : responseList) {
+                Map<String, Object> rpMap = response;
+                String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
+                rpMap.put("channelType", channelType);
+
+                if (orderNoList.contains(rpMap.get("merOrderNo"))) {
+                    orderNoList.remove(rpMap.get("merOrderNo"));
+                }
+
+                if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) {
+                    try {
+                        DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
+                        TenantPaymentOrder order = tenantPaymentOrderDao.findOrderByOrderNo(rpMap.get("merOrderNo").toString());
+                        if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) {
+                            continue;
+                        }
+
+                        if (status.equals(DealStatusEnum.SUCCESS)) {
+                            order.setPayTime(new Date());
+                            order.setActualAmount(new BigDecimal((String) rpMap.get("payAmount")));
+                        } else {
+                            Object remarks = rpMap.get("remarks");
+                            if (remarks != null) {
+                                order.setMemo(remarks.toString());
+                            }
+                        }
+                        order.setStatus(status);
+                        order.setTransNo(rpMap.get("orderNo").toString());
+                        order.setPaymentBusinessChannel(channelType);
+                        paymentForCallback(order);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        continue;
+                    }
+                }
+            }
+
+            Date date = new Date();
+            for (TenantPaymentOrder po : payingOrders) {
+                if (orderNoList.contains(po.getOrderNo())) {
+                    // 超过30分钟的关闭订单
+                    if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) {
+                        po.setStatus(DealStatusEnum.FAILED);
+                        po.setMemo("超时未支付关闭");
+                        paymentForCallback(po);
+                    }
+                }
+            }
+        }
+    }
+
+    private void adaPayQuery() throws Exception {
+        List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+        if (payingOrders.size() == 0) {
+            return;
+        }
+
+        List<String> orderNoList = new ArrayList<String>();
+
+        for (TenantPaymentOrder payingOrder : payingOrders) {
+            if (payingOrder.getTransNo() == null) {
+                orderNoList.add(payingOrder.getOrderNo());
+                continue;
+            }
+            Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo());
+
+            String channelType = (String) payment.get("pay_channel");
+            String payStatus = (String) payment.get("status");
+            String transNo = (String) payment.get("id");
+            String memo = null;
+            if (payment.containsKey("error_msg")) {
+                memo = (String) payment.get("error_msg");
+            }
+            DealStatusEnum status = null;
+            if (payStatus.equals("succeeded")) {
+                status = DealStatusEnum.SUCCESS;
+                payingOrder.setActualAmount(new BigDecimal((String) payment.get("pay_amt")));
+            } else if (payStatus.equals("failed")) {
+                status = DealStatusEnum.FAILED;
+            }
+
+            if (status != null) {
+                payingOrder.setStatus(status);
+                payingOrder.setTransNo(transNo);
+                payingOrder.setPaymentBusinessChannel(channelType);
+                payingOrder.setMemo(memo);
+                try {
+                    paymentForCallback(payingOrder);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    continue;
+                }
+            }
+
+            if (status.equals("pending")) {
+                orderNoList.add(payingOrder.getOrderNo());
+            }
+        }
+
+        Date date = new Date();
+        for (TenantPaymentOrder po : payingOrders) {
+            if (orderNoList.contains(po.getOrderNo())) {
+                // 超过30分钟的关闭订单
+                if (DateUtil.addMinutes(po.getCreateTime(), 30).before(date)) {
+                    po.setStatus(DealStatusEnum.FAILED);
+                    po.setMemo("超时未支付关闭");
+                    paymentForCallback(po);
+                }
+            }
+        }
+    }
+
+    @Override
+    public TenantPaymentOrder queryByOrderNo(String orderNo) {
+        return tenantPaymentOrderDao.findOrderByOrderNo(orderNo);
+    }
+
+    @Override
+    public Object queryTenanPaymentPage(TenantPaymentOrderQueryInfo queryInfo) {
+        PageInfoOrder<TenantPaymentOrder> pageInfo = new PageInfoOrder<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        List<TenantPaymentOrder> dataList = new ArrayList<>();
+        int count = this.findCount(params);
+        if (count > 0) {
+            TenantPaymentOrder orderMoneyAmount = tenantPaymentOrderDao.getOrderMoneyAmount(params);
+            if (orderMoneyAmount != null) {
+                pageInfo.setTotalExpectAmount(orderMoneyAmount.getExpectAmount() != null ? orderMoneyAmount.getExpectAmount() : BigDecimal.ZERO);
+                pageInfo.setTotalActualAmount(orderMoneyAmount.getActualAmount() != null ? orderMoneyAmount.getActualAmount() : BigDecimal.ZERO);
+            }
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = tenantPaymentOrderDao.queryPage(params);
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -621,6 +621,16 @@
         LEFT JOIN sporadic_charge_info sci ON spo.music_group_id_ = sci.id_
         <include refid="queryPaymentOrder"/>
     </select>
+
+    <select id="sumAccountAmount" resultType="java.math.BigDecimal">
+        <![CDATA[
+        SELECT SUM(actual_amount_)
+        FROM student_payment_order
+        WHERE status_ IN ('SUCCESS','ING')
+          AND create_time_ >= #{firstDate}
+          AND create_time_ <= NOW()
+          AND  mer_nos_ = #{merNo}
+    ]]></select>
     <select id="countGroupOrderWithoutFailed" resultType="int">
         SELECT COUNT(*)
         FROM student_payment_order spo

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/SysAccountMapper.xml

@@ -170,4 +170,7 @@
             AND channel_ = #{channel}
         </if>
     </select>
+    <select id="getAdaAccount" resultMap="SysAccount">
+        SELECT * FROM sys_account WHERE routing_organ_id_ = #{organId} AND channel_=#{channel} AND status_ =1 LIMIT 1
+    </select>
 </mapper>

+ 15 - 0
mec-student/src/main/java/com/ym/mec/student/StudentApplication.java

@@ -2,6 +2,10 @@ package com.ym.mec.student;
 
 import javax.servlet.Filter;
 
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+import com.ym.mec.thirdparty.adapay2.ConfigInit;
+import com.ym.mec.biz.service.NotifyCallback;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -56,4 +60,15 @@ public class StudentApplication {
 		return registration;
 	}
 
+	@Bean
+	public static void startMqtt() {
+		MerConfig merConfig = ConfigInit.merConfig;
+		NotifyCallback notifyCallback = new NotifyCallback();
+		try {
+			Adapay.startMqttListener(merConfig, notifyCallback);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 }

+ 96 - 45
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,11 +1,13 @@
 package com.ym.mec.student.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.thirdparty.adapay2.ConfigInit;
+import com.ym.mec.thirdparty.adapay2.Payment;
 import com.ym.mec.util.date.DateUtil;
-import freemarker.template.utility.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -14,6 +16,7 @@ import io.swagger.annotations.ApiOperation;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -23,6 +26,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.connection.RedisServer;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.ModelAttribute;
@@ -32,8 +36,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.alibaba.fastjson.JSON;
-import com.huifu.adapay.model.payment.PayChannelEnum;
-import com.huifu.adapay.model.payment.Payment;
 import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
@@ -44,7 +46,6 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.thirdparty.adapay.NotifyEvent;
-import com.ym.mec.thirdparty.adapay.Pay;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
 import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
@@ -81,6 +82,8 @@ public class StudentOrderController extends BaseController {
     private TeacherCourseStatisticsDao teacherCourseStatisticsDao;
     @Autowired
     private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
+    @Autowired
+    private TenantPaymentOrderService tenantPaymentOrderService;
 
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
@@ -150,36 +153,86 @@ public class StudentOrderController extends BaseController {
             @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "payChannel", value = "支付方式(alipay-支付宝app支付)", required = true, dataType = "String"),
     })
-    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code) throws Exception {
-        String appId = "wx751141096e75a4ee";
-        String appSecret = "e882d76c95d1613607a85338b1bed3ff";
-        String wxMpOAuth2AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
-        //payChannel = PayChannelEnum.ALIPAY_QR.getCode();
-//        if (!new Pay().verifySign(amount, orderNo, notifyUrl, orderSubject, orderBody,sign)) {
-//            return failed("签名验证失败");
-//        }
-
-        String openid = "";
+    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
+        String openId = "";
         if (payChannel.equals("wx_pub")) {
             if (code == null || code.isEmpty()) {
                 return failed("微信支付请先授权");
             }
-            wxMpOAuth2AccessTokenUrl = String.format(wxMpOAuth2AccessTokenUrl, appId, appSecret, code);
+            String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
             Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
             if (!weChatRes.containsKey("openid")) {
                 return failed("授权失败,请重新授权");
             }
-            openid = weChatRes.get("openid");
+            openId = weChatRes.get("openid");
+        }
+
+        Date createTime = null;
+        String merNos = null;
+        TenantPaymentOrder tenantPaymentOrder = null;
+        StudentPaymentOrder studentPaymentOrder = null;
+        if (platform != null && platform.equals("teacher")) {
+            tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(orderNo);
+        } else {
+            studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(orderNo);
         }
 
-        StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);
-        if (order == null) {
+        if (studentPaymentOrder == null && tenantPaymentOrder == null) {
             return failed("订单不存在");
         }
+        if (studentPaymentOrder != null) {
+            createTime = studentPaymentOrder.getCreateTime();
+            merNos = studentPaymentOrder.getMerNos();
+        } else {
+            createTime = tenantPaymentOrder.getCreateTime();
+            merNos = tenantPaymentOrder.getMerNos();
+        }
 
-        Payment payment = new Pay().executePayment(amount, orderNo, payChannel, orderSubject, orderBody, openid);
-        order.setTransNo(payment.getId());
-        studentPaymentOrderService.update(order);
+        Calendar beforeTime = Calendar.getInstance();
+        beforeTime.add(Calendar.MINUTE, -28);// 28 分钟之前的时间
+        Date beforeDate = beforeTime.getTime();
+        if (createTime.before(beforeDate)) {
+            return failed("订单已超时,请重新下单");
+        }
+
+        Date expireDate = DateUtil.addMinutes(createTime, 30);
+        String timeExpire = new SimpleDateFormat("yyyyMMddHHmmss").format(expireDate);
+
+        Map<String, Object> paymentParams = new HashMap<>();
+        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("order_no", orderNo);
+        paymentParams.put("pay_channel", payChannel);
+        paymentParams.put("pay_amt", amount);
+        paymentParams.put("goods_title", orderSubject);
+        paymentParams.put("goods_desc", orderBody);
+        paymentParams.put("time_expire", timeExpire);
+
+        List<Map<String, Object>> divMembers = new ArrayList<>();
+        Map<String, Object> divMember = new HashMap<>();
+        divMember.put("member_id", merNos);//分佣账户
+        divMember.put("amount", amount);//分佣金额
+        divMember.put("fee_flag", "Y"); //承担手续费
+        divMembers.add(divMember);
+        //paymentParams.put("div_members", JSON.toJSONString(divMembers));
+
+        Map<String, Object> expendParams = new HashMap<>(5);
+
+        expendParams.put("open_id", openId);
+        expendParams.put("is_raw", "1");
+        expendParams.put("callback_url", returnUrl);
+        expendParams.put("limit_pay", "1");
+
+        paymentParams.put("expend", expendParams);
+
+        Map<String, Object> payment = Payment.executePayment(paymentParams);
+
+        if (studentPaymentOrder != null) {
+            studentPaymentOrder.setTransNo((String) payment.get("id"));
+            studentPaymentOrderService.update(studentPaymentOrder);
+        } else {
+            tenantPaymentOrder.setTransNo((String) payment.get("id"));
+            tenantPaymentOrderService.update(tenantPaymentOrder);
+        }
 
         return succeed(payment);
     }
@@ -187,28 +240,33 @@ public class StudentOrderController extends BaseController {
     @PostMapping("/adaNotify")
     public void adaNotify(@ModelAttribute NotifyEvent notifyEvent) throws Exception {
         logger.info(notifyEvent.toString());
-        if (notifyEvent.getType().equals("payment.success") && notifyEvent.getType().equals("payment.failed")) {
+        System.out.println("查看");
+        //[data={"app_id":"app_f0ebdd29-046f-4b60-bd50-92e2c1285c02","created_time":"20200629144014","end_time":"20200629144025","expend":{},"id":"002112020062914401310123566451963129856","order_no":"20062914394700001","out_trans_id":"2020062922001436811416495773","party_order_id":"02212006295281400400681","pay_amt":"0.01","pay_channel":"alipay_qr","status":"succeeded"}]
+
+        if (!notifyEvent.getType().equals("payment.succeeded") && !notifyEvent.getType().equals("payment.failed")) {
             return;
         }
+        String data = notifyEvent.getData();
 
-        Map<String, String> notifyMap = JSON.parseObject(notifyEvent.getData(), Map.class);
+        JSONObject dataObj = JSON.parseObject(notifyEvent.getData());
+        if (!dataObj.getString("app_id").equals(ConfigInit.appId)) {
+            return;
+        }
 
+        Map<String, String> notifyMap = new HashMap<>();
         //支付中订单存在,更新状态
-        if (notifyMap.size() > 0) {
-            String tradeState = notifyEvent.getType().equals("payment.success") ? "1" : "0";
-            notifyMap.put("tradeState", tradeState);
-            notifyMap.put("totalMoney", notifyMap.get("pay_amt"));
-            notifyMap.put("merOrderNo", notifyMap.get("order_no"));
-            notifyMap.put("merOrderNo", notifyMap.get("order_no"));
-            notifyMap.put("remarks", notifyMap.get("description"));
-            studentPaymentOrderService.updateOrder(notifyMap);
-        }
+        String tradeState = notifyEvent.getType().equals("payment.succeeded") ? "1" : "0";
+        notifyMap.put("channelType", dataObj.getString("pay_channel"));
+        notifyMap.put("tradeState", tradeState);
+        notifyMap.put("totalMoney", dataObj.getString("pay_amt"));
+        notifyMap.put("merOrderNo", dataObj.getString("order_no"));
+        studentPaymentOrderService.updateOrder(notifyMap);
     }
 
     @GetMapping("/authorize")
     public String authorize(@RequestParam("returnUrl") String returnUrl) {
-        String appId = "wx80f175c0eb6836e9";
-        String url = URLEncoder.encode("http://mstudev.dayaedu.com/studentOrder/userInfo");
+        String appId = "wxcf8e8b33a9477845";
+        String url = URLEncoder.encode("http://wxwechat.utools.club/studentOrder/userInfo");
 
         String redirectURL = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect",
                 appId, url);
@@ -219,8 +277,8 @@ public class StudentOrderController extends BaseController {
     @GetMapping("/userInfo")
     public Object userInfo(@RequestParam("code") String code,
                            @RequestParam("state") String returnUrl) throws Exception {
-        String appId = "wx80f175c0eb6836e9";
-        String appSecret = "f817dc79e4149aaa4fafd6f8279b3593";
+        String appId = "wxcf8e8b33a9477845";
+        String appSecret = "1286452b9c68b13325dece7cdf892645";
 
         String wxMpOAuth2AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
 
@@ -290,10 +348,10 @@ public class StudentOrderController extends BaseController {
 
 
     @RequestMapping("paymentResult")
-    public void paymentResult(HttpServletResponse response, String orderNo,String type) {
+    public void paymentResult(HttpServletResponse response, String orderNo, String type) {
         try {
             String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
-            if(type != null && type.equals("edu")){
+            if (type != null && type.equals("edu")) {
                 baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.EDU_TEACHER_BASE_URL);
             }
             response.sendRedirect(baseApiUrl + "/#/paymentresult?orderNo=" + orderNo);
@@ -662,11 +720,4 @@ public class StudentOrderController extends BaseController {
         practice4Organs = practice4Organs.stream().sorted(Comparator.comparingDouble(Practice4OrganDto::getScale).reversed()).collect(Collectors.toList());
         return succeed(practice4Organs);
     }
-
-    @GetMapping("/getIngOrderByGroupType")
-    public HttpResponseResult getIngOrderByGroupType(Integer userId,String musicGroupId,GroupType groupType){
-        List<StudentPaymentOrder> userGroupOrders = studentPaymentOrderDao.findUserGroupOrders(userId, musicGroupId, groupType, DealStatusEnum.ING);
-        return succeed(userGroupOrders);
-
-    }
 }

+ 10 - 2
mec-thirdparty/pom.xml

@@ -69,9 +69,17 @@
 		<dependency>
 			<groupId>adapay</groupId>
 			<artifactId>adapay-java-sdk</artifactId>
-			<version>1.0.2</version>
+			<version>1.1.1</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/adapay-java-sdk-1.0.2.jar
+			<systemPath>${project.basedir}/libs/adapay-java-sdk-1.1.1.jar
+			</systemPath>
+		</dependency>
+		<dependency>
+			<groupId>adapay.core</groupId>
+			<artifactId>adapay-core-sdk</artifactId>
+			<version>1.1.1</version>
+			<scope>system</scope>
+			<systemPath>${project.basedir}/libs/adapay-core-sdk-1.1.1.jar
 			</systemPath>
 		</dependency>
 		<dependency>

+ 0 - 82
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/NotifyCallback.java

@@ -1,82 +0,0 @@
-package com.ym.mec.thirdparty.adapay;
-
-import com.alibaba.fastjson.JSON;
-import com.huifu.adapay.model.payment.Payment;
-import com.huifu.adapay.model.refund.Refund;
-import com.huifu.adapay.notify.INotifyCallback;
-/**
- * @author jane.zhao
- */
-public class NotifyCallback implements INotifyCallback {
-
-    /**
-     * 用户接收并处理支付成功的异步消息
-     * @param payment 成功的支付对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void paymentSuccessMessageArrived(Payment payment) throws Exception {
-        System.out.println("receive paymentSuccess msg=" + JSON.toJSONString(payment));
-
-    }
-
-    /**
-     * 用户接收并处理支付失败的异步消息
-     * @param payment 失败的支付对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void paymentFailedMessageArrived(Payment payment) throws Exception {
-        System.out.println("receive paymentFailed msg=" + JSON.toJSONString(payment));
-    }
-
-    /**
-     * 用户接收并处理关闭支付交易成功的异步消息
-     * @param payment 关闭成功的支付对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void paymentCloseSuccessMessageArrived(Payment payment) throws Exception {
-        System.out.println("receive paymentCloseSuccess msg=" + JSON.toJSONString(payment));
-    }
-
-    /**
-     * 用户接收并处理关闭支付交易失败的异步消息
-     * @param payment 关闭失败的支付对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void paymentCloseFailedMessageArrived(Payment payment) throws Exception {
-        System.out.println("receive paymentCloseFailed msg=" + JSON.toJSONString(payment));
-    }
-
-    /**
-     * 用户接收并处理退款成功的异步消息
-     * @param refund 成功的退款对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void refundSuccessMessageArrived(Refund refund) throws Exception {
-        System.out.println("receive refundSuccess msg=" + JSON.toJSONString(refund));
-    }
-
-    /**
-     * 用户接收并处理退款失败的异步消息
-     * @param refund 失败的退款对象
-     * @throws Exception 异常
-     */
-    @Override
-    public void refundFailedMessageArrived(Refund refund) throws Exception {
-        System.out.println("receive refundFailed msg=" + JSON.toJSONString(refund));
-    }
-
-    /**
-     * 用户接收并处理未知的异步消息
-     * @param msg 未知消息
-     * @throws Exception 异常
-     */
-    @Override
-    public void unknownMessageArrived(String msg) throws Exception {
-        System.out.println("receive unknown msg=" + msg);
-    }
-}

+ 0 - 198
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Pay.java

@@ -1,198 +0,0 @@
-package com.ym.mec.thirdparty.adapay;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.huifu.adapay.AdaPay;
-import com.huifu.adapay.demo.BaseDemo;
-import com.huifu.adapay.demo.NotifyCallbackDemo;
-import com.huifu.adapay.exception.BaseAdaPayException;
-import com.huifu.adapay.model.DeviceInfo;
-import com.huifu.adapay.model.payment.*;
-import com.huifu.adapay.util.AdaPaySign;
-import org.aspectj.apache.bcel.classfile.Module;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-/**
- * @author jane.zhao
- */
-public class Pay {
-    private static final String appId = "app_f0ebdd29-046f-4b60-bd50-92e2c1285c02";
-    private static final String wxAppId = "wx751141096e75a4ee";
-
-    /**
-     * 运行支付类接口
-     *
-     * @return paymentId
-     * @throws Exception 异常
-     */
-    public Pay() throws Exception {
-        //apiKey,商户联调用
-
-
-        String apiKey = "api_test_e640fa26-bbe6-458f-ac44-a71723ee2176";
-        //apiKey,真实交易用(live)
-        String apiKeyLive = "api_live_8dd6fba0-59ca-45f7-8e82-0b3ae7bd7907";
-        //公钥
-        String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwN6xgd6Ad8v2hIIsQVnbt8a3JituR8o4Tc3B5WlcFR55bz4OMqrG/356Ur3cPbc2Fe8ArNd/0gZbC9q56Eb16JTkVNA/fye4SXznWxdyBPR7+guuJZHc/VW2fKH2lfZ2P3Tt0QkKZZoawYOGSMdIvO+WqK44updyax0ikK6JlNQIDAQAB";
-        //私钥
-        String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAL3zHDr2s5Lp3b9FKAD4vB3Y2MyOypv68mKFi8uPznO9JkzBhwYLYRC8mnP+W7tw5Q7Yuf5Szhn8Mo9KZ8Bsv6S6iz3BtXzeHb/8nyeBAH2m477bJzwmapZPhPSroR8md1dnNI+4NttM/0Cn/rdAySzQn+IPHLPxWFwQw+y6FFi7AgMBAAECgYEAkuUBPfAvKzxEyng22ZmCESrzbi43La1B6UMRuxi5NfRfPBilzNzb8c+JOo7Ibgp+eZ7NJ4rt7FaG2x1VYxA2m151I86e6TlgPYNjjj56RpkrD9/LrDqePFE4AlrwO5802fK4X/iac1MCpEhaiVNQ3x6ikwcKWzKmMV/EpdijIcECQQDlt+ou3L5M2TQW8YYg9zA9TKRd+M/Xs0tPLJLE+W6m0+dmyeHBErMW6X874qhmIc3F8HYIW+O51GMy6KDgQ7PrAkEA065ujs1ZkwIPMopgIoqlRi8JDvAxgEZqktDDMMg0o2XZP6J7C5suf2BsrhKnjLlxII7dQPxDfPDiRz4jYpBKcQJBAKd77ev42W5iNk48DdTfJHas+HHjRHY5rMCu+NtQGNLdUKtqqYQBRD2CRFe/K5Q7NTIJ3aS+ikwkg6bMYO7hrb0CQDesuC1c+0M8Fm0vketj1eZotpQ0PoDDhIJK4BuzfIzBW+ttu7kovokH/m2mQGU13Pg4Ox89ei6hWJJuWHYzBzECQQDexzziaTpHMy3achL2M2pOSdaSLYoesmPTmVZ3kOZf82FpRlfxVGUs0nKpEEgagUkiHUQHAu5RVkxIiDqMYrQp";
-
-        //设置AdaPay全局参数,不同环境设置不同的apiKey/pubKey/privateKey
-        AdaPay.apiKey = apiKeyLive;
-        AdaPay.pubKey = pubKey;
-        AdaPay.privateKey = privateKey;
-        AdaPay.debug = true;
-
-        //启动 mqtt 异步监听
-        AdaPay.iNotifyCallback = new NotifyCallbackDemo();
-        AdaPay.startNotifyListener();
-    }
-
-    public static String executePaymentTest() throws Exception {
-        //test chargeId = "002112019080716223300005091372336111616";
-        Pay demo = new Pay();
-        //支付接口
-        String orderNo = "jsdk_payment_" + System.currentTimeMillis();
-        String payChannel = PayChannelEnum.ALIPAY_QR.getCode();
-        BigDecimal amount = new BigDecimal("0.01");
-        String orderSubject = "测试大雅订单";
-        String orderBody = "测试大雅订单";
-        Payment payment = demo.executePayment(amount, orderNo, payChannel, orderSubject, orderBody,null);
-        //支付查询接口
-        //demo.queryPayment(payment.getId());
-        //关单接口
-        //demo.closePayment(payment.getId());
-
-        return payment.getId();
-    }
-
-
-    public Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String orderSubject, String orderBody) throws Exception {
-
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("appId", appId);
-        paymentParams.put("amount", amount);
-        paymentParams.put("orderNo", orderNo);
-        paymentParams.put("notifyUrl", notifyUrl);
-        paymentParams.put("orderSubject", orderSubject);
-        paymentParams.put("orderBody", orderBody);
-        paymentParams.put("wxAppId", wxAppId);
-        String originalStr = JSONObject.toJSONString(paymentParams);
-
-        String sign = AdaPaySign.sign(originalStr, AdaPay.privateKey);
-        paymentParams.put("sign", sign);
-        paymentParams.put("host", "http://192.168.3.27:8000/api-student/studentOrder/executePayment");
-        paymentParams.remove(appId);
-        return paymentParams;
-    }
-
-    public boolean verifySign(BigDecimal amount, String orderNo, String notifyUrl, String orderSubject, String orderBody, String sign) throws Exception {
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("appId", appId);
-        paymentParams.put("amount", amount);
-        paymentParams.put("orderNo", orderNo);
-        paymentParams.put("notifyUrl", notifyUrl);
-        paymentParams.put("orderSubject", orderSubject);
-        paymentParams.put("orderBody", orderBody);
-        String originalStr = JSONObject.toJSONString(paymentParams);
-        return AdaPaySign.verifySign(originalStr, sign, AdaPay.pubKey);
-    }
-
-    /**
-     * 执行一个支付交易
-     *
-     * @return 创建的支付对象
-     * @throws Exception 异常
-     */
-    public static Payment executePayment(BigDecimal amount, String orderNo, String payChannel, String orderSubject, String orderBody, String openid) throws Exception {
-        System.out.println("=======execute payment begin=======");
-        //创建支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id3
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("app_id", appId);
-        paymentParams.put("order_no", orderNo);
-        paymentParams.put("pay_channel", payChannel);
-        paymentParams.put("pay_amt", amount);
-        paymentParams.put("currency", CurrencyEnum.CNY.getCode());
-        paymentParams.put("goods_title", orderSubject);
-        paymentParams.put("goods_desc", orderBody);
-
-//        DeviceInfo deviceInfo = new DeviceInfo();
-//        deviceInfo.setDeviceType(DeviceTypeEnum.MOBILE.getCode());
-//        deviceInfo.setDeviceIp("127.0.0.1");
-//        paymentParams.put("device_info", deviceInfo);
-
-//        List<GoodsDetail> goodsDetailList = new ArrayList<>();
-//        GoodsDetail goodsDetail = new GoodsDetail();
-//        goodsDetail.setGoodsId("your goods id");
-//        goodsDetail.setGoodsName("your goods name");
-//        goodsDetail.setQuantity("1");
-//        goodsDetail.setPrice("100.00");
-//        goodsDetailList.add(goodsDetail);
-//
-//        PromotionDetail promotionDetail = new PromotionDetail();
-//        promotionDetail.setGoodsDetail(goodsDetailList);
-//        promotionDetail.setCostPrice("100.00");
-
-        if (openid != null && !openid.isEmpty()) {
-            PaymentExpend expend = new PaymentExpend();
-            expend.setWxAppId("wx751141096e75a4ee");
-            expend.setOpenId(openid);
-            expend.setIsRaw("0");
-            paymentParams.put("expend", expend);
-        }
-
-        //调用sdk方法,创建支付,得到支付对象
-        Payment payment = null;
-        try {
-            payment = Payment.create(paymentParams);
-        } catch (BaseAdaPayException e) {
-            e.printStackTrace();
-        }
-        System.out.println("payment result=" + JSON.toJSONString(payment));
-        return payment;
-    }
-
-    /**
-     * 关闭一个支付交易
-     *
-     * @param paymentId 要关闭的支付id
-     * @return 关闭的支付对象
-     * @throws Exception 异常
-     */
-    public Payment closePayment(String paymentId) throws Exception {
-        System.out.println("=======close payment begin=======");
-        //关闭支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id11
-        //调用sdk方法,关闭支付,得到支付对象
-        Payment payment = null;
-        try {
-            payment = Payment.close(paymentId);
-        } catch (BaseAdaPayException e) {
-            e.printStackTrace();
-        }
-        System.out.println("close payment result=" + JSON.toJSONString(payment));
-        return payment;
-    }
-
-    /**
-     * 查询一个支付交易
-     *
-     * @param paymentId 要查询的支付id
-     * @return 查询的支付对象
-     * @throws Exception 异常
-     */
-    public Payment queryPayment(String paymentId) throws Exception {
-        System.out.println("=======query payment begin=======");
-        //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
-        //调用sdk方法,查询支付交易,得到支付对象
-        Payment payment = null;
-        try {
-            payment = Payment.query(paymentId);
-        } catch (BaseAdaPayException e) {
-            e.printStackTrace();
-        }
-        System.out.println("query payment result=" + JSON.toJSONString(payment));
-        return payment;
-    }
-}

+ 134 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/AdapayTools.java

@@ -0,0 +1,134 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+import com.huifu.adapay.model.Bill;
+import com.huifu.adapay.model.Login;
+
+/**
+ * @author yingyong.wang
+ */
+public class AdapayTools extends ConfigInit {
+
+    /**
+     * 获取银联用户号
+     *
+     * @throws Exception 异常
+     */
+    public static void executeToolsTest(String appId, String merchantKey) throws Exception {
+        Map<String, Object> unionParam = new HashMap<String, Object>(2);
+        unionParam.put("order_no", "20190912");
+        unionParam.put("app_id", appId);
+        unionParam.put("user_auth_code", "20190912");
+        unionParam.put("app_up_identifier", "20190912");
+        Map<String, Object> result = com.huifu.adapay.model.AdapayTools.unionUserId(unionParam, merchantKey);
+
+        String errorCode = (String) result.get("error_code");
+
+        if (null != errorCode) {
+
+            System.out.println("对账单下载,请求参数:" + JSON.toJSONString(unionParam));
+            System.out.println("对账单下载,返回参数:" + JSON.toJSONString(result));
+
+        } else {
+            System.out.println("对账单下载,成功");
+        }
+
+    }
+
+    /**
+     * 获取银联用户号
+     *
+     * @throws Exception 异常
+     */
+    public static void executeToolsTest(String appId) throws Exception {
+
+        Map<String, Object> unionParam = new HashMap<String, Object>(2);
+        unionParam.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
+        unionParam.put("app_id", appId);
+        unionParam.put("user_auth_code", "5yRGbi+IRda5khIQoQf1Hw==");
+        unionParam.put("app_up_identifier", "CloudPay");
+        Map<String, Object> result = com.huifu.adapay.model.AdapayTools.unionUserId(unionParam);
+        System.out.println("获取银联云闪付用户标识:" + JSON.toJSONString(result));
+        String errorCode = (String) result.get("error_code");
+
+        if (null != errorCode) {
+
+            System.out.println("获取银联云闪付用户标识,请求参数:" + JSON.toJSONString(unionParam));
+            System.out.println("获取银联云闪付用户标识,返回参数:" + JSON.toJSONString(result));
+
+        } else {
+            System.out.println("获取银联云闪付用户标识,成功");
+        }
+
+    }
+
+
+    /**
+     * 钱包登录申请
+     *
+     * @throws Exception 异常
+     */
+    public static void executeLoginTest(String appId, String merchantKey) throws Exception {
+        Map<String, Object> queryParams = new HashMap<String, Object>(5);
+        queryParams.put("ip", "127.0.0.1");
+        queryParams.put("member_id", "0");
+        //queryParams.put("member_id", "iris1234_14151");
+        queryParams.put("app_id", appId);
+        Map<String, Object> login = Login.login(queryParams, merchantKey);
+        if (login != null && "succeeded".equals(login.get("status"))) {
+            String formString = login.get("redirect_url").toString();
+            System.out.println("跳转地址:" + formString);
+        }
+
+    }
+
+    /**
+     * 钱包登录申请
+     *
+     * @throws Exception 异常
+     */
+    public static void executeLoginTest(String appId) throws Exception {
+        Map<String, Object> queryParams = new HashMap<String, Object>(5);
+        queryParams.put("ip", "127.0.0.1");
+        queryParams.put("member_id", "0");
+        //queryParams.put("member_id", "iris1234_14151");
+        queryParams.put("app_id", appId);
+        Map<String, Object> login = Login.login(queryParams);
+        if (login != null && "succeeded".equals(login.get("status"))) {
+            String formString = login.get("redirect_url").toString();
+            System.out.println("跳转地址:" + formString);
+        }
+
+    }
+
+    /**
+     * 执行一个下载对账文件操作
+     *
+     * @return 下载链接
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeBillDownLoad() throws Exception {
+
+
+        Map<String, Object> downloadParam = new HashMap<String, Object>(2);
+        downloadParam.put("bill_date", "20190912");
+
+        Map<String, Object> download = Bill.download(downloadParam);
+
+        String errorCode = (String) download.get("error_code");
+
+        if (null != errorCode) {
+
+            System.out.println("对账单下载,请求参数:" + JSON.toJSONString(downloadParam));
+            System.out.println("对账单下载,返回参数:" + JSON.toJSONString(download));
+
+        } else {
+            System.out.println("对账单下载,成功");
+        }
+        return download;
+    }
+
+}

+ 88 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Bill.java

@@ -0,0 +1,88 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * @author yingyong.wang
+ */
+public class Bill extends ConfigInit {
+
+    /**
+     * 运行账单下载接口
+     * @throws Exception 异常
+     */
+    public static void executeBillTest(String merchantKey) throws Exception{
+        Bill demo = new Bill();
+        
+        Map<String, Object> download = demo.executeBillDownLoad(merchantKey);
+       
+    }
+
+    /**
+     * 运行账单下载接口
+     * @throws Exception 异常
+     */
+    public static void executeBillTest() throws Exception{
+        Bill demo = new Bill();
+        
+        Map<String, Object> download = demo.executeBillDownLoad();
+       
+    }
+
+    /**
+     * 执行一个下载对账文件操作
+     * @return 下载链接
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeBillDownLoad(String merchantKey) throws Exception {
+        System.out.println("=======execute download begin=======");
+
+        Map<String, Object> downloadParam = new  HashMap<String, Object>(2);
+        downloadParam.put("bill_date", "20190912");
+        Map<String, Object> download = com.huifu.adapay.model.Bill.download(downloadParam, merchantKey);
+        
+        String errorCode = (String)download.get("error_code");
+        
+        if(null != errorCode){
+
+            System.out.println("对账单下载,请求参数:" + JSON.toJSONString(downloadParam));
+            System.out.println("对账单下载,返回参数:" + JSON.toJSONString(download));
+
+        }else{
+            System.out.println("对账单下载,成功");
+        }
+        
+
+        return download;
+    }
+
+    /**
+     * 执行一个下载对账文件操作
+     * @return 下载链接
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeBillDownLoad() throws Exception {
+        
+
+        Map<String, Object> downloadParam = new  HashMap<String, Object>(2);
+        downloadParam.put("bill_date", "20190912");
+        
+        Map<String, Object> download = com.huifu.adapay.model.Bill.download(downloadParam);
+        
+        String errorCode = (String)download.get("error_code");
+        
+        if(null != errorCode){
+
+            System.out.println("对账单下载,请求参数:" + JSON.toJSONString(downloadParam));
+            System.out.println("对账单下载,返回参数:" + JSON.toJSONString(download));
+
+        }else{
+            System.out.println("对账单下载,成功");
+        }
+        return download;
+    }
+    
+}

+ 65 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/ConfigInit.java

@@ -0,0 +1,65 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+
+/**
+ * @author jane.zhao
+ */
+public class ConfigInit {
+
+
+    private static ConfigInit instance;
+    public final static String appId = "app_f0ebdd29-046f-4b60-bd50-92e2c1285c02";
+
+    public final static String wxAppId = "wx80f175c0eb6836e9";
+    public final static String wxAppSecret = "f817dc79e4149aaa4fafd6f8279b3593";
+    public final static String wxMpOAuth2AccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
+    public final static MerConfig merConfig = new MerConfig();
+
+    static {
+        try {
+            instance = initConfig();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    private static ConfigInit initConfig() throws Exception {
+        if (instance == null) {
+            instance = new ConfigInit();
+        } else {
+            return instance;
+        }
+
+        Adapay.debug = true;
+
+        /**
+         * prodMode 模式,默认为生产模式,false可以使用mock模式
+         */
+        Adapay.prodMode = true;
+
+        /**
+         *添加商户配置,一个商户只需要 添加一次,添加以后在内存中。
+         */
+
+        String apiKey = "api_live_8dd6fba0-59ca-45f7-8e82-0b3ae7bd7907";
+        String mockApiKey = "api_test_193c8f6a-514f-4d95-a26b-2861c7971105";
+        String rsaPrivateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAL3zHDr2s5Lp3b9FKAD4vB3Y2MyOypv68mKFi8uPznO9JkzBhwYLYRC8mnP+W7tw5Q7Yuf5Szhn8Mo9KZ8Bsv6S6iz3BtXzeHb/8nyeBAH2m477bJzwmapZPhPSroR8md1dnNI+4NttM/0Cn/rdAySzQn+IPHLPxWFwQw+y6FFi7AgMBAAECgYEAkuUBPfAvKzxEyng22ZmCESrzbi43La1B6UMRuxi5NfRfPBilzNzb8c+JOo7Ibgp+eZ7NJ4rt7FaG2x1VYxA2m151I86e6TlgPYNjjj56RpkrD9/LrDqePFE4AlrwO5802fK4X/iac1MCpEhaiVNQ3x6ikwcKWzKmMV/EpdijIcECQQDlt+ou3L5M2TQW8YYg9zA9TKRd+M/Xs0tPLJLE+W6m0+dmyeHBErMW6X874qhmIc3F8HYIW+O51GMy6KDgQ7PrAkEA065ujs1ZkwIPMopgIoqlRi8JDvAxgEZqktDDMMg0o2XZP6J7C5suf2BsrhKnjLlxII7dQPxDfPDiRz4jYpBKcQJBAKd77ev42W5iNk48DdTfJHas+HHjRHY5rMCu+NtQGNLdUKtqqYQBRD2CRFe/K5Q7NTIJ3aS+ikwkg6bMYO7hrb0CQDesuC1c+0M8Fm0vketj1eZotpQ0PoDDhIJK4BuzfIzBW+ttu7kovokH/m2mQGU13Pg4Ox89ei6hWJJuWHYzBzECQQDexzziaTpHMy3achL2M2pOSdaSLYoesmPTmVZ3kOZf82FpRlfxVGUs0nKpEEgagUkiHUQHAu5RVkxIiDqMYrQp";
+
+        merConfig.setApiKey(apiKey);
+        merConfig.setApiMockKey(mockApiKey);
+        merConfig.setRSAPrivateKey(rsaPrivateKey);
+        Adapay.initWithMerConfig(merConfig);
+        /**
+         *启动MQTT,一个商户只需要 启动一次,启动完成以后一直在服务器后端运行
+         */
+        // notifyCallback = new NotifyCallback();
+        //Adapay.startMqttListener(merConfig, notifyCallback);
+        return instance;
+    }
+
+    public ConfigInit() {
+    }
+}

+ 153 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/CorpMember.java

@@ -0,0 +1,153 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * @author yingyong.wang
+ */
+class CorpMember extends ConfigInit {
+
+    /**
+     * 运行 CorpMember 类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeCorpMemberTest(String merchantKey, String app_id) throws Exception {
+        CorpMember demo = new CorpMember();
+        Map<String, Object> member = demo.executeCreateMember(merchantKey, app_id);
+        demo.executeQueryMember(merchantKey, (String) member.get("member_id"), app_id);
+
+    }
+
+
+    /**
+     * 创建 CorpMember
+     *
+     * @return 创建的CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember(String merchantKey, String app_id) throws Exception {
+        System.out.println("=======execute Create CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>(2);
+        memberParams.put("member_id", "jsdk_member_" + System.currentTimeMillis());
+        memberParams.put("app_id", app_id);
+        memberParams.put("order_no", "jsdk_order_" + System.currentTimeMillis());
+        memberParams.put("social_credit_code_expires", "1111");
+        memberParams.put("business_scope", "123");
+
+        memberParams.put("name", "中国测试有限公司");
+        memberParams.put("prov_code", "0011");
+        memberParams.put("area_code", "1100");
+        memberParams.put("social_credit_code", "201932658452655");
+        memberParams.put("legal_person", "张测试");
+        memberParams.put("legal_cert_id", "321485199014234852");
+        memberParams.put("legal_cert_id_expires", "20220112");
+        memberParams.put("legal_mp", "13958465215");
+        memberParams.put("address", "中国上海");
+        memberParams.put("zip_code", "225485");
+        memberParams.put("telphone", "41164452");
+        memberParams.put("email", "ceshi@qq.com");
+        memberParams.put("bank_code", "652142");
+        memberParams.put("bank_acct_type", "1");
+        memberParams.put("card_no", "622546895642156");
+        memberParams.put("card_name", "中国测试有限公司");
+        File file = new File("/Users/will/Project/Adapay/AdapayJava/AdapayDemo/src/main/java/com/huifu/adapay/demo/归档.zip");
+        
+        System.out.println("创建企业用户,请求参数:" + JSON.toJSONString(memberParams) );
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.create(memberParams, file, merchantKey);
+        System.out.println("创建企业用户,返回参数:" + JSON.toJSONString(member) );
+
+
+        System.out.println("=======execute Create CorpMember end=======");
+
+        return member;
+
+    }
+
+    /**
+     * 查询 CorpMember
+     *
+     * @param member_id 待查询的member_id
+     * @return 查询的 CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQueryMember(String merchantKey, String member_id,String app_id) throws Exception {
+        System.out.println("=======execute query CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", app_id);
+        System.out.println("查询企业用户,请求参数:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.query(memberParams, merchantKey);
+        System.out.println("查询企业用户,返回参数:"+JSON.toJSONString(member));
+
+        System.out.println("=======execute query CorpMember end=======");
+
+        return member;
+    }
+
+    /**
+     * 运行 CorpMember 类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeCorpMemberTest( String app_id) throws Exception {
+        CorpMember demo = new CorpMember();
+        //Map<String, Object> member = demo.executeCreateMember();
+        //demo.executeQueryMember( (String) member.get("member_id"), app_id);
+
+    }
+
+
+    /**
+     * 创建 CorpMember
+     *
+     * @return 创建的CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember( Map<String,Object> info) throws Exception {
+        System.out.println("=======execute Create CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>();
+        memberParams.put("app_id", appId);
+        memberParams.putAll(info);
+
+        String path= "C:/Users/river/Desktop/mec/mec-thirdparty/libs/test.zip";
+
+        File file = new File(path);
+        System.out.println("创建企业用户,请求参数:" + JSON.toJSONString(memberParams) );
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.create(memberParams, file);
+        System.out.println("创建企业用户,返回参数:" + JSON.toJSONString(member) );
+
+
+        System.out.println("=======execute Create CorpMember end=======");
+
+        return member;
+
+    }
+
+    /**
+     * 查询 CorpMember
+     *
+     * @param member_id 待查询的member_id
+     * @return 查询的 CorpMember 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQueryMember( String member_id) throws Exception {
+        System.out.println("=======execute query CorpMember begin=======");
+        Map<String, Object> memberParams = new HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", appId);
+        System.out.println("查询企业用户,请求参数1:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.CorpMember.query(memberParams);
+        System.out.println("查询企业用户,返回参数:"+JSON.toJSONString(member));
+
+        System.out.println("=======execute query CorpMember end=======");
+
+        return member;
+    }
+
+
+}

+ 107 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/MainDemo.java

@@ -0,0 +1,107 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import com.huifu.adapay.Adapay;
+import com.huifu.adapay.model.MerConfig;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author jane.zhao
+ */
+public class MainDemo {
+
+
+    public static void main(String[] args) throws Exception {
+        //多商户测试
+        //testMultiMerchant();
+
+        testMerchant();
+
+    }
+
+
+    public static void testMerchant() throws Exception {
+
+//        HashMap<String, Object> memberParams = new HashMap<>();
+//        memberParams.put("member_id", "W004201");
+//        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
+//
+//        memberParams.put("social_credit_code", "91420106303461541T");
+//        memberParams.put("social_credit_code_expires", "20440730");
+//        memberParams.put("business_scope", "教育资讯、投资资讯");
+//        memberParams.put("name", "武汉大雅乐盟教育咨询有限公司");
+//        memberParams.put("prov_code", "0042");
+//        memberParams.put("area_code", "4201");
+//        memberParams.put("legal_person", "李松");
+//        memberParams.put("legal_cert_id", "420106196811210837");
+//        memberParams.put("legal_cert_id_expires", "20990730");
+//        memberParams.put("legal_mp", "13958465215");//法人手机号
+//        memberParams.put("address", "武昌区水果湖汉街武汉中央文化旅游区K3地块第2幢34层2号");
+//        memberParams.put("zip_code", "430000");
+//        //memberParams.put("telphone", "41164452");
+//       // memberParams.put("email", "ceshi@qq.com");
+//        memberParams.put("bank_code", "03020000");
+//        memberParams.put("bank_acct_type", "1");
+//        memberParams.put("card_no", "‘8111501011700649152");
+//        memberParams.put("card_name", "武汉大雅");
+//        new CorpMember().executeCreateMember(memberParams);
+
+        new CorpMember().executeQueryMember("W004201");
+
+
+        //Payment.closePayment("002112020062916385810123596334923411456");
+        //Map<String, Object> payment = Payment.queryPayment("002112020062914502410123569011751485440");
+
+
+        // 运行支付类接口
+        //String pamentId = Payment.executePaymentTest("default");
+
+    }
+
+
+    public static void testMultiMerchant() throws Exception {
+
+        // //运行支付类接口
+        String pamentId = Payment.executePaymentTest("yifuyun");
+
+        // //运行退款类接口
+        // RefundDemo.executeRefundTest("yifuyun", "002112019101420422510029799145265012736");
+        // /**
+        //  * 分账使用配套接口 begin
+        //  */
+        // /**用户类接口*/
+         Map<String, Object> member = Member.executeMemberTest("app_7d87c043-aae3-4357-9b2c-269349a980d6");
+        // String memberId = (String) member.get("member_id");
+        // /** 结算户绑定*/
+        // SettleAccountDemo.executeSettleAccountTest("yidian", "app_67ba475b-26e0-4cfa-847c-0f115cae5029", memberId);
+        // /**企业开户*/
+        CorpMember.executeCorpMemberTest("yifuyun", "app_67ba475b-26e0-4cfa-847c-0f115cae5029");
+        // /**
+        //  * 分账使用配套接口 end
+        //  */
+        // //对账单下载
+        // BillDemo.executeBillTest("yifuyun");
+        // String appId = "app_67ba475b-26e0-4cfa-847c-0f115cae5029";
+
+        // /**
+        //  * 获取云闪付用户号
+        //  */
+        // AdapayToolsDemo.executeToolsTest(appId, "yifuyun");
+        // /**
+        //  * 余额查询
+        //  */
+        // SettleAccountDemo.executeQueryBalance("yifuyun", appId, "member_id", "settleCount_id");
+        // /**
+        //  *用户取现
+        //  */
+        // SettleAccountDemo.executeDrawCash("yifuyun", appId, "member_id");
+        // /**
+        //  * 钱包登录申请
+        //  */
+        // AdapayToolsDemo.executeLoginTest(appId,"yifuyun");
+
+    }
+
+
+}

+ 244 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Member.java

@@ -0,0 +1,244 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
+
+/**
+ * @author yingyong.wang
+ */
+public class Member extends ConfigInit {
+
+
+    /**
+     * 运行 member 类接口
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> executeMemberTest(String merchantKey, String app_id) throws Exception{
+        Member demo = new Member();
+        Map<String, Object> member = demo.executeCreateMember(merchantKey, app_id);
+        demo.executeQueryMember(merchantKey, (String)member.get("member_id"),app_id);
+        demo.executeUpdateMember(merchantKey, (String)member.get("member_id"),app_id);
+        demo.executeQueryMember(merchantKey, (String)member.get("member_id"),app_id);
+        demo.executeListMember(merchantKey, app_id);
+        return member;
+    }
+
+
+    /**
+     * 创建 member
+     * @return 创建的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember(String merchantKey, String app_id) throws Exception {
+        System.out.println("=======execute CreateMember begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", "jsdk_member_"+System.currentTimeMillis());
+        memberParams.put("app_id",app_id);
+        memberParams.put("location", "上海市徐汇区宜山路");
+        memberParams.put("email", "123@163.com");
+        memberParams.put("gender", "MALE");
+        memberParams.put("tel_no", "13153333333");
+        memberParams.put("nickname", "nick_name");
+        System.out.println("创建用户,请求参数:" + JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.create(memberParams, merchantKey);
+        System.out.println("创建用户,返回参数:" + JSON.toJSONString(member));
+        System.out.println("=======execute CreateMember end=======");
+        
+        return member;
+    
+    }
+
+    /**
+     * 查询 member
+     * @param member_id 待查询的member_id
+     * @return 创建的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQueryMember(String merchantKey, String member_id,String app_id) throws Exception {
+        System.out.println("=======execute queryMember begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", app_id);
+        System.out.println("查询用户,请求参数:" + JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.query(memberParams, merchantKey);
+        System.out.println("查询用户,返回参数:" + JSON.toJSONString(member));
+
+
+        System.out.println("=======execute queryMember end=======");
+        
+        return member;
+    
+    }
+
+
+    /**
+     * 更新 member
+     * @param member_id 待更新的member_id
+     * @return 更新的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeUpdateMember(String merchantKey, String member_id,String app_id) throws Exception {
+        System.out.println("=======execute update Member begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", app_id);
+        memberParams.put("location", "上海市徐汇区宜山路1");
+        memberParams.put("email", "1234@163.com");
+        memberParams.put("gender", "MALE");
+        memberParams.put("tel_no", "13153333333");
+        memberParams.put("nickname", "nick_name2");
+
+        System.out.println("更新用户,请求参数:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.update(memberParams, merchantKey);
+        System.out.println("更新用户,返回参数:"+JSON.toJSONString(member));
+
+        System.out.println("=======execute update Member end=======");
+        
+        return member;
+    
+    }
+
+    /**
+     * 查询 member list
+     * @param app_id app_id
+     * @return 查询的member list
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeListMember(String merchantKey, String app_id) throws Exception {
+        System.out.println("=======execute list Member begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("page_index", "1");
+        memberParams.put("app_id", app_id);
+        memberParams.put("page_size", "20");
+        memberParams.put("created_gte", String.valueOf(System.currentTimeMillis() - 5 * 60 * 1000));
+        memberParams.put("created_lte", String.valueOf(System.currentTimeMillis()));
+        System.out.println("查询用户列表,请求参数:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.queryList(memberParams, merchantKey);
+        System.out.println("查询用户列表,返回参数:"+JSON.toJSONString(member));
+
+
+        System.out.println("=======execute list Member end=======");
+        
+        return member;
+    
+    }
+
+     /**
+     * 运行 member 类接口
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> executeMemberTest( String app_id) throws Exception{
+        Member demo = new Member();
+        Map<String, Object> member = demo.executeCreateMember( app_id);
+        demo.executeQueryMember( (String)member.get("member_id"),app_id);
+        demo.executeUpdateMember( (String)member.get("member_id"),app_id);
+        demo.executeQueryMember( (String)member.get("member_id"),app_id);
+        demo.executeListMember( app_id);
+        return member;
+    }
+
+
+    /**
+     * 创建 member
+     * @return 创建的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateMember( String app_id) throws Exception {
+        System.out.println("=======execute CreateMember begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", "0021677");
+        memberParams.put("app_id",app_id);
+        memberParams.put("location", "上海市徐汇区宜山路");
+        memberParams.put("email", "123@163.com");
+        memberParams.put("gender", "MALE");
+        memberParams.put("tel_no", "13153333333");
+        memberParams.put("nickname", "nick_name");
+        System.out.println("创建用户,请求参数:" + JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.create(memberParams);
+        System.out.println("创建用户,返回参数:" + JSON.toJSONString(member));
+        System.out.println("=======execute CreateMember end=======");
+        
+        return member;
+    
+    }
+
+    /**
+     * 查询 member
+     * @param member_id 待查询的member_id
+     * @return 创建的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQueryMember( String member_id,String app_id) throws Exception {
+        System.out.println("=======execute queryMember begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", app_id);
+        System.out.println("查询用户,请求参数:" + JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.query(memberParams);
+        System.out.println("查询用户,返回参数:" + JSON.toJSONString(member));
+
+
+        System.out.println("=======execute queryMember end=======");
+        
+        return member;
+    
+    }
+
+
+    /**
+     * 更新 member
+     * @param member_id 待更新的member_id
+     * @return 更新的member 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeUpdateMember( String member_id,String app_id) throws Exception {
+        System.out.println("=======execute update Member begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("member_id", member_id);
+        memberParams.put("app_id", app_id);
+        memberParams.put("location", "上海市徐汇区宜山路1");
+        memberParams.put("email", "1234@163.com");
+        memberParams.put("gender", "MALE");
+        memberParams.put("tel_no", "13153333333");
+        memberParams.put("nickname", "nick_name2");
+
+        System.out.println("更新用户,请求参数:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.update(memberParams);
+        System.out.println("更新用户,返回参数:"+JSON.toJSONString(member));
+
+        System.out.println("=======execute update Member end=======");
+        
+        return member;
+    
+    }
+
+    /**
+     * 查询 member list
+     * @param app_id app_id
+     * @return 查询的member list
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeListMember( String app_id) throws Exception {
+        System.out.println("=======execute list Member begin=======");
+        Map<String, Object> memberParams = new  HashMap<String, Object>(2);
+        memberParams.put("page_index", "1");
+        memberParams.put("app_id", app_id);
+        memberParams.put("page_size", "20");
+        memberParams.put("created_gte", String.valueOf(System.currentTimeMillis() - 5 * 60 * 1000));
+        memberParams.put("created_lte", String.valueOf(System.currentTimeMillis()));
+        System.out.println("查询用户列表,请求参数:"+JSON.toJSONString(memberParams));
+        Map<String, Object> member = com.huifu.adapay.model.Member.queryList(memberParams);
+        System.out.println("查询用户列表,返回参数:"+JSON.toJSONString(member));
+
+
+        System.out.println("=======execute list Member end=======");
+        
+        return member;
+    
+    }
+
+
+}

+ 201 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Payment.java

@@ -0,0 +1,201 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.exception.BaseAdaPayException;
+import org.springframework.util.DigestUtils;
+
+/**
+ * @author jane.zhao
+ */
+public class Payment extends ConfigInit {
+
+
+    /**
+     * 运行支付类接口
+     *
+     * @return paymentId
+     * @throws Exception 异常
+     */
+    public static String executePaymentTest(String merchantKey) throws Exception {
+        //支付接口
+        Map<String, Object> paymentParams = new HashMap<>(10);
+        paymentParams.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
+        paymentParams.put("pay_channel", "alipay_wap");
+        paymentParams.put("pay_amt", "0.01");
+
+        paymentParams.put("goods_title", "your goods title");
+        paymentParams.put("goods_desc", "your goods desc");
+        paymentParams.put("notify_url", "https://wxwechat.utools.club/studentOrder/adaNotify");
+
+
+        paymentParams.put("div_members", "");
+
+        Map<String, Object> deviceInfo = new HashMap<>(2);
+
+        deviceInfo.put("device_ip", "127.0.0.1");
+        deviceInfo.put("device_mac", "交易设备 MAC");
+        deviceInfo.put("device_type", "1");
+        deviceInfo.put("device_imei", "交易设备 IMEI");
+        deviceInfo.put("device_imsi", "交易设备 IMSI");
+        deviceInfo.put("device_iccId", "ICCID");
+        deviceInfo.put("device_wifi_mac", "WIFIMAC");
+
+        paymentParams.put("device_info", deviceInfo);
+
+//        Map<String, Object> goodsDetail = new HashMap<>();
+//
+//        goodsDetail.put("goods_id", "gooods_id_100002");
+//        goodsDetail.put("goods_name", "商品名称");
+//        goodsDetail.put("quantity", "1");
+//        goodsDetail.put("price", "100");
+//        goodsDetail.put("goods_category", "商品类目");
+//        goodsDetail.put("goods_body", "商品描述信息");
+//        goodsDetail.put("show_url", "商品的展示地址");
+//
+//        Map<String, Object> promotionDetail = new HashMap<>();
+//
+//        promotionDetail.put("cost_price", "100");
+//        promotionDetail.put("receipt_id", "商家小票 id");
+//        promotionDetail.put("goods_detail", goodsDetail);
+
+        Map<String, Object> expendParams = new HashMap<>(2);
+        String openId = "";//微信授权获取
+        expendParams.put("open_id", openId);
+        expendParams.put("is_raw", "1");
+        expendParams.put("callback_url", "绝对路径");
+        expendParams.put("limit_pay", "1");
+
+       // expendParams.put("promotion_detail", promotionDetail);
+        paymentParams.put("expend", expendParams);
+        Map<String, Object> payment = executePayment(paymentParams);
+        System.out.println("钱包支付地址:" + payment.get("pay_url"));
+        //支付查询接口
+       // queryPayment((String) payment.get("id"));
+        // //关单接口
+       // closePayment((String) payment.get("id"));
+
+        return (String) payment.get("id");
+    }
+
+    /**
+     * 执行一个支付交易
+     *
+     * @return 创建的支付对象
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> executePayment(Map<String, Object> paymentParams) throws Exception {
+        paymentParams.put("app_id", appId);
+
+        //调用sdk方法,创建支付,得到支付对象
+        Map<String, Object> payment = new HashMap<>();
+        try {
+            payment = com.huifu.adapay.model.Payment.create(paymentParams);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+
+        String error_code = (String) payment.get("error_code");
+        if (null != error_code) {
+            System.out.println("创建支付返回参数:" + JSON.toJSONString(payment));
+
+            String error_msg = (String) payment.get("error_msg");
+            System.out.println("error_code:" + error_code + "............." + error_msg);
+        }
+
+        return payment;
+    }
+
+    /**
+     * 关闭一个支付交易
+     *
+     * @param paymentId 要关闭的支付id
+     * @return 关闭的支付对象
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> closePayment(String paymentId) throws Exception {
+        System.out.println("=======close payment begin=======");
+        //关闭支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id11
+        //调用sdk方法,关闭支付,得到支付对象
+        Map<String, Object> payment = new HashMap<>();
+        Map<String, Object> paymentParams = new HashMap<>(10);
+        paymentParams.put("payment_id", paymentId);
+        try {
+            paymentParams.put("payment_id", paymentId);
+            paymentParams.put("reason", "reason");
+            paymentParams.put("expend", "expend");
+            paymentParams.put("notify_url", "notify_url");
+            System.out.println("关单请求参数:" + JSON.toJSONString(paymentId));
+            payment = com.huifu.adapay.model.Payment.close(paymentParams);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+
+
+        String error_code = (String) payment.get("error_code");
+        if (null != error_code) {
+            System.out.println("关单返回参数:" + JSON.toJSONString(payment));
+            String error_msg = (String) payment.get("error_msg");
+            System.out.println("error_code:" + error_code + "............." + error_msg);
+        }
+
+
+        return payment;
+    }
+
+    /**
+     * 查询一个支付交易
+     *
+     * @param paymentId 要查询的支付id
+     * @return 查询的支付对象
+     * @throws Exception 异常
+     */
+    public static Map<String, Object> queryPayment(String paymentId) throws Exception {
+        System.out.println("=======query payment begin=======");
+        //查询支付对象的参数,全部参数请参考 https://docs.adapay.tech/api/04-trade.html#id7
+        //调用sdk方法,查询支付交易,得到支付对象
+        Map<String, Object> payment = new HashMap<>();
+        try {
+            System.out.println("支付查询请求参数:" + JSON.toJSONString(paymentId));
+            payment = com.huifu.adapay.model.Payment.query(paymentId);
+        } catch (BaseAdaPayException e) {
+            e.printStackTrace();
+        }
+
+        System.out.println("支付查询返回参数:" + JSON.toJSONString(payment));
+
+        String error_code = (String) payment.get("error_code");
+        if (null == error_code) {
+            String error_msg = (String) payment.get("error_msg");
+            System.out.println("error_code:" + error_code + "............." + error_msg);
+        }
+        System.out.println("=======query payment end=======");
+        return payment;
+    }
+
+
+    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sellerNo, List<Map<String, Object>> tempRoutingList) throws Exception {
+        Map<String, Object> paymentParams = new HashMap<>(10);
+        paymentParams.put("appId", appId);
+        paymentParams.put("amount", amount);
+        paymentParams.put("orderNo", orderNo);
+        paymentParams.put("notifyUrl", notifyUrl);
+        paymentParams.put("returnUrl", returnUrl);
+        paymentParams.put("orderSubject", orderSubject);
+        paymentParams.put("orderBody", orderBody);
+        paymentParams.put("wxAppId", wxAppId);
+        if (tempRoutingList != null) {
+            paymentParams.put("div_members", JSONObject.toJSONString(tempRoutingList));
+        }
+
+        String originalStr = JSONObject.toJSONString(paymentParams);
+        String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
+
+        paymentParams.put("sign", sign);
+        paymentParams.remove(appId);
+        return paymentParams;
+    }
+}

+ 156 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/Refund.java

@@ -0,0 +1,156 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * @author jane.zhao
+ */
+public class Refund extends ConfigInit {
+
+    /**
+     * 运行退款类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeRefundTest(String merchantKey, String paymentId) throws Exception {
+        Refund demo = new Refund();
+        //退款接口
+        Map<String, Object> refund = demo.executeRefund(merchantKey, paymentId);
+        //退款查询接口(通过pamentId查询)
+        demo.queryByPaymentId(merchantKey, paymentId);
+        //退款查询接口(通过refundId查询)
+        demo.queryByRefundId(merchantKey, (String) refund.get("id"));
+    }
+
+    /**
+     * 执行一个退款交易
+     *
+     * @param paymentId 要退款的原支付paymentId
+     * @return 创建的退款对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeRefund(String merchantKey, String paymentId) throws Exception {
+        System.out.println("=======execute refund begin=======");
+        Map<String, Object> refundParams = new HashMap<String, Object>(2);
+        refundParams.put("refund_amt", "0.01");
+        refundParams.put("app_id", "your appid");
+        refundParams.put("refund_order_no", "jsdk_refund_"+System.currentTimeMillis());
+        System.out.println("退款请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.create(paymentId, refundParams, merchantKey);
+        System.out.println("退款返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======execute refund end=======");
+        
+        return refund;
+    }
+
+    /**
+     * 根据原支付id查询一个退款交易
+     *
+     * @param paymentId 要查询退款的原支付paymentId
+     * @return 查询的退款对象,可能含多个退款明细RefundDetail
+     * @throws Exception 异常
+     */
+    public Map<String, Object> queryByPaymentId(String merchantKey, String paymentId) throws Exception {
+        System.out.println("=======query refund by paymentId begin=======");
+        Map<String, Object> refundParams = new  HashMap<String, Object>(1);
+        refundParams.put("payment_id", paymentId);
+        System.out.println("通过原支付ID查询退款交易,请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.query(refundParams, merchantKey);
+        System.out.println("通过原支付ID查询退款交易,返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======query refund by paymentId end=======");
+        return refund;
+    }
+
+    /**
+     * 根据退款refundId查询一个退款交易
+     *
+     * @param refundId 要查询的退款refundId
+     * @return 查询的退款对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> queryByRefundId(String merchantKey, String refundId) throws Exception {
+        System.out.println("=======query refund by refundid begin=======");
+        Map<String, Object> refundParams = new  HashMap<String, Object>(1);
+        refundParams.put("refund_id", refundId);
+        System.out.println("通过refundId查询退款交易,请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.query(refundParams, merchantKey);
+        System.out.println("通过refundId查询退款交易,返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======query refund by refundid end=======");
+        return refund;
+    }
+
+    /**
+     * 运行退款类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeRefundTest( String paymentId) throws Exception {
+        Refund demo = new Refund();
+        //退款接口
+        Map<String, Object> refund = demo.executeRefund( paymentId);
+        //退款查询接口(通过pamentId查询)
+        demo.queryByPaymentId( paymentId);
+        //退款查询接口(通过refundId查询)
+        demo.queryByRefundId( (String) refund.get("id"));
+    }
+
+    /**
+     * 执行一个退款交易
+     *
+     * @param paymentId 要退款的原支付paymentId
+     * @return 创建的退款对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeRefund( String paymentId) throws Exception {
+        System.out.println("=======execute refund begin=======");
+        Map<String, Object> refundParams = new HashMap<String, Object>(2);
+        refundParams.put("refund_amt", "0.01");
+        refundParams.put("app_id", "your appid");
+        refundParams.put("refund_order_no", "jsdk_refund_"+System.currentTimeMillis());
+        System.out.println("退款请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.create(paymentId, refundParams);
+        System.out.println("退款返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======execute refund end=======");
+        
+        return refund;
+    }
+
+    /**
+     * 根据原支付id查询一个退款交易
+     *
+     * @param paymentId 要查询退款的原支付paymentId
+     * @return 查询的退款对象,可能含多个退款明细RefundDetail
+     * @throws Exception 异常
+     */
+    public Map<String, Object> queryByPaymentId( String paymentId) throws Exception {
+        System.out.println("=======query refund by paymentId begin=======");
+        Map<String, Object> refundParams = new  HashMap<String, Object>(1);
+        refundParams.put("payment_id", paymentId);
+        System.out.println("通过原支付ID查询退款交易,请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.query(refundParams);
+        System.out.println("通过原支付ID查询退款交易,返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======query refund by paymentId end=======");
+        return refund;
+    }
+
+    /**
+     * 根据退款refundId查询一个退款交易
+     *
+     * @param refundId 要查询的退款refundId
+     * @return 查询的退款对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> queryByRefundId( String refundId) throws Exception {
+        System.out.println("=======query refund by refundid begin=======");
+        Map<String, Object> refundParams = new  HashMap<String, Object>(1);
+        refundParams.put("refund_id", refundId);
+        System.out.println("通过refundId查询退款交易,请求参数:" + JSON.toJSONString(refundParams));
+        Map<String, Object> refund = com.huifu.adapay.model.Refund.query(refundParams);
+        System.out.println("通过refundId查询退款交易,返回参数:" + JSON.toJSONString(refund));
+        System.out.println("=======query refund by refundid end=======");
+        return refund;
+    }
+}

+ 457 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay2/SettleAccount.java

@@ -0,0 +1,457 @@
+package com.ym.mec.thirdparty.adapay2;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.alibaba.fastjson.JSON;
+
+/**
+ * @author yingyong.wang
+ */
+public class SettleAccount extends ConfigInit {
+
+    /**
+     * 运行结算账户类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeSettleAccountTest(String merchantKey, String app_id, String member_id) throws Exception {
+        SettleAccount demo = new SettleAccount();
+        // 创建结算账户
+        Map<String, Object> settlecount = demo.executeCreateSettleAccount(merchantKey, app_id, member_id);
+        String settleCount_id = (String) settlecount.get("id");
+
+
+        // 查询结算账户
+        demo.executeQuerySettleAccount(merchantKey, settleCount_id, app_id, member_id);
+
+        // 查询结算账户明细列表
+        demo.executeQuerySettleDetails(merchantKey, app_id, member_id, settleCount_id);
+        // 删除结算账户
+        demo.executeDeleteSettleAccount(merchantKey, settleCount_id, app_id, member_id);
+
+        member_id = "user_test_10001";
+        settleCount_id = "0023056905335360";
+
+        demo.executeModifySettleAccount(merchantKey, settleCount_id, app_id, member_id);
+
+        demo.executeDrawCash(merchantKey, app_id, member_id);
+
+        demo.executeQueryBalance(merchantKey, app_id, member_id, settleCount_id);
+    }
+
+    /**
+     * 运行查询结算明细列表接口
+     *
+     * @throws Exception 异常
+     */
+//    public static void executeQuerySettleDetailTest(String merchantKey, String appId, String memberId, String settleAccountId, String beginDate, String endDate) throws Exception {
+//        SettleAccountDemo demo = new SettleAccountDemo();
+//        demo.executeQuerySettleDetails(merchantKey, appId, memberId, settleAccountId, beginDate, endDate);
+//    }
+
+
+    /**
+     * 创建 settleCount
+     *
+     * @return 创建的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateSettleAccount(String merchantKey, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute Create SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        Map<String, Object> accountInfo = new HashMap<String, Object>(2);
+        accountInfo.put("card_id", "6222021703001692221");
+        accountInfo.put("card_name", "袁电茜");
+        accountInfo.put("cert_id", "310109200006062491");
+        accountInfo.put("cert_type", "00");
+        accountInfo.put("tel_no", "18888888881");
+        accountInfo.put("bank_code", "03060000");
+        accountInfo.put("bank_acct_type", "1");
+        accountInfo.put("prov_code", "0031");
+        accountInfo.put("area_code", "3100");
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        settleCountParams.put("channel", "bank_account");
+        settleCountParams.put("account_info", accountInfo);
+        System.out.println("创建结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.create(settleCountParams, merchantKey);
+        System.out.println("创建结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute Create SettleAccount end=======");
+
+        return settleCount;
+
+    }
+
+    /**
+     * 查询 SettleAccount
+     *
+     * @param settleCount_id 待查询的settleCount_id
+     * @param app_id         app_id
+     * @return 查询的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQuerySettleAccount(String merchantKey, String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute query SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        System.out.println("查询结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.query(settleCountParams, merchantKey);
+        System.out.println("查询结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute query SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 删除 SettleAccount
+     *
+     * @param settleCount_id 待删除的settleCount_id
+     * @param app_id         app_id
+     * @return delete的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeDeleteSettleAccount(String merchantKey, String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute delete SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        System.out.println("删除结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.delete(settleCountParams, merchantKey);
+        System.out.println("删除结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute delete SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 查询结算明细列表
+     *
+     * @param merchantKey
+     * @param app_id          app_id
+     * @param member_id       待查询的member_id
+     * @param settleAccountId 待查询的settleAccountId
+     * @return
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQuerySettleDetails(String merchantKey, String app_id, String member_id,
+                                                         String settleAccountId) throws Exception {
+        System.out.println("=======execute query settle details begin=======");
+        Map<String, Object> querySettleDetailParams = new HashMap<String, Object>(2);
+        querySettleDetailParams.put("app_id", app_id);
+        querySettleDetailParams.put("member_id", member_id);
+        querySettleDetailParams.put("settle_account_id", settleAccountId);
+        querySettleDetailParams.put("begin_date", "20191008");
+        querySettleDetailParams.put("end_date", "20191010");
+        System.out.println("查询结算明细列表,请求参数:" + JSON.toJSONString(querySettleDetailParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.querySettleDetails(querySettleDetailParams, merchantKey);
+        System.out.println("查询结算明细列表,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute query settle details end=======");
+
+        return settleCount;
+    }
+
+
+    /**
+     * 运行结算账户类接口
+     *
+     * @throws Exception 异常
+     */
+    public static void executeSettleAccountTest(String app_id, String member_id) throws Exception {
+        SettleAccount demo = new SettleAccount();
+        // 创建结算账户
+        Map<String, Object> settlecount = demo.executeCreateSettleAccount(app_id, member_id);
+        String settleCount_id = (String) settlecount.get("id");
+        // 查询结算账户
+        demo.executeQuerySettleAccount(settleCount_id, app_id, member_id);
+
+        // 查询结算账户明细列表
+        demo.executeQuerySettleDetails(app_id, member_id, settleCount_id);
+        // 删除结算账户
+        demo.executeDeleteSettleAccount(settleCount_id, app_id, member_id);
+        member_id = "user_test_10001";
+        settleCount_id = "0023056905335360";
+
+        demo.executeModifySettleAccount(settleCount_id, app_id, member_id);
+
+    }
+
+    /**
+     * 运行查询结算明细列表接口
+     *
+     * @throws Exception 异常
+     */
+//    public static void executeQuerySettleDetailTest( String appId, String memberId, String settleAccountId, String beginDate, String endDate) throws Exception {
+//        SettleAccountDemo demo = new SettleAccountDemo();
+//        demo.executeQuerySettleDetails( appId, memberId, settleAccountId, beginDate, endDate);
+//    }
+
+
+    /**
+     * 创建 settleCount
+     *
+     * @return 创建的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeCreateSettleAccount(String app_id, String member_id) throws Exception {
+        System.out.println("=======execute Create SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        Map<String, Object> accountInfo = new HashMap<String, Object>(2);
+        accountInfo.put("card_id", "6222021703001692221");
+        accountInfo.put("card_name", "袁电茜");
+        accountInfo.put("cert_id", "310109200006062491");
+        accountInfo.put("cert_type", "00");
+        accountInfo.put("tel_no", "18888888881");
+        accountInfo.put("bank_code", "03060000");
+        accountInfo.put("bank_acct_type", "1");
+        accountInfo.put("prov_code", "0031");
+        accountInfo.put("area_code", "3100");
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        settleCountParams.put("channel", "bank_account");
+        settleCountParams.put("account_info", accountInfo);
+        System.out.println("创建结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.create(settleCountParams);
+        System.out.println("创建结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute Create SettleAccount end=======");
+
+        return settleCount;
+
+    }
+
+    /**
+     * 查询 SettleAccount
+     *
+     * @param settleCount_id 待查询的settleCount_id
+     * @param app_id         app_id
+     * @return 查询的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQuerySettleAccount(String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute query SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        System.out.println("查询结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.query(settleCountParams);
+        System.out.println("查询结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute query SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 修改 SettleAccount
+     *
+     * @param settleCount_id 待修改的settleCount_id
+     * @param app_id         app_id
+     * @return 修改的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeModifySettleAccount(String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+
+        settleCountParams.put("min_amt", "0.10");
+        settleCountParams.put("remained_amt", "0.10");
+        System.out.println("修改结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.modify(settleCountParams);
+        System.out.println("修改结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 修改 SettleAccount
+     *
+     * @param settleCount_id 待修改的settleCount_id
+     * @param app_id         app_id
+     * @return 修改的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeModifySettleAccount(String merchantKey, String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        settleCountParams.put("min_amt", "");
+        settleCountParams.put("remained_amt", "");
+
+        System.out.println("修改结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.modify(settleCountParams, merchantKey);
+        System.out.println("修改结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+
+
+    /**
+     * 删除 SettleAccount
+     *
+     * @param settleCount_id 待删除的settleCount_id
+     * @param app_id         app_id
+     * @return delete的settleCount 对象
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeDeleteSettleAccount(String settleCount_id, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute delete SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>(2);
+        settleCountParams.put("settle_account_id", settleCount_id);
+        settleCountParams.put("member_id", member_id);
+        settleCountParams.put("app_id", app_id);
+        System.out.println("删除结算账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.delete(settleCountParams);
+        System.out.println("删除结算账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute delete SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 查询结算明细列表
+     *
+     * @param app_id          app_id
+     * @param member_id       待查询的member_id
+     * @param settleAccountId 待查询的settleAccountId
+     * @return
+     * @throws Exception 异常
+     */
+    public Map<String, Object> executeQuerySettleDetails(String app_id, String member_id,
+                                                         String settleAccountId) throws Exception {
+        System.out.println("=======execute query settle details begin=======");
+        Map<String, Object> querySettleDetailParams = new HashMap<String, Object>(2);
+        querySettleDetailParams.put("app_id", app_id);
+        querySettleDetailParams.put("member_id", member_id);
+        querySettleDetailParams.put("settle_account_id", settleAccountId);
+        querySettleDetailParams.put("begin_date", "20191008");
+        querySettleDetailParams.put("end_date", "20191010");
+        System.out.println("查询结算明细列表,请求参数:" + JSON.toJSONString(querySettleDetailParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.querySettleDetails(querySettleDetailParams);
+        System.out.println("查询结算明细列表,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute query settle details end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 取现
+     *
+     * @param merchantKey
+     * @param app_id
+     * @param member_id
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, Object> executeDrawCash(String merchantKey, String app_id, String member_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>();
+
+        settleCountParams.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
+        settleCountParams.put("cash_amt", "0.01");
+        settleCountParams.put("member_id", "user_00008");
+        settleCountParams.put("app_id", app_id);
+        // settleCountParams.put("settle_account_id", "0008919797515968");
+        settleCountParams.put("cash_type", "T1");
+        settleCountParams.put("notify_url", "");
+
+        System.out.println("取现接口,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.drawCash(settleCountParams,merchantKey);
+        System.out.println("取现接口返回参数" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 查询余额
+     *
+     * @param merchantKey
+     * @param app_id
+     * @param member_id
+     * @param settleCount_id
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, Object> executeQueryBalance(String merchantKey, String app_id, String member_id, String settleCount_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>();
+
+        settleCountParams.put("app_id", app_id);
+        settleCountParams.put("member_id", "user_00008");
+        settleCountParams.put("settle_account_id", "0035172521665088");
+
+
+        System.out.println("查询余额账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.queryBalance(settleCountParams,merchantKey);
+        System.out.println("查询余额账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+    /**
+     * 取现
+     *
+
+     * @param app_id
+     * @param member_id
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, Object> executeDrawCash(String app_id, String member_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>();
+
+        settleCountParams.put("order_no", "jsdk_payment_" + System.currentTimeMillis());
+        settleCountParams.put("cash_amt", "0.01");
+        settleCountParams.put("member_id", "user_00008");
+        settleCountParams.put("app_id", app_id);
+        // settleCountParams.put("settle_account_id", "0008919797515968");
+        settleCountParams.put("cash_type", "T1");
+        settleCountParams.put("notify_url", "");
+
+        System.out.println("取现接口,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.drawCash(settleCountParams);
+        System.out.println("取现接口返回参数" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+
+    /**
+     * 查询余额
+     *
+
+     * @param app_id
+     * @param member_id
+     * @param settleCount_id
+     * @return
+     * @throws Exception
+     */
+    public static Map<String, Object> executeQueryBalance( String app_id, String member_id, String settleCount_id) throws Exception {
+        System.out.println("=======execute modify SettleAccount begin=======");
+        Map<String, Object> settleCountParams = new HashMap<String, Object>();
+
+        settleCountParams.put("app_id", app_id);
+        settleCountParams.put("member_id", "user_00008");
+        settleCountParams.put("settle_account_id", "0035172521665088");
+
+
+        System.out.println("查询余额账户,请求参数:" + JSON.toJSONString(settleCountParams));
+        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.queryBalance(settleCountParams);
+        System.out.println("查询余额账户,返回参数:" + JSON.toJSONString(settleCount));
+        System.out.println("=======execute modify SettleAccount end=======");
+
+        return settleCount;
+    }
+
+}