diff --git a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayOpenActionEnum.java b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayOpenActionEnum.java index 97edd2982..c90882850 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayOpenActionEnum.java +++ b/jsowell-common/src/main/java/com/jsowell/common/enums/adapay/AdapayOpenActionEnum.java @@ -15,7 +15,7 @@ public enum AdapayOpenActionEnum { RESUBMIT_CORP_MEMBER("RESUBMIT_CORP_MEMBER", "重新提交企业开户"), CREATE_SETTLE_ACCOUNT("CREATE_SETTLE_ACCOUNT", "创建结算账户"), DELETE_SETTLE_ACCOUNT("DELETE_SETTLE_ACCOUNT", "删除结算账户"), - DELETE_MEMBER("DELETE_MEMBER", "删除汇付用户"); + DELETE_MEMBER("DELETE_MEMBER", "删除账户(本地解绑)"); private final String value; private final String label; diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java index 2f89f7e03..ae7bef85b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayService.java @@ -83,6 +83,9 @@ public class AdapayService { @Autowired private PileMerchantInfoService pileMerchantInfoService; + @Autowired + private StationSplitConfigService stationSplitConfigService; + @Autowired private MemberBasicInfoService memberBasicInfoService; @@ -635,6 +638,11 @@ public class AdapayService { settleCountParams.put("app_id", config.getAdapayAppId()); Map settleCount = SettleAccount.delete(settleCountParams, wechatAppId); log.info("创建删除结算账户请求param:{}, result:{}", JSON.toJSONString(settleCountParams), JSON.toJSONString(settleCount)); + if (settleCount == null + || !AdapayStatusEnum.SUCCEEDED.getValue().equals(settleCount.get("status"))) { + String errorMsg = settleCount == null ? null : (String) settleCount.get("error_msg"); + throw new BusinessException("", StringUtils.isNotBlank(errorMsg) ? errorMsg : "删除汇付结算账户失败"); + } } /** @@ -1825,7 +1833,16 @@ public class AdapayService { if (CollectionUtils.isNotEmpty(selectSettleAccount(dto.getMerchantId()))) { throw new BusinessException("", "请先删除结算账户"); } - adapayMemberAccountService.deleteAccountByMerchantId(dto.getMerchantId()); + assertSettleAccountCanDelete(dto.getMerchantId()); + int splitStationCount = stationSplitConfigService.countActiveByAdapayMemberId(adapayMemberAccount.getAdapayMemberId()); + if (splitStationCount > 0) { + throw new BusinessException("", String.format("当前账户仍被%d个站点的分账配置引用,请先调整分账配置", splitStationCount)); + } + int deleted = adapayMemberAccountService.deleteCurrentAccount( + adapayMemberAccount.getId(), dto.getMerchantId(), adapayMemberAccount.getAdapayMemberId()); + if (deleted != 1) { + throw new BusinessException("", "账户状态已变化,请刷新后重试"); + } } /** @@ -2014,6 +2031,7 @@ public class AdapayService { case CORP_OPENED_NO_SETTLE: actions.add(AdapayOpenActionEnum.CREATE_SETTLE_ACCOUNT.getValue()); actions.add(AdapayOpenActionEnum.UPDATE_CORP_MEMBER.getValue()); + actions.add(AdapayOpenActionEnum.DELETE_MEMBER.getValue()); break; case CORP_COMPLETED: actions.add(AdapayOpenActionEnum.UPDATE_CORP_MEMBER.getValue()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayMemberAccountMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayMemberAccountMapper.java index daa906b51..c0cff6092 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayMemberAccountMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayMemberAccountMapper.java @@ -120,11 +120,9 @@ public interface AdapayMemberAccountMapper { AdapayMemberAccount selectByMemberId(String memberId); - /** - * 通过运营商id删除账户信息 - * @param merchantId - */ - void deleteAccountByMerchantId(String merchantId); + int deleteCurrentAccount(@Param("id") Integer id, + @Param("merchantId") String merchantId, + @Param("adapayMemberId") String adapayMemberId); void clearSettleAccountByMerchantId(String merchantId); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/StationSplitConfigMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/StationSplitConfigMapper.java index 3ada7f155..53a22d707 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/StationSplitConfigMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/StationSplitConfigMapper.java @@ -35,4 +35,6 @@ public interface StationSplitConfigMapper { * @return */ List queryStationList(String adapayMemberId); + + int countActiveByAdapayMemberId(String adapayMemberId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java index 09e6e3ddd..a5eb900f7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/AdapayMemberAccountService.java @@ -111,10 +111,9 @@ public interface AdapayMemberAccountService { String selectMerchantNameByAdapayMemberId(String adapayMemberId); /** - * 根据运营商id删除记录 - * @param merchantId + * 精确逻辑删除当前有效账户,避免并发开户时误删新记录。 */ - void deleteAccountByMerchantId(String merchantId); + int deleteCurrentAccount(Integer id, String merchantId, String adapayMemberId); void clearSettleAccountByMerchantId(String merchantId); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java index 84217da14..8fe8ce7bc 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/StationSplitConfigService.java @@ -59,4 +59,6 @@ public interface StationSplitConfigService { * @return */ Map> queryStationList(SplitConfigStationDTO splitConfigStationDTO); + + int countActiveByAdapayMemberId(String adapayMemberId); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java index 6f1e9c50f..7a69495cb 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/AdapayMemberAccountServiceImpl.java @@ -270,9 +270,12 @@ public class AdapayMemberAccountServiceImpl implements AdapayMemberAccountServic } @Override - public void deleteAccountByMerchantId(String merchantId) { - adapayMemberAccountMapper.deleteAccountByMerchantId(merchantId); - redisCache.deleteObject(CacheConstants.ADAPAY_MEMBER_ACCOUNT + merchantId); + public int deleteCurrentAccount(Integer id, String merchantId, String adapayMemberId) { + int result = adapayMemberAccountMapper.deleteCurrentAccount(id, merchantId, adapayMemberId); + if (result > 0) { + redisCache.deleteObject(CacheConstants.ADAPAY_MEMBER_ACCOUNT + merchantId); + } + return result; } @Override diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java index 6390bf0dc..45307b519 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/StationSplitConfigServiceImpl.java @@ -316,4 +316,9 @@ public class StationSplitConfigServiceImpl implements StationSplitConfigService{ return stationMap; } + @Override + public int countActiveByAdapayMemberId(String adapayMemberId) { + return stationSplitConfigMapper.countActiveByAdapayMemberId(adapayMemberId); + } + } diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml index 9fa6df73f..34fda3624 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayMemberAccountMapper.xml @@ -572,11 +572,14 @@ and adapay_member_id = #{memberId,jdbcType=VARCHAR} - + update adapay_member_account - set del_flag = '1' - where merchant_id = #{merchantId,jdbcType=VARCHAR} + set del_flag = '1', + update_time = now() + where id = #{id,jdbcType=INTEGER} + and merchant_id = #{merchantId,jdbcType=VARCHAR} + and adapay_member_id = #{adapayMemberId,jdbcType=VARCHAR} and del_flag = '0' diff --git a/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml index 1225b797e..10c58c856 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/StationSplitConfigMapper.xml @@ -41,6 +41,13 @@ where t1.adapay_member_id = #{adapayMemberId} + + insert into station_split_config