瀏覽代碼

Merge remote-tracking branch 'origin/saas' into saas

zouxuan 2 年之前
父節點
當前提交
6d7d846694
共有 63 個文件被更改,包括 2319 次插入501 次删除
  1. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/config/AdapayNotifyConstants.java
  2. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMemberDao.java
  3. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMerchantConfigDao.java
  4. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  5. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PaymentParam.java
  6. 51 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/YeepayMember.java
  7. 89 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrder.java
  9. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PaymentChannelEnum.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/HfMemberQueryInfo.java
  11. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMemberService.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/HfMerchantConfigService.java
  13. 1 3
      mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java
  14. 7 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentPaymentOrderService.java
  15. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  16. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysPaymentConfigService.java
  17. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantOrderRecordService.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  19. 2 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  22. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  23. 118 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java
  24. 11 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMerchantConfigServiceImpl.java
  25. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java
  26. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  27. 108 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java
  28. 134 80
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  29. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  30. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  31. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  32. 290 94
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  33. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRechargeServiceImpl.java
  34. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  35. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  36. 45 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java
  37. 14 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  38. 170 80
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  39. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupActivityServiceImpl.java
  40. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  41. 55 8
      mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml
  42. 23 4
      mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml
  43. 0 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  44. 18 0
      mec-student/pom.xml
  45. 1 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  46. 201 59
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  47. 二進制
      mec-thirdparty/libs/yop-java-sdk-3.2.25-jdk18json.jar
  48. 75 22
      mec-thirdparty/pom.xml
  49. 1 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java
  50. 40 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/entity/HfMerchantConfig.java
  51. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/eseal/provider/TsignPlugin.java
  52. 108 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java
  53. 106 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java
  54. 41 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java
  55. 260 0
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/entity/MerchantInfo.java
  56. 0 0
      mec-thirdparty/src/test/resources/yeepay_config.json
  57. 1 1
      mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java
  58. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java
  59. 21 10
      mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java
  60. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/SysPaymentConfigController.java
  61. 3 3
      mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java
  62. 11 3
      mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java
  63. 199 0
      mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java

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

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

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

@@ -13,7 +13,7 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @param memberId
      * @return
      */
-    HfMember getByMemberId(@Param("memberId") String memberId);
+    HfMember getByMemberId(@Param("memberId") String memberId, @Param("payerName") String payerName);
 
     /**
      * 根据名字获取商户信息
@@ -21,6 +21,10 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @param name
      * @return
      */
-    HfMember getByName(@Param("name") String name);
+    HfMember getByName(@Param("name") String name, @Param("payerName") String payerName);
+    
+    HfMember getByOrganId(@Param("organId") Integer organId, @Param("payerName") String payerName);
+    
+    HfMember queryByRequestNo(String requestNo);
 
 }

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/HfMerchantConfigDao.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.dal.dao;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 public interface HfMerchantConfigDao extends BaseDAO<Integer, HfMerchantConfig> {
 
-	HfMerchantConfig queryByTenantId(Integer tenantId);
+	HfMerchantConfig queryByTenantId(@Param("tenantId") Integer tenantId, @Param("payerName") String payerName);
 }

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

