Kaynağa Gözat

机构子账户

liujc 1 yıl önce
ebeveyn
işleme
c83fe227ef

+ 5 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -368,4 +368,9 @@ public interface SysConfigConstant {
      * 机构人员解绑申请超时时间,分钟
      */
     String TENANT_USER_UNBIND_EXPIRE_TIME = "tenant_user_unbind_expire_time";
+
+    /**
+     *  子账户创建回调url
+     */
+    String SUB_ACCOUNT_CREATE_CALLBACK_URL = "sub_account_create_callback_url";
 }

+ 30 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/EPayerType.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.common.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+public enum EPayerType implements BaseEnum<String, EPayerType> {
+
+    ADAPAY("adapay"),
+    YEEPAY("yeepay"),
+    ;
+
+    @EnumValue
+    private String code;
+
+    private String desc;
+
+    EPayerType(String desc) {
+        this.code = this.name();
+        this.desc = desc;
+    }
+
+    @Override
+    public String getCode() {
+        return name();
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+}

+ 47 - 8
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TenantMemberController.java

@@ -10,6 +10,8 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -25,6 +27,12 @@ import com.yonge.cooleshow.biz.dal.service.TenantMemberService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantMemberWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantMember;
 
+import javax.validation.Valid;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
 
 /**
  * @Author:haonan
@@ -64,19 +72,50 @@ public class TenantMemberController extends BaseController {
     @ApiOperation(value = "新增", notes = "机构子账户表- 传入 TenantMemberWrapper.InsertTenantMember")
     @PreAuthorize("@pcs.hasPermissions('tenantMember/add', {'BACKEND'})")
     @PostMapping("/add")
-    public HttpResponseResult add(@RequestBody TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) {
-
-        // 新增数据
-        return HttpResponseResult.succeed(tenantMemberService.add(tenantMember));
+    public HttpResponseResult add(@Valid @RequestBody TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) throws IOException {
+
+        File file = new File("/var/tmp/" + tenantMember.getMultipartFile().getOriginalFilename());
+        tenantMember.setFile(file);
+        InputStream inputStream = tenantMember.getMultipartFile().getInputStream();
+
+        try {
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            FileOutputStream fos = new FileOutputStream(file);
+            IOUtils.copy(inputStream, fos);
+            // 新增数据
+            return HttpResponseResult.succeed(tenantMemberService.add(tenantMember));
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        } finally {
+            IOUtils.closeQuietly(inputStream);
+            FileUtils.deleteQuietly(file);
+        }
     }
 
     @ApiOperation(value = "修改", notes = "机构子账户表- 传入 TenantMemberWrapper.InsertTenantMember")
     @PreAuthorize("@pcs.hasPermissions('tenantMember/update', {'BACKEND'})")
     @PostMapping("/update")
-    public HttpResponseResult update(@RequestBody TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) {
-
-        // 更新数据
-        return HttpResponseResult.succeed(tenantMemberService.update(tenantMember));
+    public HttpResponseResult update(@RequestBody TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) throws IOException {
+        File file = new File("/var/tmp/" + tenantMember.getMultipartFile().getOriginalFilename());
+        tenantMember.setFile(file);
+        InputStream inputStream = tenantMember.getMultipartFile().getInputStream();
+
+        try {
+            if (!file.getParentFile().exists()) {
+                file.getParentFile().mkdirs();
+            }
+            FileOutputStream fos = new FileOutputStream(file);
+            IOUtils.copy(inputStream, fos);
+            // 新增数据
+            return HttpResponseResult.succeed(tenantMemberService.update(tenantMember));
+        } catch (Exception e) {
+            return failed(e.getMessage());
+        } finally {
+            IOUtils.closeQuietly(inputStream);
+            FileUtils.deleteQuietly(file);
+        }
     }
 
 

+ 134 - 3
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/UserPaymentClient.java

@@ -1,16 +1,24 @@
 package com.yonge.cooleshow.admin.controller.open;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.AdapayCore;
+import com.huifu.adapay.core.util.AdapaySign;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.microsvc.toolkit.middleware.payment.common.api.PaymentServiceContext;
 import com.microsvc.toolkit.middleware.payment.common.api.entity.PaymentResp;
 import com.microsvc.toolkit.middleware.payment.common.api.entity.RefundResp;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
-import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
-import com.yonge.cooleshow.biz.dal.service.UserPaymentOrderService;
+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.yonge.cooleshow.biz.dal.entity.PaymentMerchantConfig;
+import com.yonge.cooleshow.biz.dal.entity.TenantMember;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.common.enums.EPayerType;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -22,6 +30,9 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.util.Date;
 import java.util.Objects;
 
 @Slf4j
@@ -40,6 +51,12 @@ public class UserPaymentClient {
     @Autowired
     private UserOrderService userOrderService;
 
+    @Autowired
+    private TenantMemberService tenantMemberService;
+
+    @Autowired
+    private PaymentMerchantConfigService paymentMerchantConfigService;
+
     /**
      * 支付消息回调
      * @param request HttpServletRequest
@@ -96,4 +113,118 @@ public class UserPaymentClient {
         return R.from(paymentConfig);
     }
 
+
+    @PostMapping("/callback/adapay")
+    public String callback(HttpServletRequest request) {
+        try {
+            // 验签请参data
+            String data = request.getParameter("data");
+            // 验签请参sign
+            String sign = request.getParameter("sign");
+
+            // 验签
+            if (!AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+                return "验签失败";
+            }
+
+            JSONObject dataObj = JSON.parseObject(data);
+
+            String memberId = dataObj.getString("member_id");
+
+            TenantMember tenantMember = tenantMemberService.getByMemberId(memberId, EPayerType.YEEPAY);
+            if(tenantMember == null){
+                return "账户["+ memberId +"]在系统中不存在";
+            }
+            tenantMember.setUpdateTime(new Date());
+
+            String transType = request.getParameter("type");
+
+            switch (transType) {
+
+                case "corp_member.succeeded":// 企业子账户开户成功
+                    String settleAccountId = dataObj.getString("settle_account_id");
+                    tenantMember.setSettleAccountId(settleAccountId);
+                    tenantMember.setStatus(AuthStatusEnum.PASS);
+
+                    break;
+
+                case "corp_member.failed":// 企业子账户开户失败
+                    tenantMember.setStatus(AuthStatusEnum.UNPASS);
+                    tenantMember.setMemo(dataObj.getString("audit_desc"));
+
+                    break;
+
+                case "corp_member_update.succeeded":// 更新企业用户对象成功
+                    tenantMember.setStatus(AuthStatusEnum.PASS);
+
+                    break;
+
+                case "corp_member_update.failed":// 更新企业用户对象失败
+                    tenantMember.setStatus(AuthStatusEnum.UNPASS);
+                    tenantMember.setMemo(dataObj.getString("audit_desc"));
+
+                    break;
+
+                default:
+                    break;
+            }
+
+            tenantMemberService.updateById(tenantMember);
+
+        } catch (Exception e) {
+            return e.getMessage();
+        }
+
+        return "succeeded";
+    }
+
+
+    @PostMapping("/callback/yeepay/{requestNo}")
+    public String callback(@PathVariable("requestNo") String requestNo, HttpServletRequest request) {
+
+        TenantMember tenantMember = tenantMemberService.getByRequestNo(requestNo);
+        if(tenantMember == null){
+            return "请求编号["+ requestNo +"]在系统中不存在";
+        }
+        tenantMember.setUpdateTime(new Date());
+
+        PaymentMerchantConfig paymentMerchantConfig = paymentMerchantConfigService.getByPaymentVendor(tenantMember.getPayerName());
+        if(paymentMerchantConfig == null){
+            throw new BizException("机构[{}][{}]商户信息找不到", tenantMember.getTenantId(), EPayerType.YEEPAY.getCode());
+        }
+
+        try {
+
+            String content = request.getParameter("response");
+
+            // 构造结果通知请求对象
+            DigitalEnvelopeDTO dto = new DigitalEnvelopeDTO();
+            dto.setCipherText(content);
+            PrivateKey privateKey = RSAKeyUtils.string2PrivateKey(paymentMerchantConfig.getRsaPrivateKey());
+            PublicKey publicKey = RSAKeyUtils.string2PublicKey(paymentMerchantConfig.getRsaPublicKey());
+
+            dto = DigitalEnvelopeUtils.decrypt(dto, privateKey, publicKey);
+
+            log.info("易宝支付回调信息:response:{} plaintText:{}", content, dto.getPlainText());
+
+            JSONObject dataObj = JSON.parseObject(dto.getPlainText());
+
+            if("COMPLETED".equals(dataObj.getString("applicationStatus"))) {
+                //审核成功
+                tenantMember.setStatus(AuthStatusEnum.PASS);
+                tenantMemberService.updateById(tenantMember);
+            }else if("REVIEW_BACK".equals(dataObj.getString("applicationStatus"))) {
+                //审核驳回
+                tenantMember.setStatus(AuthStatusEnum.UNPASS);
+                tenantMember.setMemo(dataObj.getString("auditOpinion"));
+                tenantMemberService.updateById(tenantMember);
+            }
+
+            return "SUCCESS";
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/PaymentMerchantConfig.java

@@ -38,6 +38,11 @@ public class PaymentMerchantConfig implements Serializable {
 	@TableField(value = "payer_name_")
     private String payerName;
 
+    @ApiModelProperty("平台收款商户号")
+    @TableField(value = "platform_payee_member_id_")
+    private String platformPayeeMemberId;
+
+
     @ApiModelProperty("商户ID") 
 	@TableField(value = "app_id_")
     private String appId;

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/TenantMember.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.common.enums.EPayerType;
 import lombok.Data;
 
 import io.swagger.annotations.ApiModel;
@@ -35,6 +37,11 @@ public class TenantMember implements Serializable {
     @TableId(value = "id_")
     private Long id;
 
+    @ApiModelProperty("支付类型 ADAPAY,YEEPAY")
+    @TableField(value = "payer_type_")
+    private EPayerType payerType;
+
+
     @ApiModelProperty("支付渠道 ADAPAY,YEEPAY")
     @TableField(value = "payer_name_")
     private String payerName;
@@ -150,7 +157,7 @@ public class TenantMember implements Serializable {
 
     @ApiModelProperty("状态")
     @TableField(value = "status_")
-    private String status;
+    private AuthStatusEnum status;
 
     @ApiModelProperty("每月最大收款金额,0不限制")
     @TableField(value = "month_max_receipt_")

+ 0 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentMerchantConfigService.java

@@ -40,15 +40,6 @@ public interface PaymentMerchantConfigService extends IService<PaymentMerchantCo
      */
      Boolean update(PaymentMerchantConfigWrapper.PaymentMerchantConfig paymentMerchantConfig);
 
-    /**
-     * 根据机构查询三方汇付主账户
-     *
-     * @param tenantId
-     * @return
-     */
-    PaymentMerchantConfig getByTenantId(Long tenantId);
-
-    PaymentMerchantConfig getDefault();
 
     PaymentMerchantConfig getByPaymentVendor(String paymentVendor);
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantMemberService.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantMemberWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantMember;
+import com.yonge.cooleshow.common.enums.EPayerType;
 
 /**
  * @Author:haonan
@@ -55,4 +56,7 @@ public interface TenantMemberService extends IService<TenantMember>  {
      */
     Boolean updateCount(TenantMemberWrapper.UpdateCount tenantMember);
 
+    TenantMember getByMemberId(String memberId, EPayerType payerType);
+
+    TenantMember getByRequestNo(String requestNo);
 }

