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

@@ -291,7 +291,12 @@ public class RedisConstant {
public static final String HUO_MA_TOKEN= "huo_ma_token:{0}"; public static final String HUO_MA_TOKEN= "huo_ma_token:{0}";
/** /**
* 钱包开通失败原因 wallet_open_fail:storeId:1/2 1平安/2网商 * 钱包开通失败/打标失败原因 wallet_open_fail:storeId:1/2 1平安/2网商
*/ */
public static final String WALLET_OPEN_FAIL = "wallet_open_fail:{0}:{1}"; public static final String WALLET_OPEN_FAIL = "wallet_open_fail:{0}:{1}";
/**
* 打标接口创建网商账户失败标识 wallet_online_bank_tag_fail:storeId
*/
public static final String WALLET_ONLINE_BANK_TAG_FAIL = "wallet_online_bank_tag_fail:{0}";
} }

View File

@@ -0,0 +1,25 @@
package com.cool.store.enums.wechat;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* <p>
* 钱包类型
* </p>
*
* @author wangff
* @since 2025/11/20
*/
@Getter
@AllArgsConstructor
public enum WalletTypeEnum {
PING_AN(1, "平安银行"),
ONLINE_BANK(2, "网商银行"),
;
private final Integer type;
private final String desc;
}

View File

@@ -2,9 +2,12 @@ package com.cool.store.dao.wallet;
import com.cool.store.entity.wallet.OpenBankInfoDO; import com.cool.store.entity.wallet.OpenBankInfoDO;
import com.cool.store.mapper.wallet.OpenBankInfoMapper; import com.cool.store.mapper.wallet.OpenBankInfoMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Objects;
/** /**
* @Author suzhuhong * @Author suzhuhong
@@ -30,5 +33,20 @@ public class OpenBankInfoDAO {
return openBankInfoMapper.getOpenBankInfo(storeCode); return openBankInfoMapper.getOpenBankInfo(storeCode);
} }
public OpenBankInfoDO getOpenBankInfoByStoreId(String storeId) {
return openBankInfoMapper.selectOne(OpenBankInfoDO.builder().storeId(storeId).build());
}
public int insertOrUpdateByStoreId(OpenBankInfoDO openBankInfoDO) {
if (StringUtils.isBlank(openBankInfoDO.getStoreId())) {
return 0;
}
if (Objects.isNull(getOpenBankInfo(openBankInfoDO.getStoreId()))) {
return openBankInfoMapper.insertSelective(openBankInfoDO);
} else {
Example example = new Example(OpenBankInfoDO.class);
example.createCriteria().andEqualTo("storeId", openBankInfoDO.getStoreId());
return openBankInfoMapper.updateByExampleSelective(openBankInfoDO, example);
}
}
} }

View File

@@ -6,6 +6,7 @@
WARNING - @mbg.generated WARNING - @mbg.generated
--> -->
<result column="store_code" jdbcType="VARCHAR" property="storeCode" /> <result column="store_code" jdbcType="VARCHAR" property="storeCode" />
<result column="store_id" jdbcType="VARCHAR" property="storeId" />
<result column="signer_name" jdbcType="VARCHAR" property="signerName" /> <result column="signer_name" jdbcType="VARCHAR" property="signerName" />
<result column="signer_id_card" jdbcType="VARCHAR" property="signerIdCard" /> <result column="signer_id_card" jdbcType="VARCHAR" property="signerIdCard" />
<result column="signer_phone" jdbcType="VARCHAR" property="signerPhone" /> <result column="signer_phone" jdbcType="VARCHAR" property="signerPhone" />
@@ -24,6 +25,7 @@
<result column="bank_branch_name" jdbcType="VARCHAR" property="bankBranchName" /> <result column="bank_branch_name" jdbcType="VARCHAR" property="bankBranchName" />
<result column="bank_branch_code" jdbcType="VARCHAR" property="bankBranchCode" /> <result column="bank_branch_code" jdbcType="VARCHAR" property="bankBranchCode" />
<result column="bank_reserved_phone" jdbcType="VARCHAR" property="bankReservedPhone" /> <result column="bank_reserved_phone" jdbcType="VARCHAR" property="bankReservedPhone" />
<result column="source" jdbcType="TINYINT" property="source" />
</resultMap> </resultMap>
<select id="getOpenBankInfo" resultMap="BaseResultMap"> <select id="getOpenBankInfo" resultMap="BaseResultMap">
@@ -33,6 +35,9 @@
<update id="updateByStoreCode" parameterType="com.cool.store.entity.wallet.OpenBankInfoDO"> <update id="updateByStoreCode" parameterType="com.cool.store.entity.wallet.OpenBankInfoDO">
UPDATE zxjp_open_bank_info UPDATE zxjp_open_bank_info
<set> <set>
<if test="dto.storeId != null and dto.storeId != ''">
store_id = #{dto.storeId},
</if>
<if test="dto.signerName != null and dto.signerName != ''"> <if test="dto.signerName != null and dto.signerName != ''">
signer_name = #{dto.signerName}, signer_name = #{dto.signerName},
</if> </if>
@@ -87,6 +92,9 @@
<if test="dto.bankReservedPhone != null and dto.bankReservedPhone != ''"> <if test="dto.bankReservedPhone != null and dto.bankReservedPhone != ''">
bank_reserved_phone = #{dto.bankReservedPhone}, bank_reserved_phone = #{dto.bankReservedPhone},
</if> </if>
<if test="dto.source != null">
source = #{dto.source},
</if>
</set> </set>
WHERE store_code = #{dto.storeCode} WHERE store_code = #{dto.storeCode}
</update> </update>

View File

@@ -16,6 +16,9 @@ public class OpenBasicInfoDTO {
@ApiModelProperty(value = "门店编号") @ApiModelProperty(value = "门店编号")
private String storeCode; private String storeCode;
@ApiModelProperty("门店id")
private String storeId;
/** /**
* 签约人名称 * 签约人名称
*/ */
@@ -106,8 +109,8 @@ public class OpenBasicInfoDTO {
@ApiModelProperty(value = "银行预留手机号") @ApiModelProperty(value = "银行预留手机号")
private String bankReservedPhone; private String bankReservedPhone;
@ApiModelProperty("来源开通流程传1其他0")
private Integer source;
} }

