⚡ 优化角色数据权限、用户组织范围与流程完结处理人展示

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-11-09 22:55:11 +08:00
co-authored by Cursor
parent 2ab7b893fd
commit 719d09fde2
13 changed files with 280 additions and 96 deletions
@@ -128,7 +128,7 @@ public final class MkProcessBizHandlers {
entity.setApprovalStatus(change ? "change_approved" : "approved");
entity.setEffectiveType("formal");
entity.setCurrentNode("审核通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
entity.setApprovedTime(LocalDateTime.now());
// HCS 推送:审批通过置待同步状态,更新成功后即时推送,扫描任务保留兜底(ADR-0001 修订,前端接入设计 §6)
entity.setHcsSyncStatus(HcsSyncConstant.HCS_STATUS_UNSYNCED);
@@ -149,7 +149,7 @@ public final class MkProcessBizHandlers {
boolean change = "change_reviewing".equals(entity.getApprovalStatus());
entity.setApprovalStatus(change ? "change_rejected" : "rejected");
entity.setCurrentNode("审核不通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
return service.updateById(entity);
}
}
@@ -201,7 +201,7 @@ public final class MkProcessBizHandlers {
Long projectId = service.approve(id);
entity = service.getById(id);
if (entity != null) {
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(entity);
}
if (projectId != null) {
@@ -219,7 +219,7 @@ public final class MkProcessBizHandlers {
boolean rejected = service.reject(id);
entity = service.getById(id);
if (entity != null) {
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(entity);
}
return rejected;
@@ -273,7 +273,7 @@ public final class MkProcessBizHandlers {
Long contractId = service.approve(id);
entity = service.getById(id);
if (entity != null) {
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(entity);
}
if (contractId != null) {
@@ -291,7 +291,7 @@ public final class MkProcessBizHandlers {
boolean rejected = service.reject(id);
entity = service.getById(id);
if (entity != null) {
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(entity);
}
return rejected;
@@ -348,7 +348,7 @@ public final class MkProcessBizHandlers {
boolean change = "change_reviewing".equals(entity.getApprovalStatus());
entity.setApprovalStatus(change ? "change_approved" : "approved");
entity.setCurrentNode("审核通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
// HCS 推送:审批通过置待同步状态,更新成功后即时推送,扫描任务保留兜底(ADR-0001 修订,前端接入设计 §6)
entity.setHcsSyncStatus(HcsSyncConstant.HCS_STATUS_UNSYNCED);
boolean updated = service.updateById(entity);
@@ -368,7 +368,7 @@ public final class MkProcessBizHandlers {
boolean change = "change_reviewing".equals(entity.getApprovalStatus());
entity.setApprovalStatus(change ? "change_rejected" : "rejected");
entity.setCurrentNode("审核不通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
return service.updateById(entity);
}
}
@@ -418,7 +418,7 @@ public final class MkProcessBizHandlers {
}
entity.setApprovalStatus("approved");
entity.setCurrentNode("审核通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
entity.setApprovedTime(LocalDateTime.now());
return service.updateById(entity);
}
@@ -431,7 +431,7 @@ public final class MkProcessBizHandlers {
}
entity.setApprovalStatus("returned");
entity.setCurrentNode("审核不通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
return service.updateById(entity);
}
}
@@ -498,7 +498,7 @@ public final class MkProcessBizHandlers {
FormalSettlement updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -516,7 +516,7 @@ public final class MkProcessBizHandlers {
}
entity.setApprovalStatus("returned");
entity.setCurrentNode("审核不通过");
entity.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
entity.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
return service.updateById(entity);
}
}
@@ -573,7 +573,7 @@ public final class MkProcessBizHandlers {
PaymentApplication updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
// HCS 推送零埋点:MK 审批回调仅置待同步状态,与 /approve 入口收敛于同一权威状态(ADR-0001)
updated.setHcsSyncStatus(HcsSyncConstant.HCS_STATUS_UNSYNCED);
service.updateById(updated);
@@ -600,7 +600,7 @@ public final class MkProcessBizHandlers {
}
updated.setApprovalStatus("returned");
updated.setCurrentNode("审核不通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
return service.updateById(updated);
}
}
@@ -654,7 +654,7 @@ public final class MkProcessBizHandlers {
InvoiceApplication updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -673,7 +673,7 @@ public final class MkProcessBizHandlers {
InvoiceApplication updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核不通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -729,7 +729,7 @@ public final class MkProcessBizHandlers {
InvoiceReceipt updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -748,7 +748,7 @@ public final class MkProcessBizHandlers {
InvoiceReceipt updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核不通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -804,7 +804,7 @@ public final class MkProcessBizHandlers {
BillPayment updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -823,7 +823,7 @@ public final class MkProcessBizHandlers {
BillPayment updated = service.getById(id);
if (updated != null) {
updated.setCurrentNode("审核不通过");
updated.setCurrentProcessor(MkProcessNodeHelper.text(processorName, "系统"));
updated.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
service.updateById(updated);
}
return true;
@@ -20,6 +20,11 @@ public final class MkProcessNodeHelper {
*/
private static final String DRAFT_NODE_NUMBER = "N2";
/**
* 流程完结后业务单据「当前处理人」统一展示文案。
*/
public static final String PROCESS_FINISHED = "流程结束";
private static final List<String> CURRENT_NODE_KEYS = List.of("handlerInfos", "drafterInfos", "adminInfos");
private MkProcessNodeHelper() {
@@ -39,9 +44,20 @@ public final class MkProcessNodeHelper {
}
public static String currentProcessor(Object processInfo) {
// 流程已完结时不再回写最后处理人,统一展示「流程结束」
if (isProcessFinished(processInfo)) {
return PROCESS_FINISHED;
}
return joinDistinct(extractTexts(asMap(processInfo).get("currentHandlers"), "fdName", "name"), "、");
}
/**
* MK 流程是否已完结(fdProcessStatus=30)。
*/
public static boolean isProcessFinished(Object processInfo) {
return "30".equals(text(asMap(processInfo).get("fdProcessStatus")));
}
public static String currentNode(Object processInfo) {
Map<String, Object> taskInfo = asMap(asMap(processInfo).get("fdTaskInfo"));
List<String> nodeNames = new ArrayList<>();
@@ -280,9 +280,15 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
public boolean submit(CustomerArchiveVO customer) {
CustomerArchiveVO beforeDetail = Func.isEmpty(customer.getId()) ? null : detail(customer.getId());
prepare(customer);
validateBase(customer);
boolean created = Func.isEmpty(customer.getId());
CustomerArchive before = created ? null : ensureCustomerAccessible(customer.getId());
if (!created) {
// 编辑时客商编号、供应商编码、统一社会信用代码不允许修改
customer.setCustomerCode(before.getCustomerCode());
customer.setSupplierCode(before.getSupplierCode());
customer.setUnifiedCreditCode(before.getUnifiedCreditCode());
}
validateBase(customer);
if (created) {
// 新增时金蝶已有客商,前端回填金蝶客商编码,建档直接沿用;未回填则自动生成
customer.setCustomerCode(Func.isEmpty(customer.getCustomerCode()) ? this.nextCustomerCode() : customer.getCustomerCode());
@@ -432,7 +438,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
after.setAccessType(ACCESS_FORMAL);
after.setApprovalStatus(APPROVAL_APPROVED);
after.setCurrentNode("审核通过");
after.setCurrentProcessor(Func.isEmpty(processorName) ? "系统" : processorName.trim());
after.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
after.setApprovedTime(LocalDateTime.now());
// 审核通过后按当前未删除评分刷新生效等级/额度(替换旧评分场景在此切换生效)
this.applyCreditFromActiveScore(after);
@@ -462,7 +468,7 @@ public class CustomerArchiveServiceImpl extends BaseServiceImpl<CustomerArchiveM
CustomerArchive after = copyCustomer(before);
after.setApprovalStatus(APPROVAL_REJECTED);
after.setCurrentNode("审核不通过");
after.setCurrentProcessor(Func.isEmpty(processorName) ? "系统" : processorName.trim());
after.setCurrentProcessor(MkProcessNodeHelper.PROCESS_FINISHED);
addChangeRecord(id, "客商准入审核不通过", before, after);
boolean updated = updateById(after);
log.info("流程审核驳回 id={} processor={} result={}", id, after.getCurrentProcessor(), updated);