@@ -122,7 +122,7 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status, @Param("paymentChannel") String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(@Param("status") DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单

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

@@ -14,8 +14,14 @@ public class PaymentParam {
     private String platform;
     private Integer tenantId;
     
+    private String payerName;
+    
     private String notifyUrl;
     
+    private String ip;
+    
+    private String merNo;
+    
 
     public PaymentParam() {
     }
@@ -100,6 +106,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 +121,20 @@ public class PaymentParam {
 	public void setNotifyUrl(String notifyUrl) {
 		this.notifyUrl = notifyUrl;
 	}
+
+	public String getIp() {
+		return ip;
+	}
+
+	public void setIp(String ip) {
+		this.ip = ip;
+	}
+
+	public String getMerNo() {
+		return merNo;
+	}
+
+	public void setMerNo(String merNo) {
+		this.merNo = merNo;
+	}
 }

+ 51 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/YeepayMember.java

@@ -0,0 +1,51 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.HfMember;
+
+public class YeepayMember extends HfMember {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1180936467758136290L;
+
+	private String legalLicenceFrontUrl; // 法人证件人像面照片 请上传带有人像面的法人证件照片
+
+	private String legalLicenceBackUrl; // 法人证件非人像面照片
+	
+	private String licenceUrl; //商户证件照片
+	
+	private String openAccountLicenceUrl; //开户许可证照片
+
+	public String getLegalLicenceFrontUrl() {
+		return legalLicenceFrontUrl;
+	}
+
+	public void setLegalLicenceFrontUrl(String legalLicenceFrontUrl) {
+		this.legalLicenceFrontUrl = legalLicenceFrontUrl;
+	}
+
+	public String getLegalLicenceBackUrl() {
+		return legalLicenceBackUrl;
+	}
+
+	public void setLegalLicenceBackUrl(String legalLicenceBackUrl) {
+		this.legalLicenceBackUrl = legalLicenceBackUrl;
+	}
+
+	public String getLicenceUrl() {
+		return licenceUrl;
+	}
+
+	public void setLicenceUrl(String licenceUrl) {
+		this.licenceUrl = licenceUrl;
+	}
+
+	public String getOpenAccountLicenceUrl() {
+		return openAccountLicenceUrl;
+	}
+
+	public void setOpenAccountLicenceUrl(String openAccountLicenceUrl) {
+		this.openAccountLicenceUrl = openAccountLicenceUrl;
+	}
+}

+ 89 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/HfMember.java

@@ -17,6 +17,10 @@ public class HfMember extends BaseEntity {
 
 	@ApiModelProperty(value = "id",required = true)
     private Integer Id;
+	
+	private String payerName;
+	
+	private String requestNo;
     
     private Integer organId;
 
@@ -31,6 +35,9 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "城市编号",required = true)
     private String areaCode;
+    
+    @ApiModelProperty(value = "区编号",required = false)
+    private String districtCode;
 
     @ApiModelProperty(value = "统一社会信用码",required = true)
     private String socialCreditCode;
@@ -43,6 +50,9 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "法人",required = true)
     private String legalPerson;
+    
+    @ApiModelProperty(value = "法人证件类型",required = true)
+    private String legalLicenceType;
 
     @ApiModelProperty(value = "法人身份证号",required = true)
     private String legalCertId;
@@ -96,6 +106,18 @@ public class HfMember extends BaseEntity {
 
     @ApiModelProperty(value = "满额后收款分部",required = true)
     private Integer routeOrganId;
+    
+    @ApiModelProperty(value = "联系人姓名",required = false)
+    private String contactName;
+    
+    @ApiModelProperty(value = "联系人证件号码",required = false)
+    private String contactLicenceNo;
+    
+    @ApiModelProperty(value = "联系人手机号码",required = false)
+    private String contactMobile;
+    
+    @ApiModelProperty(value = "联系人邮箱",required = false)
+    private String contactEmail;
 
     public Integer getId() {
         return Id;
@@ -105,7 +127,23 @@ public class HfMember extends BaseEntity {
         Id = id;
     }
 
-    public String getMemberId() {
+    public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
+
+	public String getRequestNo() {
+		return requestNo;
+	}
+
+	public void setRequestNo(String requestNo) {
+		this.requestNo = requestNo;
+	}
+
+	public String getMemberId() {
         return memberId;
     }
 
@@ -137,7 +175,15 @@ public class HfMember extends BaseEntity {
         this.areaCode = areaCode;
     }
 
-    public String getSocialCreditCode() {
+    public String getDistrictCode() {
+		return districtCode;
+	}
+
+	public void setDistrictCode(String districtCode) {
+		this.districtCode = districtCode;
+	}
+
+	public String getSocialCreditCode() {
         return socialCreditCode;
     }
 
@@ -169,7 +215,15 @@ public class HfMember extends BaseEntity {
         this.legalPerson = legalPerson;
     }
 
-    public String getLegalCertId() {
+    public String getLegalLicenceType() {
+		return legalLicenceType;
+	}
+
+	public void setLegalLicenceType(String legalLicenceType) {
+		this.legalLicenceType = legalLicenceType;
+	}
+
+	public String getLegalCertId() {
         return legalCertId;
     }
 
@@ -320,4 +374,36 @@ public class HfMember extends BaseEntity {
 	public void setCardName(String cardName) {
 		this.cardName = cardName;
 	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public String getContactName() {
+		return contactName;
+	}
+
+	public void setContactName(String contactName) {
+		this.contactName = contactName;
+	}
+
+	public String getContactLicenceNo() {
+		return contactLicenceNo;
+	}
+
+	public void setContactLicenceNo(String contactLicenseNo) {
+		this.contactLicenceNo = contactLicenseNo;
+	}
+
+	public String getContactMobile() {
+		return contactMobile;
+	}
+
+	public void setContactMobile(String contactMobile) {
+		this.contactMobile = contactMobile;
+	}
 }

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

@@ -27,7 +27,7 @@ public class StudentPaymentOrder extends BaseEntity {
 	private Long id;
 	
 	private GroupType groupType;
-
+	
 	@Version
 	private Integer version;
 	/**  */

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/PaymentChannelEnum.java

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.dal.enums;
 
+import org.apache.commons.lang3.StringUtils;
+
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum PaymentChannelEnum implements BaseEnum<String, PaymentChannelEnum> {
 	YQPAY("YQPAY", "双乾"),
 	ADAPAY("ADAPAY", "汇付"),
+	YEEPAY("YEEPAY", "易宝"),
 	BALANCE("BALANCE", "余额"),
 	UNIONPAY("UNIONPAY", "银联");
 
@@ -25,5 +28,14 @@ public enum PaymentChannelEnum implements BaseEnum<String, PaymentChannelEnum> {
 	public String getDesc() {
 		return desc;
 	}
+	
+	public static PaymentChannelEnum codeOf(String code) {
+		for (PaymentChannelEnum pce : values()) {
+			if (StringUtils.equals(pce.code, code)) {
+				return pce;
+			}
+		}
+		return null;
+	}
 
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/HfMemberQueryInfo.java

@@ -9,6 +9,8 @@ public class HfMemberQueryInfo extends QueryInfo {
     private String memberId;
 
     private String status;
+    
+    private String payerName;
 
     public String getName() {
         return name;
@@ -33,4 +35,12 @@ public class HfMemberQueryInfo extends QueryInfo {
     public void setStatus(String status) {
         this.status = status;
     }
+
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
 }

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

@@ -14,7 +14,11 @@ public interface HfMemberService extends BaseService<Integer, HfMember> {
      * @param memberId
      * @return
      */
-    HfMember getByMemberId(String memberId);
+    HfMember getByMemberId(String memberId, String payerName);
+    
+    HfMember getByOrganId(Integer organId, String payerName);
+
+    HfMember queryByRequestNo(String requestNo);
 
     boolean createMember(HfMember member, File file) throws Exception;
 

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

@@ -5,5 +5,5 @@ import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 
 public interface HfMerchantConfigService extends BaseService<Integer, HfMerchantConfig> {
 
-	HfMerchantConfig queryByTenantId(Integer tenantId);
+	HfMerchantConfig queryByTenantId(Integer tenantId, String payerName);
 }

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

@@ -3,8 +3,6 @@ package com.ym.mec.biz.service;
 import java.math.BigDecimal;
 import java.util.Map;
 
-import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
-
 /**
  * 支付服务类
  */
@@ -40,6 +38,6 @@ public interface PayService {
 	 * @return
 	 * @throws Exception
 	 */
-	Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
+	Map<String, Object> getPayToPlatformMap(Integer tenantId, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
 			String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception;
 }

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

@@ -80,7 +80,7 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @param status
      * @return
      */
-    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel);
+    List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status);
 
     /**
      * 查询支付中超时的订单
@@ -99,12 +99,10 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      *  检查并修改订单状态
      *
      * @param date
-     * @param payConfigMap
      * @param payingOrder
-     * @param checkTime
      * @return
      */
-    OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception;
+    OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder) throws Exception;
 
     //退优惠券和余额
     void quitCouponAndBalance(StudentPaymentOrder order);
@@ -162,6 +160,11 @@ public interface StudentPaymentOrderService extends BaseService<Long, StudentPay
      * @return
      */
     List<StudentPaymentOrder> reConfirmOrder(Date startTime, Date endTime);
+    
+    /**
+     * 分账
+     */
+    Boolean confirmOrder(StudentPaymentOrder order);
 
     /**
      * 获取学生报名的订单

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

@@ -425,6 +425,10 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String CLOSE_CLASS_STUDENT_REMIND_TIME = "close_class_student_remind_time";
     // 直播课程开始前XX分钟,发送通知
     String LIVE_CLASS_START_REMIND_TIME = "live_class_start_remind_time";
+	
+	//支付渠道
+	String PAYMENT_CHANNEL = "payment_channel";
+
 
     static void checkActivityDate(String startTimeStr, String endTimeStr) {
         if(StringUtils.isEmpty(startTimeStr) || StringUtils.isEmpty(startTimeStr)){

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

@@ -8,6 +8,7 @@ import com.ym.mec.common.service.BaseService;
 import java.util.List;
 
 public interface SysPaymentConfigService extends BaseService<Integer, SysPaymentConfig> {
+	
 
     /**
      * 根据分部id获取配置
@@ -17,11 +18,18 @@ public interface SysPaymentConfigService extends BaseService<Integer, SysPayment
     SysPaymentConfig findPaymentConfigByOrganId(Integer organId);
 
     /**
+     * 根据分部id获取配置
+     * @param organId
+     * @return
+     */
+    SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId);
+
+    /**
      * 根据分部ids获取配置
      * @param organIds
      * @return
      */
-    List<SysPaymentConfig> findPaymentConfigByOrganIds(List<Integer> organIds);
+    List<SysPaymentConfig> findPaymentConfigByOrganIds(PaymentChannelEnum paymentChannel, List<Integer> organIds);
 
 
     /**

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

@@ -33,7 +33,7 @@ public interface TenantOrderRecordService extends IService<TenantOrderRecord> {
 
     void rechargeSuccess(TenantOrderRecord record);
 
-    String callback(HttpServletRequest request);
+    String callback(String orderNo, HttpServletRequest request);
 
 }
 

+ 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,

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

@@ -194,12 +194,11 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         //消费大于0元则拉起支付
         if (payAmount.compareTo(BigDecimal.ZERO) > 0) {
             payMap = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     payAmount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-student/studentOrder/callback",
-                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
+                    baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
             );

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

@@ -584,7 +584,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,
                 "考级报名活动",
                 "考级报名活动",

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

@@ -470,7 +470,7 @@ public class ExportServiceImpl implements ExportService {
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
             Map<String, Object> paymentList = null;
-            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.ADAPAY.getCode());
             if (hfMerchantConfig == null) {
                 throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
             }

+ 118 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java

@@ -1,9 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Date;
+import java.util.Map;
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -12,7 +13,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
 import com.ym.mec.biz.dal.dao.HfMemberDao;
+import com.ym.mec.biz.dal.dto.YeepayMember;
 import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -23,6 +26,9 @@ import com.ym.mec.thirdparty.adapay.SettleAccountService;
 import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
 import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+import com.ym.mec.util.string.MessageFormatter;
 
 @Service
 public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
@@ -38,6 +44,9 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
+    private YeepayMerchantService yeepayMerchantService;
 
     @Value("${spring.profiles.active:dev}")
     private String env;
@@ -50,55 +59,47 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     }
 
     @Override
-	public HfMember getByMemberId(String memberId) {
-		return hfMemberDao.getByMemberId(memberId);
+	public HfMember getByMemberId(String memberId, String payerName) {
+		return hfMemberDao.getByMemberId(memberId, payerName);
+	}
+
+	@Override
+	public HfMember getByOrganId(Integer organId, String payerName) {
+		return hfMemberDao.getByOrganId(organId, payerName);
+	}
+
+	@Override
+	public HfMember queryByRequestNo(String requestNo) {
+		return hfMemberDao.queryByRequestNo(requestNo);
 	}
 
 	@Override
     @Transactional(rollbackFor = Exception.class)
     public boolean createMember(HfMember member, File file) throws Exception {
-        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId());
+        HfMember hasMember = hfMemberDao.getByOrganId(member.getOrganId(), member.getPayerName());
         if (hasMember != null) {
-            throw new BizException("商户号不能与已有商户相同,请核查");
+            throw new BizException("该分部已创建成功,请核查");
         }
-        hasMember = hfMemberDao.getByName(member.getName());
+        hasMember = hfMemberDao.getByName(member.getName(), member.getPayerName());
         if (hasMember != null) {
             throw new BizException("公司名与已有公司名相同,请核查");
         }
         
-        Integer tenantId = member.getTenantId();
-        
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
-        if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
-        }
-        
-        EnterpriseUser enterpriseUser = new EnterpriseUser();
-        enterpriseUser.setAddress(member.getAddress());
-        enterpriseUser.setAreaCode(member.getAreaCode());
-        enterpriseUser.setAttachFile(file);
-        enterpriseUser.setBankAcctType(member.getBankAcctType());
-        enterpriseUser.setBankCode(member.getBankCode());
-        enterpriseUser.setBusinessScope(member.getBusinessScope());
-        enterpriseUser.setCardName(member.getCardName());
-        enterpriseUser.setCardNo(member.getCardNo());
-        enterpriseUser.setLegalCertId(member.getLegalCertId());
-        enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
-        enterpriseUser.setLegalMp(member.getLegalMp());
-        enterpriseUser.setLegalPerson(member.getLegalPerson());
-        enterpriseUser.setMemberId(member.getMemberId());
-        enterpriseUser.setName(member.getName());
-        
-        if(StringUtils.equals(env, "prod")){
-            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_prod);
-        }else {
-            enterpriseUser.setNotifyUrl(AdapayNotifyConstants.corp_member_notify_url_test);
-        }
-        enterpriseUser.setProvCode(member.getProvCode());
-        enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
-        enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
-        
-        corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+        switch (PaymentChannelEnum.codeOf(member.getPayerName())) {
+		case ADAPAY:
+			createMemberWithAdapay(member, file);
+			break;
+			
+		case YEEPAY:
+			Map<String, Object> response = createMemberWithYeepay((YeepayMember) member);
+			member.setRequestNo(response.get("requestNo").toString());
+			member.setMemberId(response.get("merchantNo").toString());
+			break;
+
+		default:
+			
+			return false;
+		}
 
         Date nowDate = new Date();
         member.setCreateTime(nowDate);
@@ -119,7 +120,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 
         Integer tenantId = member.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, member.getPayerName());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -165,7 +166,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean mergeSettleAccount(String memberId, AccountInfo accountInfo) throws Exception {
-        HfMember hfMember = hfMemberDao.getByMemberId(memberId);
+        HfMember hfMember = hfMemberDao.getByMemberId(memberId, PaymentChannelEnum.ADAPAY.getCode());
         if (!hfMember.getStatus().equals("succeeded")) {
             throw new BizException("商户审核通过,才能绑定结算卡");
         }
@@ -186,7 +187,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         
         Integer tenantId = hfMember.getTenantId();
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, PaymentChannelEnum.ADAPAY.getCode());
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
@@ -205,4 +206,79 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         }
         return true;
     }
+    
+	private boolean createMemberWithAdapay(HfMember member, File file) {
+		Integer tenantId = member.getTenantId();
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, member.getPayerName());
+		if (hfMerchantConfig == null) {
+			throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+		}
+
+		EnterpriseUser enterpriseUser = new EnterpriseUser();
+		enterpriseUser.setAddress(member.getAddress());
+		enterpriseUser.setAreaCode(member.getAreaCode());
+		enterpriseUser.setAttachFile(file);
+		enterpriseUser.setBankAcctType(member.getBankAcctType());
+		enterpriseUser.setBankCode(member.getBankCode());
+		enterpriseUser.setBusinessScope(member.getBusinessScope());
+		enterpriseUser.setCardName(member.getCardName());
+		enterpriseUser.setCardNo(member.getCardNo());
+		enterpriseUser.setLegalCertId(member.getLegalCertId());
+		enterpriseUser.setLegalCertIdExpires(member.getLegalCertIdExpires());
+		enterpriseUser.setLegalMp(member.getLegalMp());
+		enterpriseUser.setLegalPerson(member.getLegalPerson());
+		enterpriseUser.setMemberId(member.getMemberId());
+		enterpriseUser.setName(member.getName());
+
+		if (StringUtils.equals(env, "prod")) {
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "adapay"));
+		} else {
+			enterpriseUser.setNotifyUrl(MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "adapay"));
+		}
+		enterpriseUser.setProvCode(member.getProvCode());
+		enterpriseUser.setSocialCreditCode(member.getSocialCreditCode());
+		enterpriseUser.setSocialCreditCodeExpires(member.getSocialCreditCodeExpires());
+
+		return corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+	}
+	
+	private Map<String, Object> createMemberWithYeepay(YeepayMember member) throws IOException {
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(member.getTenantId(), member.getPayerName());
+		if (hfMerchantConfig == null) {
+			throw new BizException("机构[{}]易宝商户信息找不到", member.getTenantId());
+		}
+		
+		MerchantInfo merchantInfo = new MerchantInfo();
+		merchantInfo.setAddress(member.getAddress());
+		merchantInfo.setBankAccountType(member.getBankAcctType());
+		merchantInfo.setBankCardNo(member.getCardNo());
+		merchantInfo.setBankCode(member.getBankCode());
+		merchantInfo.setCityCode(member.getAreaCode());
+		merchantInfo.setContactEmail(member.getContactEmail());
+		merchantInfo.setContactLicenceNo(member.getContactLicenceNo());
+		merchantInfo.setContactMobile(member.getContactMobile());
+		merchantInfo.setContactName(member.getContactName());
+		merchantInfo.setDistrictCode(member.getDistrictCode());
+		merchantInfo.setLegalLicenceBackUrl(member.getLegalLicenceBackUrl());
+		merchantInfo.setLegalLicenceFrontUrl(member.getLegalLicenceFrontUrl());
+		merchantInfo.setLegalLicenceNo(member.getLegalCertId());
+		merchantInfo.setLegalLicenceType(member.getLegalLicenceType());
+		merchantInfo.setLegalName(member.getLegalPerson());
+		merchantInfo.setLicenceNo(member.getSocialCreditCode());
+		merchantInfo.setLicenceUrl(member.getLicenceUrl());
+		merchantInfo.setMerchantName(member.getName());
+		merchantInfo.setMobile(member.getLegalMp());
+		merchantInfo.setOpenAccountLicenceUrl(member.getOpenAccountLicenceUrl());
+		merchantInfo.setProvinceCode(member.getProvCode());
+		merchantInfo.setSettlementDirection("BANKCARD");
+
+		String notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_test, "yeepay");
+		if (StringUtils.equals(env, "prod")) {
+			notifyURL = MessageFormatter.arrayFormat(AdapayNotifyConstants.corp_member_notify_url_prod, "yeepay");
+		}
+		
+		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig, merchantInfo, notifyURL);
+	}
 }

+ 11 - 3
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,12 +29,16 @@ 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
-	public HfMerchantConfig queryByTenantId(Integer tenantId) {
-		return hfMerchantConfigDao.queryByTenantId(tenantId);
+	public HfMerchantConfig queryByTenantId(Integer tenantId, String payerName) {
+		return hfMerchantConfigDao.queryByTenantId(tenantId, payerName);
 	}
 	
 }

+ 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());
+            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

@@ -978,14 +978,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(),
@@ -1116,7 +1116,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(),
                 "续费",
                 "乐团续费",
@@ -1480,7 +1480,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,

+ 108 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrderPayOpsServiceImpl.java

@@ -29,6 +29,11 @@ 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.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.PaymentParam;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -36,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;
@@ -47,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;
@@ -70,6 +77,9 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
     private HfMerchantConfigService hfMerchantConfigService;
     
     @Autowired
+    private YeepayPaymentService yeepayPaymentService;
+    
+    @Autowired
     private RedissonClient redissonClient;
     @Autowired
     private TenantConfigService tenantConfigService;
@@ -87,8 +97,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         if (payParam.getAmount() == null) {
             throw new Exception("PaymentParam query is null");
         }
-        //签名验证
-        checkSing(payParam);
+        
         //返回值
         Map<String, Object> payment;
 
@@ -98,6 +107,17 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
             //主动延迟检查订单
             delayCheckTenant();
         } else {
+            
+            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findOrderByOrderNo(payParam.getOrderNo());
+            if(studentPaymentOrder == null) {
+            	throw new BizException("参数错误");
+            }
+            
+            payParam.setPayerName(studentPaymentOrder.getPaymentChannel());
+
+            //签名验证
+            checkSing(payParam);
+            
             //如果以上操作都没有 则应该是这一个,因为老代码就是这样写的。
             payment = student(payParam);
         }
@@ -109,7 +129,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("请配置机构的汇付商户信息");
         }
@@ -122,6 +142,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         signParams.put("orderSubject", param.getOrderSubject());
         signParams.put("orderBody", param.getOrderBody());
         signParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        signParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
         String originalStr = JSONObject.toJSONString(signParams);
         String newSign = DigestUtils.md5DigestAsHex(originalStr.getBytes());
         if (!newSign.equals(param.getSign())) {
@@ -141,6 +162,12 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
         if (tenantOrderRecord.getOrderState() != 0) {
             throw new BizException("订单已处理!");
         }
+        payParam.setPayerName(tenantOrderRecord.getPaymentChannel());
+        payParam.setMerNo(tenantOrderRecord.getMerNos());
+
+        //签名验证
+        checkSing(payParam);
+        
         //获取支付数据
         Map<String, Object> payment;
         try {
@@ -165,6 +192,7 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
             throw new BizException("订单不存在");
         }
         payParam.setTenantId(1);
+        payParam.setMerNo(tenantPaymentOrder.getMerNos());
         try {
             payment = checkOrderAndGetParam(payParam,
                     tenantPaymentOrder,
@@ -187,6 +215,8 @@ public class OrderPayOpsServiceImpl implements OrderPayOpsService {
             throw new BizException("订单不存在");
         }
         
+        payParam.setMerNo(studentPaymentOrder.getMerNos());
+        
         payment = checkOrderAndGetParam(payParam,
                 studentPaymentOrder,
                 StudentPaymentOrder::getStatus,
@@ -211,20 +241,71 @@ 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>();
+        String transNo = null;
+        
+        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);
+	        
+	        transNo = (String) payment.get("id");
+	        
+			break;
+		case YEEPAY:
+			
+			Map<String, Object> params = new HashMap<String, Object>();
+			params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("merchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+			params.put("orderId", payParam.getOrderNo());
+			params.put("orderAmount", payParam.getAmount());
+			params.put("notifyUrl", payParam.getNotifyUrl());
+			params.put("redirectUrl", payParam.getReturnUrl());
+			params.put("scene", "OFFLINE");
+			params.put("goodsName", payParam.getOrderSubject());
+	        if (payParam.getTenantId() == 1) {
+                // 延时分账
+				params.put("fundProcessType", "DELAY_SETTLE");
+            }else {
+    			params.put("fundProcessType", "REAL_TIME");
+            }
+	        if(StringUtils.equals(payParam.getPayChannel(), "alipay_qr") || StringUtils.equals(payParam.getPayChannel(), "alipay_wap")) {
+				params.put("channel", "ALIPAY");
+				params.put("payWay", "ALIPAY_LIFE");
+				params.put("userId", getAlipayUserId(hfMerchantConfig, payParam.getCode()));
+				
+	        }else if(StringUtils.equals(payParam.getPayChannel(), "wx_pub")) {
+				params.put("channel", "WECHAT");
+				params.put("payWay", "WECHAT_OFFIACCOUNT");
+				params.put("appId", hfMerchantConfig.getWxAppId());
+				params.put("userId", getOpenId(hfMerchantConfig, payParam.getCode()));
+				
+	        }
+			params.put("userIp", payParam.getIp());
+			
+			payment = yeepayPaymentService.prePay(hfMerchantConfig, params);
+			
+			transNo = (String) payment.get("uniqueOrderNo");
+			
+			break;
+
+		default:
+			break;
+		}
         log.info("executePayment create order param >>>>> {}", JSON.toJSONString(payment));
-        String transNo = (String) payment.get("id");
         //修改流水
         setTransNoByApply(transNo, clazz, setOption, action);
 
@@ -283,6 +364,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<>();

+ 134 - 80
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -96,18 +96,27 @@ 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);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannelStr);
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, paymentChannelStr);
         }
         
         if(tenantId != 1){//非大雅机构
         	
         	Date date = new Date();
         	
-        	String merNo = "0";
+        	String merNo = hfMerchantConfig.getPlatformPayeeMemberId();
         	
         	StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
             studentPaymentRouteOrder.setOrderNo(orderNo);
@@ -124,12 +133,12 @@ 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);
-            
-            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
+            Map<String, Object> payMap = null;
 
+        	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
+            
             unionPay.put("orderNo", orderNo);
-            unionPay.put("type", payType.getCode());
+            unionPay.put("type", paymentChannel.getCode());
             unionPay.put("payMap", payMap);
             unionPay.put("routingMerNos", merNo);
             return unionPay;
@@ -150,13 +159,20 @@ public class PayServiceImpl implements PayService {
 			if (StringUtils.equals("1", isPlatformCollection) && !ignoreOrganList.contains(organId)) {
 	        	
 	        	//String merNo = sysConfigDao.findConfigValue(SysConfigService.PLATFORM_PAYEE_ACCOUNT);
-				String merNo = "H004233";
+				//乐小雅收款
+				Integer routeOrganId = 123;
+				
+				HfMember receiverMember = hfMemberDao.getByOrganId(routeOrganId, paymentChannelStr);
+				
+				if(receiverMember == null) {
+	        		throw new BizException("分部[{}]收款账户查询失败", routeOrganId);
+				}
+				
+				String merNo = receiverMember.getMemberId();
 	        	if(StringUtils.isBlank(merNo)){
 	        		throw new BizException("平台收款账户查询失败");
 	        	}
 	        	
-	        	Integer routeOrganId = 123;
-	        	
 	        	StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
 	            studentPaymentRouteOrder.setOrderNo(orderNo);
 	            studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
@@ -172,12 +188,12 @@ 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);
-	            
-	            PaymentChannelEnum payType = PaymentChannelEnum.ADAPAY;
+	            Map<String, Object> payMap = null;
+
+            	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
 
 	            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 +413,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){
@@ -447,12 +463,21 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
-	public Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
+	public Map<String, Object> getPayToPlatformMap(Integer tenantId, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
+        
+        //获取支付渠道
+		String paymentChannelStr = sysConfigDao.findConfigValue(SysConfigService.PAYMENT_CHANNEL);
+		
+		if(StringUtils.isBlank(paymentChannelStr)) {
+			paymentChannelStr = PaymentChannelEnum.ADAPAY.getCode();
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(paymentChannelStr);
     	
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, paymentChannel.getCode());
         if(hfMerchantConfig == null){
-        	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+        	throw new BizException("机构[{}][{}]商户信息找不到", tenantId, paymentChannel.getCode());
         }
     	
         Map<String, Object> payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, notifyUrl, returnUrl, orderSubject, orderBody);
@@ -467,29 +492,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 +525,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;
@@ -511,17 +542,15 @@ public class PayServiceImpl implements PayService {
         String routeScale = paymentConfig.getRouteScale();
         List<RouteScaleDto> routeScaleDtos = JSON.parseArray(routeScale, RouteScaleDto.class);
         List<Integer> organIds = routeScaleDtos.stream().map(RouteScaleDto::getOrganId).collect(Collectors.toList());
-        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(organIds);
+        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(paymentChannel, organIds);
         for (RouteScaleDto routeScaleDto : routeScaleDtos) {
             routeScaleDto.setPayType(paymentConfig.getPayType());
             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());
-                }
+
+            	routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
+            	
             }
         }
 
@@ -556,7 +585,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 +615,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 +627,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 +647,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 +664,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 +676,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 +840,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;
         }
@@ -818,7 +854,7 @@ public class PayServiceImpl implements PayService {
         String typeRouteScale = paymentConfig.getTypeRouteScale();
         List<RouteScaleDto> routeScaleDtos = JSON.parseArray(typeRouteScale, RouteScaleDto.class);
         List<Integer> organIds = routeScaleDtos.stream().map(RouteScaleDto::getOrganId).collect(Collectors.toList());
-        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(organIds);
+        List<SysPaymentConfig> paymentConfigByOrganIds = sysPaymentConfigService.findPaymentConfigByOrganIds(paymentChannel, organIds);
 
         long serviceCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SERVICE)).count();
         long sellCount = routeScaleDtos.stream().filter(e -> e.getFeeType().equals(FeeTypeEnum.SELL)).count();
@@ -874,12 +910,11 @@ public class PayServiceImpl implements PayService {
             }*/
 
             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;
+            	
+            	routeScaleDto.setMerNo(paymentConfigByOrganId.getHfMerNo());
+                
             }
         }
         Map<String, List<RouteScaleDto>> routeScaleDtosMap = routeScaleDtos.stream().collect(Collectors.groupingBy(RouteScaleDto::getMerNo));
@@ -954,9 +989,19 @@ public class PayServiceImpl implements PayService {
             routeScaleDto1.setBalance(totalBalanceAmount.multiply(musicGroupCourseTotalAmount).divide(totalBalanceAmount.add(totalCashAmount), 2, BigDecimal.ROUND_DOWN));
             routeScaleDto1.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto1.setServiceAmount(routeScaleDto1.getAmount());
-            routeScaleDto1.setOrganId(50);
+            
+
+			Integer courseOrganId = 50;
+			
+			HfMember receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto1.setOrganId(courseOrganId);
             routeScaleDto1.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto1.setMerNo("H004215");
+            routeScaleDto1.setMerNo(receiverMember.getMemberId());
             routeScaleDto1.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto1);
 			
@@ -965,9 +1010,18 @@ public class PayServiceImpl implements PayService {
             routeScaleDto2.setBalance(totalBalanceAmount.subtract(routeScaleDto1.getBalance()));
             routeScaleDto2.setSaleAmount(BigDecimal.ZERO);
             routeScaleDto2.setServiceAmount(routeScaleDto2.getAmount());
-            routeScaleDto2.setOrganId(52);
+            
+            courseOrganId = 52;
+			
+			receiverMember = hfMemberDao.getByOrganId(courseOrganId, paymentChannel.getCode());
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", courseOrganId);
+			}
+			
+            routeScaleDto2.setOrganId(courseOrganId);
             routeScaleDto2.setFeeType(FeeTypeEnum.SERVICE);
-            routeScaleDto2.setMerNo("H004219");
+            routeScaleDto2.setMerNo(receiverMember.getMemberId());
             routeScaleDto2.setPayType(PaymentChannelEnum.ADAPAY);
             newRouteScaleDtos.add(routeScaleDto2);
 			
@@ -984,8 +1038,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 +1076,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(),
@@ -4302,7 +4302,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(),
@@ -4484,7 +4484,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,

+ 290 - 94
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -1,18 +1,121 @@
 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.io.IOException;
+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.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.CourseScheduleStudentPaymentDao;
+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.OperatingTotalIncomeDto;
+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.KitGroupPurchaseTypeEnum;
+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 +132,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 {
 
@@ -133,6 +222,9 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private StudentDao studentDao;
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+    
+    @Autowired
+    private YeepayPaymentService yeepayPaymentService;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
 
@@ -201,7 +293,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"));
@@ -237,8 +330,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status, String paymentChannel) {
-        return studentPaymentOrderDao.findOrdersByStatus(status, paymentChannel);
+    public List<StudentPaymentOrder> findOrdersByStatus(DealStatusEnum status) {
+        return studentPaymentOrderDao.findOrdersByStatus(status);
     }
 
     @Override
@@ -247,15 +340,16 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void queryOrderStatus() throws Exception {
-        yqPayQuery(null);
+        //yqPayQuery(null);
         adaPayQuery(null);
-        reConfirmOrder(null, null);
+        //reConfirmOrder(null, null);
     }
 
     private void yqPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
         if (payingOrders == null) {
-            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "YQPAY");
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING);
         }
         if (payingOrders.size() == 0) {
             return;
@@ -301,7 +395,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
     private void adaPayQuery(List<StudentPaymentOrder> payingOrders) throws Exception {
         if (payingOrders == null) {
-            payingOrders = findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+            payingOrders = findOrdersByStatus(DealStatusEnum.ING);
         }
 
         Date date = new Date();
@@ -310,9 +404,6 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             return;
         }
         
-        Map<Integer,HfMerchantConfig> payConfigMap = new HashMap<Integer, HfMerchantConfig>();
-        HfMerchantConfig hfMerchantConfig = null;
-        
         List<String> orderNoList = new ArrayList<String>();
 
         for (StudentPaymentOrder payingOrder : payingOrders) {
@@ -328,30 +419,49 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             if (DateUtil.minutesBetween(payingOrder.getCreateTime(), date) < 10) {
                 continue;
             }
-
-            updateOrderStatus(date, payConfigMap, payingOrder,true);
+            try {
+            	updateOrderStatus(date, payingOrder);
+            }catch (Exception e) {
+				logger.error("执行[订单状态查询]任务失败", e);
+			}
         }
         closeOrders(orderNoList);
     }
 
     @Override
     @Transactional
-    public OrderCancelModel updateOrderStatus(Date date, Map<Integer, HfMerchantConfig> payConfigMap, StudentPaymentOrder payingOrder, Boolean checkTime) throws Exception {
-        if (payConfigMap == null) {
-            throw new BizException("payConfigMap 不能为空");
-        }
-        HfMerchantConfig hfMerchantConfig;
-        hfMerchantConfig = payConfigMap.get(payingOrder.getTenantId());
+    public OrderCancelModel updateOrderStatus(Date date, StudentPaymentOrder payingOrder) throws Exception {
+    	
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId(), payingOrder.getPaymentChannel());
         if(hfMerchantConfig == null){
-            hfMerchantConfig = hfMerchantConfigService.queryByTenantId(payingOrder.getTenantId());
-            if(hfMerchantConfig == null){
-                throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
-            }
-            payConfigMap.put(payingOrder.getTenantId(), hfMerchantConfig);
+            throw new BizException("机构[{}]汇付商户信息找不到", payingOrder.getTenantId());
         }
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(payingOrder.getPaymentChannel());
+        
         OrderCancelModel  model = new OrderCancelModel();
+        Map<String, Object> payment = new HashMap<String, Object>();
 
-        Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
+        if(paymentChannel == PaymentChannelEnum.ADAPAY) {
+        	payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
+        }else if(paymentChannel == PaymentChannelEnum.YEEPAY) {
+        	Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, payingOrder.getMerNos(), payingOrder.getOrderNo());
+        	payment.put("pay_channel", orderInfo.get("channel"));
+        	
+        	String respStatus = orderInfo.get("status").toString();
+        	
+        	if(StringUtils.equals("SUCCESS", respStatus)) {
+            	payment.put("status", "succeeded");
+        	}else if(StringUtils.equals("FAIL", respStatus) || StringUtils.equals("TIME_OUT", respStatus) || StringUtils.equals("CLOSE", respStatus)) {
+            	payment.put("status", "failed");
+        	}else {
+        		payment.put("status", "pending");
+        	}
+        	payment.put("error_msg", orderInfo.get("failReason"));
+        }else {
+        	throw new BizException("[{}]支付渠道不支持", payingOrder.getPaymentChannel());
+        }
+        
         LOGGER.warn("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
 
         Map<String, String> rpMap = new HashMap<>();
@@ -366,14 +476,14 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         if (status.equals("succeeded")) {
             rpMap.put("tradeState", "1");
             model.setStatus(true);
-        } else if (status.equals("failed") || !checkTime
+        } else if (status.equals("failed")
                 || (DateUtil.minutesBetween(DateUtil.addHours(payingOrder.getUpdateTime(), 2),date) > 0)) {
             rpMap.put("tradeState", "0");
             model.setStatus(false);
         }
 
         if (status.equals("succeeded") ||
-                (status.equals("failed") || !checkTime || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
+                (status.equals("failed") || payingOrder.getCreateTime().before(DateUtil.addMinutes(new Date(), -35)))) {
             try {
                 updateOrder(rpMap); //更新订单
                 model.setSuccess(true);
@@ -401,7 +511,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateOrder(Map<String, String> rpMap) throws Exception {
-        DealStatusEnum status = rpMap.get("tradeState").equals("1") ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
+        DealStatusEnum status = "1".equals(rpMap.get("tradeState")) ? DealStatusEnum.SUCCESS : DealStatusEnum.FAILED;
         StudentPaymentOrder order = findOrderByOrderNo(rpMap.get("merOrderNo"));
         //关闭或失败的订单查询订单成功,订单改成成功,钱退到余额
         if (order != null && (order.getStatus().equals(DealStatusEnum.CLOSE) || order.getStatus().equals(DealStatusEnum.FAILED)) && status.equals(DealStatusEnum.SUCCESS)) {
@@ -421,7 +531,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     PlatformCashAccountDetailTypeEnum.REFUNDS, order.getMemo() + ",订单号:" + order.getOrderNo());
 
             if (StringUtils.isNotBlank(order.getPaymentChannel())
-                    && order.getPaymentChannel().equals("ADAPAY")
+                    && (order.getPaymentChannel().equals(PaymentChannelEnum.ADAPAY.getCode()) || order.getPaymentChannel().equals(PaymentChannelEnum.YEEPAY.getCode()))
                     && !rpMap.containsKey("simulation")) {
                 confirmOrder(order);
             }
@@ -452,14 +562,15 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
 
         if (status.equals(DealStatusEnum.SUCCESS)
                 && StringUtils.isNotBlank(order.getPaymentChannel())
-                && order.getPaymentChannel().equals("ADAPAY")
+                && (order.getPaymentChannel().equals(PaymentChannelEnum.ADAPAY.getCode()) || order.getPaymentChannel().equals(PaymentChannelEnum.YEEPAY.getCode()))
                 && !rpMap.containsKey("simulation")) {
             confirmOrder(order);
         }
         TenantContextHolder.clearTenantId();
     }
 
-    private Boolean confirmOrder(StudentPaymentOrder order) {
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean confirmOrder(StudentPaymentOrder order) {
         // 只有大雅延迟分账,其他实时分账
         if (order.getTenantId() != 1) {
             return true;
@@ -469,39 +580,104 @@ 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);
-            }
-            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;
-            }
+        
+        PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(order.getPaymentChannel());
+        
+
+    	if(hfMerchantConfig == null){
+    		hfMerchantConfig = hfMerchantConfigService.queryByTenantId(order.getTenantId(), order.getPaymentChannel());
+    	}
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", order.getTenantId(), order.getPaymentChannel());
         }
+        
+        StudentPaymentRouteOrder studentPaymentRouteOrder = null;
+        
+        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;
+                }
+            }
+			
+		} else if (paymentChannel == PaymentChannelEnum.YEEPAY) {
+			try {
+				Map<String, Object> params = new HashMap<String, Object>();
+				params.put("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+				params.put("merchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+				params.put("orderId", order.getOrderNo());
+				params.put("uniqueOrderNo", order.getTransNo());
+				params.put("divideRequestId", idGeneratorService.generatorId("payment") + "");
+
+				Map<String, Object> orderInfo = yeepayPaymentService.queryOrder(hfMerchantConfig, order.getMerNos(), order.getOrderNo());
+				if (orderInfo == null) {
+					throw new BizException("[{}][{}]订单查询失败", paymentChannel, order.getOrderNo());
+				}
+				BigDecimal splitAmount = new BigDecimal(orderInfo.get("unSplitAmount").toString());
+
+				BigDecimal divideAmount = BigDecimal.ZERO;
+				BigDecimal dividedAmount = BigDecimal.ZERO;
+				List<Map<String,String>> divides = new ArrayList<Map<String,String>>();
+				for (int i = 0; i < routeOrders.size(); i++) {
+
+					studentPaymentRouteOrder = routeOrders.get(i);
+					
+					Map<String, String> divide = new HashMap<String, String>();
+
+					divide.put("ledgerNo", studentPaymentRouteOrder.getMerNo());
+
+					if (i + 1 == routeOrders.size()) {
+						divideAmount = splitAmount.subtract(dividedAmount);
+						divide.put("amount", divideAmount.toPlainString());
+					} else {
+						divideAmount = studentPaymentRouteOrder.getRouteAmount().multiply(splitAmount).divide(order.getActualAmount(), 2,
+								BigDecimal.ROUND_HALF_UP);
+						divide.put("amount", divideAmount.toPlainString());
+					}
+					dividedAmount = dividedAmount.add(divideAmount);
+
+					studentPaymentRouteOrder.setServiceFee(studentPaymentRouteOrder.getRouteAmount().subtract(divideAmount));
+					studentPaymentRouteOrder.setUpdateTime(date);
+					
+					divides.add(divide);
+				}
+				params.put("divideDetail", JSON.toJSONString(divides));
+
+				Map<String, Object> result = yeepayPaymentService.divide(hfMerchantConfig, params);
+				LOGGER.info("分账信息返回:{}", JSON.toJSONString(result));
+			} catch (IOException e) {
+				throw new BizException("调用易宝接口报错", e);
+			}
+
+			for (StudentPaymentRouteOrder spro : routeOrders) {
+
+				studentPaymentRouteOrderDao.update(spro);
+			}
+		}
+        
         return true;
     }
 
@@ -701,7 +877,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(id);
         List<StudentPaymentOrder> orderList = new ArrayList<>();
         orderList.add(studentPaymentOrder);
-        if (studentPaymentOrder.getPaymentChannel().equals("ADAPAY")) {
+        if (studentPaymentOrder.getPaymentChannel().equals(PaymentChannelEnum.ADAPAY.getCode()) || studentPaymentOrder.getPaymentChannel().equals(PaymentChannelEnum.YEEPAY.getCode())) {
             adaPayQuery(orderList);
         } else if (studentPaymentOrder.getPaymentChannel().equals("YQPAY")) {
             yqPayQuery(orderList);
@@ -813,11 +989,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")) {
@@ -852,6 +1030,24 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     }
                 }
             }
+        }else if (StringUtils.equals(paymentChannel, "YEEPAY")) {
+        	Map<String, Object> result = yeepayPaymentService.queryOrder(hfMerchantConfig, studentPaymentOrder.getMerNos(), orderNo);
+        	
+        	if("OPR00000".equals(result.get("code").toString())) {
+
+            	String status = result.get("status").toString();
+            	if (status.equals("SUCCESS")) {
+                    return PayStatus.SUCCESSED;
+                } else if (status.equals("TIME_OUT") || status.equals("FAIL") || status.equals("CLOSE")) {
+                    return PayStatus.FAILED;
+                } else {
+                    return PayStatus.PAYING;
+                }
+        	}else if("OPR12002".equals(result.get("code").toString())) {
+        		//订单不存在
+        		return PayStatus.FAILED;
+        	}
+            throw new BizException(result.get("message").toString());
         }
         throw new BizException("支付渠道错误");
     }
@@ -1613,7 +1809,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());
             }
@@ -1653,7 +1849,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,
                 "声部更换",
                 "声部更换",

+ 45 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysPaymentConfigServiceImpl.java

@@ -1,23 +1,29 @@
 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;
 import com.ym.mec.biz.service.SysPaymentConfigService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 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,13 +31,42 @@ public class SysPaymentConfigServiceImpl extends BaseServiceImpl<Integer, SysPay
     }
 
     @Override
-    public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
-        return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+	public SysPaymentConfig findPaymentConfigByOrganId(Integer organId) {
+		return sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+	}
+
+	@Override
+    public SysPaymentConfig findPaymentConfigByOrganId(PaymentChannelEnum paymentChannel, Integer organId) {
+    	SysPaymentConfig sysPaymentConfig =  sysPaymentConfigDao.findPaymentConfigByOrganId(organId);
+    	
+    	if(sysPaymentConfig != null) {
+    		HfMember hfMember = hfMemberDao.getByOrganId(organId, paymentChannel.getCode());
+    		if(hfMember == null) {
+        		throw new BizException("[{}]分部[{}]没有配置商户号", paymentChannel.getCode(), organId);
+        	}
+    		sysPaymentConfig.setHfMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setYqMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setPayType(PaymentChannelEnum.codeOf(hfMember.getPayerName()));
+    	}
+    	
+    	return sysPaymentConfig;
     }
 
     @Override
-    public List<SysPaymentConfig> findPaymentConfigByOrganIds(List<Integer> organIds) {
-        return sysPaymentConfigDao.findPaymentConfigByOrganIds(organIds);
+    public List<SysPaymentConfig> findPaymentConfigByOrganIds(PaymentChannelEnum paymentChannel, List<Integer> organIds) {
+    	List<SysPaymentConfig> sysPaymentConfigs = sysPaymentConfigDao.findPaymentConfigByOrganIds(organIds);
+    	
+    	for(SysPaymentConfig sysPaymentConfig : sysPaymentConfigs) {
+    		HfMember hfMember = hfMemberDao.getByOrganId(sysPaymentConfig.getOrganId(), paymentChannel.getCode());
+    		if(hfMember == null) {
+        		throw new BizException("[{}]分部[{}]没有配置商户号", paymentChannel.getCode(), sysPaymentConfig.getOrganId());
+        	}
+    		sysPaymentConfig.setHfMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setYqMerNo(hfMember.getMemberId());
+    		sysPaymentConfig.setPayType(PaymentChannelEnum.codeOf(hfMember.getPayerName()));
+    	}
+    	
+        return sysPaymentConfigs;
     }
 
     @Override

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

@@ -800,11 +800,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (productInfo.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     productInfo.getPayAmount(),
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
@@ -847,11 +846,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
@@ -971,11 +969,21 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Override
     public TenantOrderRecord createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum
             tenantEnum, Integer orderState, String merNos) {
+    	
+    	//获取支付渠道
+		String paymentChannelStr = sysConfigDao.findConfigValue(SysConfigService.PAYMENT_CHANNEL);
+		
+		if(StringUtils.isBlank(paymentChannelStr)) {
+			paymentChannelStr = PaymentChannelEnum.ADAPAY.getCode();
+		}
+		
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(paymentChannelStr);
+    			
         TenantOrderRecord record = new TenantOrderRecord();
         record.setTenantId(tenantId);
         record.setOrderNo(orderNo);
         record.setOrderType(tenantEnum.getCode());
-        record.setPaymentChannel(PaymentChannelEnum.ADAPAY.getCode());
+        record.setPaymentChannel(paymentChannel.getCode());
         record.setExpectAmount(payAmount);
         record.setActualAmount(payAmount);
         record.setOrderState(orderState);
@@ -1134,11 +1142,10 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
             result = payService.getPayToPlatformMap(tenantId,
-                    PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/callback/" + orderNo,
                     baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()

+ 170 - 80
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
 import java.math.BigDecimal;
+import java.security.PrivateKey;
+import java.security.PublicKey;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -12,6 +14,10 @@ import java.util.function.Consumer;
 import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.LocalDateTime;
@@ -349,37 +355,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));
         }
     }
 