View File

@@ -0,0 +1,24 @@
package com.cool.store.dto.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 网商激活短链DTO
* </p>
*
* @author wangff
* @since 2025/11/20
*/
@Data
public class TextMsgSendDTO {
@ApiModelProperty("crm门店id")
private String outStoreId;
@ApiModelProperty("H5 激活页短链(商户需访问此链接完成操作,非公网可直接访问需确认权限)")
private String activityUrl;
@ApiModelProperty("短链失效时间格式YYYY-MM-DD HH:mm:ss过期后需重新调用接口生成")
private String expireTime;
}

View File

@@ -1,9 +1,18 @@
package com.cool.store.entity.wallet; package com.cool.store.entity.wallet;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
@Table(name = "zxjp_open_bank_info") @Table(name = "zxjp_open_bank_info")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OpenBankInfoDO { public class OpenBankInfoDO {
/** /**
* 门店编号 * 门店编号
@@ -11,6 +20,12 @@ public class OpenBankInfoDO {
@Column(name = "store_code") @Column(name = "store_code")
private String storeCode; private String storeCode;
/**
* 门店id
*/
@Column(name = "store_id")
private String storeId;
/** /**
* 签约人名称 * 签约人名称
*/ */
@@ -119,318 +134,9 @@ public class OpenBankInfoDO {
@Column(name = "bank_reserved_phone") @Column(name = "bank_reserved_phone")
private String bankReservedPhone; private String bankReservedPhone;
public String getLegalName() {
return legalName;
}
public void setLegalName(String legalName) {
this.legalName = legalName;
}
public String getLegalIdCard() {
return legalIdCard;
}
public void setLegalIdCard(String legalIdCard) {
this.legalIdCard = legalIdCard;
}
public String getLegalPhone() {
return legalPhone;
}
public void setLegalPhone(String legalPhone) {
this.legalPhone = legalPhone;
}
/** /**
* 获取门店编号 * 来源开通流程传1其他0
*
* @return store_code - 门店编号
*/ */
public String getStoreCode() { @Column(name = "source")
return storeCode; private Integer source;
}
/**
* 设置门店编号
*
* @param storeCode 门店编号
*/
public void setStoreCode(String storeCode) {
this.storeCode = storeCode;
}
/**
* 获取签约人名称
*
* @return signer_name - 签约人名称
*/
public String getSignerName() {
return signerName;
}
/**
* 设置签约人名称
*
* @param signerName 签约人名称
*/
public void setSignerName(String signerName) {
this.signerName = signerName;
}
/**
* 获取签约人身份证号码
*
* @return signer_id_card - 签约人身份证号码
*/
public String getSignerIdCard() {
return signerIdCard;
}
/**
* 设置签约人身份证号码
*
* @param signerIdCard 签约人身份证号码
*/
public void setSignerIdCard(String signerIdCard) {
this.signerIdCard = signerIdCard;
}
/**
* 获取签约人手机号
*
* @return signer_phone - 签约人手机号
*/
public String getSignerPhone() {
return signerPhone;
}
/**
* 设置签约人手机号
*
* @param signerPhone 签约人手机号
*/
public void setSignerPhone(String signerPhone) {
this.signerPhone = signerPhone;
}
/**
* 获取签约人身份证正面
*
* @return signer_id_card_front - 签约人身份证正面
*/
public String getSignerIdCardFront() {
return signerIdCardFront;
}
/**
* 设置签约人身份证正面
*
* @param signerIdCardFront 签约人身份证正面
*/
public void setSignerIdCardFront(String signerIdCardFront) {
this.signerIdCardFront = signerIdCardFront;
}
/**
* 获取签约人身份证反面
*
* @return signer_id_card_back - 签约人身份证反面
*/
public String getSignerIdCardBack() {
return signerIdCardBack;
}
/**
* 设置签约人身份证反面
*
* @param signerIdCardBack 签约人身份证反面
*/
public void setSignerIdCardBack(String signerIdCardBack) {
this.signerIdCardBack = signerIdCardBack;
}
/**
* 获取营业执照名字
*
* @return business_license_name - 营业执照名字
*/
public String getBusinessLicenseName() {
return businessLicenseName;
}
/**
* 设置营业执照名字
*
* @param businessLicenseName 营业执照名字
*/
public void setBusinessLicenseName(String businessLicenseName) {
this.businessLicenseName = businessLicenseName;
}
/**
* 获取营业执照社会信用代码
*
* @return business_license_code - 营业执照社会信用代码
*/
public String getBusinessLicenseCode() {
return businessLicenseCode;
}
/**
* 设置营业执照社会信用代码
*
* @param businessLicenseCode 营业执照社会信用代码
*/
public void setBusinessLicenseCode(String businessLicenseCode) {
this.businessLicenseCode = businessLicenseCode;
}
/**
* 获取营业执照照片
*
* @return business_license_photo - 营业执照照片
*/
public String getBusinessLicensePhoto() {
return businessLicensePhoto;
}
/**
* 设置营业执照照片
*
* @param businessLicensePhoto 营业执照照片
*/
public void setBusinessLicensePhoto(String businessLicensePhoto) {
this.businessLicensePhoto = businessLicensePhoto;
}
/**
* 获取法人是否签约人
*
* @return legal_is_signer - 法人是否签约人
*/
public Integer getLegalIsSigner() {
return legalIsSigner;
}
/**
* 设置法人是否签约人
*
* @param legalIsSigner 法人是否签约人
*/
public void setLegalIsSigner(Integer legalIsSigner) {
this.legalIsSigner = legalIsSigner;
}
/**
* 获取法人身份证正面
*
* @return legal_id_card_front - 法人身份证正面
*/
public String getLegalIdCardFront() {
return legalIdCardFront;
}
/**
* 设置法人身份证正面
*
* @param legalIdCardFront 法人身份证正面
*/
public void setLegalIdCardFront(String legalIdCardFront) {
this.legalIdCardFront = legalIdCardFront;
}
/**
* 获取法人身份证反面
*
* @return legal_id_card_back - 法人身份证反面
*/
public String getLegalIdCardBack() {
return legalIdCardBack;
}
/**
* 设置法人身份证反面
*
* @param legalIdCardBack 法人身份证反面
*/
public void setLegalIdCardBack(String legalIdCardBack) {
this.legalIdCardBack = legalIdCardBack;
}
/**
* 获取结算卡
*
* @return settlement_card - 结算卡
*/
public String getSettlementCard() {
return settlementCard;
}
/**
* 设置结算卡
*
* @param settlementCard 结算卡
*/
public void setSettlementCard(String settlementCard) {
this.settlementCard = settlementCard;
}
/**
* 获取开户支行名称
*
* @return bank_branch_name - 开户支行名称
*/
public String getBankBranchName() {
return bankBranchName;
}
/**
* 设置开户支行名称
*
* @param bankBranchName 开户支行名称
*/
public void setBankBranchName(String bankBranchName) {
this.bankBranchName = bankBranchName;
}
/**
* 获取开户支行编号
*
* @return bank_branch_code - 开户支行编号
*/
public String getBankBranchCode() {
return bankBranchCode;
}
/**
* 设置开户支行编号
*
* @param bankBranchCode 开户支行编号
*/
public void setBankBranchCode(String bankBranchCode) {
this.bankBranchCode = bankBranchCode;
}
/**
* 获取银行预留手机号
*
* @return bank_reserved_phone - 银行预留手机号
*/
public String getBankReservedPhone() {
return bankReservedPhone;
}
/**
* 设置银行预留手机号
*
* @param bankReservedPhone 银行预留手机号
*/
public void setBankReservedPhone(String bankReservedPhone) {
this.bankReservedPhone = bankReservedPhone;
}
} }

View File

@@ -67,15 +67,6 @@ public class AccountAddTagRequest {
@ApiModelProperty(value = "营业执照图片链接", required = true) @ApiModelProperty(value = "营业执照图片链接", required = true)
private String licensePhoto; private String licensePhoto;
@ApiModelProperty(value = "签约人姓名", required = true)
private String signatoryName;
@ApiModelProperty(value = "签约人身份证", required = true)
private String signatoryNo;
@ApiModelProperty(value = "签约人联系电话", required = true)
private String signatoryPhone;
@ApiModelProperty(value = "签约人证件人像面图片链接", required = true) @ApiModelProperty(value = "签约人证件人像面图片链接", required = true)
private String signatoryPhotoA; private String signatoryPhotoA;

View File

@@ -10,6 +10,8 @@ import lombok.Data;
*/ */
@Data @Data
public class CoolOpenBasicInfoRequest { public class CoolOpenBasicInfoRequest {
@ApiModelProperty(value = "门店id")
private String storeId;
@ApiModelProperty(value = "门店编号") @ApiModelProperty(value = "门店编号")
private String storeCode; private String storeCode;

View File

@@ -0,0 +1,22 @@
package com.cool.store.request.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* <p>
* 网商账户重新发送激活短信Request
* </p>
*
* @author wangff
* @since 2025/11/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TextMsgSendRequest {
@ApiModelProperty("门店id")
private String outStoreId;
}

View File

@@ -0,0 +1,27 @@
package com.cool.store.vo.wallet;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* <p>
* 账户信息VO
* </p>
*
* @author wangff
* @since 2025/11/20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AccountDataVO {
@ApiModelProperty("网商账户开通失败标识")
private Boolean onlineBankOpenFail;
@ApiModelProperty("账户列表")
private List<AccountInfoVO> accountList;
}

View File

@@ -210,8 +210,14 @@ public class WalletApiService {
return walletHttpClientRest.postWithSign(walletBaseUrl+"/open/crm/trans/v1/accRecordPage", request, TradeRecordListDTO.class); 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 * @param request 账户查询Request
* @return 账户信息VO列表 * @return 账户信息VO列表
*/ */
List<AccountInfoVO> getAccountList(AccountQueryRequest request); AccountDataVO getAccountList(AccountQueryRequest request);
/** /**
* 根据账户编号查询账户信息 * 根据账户编号查询账户信息
@@ -164,7 +164,7 @@ public interface WalletService {
* @param storeCode * @param storeCode
* @return * @return
*/ */
OpenBasicInfoDTO getOpenBasicInfo(String storeCode); OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode);
/** /**
* 开通网商银行 * 开通网商银行
@@ -172,4 +172,11 @@ public interface WalletService {
* @return * @return
*/ */
Boolean openOnlineBankAccount(CoolOpenBasicInfoRequest request); 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.point.ShopSubStageStatusEnum;
import com.cool.store.enums.wallet.BankAccountTypeEnum; import com.cool.store.enums.wallet.BankAccountTypeEnum;
import com.cool.store.enums.wallet.BankBusinessTypeEnum; 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.exception.ServiceException;
import com.cool.store.mapper.ApplyLicenseMapper; import com.cool.store.mapper.ApplyLicenseMapper;
import com.cool.store.request.wallet.*; import com.cool.store.request.wallet.*;
@@ -38,7 +38,6 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.sql.Date; import java.sql.Date;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.time.Duration; import java.time.Duration;
@@ -78,6 +77,16 @@ public class WalletServiceImpl implements WalletService {
@Override @Override
public Boolean accountCreate(AccountCreateRequest request) { public Boolean accountCreate(AccountCreateRequest request) {
ShopInfoDO shopInfo = getAndVerifyShopAndStage(request.getShopId()); 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() CreateStoreAndAccountRequest accountRequest = CreateStoreAndAccountRequest.builder()
.outStoreId(shopInfo.getStoreId()) .outStoreId(shopInfo.getStoreId())
@@ -169,33 +178,27 @@ public class WalletServiceImpl implements WalletService {
try { try {
// 判断一下账户的开通状态 // 判断一下账户的开通状态
if (enableAddTag(storeId)) { if (enableAddTag(storeId)) {
LineInfoDO lineInfoDO = lineInfoDAO.getLineInfo(lineId); OpenBankInfoDO openBankInfo = getAndUpdateOpenBankInfo(storeId, lineId, license);
QualificationsInfoDO qualificationsInfoDO = qualificationsInfoDAO.getByLineId(lineId);
// 调用 签约人账户打标(升级)接口 // 调用 签约人账户打标(升级)接口
log.info("营业执照已上传,账户打标"); log.info("营业执照已上传,账户打标");
AccountAddTagRequest tagRequest = AccountAddTagRequest.builder() AccountAddTagRequest tagRequest = AccountAddTagRequest.builder()
.outStoreId(storeId) .outStoreId(storeId)
.licenseNo(license.getCreditCode()) .licenseNo(openBankInfo.getBusinessLicenseCode())
.licenseName(license.getBusinessLicense()) .licenseName(openBankInfo.getBusinessLicenseName())
// .licenseExpire(Objects.nonNull(licenseTransactDO.getValidity()) ? CoolDateUtils.DateFormat(licenseTransactDO.getValidity(), "yyyy-MM-dd") : "2999-12-31") .legalName(openBankInfo.getLegalName())
.legalName(license.getLicenseLegalPerson()) .legalNo(openBankInfo.getLegalIdCard())
.legalNo(license.getLicenseLegalIdCardNo()) .legalPhone(openBankInfo.getLegalPhone())
.legalPhone(license.getLicenseLegalMobile()) .certPhotoA(openBankInfo.getLegalIdCardFront())
.certPhotoA(license.getLicenseLegalIdCardFront()) .certPhotoB(openBankInfo.getLegalIdCardBack())
.certPhotoB(license.getLicenseLegalIdCardBack()) .licensePhoto(openBankInfo.getBusinessLicensePhoto())
.licensePhoto(license.getCreditUrl()) .signatoryPhotoA(openBankInfo.getSignerIdCardFront())
.signatoryName(lineInfoDO.getUsername()) .signatoryPhotoB(openBankInfo.getSignerIdCardBack())
.signatoryNo(qualificationsInfoDO.getIdCardNo())
.signatoryPhone(lineInfoDO.getMobile())
.signatoryPhotoA(qualificationsInfoDO.getFrontOfIdCard())
.signatoryPhotoB(qualificationsInfoDO.getBackOfIdCard())
.build(); .build();
AddTagDTO addTagDTO = walletApiService.addTag(tagRequest); executeAddTag(tagRequest);
log.info("打标接口调用成功response:{}", JSONObject.toJSONString(addTagDTO));
} }
} catch (ServiceException e) { } catch (ServiceException e) {
// 平安打标 签约人和法人一致时同步返回失败原因从msg中取 // 平安打标 签约人和法人一致时同步返回失败原因从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() : "系统异常"); redisUtilPool.setString(key, e.getErrorCode().equals(1620003) ? e.getMessage() : "系统异常");
log.info("营业执照已上传,接口异常", e); log.info("营业执照已上传,接口异常", e);
} catch (Exception 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 @Override
public Boolean addTagCallback(AddTagCallbackNoticeRequest request) { public Boolean addTagCallback(AddTagCallbackNoticeRequest request) {
try { 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())) { if (Integer.valueOf(2).equals(request.getStatus())) {
redisUtilPool.setString(key, request.getErrorMsg()); redisUtilPool.setString(key, request.getErrorMsg());
} else { } else {
@@ -246,6 +288,10 @@ public class WalletServiceImpl implements WalletService {
} else { } else {
redisUtilPool.delKey(key); 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) { } catch (Exception e) {
log.info("平安打标回调失败", e); log.info("平安打标回调失败", e);
} }
@@ -258,10 +304,10 @@ public class WalletServiceImpl implements WalletService {
} }
@Override @Override
public List<AccountInfoVO> getAccountList(AccountQueryRequest request) { public AccountDataVO getAccountList(AccountQueryRequest request) {
String storeId = getStoreId(request); String storeId = getStoreId(request);
List<AccountInfoDTO> accountInfo = walletApiService.getAccountInfo(new OutStoreIdRequest(storeId)); 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())) .filter(v -> Objects.isNull(request.getWalletType()) || request.getWalletType().equals(v.getWalletType()))
.map(v -> { .map(v -> {
AccountInfoVO vo = BeanUtil.toBean(v, AccountInfoVO.class); AccountInfoVO vo = BeanUtil.toBean(v, AccountInfoVO.class);
@@ -269,6 +315,11 @@ public class WalletServiceImpl implements WalletService {
vo.setFailReason(redisUtilPool.getString(key)); vo.setFailReason(redisUtilPool.getString(key));
return vo; return vo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
boolean onlineBankOpenFail = false;
if (WalletTypeEnum.ONLINE_BANK.getType().equals(request.getWalletType())) {
onlineBankOpenFail = getOnlineBankFailTag(storeId);
}
return new AccountDataVO(onlineBankOpenFail, accountList);
} }
@Override @Override
@@ -417,10 +468,15 @@ public class WalletServiceImpl implements WalletService {
} }
@Override @Override
public OpenBasicInfoDTO getOpenBasicInfo(String storeCode) { public OpenBasicInfoDTO getOpenBasicInfo(String storeId, String storeCode) {
OpenBasicInfoDTO openBasicInfoDTO = new OpenBasicInfoDTO(); 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)){ if (Objects.nonNull(openBankInfo)){
openBasicInfoDTO.setSignerName(openBankInfo.getSignerName()); openBasicInfoDTO.setSignerName(openBankInfo.getSignerName());
openBasicInfoDTO.setSignerIdCard(openBankInfo.getSignerIdCard()); openBasicInfoDTO.setSignerIdCard(openBankInfo.getSignerIdCard());
@@ -475,6 +531,11 @@ public class WalletServiceImpl implements WalletService {
}else { }else {
openBankInfoDAO.updateByStoreCode(openBankInfoDO); openBankInfoDAO.updateByStoreCode(openBankInfoDO);
} }
// 如果是开店流程中网商开通失败,则重新调用打标接口
if (getOnlineBankFailTag(request.getStoreId())) {
onlineBankFailReOpen(request);
return true;
}
OldStoreAccountCreateRequest oldStoreAccountCreateRequest = new OldStoreAccountCreateRequest(); OldStoreAccountCreateRequest oldStoreAccountCreateRequest = new OldStoreAccountCreateRequest();
StoreDO store = storeDao.getByStoreNum(request.getStoreCode()); StoreDO store = storeDao.getByStoreNum(request.getStoreCode());
oldStoreAccountCreateRequest.setOutStoreId(store.getStoreId()); oldStoreAccountCreateRequest.setOutStoreId(store.getStoreId());
@@ -502,6 +563,43 @@ public class WalletServiceImpl implements WalletService {
return Boolean.TRUE; 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) { public String getStoreId(StoreShopRequest request) {
String storeId = request.getStoreId(); String storeId = request.getStoreId();
if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) { if (StringUtils.isBlank(storeId) && Objects.nonNull(request.getShopId())) {

View File

@@ -35,7 +35,7 @@ public class WalletController {
@ApiOperation("账户列表") @ApiOperation("账户列表")
@GetMapping("/accountList") @GetMapping("/accountList")
public ResponseResult<List<AccountInfoVO>> getAccountList(AccountQueryRequest request) { public ResponseResult<List<AccountInfoVO>> getAccountList(AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountList(request)); return ResponseResult.success(walletService.getAccountList(request).getAccountList());
} }
@ApiOperation("账户详情") @ApiOperation("账户详情")

View File

@@ -8,13 +8,14 @@ import com.cool.store.service.wallet.WalletService;
import com.cool.store.vo.wallet.*; import com.cool.store.vo.wallet.*;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.util.List;
/** /**
* <p> * <p>
@@ -58,7 +59,7 @@ public class MiniWalletController {
@ApiOperation("账户列表") @ApiOperation("账户列表")
@GetMapping("/accountList") @GetMapping("/accountList")
public ResponseResult<List<AccountInfoVO>> getAccountList(AccountQueryRequest request) { public ResponseResult<AccountDataVO> getAccountList(AccountQueryRequest request) {
return ResponseResult.success(walletService.getAccountList(request)); return ResponseResult.success(walletService.getAccountList(request));
} }
@@ -111,8 +112,13 @@ public class MiniWalletController {
} }
@ApiOperation("根据门店编码查询开通基础信息") @ApiOperation("根据门店编码查询开通基础信息")
@GetMapping("/getOpenBasicInfo") @GetMapping("/getOpenBasicInfo")
public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) { @ApiImplicitParams({
return ResponseResult.success(walletService.getOpenBasicInfo(storeCode)); @ApiImplicitParam(name = "storeId", value = "门店id", required = true, dataType = "String"),
@ApiImplicitParam(name = "storeCode", value = "门店编号", required = true, dataType = "String"),
})
public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店id不能为空") String storeId,
@NotBlank(message = "门店编码不能为空") String storeCode) {
return ResponseResult.success(walletService.getOpenBasicInfo(storeId, storeCode));
} }
@ApiOperation("提交开通") @ApiOperation("提交开通")
@@ -121,4 +127,10 @@ public class MiniWalletController {
return ResponseResult.success(walletService.openOnlineBankAccount(request)); return ResponseResult.success(walletService.openOnlineBankAccount(request));
} }
@ApiOperation("网商账户激活")
@PostMapping("/onlineBankActive")
public ResponseResult<Boolean> onlineBankActive(@RequestBody @Validated StoreShopRequest request) {
return ResponseResult.success(walletService.onlineBankActive(request));
}
} }

View File

@@ -403,7 +403,7 @@ public class TestController {
@ApiOperation("根据门店编码查询开通基础信息") @ApiOperation("根据门店编码查询开通基础信息")
@GetMapping("/getOpenBasicInfo") @GetMapping("/getOpenBasicInfo")
public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) { public ResponseResult<OpenBasicInfoDTO> getOpenBasicInfo(@NotBlank(message = "门店编码不能为空") String storeCode) {
return ResponseResult.success(walletService.getOpenBasicInfo(storeCode)); return ResponseResult.success(walletService.getOpenBasicInfo(null, storeCode));
} }
@ApiOperation("提交开通") @ApiOperation("提交开通")