Browse Source

update:支持多商户支付

yonge 3 years ago
parent
commit
ba6a67dcc9
50 changed files with 1563 additions and 1295 deletions
  1. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMerchantConfigDao.java
  3. 110 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java
  4. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java
  5. 14 6
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMerchantConfigService.java
  7. 0 281
      mec-biz/src/main/java/com/ym/mec/biz/service/NotifyCallback.java
  8. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/OrderPayOpsService.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  10. 0 14
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantPaymentOrderService.java
  11. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  14. 10 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  15. 195 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java
  16. 0 144
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberSserviceImpl.java
  17. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java
  18. 85 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  19. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  20. 70 147
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  21. 25 39
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  22. 7 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  23. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  25. 43 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  26. 8 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  27. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  28. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  29. 58 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  30. 17 213
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  31. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  32. 115 0
      mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml
  33. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java
  34. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java
  35. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java
  36. 150 55
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  37. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/SubjectChangeController.java
  38. 0 73
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherOrderController.java
  39. 4 4
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/AdapayInit.java
  40. 18 5
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMemberService.java
  41. 21 43
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  42. 0 53
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/SettleAccount.java
  43. 64 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/SettleAccountService.java
  44. 144 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/AccountInfo.java
  45. 0 58
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/AdapayMerConfig.java
  46. 165 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java
  47. 4 11
      mec-web/src/main/java/com/ym/mec/web/WebApplication.java
  48. 115 37
      mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java
  49. 0 1
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  50. 7 25
      mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.dal.config;
+
+public class AdapayNotifyConstants {
+	
+	public static String corp_member_notify_url_test = "https://test.dayaedu.com/api-web/adapay/callback";
+
+	public static String corp_member_notify_url_prod = "https://online.dayaedu.com/api-web/adapay/callback";
+	
+	public static String student_payment_notify_url_test = "https://mstutest.dayaedu.com/api-student/studentOrder/callback";
+	
+	public static String student_payment_notify_url_prod = "https://mstuonline.dayaedu.com/api-student/studentOrder/callback";
+
+}

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+public interface HfMerchantConfigDao extends BaseDAO<Integer, HfMerchantConfig> {
+
+	HfMerchantConfig queryByTenantId(Integer tenantId);
+}

+ 110 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java

