接入汇付企业开户失败待办

This commit is contained in:
jsowell
2026-07-22 16:12:40 +08:00
parent 7e27bada2d
commit e663a22303
10 changed files with 313 additions and 6 deletions

View File

@@ -0,0 +1,13 @@
package com.jsowell.pile.constant;
/**
* 汇付账户待办常量。
*/
public final class AdapayAccountTodoConstants {
public static final String TASK_TYPE_CORP_MEMBER_FAILED = "ADAPAY_CORP_MEMBER_FAILED";
public static final String BUSINESS_TYPE = "ADAPAY_CORP_MEMBER_ACCOUNT";
public static final String ROUTE_NAME = "accountUserInfo";
private AdapayAccountTodoConstants() {
}
}

View File

@@ -0,0 +1,12 @@
package com.jsowell.pile.service;
import com.jsowell.pile.domain.AdapayMemberAccount;
/**
* 汇付账户状态与待办联动服务。
*/
public interface AdapayAccountTodoService {
void handleCorpMemberFailed(AdapayMemberAccount account);
void handleCorpMemberSucceeded(AdapayMemberAccount account);
}

View File

@@ -0,0 +1,154 @@
package com.jsowell.pile.service.impl;
import com.alibaba.fastjson2.JSON;
import com.jsowell.common.exception.ServiceException;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.constant.AdapayAccountTodoConstants;
import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.PileMerchantInfo;
import com.jsowell.pile.service.AdapayAccountTodoService;
import com.jsowell.pile.service.AdapayMemberAccountService;
import com.jsowell.pile.service.PileMerchantInfoService;
import com.jsowell.system.constant.TodoTaskConstants;
import com.jsowell.system.domain.dto.TodoTaskCreateCommand;
import com.jsowell.system.service.TodoTaskAssigneeService;
import com.jsowell.system.service.TodoTaskService;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 汇付账户状态与待办联动服务实现。
*/
@Service
public class AdapayAccountTodoServiceImpl implements AdapayAccountTodoService {
private static final Logger log = LoggerFactory.getLogger(AdapayAccountTodoServiceImpl.class);
private static final String CALLBACK_OPERATOR = "adapay-callback";
@Autowired
private AdapayMemberAccountService adapayMemberAccountService;
@Autowired
private PileMerchantInfoService pileMerchantInfoService;
@Autowired
private TodoTaskAssigneeService todoTaskAssigneeService;
@Autowired
private TodoTaskService todoTaskService;
@Override
@Transactional(rollbackFor = Exception.class)
public void handleCorpMemberFailed(AdapayMemberAccount account) {
validateAccount(account);
adapayMemberAccountService.updateAdapayMemberAccount(account);
createCorpMemberFailedTodos(account);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void handleCorpMemberSucceeded(AdapayMemberAccount account) {
validateAccount(account);
adapayMemberAccountService.updateAdapayMemberAccount(account);
if (StringUtils.isNotBlank(account.getMerchantId())) {
todoTaskService.completeByBusinessAsSystem(AdapayAccountTodoConstants.BUSINESS_TYPE,
account.getMerchantId(), null, CALLBACK_OPERATOR);
}
}
private void createCorpMemberFailedTodos(AdapayMemberAccount account) {
if (StringUtils.isBlank(account.getMerchantId())) {
log.warn("汇付企业开户失败记录缺少运营商无法创建待办accountId={}, adapayMemberId={}",
account.getId(), account.getAdapayMemberId());
return;
}
PileMerchantInfo merchantInfo;
try {
merchantInfo = pileMerchantInfoService.selectPileMerchantInfoById(
Long.parseLong(account.getMerchantId()));
} catch (NumberFormatException exception) {
log.warn("汇付企业开户失败记录运营商 ID 非法无法创建待办merchantId={}",
account.getMerchantId());
return;
}
if (merchantInfo == null || StringUtils.isBlank(merchantInfo.getDeptId())) {
log.warn("汇付企业开户失败记录未找到运营商部门无法创建待办merchantId={}",
account.getMerchantId());
return;
}
Long deptId;
try {
deptId = Long.parseLong(merchantInfo.getDeptId());
} catch (NumberFormatException exception) {
log.warn("汇付企业开户失败记录运营商部门 ID 非法无法创建待办merchantId={}, deptId={}",
account.getMerchantId(), merchantInfo.getDeptId());
return;
}
List<Long> assigneeUserIds = todoTaskAssigneeService.findActiveOperatorAdminUserIdsByDeptTree(deptId);
if (CollectionUtils.isEmpty(assigneeUserIds)) {
log.warn("汇付企业开户失败记录运营商部门下没有正常管理员无法创建待办merchantId={}, deptId={}",
account.getMerchantId(), deptId);
return;
}
String summary = buildSummary(account.getAuditDesc());
String routeParams = buildRouteParams(account.getMerchantId());
for (Long assigneeUserId : assigneeUserIds) {
String idempotentKey = AdapayAccountTodoConstants.TASK_TYPE_CORP_MEMBER_FAILED + ":"
+ AdapayAccountTodoConstants.BUSINESS_TYPE + ":" + account.getMerchantId() + ":"
+ assigneeUserId;
todoTaskService.createTask(TodoTaskCreateCommand.builder()
.taskType(AdapayAccountTodoConstants.TASK_TYPE_CORP_MEMBER_FAILED)
.title("汇付企业开户失败")
.summary(summary)
.content(truncate(account.getAuditDesc(), 20000))
.businessType(AdapayAccountTodoConstants.BUSINESS_TYPE)
.businessId(account.getMerchantId())
.routeName(AdapayAccountTodoConstants.ROUTE_NAME)
.routeParams(routeParams)
.assigneeUserId(assigneeUserId)
.assigneeMerchantId(account.getMerchantId())
.priority(TodoTaskConstants.PRIORITY_IMPORTANT)
.idempotentKey(idempotentKey)
.createBy(CALLBACK_OPERATOR)
.build());
}
}
private String buildSummary(String auditDesc) {
String summary = "汇付企业开户失败,请补充或修正开户资料";
if (StringUtils.isNotBlank(auditDesc)) {
summary += ",原因:" + auditDesc.trim();
}
return summary.length() <= 500 ? summary : summary.substring(0, 500);
}
private String truncate(String value, int maxLength) {
if (value == null || value.length() <= maxLength) {
return value;
}
return value.substring(0, maxLength);
}
private String buildRouteParams(String merchantId) {
Map<String, Object> params = new HashMap<>(1);
params.put("id", merchantId);
Map<String, Object> routeParams = new HashMap<>(1);
routeParams.put("params", params);
return JSON.toJSONString(routeParams);
}
private void validateAccount(AdapayMemberAccount account) {
if (account == null || account.getId() == null) {
throw new ServiceException("汇付账户记录不能为空");
}
}
}