fix:开店流程网商开通失败标识缓存;小程序账户列表返回对象修改;根据门店编码查询开通基础信息逻辑修改;网商账户提交逻辑修改;

feat:网商激活接口
This commit is contained in:
wangff
2025-11-20 16:44:24 +08:00
parent 4581aeb85a
commit 38a669dff9
17 changed files with 314 additions and 360 deletions

View File

@@ -210,8 +210,14 @@ public class WalletApiService {
return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/accRecordPage", request, TradeRecordListDTO.class);
}
/**
* 网商银行重新激活发送短链接
* @param request 网商账户重新发送激活短信Request
* @return 网商激活短链DTO
*/
public TextMsgSendDTO textMsgSend(TextMsgSendRequest request){
return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/account/ws/v1/textMsgSend", request, TextMsgSendDTO.class);
}
}

View File

@@ -86,7 +86,7 @@ public interface WalletService {
* @param request 账户查询Request
* @return 账户信息VO列表
*/
List<AccountInfoVO> getAccountList(AccountQueryRequest request);
AccountDataVO getAccountList(AccountQueryRequest request);
/**
* 根据账户编号查询账户信息
@@ -164,7 +164,7 @@ public interface WalletService {
* @param storeCode
* @return
*/
OpenBasicInfoDTO getOpenBasicInfo(String storeCode);
OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode);
/**
* 开通网商银行
@@ -172,4 +172,11 @@ public interface WalletService {
* @return
*/
Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request);
/**
* 网商发送激活短信
* @param request 门店idRequest
* @return 是否成功
*/
Boolean onlineBankActive(StoreShopRequest request);
}

View File

