fix:开店流程网商开通失败标识缓存;小程序账户列表返回对象修改;根据门店编码查询开通基础信息逻辑修改;网商账户提交逻辑修改;
feat:网商激活接口
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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())) {
|
||||
|
||||
Reference in New Issue
Block a user