fix:新增钱包开通流程及相关接口

This commit is contained in:
wangff
2025-11-14 17:02:11 +08:00
parent 9256332d11
commit 7d810b2a0d
20 changed files with 569 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ import com.cool.store.response.GetStoreInfoByCodeResponse;
import com.cool.store.response.LicenseListResponse;
import com.cool.store.response.SubmitLicenseResponse;
import com.cool.store.service.*;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.StringUtil;
import com.cool.store.utils.poi.StringUtils;
@@ -98,6 +99,9 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService {
@Resource
UserAuthMappingService userAuthMappingService;
@Resource
WalletService walletService;
@Override
public Boolean submitBusinessLicense(BusinessLicenseRequest request, PartnerUserInfoVO user) {
@@ -144,9 +148,15 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService {
preparationService.buildStoreAndDecorationComplete(request.getShopId());
preparationService.selectSiteAndBuildStoreComplete(request.getShopId());
}
addTagIfUploadLicense(request.getShopId());
return Boolean.TRUE;
}
private void addTagIfUploadLicense(Long shopId) {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId);
walletService.addTagIfUploadLicense(shopId, shopInfo.getStoreId());
}
@Override
public Boolean submitFoodLicense(FoodLicenseRequest request, PartnerUserInfoVO user) {
log.info("submitBusinessLicense request{}", JSONObject.toJSONString(request));

View File

@@ -0,0 +1,52 @@
package com.cool.store.service.wallet;
import com.cool.store.request.wallet.*;
import com.cool.store.vo.wallet.AccountAuthenticationVO;
import com.cool.store.vo.wallet.BankVO;
import com.github.pagehelper.PageInfo;
/**
* <p>
* 钱包 服务类
* </p>
*
* @author wangff
* @since 2025/11/13
*/
public interface WalletService {
/**
* 平安银行钱包账号创建
* @param request 平安钱包账户创建Request
* @return 是否成功
*/
Boolean accountCreate(AccountCreateRequest request);
/**
* 鉴权申请
* @param request 门店id
* @return 是否成功
*/
AccountAuthenticationVO authentication(WalletShopRequest request);
/**
* 账号开通
* @param request 平安钱包账户开通Request
* @return 是否成功
*/
Boolean openAccount(AccountOpenRequest request);
/**
* 银行支行列表查询
* @param request 支行信息查询Request
* @return 银行支行信息列表
*/
PageInfo<BankVO> getBankList(BankListRequest request);
/**
* 判断营业执照是否已经上传,已上传则调用打标接口
* @param shopId 门店shopId
* @param storeId 主数据门店id
*/
void addTagIfUploadLicense(Long shopId, String storeId);
}

View File

@@ -0,0 +1,180 @@
package com.cool.store.service.wallet.impl;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dao.RegionDao;
import com.cool.store.dao.ShopInfoDAO;
import com.cool.store.dao.ShopStageInfoDAO;
import com.cool.store.dto.wallet.*;
import com.cool.store.entity.LicenseTransactDO;
import com.cool.store.entity.RegionDO;
import com.cool.store.entity.ShopInfoDO;
import com.cool.store.entity.ShopStageInfoDO;
import com.cool.store.enums.ErrorCodeEnum;
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.PingAnAccountStatusEnum;
import com.cool.store.exception.ServiceException;
import com.cool.store.mapper.ApplyLicenseMapper;
import com.cool.store.request.wallet.*;
import com.cool.store.service.wallet.WalletApiService;
import com.cool.store.service.wallet.WalletService;
import com.cool.store.utils.BeanUtil;
import com.cool.store.vo.wallet.AccountAuthenticationVO;
import com.cool.store.vo.wallet.BankVO;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* <p>
* 钱包 服务实现类
* </p>
*
* @author wangff
* @since 2025/11/13
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class WalletServiceImpl implements WalletService {
private final ShopInfoDAO shopInfoDAO;
private final ShopStageInfoDAO shopStageInfoDAO;
private final ApplyLicenseMapper applyLicenseMapper;
private final WalletApiService walletApiService;
private final RegionDao regionDao;
@Override
public Boolean accountCreate(AccountCreateRequest request) {
ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId());
// 调用 创建门店签约人账户接口
RegionDO regionDO = regionDao.getRegionById(shopInfo.getRegionId());
if (Objects.isNull(regionDO)) {
throw new ServiceException(ErrorCodeEnum.REGION_NOT_EXIST);
}
CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder()
.outStoreId(shopInfo.getStoreId())
.orgCode(String.valueOf(regionDO.getId()))
.orgName(regionDO.getName())
.phoneNumber(request.getMobile())
.accountType(BankAccountTypeEnum.PRIVATE.getType())
.businessType(BankBusinessTypeEnum.PERSONAL.getType())
.legalName(request.getUserName())
.legalNo(request.getIdCardNo())
.accountAliasName(request.getUserName() + "_" + shopInfo.getStoreId())
.accountCardno(request.getBankNumber())
.accountPhone(request.getBankMobile())
.bankNo(request.getBankNo())
.bankName(request.getBankName())
.build();
StoreAccountDTO storeAndAccount = walletApiService.createStoreAndAccount(accountRequest);
return StringUtils.isNotBlank(storeAndAccount.getAccountId());
}
@Override
public AccountAuthenticationVO authentication(WalletShopRequest request) {
ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId());
// 调用 门店签约人账户鉴权申请接口
AccountAuthenticationDTO authentication = walletApiService.authentication(new OutStoreIdRequest(shopInfo.getStoreId()));
if (Objects.nonNull(authentication)) {
return new AccountAuthenticationVO(authentication.getAccountStatus());
}
throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL);
}
@Override
public Boolean openAccount(AccountOpenRequest request) {
// 校验阶段是否合法
ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId());
// 调用 门店签约人账户开通接口
log.info("开通账户");
AccountVerifyDTO accountVerifyDTO = walletApiService.openAccount(new AccountVerifyRequest(shopInfo.getStoreId(), request.getCode()));
if (!PingAnAccountStatusEnum.OPEN.getStatus().equals(accountVerifyDTO.getAccountStatus())) {
throw new ServiceException(ErrorCodeEnum.WALLET_OPEN_ACCOUNT_FAIL);
}
// 更新钱包开通阶段状态
List<ShopSubStageStatusEnum> updateSubStageList = new ArrayList<>();
updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_61);
// 判断一下缴费阶段是否开启,未开启则开启缴费阶段
ShopStageInfoDO payStage = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_7);
if (ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_00.getShopSubStageStatus().equals(payStage.getShopSubStageStatus())) {
updateSubStageList.add(ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_70);
}
shopStageInfoDAO.batchUpdateShopStageStatus(request.getShopId(), updateSubStageList);
// 判断营业执照是否已经上传,已上传则调用打标接口
addTagIfUploadLicense(request.getShopId(), shopInfo.getStoreId());
return true;
}
@Override
public PageInfo<BankVO> getBankList(BankListRequest request) {
GetBankRequest getBankRequest = new GetBankRequest();
WalletBasicPageInfo pageParam = new WalletBasicPageInfo();
pageParam.setCurrentPage(request.getPageNum());
pageParam.setPageSize(request.getPageSize());
getBankRequest.setPage(pageParam);
getBankRequest.setHeadName(request.getHeadName());
getBankRequest.setKeyword(request.getKeyword());
BankListDTO bankListDTO = walletApiService.getBankList(getBankRequest);
PageInfo<BankVO> result = new PageInfo<>();
result.setPageNum(request.getPageNum());
result.setPageSize(request.getPageSize());
if (Objects.nonNull(bankListDTO)) {
WalletBasicPageInfo pageInfo = bankListDTO.getPage();
result.setTotal(pageInfo.getTotal());
result.setPages(pageInfo.getCount());
result.setList(BeanUtil.toList(bankListDTO.getPageData(), BankVO.class));
}
return result;
}
@Override
public void addTagIfUploadLicense(Long shopId, String storeId) {
LicenseTransactDO licenseTransactDO = applyLicenseMapper.selectByShopId(shopId);
// 营业执照已上传,调用打标接口
if (Objects.nonNull(licenseTransactDO) && StringUtils.isNotBlank(licenseTransactDO.getCreditUrl())) {
try {
// 调用 签约人账户打标(升级)接口
log.info("营业执照已上传,账户打标");
AccountAddTagRequest tagRequest = AccountAddTagRequest.builder()
.outStoreId(storeId)
.licenseNo(licenseTransactDO.getCreditCode())
.licenseName(licenseTransactDO.getBusinessLicense())
// .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31")
.legalName(licenseTransactDO.getLicenseLegalPerson())
.legalNo(licenseTransactDO.getLicenseLegalIdCardNo())
.legalPhone(licenseTransactDO.getLicenseLegalMobile())
.build();
AddTagDTO addTagDTO = walletApiService.addTag(tagRequest);
log.info("打标接口调用成功response:{}", JSONObject.toJSONString(addTagDTO));
} catch (Exception e) {
log.error("营业执照已上传,打标失败", e);
}
}
}
/**
* 查询并校验门店是否存在以及阶段是否处于平安钱包未开通状态
*/
private ShopInfoDO getAndVerifyShopAndStage(Long shopId) {
ShopInfoDO shopInfo = shopInfoDAO.getShopInfo(shopId);
if (Objects.isNull(shopInfo)) {
throw new ServiceException(ErrorCodeEnum.SHOP_NOT_EXIST);
}
ShopStageInfoDO stageInfo = shopStageInfoDAO.getShopSubStageInfo(shopId, ShopSubStageEnum.SHOP_STAGE_6);
if (!ShopSubStageStatusEnum.SHOP_SUB_STAGE_STATUS_60.getShopSubStageStatus().equals(stageInfo.getShopSubStageStatus())) {
throw new ServiceException(ErrorCodeEnum.SHOP_STAGE_NOT_OPERATE);
}
return shopInfo;
}
}