@@ -444,59 +466,127 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String callback(HttpServletRequest request) {
-        // 验签请参data
-        String data = request.getParameter("data");
-        // 验签请参sign
-        String sign = request.getParameter("sign");
-        log.info("tenant callback request param:{}", data);
-        try {
-            // 验签
-            if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
-                JSONObject dataObj = JSON.parseObject(data);
-                String transType = request.getParameter("type");
-                String orderNo = dataObj.getString("order_no");
-                TenantOrderRecord record = this.getOne(Wrappers.<TenantOrderRecord>lambdaQuery()
-                        .eq(TenantOrderRecord::getOrderNo, orderNo));
-                if(Objects.isNull(record)){
-                    log.error("error tenant callback request orderNo is null param:{}", data);
-                    return "failed";
-                }
-                record = tenantOrderRecordDao.getLockedById(record.getId());
-                //只处理未支付状态的订单
-                if(!record.getOrderState().equals(0)){
-                    return "succeeded";
-                }
-                switch (transType) {
-                    case "payment.succeeded":// 支付成功
-                        Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
-                        if (Objects.nonNull(consumer)) {
-                            consumer.accept(record);
-                        }
-                        LocalDateTime now = LocalDateTime.now();
-                        record.setPayDate(now.toLocalDate().toDate());
-                        record.setPayTime(now.toDate());
-                        //修改流水
-                        record.setOrderState(1);
-                        baseMapper.updateById(record);
-                        break;
-                    case "payment.failed":// 支付失败
-                        //修改流水
-                        record.setOrderState(2);
-                        baseMapper.updateById(record);
-                        break;
-                    default:
-                        break;
-                }
-            } else {
-                return "验签失败";
-            }
-        } catch (Exception e) {
-            log.error("error tenant callback request param:{}", data);
-            return e.getMessage();
-        }
-        return "succeeded";
-    }
+	public String callback(String orderNo, HttpServletRequest request) {
+
+		TenantOrderRecord record = this.getOne(Wrappers.<TenantOrderRecord> lambdaQuery().eq(TenantOrderRecord::getOrderNo, orderNo));
+		if (Objects.isNull(record)) {
+			return "failed";
+		}
+		record = tenantOrderRecordDao.getLockedById(record.getId());
+		// 只处理未支付状态的订单
+		if (!record.getOrderState().equals(0)) {
+			return "succeeded";
+		}
+
+		PaymentChannelEnum paymentChannel = PaymentChannelEnum.codeOf(record.getPaymentChannel());
+
+		try {
+
+			switch (paymentChannel) {
+			case ADAPAY:
+				// 验签请参data
+				String data = request.getParameter("data");
+				// 验签请参sign
+				String sign = request.getParameter("sign");
+
+				String transType = request.getParameter("type");
+
+				log.info("callback response param:[data]{} [sign]{} [type]{}", data, sign, transType);
+
+				// 验签
+				if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+					JSONObject dataObj = JSON.parseObject(data);
+					// String orderNo = dataObj.getString("order_no");
+					switch (transType) {
+					case "payment.succeeded":// 支付成功
+						Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
+						if (Objects.nonNull(consumer)) {
+							consumer.accept(record);
+						}
+						LocalDateTime now = LocalDateTime.now();
+						record.setPayDate(now.toLocalDate().toDate());
+						record.setPayTime(now.toDate());
+						// 修改流水
+						record.setOrderState(1);
+						baseMapper.updateById(record);
+						break;
+					case "payment.failed":// 支付失败
+						// 修改流水
+						record.setOrderState(2);
+						baseMapper.updateById(record);
+						break;
+					default:
+						break;
+					}
+				} else {
+					return "验签失败";
+				}
+
+				break;
+			case YEEPAY:
+
+				String content = request.getParameter("response");
+
+				HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(record.getTenantId(), record.getPaymentChannel());
+				if (hfMerchantConfig == null) {
+					throw new BizException("机构[{}][{}]商户信息找不到", record.getTenantId(), record.getPaymentChannel());
+				}
+
+				// 构造结果通知请求对象
+				DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+				dto.setCipherText(content);
+				PrivateKey privateKey = RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+				PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+
+				dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+
+				log.info("易宝支付回调信息:response:{} plaintText:{}", content, dto.getPlainText());
+
+				JSONObject dataObj = JSON.parseObject(dto.getPlainText());
+
+				Map<String, String> notifyMap = new HashMap<>();
+				notifyMap.put("channelType", dataObj.getString("channel"));
+
+				if ("SUCCESS".equals(dataObj.getString("status"))) {
+					Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
+					if (Objects.nonNull(consumer)) {
+						consumer.accept(record);
+					}
+					LocalDateTime now = LocalDateTime.now();
+					record.setPayDate(now.toLocalDate().toDate());
+					record.setPayTime(now.toDate());
+					// 修改流水
+					record.setOrderState(1);
+					baseMapper.updateById(record);
+				} else {
+					// 修改流水
+					record.setOrderState(2);
+					baseMapper.updateById(record);
+				}
+
+				break;
+
+			default:
+				break;
+			}
+
+		} catch (Exception e) {
+			return e.getMessage();
+		}
+
+		// 验签请参data
+		String data = request.getParameter("data");
+		// 验签请参sign
+		String sign = request.getParameter("sign");
+		log.info("tenant callback request param:{}", data);
+		try {
+
+		} catch (Exception e) {
+			log.error("error tenant callback request param:{}", data);
+			return e.getMessage();
+		}
+		return "succeeded";
+	}
 
 }
 

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

