From 3f0179a95fa1f967b276abea0b57d0226cec950c Mon Sep 17 00:00:00 2001 From: liuyingfang <1357764963@qq.com> Date: Mon, 16 Oct 2023 09:19:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E6=8F=90=E4=BA=A4=E5=88=B0?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E6=9B=B4=E6=94=B9=E8=B5=84=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chaozhanggui/admin/system/Shell.java | 1 + .../controller/MerchantInfoController.java | 13 + .../system/service/MerchantInfoService.java | 18 +- .../admin/src/main/resources/application.yml | 14 +- .../common/system/config/ParameterConfig.java | 39 ++- .../system/config/channel/SxfConfig.java | 90 ++++--- .../system/dao/TbPlussBankCodeSxfMapper.java | 1 + .../TbPlussMerchantChannelStatusMapper.java | 2 + .../mapper/TbPlussBankCodeSxfMapper.xml | 8 +- .../TbPlussMerchantChannelStatusMapper.xml | 19 +- .../mapper/TbPlussMerchantImageMapper.xml | 4 +- .../mapper/TbPlussUserPromotionMapper.xml | 1 + newadmin/merchant-service-api/pom.xml | 4 + .../merchant/service/MerchantService.java | 53 +++- .../service/sxf/BaseMerchantAuditService.java | 24 +- .../service/sxf/SxfMerchantAuditService.java | 183 ++++++++++--- .../merchant/service/ys/YSAuditServiceV3.java | 242 +++++++++++++++++- 17 files changed, 576 insertions(+), 140 deletions(-) diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/Shell.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/Shell.java index 5897397..17c48dc 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/Shell.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/Shell.java @@ -18,6 +18,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ImportResource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.Transactional; diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/MerchantInfoController.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/MerchantInfoController.java index de569e8..e9a5a56 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/MerchantInfoController.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/MerchantInfoController.java @@ -9,6 +9,7 @@ import com.chaozhanggui.common.system.config.RespBody; import com.chaozhanggui.dao.system.dao.TbPlussBankCodeSxfMapper; import com.chaozhanggui.dao.system.entity.*; import com.chaozhanggui.dao.system.entity.DTO.AccountDTO; +import com.chaozhanggui.merchant.service.sxf.SxfMerchantAuditService; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -34,6 +35,8 @@ public class MerchantInfoController { private SxfMccInfoService sxfMccInfoService; @Resource private AccountService accountService; + @Resource + private SxfMerchantAuditService sxfMerchantAuditService; /** @@ -60,6 +63,16 @@ public class MerchantInfoController { return merchantInfoService.updatePromoterInformation(userApp); } + /** + * 更改实名认证信息随行付测试 + * @return + */ + @PostMapping("/updateSxf") + public RespBody updateSxf(){ +// sxfMerchantAuditService.updateMerchantIdCard("399230310653864",); + return new RespBody("000000"); + } + /** * 修改商户相关信息 * @param merchantBaseInfo diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/service/MerchantInfoService.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/service/MerchantInfoService.java index fb9a988..2718cfd 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/service/MerchantInfoService.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/service/MerchantInfoService.java @@ -11,6 +11,7 @@ import com.chaozhanggui.dao.system.entity.*; import com.chaozhanggui.dao.system.entity.DTO.AccountDTO; import com.chaozhanggui.dao.system.entity.VO.AccountVO; import com.chaozhanggui.dao.system.entity.VO.MerchantBaseVO; +import com.chaozhanggui.merchant.service.MerchantService; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,6 +56,8 @@ public class MerchantInfoService { private TbPlussAreaCityMapper areaCityMapper; @Resource private TbPlussBankCodeSxfMapper bankCodeSxfMapper; + @Resource + private MerchantService merchantService; @@ -177,7 +180,6 @@ public class MerchantInfoService { } LambdaQueryWrapper sxfQueryWrapper = new LambdaQueryWrapper() .eq(StringUtils.isNotEmpty(userApp.getBankCard().getContactline()), TbPlussBankCodeSxf::getCnapsCode, userApp.getBankCard().getContactline()) - .eq(StringUtils.isNotEmpty(userApp.getBankCard().getBranchname()), TbPlussBankCodeSxf::getCnapsName, userApp.getBankCard().getBranchname()) .last("limit 1"); TbPlussBankCodeSxf bankCodeSxf = bankCodeSxfMapper.selectOne(sxfQueryWrapper); if (bankCodeSxf == null) { @@ -210,8 +212,8 @@ public class MerchantInfoService { appUser.setLoginname(userApp.getLoginname()); appUser.setUsername(userApp.getUsername()); appUser.setUserid(userApp.getUserid()); -// userAppMapper.updateByPrimaryKey(appUser); -// userInfoMapper.updateByPrimaryKey(userInfo); + userAppMapper.updateByPrimaryKey(appUser); + userInfoMapper.updateByPrimaryKey(userInfo); return new RespBody("000000"); } @@ -302,14 +304,10 @@ public class MerchantInfoService { bankCardMapper.updateByPrimaryKeySelective(account.getBankCard()); idCardMapper.updateByPrimaryKeySelective(account.getIdcard()); +// merchantService.updateMerchantBase(account.); return new RespBody("000000"); + } -// public RespBody channelAuditInfo(Integer userId){ -// TbPlussMerchantBaseInfo merchantBaseInfo = merchantBaseInfoMapper.selectByUserId(String.valueOf(userId)); -// if(merchantBaseInfo != null) { -// List merchantCodeList = merchantChannelStatusMapper.getByMerchantCodeList(merchantBaseInfo.getMerchantcode()); -// merchantCodeList -// } -// } + } diff --git a/newadmin/admin/src/main/resources/application.yml b/newadmin/admin/src/main/resources/application.yml index 17b8202..aa5fb84 100644 --- a/newadmin/admin/src/main/resources/application.yml +++ b/newadmin/admin/src/main/resources/application.yml @@ -8,7 +8,7 @@ server: # 指定日志级别 把springboot的所有日志修改成为debug logging: level: - root: info + root: debug mybatis: configuration: map-underscore-to-camel-case: true @@ -33,3 +33,15 @@ alipay-config: alipayRootCertPath: /home/www/service/key/alipayRootCert.crt +parameter: + ZY_ALI_APP_ID: 2021003175619219 + domain: https://ky.sxczgkj.cn + #随行付相关 + alipayChannel: 2088441721243954 + +sxf: + domain: https://openapi.tianquetech.com + orgId: "02668880" + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjo1+KBcvwDSIo+nMYLeOJ19Ju4ii0xH66ZxFd869EWFWk/EJa3xIA2+4qGf/Ic7m7zi/NHuCnfUtUDmUdP0JfaZiYwn+1Ek7tYAOc1+1GxhzcexSJLyJlR2JLMfEM+rZooW4Ei7q3a8jdTWUNoak/bVPXnLEVLrbIguXABERQ0Ze0X9Fs0y/zkQFg8UjxUN88g2CRfMC6LldHm7UBo+d+WlpOYH7u0OTzoLLiP/04N1cfTgjjtqTBI7qkOGxYs6aBZHG1DJ6WdP+5w+ho91sBTVajsCxAaMoExWQM2ipf/1qGdsWmkZScPflBqg7m0olOD87ymAVP/3Tcbvi34bDfwIDAQAB + + diff --git a/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/ParameterConfig.java b/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/ParameterConfig.java index 20621c8..dcb1261 100644 --- a/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/ParameterConfig.java +++ b/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/ParameterConfig.java @@ -15,28 +15,49 @@ import javax.annotation.PostConstruct; * @author lyf */ @Configuration -@PropertySource("classpath:application-common.yml") -@Component public class ParameterConfig { /** * 阿里自用型应用appid */ @Value("${parameter.ZY_ALI_APP_ID}") - public String ZY_ALI_APP_ID; + public String ZY_ALI_APP_ID; /** * 正式服务器域名 */ @Value("${parameter.domain}") - public String domain; + public String domain; /** * 支付宝通道ID */ @Value("${parameter.alipayChannel}") - public String alipayChannel; - @PostConstruct - public void init() { - ParametersUtil.domain = domain; - ParametersUtil.alipayChannel = alipayChannel; + public String alipayChannel; + + + + + + public String getZY_ALI_APP_ID() { + return ZY_ALI_APP_ID; + } + + public void setZY_ALI_APP_ID(String ZY_ALI_APP_ID) { + this.ZY_ALI_APP_ID = ZY_ALI_APP_ID; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + public String getAlipayChannel() { + return alipayChannel; + } + + public void setAlipayChannel(String alipayChannel) { + this.alipayChannel = alipayChannel; } } diff --git a/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/channel/SxfConfig.java b/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/channel/SxfConfig.java index c41cfa8..d3d9a9e 100644 --- a/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/channel/SxfConfig.java +++ b/newadmin/common-api/src/main/java/com/chaozhanggui/common/system/config/channel/SxfConfig.java @@ -1,109 +1,114 @@ package com.chaozhanggui.common.system.config.channel; import com.alibaba.fastjson.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; /** * @author lyf */ +@Component public class SxfConfig { /** * 微信实名认证接口前缀 */ - private static final String SXF_CERT_DOMAIN = "https://openapi.suixingpay.com"; + private String SXF_CERT_DOMAIN = "https://openapi.suixingpay.com"; /** * 微信实名认证接口 */ - public static final String SXF_WX_CERT = SXF_CERT_DOMAIN + "/merchant/realName/commitApply"; + public String SXF_WX_CERT = SXF_CERT_DOMAIN + "/merchant/realName/commitApply"; /** * 查询微信认证授权状态 */ - public static final String SXF_WX_CERT_STATUS = SXF_CERT_DOMAIN + "/merchant/realName/queryGrantStatus"; + public String SXF_WX_CERT_STATUS = SXF_CERT_DOMAIN + "/merchant/realName/queryGrantStatus"; /** * 微信实名认证申请结果查询接口 */ - public static final String SXF_WX_CERT_RESULT = SXF_CERT_DOMAIN + "/merchant/realName/queryApplyInfo"; + public String SXF_WX_CERT_RESULT = SXF_CERT_DOMAIN + "/merchant/realName/queryApplyInfo"; /** * 微信实名认证申请撤销接口 */ - public static final String SXF_WX_CERT_CANCEL = SXF_CERT_DOMAIN + "/merchant/realName/backApplyBill"; - public static String PRIVATE_KEY = + public String SXF_WX_CERT_CANCEL = SXF_CERT_DOMAIN + "/merchant/realName/backApplyBill"; + public String PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5"; //"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMRFhTpr+JWtfhHZ80UJcnDCMeydtcF38S5s+WdifTYNMequFN6uRYoSFJqzQrR0ls7/ZAjUFP/dZL0QJAsWlnRLLSvPsgUU/DzAF7myl6/swuK4eo9frwAYP4ItQcP+DsHBUFnqUbWUON8C3M5ggY92qKfKV1k59tVnFVjoPhbbAgMBAAECgYAzL/5jEi2uu6SZe0Iayy/xgHQMxcTVRDa+aOVStTj6k85k6im/OawhKj39aqsG7TE3oxuvwcAISvEu7bq4uZdbICPdeKLcfNpK4pIfVfokPROjlKSyDgm37gqM7F+T0ZoARVqcd7Mgj09UKKpq7Pi0a/FusEa5CdG2LrUTjZuHIQJBAOFzolrGsPsWaVMpoYGeRY2UrT0PjfXJ1E7nkHqLXCCgfrur374YEEWeLtjHCI6zaXgv/3Coj3USAhKMw4lDAYcCQQDe3bL3szwkGdUmZk61ebY7HanilKnIYNuhC9ALUEElDp2eA1ld5cQvRb4BAeNsvabptt2lRPcscFu9zvH0DaUNAkEAww8HAz8xVKyZSAiW4cyMJOjj0hapHmUXOYWELWJxvRDfVYRpOtEbEwC/S3M45i44LHJqsZBFPmbsQBxl+VZt9QJBAL2tD+EywU+0UK2SyxA2mzqq32iAwBNTI/lnlVPbpOYGD21pSkjZAWR+RdyTn9xveLxWr0M2c+t1YQ8lLtVYO40CQQC2pVlYu5BIvXClLj6pHxwrK9G3JgwaanbEPFX0PjIJmU94QSLUd4OtDhvbXq43E5dlyvz5ybYvd8pygmjV9oM5"; - public static String PUBLIC_KEY; + public String PUBLIC_KEY; /** * sxf渠道号 */ - public static String SXF_SUB_CHANNEL_NO = "398434152"; + public String SXF_SUB_CHANNEL_NO = "398434152"; /** * sxf环境机构号 */ - public static String ORG_ID; + + public String ORG_ID; /** * 商户号 */ - public static String MERCHANT_NO = "399200821899489"; + public String MERCHANT_NO = "399200821899489"; /** * 成功响应码 */ - public static final String SXF_SUCCESS_CODE = "0000"; + public String SXF_SUCCESS_CODE = "0000"; /** 功能未开通 */ - public static final String SXF_NO_PERMIT = "0006"; + public String SXF_NO_PERMIT = "0006"; - public static final String SXF_REFUND_SUCCESS_CODE = "2002"; + public String SXF_REFUND_SUCCESS_CODE = "2002"; /** * 退款成功状态 */ - public static final String SXF_REFUND_SUCCESS_STATUS_CODE = "REFUNDSUC"; + public String SXF_REFUND_SUCCESS_STATUS_CODE = "REFUNDSUC"; /********************************************进件相关***************************************************/ /** * 退款成功失败状态 */ - public static final String SXF_REFUND_FAIL_STATUS_CODE = "REFUNDFAIL"; + public String SXF_REFUND_FAIL_STATUS_CODE = "REFUNDFAIL"; /** * 退款成功中状态 */ - public static final String SXF_REFUND_ING_STATUS_CODE = "REFUNDING"; + public String SXF_REFUND_ING_STATUS_CODE = "REFUNDING"; /** * 失败响应码 */ - public static final String SXF_FAIL_CODE = "0001"; + public String SXF_FAIL_CODE = "0001"; /** * sxf正式domain */ - private static String sxfDomain; + public String sxfDomain; /** * 进件相关 * 正式环境图片上传 */ - public static String SXF_MERCHANT_INCOME_PHOTO_UPLOAD = sxfDomain + "/merchant/uploadPicture"; + public String SXF_MERCHANT_INCOME_PHOTO_UPLOAD = sxfDomain + "/merchant/uploadPicture"; /** * 进件相关 * 正式环境商户入驻 */ - public static String SXF_MERCHANT_INCOME = sxfDomain + "/merchant/income"; + public String SXF_MERCHANT_INCOME = sxfDomain + "/merchant/income"; /** * 进件信息 * 正式环境商户入驻信息修改 * 备注:商户进件失败的信息修改 */ - public static String SXF_UPADTE_MERCHANT_RZ = sxfDomain + "/merchant/updateMerchantInfo"; + public String SXF_UPADTE_MERCHANT_RZ = sxfDomain + "/merchant/updateMerchantInfo"; /** * 该接口通过申请单号查询 * 进件信息 * 正式环境商户入驻接口查询 */ - public static String SXF_QUERY_MERCHANT_INFO = sxfDomain + "/merchant/queryMerchantInfo"; + public String SXF_QUERY_MERCHANT_INFO = sxfDomain + "/merchant/queryMerchantInfo"; /** * 该接口通过商编查询商户信息 */ - public static String SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery"; + public String SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery"; /********************************************支付相关***************************************************/ /** @@ -111,74 +116,74 @@ public class SxfConfig { * 正式环境商户进件信息修改 * 备注:商户进件成功的信息修改 */ - public static String SXF_UPDATE_MERCHANT_INFO = sxfDomain + "/merchant/editMerchantInfo"; + public String SXF_UPDATE_MERCHANT_INFO = sxfDomain + "/merchant/editMerchantInfo"; /** * 进件信息 * 正式环境商户信息修改审核结果查询 */ - public static String SXF_UPDATE_MERCHANT_INFO_RESULT = sxfDomain + "/merchant/queryModifyResult"; + public String SXF_UPDATE_MERCHANT_INFO_RESULT = sxfDomain + "/merchant/queryModifyResult"; /** * 商户设置 * 正式环境修改商户费率信息 次日0时 生效 */ - public static String SXF_UPDATE_MERCHANT_RATE = sxfDomain + "/merchant/merchantSetup"; + public String SXF_UPDATE_MERCHANT_RATE = sxfDomain + "/merchant/merchantSetup"; /** * 商户查询 * 正式环境商户详情查询 */ - public static String SXF_QUERY_MERCHANT_DETAIL = sxfDomain + "/merchant/merchantInfoQuery"; + public String SXF_QUERY_MERCHANT_DETAIL = sxfDomain + "/merchant/merchantInfoQuery"; /** * 主扫付款 * 正式环境商户主扫接口 */ - public static String SXF_REVERSE_SCAN_PAY = sxfDomain + "/order/reverseScan"; + public String SXF_REVERSE_SCAN_PAY = sxfDomain + "/order/reverseScan"; /** * 商户被扫付款 * 正式环境商户被扫接口 */ - public static String SXF_JSAPI_SCAN_PAY = sxfDomain + "/order/jsapiScan"; + public String SXF_JSAPI_SCAN_PAY = sxfDomain + "/order/jsapiScan"; /** * 退款 * 正式环境退款接口地址 */ - public static String SXF_REFUND_PAY = sxfDomain + "/order/refund"; + public String SXF_REFUND_PAY = sxfDomain + "/order/refund"; /** * 交易查询 * 正式环境交易查询 */ - public static String SXF_TRADE_QUERY_PAY = sxfDomain + "/query/tradeQuery"; + public String SXF_TRADE_QUERY_PAY = sxfDomain + "/query/tradeQuery"; /** * 订单关闭 * 订单关闭接口 */ - public static String SXF_CLOSE_ORDER = sxfDomain + "/query/close"; + public String SXF_CLOSE_ORDER = sxfDomain + "/query/close"; /** * 订单撤销 * 订单撤销接口 */ - public static String SXF_CANCEL_ORDER = sxfDomain + "/query/cancel"; + public String SXF_CANCEL_ORDER = sxfDomain + "/query/cancel"; /** * sxf 辅助接口 获取wxopenId */ - public static String SXF_GET_WX_OPENID = sxfDomain + "/query/getSubOPenid"; + public String SXF_GET_WX_OPENID = sxfDomain + "/query/getSubOPenid"; /** * sxf 辅助接口 获取银联用户标识 */ - public static String SXF_GET_UNION_USERID = sxfDomain + "/query/getUnionInfo"; + public String SXF_GET_UNION_USERID = sxfDomain + "/query/getUnionInfo"; /** * 转账接口地址 */ - public static String SXF_ORG_TRANS_FER = sxfDomain + "/capital/fundManage/orgTransfer"; + public String SXF_ORG_TRANS_FER = sxfDomain + "/capital/fundManage/orgTransfer"; /** * 商户生成带金额的付款码用户扫码付款 * 正式环境商户被扫接口 */ - public static String SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan"; + public String SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan"; - public static JSONObject ok() { + public JSONObject ok() { JSONObject jsonObject = new JSONObject(); jsonObject.put("code", "success"); jsonObject.put("msg", "成功"); @@ -191,7 +196,11 @@ public class SxfConfig { * @param publicKey 公钥 * @param orgId 机构id */ - public static void init(String domain, String publicKey, String orgId) { + + + public SxfConfig(@Value("${sxf.domain}") String domain, @Value("${sxf.publicKey}") String publicKey, + @Value("${sxf.orgId}") String orgId + ){ sxfDomain = domain; PUBLIC_KEY = publicKey; ORG_ID = orgId; @@ -216,4 +225,7 @@ public class SxfConfig { SXF_MERCHANT_INFO_QUERY = sxfDomain + "/merchant/merchantInfoQuery"; SXF_ACTIVE_SCAN_PAY = sxfDomain + "/order/activeScan"; } + public void init(String domain, String publicKey, String orgId) { + + } } diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussBankCodeSxfMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussBankCodeSxfMapper.java index cbcb15d..6023f87 100644 --- a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussBankCodeSxfMapper.java +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussBankCodeSxfMapper.java @@ -20,6 +20,7 @@ public interface TbPlussBankCodeSxfMapper extends BaseMapper int insertSelective(TbPlussBankCodeSxf record); TbPlussBankCodeSxf selectByPrimaryKey(Integer id); + TbPlussBankCodeSxf selectByCnapsCode(@Param("cnapsCode")String cnapsCode); List pageData(@Param("keyWord") String keyWord); diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantChannelStatusMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantChannelStatusMapper.java index b1b4220..7814fb9 100644 --- a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantChannelStatusMapper.java +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantChannelStatusMapper.java @@ -39,6 +39,8 @@ public interface TbPlussMerchantChannelStatusMapper { TbPlussMerchantChannelStatus getByMerchantCode(@Param("merchantCode") String merchantCode,@Param("channel") String channel ); List getByMerchantCodes(@Param("merchantCode") String merchantCode); + List getByMerchantCodesAudit(@Param("merchantCode") String merchantCode); + TbPlussMerchantChannelStatus getByIdLock(@Param("id") Integer id); List getByMerchantCodeList(@Param("merchantCode") String merchantCode); diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussBankCodeSxfMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussBankCodeSxfMapper.xml index d56f84b..961e347 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussBankCodeSxfMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussBankCodeSxfMapper.xml @@ -35,7 +35,13 @@ - + + delete from tb_pluss_bank_code_sxf where id = #{id,jdbcType=INTEGER} diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml index 9118920..2407d6d 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml @@ -263,15 +263,6 @@ authorizationStatus = #{authorizationstatus,jdbcType=VARCHAR}, - - mercName = #{mercname,jdbcType=VARCHAR}, - - - virChannelFlag = #{virchannelflag,jdbcType=VARCHAR}, - - - virStatusFlag = #{virstatusflag,jdbcType=VARCHAR}, - srcMerchantNo = #{srcmerchantno,jdbcType=VARCHAR}, @@ -433,8 +424,8 @@ @@ -476,4 +467,10 @@ AND thirdStatus = '-100' limit 1 + \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantImageMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantImageMapper.xml index f111379..7694c93 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantImageMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantImageMapper.xml @@ -37,8 +37,8 @@ diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussUserPromotionMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussUserPromotionMapper.xml index d566d34..2e6db67 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussUserPromotionMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussUserPromotionMapper.xml @@ -345,6 +345,7 @@ p.is_extend, a.inviteNum, a.`status`, + a.createDt, FORMAT( IFNULL( k.sumConsumeFee, 0 ), 2 ) AS sumConsumeFee, FORMAT( IFNULL( k.yestedayConsumeFee, 0 ), 2 ) AS yestedayConsumeFee FROM diff --git a/newadmin/merchant-service-api/pom.xml b/newadmin/merchant-service-api/pom.xml index 2807e6a..7a8b439 100644 --- a/newadmin/merchant-service-api/pom.xml +++ b/newadmin/merchant-service-api/pom.xml @@ -48,6 +48,10 @@ 0.4.14 compile + + org.springframework.boot + spring-boot-starter-webflux + \ No newline at end of file diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java index f607e0e..bdb36b6 100644 --- a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java @@ -12,10 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; @Service public class MerchantService { @@ -93,7 +90,7 @@ public class MerchantService { switch (channelId){ case "1": - sxfMerchantAuditService.merchantAudit(userId, false); + sxfMerchantAuditService.merchantAudit(userId, channelStatus); break; case "2": break; @@ -177,4 +174,50 @@ public class MerchantService { "6 ".equals(mcs.getStatus()) || "4".equals(mcs.getStatus()); } + + /** + * 通用修改进件基本资料相关 + * @param userId + */ + public void updateMerchantBase(Integer userId, TbPlussBankCard bankCard,TbPlussIdCard idCard){ + MsgException.checkNull(userId,"请选择用户"); + + //获取用户信息 + TbPlussUserInfo userInfo= tbPlussUserInfoMapper.selectByPrimaryKey(Long.valueOf(userId)); + MsgException.checkNull(userInfo,"用户信息不存在"); + + + //判断进件信息是否存在 + TbPlussMerchantBaseInfo baseInfo= tbPlussMerchantBaseInfoMapper.selectByUserId(String.valueOf(userId)); + MsgException.checkNull(baseInfo,"请完善进件信息"); + + //判断用户是否有进件 + List merchantCodes = tbPlussMerchantChannelStatusMapper.getByMerchantCodesAudit(baseInfo.getMerchantcode()); + if (merchantCodes != null){ + int size = merchantCodes.size(); + if (size>2){ + MsgException.throwException("用户进件信息有误"); + } + if (size == 1){ + Integer channel = merchantCodes.get(0).getChannel(); + + //不同的通道 + switch (channel){ + case 1: + sxfMerchantAuditService.updateMerchantIdCard(merchantCodes.get(0).getMerchantid(),bankCard,idCard); + break; + case 4: + ysAuditServiceV3.updateMerchantBankCard(merchantCodes.get(0).getMerchantid(),idCard,bankCard,channel); + ysAuditServiceV3.updateMerchantIdCard(merchantCodes.get(0).getMerchantid(),idCard,channel,userInfo); + break; + case 5: + + default: + break; + } + } + } + + } + } diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/BaseMerchantAuditService.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/BaseMerchantAuditService.java index dadb17d..4a001c3 100644 --- a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/BaseMerchantAuditService.java +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/BaseMerchantAuditService.java @@ -40,24 +40,24 @@ public abstract class BaseMerchantAuditService { String merchantType = merchantBaseInfo.getMerchanttype(); String principalPerson = merchantBaseInfo.getPrincipalperson(); - TbPlussIdCard legalIdCard = idCardMapper.getLegalIdCard(userId); - MsgException.checkNull(legalIdCard, "请完善法人信息"); +// TbPlussIdCard legalIdCard = idCardMapper.getLegalIdCard(userId); +// MsgException.checkNull(legalIdCard, "请完善法人信息"); if (!"1".equals(merchantType)) { MsgException.checkBlank(principalPerson, "请完善营业执照信息"); } //同一证件只能注册三个小微商户, 如有增加需求请联系客服 - Integer num = 0; - try { - num = accountMapper.selectMicroMbiAccountNum(legalIdCard.getCertno()); - } catch (Exception e) { - log.error(e.toString()); - } - - if (num >= MAX_MIRCO_MERCHANT_NUM) { - throw new MsgException("同一证件只能注册三个小微商户, 如有增加需求请联系客服"); - } +// Integer num = 0; +// try { +// num = accountMapper.selectMicroMbiAccountNum(legalIdCard.getCertno()); +// } catch (Exception e) { +// log.error(e.toString()); +// } +// +// if (num >= MAX_MIRCO_MERCHANT_NUM) { +// throw new MsgException("同一证件只能注册三个小微商户, 如有增加需求请联系客服"); +// } } } diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/SxfMerchantAuditService.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/SxfMerchantAuditService.java index 07b7bd9..4f63671 100644 --- a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/SxfMerchantAuditService.java +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/sxf/SxfMerchantAuditService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.chaozhanggui.common.system.config.MsgException; +import com.chaozhanggui.common.system.config.ParameterConfig; import com.chaozhanggui.common.system.config.channel.SxfConfig; import com.chaozhanggui.common.system.util.*; import com.chaozhanggui.dao.system.dao.*; @@ -14,6 +15,7 @@ import com.chaozhanggui.merchant.service.sxf.model.Converter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.*; @@ -58,48 +60,84 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { @Resource private TbPlussMerchantImageMapper merchantImageMapper; + @Resource + RestTemplate restTemplate; + + @Autowired + SxfConfig sxfConfig; + + public static class ImageType { + + private ImageType() {} + + /** 身份证正面 */ + public static final String IDCARD_FRONT = "02"; + /** 身份证反面 */ + public static final String IDCARD_BACK = "03"; + /** 营业执照 */ + public static final String BUSINESS_LICENSE = "13"; + /** 开户许可证 */ + public static final String ACCOUNT_PERMITS = "04"; + /** 门头照 */ + public static final String SHOP_FRONT_DOOR = "10"; + /** 非法人结算授权书 */ + public static final String NON_LEG_SETTLE_AUTH = "26"; + /** 其它 */ + public static final String OTHER = "19"; + /** 收银台照片 */ + public static final String CASH_DESK_PHOTO = "12"; + /** 门店内景照片 */ + public static final String STORE_INTERIOR_PHOTO = "11"; + /** 各大餐饮平台入驻 */ + public static final String MERCHANT_PLATFORM = "10"; + /** 手持身份证 */ + public static final String HAND_IDCARD_PHOTO = "15"; + /** 租赁协议一(封面) */ + public static final String TENANCY_AGREEMENTS1 = "16"; + /** 租赁合同二(面积,有效期页面) */ + public static final String TENANCY_AGREEMENTS2 = "17"; + /** 租赁合同三(签章页) */ + public static final String TENANCY_AGREEMENTS3 = "18"; + /** 银行卡正面 */ + public static final String BANK_CARD_FRONT = "05"; + /** 银行卡反面 */ + public static final String BANK_CARD_BACK = "06"; + /** 结算身份证正面 */ + public static final String SETTLE_IDCARD_FRONT = "08"; + /** 结算身份证反面 */ + public static final String SETTLE_IDCARD_BACK = "07"; + } /** * 进件 * @param userId - * @param isFailCheck + */ @Transactional(rollbackFor = Exception.class) - public void merchantAudit(String userId, boolean isFailCheck) { + public void merchantAudit(String userId, TbPlussMerchantChannelStatus mcs) { //进件检测 - merchantAuditCheck(userId,isFailCheck); + merchantAuditCheck(userId,false); TbPlussMerchantBaseInfo merchantBaseInfo = merchantBaseInfoMapper.selectByUserId(userId); - TbPlussMerchantChannelStatus mcs = merchantChannelStatusMapper.getByMerchantCode(merchantBaseInfo.getMerchantcode(),"1"); + JSONObject reqData = new JSONObject(); // 判断是第一次进件是入驻修改,还是第一次进件 String targetUrl; - MsgException.checkNull(mcs, "商户未提交审核"); - - String status = mcs.getStatus(); - String thirdStatus = mcs.getThirdstatus(); String merchantId = mcs.getMerchantid(); - if (status.equals(TbPlussMerchantChannelStatus.AUDIT_STATUS_EXAMINING) && !thirdStatus.equals(TbPlussMerchantChannelStatus.AUDIT_THIRD_STATUS_WAITING)) { - MsgException.throwException("进件审核中,请等待审核结果"); - } - - if (TbPlussMerchantChannelStatus.isAudited(mcs)) { - MsgException.throwException("商户已进件成功,请勿重复进件"); - } if (StringUtils.isEmpty(merchantId)) { // 初次进件 - targetUrl = SxfConfig.SXF_MERCHANT_INCOME; + targetUrl = sxfConfig.SXF_MERCHANT_INCOME; } else { // 进件失败数据修改 - targetUrl = SxfConfig.SXF_UPADTE_MERCHANT_RZ; + targetUrl = sxfConfig.SXF_UPADTE_MERCHANT_RZ; reqData.put("mno", merchantId); } // step 1、组合请求数据 reqData.putAll(getMerchantAuditInfo(userId, merchantBaseInfo, mcs)); - reqData.put("callbackUrl", ParametersUtil.domain + "/api/auditCallback/sxf"); + reqData.put("callbackUrl", parameterConfig.getDomain() + "/api/auditCallback/sxf"); //支付宝通道ID reqData.put("specifyALiPayChannel", ParametersUtil.alipayChannel); log.info("{}随行付进件参数{}", userId, JSON.toJSONString(reqData)); @@ -113,11 +151,11 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { MsgException.throwException(e.getMessage()); } - MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "进件失败," + resultMap.get("msg")); + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "进件失败," + resultMap.get("msg")); // 业务成功 JSONObject respData = resultMap.getJSONObject("respData"); - MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "进件失败," + respData.get("bizMsg")); + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "进件失败," + respData.get("bizMsg")); Date date = new Date(); @@ -150,6 +188,69 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { merchantChannelStatusMapper.insertSelective(mcs); } } + + @Autowired + ParameterConfig parameterConfig; + + /** + * 随行付更改身份证和银行卡 + * @param merchantId + */ + public void updateMerchantIdCard(String merchantId, TbPlussBankCard bankCard, TbPlussIdCard idCard){ + //组装参数 + //实名 + JSONObject reqData = new JSONObject(); + reqData.put("mno",merchantId); + reqData.put("identityName",idCard.getCertname()); + reqData.put("identityTyp","00"); + reqData.put("identityNo",idCard.getCertno()); + reqData.put("legalPersonLicStt",idCard.getCertstarttime()); + reqData.put("legalPersonLicEnt",idCard.getCertendtime()); + reqData.put("legalPersonidPositivePic",idCard.getImgpositive()); + reqData.put("legalPersonidOppositePic",idCard.getImgnegative()); + + //TODO 结算相关(暂时只可以改对私相关) + if ("01".equals(bankCard.getAccounttype())){ + reqData.put("actNm",bankCard.getBankholder()); + reqData.put("stmManIdNo",idCard.getCertno()); + reqData.put("accountLicStt",idCard.getCertstarttime()); + reqData.put("accountLicEnt",idCard.getCertendtime()); + + TbPlussBankCodeSxf bankCodeSxf = bankCodeSxfMapper.selectByCnapsCode(bankCard.getContactline()); + + reqData.put("actNo",bankCard.getBankcardno()); + reqData.put("depoBank",bankCard.getBankcardno()); + // 银行code + reqData.put("depoBank", bankCodeSxf.getBankCode()); + // 省份code + reqData.put("depoProvCd", bankCodeSxf.getProvinceCode()); + // 城市code + reqData.put("depoCityCd", bankCodeSxf.getCityCode()); + // 联行号 + reqData.put("lbnkNo", bankCodeSxf.getCnapsCode()); + reqData.put("lbnkNm", bankCodeSxf.getCnapsName()); + + reqData.put("bankCardPositivePic", bankCodeSxf.getCnapsCode()); + reqData.put("settlePersonIdcardPositive", bankCodeSxf.getCnapsName()); + reqData.put("settlePersonIdcardOpposite", bankCodeSxf.getCnapsName()); + } + + reqData.put("updateCallBackUrl",parameterConfig.getDomain() + "/api/auditCallback/updateSxf"); + + //调取通用请求 + JSONObject resultMap = requestApi(sxfConfig.SXF_UPDATE_MERCHANT_INFO, reqData); + try { + checkSign(resultMap); + } catch (Exception e) { + MsgException.throwException(e.getMessage()); + } + + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, resultMap.get("code"), "修改失败," + resultMap.get("msg")); + + // 业务成功 + JSONObject respData = resultMap.getJSONObject("respData"); + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), "修改失败," + respData.get("bizMsg")); + } private JSONObject getMerchantAuditInfo(String userId, TbPlussMerchantBaseInfo merchantBaseInfo, TbPlussMerchantChannelStatus merchantChannelStatus) { // step 1、组合请求数据 JSONObject reqData = new JSONObject(); @@ -222,17 +323,17 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { * @return */ public JSONObject requestApi(String url, JSONObject reqData) { - RestTemplate restTemplate = new RestTemplate(); + try { JSONObject paramMap = new JSONObject(); - paramMap.put("orgId", SxfConfig.ORG_ID); + paramMap.put("orgId", sxfConfig.ORG_ID); paramMap.put("reqId", UUID.randomUUID().toString().replaceAll("-", "")); paramMap.put("version", "1.0"); paramMap.put("timestamp", DateFormatUtils.format(new Date(), "yyyyMMddHHmmss")); paramMap.put("reqData", reqData); paramMap.put("signType", "RSA"); String signContent = SignUtils.getSignContent(paramMap); - paramMap.put("sign", RSAUtils.sign(SxfConfig.PRIVATE_KEY, signContent)); + paramMap.put("sign", RSAUtils.sign(sxfConfig.PRIVATE_KEY, signContent)); log.info("===================>【随行付】请求参数:{}<================",paramMap); ResponseEntity responseEntity = restTemplate.postForEntity(url, paramMap, JSONObject.class); @@ -263,7 +364,7 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { } String srcData = SignUtils.getSignContent(receiveData); - boolean sign = RSAUtils.checkSign(SxfConfig.PUBLIC_KEY, srcData, receiveData.getString("sign")); + boolean sign = RSAUtils.checkSign(sxfConfig.PUBLIC_KEY, srcData, receiveData.getString("sign")); if (!sign) { throw new IllegalArgumentException("商户入驻回调接口验签不通过"); } @@ -297,24 +398,24 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { } }; paramMap.add("file", contentsAsResource); - paramMap.add("orgId", SxfConfig.ORG_ID); + paramMap.add("orgId", sxfConfig.ORG_ID); paramMap.add("pictureType", imgTypeTransform(merchantImage.getPhotoType())); HttpEntity> request = new HttpEntity<>(paramMap, headers); RestTemplate restTemplate = new RestTemplate(); - JSONObject responseJson = restTemplate.postForObject(SxfConfig.SXF_MERCHANT_INCOME_PHOTO_UPLOAD, request, JSONObject.class); + JSONObject responseJson = restTemplate.postForObject(sxfConfig.SXF_MERCHANT_INCOME_PHOTO_UPLOAD, request, JSONObject.class); MsgException.checkNull(responseJson, "请求失败"); log.info("upload response : {}", responseJson.toJSONString()); - MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, responseJson.get("code"), "请求失败"); + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, responseJson.get("code"), "请求失败"); JSONObject respData = responseJson.getJSONObject("respData"); MsgException.checkNull(respData, "上传图片失败"); - MsgException.checkUnequals(SxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), respData.getString("bizMsg")); + MsgException.checkUnequals(sxfConfig.SXF_SUCCESS_CODE, respData.get("bizCode"), respData.getString("bizMsg")); Date date = new Date(); @@ -329,31 +430,31 @@ public class SxfMerchantAuditService extends BaseMerchantAuditService { public String imgTypeTransform(String imageType) { switch (imageType) { case TbPlussMerchantImage.IDCARD_FRONT: - return TbPlussMerchantImage.IDCARD_FRONT; + return ImageType.IDCARD_FRONT; case TbPlussMerchantImage.IDCARD_BACK: - return TbPlussMerchantImage.IDCARD_BACK; + return ImageType.IDCARD_BACK; case TbPlussMerchantImage.SETTLE_IDCARD_FRONT: - return TbPlussMerchantImage.SETTLE_IDCARD_FRONT; + return ImageType.SETTLE_IDCARD_BACK; case TbPlussMerchantImage.SETTLE_IDCARD_BACK: - return TbPlussMerchantImage.SETTLE_IDCARD_BACK; + return ImageType.SETTLE_IDCARD_FRONT; case TbPlussMerchantImage.BANK_CARD_BACK: - return TbPlussMerchantImage.BANK_CARD_BACK; + return ImageType.BANK_CARD_BACK; case TbPlussMerchantImage.BANK_CARD_FRONT: - return TbPlussMerchantImage.BANK_CARD_FRONT; + return ImageType.BANK_CARD_FRONT; case TbPlussMerchantImage.BUSINESS_LICENSE: - return TbPlussMerchantImage.BUSINESS_LICENSE; + return ImageType.BUSINESS_LICENSE; case TbPlussMerchantImage.ACCOUNT_PERMITS: - return TbPlussMerchantImage.ACCOUNT_PERMITS; + return ImageType.ACCOUNT_PERMITS; case TbPlussMerchantImage.NON_LEG_SETTLE_AUTH: - return TbPlussMerchantImage.NON_LEG_SETTLE_AUTH; + return ImageType.NON_LEG_SETTLE_AUTH; case TbPlussMerchantImage.SHOP_FRONT_DOOR: - return TbPlussMerchantImage.SHOP_FRONT_DOOR; + return ImageType.SHOP_FRONT_DOOR; case TbPlussMerchantImage.CASH_DESK_PHOTO: - return TbPlussMerchantImage.CASH_DESK_PHOTO; + return ImageType.CASH_DESK_PHOTO; case TbPlussMerchantImage.STORE_INTERIOR_PHOTO: - return TbPlussMerchantImage.STORE_INTERIOR_PHOTO; + return ImageType.STORE_INTERIOR_PHOTO; default: - return TbPlussMerchantImage.OTHER; + return ImageType.OTHER; } } private void combineMerchantBaseInfo(Map map, TbPlussMerchantBaseInfo merchantBaseInfo) { diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/ys/YSAuditServiceV3.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/ys/YSAuditServiceV3.java index 398bf9b..ee94fda 100644 --- a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/ys/YSAuditServiceV3.java +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/ys/YSAuditServiceV3.java @@ -34,7 +34,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; +import org.springframework.http.client.reactive.ClientHttpRequest; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionStatus; @@ -46,18 +48,20 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; import javax.annotation.Resource; import java.io.IOException; import java.io.Serializable; import java.nio.charset.StandardCharsets; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ExecutorService; import static com.chaozhanggui.dao.system.entity.TbPlussMerchantBaseInfo.MERCH_TYPE_MICRO; +import static org.springframework.http.HttpHeaders.*; +import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE; /**银盛进件相关 * @author lyf @@ -124,6 +128,8 @@ public class YSAuditServiceV3 { private ExecutorService executorService; @Resource private TransactionTemplate transactionTemplate; + @Resource + private TbPlussNoticeMapper noticeMapper; /** * 银盛进件3.0 * @param userId 用户id @@ -189,6 +195,112 @@ public class YSAuditServiceV3 { } } + /** + * 银盛更改身份证 + * @param merchantId + */ + public void updateMerchantIdCard(String merchantId, TbPlussIdCard idCard,Integer channel,TbPlussUserInfo userInfo){ + //组装更改参数 + CrpInfo crpInfo = new CrpInfo(); + crpInfo.setCrpNm(idCard.getCertname()); + crpInfo.setCertExpire(idCard.getCertendtime()); + crpInfo.setCrpPhone(userInfo.getPhone()); + JSONObject param = new JSONObject(); + param.put("mercId", merchantId); + param.put("crpInfo",crpInfo); + param.put("notifyUrl",YSAuditServiceV3.AUDIT_NOTIFY_URL); + //进件参数 + RespEntity respEntity = reqExtension(ReqMethod.changeMercBaseInfo, param, channel); + + String subCode = respEntity.getSubCode(); + //校验进件信息 + if (!Objects.equals(subCode, BIZ_SUCCESS)) { + throw new MsgException(respEntity.getSubMsg()); + } + //解析业务响应参数 + JSONObject extra = new JSONObject(); + extra.putAll(JSON.parseObject(respEntity.getBusinessData())); + //获取变更申请流水号 + String changeSysFlowId = extra.getString("changeSysFlowId"); + + //获取身份证正反面 + executorService.execute(() -> { + imageUploadExtension("A002", idCard.getImgpositive(), changeSysFlowId); + imageUploadExtension("A003", idCard.getImgnegative(), changeSysFlowId); + }); + + } + /** + * 银盛更改结算信息 + * @param merchantId + */ + public void updateMerchantBankCard(String merchantId, TbPlussIdCard idCard, TbPlussBankCard bankCard,Integer channel){ + //首先判段是不是法人结算 + TbPlussAccount tbPlussAccount; + if (4 == channel) { + TbPlussAccount account = new TbPlussAccount(); + account.setUserid(bankCard.getUserid()); + account.setChanneltype(TbPlussAccount.CHANNEL_TYPE_D0); + tbPlussAccount = accountMapper.selectByAccount(account); + }else { + TbPlussAccount account = new TbPlussAccount(); + account.setUserid(bankCard.getUserid()); + account.setChanneltype(TbPlussAccount.CHANNEL_TYPE_D1); + tbPlussAccount = accountMapper.selectByAccount(account); + } + //组装更改参数 + StlAccInfo stlAccInfo = new StlAccInfo(); + stlAccInfo.setIsSettInPlatAcc("N"); + stlAccInfo.setIsUncrpSett(tbPlussAccount.getSettletype().startsWith(TbPlussAccount.SETTLE_TYPE_PRIVATE_ILLEGAL) ? "Y" : "N"); + stlAccInfo.setStlAccNo(bankCard.getBankcardno()); + stlAccInfo.setStlAccType(tbPlussAccount.getSettletype().startsWith(TbPlussAccount.SETTLE_TYPE_CORPORATE) ? "21" : "11"); + stlAccInfo.setOpenCertNo(idCard.getCertno()); + stlAccInfo.setStlAccNm(bankCard.getBankholder()); + stlAccInfo.setBankSubCode(bankCard.getContactline()); + stlAccInfo.setBankMobile(bankCard.getPhone()); + JSONObject param = new JSONObject(); + param.put("mercId", merchantId); + param.put("stlAccInfo", stlAccInfo); + param.put("notifyUrl", YSAuditServiceV3.AUDIT_NOTIFY_URL); + //进件参数 + RespEntity respEntity = reqExtension(ReqMethod.changeMercStlAccInfo, param, channel); + + String subCode = respEntity.getSubCode(); + //校验进件信息 + if (!Objects.equals(subCode, BIZ_SUCCESS)) { + throw new MsgException(respEntity.getSubMsg()); + } + + String businessData = respEntity.getBusinessData(); + JSONObject bizData = JSON.parseObject(businessData); + String changeSysFlowId = bizData.getString("changeSysFlowId"); + + if (bankCard.getAccounttype().equals(TbPlussBankCard.ACCOUNT_TYPE_CORPORATE)) { + // 对公结算需要上传开户许可证 + imageUploadExtension("A011", bankCard.getLicenseurl(), changeSysFlowId); + } else { + // 对私结算需要上传银行卡图片 + imageUploadExtension("A004", bankCard.getImgurl(), changeSysFlowId); + } + + // 非法人结算,传结算人的身份证图片 + if (Objects.equals(tbPlussAccount.getSettletype(), TbPlussAccount.SETTLE_TYPE_PRIVATE_ILLEGAL)) { + imageUploadExtension("A002", idCard.getImgpositive(), changeSysFlowId); + imageUploadExtension("A003", idCard.getImgnegative(), changeSysFlowId); + } + //添加消息相关 + log.debug("云商服3.0基本信息变更发起成功"); + String title = "收银呗商户信息变更通知"; + String remark = "D0结算信息变更已发起"; + + TbPlussNotice notice = new TbPlussNotice(); + notice.setUserid(bankCard.getUserid()); + notice.setTitle(title); + notice.setConrtent(remark); + noticeMapper.insertSelective(notice); + + } + /** * 组装进件基本信息 * @param userId @@ -345,11 +457,6 @@ public class YSAuditServiceV3 { mcs.setThirdstatus(TbPlussMerchantChannelStatus.AUDIT_THIRD_STATUS_AUDITING); mcs.setInterfaceversion(INTERFACE_VERSION); merchantChannelStatusMapper.updateByPrimaryKey(mcs); - //mcsService.saveOrUpdate(mcs); - - AccountDTO accountDTO = sxfMerchantAuditService.getRealAccount(userId, TbPlussAccount.CHANNEL_TYPE_D1); - - idCardMapper.getLegalIdCard(userId); } @@ -454,6 +561,19 @@ public class YSAuditServiceV3 { throw new MsgException("图片多次上传失败"); } + /** + * 图片上传方法(更改信息) + */ + private void imageUploadExtension(String photoType, String imgUrl, String flowId){ + + RespEntity respEntity = reqUpload(ReqMethod.uploadChangePic, photoType, imgUrl, flowId); + if (!Objects.equals(respEntity.getSubCode(), BIZ_SUCCESS)) { + log.info("上传失败:{}", respEntity.getSubMsg()); + throw new MsgException("图片上传失败"); + } + + } + /** * 图片映射 * @param imageType @@ -623,6 +743,109 @@ public class YSAuditServiceV3 { } } + /** + * 只用于银盛更改接口发送通用请求(WebClient)主要用于更改资料 + * @param reqMethod + * @param reqData + * @param channel + * @return + */ + public RespEntity reqExtension(ReqMethod reqMethod, JSONObject reqData, Integer channel){ + Calendar calendar = Calendar.getInstance(); + int i = calendar.get(Calendar.HOUR_OF_DAY); + + if (i < 8 || i >= 21) { + throw new MsgException("当前时段暂不支持入网,请于8:00-21:00提交"); + } + String key = RandomUtil.randomString(RandomUtil.BASE_NUMBER + "ABCDEF",16); + try { + ReqEntity request = ReqEntity.get(reqMethod); + Sign sign = null; + if (channel.equals(4)) { + request.setCertId(ysConfig.getSrcMerchantNo()); + RSA rsa = SecureUtil.rsa(ysConfig.getPriKey(), ysConfig.getOldPubKey()); + request.setCheck(rsa.encryptBase64(key, KeyType.PublicKey)); + sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, ysConfig.getPriKey(), ysConfig.getOldPubKey()); + }else { + request.setCertId(ysConfigV3.getSrcMerchantNoD1()); + RSA rsa = SecureUtil.rsa(ysConfigV3.getPriKeyV2D1(), ysConfigV3.getPubKeyV2D1()); + request.setCheck(rsa.encryptBase64(key, KeyType.PublicKey)); + sign = SecureUtil.sign(SignAlgorithm.SHA256withRSA, ysConfigV3.getPriKeyV2D1(), ysConfigV3.getPubKeyV2D1()); + } + request.setBizContent(reqData.toJSONString()); + + log.info("业务参数==============>" + JSONObject.toJSONString(reqData)); + + log.info("key = " + key); + AES aes = new AES(key.getBytes(StandardCharsets.UTF_8)); + String s = aes.encryptBase64(request.getBizContent()); + request.setBizContent(s); + + String encryptOriginData = SignUtils.getSignContent((JSONObject) JSON.toJSON(request)); + + log.info("加签源数据==============>" + encryptOriginData); + request.setSign(Base64.encode(sign.sign(encryptOriginData.getBytes()))); + log.warn("请求报文==============>" + JSONObject.toJSONString(request)); + log.info("请求地址:{}", reqMethod.getUrl()); + + //发送请求 + Mono resp = WebClient.create().post() + .uri(reqMethod.getUrl()) + .contentType(MediaType.APPLICATION_FORM_URLENCODED) + .header(USER_AGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36") + .body((BodyInserter) request) + .retrieve().bodyToMono(String.class); + + String respStr = resp.toString(); + log.info("返回信息base64:{}", respStr); + byte[] decode = Base64.decode(respStr); + respStr = new String(decode, StandardCharsets.UTF_8); + log.info("返回信息:{}", respStr); + + JSONObject param = JSON.parseObject(respStr); + String signContent = SignUtils.getSignContent(param); + System.out.println("加签原参数:" + signContent); + + boolean checkSign; + try { + checkSign = sign.verify(signContent.getBytes(StandardCharsets.UTF_8), Base64.decode(param.getString("sign"))); + } catch (Exception e) { + log.error("银盛云商服3.0接口验签失败{}", e.getMessage()); + e.printStackTrace(); + checkSign = true; + } + + if (!checkSign) { + throw new MsgException("银盛云商服3.0接口验签不通过"); + } + + RespEntity respEntity = JSON.parseObject(respStr, RespEntity.class); + + // 检查网关code码 + if (!Objects.equals(respEntity.getCode(), REQ_SUCCESS)) { + throw new MsgException(respEntity.getMsg()); + } + + // 业务响应码这里不做判断,交给具体接口业务逻辑去判断 + if (StringUtils.hasText(respEntity.getBusinessData())) { + byte[] bizBytes = Base64.decode(respEntity.getBusinessData()); + String decryptBizData = aes.decryptStr(bizBytes); + respEntity.setBusinessData(decryptBizData); + log.info("业务参数: {}", respEntity.getBusinessData()); + } + + return respEntity; + } catch (Exception e) { + if (e instanceof MsgException) { + throw e; + } + + return null; + } + + + } + /** * 进件上传图片 * @param reqMethod @@ -740,6 +963,7 @@ public class YSAuditServiceV3 { } } + /** * 再次检测 * @param userId