@@ -0,0 +1,110 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class PaymentParam {
+    private BigDecimal amount;
+    private String orderNo;
+    private String payChannel;
+    private String returnUrl;
+    private String orderSubject;
+    private String orderBody;
+    private String sign;
+    private String code;
+    private String platform;
+    private Integer tenantId;
+    
+    private String notifyUrl;
+    
+
+    public PaymentParam() {
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public String getReturnUrl() {
+        return returnUrl;
+    }
+
+    public void setReturnUrl(String returnUrl) {
+        this.returnUrl = returnUrl;
+    }
+
+    public String getOrderSubject() {
+        return orderSubject;
+    }
+
+    public void setOrderSubject(String orderSubject) {
+        this.orderSubject = orderSubject;
+    }
+
+    public String getOrderBody() {
+        return orderBody;
+    }
+
+    public void setOrderBody(String orderBody) {
+        this.orderBody = orderBody;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(String platform) {
+        this.platform = platform;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+	public String getNotifyUrl() {
+		return notifyUrl;
+	}
+
+	public void setNotifyUrl(String notifyUrl) {
+		this.notifyUrl = notifyUrl;
+	}
+}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -58,6 +58,12 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "邮编",required = true)
     private String zipCode;
+    
+    @ApiModelProperty(value = "银行账户类型:1-对公;2-对私,如果需要自动开结算账户,本字段必填",required = true)
+    private String bankAcctType;
+
+    @ApiModelProperty(value = "银行卡对应的户名,如果需要自动开结算账户,本字段必填;若银行账户类型是对公,必须与企业名称一致",required = true)
+	private String cardName;
 
     @ApiModelProperty(value = "银行卡号",required = true)
     private String cardNo;
@@ -298,4 +304,20 @@ public class HfMember extends BaseEntity {
 	public void setOrganId(Integer organId) {
 		this.organId = organId;
 	}
+
+	public String getBankAcctType() {
+		return bankAcctType;
+	}
+
+	public void setBankAcctType(String bankAcctType) {
+		this.bankAcctType = bankAcctType;
+	}
+
+	public String getCardName() {
+		return cardName;
+	}
+
+	public void setCardName(String cardName) {
+		this.cardName = cardName;
+	}
 }

+ 14 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java

@@ -1,16 +1,24 @@
 package com.ym.mec.biz.service;
 
+import java.io.File;
+
 import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.common.service.BaseService;
-
-import java.io.File;
-import java.util.Map;
+import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
 
 public interface HfMemberService extends BaseService<Integer, HfMember> {
+	
+	/**
+     * 根据商户号获取商户信息
+     *
+     * @param memberId
+     * @return
+     */
+    HfMember getByMemberId(String memberId);
 
-    Map<String,Object> createMember(HfMember member, File file) throws Exception;
+    boolean createMember(HfMember member, File file) throws Exception;
 
-    Map<String,Object> updateMember(HfMember member, File file) throws Exception;
+    boolean updateMember(HfMember member, File file) throws Exception;
 
-    Map<String,Object> createSettleAccount(String memberId, String cardNo, String bankCode) throws Exception;
+    boolean mergeSettleAccount(String memberId, AccountInfo accountInfo) throws Exception;
 }

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.common.service.BaseService;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+public interface HfMerchantConfigService extends BaseService<Integer, HfMerchantConfig> {
+
+	HfMerchantConfig queryByTenantId(Integer tenantId);
+}

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

@@ -1,281 +0,0 @@
-package com.ym.mec.biz.service;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.huifu.adapay.Adapay;
-import com.huifu.adapay.notify.MQTTCallbackHandler;
-import com.ym.mec.biz.dal.dao.HfMemberDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.entity.HfMember;
-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.adapay.ConfigInit;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-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;
-    @Autowired
-    private HfMemberDao hfMemberDao;
-
-    private static NotifyCallback notifyCallback;
-
-    @Value("${spring.profiles.active:dev}")
-    private String profiles;
-
-    @Value("${spring.application.name}")
-    private String appName;
-
-    @PostConstruct
-    public void init() {
-        notifyCallback = this;
-//        if (!profiles.equals("prod") && !appName.equals("student-server")) {
-//            Adapay.debug = true;
-//            // prodMode 模式,默认为生产模式,false可以使用mock模式
-//            Adapay.prodMode = false;
-//        }
-        Adapay.setDeviceID(appName);
-    }
-
-    /**
-     * 用户接收并处理支付成功的异步消息
-     *
-     * @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);
-            return;
-        }
-        TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
-        if (tenantPaymentOrder != null) {
-            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"));
-            notifyMap.put("remarks", dataObj.getString("error_msg"));
-            notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
-            return;
-        }
-        TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
-        if (tenantPaymentOrder != null) {
-            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"));
-            notifyMap.put("remarks", dataObj.getString("error_msg"));
-            notifyCallback.studentPaymentOrderService.updateOrder(notifyMap);
-            return;
-        }
-        TenantPaymentOrder tenantPaymentOrder = notifyCallback.tenantPaymentOrderService.queryByOrderNo(orderNo);
-        if (tenantPaymentOrder != null) {
-            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));
-        JSONObject corpMemberObj = JSON.parseObject(corpMember);
-        if (!corpMemberObj.getString("app_id").equals(ConfigInit.appId)) {
-            return;
-        }
-        String memberId = corpMemberObj.getString("member_id");
-        HfMember hfMember = notifyCallback.hfMemberDao.getByMemberId(memberId);
-        if (hfMember == null || !hfMember.getStatus().equals("pending")) {
-            return;
-        }
-        hfMember.setStatus("succeeded");
-        hfMember.setMemo(corpMemberObj.getString("audit_desc"));
-        if (corpMemberObj.containsKey("audit_state") && corpMemberObj.getString("audit_state").equals("E")) {
-            JSONObject accounts = JSON.parseObject(corpMemberObj.getString("settle_accounts"));
-            hfMember.setSettleAccountId(accounts.getString("id"));
-        }
-        notifyCallback.hfMemberDao.update(hfMember);
-    }
-
-    @Override
-    public void corpMemberFailedMessageArrived(String corpMember) throws Exception {
-        System.out.println(String.format("receive corpMember  msg=%s", corpMember));
-        JSONObject corpMemberObj = JSON.parseObject(corpMember);
-        if (!corpMemberObj.getString("app_id").equals(ConfigInit.appId)) {
-            return;
-        }
-        String memberId = corpMemberObj.getString("member_id");
-        HfMember hfMember = notifyCallback.hfMemberDao.getByMemberId(memberId);
-        if (hfMember == null || !hfMember.getStatus().equals("pending")) {
-            return;
-        }
-        hfMember.setStatus("failed");
-        hfMember.setMemo(corpMemberObj.getString("audit_desc"));
-        notifyCallback.hfMemberDao.update(hfMember);
-    }
-
-    @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.............");
-    }
-}

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/OrderPayOpsService.java

@@ -1,9 +1,10 @@
 package com.ym.mec.biz.service;
 
-import java.math.BigDecimal;
 import java.util.Map;
 
+import com.ym.mec.biz.dal.dto.PaymentParam;
+
 public interface OrderPayOpsService {
 
-    Map<String, Object> executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception;
+    Map<String, Object> executePayment(PaymentParam paymentParam) throws Exception;
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java

@@ -162,7 +162,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
 
     int batchUpdate(List<StudentPaymentOrder> studentPaymentOrderList);
 
-    PayStatus queryPayStatus(String paymentChannel, String orderNo, String transNo) throws Exception;
+    PayStatus queryPayStatus(StudentPaymentOrder studentPaymentOrder) throws Exception;
 
     /**
      * 获取购买了乐器的报名订单

+ 0 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/TenantPaymentOrderService.java

@@ -17,18 +17,6 @@ public interface TenantPaymentOrderService extends BaseService<Long, TenantPayme
 	public HttpResponseResult createOrder(Integer userId, Integer activitiesId, boolean isContinuePay);
 
 	/**
-	 * 回调
-	 * @param tenantPaymentOrder
-	 * @return
-	 */
-	public boolean paymentForCallback(TenantPaymentOrder tenantPaymentOrder);
-
-	/**
-	 * 从第三方查询订单状态
-	 */
-	public void queryOrderStatusFromRemote();
-
-	/**
 	 * 订单查询
 	 * @param orderNo
 	 * @return
@@ -37,6 +25,4 @@ public interface TenantPaymentOrderService extends BaseService<Long, TenantPayme
 
 	Object queryTenanPaymentPage(TenantPaymentOrderQueryInfo queryInfo);
 
-
-	Boolean confirmOrder(TenantPaymentOrder order);
 }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java

@@ -338,7 +338,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
                 orderAmount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -582,7 +582,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/callback",
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "对外课程组购买",
                     coursesGroup.getName(),

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -186,7 +186,7 @@ public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, Degr
                 money,
                 BigDecimal.ZERO,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "考级报名活动",
                 "考级报名活动",

+ 10 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -19,6 +19,7 @@ import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.storage.StoragePluginContext;
 import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import com.ym.mec.util.collection.MapUtil;
@@ -178,6 +179,9 @@ public class ExportServiceImpl implements ExportService {
     private SysUserCashAccountLogService sysUserCashAccountLogService;
     @Autowired
     private StudentStatisticsService studentStatisticsService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -370,8 +374,12 @@ public class ExportServiceImpl implements ExportService {
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
             Map<String, Object> paymentList = null;
+        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+            if(hfMerchantConfig == null){
+            	throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
+            }
             try {
-                paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
+                paymentList = Payment.queryList(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), pageIndex, createdGte, createdLte);
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -406,7 +414,7 @@ public class ExportServiceImpl implements ExportService {
                         if (!paymentMap.containsKey("payment_confirms")) {
                             Map<String, Object> confirmMap = null;
                             try {
-                                confirmMap = Payment.queryConfirmList(paymentMap.get("id").toString());
+                                confirmMap = Payment.queryConfirmList(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentMap.get("id").toString());
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }

+ 195 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java

@@ -0,0 +1,195 @@
+package com.ym.mec.biz.service.impl;
+
+import java.io.File;
+import java.util.Date;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
+import com.ym.mec.biz.dal.dao.HfMemberDao;
+import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.service.HfMemberService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+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.thirdparty.adapay.CorpMemberService;
+import com.ym.mec.thirdparty.adapay.SettleAccountService;
+import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
+import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+@Service
+public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
+	
+    @Autowired
+    private HfMemberDao hfMemberDao;
+    
+    @Autowired
+    private SettleAccountService settleAccountService;
+    
+    @Autowired
+    private CorpMemberService corpMemberService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+
+    @Value("${spring.profiles.active:dev}")
+    private String env;
+
+    @Override
+    public BaseDAO<Integer, HfMember> getDAO() {
+        return hfMemberDao;
+    }
+
+    @Override
+	public HfMember getByMemberId(String memberId) {
+		return hfMemberDao.getByMemberId(memberId);
+	}
+
+	@Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean createMember(HfMember member, File file) throws Exception {
+        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId());
+        if (hasMember != null) {
+            throw new BizException("商户号不能与已有商户相同,请核查");
+        }
+        hasMember = hfMemberDao.getByName(member.getName());
+        if (hasMember != null) {
+            throw new BizException("公司名与已有公司名相同,请核查");
+        }
+        
+        Integer tenantId = member.getTenantId();
+        
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        }
+        
+        EnterpriseUser enterpriseUser = new EnterpriseUser();
+        enterpriseUser.setAddress(member.getAddress());
+        enterpriseUser.setAreaCode(member.getAreaCode());
+        enterpriseUser.setAttachFile(file);
+        enterpriseUser.setBankAcctType(member.getBankAcctType());
+        enterpriseUser.setBankCode(member.getBankCode());
+        enterpriseUser.setBusinessScope(member.getBusinessScope());
+        enterpriseUser.setCardName(member.getCardName());
+        enterpriseUser.setCardNo(member.getCardNo());
+        enterpriseUser.setLegalCertId(member.getLegalCertId());
+        enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
+        enterpriseUser.setLegalMp(member.getLegalMp());
+        enterpriseUser.setLegalPerson(member.getLegalPerson());
+        enterpriseUser.setMemberId(member.getMemberId());
+        enterpriseUser.setName(member.getName());
+        
+        if(StringUtils.equals(env, "prod")){
+            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_prod);
+        }else {
+            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_test);
+        }
+        enterpriseUser.setProvCode(member.getProvCode());
+        enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
+        enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
+        
+        corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+
+        Date nowDate = new Date();
+        member.setCreateTime(nowDate);
+        member.setUpdateTime(nowDate);
+        member.setStatus("pending");
+        insert(member);
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateMember(HfMember member, File file) throws Exception {
+        HfMember hfMember = hfMemberDao.get(member.getId());
+        if (hfMember == null) {
+            throw new BizException("商户不存在请核对");
+        }
+
+        Integer tenantId = member.getTenantId();
+        
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        }
+        
+        EnterpriseUser enterpriseUser = new EnterpriseUser();
+        enterpriseUser.setAddress(member.getAddress());
+        enterpriseUser.setAreaCode(member.getAreaCode());
+        enterpriseUser.setAttachFile(file);
+        enterpriseUser.setBankAcctType(member.getBankAcctType());
+        enterpriseUser.setBankCode(member.getBankCode());
+        enterpriseUser.setBusinessScope(member.getBusinessScope());
+        enterpriseUser.setCardName(member.getCardName());
+        enterpriseUser.setCardNo(member.getCardNo());
+        enterpriseUser.setLegalCertId(member.getLegalCertId());
+        enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
+        enterpriseUser.setLegalMp(member.getLegalMp());
+        enterpriseUser.setLegalPerson(member.getLegalPerson());
+        enterpriseUser.setMemberId(member.getMemberId());
+        enterpriseUser.setName(member.getName());
+        
+        if(StringUtils.equals(env, "prod")){
+            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_prod);
+        }else {
+            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_test);
+        }
+        
+        enterpriseUser.setProvCode(member.getProvCode());
+        enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
+        enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
+        
+        corpMemberService.update(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+
+        Date nowDate = new Date();
+        member.setUpdateTime(nowDate);
+        member.setStatus("pending");
+        if (update(member) <= 0) {
+            throw new BizException("更新商户信息失败,请重试");
+        }
+        
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean mergeSettleAccount(String memberId, AccountInfo accountInfo) throws Exception {
+        HfMember hfMember = hfMemberDao.getByMemberId(memberId);
+        if (!hfMember.getStatus().equals("succeeded")) {
+            throw new BizException("商户审核通过,才能绑定结算卡");
+        }
+        hfMember.setCardNo(accountInfo.getCardId());
+        hfMember.setBankCode(accountInfo.getBankCode());
+        hfMember.setBankAcctType(accountInfo.getBankAcctType());
+        hfMember.setCardName(accountInfo.getCardName());
+        
+        Integer tenantId = hfMember.getTenantId();
+        
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        }
+
+        //删除结算账户
+        if (StringUtils.isNotBlank(hfMember.getSettleAccountId())) {
+            settleAccountService.delete(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), memberId, hfMember.getSettleAccountId());
+        }
+
+        //创建结算账户
+        String settleAccountId = settleAccountService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), accountInfo);
+
+        hfMember.setSettleAccountId(settleAccountId);
+        if (hfMemberDao.update(hfMember) <= 0) {
+            throw new BizException("绑卡失败,请重试");
+        }
+        return true;
+    }
+}

+ 0 - 144
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberSserviceImpl.java

@@ -1,144 +0,0 @@
-package com.ym.mec.biz.service.impl;
-
-import com.ym.mec.biz.dal.dao.HfMemberDao;
-import com.ym.mec.biz.dal.entity.HfMember;
-import com.ym.mec.biz.service.HfMemberService;
-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.thirdparty.adapay.CorpMember;
-import com.ym.mec.thirdparty.adapay.SettleAccount;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.File;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-@Service
-public class HfMemberSserviceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
-    @Autowired
-    private HfMemberDao hfMemberDao;
-
-    @Override
-    public BaseDAO<Integer, HfMember> getDAO() {
-        return hfMemberDao;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> createMember(HfMember member, File file) throws Exception {
-        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId());
-        if (hasMember != null) {
-            throw new BizException("商户号不能与已有商户相同,请核查");
-        }
-        hasMember = hfMemberDao.getByName(member.getName());
-        if (hasMember != null) {
-            throw new BizException("公司名与已有公司名相同,请核查");
-        }
-
-        Date nowDate = new Date();
-        member.setCreateTime(nowDate);
-        member.setUpdateTime(nowDate);
-        member.setStatus("pending");
-        insert(member);
-
-        HashMap<String, Object> memberParams = new HashMap<>();
-        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
-        memberParams.put("member_id", member.getMemberId());
-        memberParams.put("name", member.getName());
-        memberParams.put("prov_code", member.getProvCode());
-        memberParams.put("area_code", member.getAreaCode());
-        memberParams.put("social_credit_code", member.getSocialCreditCode());
-        memberParams.put("social_credit_code_expires", member.getSocialCreditCodeExpires());
-        memberParams.put("business_scope", member.getBusinessScope());
-        memberParams.put("legal_person", member.getLegalPerson());
-        memberParams.put("legal_cert_id", member.getLegalCertId());
-        memberParams.put("legal_cert_id_expires", member.getLegalCertIdExpires());
-        memberParams.put("legal_mp", member.getLegalMp());
-        memberParams.put("address", member.getAddress());
-        memberParams.put("zip_code", member.getZipCode());
-        memberParams.put("bank_code", member.getBankCode());
-        memberParams.put("bank_acct_type", "1");
-        memberParams.put("card_no", member.getCardNo());
-        memberParams.put("card_name", member.getName());
-        return CorpMember.executeCreateMember(memberParams, file);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> updateMember(HfMember member, File file) throws Exception {
-        HfMember hfMember = hfMemberDao.get(member.getId());
-        if (hfMember == null) {
-            throw new BizException("商户不存在请核对");
-        }
-
-        if (!hfMember.getStatus().equals("failed")) {
-            throw new BizException("商户不是审核失败状态不能修改");
-        }
-
-        Date nowDate = new Date();
-        member.setUpdateTime(nowDate);
-        member.setStatus("pending");
-        if (update(member) <= 0) {
-            throw new BizException("更新商户信息失败,请重试");
-        }
-        HashMap<String, Object> memberParams = new HashMap<>();
-        memberParams.put("order_no", "corp_mem_" + System.currentTimeMillis());
-        memberParams.put("member_id", member.getMemberId());
-        memberParams.put("name", member.getName());
-        memberParams.put("prov_code", member.getProvCode());
-        memberParams.put("area_code", member.getAreaCode());
-        memberParams.put("social_credit_code", member.getSocialCreditCode());
-        memberParams.put("social_credit_code_expires", member.getSocialCreditCodeExpires());
-        memberParams.put("business_scope", member.getBusinessScope());
-        memberParams.put("legal_person", member.getLegalPerson());
-        memberParams.put("legal_cert_id", member.getLegalCertId());
-        memberParams.put("legal_cert_id_expires", member.getLegalCertIdExpires());
-        memberParams.put("legal_mp", member.getLegalMp());
-        memberParams.put("address", member.getAddress());
-        memberParams.put("zip_code", member.getZipCode());
-        memberParams.put("bank_code", member.getBankCode());
-        memberParams.put("bank_acct_type", "1");
-        memberParams.put("card_no", member.getCardNo());
-        memberParams.put("card_name", member.getName());
-        return CorpMember.executeCreateMember(memberParams, file);
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> createSettleAccount(String memberId, String cardNo, String bankCode) throws Exception {
-        HfMember hfMember = hfMemberDao.getByMemberId(memberId);
-        if (!hfMember.getStatus().equals("succeeded")) {
-            throw new BizException("商户审核通过,才能绑定结算卡");
-        }
-        hfMember.setCardNo(cardNo);
-        hfMember.setBankCode(bankCode);
-
-        //删除结算账户
-        if (StringUtils.isNotBlank(hfMember.getSettleAccountId())) {
-            SettleAccount.executeDeleteSettleAccount(hfMember.getSettleAccountId(), memberId);
-        }
-
-        Map<String, Object> accountInfo = new HashMap<String, Object>();
-        accountInfo.put("card_id", cardNo);
-        accountInfo.put("card_name", hfMember.getName());
-        accountInfo.put("tel_no", hfMember.getLegalMp());
-        accountInfo.put("bank_code", bankCode);
-        accountInfo.put("bank_acct_type", "1");
-        accountInfo.put("prov_code", hfMember.getProvCode());
-        accountInfo.put("area_code", hfMember.getAreaCode());
-
-        //创建结算账户
-        Map<String, Object> objectMap = SettleAccount.executeCreateSettleAccount(memberId, accountInfo);
-
-        hfMember.setSettleAccountId(objectMap.get("id").toString());
-        if (hfMemberDao.update(hfMember) <= 0) {
-            throw new BizException("绑卡失败,请重试");
-        }
-        return objectMap;
-    }
-}

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.service.impl;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.HfMerchantConfigDao;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.adapay.AdapayInit;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+@Service
+public class HfMerchantConfigServiceImpl extends BaseServiceImpl<Integer, HfMerchantConfig>  implements HfMerchantConfigService,InitializingBean {
+	
+	@Autowired
+	private HfMerchantConfigDao hfMerchantConfigDao;
+
+	@Override
+	public BaseDAO<Integer, HfMerchantConfig> getDAO() {
+		return hfMerchantConfigDao;
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		AdapayInit adapayInit = AdapayInit.getInstance(false, true);
+		adapayInit.initWithMerConfig(hfMerchantConfigDao.findAll(null));
+	}
+
+	@Override
+	public HfMerchantConfig queryByTenantId(Integer tenantId) {
+		return hfMerchantConfigDao.queryByTenantId(tenantId);
+	}
+	
+}

+ 85 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -1,15 +1,84 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.MEMBER;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiPredicate;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDate;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dao.ActivityUserMapperDao;
+import com.ym.mec.biz.dal.dao.MemberRankPrivilegesDao;
+import com.ym.mec.biz.dal.dao.MemberRankSettingDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TempBuyFreeLiveTheoryCourseDao;
+import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampUserRelationDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
 import com.ym.mec.biz.dal.dto.Cloud2022ActivityDto;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
-import com.ym.mec.biz.dal.dto.RedisKeyConstant;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.dal.entity.ActivityUserMapper;
+import com.ym.mec.biz.dal.entity.CloudCoachPaymentProgram;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
+import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentCloudCoachPaymentDetails;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.TempBuyFreeLiveTheoryCourse;
+import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.CouponDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.service.CloudCoachPaymentProgramService;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.LiveGoodsService;
+import com.ym.mec.biz.service.MemberFeeSettingService;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.StudentCloudCoachPaymentDetailsService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserCashAccountDetailService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -17,30 +86,11 @@ 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.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.LocalDate;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiPredicate;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.CouponDetailTypeEnum.MEMBER;
 
 @Service
 public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, MemberRankSetting> implements MemberRankSettingService {
@@ -95,6 +145,9 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     private TempLittleArtistTrainingCampUserRelationDao tempLittleArtistTrainingCampUserRelationDao;
     @Autowired
     private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -507,7 +560,13 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     //检查订单在第三方是否支付成功
     private void checkOrder(StudentPaymentOrder orderByOrderNo) throws Exception {
         if (StringUtils.isNotBlank(orderByOrderNo.getTransNo())) {
-            Map<String, Object> payment = Payment.queryPayment(orderByOrderNo.getTransNo());
+
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId());
+            if(hfMerchantConfig == null){
+            	throw new BizException("机构[{}]汇付商户信息找不到", orderByOrderNo.getTenantId());
+            }
+            
+            Map<String, Object> payment = Payment.queryPayment(orderByOrderNo.getTransNo(), hfMerchantConfig.getMerKey());
             String status = (String) payment.get("status");
             if (status.equals("succeeded")) {
                 throw new BizException("该订单已经支付成功,无法关闭。");

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -947,7 +947,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
@@ -1078,7 +1078,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
                 "续费",
                 "乐团续费",
@@ -1353,7 +1353,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 70 - 147
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -1,39 +1,54 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantPaymentOrderService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.DigestUtils;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.TimeUnit;
-import java.util.function.BiPredicate;
-import java.util.function.Consumer;
-import java.util.function.Function;
 
 /**
  * @author hgw
@@ -49,6 +64,10 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private TenantPaymentOrderService tenantPaymentOrderService;
     @Autowired
     private TenantOrderRecordService tenantOrderRecordService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+    
     @Autowired
     private RedissonClient redissonClient;
     @Autowired
@@ -62,9 +81,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private static final BiPredicate<Object, DealStatusEnum> predicate = (o, s) -> Objects.nonNull(o) && !DealStatusEnum.ING.equals(s);
 
     @Override
-    public Map<String, Object> executePayment(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
-        PaymentParam payParam = new PaymentParam(amount, orderNo, payChannel, returnUrl,
-                orderSubject, orderBody, sign, code, platform);
+    public Map<String, Object> executePayment(PaymentParam payParam) throws Exception {
         log.info("executePayment >>>>> {}", JSON.toJSONString(payParam));
         if (payParam.getAmount() == null) {
             throw new Exception("PaymentParam query is null");
@@ -74,13 +91,11 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         //返回值
         Map<String, Object> payment;
 
-        if (WrapperUtil.checkStr(platform, tenantPlatform)) {
+        if (WrapperUtil.checkStr(payParam.getPlatform(), tenantPlatform)) {
             //tenant 机构开通、续费付款、 cloudTeacherOrder 团练宝激活支付、tenantRecharge 机构充值
             payment = tenantPlatformOrder(payParam);
             //主动延迟检查订单
             delayCheckTenant();
-        } else if (platform.equals("teacher")) {
-            payment = teacher(payParam);
         } else {
             //如果以上操作都没有 则应该是这一个,因为老代码就是这样写的。
             payment = student(payParam);
@@ -90,13 +105,21 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     }
 
     private void checkSing(PaymentParam param) {
+        
+        //查询商户支付账户
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(param.getTenantId());
+        if(hfMerchantConfig == null){
+        	throw new BizException("请配置机构的汇付商户信息");
+        }
         Map<String, Object> signParams = new LinkedHashMap<>();
-        signParams.put("appId", ConfigInit.appId);
+        signParams.put("appId", hfMerchantConfig.getAppId());
         signParams.put("amount", param.getAmount().setScale(2, RoundingMode.HALF_UP));
         signParams.put("orderNo", param.getOrderNo());
+        signParams.put("notifyUrl", param.getNotifyUrl());
+        signParams.put("returnUrl", param.getReturnUrl());
         signParams.put("orderSubject", param.getOrderSubject());
         signParams.put("orderBody", param.getOrderBody());
-        signParams.put("wxAppId", ConfigInit.wxAppId);
+        signParams.put("wxAppId", hfMerchantConfig.getWxAppId());
         String originalStr = JSONObject.toJSONString(signParams);
         String newSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
         if (!newSign.equals(param.getSign())) {
@@ -110,7 +133,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         //查询订单
         TenantOrderRecord tenantOrderRecord = tenantOrderRecordService.getOne(new WrapperUtil<TenantOrderRecord>()
                 .hasEq("order_no_", payParam.getOrderNo()).queryWrapper());
-        if (Objects.isNull(tenantOrderRecord)) {
+        if (Objects.isNull(tenantOrderRecord) || tenantOrderRecord.getTenantId().intValue() != payParam.getTenantId()) {
             throw new BizException("订单不存在");
         }
         if (tenantOrderRecord.getOrderState() != 0) {
@@ -118,7 +141,6 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         }
         //获取支付数据
         Map<String, Object> payment;
-        payParam.setTenantId(tenantOrderRecord.getTenantId());
         try {
             payment = checkOrderAndGetParam(payParam,
                     tenantOrderRecord,
@@ -159,10 +181,10 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private Map<String, Object> student(PaymentParam payParam) throws Exception {
         Map<String, Object> payment;
         StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
-        if (Objects.isNull(studentPaymentOrder)) {
+        if (Objects.isNull(studentPaymentOrder) || studentPaymentOrder.getTenantId().intValue() != payParam.getTenantId()) {
             throw new BizException("订单不存在");
         }
-        payParam.setTenantId(studentPaymentOrder.getTenantId());
+        
         payment = checkOrderAndGetParam(payParam,
                 studentPaymentOrder,
                 StudentPaymentOrder::getStatus,
@@ -185,12 +207,20 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         Date createTime = dateFunc.apply(clazz);
         //校验订单是否超时
         String timeExpire = checkOrderTimeOut(createTime);
+        
+        //查询商户支付账户
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payParam.getTenantId());
+        if(hfMerchantConfig == null){
+        	throw new BizException("请配置机构的汇付商户信息");
+        }
+        
         //初始化支付数据
-        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz);
+        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz, hfMerchantConfig.getPlatformPayeeMemberId());
         paymentParams.put("time_expire", timeExpire);
-        paymentParams.put("expend", getExpend(payParam));
+        paymentParams.put("expend", getExpend(hfMerchantConfig, payParam));
+        paymentParams.put("notify_url", payParam.getReturnUrl());
         //向第三方发起支付,获取第三方的支付的信息
-        Map<String, Object> payment = Payment.executePayment(paymentParams);
+        Map<String, Object> payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
         String transNo = (String) payment.get("id");
         //修改流水
@@ -223,12 +253,12 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         action.accept(clazz);
     }
 
-    private Map<String, Object> getExpend(PaymentParam payParam) throws Exception {
+    private Map<String, Object> getExpend(HfMerchantConfig hfMerchantConfig, PaymentParam payParam) throws Exception {
         Map<String, Object> expendParams = new HashMap<>(5);
         String openId = "";
         if (payParam.getPayChannel().equals("wx_pub")) {
             //微信支付则获取openId
-            openId = getOpenId(payParam.getCode());
+            openId = getOpenId(hfMerchantConfig, payParam.getCode());
         }
         expendParams.put("open_id", openId);
         expendParams.put("is_raw", "1");
@@ -237,12 +267,12 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         return expendParams;
     }
 
-    private String getOpenId(String code) throws Exception {
+    private String getOpenId(HfMerchantConfig hfMerchantConfig, String code) throws Exception {
         String openId;
         if (code == null || code.isEmpty()) {
             throw new BizException("微信支付请先授权");
         }
-        String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
+        String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, hfMerchantConfig.getWxAppId(), hfMerchantConfig.getWxAppSecret(), code);
         Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
         if (!weChatRes.containsKey("openid")) {
             throw new BizException("授权失败,请重新授权");
@@ -251,9 +281,8 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         return openId;
     }
 
-    private <T> Map<String, Object> getPaymentParam(PaymentParam payParam, T clazz) {
+    private <T> Map<String, Object> getPaymentParam(PaymentParam payParam, T clazz, String platformAccount) {
         Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
         paymentParams.put("order_no", payParam.getOrderNo());
         paymentParams.put("pay_channel", payParam.getPayChannel());
         paymentParams.put("pay_amt", payParam.getAmount().setScale(2, RoundingMode.HALF_UP));
@@ -293,7 +322,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     	        		throw new BizException("分部[{}]没有设置收款账号", config.getParanValue());
     	        	}*/
 
-                    String platformAccount = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
+                    //String platformAccount = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
 
                     if (StringUtils.isBlank(platformAccount)) {
                         throw new BizException("平台收款账户查询失败");
@@ -368,111 +397,5 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         });
     }
 
