yonge 1 年之前
父節點
當前提交
a1222cbd86
共有 39 個文件被更改,包括 952 次插入297 次删除
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java
  2. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java
  3. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  4. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java
  5. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  9. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  11. 7 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java
  12. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java
  13. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  14. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  15. 87 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  16. 109 67
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  17. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  20. 211 63
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  22. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  23. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  24. 22 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java
  25. 43 27
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  26. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  27. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  28. 6 0
      mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml
  29. 15 3
      mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml
  30. 2 12
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  31. 18 0
      mec-student/pom.xml
  32. 190 61
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  33. 24 3
      mec-thirdparty/pom.xml
  34. 40 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java
  35. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java
  36. 44 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/CustomFixedCredentialsProvider.java
  37. 67 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java
  38. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java
  39. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java

@@ -22,5 +22,7 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @return
      */
     HfMember getByName(@Param("name") String name, @Param("payerName") String payerName);
+    
+    HfMember getByOrganId(@Param("organId") Integer organId, @Param("payerName") String payerName);
 
 }

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

@@ -14,8 +14,12 @@ public class PaymentParam {
     private String platform;
     private Integer tenantId;
     
+    private String payerName;
+    
     private String notifyUrl;
     
+    private String ip;
+    
 
     public PaymentParam() {
     }
@@ -100,6 +104,14 @@ public class PaymentParam {
         this.tenantId = tenantId;
     }
 
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
 	public String getNotifyUrl() {
 		return notifyUrl;
 	}
@@ -107,4 +119,12 @@ public class PaymentParam {
 	public void setNotifyUrl(String notifyUrl) {
 		this.notifyUrl = notifyUrl;
 	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
 }

+ 0 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java

@@ -26,8 +26,6 @@ public class StudentPaymentOrder extends BaseEntity {
 	
 	private GroupType groupType;
 	
-	private String payerName;
-
 	@Version
 	private Integer version;
 	/**  */
@@ -146,14 +144,6 @@ public class StudentPaymentOrder extends BaseEntity {
 		this.calenderId = calenderId;
 	}
 
-	public String getPayerName() {
-		return payerName;
-	}
-
-	public void setPayerName(String payerName) {
-		this.payerName = payerName;
-	}
-
 	public Integer getActivityBuyNum() {
 		return activityBuyNum;
 	}

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java

@@ -15,6 +15,8 @@ public interface HfMemberService extends BaseService<Integer, HfMember> {
      * @return
      */
     HfMember getByMemberId(String memberId, String payerName);
+    
+    HfMember getByOrganId(Integer organId, String payerName);
 
     boolean createMember(HfMember member, File file) throws Exception;
 

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

@@ -397,6 +397,9 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     
     //机构云教室账户余额提醒
     String TENANT_CLOUD_ROOM_BALANCE_NOTICE = "tenant_cloud_room_balance_notice_";
+    
+    //支付渠道
+    String PAYMENT_CHANNEL = "payment_channel";
 
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){

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

@@ -14,7 +14,7 @@ public interface SysPaymentConfigService extends BaseService<Integer, SysPayment
      * @param organId
      * @return
      */
-    SysPaymentConfig findPaymentConfigByOrganId(Integer organId);
+    SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId);
 
     /**
      * 根据分部ids获取配置

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

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

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

@@ -193,7 +193,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
                     payAmount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()

+ 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/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "对外课程组购买",
                     coursesGroup.getName(),

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

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

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

@@ -62,11 +62,16 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 	}
 
 	@Override
+	public HfMember getByOrganId(Integer organId, String payerName) {
+		return hfMemberDao.getByOrganId(organId, payerName);
+	}
+
+	@Override
     @Transactional(rollbackFor = Exception.class)
     public boolean createMember(HfMember member, File file) throws Exception {
-        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId(), member.getPayerName());
+        HfMember hasMember = hfMemberDao.getByOrganId(member.getOrganId(), member.getPayerName());
         if (hasMember != null) {
-            throw new BizException("商户号不能与已有商户相同,请核查");
+            throw new BizException("该分部已创建成功,请核查");
         }
         hasMember = hfMemberDao.getByName(member.getName(), member.getPayerName());
         if (hasMember != null) {

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

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.HashMap;
+import java.util.Map;
+
 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.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -25,7 +29,11 @@ public class HfMerchantConfigServiceImpl extends BaseServiceImpl<Integer, HfMerc
 	@Override
 	public void afterPropertiesSet() throws Exception {
 		AdapayInit adapayInit = AdapayInit.getInstance(false, true);
-		adapayInit.initWithMerConfig(hfMerchantConfigDao.findAll(null));
+		
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("payerName", PaymentChannelEnum.ADAPAY.getCode());
+		
+		adapayInit.initWithMerConfig(hfMerchantConfigDao.findAll(params));
 	}
 
 	@Override

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

@@ -555,7 +555,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
     private void checkOrder(StudentPaymentOrder orderByOrderNo) throws Exception {
         if (StringUtils.isNotBlank(orderByOrderNo.getTransNo())) {
 
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId(), orderByOrderNo.getPayerName());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId(), orderByOrderNo.getPaymentChannel());
             if(hfMerchantConfig == null){
             	throw new BizException("机构[{}]汇付商户信息找不到", orderByOrderNo.getTenantId());
             }

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

@@ -960,14 +960,14 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         classFee.put("instrument", BigDecimal.ZERO);
         classFee.put("accessories", BigDecimal.ZERO);
         classFee.put("other", amount);
-
+        
         String receiver = "sporadic";
 
         Map payMap = payService.getPayMap(
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 chargeInfo.getTitle(),
                 chargeInfo.getTitle(),
@@ -1098,7 +1098,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(),
                 "续费",
                 "乐团续费",
@@ -1462,7 +1462,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

+ 87 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -28,6 +28,12 @@ import org.springframework.util.DigestUtils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.request.AlipaySystemOauthTokenRequest;
+import com.alipay.api.response.AlipaySystemOauthTokenResponse;
+import com.yeepay.yop.sdk.service.aggpay.request.PrePayRequest;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -35,6 +41,7 @@ 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.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.OrderPayOpsService;
 import com.ym.mec.biz.service.StudentPaymentOrderService;
@@ -46,6 +53,7 @@ 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.thirdparty.yeepay.YeepayPaymentService;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.json.JsonUtil;
@@ -69,6 +77,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private HfMerchantConfigService hfMerchantConfigService;
     
     @Autowired
+    private YeepayPaymentService yeepayPaymentService;
+    
+    @Autowired
     private RedissonClient redissonClient;
     @Autowired
     private TenantConfigService tenantConfigService;
@@ -86,6 +97,14 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         if (payParam.getAmount() == null) {
             throw new Exception("PaymentParam query is null");
         }
+        
+        StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
+        if(studentPaymentOrder == null) {
+        	throw new BizException("参数错误");
+        }
+        
+        payParam.setPayerName(studentPaymentOrder.getPaymentChannel());
+        
         //签名验证
         checkSing(payParam);
         //返回值
@@ -107,7 +126,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private void checkSing(PaymentParam param) {
         
         //查询商户支付账户
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(param.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(param.getTenantId(), param.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("请配置机构的汇付商户信息");
         }
@@ -209,18 +228,62 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         String timeExpire = checkOrderTimeOut(createTime);
         
         //查询商户支付账户
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payParam.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payParam.getTenantId(), payParam.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("请配置机构的汇付商户信息");
         }
         
-        //初始化支付数据
-        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz, hfMerchantConfig.getPlatformPayeeMemberId());
-        paymentParams.put("time_expire", timeExpire);
-        paymentParams.put("expend", getExpend(hfMerchantConfig, payParam));
-        paymentParams.put("notify_url", payParam.getNotifyUrl());
-        //向第三方发起支付,获取第三方的支付的信息
-        Map<String, Object> payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
+        Map<String, Object> payment = new HashMap<String, Object>();
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payParam.getPayerName());
+        
+        switch (paymentChannel) {
+		case ADAPAY:
+
+	        //初始化支付数据
+	        Map<String, Object> paymentParams = getPaymentParam(payParam, clazz, hfMerchantConfig.getPlatformPayeeMemberId());
+	        paymentParams.put("time_expire", timeExpire);
+	        paymentParams.put("expend", getExpend(hfMerchantConfig, payParam));
+	        paymentParams.put("notify_url", payParam.getNotifyUrl());
+	        //向第三方发起支付,获取第三方的支付的信息
+	        payment = Payment.executePayment(hfMerchantConfig.getAppId(), hfMerchantConfig.getMerKey(), paymentParams);
+	        
+			break;
+		case YEEPAY:
+			
+			PrePayRequest request = new PrePayRequest();
+			request.getRequestConfig().setAppKey(hfMerchantConfig.getAppId());
+			request.setParentMerchantNo(hfMerchantConfig.getPlatformPayeeMemberId());
+	        request.setMerchantNo(hfMerchantConfig.getPlatformPayeeMemberId());
+	        request.setOrderId(payParam.getOrderNo());
+	        request.setOrderAmount(payParam.getAmount());
+	        //request.setExpiredTime("2023-05-31 18:29:09");
+	        request.setNotifyUrl(payParam.getNotifyUrl());
+	        request.setRedirectUrl(payParam.getReturnUrl());
+	        request.setScene("OFFLINE");
+	        request.setMemo(null);
+	        request.setGoodsName(payParam.getOrderSubject());
+	        request.setFundProcessType("DELAY_SETTLE");//需要分账
+	        
+	        if(StringUtils.equals(payParam.getPayChannel(), "alipay_qr") || StringUtils.equals(payParam.getPayChannel(), "alipay_wap")) {
+		        request.setChannel("ALIPAY");
+		        request.setPayWay("ALIPAY_LIFE");//微信公众号
+		        request.setUserId(getAlipayUserId(hfMerchantConfig, payParam.getCode()));
+	        }else if(StringUtils.equals(payParam.getPayChannel(), "wx_pub")) {
+		        request.setChannel("WECHAT");
+		        request.setPayWay("WECHAT_OFFIACCOUNT");//微信公众号
+		        request.setAppId(hfMerchantConfig.getWxAppId());
+		        request.setUserId(getOpenId(hfMerchantConfig, payParam.getCode()));
+	        }
+	        request.setUserIp(payParam.getIp());
+			
+			payment = yeepayPaymentService.prePay(request);
+			
+			break;
+
+		default:
+			break;
+		}
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
         String transNo = (String) payment.get("id");
         //修改流水
@@ -281,6 +344,21 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         openId = weChatRes.get("openid");
         return openId;
     }
+    
+    private String getAlipayUserId(HfMerchantConfig hfMerchantConfig, String code) throws AlipayApiException {
+    	
+    	AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",hfMerchantConfig.getAlipayAppId(),hfMerchantConfig.getAlipayPrivateKey(),"json","GBK",hfMerchantConfig.getAlipayPublicKey(),"RSA2");
+    	AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
+    	request.setGrantType("authorization_code");
+    	request.setCode(code);
+    	//request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
+    	AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
+    	if(response.isSuccess()){
+    		return response.getUserId();
+    	}
+    	log.error("支付宝获取UserId失败:{}", response.getSubMsg());
+    	throw new BizException("授权失败,请重新授权");
+    }
 
     private <T> Map<String, Object> getPaymentParam(PaymentParam payParam, T clazz, String platformAccount) {
         Map<String, Object> paymentParams = new HashMap<>();

+ 109 - 67
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -96,11 +96,20 @@ public class PayServiceImpl implements PayService {
         	throw new BizException("订单[{}]查询失败", orderNo);
         }
         
+        //获取支付渠道
+		String paymentChannelStr = sysConfigDao.findConfigValue(SysConfigService.PAYMENT_CHANNEL);
+		
+		if(StringUtils.isBlank(paymentChannelStr)) {
+			paymentChannelStr = PaymentChannelEnum.ADAPAY.getCode();
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(paymentChannelStr);
+        
         Integer tenantId = studentPaymentOrder.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, studentPaymentOrder.getPayerName());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannelStr);
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, paymentChannelStr);
         }
         
         if(tenantId != 1){//非大雅机构
@@ -124,12 +133,16 @@ public class PayServiceImpl implements PayService {
             studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
             
             Map<String, Object> unionPay = new HashMap<>();
-            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            Map<String, Object> payMap = null;
+            
+            if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
+            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            }
             
-            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
-
             unionPay.put("orderNo", orderNo);
-            unionPay.put("type", payType.getCode());
+            unionPay.put("type", paymentChannel.getCode());
             unionPay.put("payMap", payMap);
             unionPay.put("routingMerNos", merNo);
             return unionPay;
@@ -172,12 +185,16 @@ public class PayServiceImpl implements PayService {
 	            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
 	            
 	            Map<String, Object> unionPay = new HashMap<>();
-	            Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+	            Map<String, Object> payMap = null;
 	            
-	            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
+	            if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+	            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+	            }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
+	            	
+	            }
 
 	            unionPay.put("orderNo", orderNo);
-	            unionPay.put("type", payType.getCode());
+	            unionPay.put("type", paymentChannel.getCode());
 	            unionPay.put("payMap", payMap);
 	            unionPay.put("routingMerNos", merNo);
 	            return unionPay;
@@ -397,30 +414,30 @@ public class PayServiceImpl implements PayService {
         List<RouteScaleDto> routeScaleDtos = null;
         //使用配置开关
         if (usePaymentConfig.equals("0")) {
-            routeScaleDtos = noUsePaymentConfig(amount); //款项都收到平台商户
+            routeScaleDtos = noUsePaymentConfig(paymentChannel, organId, amount); //款项都收到平台商户
         }
 
         //根据费用类型,mark
         if (routeScaleDtos == null) {
-            routeScaleDtos = getTypeRouteChannel(organId, orderNo, amount, balanceAmount);
+            routeScaleDtos = getTypeRouteChannel(paymentChannel, organId, orderNo, amount, balanceAmount);
         }
 
         //根据金额获取分润
         if (routeScaleDtos == null) {
-            routeScaleDtos = getAmountChannel(organId, amount, receiver);
+            routeScaleDtos = getAmountChannel(paymentChannel, organId, amount, receiver);
         }
         //零星支付,收到指定
         if (routeScaleDtos == null) {
-            routeScaleDtos = getSporadicChannel(amount, receiver);
+            routeScaleDtos = getSporadicChannel(paymentChannel, amount, receiver);
         }
         //比例或者笔数分佣
         if (routeScaleDtos == null) {
-            routeScaleDtos = getPaymentConfigChannel(organId, amount);
+            routeScaleDtos = getPaymentConfigChannel(paymentChannel, organId, amount);
         }
 
         //验证最大收款金额
         for (RouteScaleDto routeScaleDto : routeScaleDtos) {
-            checkMaxReceipt(routeScaleDto, routeScaleDto.getMerNo());
+            //checkMaxReceipt(paymentChannel, routeScaleDto, routeScaleDto.getMerNo());
         }
         
         /*if(routeScaleDtoForGoodsSell != null){
@@ -450,7 +467,7 @@ public class PayServiceImpl implements PayService {
 	public Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
     	
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannel.getCode());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -467,29 +484,31 @@ public class PayServiceImpl implements PayService {
 		return unionPay;
 	}
 
-	private List<RouteScaleDto> noUsePaymentConfig(BigDecimal amount) {
-        String paymentChannel = sysConfigDao.findConfigValue("payment_channel");
+	private List<RouteScaleDto> noUsePaymentConfig(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         routeScaleDto.setAmount(amount);
         routeScaleDto.setOrganId(ConfigInit.organId);
         routeScaleDto.setScale(100);
-        if (paymentChannel.equals("YQPAY")) {
-            routeScaleDto.setMerNo(YqPayUtil.merNo);
-            routeScaleDto.setPayType(PaymentChannelEnum.YQPAY);
-        } else {
-            routeScaleDto.setMerNo(ConfigInit.merNo);
-            routeScaleDto.setPayType(PaymentChannelEnum.ADAPAY);
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(routeScaleDto.getOrganId(), paymentChannel.getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentChannel.getCode(), routeScaleDto.getOrganId());
+    	}
+    	
+        routeScaleDto.setMerNo(hfMember.getMemberId());
+        routeScaleDto.setPayType(paymentChannel);
+        
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
     }
 
-    private List<RouteScaleDto> getPaymentConfigChannel(Integer organId, BigDecimal amount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private List<RouteScaleDto> getPaymentConfigChannel(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
         if (paymentConfig == null) {
-            return noUsePaymentConfig(amount);
+            return noUsePaymentConfig(paymentChannel, organId, amount);
         }
         if (StringUtils.isBlank(paymentConfig.getRouteScale())) {
             List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -498,11 +517,15 @@ public class PayServiceImpl implements PayService {
             routeScaleDto.setOrganId(organId);
             routeScaleDto.setScale(100);
             routeScaleDto.setPayType(paymentConfig.getPayType());
-            if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-            } else {
-                routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-            }
+
+        	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+        	
+        	if(hfMember == null) {
+        		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+        	}
+        	
+        	routeScaleDto.setMerNo(hfMember.getMemberId());
+        	
             routeScaleDto.setFeeFlag("Y");
             routeScaleDtos.add(routeScaleDto);
             return routeScaleDtos;
@@ -517,11 +540,15 @@ public class PayServiceImpl implements PayService {
             routeScaleDto.setAmount(amount);
             for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
                 if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
-                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
-                } else {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
-                }
+
+            	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfigByOrganId.getOrganId(), paymentConfigByOrganId.getPayType().getCode());
+            	
+            	if(hfMember == null) {
+            		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfigByOrganId.getPayType().getCode(), paymentConfigByOrganId.getOrganId());
+            	}
+            	
+            	routeScaleDto.setMerNo(hfMember.getMemberId());
+            	
             }
         }
 
@@ -556,7 +583,7 @@ public class PayServiceImpl implements PayService {
      *
      * @param amount 金额
      */
-    private List<RouteScaleDto> getAmountChannel(Integer organId, BigDecimal amount, String receiver) {
+    private List<RouteScaleDto> getAmountChannel(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount, String receiver) {
         String amountChannel = sysConfigDao.findConfigValue("amount_channel"); //按金额分润规则
         if (StringUtils.isBlank(amountChannel)) {
             return null;
@@ -586,11 +613,11 @@ public class PayServiceImpl implements PayService {
         }
 
         //调度到 鎏逸乐器经营部 检测限定金额
-        if (checkHasMaxReceipt(routeOrganId, amount)) {
+        if (checkHasMaxReceipt(paymentChannel, routeOrganId, amount)) {
             return null;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(routeOrganId);
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, routeOrganId);
 
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -598,11 +625,15 @@ public class PayServiceImpl implements PayService {
         routeScaleDto.setOrganId(paymentConfig.getOrganId());
         routeScaleDto.setPayType(paymentConfig.getPayType());
         routeScaleDto.setScale(100);
-        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-        } else {
-            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+    	}
+
+        routeScaleDto.setMerNo(hfMember.getMemberId());
+        
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
@@ -614,7 +645,7 @@ public class PayServiceImpl implements PayService {
      * @param amount
      * @return
      */
-    private List<RouteScaleDto> getSporadicChannel(BigDecimal amount, String receiver) {
+    private List<RouteScaleDto> getSporadicChannel(PaymentChannelEnum paymentChannel, BigDecimal amount, String receiver) {
         if (receiver == null || !receiver.equals("sporadic")) {
             return null;
         }
@@ -631,11 +662,11 @@ public class PayServiceImpl implements PayService {
         }
 
         Integer organId = Integer.parseInt(channel.get("organId").toString());
-        if (checkHasMaxReceipt(organId, amount)) {
+        if (checkHasMaxReceipt(paymentChannel, organId, amount)) {
             return null;
         }
 
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
 
         RouteScaleDto routeScaleDto = new RouteScaleDto();
         List<RouteScaleDto> routeScaleDtos = new ArrayList<>();
@@ -643,19 +674,22 @@ public class PayServiceImpl implements PayService {
         routeScaleDto.setOrganId(paymentConfig.getOrganId());
         routeScaleDto.setPayType(paymentConfig.getPayType());
         routeScaleDto.setScale(100);
-        if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-            routeScaleDto.setMerNo(paymentConfig.getYqMerNo());
-        } else {
-            routeScaleDto.setMerNo(paymentConfig.getHfMerNo());
-        }
+        
+    	HfMember hfMember = hfMemberDao.getByOrganId(paymentConfig.getOrganId(), paymentConfig.getPayType().getCode());
+    	
+    	if(hfMember == null) {
+    		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfig.getOrganId());
+    	}
+    	routeScaleDto.setMerNo(hfMember.getMemberId());
+    	
         routeScaleDto.setFeeFlag("Y");
         routeScaleDtos.add(routeScaleDto);
         return routeScaleDtos;
     }
 
     //按金额和零星支付(调度到 鎏逸乐器经营部 检测限定金额)
-    private Boolean checkHasMaxReceipt(Integer organId, BigDecimal amount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private Boolean checkHasMaxReceipt(PaymentChannelEnum paymentChannel, Integer organId, BigDecimal amount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
 
         if (!paymentConfig.getHfMerNo().equals("H004217")) {
             return false;
@@ -804,8 +838,8 @@ public class PayServiceImpl implements PayService {
      * @param amount
      * @return
      */
-    private List<RouteScaleDto> getTypeRouteChannel(Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(organId);
+    private List<RouteScaleDto> getTypeRouteChannel(PaymentChannelEnum paymentChannel, Integer organId, String orderNo, BigDecimal amount, BigDecimal balanceAmount) {
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(paymentChannel, organId);
         if (paymentConfig == null || StringUtils.isBlank(paymentConfig.getTypeRouteScale())) {
             return null;
         }
@@ -873,13 +907,21 @@ public class PayServiceImpl implements PayService {
                 continue;
             }*/
 
+            HfMember hfMember = null;
+            
             for (SysPaymentConfig paymentConfigByOrganId : paymentConfigByOrganIds) {
-                if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
-                if (paymentConfig.getPayType().equals(PaymentChannelEnum.YQPAY)) {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getYqMerNo());
-                } else {
-                    routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
-                }
+                
+            	if (!paymentConfigByOrganId.getOrganId().equals(routeScaleDto.getOrganId())) continue;
+            	
+            	hfMember = hfMemberDao.getByOrganId(paymentConfigByOrganId.getOrganId(), paymentConfig.getPayType().getCode());
+
+            	if(hfMember == null) {
+            		throw new BizException("[{}]分部[{}]没有配置商户号", paymentConfig.getPayType().getCode(), paymentConfigByOrganId.getOrganId());
+            	}
+            	
+            	
+            	routeScaleDto.setMerNo(hfMember.getMemberId());
+                
             }
         }
         Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
@@ -984,8 +1026,8 @@ public class PayServiceImpl implements PayService {
      * @param merNo
      * @return
      */
-    private RouteScaleDto checkMaxReceipt(RouteScaleDto routeScaleDto, String merNo) {
-        HfMember hfmember = hfMemberDao.getByMemberId(routeScaleDto.getMerNo());
+    private RouteScaleDto checkMaxReceipt(PaymentChannelEnum paymentChannel, RouteScaleDto routeScaleDto, String merNo) {
+        HfMember hfmember = hfMemberDao.getByMemberId(routeScaleDto.getMerNo(), paymentChannel.getCode());
         if (hfmember == null || hfmember.getMonthMaxReceipt().compareTo(BigDecimal.ZERO) <= 0) {
             return routeScaleDto;
         }
@@ -1022,7 +1064,7 @@ public class PayServiceImpl implements PayService {
             if (routeScaleDto.getMerNo().equals(merNo)) {
                 return routeScaleDto;
             }
-            return checkMaxReceipt(routeScaleDto, merNo);
+            return checkMaxReceipt(paymentChannel, routeScaleDto, merNo);
         }
         return routeScaleDto;
     }

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

@@ -2619,7 +2619,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3086,7 +3086,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                     amount,
                     balance,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
+                    baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                     baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                     "网管课购买",
                     practiceGroupBuyParams.getName(),
@@ -3599,7 +3599,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 newOrder.getActualAmount(),
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -4298,7 +4298,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "网管课购买",
                 practiceGroup.getName(),
@@ -4480,7 +4480,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 activityFee,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

@@ -417,7 +417,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 orderSubject,
                 orderSubject,

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

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

+ 211 - 63
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1,18 +1,120 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
+import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+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.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yeepay.yop.sdk.service.divide.model.ApplyYopOrderDivideResDTOResult;
+import com.yeepay.yop.sdk.service.divide.request.ApplyRequest;
+import com.yeepay.yop.sdk.service.trade.model.OrderQueryYopQueryOrderResDTOResult;
 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.dao.GoodsDao;
+import com.ym.mec.biz.dal.dao.GoodsProcurementDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dao.StudentGoodsSellDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentRouteOrderDao;
+import com.ym.mec.biz.dal.dao.StudentRepairDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
+import com.ym.mec.biz.dal.dto.GoodsOrderItemVO;
+import com.ym.mec.biz.dal.dto.PageInfoOrder;
+import com.ym.mec.biz.dal.dto.SporadicChargeInfoDto;
+import com.ym.mec.biz.dal.dto.StudentGoodsSellDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderDto;
+import com.ym.mec.biz.dal.dto.StudentPaymentOrderExportDto;
+import com.ym.mec.biz.dal.entity.ActivityUserMapper;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.GoodsProcurement;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.SellOrder;
+import com.ym.mec.biz.dal.entity.StudentGoodsSell;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentPaymentRouteOrder;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+import com.ym.mec.biz.dal.enums.AccountType;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GoodsType;
+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.enums.PayStatus;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SellStatus;
+import com.ym.mec.biz.dal.enums.SellTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
+import com.ym.mec.biz.dal.enums.StockType;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.SporadicOrderQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
 import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ActivityUserMapperService;
+import com.ym.mec.biz.service.ChildrenDayReserveService;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.DegreeRegistrationService;
+import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.biz.service.MemberRankSettingService;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.biz.service.ReplacementInstrumentActivityService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentInstrumentService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.StudentRepairService;
+import com.ym.mec.biz.service.SubjectChangeService;
+import com.ym.mec.biz.service.SysCouponCodeService;
+import com.ym.mec.biz.service.SysPaymentConfigService;
+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.biz.service.VipGroupActivityService;
+import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -29,29 +131,15 @@ import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.adapay.entity.BaseResult;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
-import com.ym.mec.thirdparty.yqpay.*;
+import com.ym.mec.thirdparty.yeepay.YeepayPaymentService;
+import com.ym.mec.thirdparty.yqpay.DateUtils;
+import com.ym.mec.thirdparty.yqpay.Msg;
+import com.ym.mec.thirdparty.yqpay.RsqMsg;
+import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
+import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.http.HttpStatus;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.CLOSE;
-import static com.ym.mec.biz.dal.enums.DealStatusEnum.SUCCESS;
-
 @Service
 public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, StudentPaymentOrder> implements StudentPaymentOrderService {
 
@@ -134,6 +222,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private StudentDao studentDao;
     @Autowired
     private StudentPaymentOrderService studentPaymentOrderService;
+    
+    @Autowired
+    private YeepayPaymentService yeepayPaymentService;
 
 
     @Autowired
@@ -203,7 +294,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return notifyMap;
         }
 
-        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl
+        Map<String, Object> payMap = payService.getPayMap(cashAmount, balance, studentPaymentOrder.getOrderNo(), 
+                baseApiUrl + "/api-student/studentOrder/callback/" + studentPaymentOrder.getOrderNo(), baseApiUrl
                 + "/api-student/studentOrder/paymentResult?orderNo=" + studentPaymentOrder.getOrderNo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getMemo(), studentPaymentOrder.getOrganId(), payReceiver);
 
         studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
@@ -345,7 +437,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         HfMerchantConfig hfMerchantConfig;
         hfMerchantConfig = payConfigMap.get(payingOrder.getTenantId());
         if(hfMerchantConfig == null){
-            hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId());
+            hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId(), payingOrder.getPaymentChannel());
             if(hfMerchantConfig == null){
                 throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
             }
@@ -470,39 +562,91 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         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));//分佣金额
-            divMember.put("fee_flag", "Y");
-            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
-                divMember.put("member_id", 0);
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(order.getPaymentChannel());
+        
+
+    	if(hfMerchantConfig == null){
+    		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
+    	}
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", order.getTenantId());
+        }
+        
+        if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+        	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 {
+                    Map<String, Object> map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
+                    LOGGER.info("分账信息返回:{}", map);
+                    routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
+                    routeOrder.setUpdateTime(date);
+                    studentPaymentRouteOrderDao.update(routeOrder);
+                } catch (Exception e) {
+                    continue;
+                }
             }
-            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 {
-                Map<String, Object> map = Payment.createConfirm(confirm, hfMerchantConfig.getMerKey());
-                LOGGER.info("分账信息返回:{}", map);
-                routeOrder.setServiceFee(new BigDecimal(map.get("fee_amt").toString()));
-                routeOrder.setUpdateTime(date);
+        }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
+        	
+        	ApplyRequest request = new ApplyRequest();
+        	request.setParentMerchantNo(null);
+        	request.setMerchantNo(null);
+        	request.setOrderId(order.getOrderNo());
+        	request.setUniqueOrderNo(order.getTransNo());
+        	request.setDivideRequestId(idGeneratorService.generatorId("payment") + "");
+        	
+        	OrderQueryYopQueryOrderResDTOResult orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig.getAppId(), hfMerchantConfig.getPlatformPayeeMemberId(), order.getOrderNo());
+        	if(orderInfo == null) {
+        		throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
+        	}
+        	BigDecimal splitAmount = orderInfo.getUnSplitAmount();
+        	
+        	Map<String,String> divides = new HashMap<String, String>();
+        	
+        	StudentPaymentRouteOrder routeOrder = null;
+        	BigDecimal divideAmount = BigDecimal.ZERO;
+        	BigDecimal dividedAmount = BigDecimal.ZERO;
+        	for (int i = 0; i < routeOrders.size(); i++) {
+        		
+        		routeOrder = routeOrders.get(i);
+        		
+        		divides.put("ledgerNo", routeOrder.getMerNo());
+        		
+        		if(i + 1 == routeOrders.size()) {
+            		divideAmount = splitAmount.subtract(dividedAmount);
+            		divides.put("amount", divideAmount.toPlainString());
+        		}else {
+            		divideAmount = routeOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2, BigDecimal.ROUND_HALF_UP);
+            		divides.put("amount", divideAmount.toPlainString());
+        		}
+        		dividedAmount = dividedAmount.add(divideAmount);
+        		
+        		routeOrder.setServiceFee(routeOrder.getRouteAmount().subtract(divideAmount));
+        		routeOrder.setUpdateTime(date);
+        		
                 studentPaymentRouteOrderDao.update(routeOrder);
-            } catch (Exception e) {
-                continue;
-            }
+        	}
+        	request.setDivideDetail(JSON.toJSONString(divides));
+			request.getRequestConfig().setAppKey(hfMerchantConfig.getAppId());
+			
+        	ApplyYopOrderDivideResDTOResult result = yeepayPaymentService.divide(request);
+        	LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
         }
+        
         return true;
     }
 
@@ -810,11 +954,13 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (StringUtils.isBlank(transNo)) {
             return PayStatus.FAILED;
         }
+        
+    	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}]汇付商户信息找不到", studentPaymentOrder.getTenantId());
+        }
+        
         if (StringUtils.equals(paymentChannel, "ADAPAY")) {
-        	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")) {
@@ -849,6 +995,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     }
                 }
             }
