yonge 2 years ago
parent
commit
da0c1d50a5

+ 2 - 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
      * @param memberId
      * @return
      * @return
      */
      */
-    HfMember getByMemberId(@Param("memberId") String memberId);
+    HfMember getByMemberId(@Param("memberId") String memberId, @Param("payerName") String payerName);
 
 
     /**
     /**
      * 根据名字获取商户信息
      * 根据名字获取商户信息
@@ -21,6 +21,6 @@ public interface HfMemberDao extends BaseDAO<Integer, HfMember> {
      * @param name
      * @param name
      * @return
      * @return
      */
      */
-    HfMember getByName(@Param("name") String name);
+    HfMember getByName(@Param("name") String name, @Param("payerName") String payerName);
 
 
 }
 }

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

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

+ 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 memberId;
 
 
     private String status;
     private String status;
+    
+    private String payerName;
 
 
     public String getName() {
     public String getName() {
         return name;
         return name;
@@ -33,4 +35,12 @@ public class HfMemberQueryInfo extends QueryInfo {
     public void setStatus(String status) {
     public void setStatus(String status) {
         this.status = status;
         this.status = status;
     }
     }
+
+	public String getPayerName() {
+		return payerName;
+	}
+
+	public void setPayerName(String payerName) {
+		this.payerName = payerName;
+	}
 }
 }

+ 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> {
 public interface HfMerchantConfigService extends BaseService<Integer, HfMerchantConfig> {
 
 
-	HfMerchantConfig queryByTenantId(Integer tenantId);
+	HfMerchantConfig queryByTenantId(Integer tenantId, String payerName);
 }
 }

+ 102 - 39
mec-biz/src/main/java/com/ym/mec/biz/service/impl/HfMemberServiceImpl.java

@@ -3,16 +3,18 @@ package com.ym.mec.biz.service.impl;
 import java.io.File;
 import java.io.File;
 import java.util.Date;
 import java.util.Date;
 
 
-import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import com.yeepay.yop.sdk.service.mer.response.RegisterSaasMerchantV2Response;
 import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
 import com.ym.mec.biz.dal.config.AdapayNotifyConstants;
 import com.ym.mec.biz.dal.dao.HfMemberDao;
 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.entity.HfMember;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMemberService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.biz.service.HfMerchantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.dal.BaseDAO;
@@ -23,6 +25,8 @@ import com.ym.mec.thirdparty.adapay.SettleAccountService;
 import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
 import com.ym.mec.thirdparty.adapay.entity.AccountInfo;
 import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
 import com.ym.mec.thirdparty.adapay.entity.EnterpriseUser;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
+import com.ym.mec.thirdparty.yeepay.YeepayMerchantService;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
 
 
 @Service
 @Service
 public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
 public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> implements HfMemberService {
@@ -38,6 +42,9 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     
     
     @Autowired
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
     private HfMerchantConfigService hfMerchantConfigService;
+    
+    @Autowired
+    private YeepayMerchantService yeepayMerchantService;
 
 
     @Value("${spring.profiles.active:dev}")
     @Value("${spring.profiles.active:dev}")
     private String env;
     private String env;
@@ -57,48 +64,30 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 	@Override
 	@Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public boolean createMember(HfMember member, File file) throws Exception {
     public boolean createMember(HfMember member, File file) throws Exception {
-        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId());
+        HfMember hasMember = hfMemberDao.getByMemberId(member.getMemberId(), member.getPayerName());
         if (hasMember != null) {
         if (hasMember != null) {
             throw new BizException("商户号不能与已有商户相同,请核查");
             throw new BizException("商户号不能与已有商户相同,请核查");
         }
         }
-        hasMember = hfMemberDao.getByName(member.getName());
+        hasMember = hfMemberDao.getByName(member.getName(), member.getPayerName());
         if (hasMember != null) {
         if (hasMember != null) {
             throw new BizException("公司名与已有公司名相同,请核查");
             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:
+			RegisterSaasMerchantV2Response response = createMemberWithYeepay((YeepayMember) member);
+			member.setRequestNo(response.getResult().getRequestNo());
+			member.setMemberId(response.getResult().getMerchantNo());
+			break;
+
+		default:
+			
+			return false;
+		}
 
 
         Date nowDate = new Date();
         Date nowDate = new Date();
         member.setCreateTime(nowDate);
         member.setCreateTime(nowDate);
@@ -119,7 +108,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
 
 
         Integer tenantId = member.getTenantId();
         Integer tenantId = member.getTenantId();
         
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, member.getPayerName());
         if(hfMerchantConfig == null){
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
         }
@@ -165,7 +154,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public boolean mergeSettleAccount(String memberId, AccountInfo accountInfo) throws Exception {
     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")) {
         if (!hfMember.getStatus().equals("succeeded")) {
             throw new BizException("商户审核通过,才能绑定结算卡");
             throw new BizException("商户审核通过,才能绑定结算卡");
         }
         }
@@ -186,7 +175,7 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         
         
         Integer tenantId = hfMember.getTenantId();
         Integer tenantId = hfMember.getTenantId();
         
         
-        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
+        HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId, PaymentChannelEnum.ADAPAY.getCode());
         if(hfMerchantConfig == null){
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
         }
         }
@@ -205,4 +194,78 @@ public class HfMemberServiceImpl extends BaseServiceImpl<Integer, HfMember> impl
         }
         }
         return true;
         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(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());