+ 0 - 18
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentMerchantConfigServiceImpl.java

@@ -106,24 +106,6 @@ public class PaymentMerchantConfigServiceImpl extends ServiceImpl<PaymentMerchan
         return this.updateById(JSON.parseObject(paymentMerchantConfig.jsonString(), PaymentMerchantConfig.class));       
     }
 
-    /**
-     * 根据机构查询三方汇付主账户
-     *
-     * @param tenantId
-     * @return
-     */
-    @Override
-    public PaymentMerchantConfig getByTenantId(Long tenantId) {
-        return this.lambdaQuery()
-                .eq(PaymentMerchantConfig::getTenantId, tenantId)
-                .last("limit 1")
-                .one();
-    }
-
-    @Override
-    public PaymentMerchantConfig getDefault() {
-        return getByTenantId(-1L);
-    }
 
     @Override
     public PaymentMerchantConfig getByPaymentVendor(String paymentVendor) {

+ 128 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantMemberServiceImpl.java

@@ -5,22 +5,30 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.additional.update.impl.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.microsvc.toolkit.middleware.payment.common.api.BasePaymentService;
+import com.microsvc.toolkit.middleware.payment.common.api.PaymentServiceContext;
+import com.microsvc.toolkit.middleware.payment.common.api.entity.PaymentMerchant;
+import com.yonge.cooleshow.biz.dal.entity.PaymentMerchantConfig;
 import com.yonge.cooleshow.biz.dal.entity.SysArea;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
 import com.yonge.cooleshow.biz.dal.mapper.SysAreaMapper;
+import com.yonge.cooleshow.biz.dal.service.PaymentMerchantConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import com.yonge.cooleshow.common.enums.EPayerType;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.beans.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
 import com.yonge.cooleshow.biz.dal.entity.TenantMember;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantMemberWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantMemberMapper;
 import com.yonge.cooleshow.biz.dal.service.TenantMemberService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -46,11 +54,13 @@ public class TenantMemberServiceImpl extends ServiceImpl<TenantMemberMapper, Ten
     private SysAreaMapper sysAreaMapper;
 
     @Autowired
-    private TenantInfoService tenantInfoService;
+    private PaymentServiceContext paymentServiceContext;
 
     @Autowired
-    private TenantMemberMapper tenantMemberMapper;
+    private PaymentMerchantConfigService paymentMerchantConfigService;
 
+    @Autowired
+    private SysConfigService sysConfigService;
 
     /**
      * 查询详情
@@ -105,24 +115,115 @@ public class TenantMemberServiceImpl extends ServiceImpl<TenantMemberMapper, Ten
      * @return Boolean
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean add(TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) {
-        /*//获得机构名称
-        Long tenantId = tenantMember.getTenantId();
-        TenantInfo info = tenantInfoService.lambdaQuery().eq(TenantInfo::getId, tenantId).list().get(0);
-        String name = info.getName();
-        tenantMember.setName();*/
+
+        PaymentMerchant.MerchantConfig merchantConfig = getMerchantConfig(tenantMember.getPayerName());
+        tenantMember.setRequestNo(IdWorker.getIdStr());
+
+        // 创建账户
+        BasePaymentService paymentService = paymentServiceContext.getPaymentService(tenantMember.getPayerName());
+
+        PaymentMerchant.MerchantMember merchantMember = getMerchantMember(tenantMember);
+        paymentService.createPaymentCorpMember(merchantConfig,merchantMember);
 
         return this.save(JSON.parseObject(tenantMember.jsonString(), TenantMember.class));
     }
 