-    static class PaymentParam {
-        private BigDecimal amount;
-        private String orderNo;
-        private String payChannel;
-        private String returnUrl;
-        private String orderSubject;
-        private String orderBody;
-        private String sign;
-        private String code;
-        private String platform;
-        private Integer tenantId;
-
-        PaymentParam(BigDecimal amount, String orderNo, String payChannel, String returnUrl, String orderSubject,
-                     String orderBody, String sign, String code, String platform) {
-            this.amount = amount;
-            this.orderNo = orderNo;
-            this.payChannel = payChannel;
-            this.returnUrl = returnUrl;
-            this.orderSubject = orderSubject;
-            this.orderBody = orderBody;
-            this.sign = sign;
-            this.code = code;
-            this.platform = platform;
-        }
-
-        public BigDecimal getAmount() {
-            return amount;
-        }
-
-        public void setAmount(BigDecimal amount) {
-            this.amount = amount;
-        }
-
-        public String getOrderNo() {
-            return orderNo;
-        }
-
-        public void setOrderNo(String orderNo) {
-            this.orderNo = orderNo;
-        }
-
-        public String getPayChannel() {
-            return payChannel;
-        }
-
-        public void setPayChannel(String payChannel) {
-            this.payChannel = payChannel;
-        }
-
-        public String getReturnUrl() {
-            return returnUrl;
-        }
-
-        public void setReturnUrl(String returnUrl) {
-            this.returnUrl = returnUrl;
-        }
-
-        public String getOrderSubject() {
-            return orderSubject;
-        }
-
-        public void setOrderSubject(String orderSubject) {
-            this.orderSubject = orderSubject;
-        }
-
-        public String getOrderBody() {
-            return orderBody;
-        }
-
-        public void setOrderBody(String orderBody) {
-            this.orderBody = orderBody;
-        }
-
-        public String getSign() {
-            return sign;
-        }
-
-        public void setSign(String sign) {
-            this.sign = sign;
-        }
-
-        public String getCode() {
-            return code;
-        }
-
-        public void setCode(String code) {
-            this.code = code;
-        }
-
-        public String getPlatform() {
-            return platform;
-        }
-
-        public void setPlatform(String platform) {
-            this.platform = platform;
-        }
-
-        public Integer getTenantId() {
-            return tenantId;
-        }
-
-        public void setTenantId(Integer tenantId) {
-            this.tenantId = tenantId;
-        }
-    }
-
 }
 

+ 25 - 39
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -36,6 +36,7 @@ import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.SellOrderService;
 import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
@@ -46,6 +47,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.date.DateUtil;
 