+
+		return corpMemberService.create(hfMerchantConfig.getMerKey(), hfMerchantConfig.getAppId(), enterpriseUser, enterpriseUser.getNotifyUrl());
+	}
+	
+	private RegisterSaasMerchantV2Response createMemberWithYeepay(YeepayMember member) {
+
+		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.setCityCode(member.getAreaCode());
+		merchantInfo.setContactEmail(member.getContactEmail());
+		merchantInfo.setContactLicenceNo(member.getContactLicenseNo());
+		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 = AdapayNotifyConstants.corp_member_notify_url_test;
+		if (StringUtils.equals(env, "prod")) {
+			notifyURL = AdapayNotifyConstants.corp_member_notify_url_prod;
+		}
+		
+		return yeepayMerchantService.registerSaasMerchantV2(hfMerchantConfig.getAppId(), merchantInfo, notifyURL);
+	}
 }
 }

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

@@ -29,8 +29,8 @@ public class HfMerchantConfigServiceImpl extends BaseServiceImpl<Integer, HfMerc
 	}
 	}
 
 
 	@Override
 	@Override
-	public HfMerchantConfig queryByTenantId(Integer tenantId) {
-		return hfMerchantConfigDao.queryByTenantId(tenantId);
+	public HfMerchantConfig queryByTenantId(Integer tenantId, String payerName) {
+		return hfMerchantConfigDao.queryByTenantId(tenantId, payerName);
 	}
 	}
 	
 	
 }
 }

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

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

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

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

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

@@ -1,38 +0,0 @@
-package com.ym.mec.thirdparty.yeepay;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.yeepay.yop.sdk.base.auth.credentials.provider.YopFixedCredentialsProvider;
-import com.yeepay.yop.sdk.base.config.YopAppConfig;
-import com.yeepay.yop.sdk.config.enums.CertStoreType;
-import com.yeepay.yop.sdk.config.provider.file.YopCertConfig;
-import com.yeepay.yop.sdk.security.CertTypeEnum;
-
-public class CustomFixedCredentialsProvider extends YopFixedCredentialsProvider {
-	
-	private String appKey;
-	
-	private String 
-
-	@Override
-	protected YopAppConfig loadAppConfig(String appKey) {
-		YopAppConfig yopAppConfig = new YopAppConfig();
-        yopAppConfig.setAppKey(appKey);
-
-        // SM2 example
-        YopCertConfig sm2CertConfig = new YopCertConfig();
-        sm2CertConfig.setCertType(CertTypeEnum.SM2);
-        sm2CertConfig.setStoreType(CertStoreType.STRING);
-        sm2CertConfig.setValue("xxx");
-
-        // load into sdk config
-        List<YopCertConfig> isvPrivateKeys = new ArrayList<YopCertConfig>();
-        isvPrivateKeys.add(sm2CertConfig);
-        yopAppConfig.setIsvPrivateKey(isvPrivateKeys);
-
-
-        return yopAppConfig;
-	}
-
-}

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