+        }else if (StringUtils.equals(paymentChannel, "YQPAY")) {
+        	
         }
         throw new BizException("支付渠道错误");
     }
@@ -1487,7 +1635,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     public OrderCancelModel cancelOrder(StudentPaymentOrder order, String reason) {
         OrderCancelModel model = new OrderCancelModel();
         try {
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
             if(hfMerchantConfig == null){
                 throw new BizException("机构[{}]汇付商户信息找不到", order.getTenantId());
             }
@@ -1527,7 +1675,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             throw new BizException("0元订单");
         }
 
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId());
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(orderByOrderNo.getTenantId(), orderByOrderNo.getPaymentChannel());
         if(hfMerchantConfig == null){
             throw new BizException("请配置机构的汇付商户信息");
         }

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

@@ -81,7 +81,7 @@ public class StudentRechargeServiceImpl extends BaseServiceImpl<String, StudentR
         String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
 
 		try {
-			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback", baseApiUrl, "充值",
+			return payService.getPayMap(amount, BigDecimal.ZERO,studentRecharge.getOrderNo(), baseApiUrl + "/api-student/studentOrder/callback/" + studentRecharge.getOrderNo(), baseApiUrl, "充值",
 					"充值",userId,null);
 		} catch (Exception e) {
 			throw new BizException("调用支付接口出错", e);

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

@@ -459,7 +459,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -578,7 +578,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "商品销售",
                 "商品销售",
@@ -799,7 +799,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?type=edu&orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",
@@ -1054,7 +1054,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "乐器维修",
                 "乐器维修",

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

@@ -449,7 +449,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 amount,
                 balance,
                 orderNo,
-                baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
                 baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
                 "声部更换",
                 "声部更换",

+ 22 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java

@@ -1,6 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.HfMemberDao;
 import com.ym.mec.biz.dal.dao.SysPaymentConfigDao;
+import com.ym.mec.biz.dal.entity.HfMember;
 import com.ym.mec.biz.dal.entity.SysPaymentConfig;
 import com.ym.mec.biz.dal.enums.AccountType;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
@@ -8,16 +16,13 @@ import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
 @Service
 public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPaymentConfig> implements SysPaymentConfigService {
     @Autowired
     private SysPaymentConfigDao sysPaymentConfigDao;
+    
+    @Autowired
+    private HfMemberDao hfMemberDao;
 
     @Override
     public BaseDAO<Integer, SysPaymentConfig> getDAO() {
@@ -25,8 +30,17 @@ public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPay
     }
 
     @Override
-    public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
-        return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+    public SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId) {
+    	SysPaymentConfig sysPaymentConfig =  sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+    	
+    	if(sysPaymentConfig != null) {
+    		HfMember hfMember = hfMemberDao.getByOrganId(organId, paymentChannel.getCode());
+    		sysPaymentConfig.setHfMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setYqMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setPayType(PaymentChannelEnum.codeOf(hfMember.getPayerName()));
+    	}
+    	
+    	return sysPaymentConfig;
     }
 
     @Override

+ 43 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -349,37 +349,53 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
 
     //主动去第三方查询订单状态
     private void checkTransOrderState(TenantOrderRecord orderRecord) {
-        if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
-            Map<String, Object> payment;
-            try {
-                Integer tenantId = orderRecord.getTenantId();
-                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");
-                //判断状态是成功还是失败
-                if (status.equals("succeeded")) {
-                    orderRecord.setOrderState(1);
-                } else if (Objects.nonNull(payment.get("error_code"))) {
-                    //若状态是失败则判断code
-                    if (!PAYMENT_ID_NOT_EXISTS.equals(payment.get("error_code"))) {
-                        //不等于这个异常都是失败
+        Map<String, Object> payment = new HashMap<String, Object>();
+        try {
+            Integer tenantId = orderRecord.getTenantId();
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, orderRecord.getPaymentChannel());
+            if (hfMerchantConfig == null) {
+                throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+            }
+            
+            PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(orderRecord.getPaymentChannel());
+            
+            switch (paymentChannel) {
+			case ADAPAY:
+				payment = Payment.queryPayment(orderRecord.getTransNo(), hfMerchantConfig.getMerKey());
+				break;
+				
+			case YEEPAY:
+				
+				break;
+				
+			case YQPAY:
+				
+				break;
+
+			default:
+				break;
+			}
+
+            log.info("    >>>>> checkTenantOrder  payment start");
+            String status = (String) payment.get("status");
+            //判断状态是成功还是失败
+            if (status.equals("succeeded")) {
+                orderRecord.setOrderState(1);
+            } else if (Objects.nonNull(payment.get("error_code"))) {
+                //若状态是失败则判断code
+                if (!PAYMENT_ID_NOT_EXISTS.equals(payment.get("error_code"))) {
+                    //不等于这个异常都是失败
+                    orderRecord.setOrderState(2);
+                } else {
+                    if (timeOutCheck(orderRecord.getCreatedTime())) {
                         orderRecord.setOrderState(2);
-                    } else {
-                        if (timeOutCheck(orderRecord.getCreatedTime())) {
-                            orderRecord.setOrderState(2);
-                        }
                     }
                 }
-                log.info("    >>>>> checkTenantOrder orderType {} payment >>>>> {}", orderRecord.getOrderType(), payment);
-                log.info("    >>>>> checkTenantOrder  orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
-            } catch (Exception e) {
-                log.error("    >>>>> checkTenantOrder  payment error>>>>> {}", JSON.toJSONString(orderRecord));
             }
+            log.info("    >>>>> checkTenantOrder orderType {} payment >>>>> {}", orderRecord.getOrderType(), payment);
+            log.info("    >>>>> checkTenantOrder  orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
+        } catch (Exception e) {
+            log.error("    >>>>> checkTenantOrder  payment error>>>>> {}", JSON.toJSONString(orderRecord));
         }
     }
 

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

@@ -628,7 +628,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				amount,
 				studentPaymentOrder.getBalancePaymentAmount(),
 				orderNo,
-				baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
 				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 				"学员活动购买",
 				vipGroupActivity.getName(),
@@ -809,7 +809,7 @@ public class VipGroupActivityServiceImpl extends BaseServiceImpl<Integer, VipGro
 				studentPaymentOrder.getActualAmount(),
 				studentPaymentOrder.getBalancePaymentAmount(),
 				orderNo,
-				baseApiUrl + "/api-student/studentOrder/callback",
+                baseApiUrl + "/api-student/studentOrder/callback/" + orderNo,
 				baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
 				orderSubject,
 				orderSubject,

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

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

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml

@@ -234,4 +234,10 @@
         LIMIT 1
     </select>
 
+    <select id="getByOrganId" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE organ_id_ = #{organId} and payer_name_ = #{payerName}
+    </select>
+
 </mapper>

+ 15 - 3
mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml

@@ -16,6 +16,9 @@
 		<result column="expend_params_" property="expendParams" />
 		<result column="wx_app_id_" property="wxAppId" />
 		<result column="wx_app_secret_" property="wxAppSecret" />
+		<result column="alipay_app_id_" property="alipayAppId" />
+		<result column="alipay_private_key_" property="alipayPrivateKey" />
+		<result column="alipay_public_key_" property="alipayPublicKey" />
 		<result column="platform_payee_member_id_" property="platformPayeeMemberId" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
@@ -30,7 +33,7 @@
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="HfMerchantConfig">
-		SELECT * FROM hf_merchant_config ORDER
+		SELECT * FROM hf_merchant_config WHERE payer_name_ = #{payerName} ORDER
 		BY id_
 	</select>
 
@@ -40,8 +43,8 @@
 		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO hf_merchant_config
-		(id_,payer_name_,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},#{payerName},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
+		(id_,payer_name_,app_id_,mer_key_,api_key_,mock_api_key_,rsa_private_key_,rsa_public_key_,expend_params_,wx_app_id_,wx_app_secret_,alipay_app_id_,alipay_private_key_,alipay_public_key_,create_time_,update_time_,tenant_id_,platform_payee_member_id_)
+		VALUES(#{id},#{payerName},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{alipayAppId},#{alipayPrivateKey},#{alipayPublicKey},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -93,6 +96,15 @@
 			<if test="wxAppSecret != null">
 				wx_app_secret_ = #{wxAppSecret},
 			</if>
+			<if test="alipayAppId != null">
+				alipay_app_id_ = #{alipayAppId},
+			</if>
+			<if test="alipayPrivateKey != null">
+				alipay_private_key_ = #{alipayPrivateKey},
+			</if>
+			<if test="alipayPublicKey != null">
+				alipay_public_key_ = #{alipayPublicKey},
+			</if>
 		</set>
 		WHERE id_ = #{id}
 	</update>

+ 2 - 12
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -8,7 +8,6 @@
 
     <resultMap type="com.ym.mec.biz.dal.entity.StudentPaymentOrder" id="StudentPaymentOrder">
         <result column="id_" property="id"/>
-        <result column="payer_name_" property="payerName"/>
         <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="user_id_" property="userId"/>
         <result column="organ_id_" property="organId"/>
@@ -106,13 +105,13 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentOrder" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO student_payment_order
-        (payer_name_, group_type_, user_id_, organ_id_, routing_organ_id_, type_, expect_amount_, actual_amount_, com_amount_,
+        (group_type_, user_id_, organ_id_, routing_organ_id_, type_, expect_amount_, actual_amount_, com_amount_,
          per_amount_,
          balance_payment_amount_, remit_fee_, course_remit_fee_, trans_no_,
          status_, memo_, create_time_, update_time_, payment_channel_, payment_business_channel_,
          payment_account_no_, mer_nos_, order_no_, music_group_id_, class_group_id_, pay_time_,batch_no_,coupon_code_id_,
          coupon_remit_fee_,activity_id_,activity_buy_num_,tenant_id_,calender_id_)
-        VALUES (#{payerName}, #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        VALUES (#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 #{userId}, #{organId}, #{routingOrganId},
                 #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
                 #{expectAmount}, #{actualAmount}, #{comAmount}, #{perAmount}, #{balancePaymentAmount},
@@ -128,9 +127,6 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentPaymentOrder">
         UPDATE student_payment_order
         <set>
-            <if test="payerName != null">
-                payer_name_ = #{payerName},
-            </if>
             <if test="activityBuyNum != null">
                 activity_buy_num_ = #{activityBuyNum},
             </if>
@@ -224,9 +220,6 @@
 		<foreach collection="studentPaymentOrderList" item="studentPaymentOrder" separator=";">
 	        UPDATE student_payment_order
 	        <set>
-	            <if test="studentPaymentOrder.payerName != null">
-	                payer_name_ = #{studentPaymentOrder.payerName},
-	            </if>
                 <if test="studentPaymentOrder.activityBuyNum != null">
                     activity_buy_num_ = #{studentPaymentOrder.activityBuyNum},
                 </if>
@@ -453,9 +446,6 @@
             <if test="paymentStatus != null">
                 AND spo.status_ = #{paymentStatus}
             </if>
-            <if test="payerName != null">
-                AND spo.payer_name_ = #{payerName}
-            </if>
             <if test="paymentChannel != null">
                 AND spo.payment_channel_ NOT IN (#{paymentChannel})
             </if>

+ 18 - 0
mec-student/pom.xml

@@ -15,6 +15,13 @@
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>org.bouncycastle</groupId>
+  					<artifactId>bcprov-jdk15on</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 
 		<dependency>
@@ -66,6 +73,17 @@
 		<dependency>
 			<groupId>com.yonge.log</groupId>
 			<artifactId>audit-log</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>bouncycastle</groupId>
+					<artifactId>bcprov-jdk14</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>org.bouncycastle</groupId>
+  					<artifactId>bctsp-jdk14</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
     </dependencies>
 	<build>

+ 190 - 61
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,18 +1,117 @@
 package com.ym.mec.student.controller;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+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.io.IOUtils;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+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 com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.beust.jcommander.internal.Maps;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
+import com.yeepay.yop.sdk.http.YopContentType;
+import com.yeepay.yop.sdk.service.common.YopCallbackEngine;
+import com.yeepay.yop.sdk.service.common.callback.YopCallback;
+import com.yeepay.yop.sdk.service.common.callback.YopCallbackRequest;
 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.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.TempBuyDoubleElevenUserLogDao;
+import com.ym.mec.biz.dal.dao.VipGroupCategoryDao;
+import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
+import com.ym.mec.biz.dal.dto.ConditionDto;
+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.SysConfigJsonDto;
+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.TempBuyDoubleElevenUserLog;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.VipGroupActivity;
+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.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
-import com.ym.mec.biz.service.*;
+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.VipGroupActivityService;
+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;
@@ -21,27 +120,12 @@ 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;
+import com.ym.mec.util.web.WebUtil;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-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 javax.servlet.http.HttpServletRequest;
-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;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -123,51 +207,95 @@ public class StudentOrderController extends BaseController {
         return succeed(studentPaymentOrderPageInfo);
     }
 
-    @PostMapping("/callback")
-	public String callback(HttpServletRequest request) {
+    @PostMapping("/callback/{orderNo}")
+	public String callback(@PathVariable("orderNo") String orderNo, HttpServletRequest request) {
+		
+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(orderNo);
+		
+		if(studentPaymentOrder == null) {
+			return "订单号错误";
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(studentPaymentOrder.getPaymentChannel());
+		
 		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)) {
+			switch (paymentChannel) {
+			case ADAPAY:
+				// 验签请参data
+				String data = request.getParameter("data");
+				// 验签请参sign
+				String sign = request.getParameter("sign");
 				
-				JSONObject dataObj = JSON.parseObject(data);
+				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 "验签失败";
+				}
+				break;
+			case YEEPAY:
+				String callbackUrl = "/studentOrder/callback/{orderNo}";
+				// 这个是您收到的header,为了方便测试,下面提供了示例数据
+				Map<String, String> headers = Maps.newHashMap();
+				headers.put("Authorization", request.getHeader("Authorization"));
+				headers.put("x-yop-content-sm3", request.getHeader("x-yop-content-sm3"));
+				headers.put("x-yop-encrypt", request.getHeader("x-yop-encrypt"));
+				headers.put("x-yop-request-id", request.getHeader("x-yop-request-id"));
+				headers.put("x-yop-sign-serial-no", request.getHeader("x-yop-sign-serial-no"));
+				headers.put("x-yop-appkey", request.getHeader("x-yop-appkey"));
+				headers.put("Content-Type", request.getHeader("Content-Type"));
 				
-				String transType = request.getParameter("type");
+				String content = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
+				// 构造结果通知请求对象
+				YopCallbackRequest yopCallbackRequest =
+				        new YopCallbackRequest(callbackUrl, "POST")
+				                .setContentType(YopContentType.JSON)
+				                .setHeaders(headers)
+				                .setContent(content);
 				
-				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;
+				YopCallback callback = YopCallbackEngine.parse(yopCallbackRequest);
+				
+				System.out.println("支付回调信息:" + JSON.toJSONString(callback));
+				
+				
+				break;
 
-				default:
-					break;
-				}
-			} else {
-				return "验签失败";
+			default:
+				break;
 			}
+
+			
 		} catch (Exception e) {
 			return e.getMessage();
 		}
@@ -373,8 +501,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(@RequestBody PaymentParam paymentParam) {
+    public Object executePayment(@RequestBody PaymentParam paymentParam, HttpServletRequest request) {
         try {
+        	paymentParam.setIp(WebUtil.getRemoteIp(request));
             Map<String, Object> payment = orderPayOpsService.executePayment(paymentParam);
             return succeed(payment);
         } catch (Exception e) {

+ 24 - 3
mec-thirdparty/pom.xml

@@ -23,10 +23,23 @@
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>mec-util</artifactId>
+			
+			<exclusions>
+				<exclusion>
+					<groupId>bouncycastle</groupId>
+					<artifactId>bcprov-jdk14</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>
+						org.bouncycastle</groupId>
+  					<artifactId>bctsp-jdk14</artifactId>
+				</exclusion>
+			</exclusions>
 		</dependency>
 
 		<dependency>
-			<groupId>com.aliyun.oss</groupId>
+			<groupId>
+				com.aliyun.oss</groupId>
 			<artifactId>
 				aliyun-sdk-oss</artifactId>
 			<version>2.8.3</version>
@@ -135,7 +148,8 @@
 		</dependency>
 
 		<dependency>
-			<groupId>com.yeepay.yop.sdk</groupId>
+			<groupId>
+				com.yeepay.yop.sdk</groupId>
 			<artifactId>
 				yop-java-sdk-crypto-inter</artifactId>
 			<version>${yop-java-sdk.version}</version>
@@ -149,10 +163,17 @@
 		</dependency>
 		
 		<dependency>
-		  <groupId>com.yeepay.yop.sdk</groupId>
+		  <groupId>
+				com.yeepay.yop.sdk</groupId>
 		  <artifactId>yop-java-sdk-biz</artifactId>
 		  <version>4.3.3</version>
 		</dependency>
+
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.35.154.ALL</version>
+		</dependency>
 	</dependencies>
 
 </project>

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

@@ -10,6 +10,8 @@ public class HfMerchantConfig {
 	/**  */
 	private Integer id;
 	
+	private String payerName;
+	
 	private String appId;
 	
 	/**  */
@@ -34,6 +36,12 @@ public class HfMerchantConfig {
 	
 	private String wxAppSecret;
 	
+	private String alipayAppId;
+	
+	private String alipayPrivateKey;
+	
+	private String alipayPublicKey;
+	
 	private String platformPayeeMemberId;
 	
 	/**  */
@@ -53,6 +61,14 @@ public class HfMerchantConfig {
 		return this.id;
 	}
 			
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
 	public String getAppId() {
 		return appId;
 	}
@@ -125,6 +141,30 @@ public class HfMerchantConfig {
 		this.wxAppSecret = wxAppSecret;
 	}
 
+	public String getAlipayAppId() {
+		return alipayAppId;
+	}
+
+	public void setAlipayAppId(String alipayAppId) {
+		this.alipayAppId = alipayAppId;
+	}
+
+	public String getAlipayPrivateKey() {
+		return alipayPrivateKey;
+	}
+
+	public void setAlipayPrivateKey(String alipayPrivateKey) {
+		this.alipayPrivateKey = alipayPrivateKey;
+	}
+
+	public String getAlipayPublicKey() {
+		return alipayPublicKey;
+	}
+
+	public void setAlipayPublicKey(String alipayPublicKey) {
+		this.alipayPublicKey = alipayPublicKey;
+	}
+
 	public String getPlatformPayeeMemberId() {
 		return platformPayeeMemberId;
 	}

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java

@@ -63,12 +63,12 @@ public class TsignPlugin implements ESealPlugin, InitializingBean, DisposableBea
         projectconfig.setItsmApiUrl(apisUrl);
         Result result = ServiceClientManager.registClient(projectconfig, null, null);
         if (result.getErrCode() != 0) {
-            throw new ThirdpartyException("e签宝客户端注册失败:{}", result.getMsg());
+            //throw new ThirdpartyException("e签宝客户端注册失败:{}", result.getMsg());
         }
 
         serviceClient = ServiceClientManager.get(projectId);
         if (serviceClient == null) {
-            throw new ThirdpartyException("获取e签宝客户端失败");
+            //throw new ThirdpartyException("获取e签宝客户端失败");
         }
     }
 

+ 44 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/CustomFixedCredentialsProvider.java

@@ -0,0 +1,44 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.stereotype.Service;
+
+import com.yeepay.yop.sdk.auth.credentials.provider.YopCredentialsProviderRegistry;
+import com.yeepay.yop.sdk.base.auth.credentials.provider.YopFixedCredentialsProvider;
+import com.yeepay.yop.sdk.base.config.YopAppConfig;
+import com.yeepay.yop.sdk.config.enums.CertStoreType;
+import com.yeepay.yop.sdk.config.provider.file.YopCertConfig;
+import com.yeepay.yop.sdk.security.CertTypeEnum;
+
+@Service
+public class CustomFixedCredentialsProvider extends YopFixedCredentialsProvider implements InitializingBean {
+	
+
+	@Override
+	protected YopAppConfig loadAppConfig(String appKey) {
+		YopAppConfig yopAppConfig = new YopAppConfig();
+        yopAppConfig.setAppKey(appKey);
+
+        // SM2 example
+        YopCertConfig sm2CertConfig = new YopCertConfig();
+        sm2CertConfig.setCertType(CertTypeEnum.SM2);
+        sm2CertConfig.setStoreType(CertStoreType.STRING);
+        sm2CertConfig.setValue("MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgovmtg+OfLQSQjXwOTQSzCOJpEoJVSrm4yihMnfll8EmgCgYIKoEcz1UBgi2hRANCAAQASCp67G9rSFr1N9hFF+GZN4raqPC4qrsJsEt1dG8XITLPGRA0Vg9ebcYfZdXW29DROtBshoT0bXetOQKz2Ngh");
+
+        // load into sdk config
+        List<YopCertConfig> isvPrivateKeys = new ArrayList<YopCertConfig>();
+        isvPrivateKeys.add(sm2CertConfig);
+        yopAppConfig.setIsvPrivateKey(isvPrivateKeys);
+        
+        return yopAppConfig;
+	}
+
+	@Override
+	public void afterPropertiesSet() throws Exception {
+		YopCredentialsProviderRegistry.registerProvider(this);
+	}
+
+}

+ 67 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java

@@ -0,0 +1,67 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.yeepay.yop.sdk.exception.YopClientException;
+import com.yeepay.yop.sdk.service.aggpay.AggpayClient;
+import com.yeepay.yop.sdk.service.aggpay.AggpayClientBuilder;
+import com.yeepay.yop.sdk.service.aggpay.request.PrePayRequest;
+import com.yeepay.yop.sdk.service.aggpay.response.PrePayResponse;
+import com.yeepay.yop.sdk.service.divide.DivideClient;
+import com.yeepay.yop.sdk.service.divide.DivideClientBuilder;
+import com.yeepay.yop.sdk.service.divide.model.ApplyYopOrderDivideResDTOResult;
+import com.yeepay.yop.sdk.service.divide.request.ApplyRequest;
+import com.yeepay.yop.sdk.service.divide.response.ApplyResponse;
+import com.yeepay.yop.sdk.service.trade.TradeClient;
+import com.yeepay.yop.sdk.service.trade.TradeClientBuilder;
+import com.yeepay.yop.sdk.service.trade.model.OrderQueryYopQueryOrderResDTOResult;
+import com.yeepay.yop.sdk.service.trade.request.OrderQueryRequest;
+
+@Service
+public class YeepayPaymentService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayPaymentService.class);
+
+	private final AggpayClient aggpayApi = AggpayClientBuilder.builder().build();
+
+	private final TradeClient tradApi = TradeClientBuilder.builder().build();
+
+	private final DivideClient divideApi = DivideClientBuilder.builder().build();
+
+	public Map<String, Object> prePay(PrePayRequest request) throws YopClientException {
+
+		LOGGER.info("易宝[创建支付对象] Req:{}", JSON.toJSONString(request));
+		PrePayResponse response = aggpayApi.prePay(request);
+
+		String resp = JSON.toJSONString(response.getResult());
+
+		LOGGER.info("易宝[创建支付对象] Resp:{}", resp);
+
+		return JSON.parseObject(resp, Map.class);
+	}
+
+	public OrderQueryYopQueryOrderResDTOResult queryOrder(String appKey, String merchantNo, String orderNo) {
+		OrderQueryRequest request = new OrderQueryRequest();
+		request.getRequestConfig().setAppKey(appKey);
+		request.setParentMerchantNo(merchantNo);
+		request.setMerchantNo(merchantNo);
+		request.setOrderId(orderNo);
+
+		OrderQueryYopQueryOrderResDTOResult response = tradApi.orderQuery(request).getResult();
+		LOGGER.info("易宝[订单查询][{}] Resp:{}", orderNo, response);
+
+		return response;
+	}
+
+	public ApplyYopOrderDivideResDTOResult divide(ApplyRequest request) {
+		ApplyResponse response = divideApi.apply(request);
+		LOGGER.info("易宝[分账][{}] Resp:{}", request.getOrderId(), response.getResult());
+
+		return response.getResult();
+	}
+}

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java

@@ -44,7 +44,7 @@ public class SysPaymentConfigController extends BaseController {
         if (sysPaymentConfig.getOrganId() == null) {
             return failed("请选择分部");
         }
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(sysPaymentConfig.getOrganId());
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(sysPaymentConfig.getPayType(), sysPaymentConfig.getOrganId());
         if (paymentConfig != null) {
             return failed("此分部配置已经存在");
         }
@@ -125,7 +125,7 @@ public class SysPaymentConfigController extends BaseController {
         if (StringUtils.isBlank(config.getTypeRouteScale())) {
             return failed("分润配置不能为空");
         }
-        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(config.getOrganId());
+        SysPaymentConfig paymentConfig = sysPaymentConfigService.findPaymentConfigByOrganId(config.getPayType(), config.getOrganId());
         if (paymentConfig != null && StringUtils.isNotBlank(paymentConfig.getTypeRouteScale())) {
             return failed("此分部配置存在,请核查");
         }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java

@@ -89,7 +89,7 @@ public class AdapayController extends BaseController {
 			
 			String memberId = dataObj.getString("member_id");
 			
-			HfMember hfMember = hfMemberService.getByMemberId(memberId);
+			HfMember hfMember = hfMemberService.getByMemberId(memberId, PaymentChannelEnum.ADAPAY.getCode());
 			if(hfMember == null){
 				return "账户["+ memberId +"]在系统中不存在";
 			}