@@ -64,6 +66,9 @@ public class PayServiceImpl implements PayService {
     private GoodsService goodsService;
     
     @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
     private SysPaymentConfigService sysPaymentConfigService;
@@ -89,17 +94,16 @@ public class PayServiceImpl implements PayService {
         
         Integer tenantId = studentPaymentOrder.getTenantId();
         
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        }
+        
         if(tenantId != 1){//非大雅机构
         	
-        	SysPaymentConfig sysPaymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
-        	
-        	if(sysPaymentConfig == null || StringUtils.isBlank(sysPaymentConfig.getHfMerNo())){
-        		throw new BizException("分部[{}]没有设置收款账号", organId);
-        	}
-        	
         	Date date = new Date();
         	
-        	String merNo = sysPaymentConfig.getHfMerNo();
+        	String merNo = "0";
         	
         	StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
             studentPaymentRouteOrder.setOrderNo(orderNo);
@@ -115,7 +119,7 @@ public class PayServiceImpl implements PayService {
             studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
             
             Map<String, Object> unionPay = new HashMap<>();
-            Map<String, Object> payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
             
             PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
 
@@ -129,8 +133,8 @@ public class PayServiceImpl implements PayService {
 		Date date = new Date();
         
         //如果当前是买的小课/网管课
-		if (studentPaymentOrder != null && studentPaymentOrder.getType() == OrderTypeEnum.SMALL_CLASS_TO_BUY || studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_BUY
-				|| studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_RENEW) {
+		if (studentPaymentOrder != null && (studentPaymentOrder.getType() == OrderTypeEnum.SMALL_CLASS_TO_BUY || studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_BUY
+				|| studentPaymentOrder.getType() == OrderTypeEnum.PRACTICE_GROUP_RENEW)) {
 			
 			//忽略的分部
 			List<Integer> ignoreOrganList = Arrays.asList(4);
@@ -162,7 +166,7 @@ public class PayServiceImpl implements PayService {
 	            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
 	            
 	            Map<String, Object> unionPay = new HashMap<>();
-	            Map<String, Object> payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+	            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
 	            
 	            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
 
@@ -416,7 +420,7 @@ public class PayServiceImpl implements PayService {
         	routeScaleDtos.add(routeScaleDtoForGoodsSell);
         }*/
         
-        Map<String, Object> map = getPayRoute(amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos, subCashAmount);
+        Map<String, Object> map = getPayRoute(hfMerchantConfig, amount, balanceAmount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, routeScaleDtos, subCashAmount);
         
 		if (routeScaleDtoForGoodsSell != null) {
 			String routingMerNos = (String) map.get("routingMerNos");
@@ -439,38 +443,20 @@ public class PayServiceImpl implements PayService {
 	public Map<String, Object> getPayToPlatformMap(PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
     	
-    	/*SysConfig config = sysConfigDao.findByParamName("platform_collection_organ");
-        if (Objects.isNull(config)) {
-            throw new BizException("平台收款账户没有设置[platform_collection_organ]");
-        }
-    	
-    	SysPaymentConfig sysPaymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(Integer.parseInt(config.getParanValue()));
-    	
-    	if(sysPaymentConfig == null || StringUtils.isBlank(sysPaymentConfig.getHfMerNo())){
-    		throw new BizException("分部[{}]没有设置收款账号", config.getParanValue());
-    	}
-    	
-    	String payeeMerNo = sysPaymentConfig.getHfMerNo();*/
-    	
-    	String payeeMerNo = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
-    	
-    	if(StringUtils.isBlank(payeeMerNo)){
-    		throw new BizException("平台收款账户查询失败");
-    	}
-    	
-        Map<String, Object> payMap = null;
+    	Integer tenantId = -1;
         
-    	if (paymentChannel.equals(PaymentChannelEnum.YQPAY)) {
-            payMap = YqPayUtil.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody, YqPayUtil.merNo, payeeMerNo);
-        } else {
-            payMap = Payment.getPayMap(amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
+    	
+        Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
         
         Map<String, Object> unionPay = new HashMap<>();
         unionPay.put("orderNo", orderNo);
         unionPay.put("type", paymentChannel.getCode());
         unionPay.put("payMap", payMap);
-        unionPay.put("routingMerNos", payeeMerNo);
+        //unionPay.put("routingMerNos", payeeMerNo);
         
 		return unionPay;
 	}
@@ -688,7 +674,7 @@ public class PayServiceImpl implements PayService {
         return amount.add(totalHasReceipt).compareTo(totalMaxReceipt) >= 0;
     }
 
-    private Map<String, Object> getPayRoute(BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, List<RouteScaleDto> routeScaleDtos, BigDecimal shareAmount) throws Exception {
+    private Map<String, Object> getPayRoute(HfMerchantConfig hfMerchantConfig, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody, List<RouteScaleDto> routeScaleDtos, BigDecimal shareAmount) throws Exception {
         Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
 
         //合并同账号的数据
@@ -794,7 +780,7 @@ public class PayServiceImpl implements PayService {
             }
             payMap = YqPayUtil.getPayMap(amount.add(shareAmount), orderNo, notifyUrl, returnUrl, orderSubject, orderBody, YqPayUtil.merNo, tempRoutingList);
         } else {
-            payMap = Payment.getPayMap(amount.add(shareAmount), orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            payMap = Payment.getPayMap(hfMerchantConfig, amount.add(shareAmount), orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
         }
         String routingMerNos = String.join(",", routingMerNoSet);
 

+ 7 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -2638,7 +2638,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/callback",
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3105,7 +3105,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/notify",
+                    baseApiUrl + "/api-student/studentOrder/callback",
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3601,7 +3601,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 newOrder.getActualAmount(),
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -3679,7 +3679,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             if (list.size() > 0) {
                 StudentPaymentOrder applyOrder = list.get(list.size() - 1);
                 // 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
                 if (payStatus == PayStatus.SUCCESSED) {
                     throw new BizException("订单已支付成功,请勿重复支付");
                 }
@@ -4434,7 +4434,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (list.size() > 0) {
             StudentPaymentOrder applyOrder = list.get(list.size() - 1);
             // 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
             if (payStatus == PayStatus.SUCCESSED) {
                 throw new BizException("订单已支付成功,请勿重复支付");
             }/*else if(payStatus == PayStatus.PAYING){
@@ -4562,7 +4562,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -4765,7 +4765,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 activityFee,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -328,7 +328,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             if (oldOrder != null) {
                 
                 // 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(oldOrder.getPaymentChannel(), oldOrder.getOrderNo(), oldOrder.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(oldOrder);
                 if(payStatus != PayStatus.FAILED){
                 	if(payStatus == PayStatus.SUCCESSED){
                 		throw new BizException("订单已支付成功,请勿重复支付");
@@ -414,7 +414,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java

@@ -179,7 +179,7 @@ public class StudentInstrumentServiceImpl extends BaseServiceImpl<Long, StudentI
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 43 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -27,6 +27,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yqpay.*;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -115,6 +116,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private TenantConfigService tenantConfigService;
     @Autowired
     private GoodsProcurementDao goodsProcurementDao;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -174,7 +178,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return notifyMap;
         }
 
-        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), baseApiUrl + "/api-student/studentOrder/notify", baseApiUrl
+        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl
                 + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getOrganId(), payReceiver);
 
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
@@ -277,6 +281,10 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (payingOrders.size() == 0) {
             return;
         }
+        
+        Map<Integer,HfMerchantConfig> payConfigMap = new HashMap<Integer, HfMerchantConfig>();
+        HfMerchantConfig hfMerchantConfig = null;
+        
         List<String> orderNoList = new ArrayList<String>();
 
         for (StudentPaymentOrder payingOrder : payingOrders) {
@@ -292,7 +300,17 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             if (DateUtil.minutesBetween(payingOrder.getCreateTime(), date) < 10) {
                 continue;
             }
-            Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo());
+            
+            hfMerchantConfig = payConfigMap.get(payingOrder.getTenantId());
+            if(hfMerchantConfig == null){
+            	hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId());
+                if(hfMerchantConfig == null){
+                	throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
+                }
+            	payConfigMap.put(payingOrder.getTenantId(), hfMerchantConfig);
+            }
+            
+            Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
             LOGGER.info("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
 
             Map<String, String> rpMap = new HashMap<>();
@@ -397,8 +415,18 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return true;
         }
         Date date = new Date();
+        
+        HfMerchantConfig hfMerchantConfig = null;
+        
         List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
         for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+        	if(hfMerchantConfig == null){
+        		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(routeOrder.getTenantId());
+        	}
+            if(hfMerchantConfig == null){
+            	throw new BizException("机构[{}]汇付商户信息找不到", routeOrder.getTenantId());
+            }
+            
             Map<String, Object> divMember = new HashMap<>();
             divMember.put("member_id", routeOrder.getMerNo());//分佣账户
             divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
@@ -415,7 +443,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             confirm.put("confirm_amt", routeOrder.getRouteAmount());
             confirm.put("div_members", divMembers);
             try {
-                Map<String, Object> map = Payment.createConfirm(confirm);
+                Map<String, Object> map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
                 LOGGER.info("分账信息返回:{}", map);
                 routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
                 routeOrder.setUpdateTime(date);
@@ -675,12 +703,21 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    public PayStatus queryPayStatus(String paymentChannel, String orderNo, String transNo) throws Exception {
+    public PayStatus queryPayStatus(StudentPaymentOrder studentPaymentOrder) throws Exception {
+    	
+    	String paymentChannel = studentPaymentOrder.getPaymentChannel();
+    	String orderNo = studentPaymentOrder.getOrderNo();
+    	String transNo = studentPaymentOrder.getTransNo();
+    	
         if (StringUtils.isBlank(transNo)) {
             return PayStatus.FAILED;
         }
         if (StringUtils.equals(paymentChannel, "ADAPAY")) {
-            Map<String, Object> payment = Payment.queryPayment(transNo);
+        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId());
+            if(hfMerchantConfig == null){
+            	throw new BizException("机构[{}]汇付商户信息找不到", studentPaymentOrder.getTenantId());
+            }
+            Map<String, Object> payment = Payment.queryPayment(transNo, hfMerchantConfig.getMerKey());
             String status = (String) payment.get("status");
             if (status.equals("succeeded")) {
                 return PayStatus.SUCCESSED;
@@ -789,7 +826,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult checkRepeatPay(StudentPaymentOrder order, Boolean repeatPay) throws Exception {
         // 查询订单状态
-        PayStatus payStatus = this.queryPayStatus(order.getPaymentChannel(), order.getOrderNo(), order.getTransNo());
+        PayStatus payStatus = this.queryPayStatus(order);
         if (payStatus == PayStatus.SUCCESSED) {
             throw new BizException("订单已支付成功,请勿重复支付");
         }

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java

@@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.dao.StudentRechargeDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.entity.StudentRecharge;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -20,6 +20,7 @@ import com.ym.mec.biz.dal.enums.PlatformCashAccountStatusEnum;
 import com.ym.mec.biz.dal.enums.TransTypeEnum;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.StudentRechargeService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysUserCashAccountDetailService;
 import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -41,6 +42,9 @@ public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentR
 
 	@Autowired
 	private PayService payService;
+	
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
 	@Autowired
 	private IdGeneratorService idGeneratorService;
@@ -73,9 +77,11 @@ public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentR
 		studentRecharge.setTransNo(null);
 		studentRecharge.setOrderNo(idGeneratorService.generatorId("payment") + "");
 		studentRechargeDao.insert(studentRecharge);
+		
+        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 
 		try {
-			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), "https://pay.dayaedu.com/api/yqpay/notify", "http://dev.dayaedu.com", "充值",
+			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl, "充值",
 					"充值",userId,null);
 		} catch (Exception e) {
 			throw new BizException("调用支付接口出错", e);

+ 5 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -191,7 +191,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             } else if (orderByOrderNo.getStatus() == ING) {
 
                 // 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(orderByOrderNo.getPaymentChannel(), orderByOrderNo.getOrderNo(), orderByOrderNo.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(orderByOrderNo);
                 if (payStatus != PayStatus.FAILED) {
                     if (payStatus == PayStatus.SUCCESSED) {
                         throw new BizException("订单已支付成功,请勿重复支付");
@@ -465,7 +465,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -584,7 +584,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -803,7 +803,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",
@@ -1058,7 +1058,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",

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

@@ -203,7 +203,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
             if (studentPaymentOrder != null && studentPaymentOrder.getStatus() == DealStatusEnum.ING) {
                 // 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder.getPaymentChannel(), studentPaymentOrder.getOrderNo(), studentPaymentOrder.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(studentPaymentOrder);
                 if (payStatus != PayStatus.FAILED) {
                     if (payStatus == PayStatus.SUCCESSED) {
                         throw new BizException("订单已支付成功,请勿重复支付");
@@ -427,7 +427,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "声部更换",
                 "声部更换",

+ 58 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -1,5 +1,25 @@
 package com.ym.mec.biz.service.impl;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDateTime;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -8,31 +28,41 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.TenantOrderRecordDao;
 import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.PlatformServe;
+import com.ym.mec.biz.dal.entity.PlatformServeDetail;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
+import com.ym.mec.biz.dal.entity.TenantProductInfo;
+import com.ym.mec.biz.dal.entity.TenantProxyDividend;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.PeriodEnum;
+import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.PlatformServeDetailService;
+import com.ym.mec.biz.service.PlatformServeService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.TenantAssetsInfoService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantInfoService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantProductInfoService;
+import com.ym.mec.biz.service.TenantProxyDividendService;
+import com.ym.mec.biz.service.TenantProxyUserRelationService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.LocalDateTime;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表服务实现类
@@ -68,6 +98,9 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     private TenantProxyDividendService tenantProxyDividendService;
     @Autowired
     private TenantProxyUserRelationService tenantProxyUserRelationService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     //订单不存在
     private static final String PAYMENT_ID_NOT_EXISTS = "payment_id_not_exists";
@@ -309,7 +342,13 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
             Map<String, Object> payment;
             try {
-                payment = Payment.queryPayment(orderRecord.getTransNo());
+                Integer tenantId = -1;
+                HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+                if(hfMerchantConfig == null){
+                	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+                }
+                
+                payment = Payment.queryPayment(orderRecord.getTransNo(), hfMerchantConfig.getMerKey());
                 log.info("    >>>>> checkTenantOrder  payment start");
                 String status = (String) payment.get("status");
                 //判断状态是成功还是失败

+ 17 - 213
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java

@@ -10,10 +10,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.thirdparty.adapay.ConfigInit;
-import com.ym.mec.thirdparty.adapay.Payment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,13 +19,23 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TenantEntryActivitiesDao;
+import com.ym.mec.biz.dal.dao.TenantPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransType;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.TenantEntryActivities;
 import com.ym.mec.biz.dal.entity.TenantEntryActivities.SuitableUser;
+import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder.TenantPaymentType;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.TenantPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.PayService;
 import com.ym.mec.biz.service.SysTenantAccountService;
 import com.ym.mec.biz.service.TenantPaymentOrderService;
@@ -38,6 +44,9 @@ 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.ConfigInit;
+import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.thirdparty.yqpay.RsqMsg;
 import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
@@ -75,6 +84,9 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
     private YqPayFeignService yqPayFeignService;
     @Autowired
     private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Override
     public BaseDAO<Long, TenantPaymentOrder> getDAO() {
@@ -170,7 +182,7 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
                     tenantPaymentOrder.getExpectAmount(),
                     BigDecimal.ZERO,
                     tenantPaymentOrder.getOrderNo(),
-                    baseApiUrl + "/api-teacher/teacherOrder/notify",
+                    baseApiUrl + "/api-teacher/teacherOrder/callback",
                     baseApiUrl + "/api-teacher/teacherOrder/paymentResult?orderNo=" + tenantPaymentOrder.getOrderNo(),
                     "商户入驻",
                     "商户充值",
@@ -191,214 +203,6 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
     }
 
     @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(), "");
-
-            this.confirmOrder(tenantPaymentOrder);
-        } else {
-
-        }
-
-        return true;
-    }
-
-    public Boolean confirmOrder(TenantPaymentOrder order) {
-        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
-        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-            Map<String, Object> divMember = new HashMap<>();
-            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
-            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
-            divMember.put("fee_flag", "Y");
-            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
-                divMember.put("member_id", 0);
-            }
-            List<Map<String, Object>> divMembers = new ArrayList<>();
-            divMembers.add(divMember);
-
-            Map<String, Object> confirm = new HashMap<>();
-            confirm.put("payment_id", order.getTransNo());
-            confirm.put("order_no", idGeneratorService.generatorId("payment"));
-            confirm.put("confirm_amt", routeOrder.getRouteAmount());
-            confirm.put("div_members", divMembers);
-            try {
-                Payment.createConfirm(confirm);
-            } catch (Exception e) {
-                continue;
-            }
-        }
-        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);
     }

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -2714,7 +2714,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/callback",
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "vip课购买",
                 vipGroup.getName(),

+ 115 - 0
mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
+<mapper namespace="com.ym.mec.biz.dal.dao.HfMerchantConfigDao">
+
+	<resultMap type="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig"
+		id="HfMerchantConfig">
+		<result column="id_" property="id" />
+		<result column="app_id_" property="appId" />
+		<result column="mer_key_" property="merKey" />
+		<result column="api_key_" property="apiKey" />
+		<result column="mock_api_key_" property="mockApiKey" />
+		<result column="rsa_private_key_" property="rsaPrivateKey" />
+		<result column="rsa_public_key_" property="rsaPublicKey" />
+		<result column="expend_params_" property="expendParams" />
+		<result column="wx_app_id_" property="wxAppId" />
+		<result column="wx_app_secret_" property="wxAppSecret" />
+		<result column="platform_payee_member_id_" property="platformPayeeMemberId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="tenant_id_" property="tenantId" />
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="HfMerchantConfig">
+		SELECT * FROM
+		hf_merchant_config WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="HfMerchantConfig">
+		SELECT * FROM hf_merchant_config ORDER
+		BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig"
+		useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
+			AS ID FROM DUAL </selectKey> -->
+		INSERT INTO hf_merchant_config
+		(id_,app_id_,mer_key_,api_key_,mock_api_key_,rsa_private_key_,rsa_public_key_,expend_params_,wx_app_id_,wx_app_secret_,create_time_,update_time_,tenant_id_,platform_payee_member_id_)
+		VALUES(#{id},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig">
+		UPDATE hf_merchant_config
+		<set>
+			<if test="apiKey != null">
+				api_key_ = #{apiKey},
+			</if>
+			<if test="appId != null">
+				app_id_ = #{appId},
+			</if>
+			<if test="rsaPublicKey != null">
+				rsa_public_key_ = #{rsaPublicKey},
+			</if>
+			<if test="mockApiKey != null">
+				mock_api_key_ = #{mockApiKey},
+			</if>
+			<if test="expendParams != null">
+				expend_params_ = #{expendParams},
+			</if>
+			<if test="id != null">
+				id_ = #{id},
+			</if>
+			<if test="tenantId != null">
+				tenant_id_ = #{tenantId},
+			</if>
+			<if test="updateTime != null">
+				update_time_ = #{updateTime},
+			</if>
+			<if test="merKey != null">
+				mer_key_ = #{merKey},
+			</if>
+			<if test="rsaPrivateKey != null">
+				rsa_private_key_ = #{rsaPrivateKey},
+			</if>
+			<if test="platformPayeeMemberId != null">
+				platform_payee_member_id_ = #{platformPayeeMemberId},
+			</if>
+			<if test="createTime != null">
+				create_time_ = #{createTime},
+			</if>
+			<if test="wxAppId != null">
+				wx_app_id_ = #{wxAppId},
+			</if>
+			<if test="wxAppSecret != null">
+				wx_app_secret_ = #{wxAppSecret},
+			</if>
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete">
+		DELETE FROM hf_merchant_config WHERE id_ = #{id}
+	</delete>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="HfMerchantConfig" parameterType="map">
+		SELECT * FROM hf_merchant_config ORDER BY id_
+		<include refid="global.limit" />
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM hf_merchant_config
+	</select>
+	
+	<select id="queryByTenantId" resultMap="HfMerchantConfig">
+		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId}
+	</select>
+</mapper>

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java

@@ -64,7 +64,7 @@ public class RepairController extends BaseController {
             if (list.size() > 0) {
             	StudentPaymentOrder applyOrder = list.get(list.size() - 1);
             	// 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
                 if(payStatus == PayStatus.SUCCESSED){
             		throw new BizException("订单已支付成功,请勿重复支付");
             	}/*else if(payStatus == PayStatus.PAYING){

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/ReplacementInstrumentActivityController.java

@@ -171,7 +171,7 @@ public class ReplacementInstrumentActivityController extends BaseController {
         	
         	StudentPaymentOrder applyOrder = studentPaymentOrderService.getUserReplacementIngOrder(replacementInstrumentActivity.getUserId(), replacementInstrumentActivity.getId());
         	// 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
             if(payStatus == PayStatus.SUCCESSED){
         		throw new BizException("订单已支付成功,请勿重复支付");
         	}/*else if(payStatus == PayStatus.PAYING){

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/SporadicChargeInfoController.java

@@ -74,7 +74,7 @@ public class SporadicChargeInfoController extends BaseController {
             if (studentPaymentOrderList != null && studentPaymentOrderList.size() > 0) {
             	StudentPaymentOrder applyOrder = studentPaymentOrderList.get(studentPaymentOrderList.size() - 1);
             	// 查询订单状态
-                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+                PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
                 if(payStatus == PayStatus.SUCCESSED){
             		throw new BizException("订单已支付成功,请勿重复支付");
             	}

+ 150 - 55
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,30 +1,28 @@
 package com.ym.mec.student.controller;
 
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
-import com.ym.mec.biz.service.*;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.tenant.TenantContextHolder;
-import com.ym.mec.thirdparty.adapay.Payment;
-import com.ym.mec.thirdparty.yqpay.Msg;
-import com.ym.mec.util.date.DateUtil;
-import com.ym.mec.util.http.HttpUtil;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -33,15 +31,85 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletResponse;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.net.URLEncoder;
-import java.util.*;
-import java.util.stream.Collectors;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.AdapayCore;
+import com.huifu.adapay.core.util.AdapaySign;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ChildrenDayDegreeDetailDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
+import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.ReplacementInstrumentActivityDao;
+import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
+import com.ym.mec.biz.dal.dao.VipGroupActivityDao;
+import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
+import com.ym.mec.biz.dal.dto.LuckStatisDto;
+import com.ym.mec.biz.dal.dto.OrderStatisDto;
+import com.ym.mec.biz.dal.dto.PaymentParam;
+import com.ym.mec.biz.dal.dto.Practice4OrganDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupStatisDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupsDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.dto.VipBuyResultDto;
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.LuckDrawCount;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.LuckDrawCountService;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderActivityService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.SellOrderService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantPaymentOrderService;
+import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -122,6 +190,58 @@ public class StudentOrderController extends BaseController {
         return succeed(studentPaymentOrderPageInfo);
     }
 
+    @PostMapping("/callback")
+	public String callback(HttpServletRequest request) {
+		try {
+			// 验签请参data
+			String data = request.getParameter("data");
+			// 验签请参sign
+			String sign = request.getParameter("sign");
+			
+			logger.info("callback request param:{}", data);
+
+			// 验签
+			if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+				
+				JSONObject dataObj = JSON.parseObject(data);
+				
+				String transType = request.getParameter("type");
+				
+				Map<String, String> notifyMap = new HashMap<>();
+
+				switch (transType) {
+				case "payment.succeeded":// 支付成功
+
+					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"));
+					studentPaymentOrderService.updateOrder(notifyMap);
+					break;
+
+				case "payment.failed":// 支付失败
+
+					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"));
+					studentPaymentOrderService.updateOrder(notifyMap);
+
+					break;
+
+				default:
+					break;
+				}
+			} else {
+				return "验签失败";
+			}
+		} catch (Exception e) {
+			return e.getMessage();
+		}
+		
+		return "succeeded";
+	}
+
     @PostMapping("/notify")
     public Msg notify(@ModelAttribute Msg msg) throws Exception {
         logger.info(msg.toString());
@@ -287,11 +407,9 @@ 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, String platform) {
+    public Object executePayment(@RequestBody PaymentParam paymentParam) {
         try {
-            logger.info("=== === === 支付金额 {}, 订单号 {}, 支付通道 {} 订单主题 {} 订单Body {} 签名 {} Code {}, platform {}", amount, orderNo, payChannel, orderSubject, orderBody, sign, code, platform);
-            Map<String, Object> payment = orderPayOpsService.executePayment(amount, orderNo, payChannel, returnUrl, orderSubject, orderBody, sign, code, platform);
-            logger.info("=== === === 支付完成");
+            Map<String, Object> payment = orderPayOpsService.executePayment(paymentParam);
             return succeed(payment);
         } catch (Exception e) {
             return failed(e.getMessage());
@@ -372,22 +490,6 @@ public class StudentOrderController extends BaseController {
         return succeed();
     }
 
-    @GetMapping("/getOrderStatus")
-    private HttpResponseResult getOrderStatus(String transNo) throws Exception {
-
-//        if (orderId == null) {
-//            return failed("订单号必须填");
-//        }
-//        StudentPaymentOrder order = studentPaymentOrderService.get(orderId);
-//        if(order == null){
-//            return failed("订单不存在");
-//        }
-
-        Map<String, Object> payment = Payment.queryPayment(transNo);
-        return succeed(payment);
-    }
-
-
     @RequestMapping("paymentResult")
     public void paymentResult(HttpServletResponse response, String orderNo, String type) {
         try {
@@ -794,13 +896,6 @@ public class StudentOrderController extends BaseController {
         return succeed(musicGroupRegCalender);
     }
 
-    @GetMapping("confirmTeacherOrder")
-    public Object confirmOrder(String orderNo) {
-        TenantPaymentOrder tenantPaymentOrder = tenantPaymentOrderService.queryByOrderNo(orderNo);
-        tenantPaymentOrderService.confirmOrder(tenantPaymentOrder);
-        return succeed();
-    }
-
     @GetMapping("fixSellOrder")
     public HttpResponseResult<List<SellOrder>> fixSellOrder(String orderNo) {
         StudentPaymentOrder order = studentPaymentOrderService.findOrderByOrderNo(orderNo);

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/SubjectChangeController.java

@@ -51,7 +51,7 @@ public class SubjectChangeController extends BaseController {
         	
             StudentPaymentOrder applyOrder = studentPaymentOrderService.get(subjectChange.getOrderId().longValue());
         	// 查询订单状态
-            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder.getPaymentChannel(), applyOrder.getOrderNo(), applyOrder.getTransNo());
+            PayStatus payStatus = studentPaymentOrderService.queryPayStatus(applyOrder);
             if(payStatus == PayStatus.SUCCESSED){
         		throw new BizException("订单已支付成功,请勿重复支付");
         	}

+ 0 - 73
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherOrderController.java

@@ -46,79 +46,6 @@ public class TeacherOrderController extends BaseController {
 	@Autowired
 	private TenantPaymentOrderService tenantPaymentOrderService;
 
-	@PostMapping("/notify")
-	public Msg notify(@ModelAttribute Msg msg) throws Exception {
-		logger.info(msg.toString());
-		Map<String, Object> rqMap = new LinkedHashMap<String, Object>();
-		rqMap.put("code", msg.getCode());
-		rqMap.put("msg", msg.getMsg());
-		rqMap.put("responseType", msg.getResponseType());
-		rqMap.put("responseParameters", msg.getResponseParameters());
-		rqMap.put("sign", msg.getSign());
-		// boolean rs = YqPayUtil.verify(rqMap);
-		msg.setMsg("fail");
-		Map<String, String> notifyMap = new HashMap<>();
-		// if (rs) {
-		notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
-		// }
-		// 支付中订单存在,更新状态
-		if (msg.getResponseType().equals("1") && notifyMap.size() > 0) {
-			String tradeState = msg.getCode().equals("88") ? "1" : "0";
-			String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
-			notifyMap.put("tradeState", tradeState);
-			notifyMap.put("totalMoney", notifyMap.get("payAmount"));
-			notifyMap.put("merOrderNo", notifyMap.get("merMerOrderNo"));
-			notifyMap.put("channelType", channelType);
-
-			DealStatusEnum status = tradeState.equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
-			TenantPaymentOrder order = tenantPaymentOrderDao.findOrderByOrderNo(notifyMap.get("merMerOrderNo"));
-			if (order == null || !order.getStatus().equals(DealStatusEnum.ING)) {
-				return msg;
-			}
-
-			if (status.equals(DealStatusEnum.SUCCESS)) {
-				order.setPayTime(new Date());
-			} else {
-				order.setMemo(notifyMap.get("remarks"));
-			}
-			order.setStatus(status);
-			order.setTransNo(notifyMap.get("orderNo"));
-			order.setPaymentBusinessChannel(channelType);
-			order.setActualAmount(new BigDecimal(notifyMap.get("payAmount")));
-			tenantPaymentOrderService.paymentForCallback(order);
-			msg.setCode("000000");
-			msg.setMsg("success");
-		}
-		return msg;
-	}
-
-	@GetMapping("/setSuccessStatus")
-	public void setSuccessStatus() throws Exception {
-		List<TenantPaymentOrder> payingOrders = tenantPaymentOrderDao.findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
-
-		String[] statusArr = { "0", "1", "7" };
-		for (TenantPaymentOrder payingOrder : payingOrders) {
-			Map<String, String> rpMap = new HashMap<>();
-			rpMap.put("tradeState", "1");
-			rpMap.put("remarks", "模拟支付成功");
-			rpMap.put("merOrderNo", payingOrder.getOrderNo());
-			rpMap.put("orderNo", payingOrder.getOrderNo());
-			rpMap.put("channelType", "1");
-
-			String channelType = rpMap.get("channelType").equals("1") ? "WXPay" : (rpMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
-			rpMap.put("channelType", channelType);
-			if (Arrays.asList(statusArr).contains(rpMap.get("tradeState"))) {
-				try {
-					tenantPaymentOrderService.paymentForCallback(payingOrder); // 更新订单
-				} catch (Exception e) {
-					e.printStackTrace();
-					continue;
-				}
-			}
-		}
-
-	}
-
 	@RequestMapping("paymentResult")
 	public void paymentResult(HttpServletResponse response, String orderNo) {
 		try {

+ 4 - 4
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/AdapayInit.java

@@ -6,7 +6,7 @@ import java.util.Map;
 
 import com.huifu.adapay.Adapay;
 import com.huifu.adapay.model.MerConfig;
-import com.ym.mec.thirdparty.adapay.entity.AdapayMerConfig;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
 
 /**
@@ -39,20 +39,20 @@ public class AdapayInit {
 		return init;
 	}
 
-	public boolean initWithMerConfig(List<AdapayMerConfig> adapayMerConfigList) {
+	public boolean initWithMerConfig(List<HfMerchantConfig> adapayMerConfigList) {
 		
 		Adapay.debug = debug;
 		Adapay.prodMode = prodMode;
 		
 		Map<String, MerConfig> configPathMap = new HashMap<String, MerConfig>();
 
-		for (AdapayMerConfig adapayMerConfig : adapayMerConfigList) {
+		for (HfMerchantConfig adapayMerConfig : adapayMerConfigList) {
 			MerConfig merConfig = new MerConfig();
 			merConfig.setApiKey(adapayMerConfig.getApiKey());
 			merConfig.setApiMockKey(adapayMerConfig.getMockApiKey());
 			merConfig.setRSAPrivateKey(adapayMerConfig.getRsaPrivateKey());
 			
-			configPathMap.put(adapayMerConfig.getMerchantKey(), merConfig);
+			configPathMap.put(adapayMerConfig.getMerKey(), merConfig);
 		}
 		
 		try {

+ 18 - 5
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/CorpMemberService.java

@@ -4,6 +4,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
 
 import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.huifu.adapay.model.AdapayCommon;
@@ -14,11 +15,12 @@ import com.ym.mec.thirdparty.exception.ThirdpartyException;
 /**
  * 企业用户相关服务
  */
+@Service
 public class CorpMemberService {
 
-	public boolean create(String merchantKey, String appId, EnterpriseUser req) {
+	public boolean create(String merchantKey, String appId, EnterpriseUser req, String notifyUrl) {
 
-		Map<String, Object> memberParams = new HashMap<String, Object>(2);
+		Map<String, Object> memberParams = new HashMap<String, Object>();
 		memberParams.put("member_id", req.getMemberId());
 		memberParams.put("app_id", appId);
 		memberParams.put("order_no", appId + "_" + System.currentTimeMillis());
@@ -37,6 +39,12 @@ public class CorpMemberService {
 		memberParams.put("bank_acct_type", req.getBankAcctType());
 		memberParams.put("card_no", req.getCardNo());
 		memberParams.put("card_name", req.getCardName());
+		memberParams.put("notify_url", req.getNotifyUrl());
+		
+		if(StringUtils.isNotBlank(notifyUrl)){
+			memberParams.put("notify_url", notifyUrl);
+		}
+		
 		try {
 			Map<String, Object> resp = null;
 			if (StringUtils.isNotBlank(merchantKey)) {
@@ -51,8 +59,8 @@ public class CorpMemberService {
 		return true;
 	}
 	
-	public boolean update(String merchantKey, String appId, EnterpriseUser req){
-		Map<String, Object> memberParams = new HashMap<String, Object>(2);
+	public boolean update(String merchantKey, String appId, EnterpriseUser req, String notifyUrl){
+		Map<String, Object> memberParams = new HashMap<String, Object>();
 		memberParams.put("member_id", req.getMemberId());
 		memberParams.put("app_id", appId);
 		memberParams.put("order_no", appId + "_" + System.currentTimeMillis());
@@ -67,6 +75,11 @@ public class CorpMemberService {
 		memberParams.put("legal_cert_id_expires", req.getLegalCertIdExpires());
 		memberParams.put("legal_mp", req.getLegalMp());
 		memberParams.put("address", req.getAddress());
+		memberParams.put("notify_url", req.getNotifyUrl());
+		
+		if(StringUtils.isNotBlank(notifyUrl)){
+			memberParams.put("notify_url", notifyUrl);
+		}
 		try {
 			Map<String, Object> resp = null;
 			if (StringUtils.isNotBlank(merchantKey)) {
@@ -82,7 +95,7 @@ public class CorpMemberService {
 	}
 	
 	public EnterpriseUser query(String merchantKey, String appId, String memberId) {
-		Map<String, Object> memberParams = new HashMap<String, Object>(2);
+		Map<String, Object> memberParams = new HashMap<String, Object>();
 		memberParams.put("member_id", memberId);
 		memberParams.put("app_id", appId);
 		Map<String, Object> resp = null;

+ 21 - 43
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -5,6 +5,7 @@ import java.util.*;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.exception.ThirdpartyException;
 
 import org.slf4j.Logger;
@@ -20,14 +21,14 @@ public class Payment {
      * @return 创建的支付对象
      * @throws Exception 异常
      */
-    public static Map<String, Object> executePayment(Map<String, Object> paymentParams) throws Exception {
-        paymentParams.put("app_id", ConfigInit.appId);
+    public static Map<String, Object> executePayment(String appId, String merchantKey, Map<String, Object> paymentParams) throws Exception {
+        paymentParams.put("app_id", appId);
         
         LOGGER.info("汇付[创建支付对象] Req:{}", paymentParams);
 
         //调用sdk方法,创建支付,得到支付对象
         Map<String, Object> payment = new HashMap<>();
-        payment = com.huifu.adapay.model.Payment.create(paymentParams);
+        payment = com.huifu.adapay.model.Payment.create(paymentParams, merchantKey);
         
         LOGGER.info("汇付[创建支付对象] Resp:{}", payment);
 
@@ -47,8 +48,8 @@ public class Payment {
      * @return 查询的支付对象
      * @throws Exception 异常
      */
-    public static Map<String, Object> createConfirm(Map<String, Object> confirm) throws Exception {
-        confirm = com.huifu.adapay.model.Payment.createConfirm(confirm);
+    public static Map<String, Object> createConfirm(Map<String, Object> confirm, String merchantKey) throws Exception {
+        confirm = com.huifu.adapay.model.Payment.createConfirm(confirm, merchantKey);
 
         String error_code = (String) confirm.get("error_code");
         if (null != error_code) {
@@ -59,44 +60,20 @@ public class Payment {
     }
 
     /**
-     * 关闭一个支付交易
-     *
-     * @param paymentId 要关闭的支付id
-     * @return 关闭的支付对象
-     * @throws Exception 异常
-     */
-    public static Map<String, Object> closePayment(String paymentId) throws Exception {
-        Map<String, Object> payment = new HashMap<>();
-        Map<String, Object> paymentParams = new HashMap<>(10);
-        paymentParams.put("payment_id", paymentId);
-        paymentParams.put("reason", "reason");
-        paymentParams.put("expend", "expend");
-        paymentParams.put("notify_url", "notify_url");
-        payment = com.huifu.adapay.model.Payment.close(paymentParams);
-
-        String error_code = (String) payment.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) payment.get("error_msg");
-            throw new ThirdpartyException(errorMsg);
-        }
-        return payment;
-    }
-
-    /**
      * 查询一个支付交易
      *
      * @param paymentId 要查询的支付id
      * @return 查询的支付对象
      * @throws Exception 异常
      */
-    public static Map<String, Object> queryPayment(String paymentId) throws Exception {
+    public static Map<String, Object> queryPayment(String paymentId, String merchantKey) 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);
+            payment = com.huifu.adapay.model.Payment.query(paymentId, merchantKey);
         } catch (ThirdpartyException e) {
             e.printStackTrace();
         }
@@ -113,14 +90,14 @@ public class Payment {
     }
 
 
-    public static Map<String, Object> queryList(Integer pageIndex, Long createdGte, Long createdLte) throws Exception {
+    public static Map<String, Object> queryList(String appId, String merchantKey, Integer pageIndex, Long createdGte, Long createdLte) throws Exception {
         Map<java.lang.String, java.lang.Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("app_id", appId);
         paymentParams.put("page_index", pageIndex);
         paymentParams.put("page_size", "20");
         paymentParams.put("created_gte", createdGte);
         paymentParams.put("created_lte", createdLte);
-        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryList(paymentParams);
+        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryList(paymentParams, merchantKey);
         String error_code = (String) payment.get("error_code");
         if (null != error_code) {
             String errorMsg = (String) payment.get("error_msg");
@@ -129,12 +106,12 @@ public class Payment {
         return payment;
     }
 
-    public static Map<String, Object> queryConfirmList(String paymentId) throws Exception {
+    public static Map<String, Object> queryConfirmList(String appId, String merchantKey, String paymentId) throws Exception {
         Map<String, Object> paymentParams = new HashMap<>();
-        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("app_id", appId);
         paymentParams.put("payment_id", paymentId);
 
-        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryConfirmList(paymentParams);
+        Map<String, Object> payment = com.huifu.adapay.model.Payment.queryConfirmList(paymentParams, merchantKey);
         String error_code = (String) payment.get("error_code");
         if (null != error_code) {
             String errorMsg = (String) payment.get("error_msg");
@@ -143,22 +120,23 @@ public class Payment {
         return payment;
     }
 
-
-    public static Map<String, Object> getPayMap(BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception {
+    public static Map<String, Object> getPayMap(HfMerchantConfig hfMerchantConfig, BigDecimal amount, String orderNo, String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception {
+    	
         Map<String, Object> paymentParams = new LinkedHashMap<>();
-        paymentParams.put("appId", ConfigInit.appId);
+        paymentParams.put("appId", hfMerchantConfig.getAppId());
         paymentParams.put("amount", amount.setScale(2, BigDecimal.ROUND_HALF_UP));
         paymentParams.put("orderNo", orderNo);
-//        paymentParams.put("notifyUrl", notifyUrl);
-//        paymentParams.put("returnUrl", returnUrl);
+        paymentParams.put("notifyUrl", notifyUrl);
+        paymentParams.put("returnUrl", returnUrl);
         paymentParams.put("orderSubject", orderSubject);
         paymentParams.put("orderBody", orderBody);
-        paymentParams.put("wxAppId", ConfigInit.wxAppId);
+        paymentParams.put("wxAppId", hfMerchantConfig.getWxAppId());
 
         String originalStr = JSONObject.toJSONString(paymentParams);
         String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
 
         paymentParams.put("sign", sign);
+        paymentParams.put("tenantId", hfMerchantConfig.getTenantId());
         paymentParams.remove("appId");
         return paymentParams;
     }

+ 0 - 53
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/SettleAccount.java

@@ -1,53 +0,0 @@
-package com.ym.mec.thirdparty.adapay;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.huifu.adapay.core.exception.BaseAdaPayException;
-
-public class SettleAccount {
-
-    /**
-     * 删除 SettleAccount
-     *
-     * @param settleCount_id 待删除的settleCount_id
-     * @return delete的settleCount 对象
-     * @throws Exception 异常
-     */
-    public static Map<String, Object> executeDeleteSettleAccount(String settleCount_id, String member_id) throws Exception {
-        Map<String, Object> settleCountParams = new HashMap<String, Object>(3);
-        settleCountParams.put("settle_account_id", settleCount_id);
-        settleCountParams.put("member_id", member_id);
-        settleCountParams.put("app_id", ConfigInit.appId);
-        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.delete(settleCountParams);
-        String error_code = (String) settleCount.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) settleCount.get("error_msg");
-            throw new BaseAdaPayException(errorMsg);
-        }
-        return settleCount;
-    }
-
-
-    /**
-     * 创建 settleCount
-     *
-     * @return 创建的settleCount 对象
-     * @throws Exception 异常
-     */
-    public static Map<String, Object> executeCreateSettleAccount(String member_id, Map<String, Object> accountInfo) throws Exception {
-        Map<String, Object> settleCountParams = new HashMap<String, Object>(4);
-        settleCountParams.put("member_id", member_id);
-        settleCountParams.put("app_id", ConfigInit.appId);
-        settleCountParams.put("channel", "bank_account");
-        settleCountParams.put("account_info", accountInfo);
-        Map<String, Object> settleCount = com.huifu.adapay.model.SettleAccount.create(settleCountParams);
-        String error_code = (String) settleCount.get("error_code");
-        if (null != error_code) {
-            String errorMsg = (String) settleCount.get("error_msg");
-            throw new BaseAdaPayException(errorMsg);
-        }
-        return settleCount;
-    }
-
-}

+ 64 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/SettleAccountService.java

@@ -0,0 +1,64 @@
+package com.ym.mec.thirdparty.adapay;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import com.huifu.adapay.core.exception.BaseAdaPayException;
+import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
+import com.ym.mec.thirdparty.exception.ThirdpartyException;
+
+/**
+ * 结算账户服务
+ * 注:若用户想更新银行卡,则需要先调用删除结算账户对象,再使用原 member_id 重新创建结算账户对象,且必须与原创建结算账户使用的身份证和银行卡户名保持一致。
+ */
+@Service
+public class SettleAccountService {
+
+	public String create(String merchantKey, String appId, AccountInfo accountInfo) {
+		Map<String, Object> settleCountParams = new HashMap<String, Object>();
+		Map<String, Object> accountInfoMap = new HashMap<String, Object>();
+		accountInfoMap.put("card_id", accountInfo.getCardId());
+		accountInfoMap.put("card_name", accountInfo.getCardName());
+		accountInfoMap.put("cert_id", accountInfo.getCertId());
+		accountInfoMap.put("cert_type", accountInfo.getCertType());
+		accountInfoMap.put("tel_no", accountInfo.getTelNo());
+		accountInfoMap.put("bank_code", accountInfo.getBankCode());
+		accountInfoMap.put("bank_acct_type", accountInfo.getBankAcctType());
+		accountInfoMap.put("prov_code", accountInfo.getProvCode());
+		accountInfoMap.put("area_code", accountInfo.getAreaCode());
+		settleCountParams.put("member_id", accountInfo.getMemberId());
+		settleCountParams.put("app_id", appId);
+		settleCountParams.put("channel", "bank_account");
+		settleCountParams.put("account_info", accountInfo);
+		try {
+			Map<String, Object> resp = com.huifu.adapay.model.SettleAccount.create(settleCountParams, merchantKey);
+			if (StringUtils.equals("succeeded", resp.get("status").toString())) {
+				return resp.get("id").toString();
+			}
+		} catch (BaseAdaPayException e) {
+			new ThirdpartyException("结算账户创建失败:{}", e, e.getMessage());
+		}
+		return null;
+	}
+
+	public boolean delete(String merchantKey, String appId, String memberId, String settleAccountId) {
+		Map<String, Object> req = new HashMap<String, Object>();
+		req.put("settle_account_id", settleAccountId);
+		req.put("member_id", memberId);
+		req.put("app_id", appId);
+		try {
+			Map<String, Object> resp = com.huifu.adapay.model.SettleAccount.delete(req, merchantKey);
+
+			if (StringUtils.equals("succeeded", resp.get("status").toString())) {
+				return true;
+			}
+
+		} catch (BaseAdaPayException e) {
+			new ThirdpartyException("结算账户删除失败:{}", e, e.getMessage());
+		}
+		return false;
+	}
+}

+ 144 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/AccountInfo.java

@@ -0,0 +1,144 @@
+package com.ym.mec.thirdparty.adapay.entity;
+
+public class AccountInfo {
+	
+	private String memberId;
+
+	/**
+	 * 银行卡号
+	 */
+	private String cardId;
+	
+	/**
+	 * 银行卡对应的户名
+	 */
+	private String cardName;
+	
+	/**
+	 * 证件号,银行账户类型为对私时,必填
+	 */
+	private String certId;
+	
+	/**
+	 * 证件类型,仅支持:00-身份证,银行账户类型为对私时,必填
+	 */
+	private String certType;
+	
+	/**
+	 * 手机号
+	 */
+	private String telNo;
+	
+	/**
+	 * 银行编码,详见附录 银行代码,银行账户类型对公时,必填
+	 */
+	private String bankCode;
+	
+	/**
+	 * 开户银行名称
+	 */
+	private String bankName;
+	
+	/**
+	 * 银行账户类型:1-对公;2-对私
+	 */
+	private String bankAcctType;
+	
+	/**
+	 * 银行账户开户银行所在省份编码 (省市编码),银行账户类型为对公时,必填
+	 */
+	private String provCode;
+	
+	/**
+	 * 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时,必填
+	 */
+	private String areaCode;
+
+	public String getMemberId() {
+		return memberId;
+	}
+
+	public void setMemberId(String memberId) {
+		this.memberId = memberId;
+	}
+
+	public String getCardId() {
+		return cardId;
+	}
+
+	public void setCardId(String cardId) {
+		this.cardId = cardId;
+	}
+
+	public String getCardName() {
+		return cardName;
+	}
+
+	public void setCardName(String cardName) {
+		this.cardName = cardName;
+	}
+
+	public String getCertId() {
+		return certId;
+	}
+
+	public void setCertId(String certId) {
+		this.certId = certId;
+	}
+
+	public String getCertType() {
+		return certType;
+	}
+
+	public void setCertType(String certType) {
+		this.certType = certType;
+	}
+
+	public String getTelNo() {
+		return telNo;
+	}
+
+	public void setTelNo(String telNo) {
+		this.telNo = telNo;
+	}
+
+	public String getBankCode() {
+		return bankCode;
+	}
+
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getBankAcctType() {
+		return bankAcctType;
+	}
+
+	public void setBankAcctType(String bankAcctType) {
+		this.bankAcctType = bankAcctType;
+	}
+
+	public String getProvCode() {
+		return provCode;
+	}
+
+	public void setProvCode(String provCode) {
+		this.provCode = provCode;
+	}
+
+	public String getAreaCode() {
+		return areaCode;
+	}
+
+	public void setAreaCode(String areaCode) {
+		this.areaCode = areaCode;
+	}
+}

+ 0 - 58
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/AdapayMerConfig.java

@@ -1,58 +0,0 @@
-package com.ym.mec.thirdparty.adapay.entity;
-
-/**
- * 商户配置信息
- */
-public class AdapayMerConfig {
-	
-	private String merchantKey;
-
-	private String apiKey;
-
-	private String mockApiKey;
-
-	private String rsaPrivateKey;
-	
-	private String rsaPublicKey;
-
-	public String getApiKey() {
-		return apiKey;
-	}
-
-	public void setApiKey(String apiKey) {
-		this.apiKey = apiKey;
-	}
-
-	public String getMockApiKey() {
-		return mockApiKey;
-	}
-
-	public void setMockApiKey(String mockApiKey) {
-		this.mockApiKey = mockApiKey;
-	}
-
-	public String getRsaPrivateKey() {
-		return rsaPrivateKey;
-	}
-
-	public void setRsaPrivateKey(String rsaPrivateKey) {
-		this.rsaPrivateKey = rsaPrivateKey;
-	}
-
-	public String getRsaPublicKey() {
-		return rsaPublicKey;
-	}
-
-	public void setRsaPublicKey(String rsaPublicKey) {
-		this.rsaPublicKey = rsaPublicKey;
-	}
-
-	public String getMerchantKey() {
-		return merchantKey;
-	}
-
-	public void setMerchantKey(String merchantKey) {
-		this.merchantKey = merchantKey;
-	}
-
-}

+ 165 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java

@@ -0,0 +1,165 @@
+package com.ym.mec.thirdparty.adapay.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(hf_merchant_config):
+ */
+public class HfMerchantConfig {
+
+	/**  */
+	private Integer id;
+	
+	private String appId;
+	
+	/**  */
+	private String merKey;
+	
+	/**  */
+	private String apiKey;
+	
+	/**  */
+	private String mockApiKey;
+	
+	/**  */
+	private String rsaPrivateKey;
+	
+	/**  */
+	private String rsaPublicKey;
+	
+	/**  */
+	private String expendParams;
+	
+	private String wxAppId;
+	
+	private String wxAppSecret;
+	
+	private String platformPayeeMemberId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/**  */
+	private Integer tenantId;
+	
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return this.id;
+	}
+			
+	public String getAppId() {
+		return appId;
+	}
+
+	public void setAppId(String appId) {
+		this.appId = appId;
+	}
+
+	public void setMerKey(String merKey){
+		this.merKey = merKey;
+	}
+	
+	public String getMerKey(){
+		return this.merKey;
+	}
+			
+	public void setApiKey(String apiKey){
+		this.apiKey = apiKey;
+	}
+	
+	public String getApiKey(){
+		return this.apiKey;
+	}
+			
+	public void setMockApiKey(String mockApiKey){
+		this.mockApiKey = mockApiKey;
+	}
+	
+	public String getMockApiKey(){
+		return this.mockApiKey;
+	}
+			
+	public void setRsaPrivateKey(String rsaPrivateKey){
+		this.rsaPrivateKey = rsaPrivateKey;
+	}
+	
+	public String getRsaPrivateKey(){
+		return this.rsaPrivateKey;
+	}
+			
+	public void setRsaPublicKey(String rsaPublicKey){
+		this.rsaPublicKey = rsaPublicKey;
+	}
+	
+	public String getRsaPublicKey(){
+		return this.rsaPublicKey;
+	}
+			
+	public void setExpendParams(String expendParams){
+		this.expendParams = expendParams;
+	}
+	
+	public String getExpendParams(){
+		return this.expendParams;
+	}
+			
+	public String getWxAppId() {
+		return wxAppId;
+	}
+
+	public void setWxAppId(String wxAppId) {
+		this.wxAppId = wxAppId;
+	}
+
+	public String getWxAppSecret() {
+		return wxAppSecret;
+	}
+
+	public void setWxAppSecret(String wxAppSecret) {
+		this.wxAppSecret = wxAppSecret;
+	}
+
+	public String getPlatformPayeeMemberId() {
+		return platformPayeeMemberId;
+	}
+
+	public void setPlatformPayeeMemberId(String platformPayeeMemberId) {
+		this.platformPayeeMemberId = platformPayeeMemberId;
+	}
+
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setTenantId(Integer tenantId){
+		this.tenantId = tenantId;
+	}
+	
+	public Integer getTenantId(){
+		return this.tenantId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 4 - 11
mec-web/src/main/java/com/ym/mec/web/WebApplication.java

@@ -1,10 +1,7 @@
 package com.ym.mec.web;
 
-import com.huifu.adapay.model.MerConfig;
-import com.spring4all.swagger.EnableSwagger2Doc;
-import com.ym.mec.biz.service.NotifyCallback;
-import com.ym.mec.common.filters.EmojiEncodingFilter;
-import com.ym.mec.thirdparty.adapay.ConfigInit;
+import javax.servlet.Filter;
+
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -18,7 +15,8 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.web.client.RestTemplate;
 
-import javax.servlet.Filter;
+import com.spring4all.swagger.EnableSwagger2Doc;
+import com.ym.mec.common.filters.EmojiEncodingFilter;
 
 @SpringBootApplication
 @EnableDiscoveryClient
@@ -59,9 +57,4 @@ public class WebApplication {
         return registration;
     }
 
-    @Bean
-    public static void startMqtt() {
-        MerConfig merConfig = ConfigInit.merConfig;
-        new NotifyCallback();
-    }
 }

+ 115 - 37
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java

@@ -1,20 +1,23 @@
 package com.ym.mec.web.controller;
 
-import com.alibaba.fastjson.JSONArray;
-import com.ym.mec.biz.dal.entity.HfMember;
-import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
-import com.ym.mec.biz.service.HfMemberService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.thirdparty.adapay.ConfigInit;
-import com.ym.mec.thirdparty.adapay.CorpMember;
-import com.ym.mec.thirdparty.adapay.Payment;
-import com.ym.mec.util.date.DateUtil;
-import com.ym.mec.util.excel.POIUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,13 +28,26 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.AdapayCore;
+import com.huifu.adapay.core.util.AdapaySign;
+import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
+import com.ym.mec.biz.service.HfMemberService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
+import com.ym.mec.thirdparty.adapay.Payment;
+import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.excel.POIUtil;
 
 @RequestMapping("adapay")
 @Api(tags = "汇付服务")
@@ -40,6 +56,9 @@ public class AdapayController extends BaseController {
 
     @Autowired
     private HfMemberService hfMemberService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -51,10 +70,74 @@ public class AdapayController extends BaseController {
         return succeed(hfMemberService.queryPage(queryInfo));
     }
 
+    @PostMapping("/callback")
+	public String callback(HttpServletRequest request) {
+		try {
+			// 验签请参data
+			String data = request.getParameter("data");
+			// 验签请参sign
+			String sign = request.getParameter("sign");
+
+			// 验签
+			if (!AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+				return "验签失败";
+			}
+			
+			JSONObject dataObj = JSON.parseObject(data);
+			
+			String memberId = dataObj.getString("member_id");
+			
+			HfMember hfMember = hfMemberService.getByMemberId(memberId);
+			if(hfMember == null){
+				return "账户["+ memberId +"]在系统中不存在";
+			}
+			hfMember.setUpdateTime(new Date());
+			
+			String transType = request.getParameter("type");
+			
+			switch (transType) {
+
+			case "corp_member.succeeded":// 企业子账户开户成功
+				String settleAccountId = dataObj.getString("settle_account_id");
+				hfMember.setSettleAccountId(settleAccountId);
+				hfMember.setStatus("succeeded");
+				
+				break;
+
+			case "corp_member.failed":// 企业子账户开户失败
+				hfMember.setStatus("failed");
+				hfMember.setMemo(dataObj.getString("audit_desc"));
+
+				break;
+
+			case "corp_member_update.succeeded":// 更新企业用户对象成功
+				hfMember.setStatus("succeeded");
+
+				break;
+
+			case "corp_member_update.failed":// 更新企业用户对象失败
+				hfMember.setStatus("failed");
+				hfMember.setMemo(dataObj.getString("audit_desc"));
+
+				break;
+
+			default:
+				break;
+			}
+			
+			hfMemberService.update(hfMember);
+		
+		} catch (Exception e) {
+			return e.getMessage();
+		}
+		
+		return "succeeded";
+	}
+
     @ApiOperation("新建企业用户")
     @PostMapping(value = "createMember")
     @PreAuthorize("@pcs.hasPermissions('adapay/createMember')")
-    public HttpResponseResult<Map<String, Object>> createMember(HfMember member) throws Exception {
+    public HttpResponseResult<Boolean> createMember(HfMember member) throws Exception {
         if (!profiles.equals("prod")) {
             return failed("仅生产环境可用");
         }
@@ -75,14 +158,14 @@ public class AdapayController extends BaseController {
             return failed(e.getMessage());
         } finally {
             IOUtils.closeQuietly(inputStream);
-            boolean delete = file.delete();
+            FileUtils.deleteQuietly(file);
         }
     }
 
     @ApiOperation("修改企业用户(状态是failed才能修改)")
     @PostMapping(value = "updateMember")
     @PreAuthorize("@pcs.hasPermissions('adapay/updateMember')")
-    public HttpResponseResult<Map<String, Object>> updateMember(HfMember member) throws Exception {
+    public HttpResponseResult<Boolean> updateMember(HfMember member) throws Exception {
         if (!profiles.equals("prod")) {
             return failed("仅生产环境可用");
         }
@@ -103,33 +186,24 @@ public class AdapayController extends BaseController {
             return failed(e.getMessage());
         } finally {
             IOUtils.closeQuietly(inputStream);
-            boolean delete = file.delete();
+            FileUtils.deleteQuietly(file);
         }
     }
 
-
     @ApiOperation("绑定结算账户(succeeded 状态才能使用)")
     @PostMapping(value = "createSettleAccount")
     @PreAuthorize("@pcs.hasPermissions('adapay/createSettleAccount')")
-    public HttpResponseResult<Map<String, Object>> createSettleAccount(String memberId, String cardNo, String bankCode) throws Exception {
+    public HttpResponseResult<Boolean> createSettleAccount(String memberId, AccountInfo accountInfo) throws Exception {
         if (!profiles.equals("prod")) {
             return failed("仅生产环境可用");
         }
         try {
-            return succeed(hfMemberService.createSettleAccount(memberId, cardNo, bankCode));
+            return succeed(hfMemberService.mergeSettleAccount(memberId, accountInfo));
         } catch (Exception e) {
             return failed(e.getMessage());
         }
     }
 
-    @ApiOperation("查询企业用户信息")
-    @GetMapping(value = "getMemberInfo")
-    @PreAuthorize("@pcs.hasPermissions('adapay/getMemberInfo')")
-    public HttpResponseResult<Map<String, Object>> getMemberInfo(String memberId) throws Exception {
-        return succeed(CorpMember.executeQueryMember(memberId));
-    }
-
-
     @ApiOperation("导出对账单")
     @GetMapping(value = "exportBill")
     @PreAuthorize("@pcs.hasPermissions('adapay/exportBill')")
@@ -139,7 +213,11 @@ public class AdapayController extends BaseController {
         int pageIndex = 1;
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
-            Map<String, Object> paymentList = Payment.queryList(pageIndex, createdGte, createdLte);
+        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+            if(hfMerchantConfig == null){
+            	throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
+            }
+            Map<String, Object> paymentList = Payment.queryList(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), pageIndex, createdGte, createdLte);
             JSONArray payments = (JSONArray) paymentList.get("payments");
             if (!paymentList.get("status").equals("succeeded")) {
                 throw new BizException("查询失败,请重试");
@@ -169,7 +247,7 @@ public class AdapayController extends BaseController {
                     }
                     if (paymentMap.get("pay_mode").equals("delay")) {
                         if (!paymentMap.containsKey("payment_confirms")) {
-                            Map<String, Object> confirmMap = Payment.queryConfirmList(paymentMap.get("id").toString());
+                            Map<String, Object> confirmMap = Payment.queryConfirmList(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentMap.get("id").toString());
                             if (confirmMap.containsKey("payment_confirms")) {
                                 paymentMap.put("payment_confirms", confirmMap.get("payment_confirms"));
                             }

+ 0 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -309,7 +309,6 @@ public class TaskController extends BaseController {
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
-		tenantPaymentOrderService.queryOrderStatusFromRemote();
 	}
 
 	// 统计老师课酬

+ 7 - 25
mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java

@@ -1,23 +1,21 @@
 package com.ym.mec.web.controller;
 
 
-import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
-import com.ym.mec.biz.service.OrderPayOpsService;
-import com.ym.mec.biz.service.TenantOrderRecordService;
-import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+
+import javax.annotation.Resource;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.Map;
+import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
+import com.ym.mec.biz.service.OrderPayOpsService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.common.controller.BaseController;
 
 /**
  * 机构付款记录表(TenantOrderRecord)表控制层
@@ -44,22 +42,6 @@ public class TenantOrderRecordController extends BaseController {
     }
 
     @ApiOperation(value = "自测用的")
-    @PostMapping("/executePayment")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "amount", value = "支付金额", required = true, dataType = "BigDecimal"),
-            @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, String platform) {
-        try {
-            Map<String, Object> payment = orderPayOpsService.executePayment(amount, orderNo, payChannel, returnUrl, orderSubject, orderBody, sign, code, platform);
-            return succeed(payment);
-        } catch (Exception e) {
-            return failed(e.getMessage());
-        }
-    }
-
-    @ApiOperation(value = "自测用的")
     @PostMapping("/checkTenantOrder")
     public Object checkTenantOrder(String orderNo) {
         return succeed(tenantOrderRecordService.checkTenantOrder(orderNo));