@@ -0,0 +1,147 @@
+package com.ym.mec.thirdparty.yeepay;
+
+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.yop.sdk.exception.YopClientException;
+import com.yeepay.yop.sdk.service.mer.MerClient;
+import com.yeepay.yop.sdk.service.mer.MerClientBuilder;
+import com.yeepay.yop.sdk.service.mer.request.MerchantInfoModifyRequest;
+import com.yeepay.yop.sdk.service.mer.request.RegisterQueryV2Request;
+import com.yeepay.yop.sdk.service.mer.request.RegisterSaasMerchantV2Request;
+import com.yeepay.yop.sdk.service.mer.response.MerchantInfoModifyResponse;
+import com.yeepay.yop.sdk.service.mer.response.RegisterQueryV2Response;
+import com.yeepay.yop.sdk.service.mer.response.RegisterSaasMerchantV2Response;
+import com.ym.mec.thirdparty.yeepay.entity.MerchantInfo;
+
+@Service
+public class YeepayMerchantService {
+	
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayMerchantService.class);
+
+	private final MerClient api = MerClientBuilder.builder().build();
+	
+    public RegisterQueryV2Response registerQueryV2(String requestNo) throws YopClientException {
+        RegisterQueryV2Request request = new RegisterQueryV2Request();
+        request.setRequestNo(requestNo);
+        RegisterQueryV2Response response = api.registerQueryV2(request);
+        LOGGER.info("result:{}", response.getResult());
+        
+        return response;
+    }
+	
+	public RegisterSaasMerchantV2Response registerSaasMerchantV2(String parentMerchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+        RegisterSaasMerchantV2Request request = new RegisterSaasMerchantV2Request();
+        request.setRequestNo(System.currentTimeMillis() + "");
+        request.setBusinessRole("SHARE_MERCHANT");
+        request.setParentMerchantNo(parentMerchantNo);
+        
+        merchantInfo.setRequestNo(request.getRequestNo());
+        
+        Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
+        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceNo());
+        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.setMerchantSubjectInfo(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.getLicenceNo());
+        merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
+        merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
+        request.setMerchantCorporationInfo(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.setMerchantContactInfo(JSONObject.toJSONString(merchantContactInfoMap));
+        
+        request.setIndustryCategoryInfo("{ \"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.setBusinessAddressInfo(JSONObject.toJSONString(businessAddressInfoMap));
+        
+        Map<String,String> settlementAccountInfoMap = new HashMap<String, String>();
+        settlementAccountInfoMap.put("settlementDirection", merchantInfo.getSettlementDirection());
+        settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
+        settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
+        settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
+        request.setSettlementAccountInfo(JSONObject.toJSONString(settlementAccountInfoMap));
+        
+        request.setNotifyUrl(notifyURL);
+        request.setProductInfo("[{\"productCode\":\"D1\",\"rateType\":\"SINGLE_FIXED\",\"fixedRate\":\"0\",\"paymentMethod\":\"REAL_TIME\"}]");
+        //request.setProductQualificationInfo("{ \"paymentScene\": \"RLZYFW\",   \"systemScreenshotUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\",   \"specialPermitProcessUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\",   \"agreementPhotoUrl\": \"https://staticres.yeepay.com/xxx.文件后缀\" }");
+        request.setFunctionService("[\"SHARE\"]");
+        request.setFunctionServiceQualificationInfo("{\"shareScene\":\"FZ_ALL001\"}");
+        RegisterSaasMerchantV2Response response = api.registerSaasMerchantV2(request);
+        LOGGER.info("result:{}", response.getResult());
+
+        return response;
+    }
+	
+    public void merchantInfoModify(String merchantNo, MerchantInfo merchantInfo, String notifyURL) throws YopClientException {
+        MerchantInfoModifyRequest request = new MerchantInfoModifyRequest();
+        request.setRequestNo(System.currentTimeMillis() + "");
+        request.setMerchantNo(merchantNo);
+        request.setNotifyUrl(notifyURL);
+        
+        Map<String,String> merchantSubjectInfoMap = new HashMap<String, String>();
+        merchantSubjectInfoMap.put("licenceUrl", merchantInfo.getLicenceNo());
+        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.setMerchantSubjectInfo(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.getLicenceNo());
+        merchantCorporationInfoMap.put("legalLicenceFrontUrl", merchantInfo.getLegalLicenceFrontUrl());
+        merchantCorporationInfoMap.put("legalLicenceBackUrl", merchantInfo.getLegalLicenceBackUrl());
+        request.setMerchantCorporationInfo(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.setMerchantContactInfo(JSONObject.toJSONString(merchantContactInfoMap));
+        
+        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.setBusinessAddressInfo(JSONObject.toJSONString(businessAddressInfoMap));
+        
+        Map<String,String> settlementAccountInfoMap = new HashMap<String, String>();
+        settlementAccountInfoMap.put("settlementDirection", merchantInfo.getSettlementDirection());
+        settlementAccountInfoMap.put("bankCode", merchantInfo.getBankCode());
+        settlementAccountInfoMap.put("bankAccountType", merchantInfo.getBankAccountType());
+        settlementAccountInfoMap.put("bankCardNo", merchantInfo.getBankCardNo());
+        //request.setSettlementAccountInfo(JSONObject.toJSONString(settlementAccountInfoMap));
+        
+        request.setAccountInfo("{\"bankAccountName\":\"开户名称\",\"bankAccountType\":\"银行账户类型\",\"bankAccountNo\":\"银行账户号码\",\"bankCardTag\":\"[\\\"SETTLEMENT\\\",\\\"WITHDRAW\\\"]\",\"authorizationUrl\":\"https://staticres.yeepay.com/xxx.文件后缀\",\"bankCode\":\"开户总行编码\"}");
+        MerchantInfoModifyResponse response = api.merchantInfoModify(request);
+        LOGGER.info("result:{}", response.getResult());
+        // TODO: test validations
+    }
+	
+}

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

@@ -0,0 +1,37 @@
+package com.ym.mec.thirdparty.yeepay;
+
+import java.io.File;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import com.yeepay.yop.sdk.exception.YopClientException;
+import com.yeepay.yop.sdk.service.sys.SysClient;
+import com.yeepay.yop.sdk.service.sys.SysClientBuilder;
+import com.yeepay.yop.sdk.service.sys.request.MerchantQualUploadRequest;
+import com.yeepay.yop.sdk.service.sys.response.MerchantQualUploadResponse;
+
+@Service
+public class YeepayUploadService {
+	
+	private static final Logger LOGGER = LoggerFactory.getLogger(YeepayUploadService.class);
+
+    // 该Client线程安全,请使用单例模式,多次请求共用
+    private static final SysClient api = SysClientBuilder.builder().build();
+
+	public String upload(File file) {
+		MerchantQualUploadRequest request = new MerchantQualUploadRequest();
+        request.setMerQual(file);
+        try {
+            MerchantQualUploadResponse response = api.merchantQualUpload(request);
+            LOGGER.info("result:{}", response.getResult());
+            
+            return response.getResult().getMerQualUrl();
+        } catch (YopClientException 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;
+	}
+	
+}

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

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

@@ -0,0 +1,113 @@
+package com.ym.mec.web.controller.payment;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.yeepay.yop.sdk.service.mer.response.RegisterQueryV2Response;
+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.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+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 {
+
+    @Autowired
+    private HfMemberService hfMemberService;
+    
+    @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<RegisterQueryV2Response> registerQuery(String requestNo) {
+    	
+        return succeed(yeepayMerchantService.registerQueryV2(requestNo));
+    }
+
+    @ApiOperation("新建企业用户")
+    @PostMapping(value = "addSubMerchant")
+    @PreAuthorize("@pcs.hasPermissions('yeepay/addSubMerchant')")
+    public HttpResponseResult<Boolean> addSubMerchant(YeepayMember member) throws Exception {
+        if (!profiles.equals("prod")) {
+            return failed("仅生产环境可用");
+        }
+        
+        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;
+    }
+
+    @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());
+        InputStream inputStream = multipartFile.getInputStream();
+
+        try {
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            FileOutputStream fos = new FileOutputStream(file);
+            IOUtils.copy(inputStream, fos);
+        	
+            return succeed(yeepayUploadService.upload(file));
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        } finally {
+            IOUtils.closeQuietly(inputStream);
+            FileUtils.deleteQuietly(file);
+        }
+
+    }
+
+}