@@ -674,7 +674,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(),
@@ -855,7 +855,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

@@ -2792,7 +2792,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,
                 groupType.getDesc() + "购买",
                 vipGroup.getName(),

+ 55 - 8
mec-biz/src/main/resources/config/mybatis/HfMemberMapper.xml

@@ -3,6 +3,7 @@
 <mapper namespace="com.ym.mec.biz.dal.dao.HfMemberDao">
     <resultMap id="hfMember" type="com.ym.mec.biz.dal.entity.HfMember">
         <id column="id_" property="id"/>
+        <result column="payer_name_" property="payerName"/>
         <result column="name_" property="name"/>
         <result column="member_id_" property="memberId"/>
         <result column="prov_code_" property="provCode"/>
@@ -30,14 +31,22 @@
 		<result column="tenant_id_" property="tenantId" />
 		<result column="bank_acct_type_" property="bankAcctType" />
 		<result column="card_name_" property="cardName" />
+		<result column="district_code_" property="districtCode" />
+		<result column="contact_email_" property="contactEmail" />
+		<result column="contact_licence_no_" property="contactLicenseNo" />
+		<result column="contact_name_" property="contactName" />
+		<result column="contact_mobile_" property="contactMobile" />
+		<result column="request_no_" property="requestNo" />
+		<result column="legal_licence_type_" property="legalLicenceType" />
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
+        id_, payer_name_, name_, member_id_, prov_code_, area_code_, social_credit_code_, social_credit_code_expires_,
         business_scope_, legal_person_, legal_cert_id_, legal_cert_id_expires_, legal_mp_,
         address_, zip_code_, card_no_,
         bank_code_,settle_account_id_,status_,month_max_receipt_,route_member_id_,route_organ_id_, create_time_,
