feat: 结算单列表指定失败悬浮展示失败原因
This commit is contained in:
+4
@@ -48,6 +48,10 @@ public class FormalSettlementVO extends FormalSettlement implements KingdeeUnloc
|
||||
@TableField(exist = false) private Integer attachmentCount;
|
||||
@TableField(exist = false) private String attachmentSyncStatus;
|
||||
@TableField(exist = false) private String attachmentSyncStatusName;
|
||||
@TableField(exist = false) @Schema(description = "已指定应付聚合态(assigned全部已指定/failed存在指定失败/unspecified存在未指定),空展示-")
|
||||
private String kingdeeAssignStatus;
|
||||
@TableField(exist = false) @Schema(description = "指定失败原因(存在指定失败时聚合各票原因,悬浮展示)")
|
||||
private String kingdeeAssignFailReason;
|
||||
@TableField(exist = false) @Schema(description = "金蝶锁状态:locked-锁定中/failed-锁定失败;unlocked为终态不返回,null=无锁或已解锁")
|
||||
private String kingdeeLockStatus;
|
||||
@TableField(exist = false) @Schema(description = "金蝶锁失败原因(仅锁定失败时有值)")
|
||||
|
||||
+59
@@ -226,9 +226,68 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
|
||||
IPage<FormalSettlementVO> voPage = result.convert(item -> this.toVO(item, writeOffAmounts));
|
||||
fillAttachmentSyncStatus(voPage.getRecords());
|
||||
fillKingdeeLockStatus(voPage.getRecords());
|
||||
fillKingdeeAssignStatus(voPage.getRecords());
|
||||
return voPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充已指定应付聚合态:按本页结算单一次批量查认领关系与收票登记,避免 N+1。
|
||||
* 聚合规则:任一指定失败 → failed;全部已指定 → assigned;其余(有认领但未指定/未推送)→ unspecified;
|
||||
* 无认领收票或全部认领票无效不填充,前端展示"-"
|
||||
*
|
||||
* @param rows 本页 VO 列表
|
||||
*/
|
||||
private void fillKingdeeAssignStatus(List<FormalSettlementVO> rows) {
|
||||
if (Func.isEmpty(rows)) {
|
||||
return;
|
||||
}
|
||||
List<InvoiceReceiptSettlement> relations = invoiceReceiptSettlementMapper.selectList(
|
||||
Wrappers.<InvoiceReceiptSettlement>lambdaQuery()
|
||||
.in(InvoiceReceiptSettlement::getFormalSettlementId,
|
||||
rows.stream().map(FormalSettlementVO::getId).filter(Objects::nonNull).toList()));
|
||||
if (relations.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<Long> receiptIds = relations.stream()
|
||||
.map(InvoiceReceiptSettlement::getInvoiceReceiptId).filter(Objects::nonNull).distinct().toList();
|
||||
Map<Long, InvoiceReceipt> receiptById = invoiceReceiptMapper.selectByIds(receiptIds).stream()
|
||||
.filter(receipt -> !TransportBusiConstant.VOIDED.equals(receipt.getApprovalStatus())
|
||||
&& !Objects.equals(receipt.getIsDeleted(), 1))
|
||||
.collect(Collectors.toMap(InvoiceReceipt::getId, receipt -> receipt, (left, right) -> left));
|
||||
Map<Long, List<InvoiceReceipt>> receiptsBySettlement = new HashMap<>();
|
||||
for (InvoiceReceiptSettlement relation : relations) {
|
||||
InvoiceReceipt receipt = receiptById.get(relation.getInvoiceReceiptId());
|
||||
if (receipt == null) {
|
||||
continue;
|
||||
}
|
||||
receiptsBySettlement.computeIfAbsent(relation.getFormalSettlementId(), key -> new ArrayList<>())
|
||||
.add(receipt);
|
||||
}
|
||||
for (FormalSettlementVO vo : rows) {
|
||||
List<InvoiceReceipt> claimed = receiptsBySettlement.get(vo.getId());
|
||||
if (Func.isEmpty(claimed)) {
|
||||
continue;
|
||||
}
|
||||
List<String> statuses = claimed.stream()
|
||||
.map(receipt -> Func.toStrWithEmpty(receipt.getKingdeePushStatus(),
|
||||
KingdeeBfiConstant.RECEIVED_PUSH_UNSYNCED))
|
||||
.toList();
|
||||
String status = statuses.contains(KingdeeBfiConstant.RECEIVED_PUSH_FAILED) ? "failed"
|
||||
: statuses.stream().allMatch(KingdeeBfiConstant.RECEIVED_PUSH_ASSIGNED::equals)
|
||||
? "assigned" : "unspecified";
|
||||
vo.setKingdeeAssignStatus(status);
|
||||
// 指定失败行聚合各票失败原因,供悬浮展示
|
||||
if ("failed".equals(status)) {
|
||||
vo.setKingdeeAssignFailReason(claimed.stream()
|
||||
.filter(receipt -> KingdeeBfiConstant.RECEIVED_PUSH_FAILED.equals(
|
||||
Func.toStrWithEmpty(receipt.getKingdeePushStatus(), KingdeeBfiConstant.RECEIVED_PUSH_UNSYNCED)))
|
||||
.map(receipt -> "发票" + Func.toStrWithEmpty(receipt.getInvoiceNo(), String.valueOf(receipt.getId()))
|
||||
+ ":" + Func.toStrWithEmpty(receipt.getKingdeePushMsg(), "推送失败"))
|
||||
.collect(Collectors.joining(";")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充金蝶锁状态标识(locked-锁定中/failed-锁定失败;unlocked 终态不返回):
|
||||
* 锁表按本页源单一次批量查询,避免 N+1;locked 时前端可禁用编辑/作废,
|
||||
|
||||
Reference in New Issue
Block a user