+    private PaymentMerchant.MerchantMember getMerchantMember(TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember) {
+        PaymentMerchant.MerchantMember merchantMember = PaymentMerchant.MerchantMember.builder()
+                .memberId(tenantMember.getMemberId())
+                .merchantName(tenantMember.getName())
+                .merchantType(tenantMember.getMerchantType())
+                .provinceCode(tenantMember.getProvCode())
+                .cityCode(tenantMember.getAreaCode())
+                .districtCode(tenantMember.getDistrictCode())
+                .socialCreditCode(tenantMember.getSocialCreditCode())
+                .socialCreditCodeExpires(tenantMember.getSocialCreditCodeExpires())
+                .businessScope(tenantMember.getBusinessScope())
+                .legalName(tenantMember.getLegalPerson())
+                .legalLicenceNo(tenantMember.getLegalCertId())
+                .legalCertIdExpires(tenantMember.getLegalCertIdExpires())
+                .mobile(tenantMember.getLegalMp())
+                .legalLicenceType(tenantMember.getLegalLicenceType())
+                .legalLicenceFrontUrl(tenantMember.getLegalLicenceFrontUrl())
+                .legalLicenceBackUrl(tenantMember.getLegalLicenceBackUrl())
+                .address(tenantMember.getAddress())
+                .attachFile(tenantMember.getFile())
+                .bankCode(tenantMember.getBankCode())
+                .bankAccountType(tenantMember.getBankAcctType())
+                .bankCardNo(tenantMember.getBankCode())
+                .cardName(tenantMember.getCardName())
+                .zipCode(tenantMember.getZipCode())
+                .requestNo(tenantMember.getRequestNo())
+                .licenceNo(tenantMember.getSocialCreditCode())
+                .licenceUrl(tenantMember.getLicenceUrl())
+                .openAccountLicenceUrl(tenantMember.getOpenAccountLicenceUrl())
+                .contactName(tenantMember.getContactName())
+                .contactMobile(tenantMember.getContactMobile())
+                .contactEmail(tenantMember.getContactEmail())
+                .contactLicenceNo(tenantMember.getContactLicenceNo())
+                .primaryIndustryCategory("120")
+                .secondaryIndustryCategory("120004")
+                .settlementDirection("BANKCARD")
+                .build();
+        if (tenantMember.getPayerType().equals(EPayerType.ADAPAY)) {
+            merchantMember.setNotifyUrl(sysConfigService.findConfigValue(SysConfigConstant.SUB_ACCOUNT_CREATE_CALLBACK_URL +
+                    "/" + EPayerType.ADAPAY.getCode()));
+        } else if (tenantMember.getPayerType().equals(EPayerType.YEEPAY)) {
+            merchantMember.setNotifyUrl(sysConfigService.findConfigValue(SysConfigConstant.SUB_ACCOUNT_CREATE_CALLBACK_URL +
+                    "/" + EPayerType.YEEPAY.getCode()+"/"+tenantMember.getRequestNo()));
+        }
+        return merchantMember;
+
+    }
+
+    private PaymentMerchant.MerchantConfig getMerchantConfig(String paymentVerdor) {
+        // 注册对应的子账户
+        PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByPaymentVendor(paymentVerdor);
+
+        if (merchantConfig == null) {
+            throw new BizException("支付渠道不存在");
+        }
+
+        return PaymentMerchant.MerchantConfig.builder()
+                .payerName(paymentVerdor)
+                .appId(merchantConfig.getAppId())
+                .merchantKey(merchantConfig.getMerKey())
+                .apiKey(merchantConfig.getApiKey())
+                .rsaPrivateKey(merchantConfig.getRsaPrivateKey())
+                .rsaPublicKey(merchantConfig.getRsaPublicKey())
+                .wxAppId(merchantConfig.getWxAppId())
+                .wxAppSecret(merchantConfig.getWxAppSecret())
+                .alipayAppId(merchantConfig.getAlipayAppId())
+                .alipayPublicKey(merchantConfig.getAlipayPublicKey())
+                .platformPayeeMemberId(merchantConfig.getPlatformPayeeMemberId())
+                .build();
+    }
+
     /**
      * 更新
      * @param tenantMember TenantMemberWrapper.TenantMember
      * @return Boolean
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean update(TenantMemberWrapper.InsertOrUpdateTenantMember tenantMember){
 
+        TenantMember member = this.getById(tenantMember.getId());
+
+        PaymentMerchant.MerchantConfig merchantConfig = getMerchantConfig(tenantMember.getPayerName());
+
+        // 创建账户
+        BasePaymentService paymentService = paymentServiceContext.getPaymentService(tenantMember.getPayerName());
+
+        PaymentMerchant.MerchantMember merchantMember = getMerchantMember(tenantMember);
+
+        if (member.getPayerName().equals(tenantMember.getPayerName())) {
+            paymentService.updatePaymentCorpMember(merchantConfig, merchantMember);
+        } else {
+            paymentService.createPaymentCorpMember(merchantConfig, merchantMember);
+        }
 
         return this.updateById(JSON.parseObject(tenantMember.jsonString(), TenantMember.class));
     }
@@ -147,4 +248,21 @@ public class TenantMemberServiceImpl extends ServiceImpl<TenantMemberMapper, Ten
          return false;
     }
 
+    @Override
+    public TenantMember getByMemberId(String memberId, EPayerType payerType) {
+        return this.lambdaQuery()
+                .eq(TenantMember::getMemberId, memberId)
+                .eq(TenantMember::getPayerName, payerType.name())
+                .last("limit 1")
+                .one();
+    }
+
+    @Override
+    public TenantMember getByRequestNo(String requestNo) {
+        return this.lambdaQuery()
+                .eq(TenantMember::getRequestNo, requestNo)
+                .last("limit 1")
+                .one();
+    }
+
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -1008,7 +1008,7 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         }
         
         // 结算给机构的,检测机构的主账户,没有主账户的,查询-1的主账户
-        PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByTenantId(-1L);
+        PaymentMerchantConfig merchantConfig = paymentMerchantConfigService.getByPaymentVendor(paymentServiceContext.getProperties().getDefaultService());
         if (Objects.isNull(merchantConfig)) {
             throw new BizException("平台主账户信息不存在");
         }

+ 27 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantMemberWrapper.java

@@ -4,9 +4,12 @@ package com.yonge.cooleshow.biz.dal.wrapper;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.common.enums.EPayerType;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.File;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -14,6 +17,9 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
 
 /**
  * @Author:haonan
@@ -165,8 +171,8 @@ public class TenantMemberWrapper {
         @ApiModelProperty("备注")
         private String memo;
 
-        @ApiModelProperty("状态")
-        private String status;
+        @ApiModelProperty("状态 DOING 审核中 PASS 审核通过 UNPASS 审核拒绝")
+        private AuthStatusEnum status;
 
         @ApiModelProperty("每月最大收款金额,0不限制")
         private BigDecimal monthMaxReceipt;
@@ -214,12 +220,27 @@ public class TenantMemberWrapper {
         private Long id;
 
         @ApiModelProperty("机构ID")
+        @NotNull(message = "机构ID不能为空")
         private Long tenantId;
 
+
+
+        @ApiModelProperty("支付类型 ADAPAY,YEEPAY")
+        private EPayerType payerType;
+
+        @NotNull(message = "支付渠道不能为空")
+        @ApiModelProperty("支付渠道 ADAPAY,YEEPAY")
+        private String payerName;
+
+        @ApiModelProperty("请求id")
+        private String requestNo;
+
         @ApiModelProperty("商户号")
+        @NotNull(message = "商户号不能为空")
         private String memberId;
 
         @ApiModelProperty("公司名称")
+        @NotNull(message = "公司名称不能为空")
         private String name;
 
         @ApiModelProperty("统一社会信用码")
@@ -232,7 +253,10 @@ public class TenantMemberWrapper {
         private String legalPerson;
 
         @ApiModelProperty("证照文件")
-        private String multipartFile;
+        private MultipartFile multipartFile;
+
+        @ApiModelProperty(hidden = true)
+        private File file;
 
         @ApiModelProperty("法人手机号")
         private String legalMp;