-        update_time_,tenant_id_,organ_id_,bank_acct_type_,card_name_
+        update_time_,tenant_id_,organ_id_,bank_acct_type_,card_name_,
+        district_code_,contact_email_,contact_licence_no_,contact_name_,contact_mobile_,request_no_,legal_licence_type_
     </sql>
     <select id="get" parameterType="java.lang.Integer" resultMap="hfMember">
         <!--@mbg.generated-->
@@ -54,23 +63,46 @@
     <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.HfMember"
             useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into hf_member (name_, member_id_, prov_code_,
+        insert into hf_member (payer_name_, name_, member_id_, prov_code_,
         area_code_, social_credit_code_, social_credit_code_expires_,
         business_scope_, legal_person_, legal_cert_id_,
         legal_cert_id_expires_, legal_mp_, address_,
         zip_code_, card_no_, bank_code_,status_,
-        create_time_, update_time_,organ_id_,tenant_id_,bank_acct_type_,card_name_)
-        values (#{name}, #{memberId}, #{provCode},
+        create_time_, update_time_,organ_id_,tenant_id_,bank_acct_type_,card_name_,
+        district_code_,contact_email_,contact_licence_no_,contact_name_,contact_mobile_,request_no_,legal_licence_type_)
+        values (#{payerName}, #{name}, #{memberId}, #{provCode},
         #{areaCode}, #{socialCreditCode}, #{socialCreditCodeExpires},
         #{businessScope}, #{legalPerson}, #{legalCertId},
         #{legalCertIdExpires}, #{legalMp}, #{address},
         #{zipCode}, #{cardNo}, #{bankCode},#{status},
-        #{createTime}, #{updateTime},#{organId},#{tenantId},#{bankAcctType},#{cardName})
+        #{createTime}, #{updateTime},#{organId},#{tenantId},#{bankAcctType},#{cardName},
+        #{districtCode},#{contactEmail},#{contactLicenceNo},#{contactName},#{contactMobile},#{requestNo},#{legalLicenceType})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.HfMember">
         <!--@mbg.generated-->
         update hf_member
         <set>
+            <if test="districtCode != null">
+                district_code_ = #{districtCode},
+            </if>
+            <if test="contactEmail != null">
+                contact_email_ = #{contactEmail},
+            </if>
+            <if test="contactLicenceNo != null">
+                contact_licence_no_ = #{contactLicenceNo},
+            </if>
+            <if test="contactName != null">
+                contact_name_ = #{contactName},
+            </if>
+            <if test="contactMobile != null">
+                contact_mobile_ = #{contactMobile},
+            </if>
+            <if test="requestNo != null">
+                request_no_ = #{requestNo},
+            </if>
+            <if test="legalLicenceType != null">
+                legal_licence_type_ = #{legalLicenceType},
+            </if>
             <if test="name != null">
                 name_ = #{name},
             </if>
@@ -176,6 +208,9 @@
             <if test="organId != null">
                 AND organ_id_ = #{organId}
             </if>
+            <if test="payerName != null">
+                AND payer_name_ = #{payerName}
+            </if>
         </where>
     </sql>
 
@@ -188,15 +223,27 @@
     <select id="getByMemberId" resultMap="hfMember">
         SELECT *
         FROM hf_member
-        WHERE member_id_ = #{memberId}
+        WHERE member_id_ = #{memberId} and payer_name_ = #{payerName}
         LIMIT 1
     </select>
 
     <select id="getByName" resultMap="hfMember">
         SELECT *
         FROM hf_member
-        WHERE name_ = #{name}
+        WHERE name_ = #{name} and payer_name_ = #{payerName}
         LIMIT 1
     </select>
 
+    <select id="getByOrganId" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE organ_id_ = #{organId} and payer_name_ = #{payerName}
+    </select>
+
+    <select id="queryByRequestNo" resultMap="hfMember">
+        SELECT *
+        FROM hf_member
+        WHERE request_no_ = #{requestNo}
+    </select>
+
 </mapper>

+ 23 - 4
mec-biz/src/main/resources/config/mybatis/HfMerchantConfigMapper.xml

@@ -6,6 +6,7 @@
 	<resultMap type="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig"
 		id="HfMerchantConfig">
 		<result column="id_" property="id" />
+		<result column="payer_name_" property="payerName" />
 		<result column="app_id_" property="appId" />
 		<result column="mer_key_" property="merKey" />
 		<result column="api_key_" property="apiKey" />
@@ -15,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" />
@@ -29,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>
 
@@ -39,14 +43,17 @@
 		<!-- <selectKey resultClass="int" keyProperty="id" > SELECT SEQ_WSDEFINITION_ID.nextval 
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO hf_merchant_config
-		(id_,app_id_,mer_key_,api_key_,mock_api_key_,rsa_private_key_,rsa_public_key_,expend_params_,wx_app_id_,wx_app_secret_,create_time_,update_time_,tenant_id_,platform_payee_member_id_)
-		VALUES(#{id},#{appId},#{merKey},#{apiKey},#{mockApiKey},#{rsaPrivateKey},#{rsaPublicKey},#{expendParams},#{wxAppId},#{wxAppSecret},#{createTime},#{updateTime},#{tenantId},#{platformPayeeMemberId})
+		(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>
 
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig">
 		UPDATE hf_merchant_config
 		<set>
+			<if test="payerName != null">
+				payer_name_ = #{payerName},
+			</if>
 			<if test="apiKey != null">
 				api_key_ = #{apiKey},
 			</if>
@@ -89,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>
@@ -113,7 +129,7 @@
 	</select>
 	
 	<select id="queryByTenantId" resultMap="HfMerchantConfig">
-		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId}
+		SELECT * FROM hf_merchant_config where tenant_id_ = #{tenantId} AND payer_name_ = #{payerName}
 	</select>
 
     <sql id="queryPageSql">
@@ -121,6 +137,9 @@
             <if test="tenantId != null">
                 AND tenant_id_ = #{tenantId}
             </if>
+			<if test="payerName != null">
+				AND payer_name_ = #{payerName}
+			</if>
         </where>
     </sql>
 

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

@@ -601,7 +601,6 @@
         SELECT *
         FROM student_payment_order
         WHERE status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-          AND payment_channel_ = #{paymentChannel}
     <!--  商城订单由商城控制订单超时      -->
         and group_type_ != 'MALL_SELL' and type_ != 'MALL_BUY'
     </select>

+ 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>

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -24,7 +24,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
     @Override
     public void configure(HttpSecurity http) throws Exception {
         http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
-                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*", "/student/registering", "/register/*", "/studentOrder/*", "/musicGroup/getSubjectGoodsAndInfo",
+                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*", "/student/registering", "/register/*", "/studentOrder/**", "/musicGroup/getSubjectGoodsAndInfo",
                 "/musicGroup/getMusicGroupStatus", "/musicGroup/getOrderStatus","/sysCouponCode/queryPage",
                 "/musicGroup/pay",
                 "/musicGroup/rePay",

+ 201 - 59
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,47 +1,134 @@
 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.security.PrivateKey;
+import java.security.PublicKey;
+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.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
 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.HfMerchantConfigService;
+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;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 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.json.JsonUtil;
+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 = "订单回调")
@@ -105,6 +192,8 @@ public class StudentOrderController extends BaseController {
     private VipGroupCategoryDao vipGroupCategoryDao;
     @Autowired
     private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -121,51 +210,103 @@ 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)) {
-				
-				JSONObject dataObj = JSON.parseObject(data);
+			switch (paymentChannel) {
+			case ADAPAY:
+				// 验签请参data
+				String data = request.getParameter("data");
+				// 验签请参sign
+				String sign = request.getParameter("sign");
 				
 				String transType = request.getParameter("type");
 				
+				logger.info("callback response param:[data]{} [sign]{} [type]{}", data, sign, transType);
+				// 验签
+				if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+					
+					JSONObject dataObj = JSON.parseObject(data);
+					
+					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 content = request.getParameter("response");
+				
+				HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        if(hfMerchantConfig == null){
+		        	throw new BizException("机构[{}][{}]商户信息找不到", studentPaymentOrder.getTenantId(), studentPaymentOrder.getPaymentChannel());
+		        }
+				
+				// 构造结果通知请求对象
+				DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+				dto.setCipherText(content);
+				PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+				PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+				
+				dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+				
+				logger.info("易宝支付回调信息:response:{} plaintText:{}", content, dto.getPlainText());
+				
+				JSONObject dataObj = JSON.parseObject(dto.getPlainText());
+				
 				Map<String, String> notifyMap = new HashMap<>();
-
-				switch (transType) {
-				case "payment.succeeded":// 支付成功
-
-					notifyMap.put("channelType", dataObj.getString("pay_channel"));
+				notifyMap.put("channelType", dataObj.getString("channel"));
+				
+				if("SUCCESS".equals(dataObj.getString("status"))) {
 					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"));
+				}else {
 					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 "验签失败";
+				notifyMap.put("totalMoney", dataObj.getString("orderAmount"));
+				notifyMap.put("merOrderNo", dataObj.getString("orderId"));
+				studentPaymentOrderService.updateOrder(notifyMap);
+				
+				break;
+
+			default:
+				break;
 			}
+
+			
 		} catch (Exception e) {
 			return e.getMessage();
 		}
@@ -371,8 +512,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) {
@@ -417,7 +559,7 @@ public class StudentOrderController extends BaseController {
         if (!profiles.equals("dev") && !profiles.equals("test")) {
             return failed("非法操作");
         }
-        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING, "ADAPAY");
+        List<StudentPaymentOrder> payingOrders = studentPaymentOrderService.findOrdersByStatus(DealStatusEnum.ING);
 
         String[] statusArr = {"0", "1", "7"};
         for (StudentPaymentOrder payingOrder : payingOrders) {

二進制
mec-thirdparty/libs/yop-java-sdk-3.2.25-jdk18json.jar


+ 75 - 22
mec-thirdparty/pom.xml

@@ -8,6 +8,10 @@
 		<version>1.0</version>
 	</parent>
 
+	<properties>
+		<yop-java-sdk.version>4.3.3</yop-java-sdk.version>
+	</properties>
+
 	<artifactId>mec-thirdparty</artifactId>
 
 	<name>mec-thirdparty</name>
@@ -19,95 +23,144 @@
 		<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>
-			<artifactId>aliyun-sdk-oss</artifactId>
+			<groupId>
+				com.aliyun.oss</groupId>
+			<artifactId>
+				aliyun-sdk-oss</artifactId>
 			<version>2.8.3</version>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>tech-sdk</artifactId>
 			<version>2.1.20</version>
-			<scope>system</scope>
+			<scope>
+				system</scope>
 			<systemPath>${project.basedir}/libs/tech-sdk-2.1.20.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>smUtil</artifactId>
 			<version>1.0</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/smUtil-1.0.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/smUtil-1.0.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>tgtext</artifactId>
 			<version>3.2.14</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/tgtext-3.2.14.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/tgtext-3.2.14.jar</systemPath>
 		</dependency>
 		
 		<dependency>
-			<groupId>com.timevale</groupId>
+			<groupId>
+				com.timevale</groupId>
 			<artifactId>utils</artifactId>
 			<version>3.0.6</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/utils-3.0.6.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/utils-3.0.6.jar</systemPath>
 		</dependency>
 
 		<dependency>
-			<groupId>cfca.sadk</groupId>
+			<groupId>
+				cfca.sadk</groupId>
 			<artifactId>cfca.sadk</artifactId>
 			<version>1.0.0</version>
 			<scope>system</scope>
-			<systemPath>${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
+			<systemPath>
+				${project.basedir}/libs/SADK-3.2.5.2.jar</systemPath>
 		</dependency>
 
 		<dependency>
-			<groupId>com.huifu.adapay.core</groupId>
+			<groupId>com.yeepay.yop</groupId>
+			<artifactId>yop-java-sdk</artifactId>
+			<version>3.2.25-jdk18json</version>
+			<scope>system</scope>
+			<systemPath>
+				${project.basedir}/libs/yop-java-sdk-3.2.25-jdk18json.jar</systemPath>
+		</dependency>
+
+		<dependency>
+			<groupId>
+				com.huifu.adapay.core</groupId>
 			<artifactId>adapay-core-sdk</artifactId>
-			<version>1.2.10</version>
+			<version>
+				1.2.10</version>
 		</dependency>
 	
 		<!-- https://mvnrepository.com/artifact/com.huifu.adapay/adapay-java-sdk -->
 		<dependency>
 			<groupId>com.huifu.adapay</groupId>
-			<artifactId>adapay-java-sdk</artifactId>
+			<artifactId>
+				adapay-java-sdk</artifactId>
 			<version>1.2.10</version>
 		</dependency>
 		
 		<dependency>
-		    <groupId>org.apache.commons</groupId>
+		    <groupId>
+				org.apache.commons</groupId>
 		    <artifactId>commons-email</artifactId>
 		    <version>1.5</version>
 		</dependency>
 
 		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-openfeign</artifactId>
+			<groupId>
+				org.springframework.cloud</groupId>
+			<artifactId>
+				spring-cloud-starter-openfeign</artifactId>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form-spring -->
 		<dependency>
-			<groupId>io.github.openfeign.form</groupId>
+			<groupId>
+				io.github.openfeign.form</groupId>
 			<artifactId>feign-form-spring</artifactId>
-			<version>2.0.5</version>
+			<version>
+				2.0.5</version>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/io.github.openfeign.form/feign-form-spring -->
 		<dependency>
 			<groupId>io.github.openfeign.form</groupId>
-			<artifactId>feign-form-spring</artifactId>
+			<artifactId>
+				feign-form-spring</artifactId>
 			<version>2.0.5</version>
 		</dependency>
         
 		<dependency>
-			<groupId>com.ksyun</groupId>
+			<groupId>
+				com.ksyun</groupId>
 			<artifactId>ks3-kss-java-sdk</artifactId>
 			<version>0.8.14</version>
 		</dependency>
+
+		<dependency>
+			<groupId>com.alipay.sdk</groupId>
+			<artifactId>alipay-sdk-java</artifactId>
+			<version>4.35.154.ALL</version>
+		</dependency>
 	</dependencies>
 
 </project>

+ 1 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Payment.java

@@ -136,6 +136,7 @@ public class Payment {
         paymentParams.put("orderSubject", orderSubject);
         paymentParams.put("orderBody", orderBody);
         paymentParams.put("wxAppId", hfMerchantConfig.getWxAppId());
+        paymentParams.put("alipayAppId", hfMerchantConfig.getAlipayAppId());
 
         String originalStr = JSONObject.toJSONString(paymentParams);
         String sign = DigestUtils.md5DigestAsHex(originalStr.getBytes());

+ 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签宝客户端失败");
         }
     }
 

+ 108 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayMerchantService.java

@@ -0,0 +1,108 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.yeepay.g3.sdk.yop.exception.YopClientException;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+
+@Service
+public class YeepayMerchantService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayMerchantService.class);
+
+	public JSONObject registerQueryV2(HfMerchantConfig hfMerchantConfig, String requestNo) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", requestNo);
+
+		YopResponse response = YopRsaClient.get("/rest/v2.0/mer/register/query", request);
+
+		LOGGER.info("易宝[商户入网查询][{}] resp:{}", requestNo, response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public Map<String, Object> registerSaasMerchantV2(HfMerchantConfig hfMerchantConfig, MerchantInfo merchantInfo, String notifyURL) throws IOException {
+
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+
+		request.addParam("requestNo", System.currentTimeMillis() + "");
+		request.addParam("businessRole", "SHARE_MERCHANT");
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+
+		Map<String, String> merchantSubjectInfoMap = new HashMap<String, String>();
+		merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceUrl());
+		merchantSubjectInfoMap.put("signName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("signType", "ENTERPRISE");
+		merchantSubjectInfoMap.put("licenceNo", merchantInfo.getLicenceNo());
+		merchantSubjectInfoMap.put("shortName", merchantInfo.getMerchantName());
+		merchantSubjectInfoMap.put("openAccountLicenceUrl", merchantInfo.getOpenAccountLicenceUrl());
+		request.addParam("merchantSubjectInfo", JSONObject.toJSONString(merchantSubjectInfoMap));
+
+		Map<String, String> merchantCorporationInfoMap = new HashMap<String, String>();
+		merchantCorporationInfoMap.put("legalName", merchantInfo.getLegalName());
+		merchantCorporationInfoMap.put("legalLicenceType", merchantInfo.getLegalLicenceType());
+		merchantCorporationInfoMap.put("legalLicenceNo", merchantInfo.getLegalLicenceNo());
+		merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
+		merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
+		request.addParam("merchantCorporationInfo", JSONObject.toJSONString(merchantCorporationInfoMap));
+
+		Map<String, String> merchantContactInfoMap = new HashMap<String, String>();
+		merchantContactInfoMap.put("contactName", merchantInfo.getContactName());
+		merchantContactInfoMap.put("contactLicenceNo", merchantInfo.getContactLicenceNo());
+		merchantContactInfoMap.put("contactMobile", merchantInfo.getContactMobile());
+		merchantContactInfoMap.put("contactEmail", merchantInfo.getContactEmail());
+		request.addParam("merchantContactInfo", JSONObject.toJSONString(merchantContactInfoMap));
+
+		request.addParam("industryCategoryInfo", "{ \"primaryIndustryCategory\":\"120\", \"secondaryIndustryCategory\":\"120004\" }");
+
+		Map<String, String> businessAddressInfoMap = new HashMap<String, String>();
+		businessAddressInfoMap.put("province", merchantInfo.getProvinceCode());
+		businessAddressInfoMap.put("city", merchantInfo.getCityCode());
+		businessAddressInfoMap.put("district", merchantInfo.getDistrictCode());
+		businessAddressInfoMap.put("address", merchantInfo.getAddress());
+		request.addParam("businessAddressInfo", JSONObject.toJSONString(businessAddressInfoMap));
+
+		Map<String, String> settlementAccountInfoMap = new HashMap<String, String>();
+		settlementAccountInfoMap.put("settlementDirection", "BANKCARD");
+		settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
+		settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
+		settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
+		request.addParam("settlementAccountInfo", JSONObject.toJSONString(settlementAccountInfoMap));
+
+		request.addParam("notifyUrl", notifyURL + "/" + request.getParamValue("requestNo"));
+		request.addParam("productInfo", "[{\"productCode\":\"D1\",\"rateType\":\"SINGLE_FIXED\",\"fixedRate\":\"0\",\"paymentMethod\":\"REAL_TIME\"}]");
+		//request.addParam("functionService", "[\"SHARE\"]");
+		//request.addParam("functionServiceQualificationInfo", "{\"shareScene\":\"FZ_ALL001\"}");
+
+
+		LOGGER.info("易宝[商户入网] req:{}", request);
+		
+		YopResponse response = YopRsaClient.post("/rest/v2.0/mer/register/saas/merchant", request);
+
+		LOGGER.info("易宝[商户入网] resp:{}", response.getStringResult());
+
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public void merchantInfoModify(String merchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+
+	}
+
+}

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

@@ -0,0 +1,106 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.exception.ThirdpartyException;
+import com.ym.mec.util.date.DateUtil;
+
+@Service
+public class YeepayPaymentService {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayPaymentService.class);
+
+	public Map<String, Object> prePay(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[创建支付对象] Req:{}", reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("orderAmount", params.get("orderAmount"));
+		request.addParam("expiredTime", DateUtil.addMinutes(new Date(), 30));
+		request.addParam("notifyUrl", params.get("notifyUrl"));
+		request.addParam("redirectUrl", params.get("redirectUrl"));
+		request.addParam("scene", params.get("scene"));
+		request.addParam("goodsName", params.get("goodsName"));
+		request.addParam("fundProcessType", params.get("fundProcessType"));
+		request.addParam("channel", params.get("channel"));
+		request.addParam("payWay", params.get("payWay"));
+		request.addParam("appId", params.get("appId"));
+		request.addParam("userId", params.get("userId"));
+		request.addParam("userIp", params.get("userIp"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/aggpay/pre-pay", request);
+
+		LOGGER.info("易宝[创建支付对象] Resp:{}", response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+
+		return jsonObject;
+	}
+
+	public Map<String, Object> queryOrder(HfMerchantConfig hfMerchantConfig,String merchantNo,  String orderNo) throws IOException {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+		request.addParam("merchantNo", hfMerchantConfig.getPlatformPayeeMemberId());
+		request.addParam("orderId", orderNo);
+		
+		YopResponse response = YopRsaClient.get("/rest/v1.0/trade/order/query", request);
+		
+		if("FAILURE".equals(response.getState())) {
+			throw new ThirdpartyException(response.getError().getSubMessage());
+		}
+
+		LOGGER.info("易宝[订单查询][{}] Resp:{}", orderNo, response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		if("OPR00000".equals(jsonObject.get("code").toString())) {
+
+			return jsonObject;
+    	}else if("OPR12002".equals(jsonObject.get("code").toString())) {
+    		//订单不存在
+    		jsonObject.put("status", "CLOSE");
+    		return jsonObject;
+    	}
+        throw new ThirdpartyException(jsonObject.get("message").toString());
+		
+	}
+
+	public Map<String,Object> divide(HfMerchantConfig hfMerchantConfig, Map<String, Object> params) throws IOException {
+		
+		String reqJson = JSON.toJSONString(params);
+		LOGGER.info("易宝[分账][{}] Req:{}", params.get("orderId"), reqJson);
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		request.addParam("parentMerchantNo", params.get("parentMerchantNo"));
+		request.addParam("merchantNo", params.get("merchantNo"));
+		request.addParam("orderId", params.get("orderId"));
+		request.addParam("uniqueOrderNo", params.get("uniqueOrderNo"));
+		request.addParam("divideRequestId", params.get("divideRequestId"));
+		request.addParam("divideDetail", params.get("divideDetail"));
+		
+		YopResponse response = YopRsaClient.post("/rest/v1.0/divide/apply", request);
+
+		LOGGER.info("易宝[分账][{}] Resp:{}", params.get("orderId"), response.getStringResult());
+		
+		JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+		
+		return jsonObject;
+	}
+}

+ 41 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayUploadService.java

@@ -0,0 +1,41 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.client.YopRequest;
+import com.yeepay.g3.sdk.yop.client.YopResponse;
+import com.yeepay.g3.sdk.yop.client.YopRsaClient;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+
+@Service
+public class YeepayUploadService {
+	
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayUploadService.class);
+
+	public String upload(HfMerchantConfig hfMerchantConfig, File file) {
+		
+		YopRequest request = new YopRequest(hfMerchantConfig.getAppId(), hfMerchantConfig.getRsaPrivateKey());
+		
+		request.addFile("merQual", file);
+		try {
+			YopResponse response = YopRsaClient.upload("/yos/v1.0/sys/merchant/qual/upload", request);
+			
+			LOGGER.info("易宝上传接口 resp:{}", response.getStringResult());
+			
+			JSONObject jsonObject = JSONObject.parseObject(response.getStringResult());
+			
+			return jsonObject.getString("merQualUrl");
+		} catch (IOException e) {
+			LOGGER.error("Exception when calling SysClient#merchantQualUpload, ex:", e);
+		}
+        
+        return null;
+		
+	}
+}

+ 260 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/entity/MerchantInfo.java

@@ -0,0 +1,260 @@
+package com.ym.mec.thirdparty.yeepay.entity;
+
+public class MerchantInfo {
+	
+	private String requestNo;
+
+	//-----企业信息
+	private String merchantName; //企业名称
+	
+	private String licenceNo; //商户证件编号
+	
+	private String licenceUrl; //商户证件照片
+	
+	private String openAccountLicenceUrl; //开户许可证照片
+	
+	private String provinceCode; //商户实际经营地所在省
+	
+	private String cityCode; //商户实际经营地所在市
+	
+	private String districtCode; //商户实际经营地所在区
+	
+	private String address; //商户实际经营详细地址
+	
+	//-----法人信息
+	private String legalName; //法人姓名
+	
+	private String legalLicenceType; //法人证件类型 ID_CARD(法人身份证)PASSPORT(护照) HM_VISITORPASS(港澳居民往来内地通行证)
+	
+	private String legalLicenceNo; //法人证件号码
+	
+	private String mobile; //
+	
+	private String legalLicenceFrontUrl; //法人证件人像面照片 请上传带有人像面的法人证件照片
+	
+	private String legalLicenceBackUrl; //法人证件非人像面照片
+	
+	//-----联系人信息
+	private String contactName; // 商户联系人姓名
+	
+	private String contactMobile; //商户联系人手机号	
+	
+	private String contactEmail; //商户联系人邮箱
+	
+	private String contactLicenceNo; //商户联系人证件号码
+	
+	//-----行业分类
+	private String primaryIndustryCategory; //一级行业分类编码
+	
+	private String secondaryIndustryCategory; //二级行业分类编码
+	
+	//-----结算账户信息
+	private String settlementDirection; //结算方向	ACCOUNT(结算到支付账户)   BANKCARD(结算到银行账户)
+	
+	private String bankAccountType; //银行账户类型
+	
+	private String bankCardNo; //银行账户号码 UNIT_SETTLEMENT_CARD(单位结算卡) ENTERPRISE_ACCOUNT(对公账户)  DEBIT_CARD(借记卡)   PASSBOOK(存折)
+	
+	private String bankCode; //银行账户开户总行编码
+
+	public String getRequestNo() {
+		return requestNo;
+	}
+
+	public void setRequestNo(String requestNo) {
+		this.requestNo = requestNo;
+	}
+
+	public String getMerchantName() {
+		return merchantName;
+	}
+
+	public void setMerchantName(String merchantName) {
+		this.merchantName = merchantName;
+	}
+
+	public String getLicenceNo() {
+		return licenceNo;
+	}
+
+	public void setLicenceNo(String licenceNo) {
+		this.licenceNo = licenceNo;
+	}
+
+	public String getLicenceUrl() {
+		return licenceUrl;
+	}
+
+	public void setLicenceUrl(String licenceUrl) {
+		this.licenceUrl = licenceUrl;
+	}
+
+	public String getOpenAccountLicenceUrl() {
+		return openAccountLicenceUrl;
+	}
+
+	public void setOpenAccountLicenceUrl(String openAccountLicenceUrl) {
+		this.openAccountLicenceUrl = openAccountLicenceUrl;
+	}
+
+	public String getProvinceCode() {
+		return provinceCode;
+	}
+
+	public void setProvinceCode(String provinceCode) {
+		this.provinceCode = provinceCode;
+	}
+
+	public String getCityCode() {
+		return cityCode;
+	}
+
+	public void setCityCode(String cityCode) {
+		this.cityCode = cityCode;
+	}
+
+	public String getDistrictCode() {
+		return districtCode;
+	}
+
+	public void setDistrictCode(String districtCode) {
+		this.districtCode = districtCode;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getLegalName() {
+		return legalName;
+	}
+
+	public void setLegalName(String legalName) {
+		this.legalName = legalName;
+	}
+
+	public String getLegalLicenceType() {
+		return legalLicenceType;
+	}
+
+	public void setLegalLicenceType(String legalLicenceType) {
+		this.legalLicenceType = legalLicenceType;
+	}
+
+	public String getLegalLicenceNo() {
+		return legalLicenceNo;
+	}
+
+	public void setLegalLicenceNo(String legalLicenceNo) {
+		this.legalLicenceNo = legalLicenceNo;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+
+	public String getLegalLicenceFrontUrl() {
+		return legalLicenceFrontUrl;
+	}
+
+	public void setLegalLicenceFrontUrl(String legalLicenceFrontUrl) {
+		this.legalLicenceFrontUrl = legalLicenceFrontUrl;
+	}
+
+	public String getLegalLicenceBackUrl() {
+		return legalLicenceBackUrl;
+	}
+
+	public void setLegalLicenceBackUrl(String legalLicenceBackUrl) {
+		this.legalLicenceBackUrl = legalLicenceBackUrl;
+	}
+
+	public String getContactName() {
+		return contactName;
+	}
+
+	public void setContactName(String contactName) {
+		this.contactName = contactName;
+	}
+
+	public String getContactMobile() {
+		return contactMobile;
+	}
+
+	public void setContactMobile(String contactMobile) {
+		this.contactMobile = contactMobile;
+	}
+
+	public String getContactEmail() {
+		return contactEmail;
+	}
+
+	public void setContactEmail(String contactEmail) {
+		this.contactEmail = contactEmail;
+	}
+
+	public String getContactLicenceNo() {
+		return contactLicenceNo;
+	}
+
+	public void setContactLicenceNo(String contactLicenceNo) {
+		this.contactLicenceNo = contactLicenceNo;
+	}
+
+	public String getPrimaryIndustryCategory() {
+		return primaryIndustryCategory;
+	}
+
+	public void setPrimaryIndustryCategory(String primaryIndustryCategory) {
+		this.primaryIndustryCategory = primaryIndustryCategory;
+	}
+
+	public String getSecondaryIndustryCategory() {
+		return secondaryIndustryCategory;
+	}
+
+	public void setSecondaryIndustryCategory(String secondaryIndustryCategory) {
+		this.secondaryIndustryCategory = secondaryIndustryCategory;
+	}
+
+	public String getSettlementDirection() {
+		return settlementDirection;
+	}
+
+	public void setSettlementDirection(String settlementDirection) {
+		this.settlementDirection = settlementDirection;
+	}
+
+	public String getBankAccountType() {
+		return bankAccountType;
+	}
+
+	public void setBankAccountType(String bankAccountType) {
+		this.bankAccountType = bankAccountType;
+	}
+
+	public String getBankCardNo() {
+		return bankCardNo;
+	}
+
+	public void setBankCardNo(String bankCardNo) {
+		this.bankCardNo = bankCardNo;
+	}
+
+	public String getBankCode() {
+		return bankCode;
+	}
+
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+	
+}

+ 0 - 0
mec-thirdparty/src/test/resources/yeepay_config.json


+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -43,7 +43,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/queryAll","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
-                        "/tenantInfo/callback","/adapay/callback","/temp/*", "/open/**","/schoolActivity/detail/*"
+                        "/tenantInfo/callback/**","/adapay/callback","/temp/*", "/open/**","/schoolActivity/detail/*","/yeepay/callback/**"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 3 - 3
mec-web/src/main/java/com/ym/mec/web/controller/HfMerchantConfigController.java

@@ -68,9 +68,9 @@ public class HfMerchantConfigController extends BaseController {
     }
 
     @ApiOperation("根据机构id查询汇付商户配置")
-    @GetMapping(value = "/queryByTenantId/{id}")
-    public HttpResponseResult<HfMerchantConfig> queryByTenantId(@ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
-        return succeed(hfMerchantConfigService.queryByTenantId(id));
+    @GetMapping(value = "/queryByTenantId/{payerName}/{id}")
+    public HttpResponseResult<HfMerchantConfig> queryByTenantId(@PathVariable("payerName") String payerName, @ApiParam(value = "机构ID", required = true) @PathVariable("id") Integer id) {
+        return succeed(hfMerchantConfigService.queryByTenantId(id, payerName));
     }
 
     @ApiOperation("分页查询汇付商户配置")

+ 21 - 10
mec-web/src/main/java/com/ym/mec/web/controller/StudentPaymentOrderController.java

@@ -1,5 +1,17 @@
 package com.ym.mec.web.controller;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
@@ -13,20 +25,11 @@ import com.ym.mec.biz.service.StudentPaymentOrderService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.stream.Collectors;
 
 @RequestMapping("order")
 @Api(tags = "订单服务")
@@ -160,4 +163,12 @@ public class StudentPaymentOrderController extends BaseController {
     public Object queryOrderDetail(Long orderId){
         return studentPaymentOrderDetailService.queryOrderDetail(orderId);
     }
+
+    @ApiOperation(value = "分账")
+    @PostMapping("/divideAmount")
+    @PreAuthorize("@pcs.hasPermissions('order/divideAmount')")
+    public Object divideAmount(Long orderId){
+    	StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(orderId);
+        return studentPaymentOrderService.confirmOrder(studentPaymentOrder);
+    }
 }

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

@@ -48,12 +48,6 @@ public class SysPaymentConfigController extends BaseController {
         if (paymentConfig != null) {
             return failed("此分部配置已经存在");
         }
-        if(StringUtils.isNotBlank(sysPaymentConfig.getHfMerNo())){
-            SysPaymentConfig nowConfig = sysPaymentConfigService.findPaymentConfigByMerNo(sysPaymentConfig.getHfMerNo());
-            if(nowConfig != null){
-                return failed("汇付商户号已配置,不同分部请勿配置相同商户号");
-            }
-        }
 
         Date nowDate = new Date();
         sysPaymentConfig.setCreateTime(nowDate);
@@ -135,7 +129,6 @@ public class SysPaymentConfigController extends BaseController {
             paymentConfig.setUpdateTime(nowDate);
             sysPaymentConfigService.update(paymentConfig);
         } else {
-            config.setPayType(PaymentChannelEnum.ADAPAY);
             config.setType(2);
             config.setCreateTime(nowDate);
             config.setUpdateTime(nowDate);

+ 3 - 3
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -187,9 +187,9 @@ public class TenantInfoController extends BaseController {
         return succeed();
     }
 
-    @PostMapping("/callback")
-    public String callback(HttpServletRequest request) {
-        return tenantOrderRecordService.callback(request);
+    @PostMapping("/callback/{orderNo}")
+    public String callback(@PathVariable("orderNo") String orderNo, HttpServletRequest request) {
+        return tenantOrderRecordService.callback(orderNo, request);
     }
 
 }

+ 11 - 3
mec-web/src/main/java/com/ym/mec/web/controller/AdapayController.java → mec-web/src/main/java/com/ym/mec/web/controller/payment/AdapayController.java

@@ -1,4 +1,4 @@
-package com.ym.mec.web.controller;
+package com.ym.mec.web.controller.payment;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,6 +34,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.huifu.adapay.core.AdapayCore;
 import com.huifu.adapay.core.util.AdapaySign;
 import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
@@ -67,6 +68,7 @@ public class AdapayController extends BaseController {
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('adapay/queryPage')")
     public HttpResponseResult<PageInfo<HfMember>> queryPage(HfMemberQueryInfo queryInfo) {
+    	queryInfo.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
         return succeed(hfMemberService.queryPage(queryInfo));
     }
 
@@ -87,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 +"]在系统中不存在";
 			}
@@ -144,6 +146,9 @@ public class AdapayController extends BaseController {
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
+        
+        member.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
+        
         File file = new File("/var/tmp/" + member.getMultipartFile().getOriginalFilename());
         InputStream inputStream = member.getMultipartFile().getInputStream();
 
@@ -172,6 +177,9 @@ public class AdapayController extends BaseController {
         if (member.getMultipartFile().isEmpty()) {
             return failed("证件压缩文件必传");
         }
+        
+        member.setPayerName(PaymentChannelEnum.ADAPAY.getCode());
+        
         File file = new File("/var/tmp/" + member.getMultipartFile().getOriginalFilename());
         InputStream inputStream = member.getMultipartFile().getInputStream();
 
@@ -213,7 +221,7 @@ public class AdapayController extends BaseController {
         int pageIndex = 1;
         List<Map<String, Object>> data = new ArrayList<>();
         while (profiles.equals("prod")) {
-        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId());
+        	HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.ADAPAY.getCode());
             if(hfMerchantConfig == null){
             	throw new BizException("机构[{}]汇付商户信息找不到", TenantContextHolder.getTenantId());
             }

+ 199 - 0
mec-web/src/main/java/com/ym/mec/web/controller/payment/YeepayController.java

@@ -0,0 +1,199 @@
+package com.ym.mec.web.controller.payment;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.util.Date;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+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.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yeepay.g3.sdk.yop.encrypt.DigitalEnvelopeDTO;
+import com.yeepay.g3.sdk.yop.utils.DigitalEnvelopeUtils;
+import com.yeepay.g3.sdk.yop.utils.RSAKeyUtils;
+import com.ym.mec.biz.dal.dto.YeepayMember;
+import com.ym.mec.biz.dal.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.page.HfMemberQueryInfo;
+import com.ym.mec.biz.service.HfMemberService;
+import com.ym.mec.biz.service.HfMerchantConfigService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
+import com.ym.mec.thirdparty.yeepay.YeepayUploadService;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RequestMapping("yeepay")
+@Api(tags = "易宝支付服务")
+@RestController
+public class YeepayController extends BaseController {
+    private static final Logger logger = LoggerFactory.getLogger(YeepayController.class);
+
+    @Autowired
+    private HfMemberService hfMemberService;
+    
+    @Autowired
+    private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
+    private YeepayUploadService yeepayUploadService;
+    
+    @Autowired
+    private YeepayMerchantService yeepayMerchantService;
+
+    @Value("${spring.profiles.active:dev}")
+    private String profiles;
+
+    @ApiOperation(value = "企业用户列表")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/queryPage')")
+    public HttpResponseResult<PageInfo<HfMember>> queryPage(HfMemberQueryInfo queryInfo) {
+    	
+    	queryInfo.setPayerName(PaymentChannelEnum.YEEPAY.getCode());
+        return succeed(hfMemberService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "企业用户注册查询")
+    @GetMapping("/registerQuery")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/registerQuery')")
+    public HttpResponseResult<JSONObject> registerQuery(String requestNo) throws IOException {
+		
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        }
+        
+        return succeed(yeepayMerchantService.registerQueryV2(hfMerchantConfig, requestNo));
+    }
+
+    @ApiOperation("新建企业用户")
+    @PostMapping(value = "addSubMerchant")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/addSubMerchant')")
+    public HttpResponseResult<Boolean> addSubMerchant(YeepayMember member) throws Exception {
+		/*
+		 * if (!profiles.equals("prod")) { return failed("仅生产环境可用"); }
+		 */
+        
+        member.setPayerName(PaymentChannelEnum.YEEPAY.getCode());
+        
+        return succeed(hfMemberService.createMember(member, null));
+    }
+
+    @ApiOperation("修改企业用户(状态是failed才能修改)")
+    @PostMapping(value = "updateSubMerchant")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/updateSubMerchant')")
+    public HttpResponseResult<Boolean> updateSubMerchant(MerchantInfo merchantInfo) throws Exception {
+
+    	return null;
+    }
+
+    @PostMapping("/callback/{requestNo}")
+	public String callback(@PathVariable("requestNo") String requestNo, HttpServletRequest request) {
+    	
+    	HfMember hfMember = hfMemberService.queryByRequestNo(requestNo);
+		if(hfMember == null){
+			return "请求编号["+ requestNo +"]在系统中不存在";
+		}
+		hfMember.setUpdateTime(new Date());
+
+		HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(hfMember.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        if(hfMerchantConfig == null){
+        	throw new BizException("机构[{}][{}]商户信息找不到", hfMember.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+        }
+        
+		try {
+
+			String content = request.getParameter("response");
+			
+			// 构造结果通知请求对象
+			DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+			dto.setCipherText(content);
+			PrivateKey privateKey =RSAKeyUtils.string2PrivateKey(hfMerchantConfig.getRsaPrivateKey());
+			PublicKey publicKey = RSAKeyUtils.string2PublicKey(hfMerchantConfig.getRsaPublicKey());
+			
+			dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+			
+			logger.info("易宝支付回调信息:response:{} plaintText:{}", content, dto.getPlainText());
+			
+			JSONObject dataObj = JSON.parseObject(dto.getPlainText());
+			
+			if("COMPLETED".equals(dataObj.getString("applicationStatus"))) {
+				//审核成功
+				hfMember.setStatus("succeeded");
+				hfMemberService.update(hfMember);
+			}else if("REVIEW_BACK".equals(dataObj.getString("applicationStatus"))) {
+				//审核驳回
+				hfMember.setStatus("failed");
+				hfMember.setMemo(dataObj.getString("returnMsg"));
+				hfMemberService.update(hfMember);
+			}
+			
+			return "SUCCESS";
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		return null;
+    }
+
+    @ApiOperation("修改企业用户(状态是failed才能修改)")
+    @PostMapping(value = "upload")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/upload')")
+    public HttpResponseResult<String> upload(MultipartFile multipartFile) throws Exception {
+    	
+
+        File file = new File("/var/tmp/" + multipartFile.getOriginalFilename());
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+        }
+        FileOutputStream fos = new FileOutputStream(file);
+        InputStream inputStream = multipartFile.getInputStream();
+
+        try {
+            IOUtils.copy(inputStream, fos);
+            inputStream.close();
+            fos.close();
+            
+            HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(TenantContextHolder.getTenantId(), PaymentChannelEnum.YEEPAY.getCode());
+            if(hfMerchantConfig == null){
+            	throw new BizException("请配置机构的易宝商户信息");
+            }
+        	
+            return succeed(yeepayUploadService.upload(hfMerchantConfig, file));
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        } finally {
+        	IOUtils.closeQuietly(fos);
+            IOUtils.closeQuietly(inputStream);
+            FileUtils.deleteQuietly(file);
+        }
+
+    }
+
+}