@@ -20,7 +20,7 @@ import com.cool.store.enums.point.ShopSubStageEnum;
import com.cool.store.enums.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wallet.BankAccountTypeEnum;
import com.cool.store.enums.wallet.BankBusinessTypeEnum;
import com.cool.store.enums.wallet.YztStoreModel;
import com.cool.store.enums.wechat.WalletTypeEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.ApplyLicenseMapper;
import com.cool.store.request.wallet.*;
@@ -38,7 +38,6 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Date;
import java.text.MessageFormat;
import java.time.Duration;
@@ -78,6 +77,16 @@ public class WalletServiceImpl implements WalletService {
@Override
public Boolean accountCreate(AccountCreateRequest request) {
ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId());
// 存储银行卡信息
OpenBankInfoDO openBankInfoDO = OpenBankInfoDO.builder()
.storeId(shopInfo.getStoreId())
.settlementCard(request.getBankNumber())
.bankBranchName(request.getBankName())
.bankBranchCode(request.getBankNo())
.bankReservedPhone(request.getBankMobile())
.source(1)
.build();
openBankInfoDAO.insertOrUpdateByStoreId(openBankInfoDO);
// 调用 创建门店签约人账户接口
CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder()
.outStoreId(shopInfo.getStoreId())
@@ -169,33 +178,27 @@ public class WalletServiceImpl implements WalletService {
try {
// 判断一下账户的开通状态
if (enableAddTag(storeId)) {
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(lineId);
QualificationsInfoDO qualificationsInfoDO = qualificationsInfoDAO.getByLineId(lineId);
OpenBankInfoDO openBankInfo = getAndUpdateOpenBankInfo(storeId, lineId, license);
// 调用 签约人账户打标(升级)接口
log.info("营业执照已上传,账户打标");
AccountAddTagRequest tagRequest = AccountAddTagRequest.builder()
.outStoreId(storeId)
.licenseNo(license.getCreditCode())
.licenseName(license.getBusinessLicense())
// .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31")
.legalName(license.getLicenseLegalPerson())
.legalNo(license.getLicenseLegalIdCardNo())
.legalPhone(license.getLicenseLegalMobile())
.certPhotoA(license.getLicenseLegalIdCardFront())
.certPhotoB(license.getLicenseLegalIdCardBack())
.licensePhoto(license.getCreditUrl())
.signatoryName(lineInfoDO.getUsername())
.signatoryNo(qualificationsInfoDO.getIdCardNo())
.signatoryPhone(lineInfoDO.getMobile())
.signatoryPhotoA(qualificationsInfoDO.getFrontOfIdCard())
.signatoryPhotoB(qualificationsInfoDO.getBackOfIdCard())
.licenseNo(openBankInfo.getBusinessLicenseCode())
.licenseName(openBankInfo.getBusinessLicenseName())
.legalName(openBankInfo.getLegalName())
.legalNo(openBankInfo.getLegalIdCard())
.legalPhone(openBankInfo.getLegalPhone())
.certPhotoA(openBankInfo.getLegalIdCardFront())
.certPhotoB(openBankInfo.getLegalIdCardBack())
.licensePhoto(openBankInfo.getBusinessLicensePhoto())
.signatoryPhotoA(openBankInfo.getSignerIdCardFront())
.signatoryPhotoB(openBankInfo.getSignerIdCardBack())
.build();
AddTagDTO addTagDTO = walletApiService.addTag(tagRequest);
log.info("打标接口调用成功response:{}", JSONObject.toJSONString(addTagDTO));
executeAddTag(tagRequest);
}
} catch (ServiceException e) {
// 平安打标 签约人和法人一致时同步返回失败原因从msg中取
String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, "1");
String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, storeId, WalletTypeEnum.PING_AN.getType());
redisUtilPool.setString(key, e.getErrorCode().equals(1620003) ? e.getMessage() : "系统异常");
log.info("营业执照已上传,接口异常", e);
} catch (Exception e) {
@@ -204,6 +207,45 @@ public class WalletServiceImpl implements WalletService {
}
}
/**
* 执行打标接口,执行失败缓存标记
*/
private void executeAddTag(AccountAddTagRequest tagRequest) {
AddTagDTO addTagDTO = walletApiService.addTag(tagRequest);
log.info("打标接口调用成功response:{}", JSONObject.toJSONString(addTagDTO));
// TODO: 如果网商创建失败,缓存标记
if (false) {
String key = MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, tagRequest.getOutStoreId());
redisUtilPool.setString(key, "1");
}
}
/**
* 获取并更新门店开通网商信息
*/
private OpenBankInfoDO getAndUpdateOpenBankInfo(String storeId, Long lineId, LicenseTransactDO license) {
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(lineId);
QualificationsInfoDO qualificationsInfoDO = qualificationsInfoDAO.getByLineId(lineId);
OpenBankInfoDO openBankInfoDO = OpenBankInfoDO.builder()
.storeId(storeId)
.signerName(lineInfoDO.getUsername())
.signerIdCard(qualificationsInfoDO.getIdCardNo())
.signerPhone(lineInfoDO.getMobile())
.signerIdCardFront(qualificationsInfoDO.getFrontOfIdCard())
.signerIdCardBack(qualificationsInfoDO.getBackOfIdCard())
.businessLicenseName(license.getBusinessLicense())
.businessLicenseCode(license.getCreditCode())
.businessLicensePhoto(license.getCreditUrl())
.legalName(license.getLicenseLegalPerson())
.legalIdCard(license.getLicenseLegalIdCardNo())
.legalPhone(license.getLicenseLegalMobile())
.legalIdCardFront(license.getLicenseLegalIdCardFront())
.legalIdCardBack(license.getLicenseLegalIdCardBack())
.build();
openBankInfoDAO.insertOrUpdateByStoreId(openBankInfoDO);
return openBankInfoDO;
}
/**
* 账户存在且未打标
*/
@@ -215,7 +257,7 @@ public class WalletServiceImpl implements WalletService {
@Override
public Boolean addTagCallback(AddTagCallbackNoticeRequest request) {
try {
String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), "1");
String key = MessageFormat.format(RedisConstant.WALLET_OPEN_FAIL, request.getOutStoreId(), WalletTypeEnum.PING_AN.getType());
if (Integer.valueOf(2).equals(request.getStatus())) {
redisUtilPool.setString(key, request.getErrorMsg());
} else {
@@ -246,6 +288,10 @@ public class WalletServiceImpl implements WalletService {
} else {
redisUtilPool.delKey(key);
}
// 如果创建成功,删除网商开通失败标识
if (Integer.valueOf(4).equals(request.getAccountStatus())) {
redisUtilPool.delKey(MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, request.getOutStoreId()));
}
} catch (Exception e) {
log.info("平安打标回调失败", e);
}
@@ -258,10 +304,10 @@ public class WalletServiceImpl implements WalletService {
}
@Override
public List<AccountInfoVO> getAccountList(AccountQueryRequest request) {
public AccountDataVO getAccountList(AccountQueryRequest request) {
String storeId = getStoreId(request);
List<AccountInfoDTO> accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId));
return accountInfo.stream()
List<AccountInfoVO> accountList = accountInfo.stream()
.filter(v -> Objects.isNull(request.getWalletType()) || request.getWalletType().equals(v.getWalletType()))
.map(v -> {
AccountInfoVO vo = BeanUtil.toBean(v, AccountInfoVO.class);
@@ -269,6 +315,11 @@ public class WalletServiceImpl implements WalletService {
vo.setFailReason(redisUtilPool.getString(key));
return vo;
}).collect(Collectors.toList());
boolean onlineBankOpenFail = false;
if (WalletTypeEnum.ONLINE_BANK.getType().equals(request.getWalletType())) {
onlineBankOpenFail = getOnlineBankFailTag(storeId);
}
return new AccountDataVO(onlineBankOpenFail, accountList);
}
@Override
@@ -417,10 +468,15 @@ public class WalletServiceImpl implements WalletService {
}
@Override
public OpenBasicInfoDTO getOpenBasicInfo(String storeCode) {
public OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode) {
OpenBasicInfoDTO openBasicInfoDTO = new OpenBasicInfoDTO();
//非首次提交 获取上次提交的信息 其他情况走主数据与营账通开通数据
OpenBankInfoDO openBankInfo = openBankInfoDAO.getOpenBankInfo(storeCode);
OpenBankInfoDO openBankInfo;
if (StringUtils.isNotBlank(storeId)) {
openBankInfo = openBankInfoDAO.getOpenBankInfoByStoreId(storeId);
} else {
openBankInfo = openBankInfoDAO.getOpenBankInfo(storeCode);
}
if (Objects.nonNull(openBankInfo)){
openBasicInfoDTO.setSignerName(openBankInfo.getSignerName());
openBasicInfoDTO.setSignerIdCard(openBankInfo.getSignerIdCard());
@@ -475,6 +531,11 @@ public class WalletServiceImpl implements WalletService {
}else {
openBankInfoDAO.updateByStoreCode(openBankInfoDO);
}
// 如果是开店流程中网商开通失败,则重新调用打标接口
if (getOnlineBankFailTag(request.getStoreId())) {
onlineBankFailReOpen(request);
return true;
}
OldStoreAccountCreateRequest oldStoreAccountCreateRequest = new OldStoreAccountCreateRequest();
StoreDO store = storeDao.getByStoreNum(request.getStoreCode());
oldStoreAccountCreateRequest.setOutStoreId(store.getStoreId());
@@ -502,6 +563,43 @@ public class WalletServiceImpl implements WalletService {
return Boolean.TRUE;
}
/**
* 获取开店流程网商银行开通失败标记
*/
private boolean getOnlineBankFailTag(String storeId) {
String key = MessageFormat.format(RedisConstant.WALLET_ONLINE_BANK_TAG_FAIL, storeId);
String flag = redisUtilPool.getString(key);
return StringUtils.isNotBlank(flag);
}
/**
* 开通流程创建网商银行账户失败的情况下,重新开通
*/
private void onlineBankFailReOpen(CoolOpenBasicInfoRequest request) {
log.info("网商钱包开通失败后重新提交打标接口");
AccountAddTagRequest tagRequest = AccountAddTagRequest.builder()
.outStoreId(request.getStoreId())
.licenseNo(request.getBusinessLicenseCode())
.licenseName(request.getBusinessLicenseName())
.legalName(request.getLegalName())
.legalNo(request.getLegalIdCard())
.legalPhone(request.getLegalPhone())
.certPhotoA(request.getLegalIdCardFront())
.certPhotoB(request.getLegalIdCardBack())
.licensePhoto(request.getBusinessLicensePhoto())
.signatoryPhotoA(request.getSignerIdCardFront())
.signatoryPhotoB(request.getSignerIdCardBack())
.build();
executeAddTag(tagRequest);
}
@Override
public Boolean onlineBankActive(StoreShopRequest request) {
String storeId = getStoreId(request);
walletApiService.textMsgSend(new TextMsgSendRequest(storeId));
return true;
}
public String getStoreId(StoreShopRequest request) {
String storeId = request.getStoreId();
if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) {