🐛 修复 MinIO 预签名走外网 HTTPS,并过滤无效应收应付变更记录

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-13 12:44:39 +08:00
parent ea1829cd75
commit e0da79d745
5 changed files with 166 additions and 97 deletions
@@ -432,13 +432,23 @@ public class ReceivablePayableDetailServiceImpl
@Override
public IPage<ReceivablePayableChangeRecordVO> changeRecords(IPage<?> page, Long detailId) {
LambdaQueryWrapper<ReceivablePayableChangeRecord> wrapper = Wrappers.<ReceivablePayableChangeRecord>lambdaQuery()
.eq(ReceivablePayableChangeRecord::getDetailId, detailId)
.eq(ReceivablePayableChangeRecord::getIsDeleted, 0)
.orderByDesc(ReceivablePayableChangeRecord::getAdjustTime);
IPage<ReceivablePayableChangeRecord> entityPage = changeRecordMapper.selectPage(new Page<>(page.getCurrent(), page.getSize()), wrapper);
Page<ReceivablePayableChangeRecordVO> voPage = new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
voPage.setRecords(entityPage.getRecords().stream().map(record -> Objects.requireNonNull(
List<ReceivablePayableChangeRecord> meaningfulRecords = changeRecordMapper.selectList(
Wrappers.<ReceivablePayableChangeRecord>lambdaQuery()
.eq(ReceivablePayableChangeRecord::getDetailId, detailId)
.eq(ReceivablePayableChangeRecord::getIsDeleted, 0)
.orderByDesc(ReceivablePayableChangeRecord::getAdjustTime))
.stream()
.filter(record -> hasMeaningfulChange(record.getChangeContent()))
.toList();
long current = page.getCurrent();
long size = page.getSize();
int fromIndex = (int) Math.max(0L, (current - 1L) * size);
int toIndex = (int) Math.min(meaningfulRecords.size(), fromIndex + size);
List<ReceivablePayableChangeRecord> pageRecords = fromIndex >= meaningfulRecords.size()
? List.of()
: meaningfulRecords.subList(fromIndex, toIndex);
Page<ReceivablePayableChangeRecordVO> voPage = new Page<>(current, size, meaningfulRecords.size());
voPage.setRecords(pageRecords.stream().map(record -> Objects.requireNonNull(
BeanUtil.copyProperties(record, ReceivablePayableChangeRecordVO.class))).toList());
return voPage;
}
@@ -613,14 +623,8 @@ public class ReceivablePayableDetailServiceImpl
appendChange(changes, "运输单价", existing.getUnitPrice(), adjusted.getUnitPrice());
appendChange(changes, "里程", existing.getMileage(), mileage);
appendChange(changes, "运输费", existing.getFreightAmount(), freightAmount);
if (!Objects.equals(existing.getRemark(), adjusted.getRemark())) {
changes.add("【备注】从[" + Objects.toString(existing.getRemark(), "") + "]调整为["
+ Objects.toString(adjusted.getRemark(), "") + "]");
}
if (!Objects.equals(existing.getChangeReason(), adjusted.getChangeReason())) {
changes.add("【变更原因】从[" + Objects.toString(existing.getChangeReason(), "") + "]调整为["
+ Objects.toString(adjusted.getChangeReason(), "") + "]");
}
appendChange(changes, "备注", existing.getRemark(), adjusted.getRemark());
appendChange(changes, "变更原因", existing.getChangeReason(), adjusted.getChangeReason());
Map<String, Object> oldFeeItems = parseMap(existing.getFeeItemsJson());
for (String name : allowedFeeItems) {
appendChange(changes, name, decimal(oldFeeItems.get(name)), money(effectiveFeeItems.get(name)));
@@ -2367,12 +2371,56 @@ public class ReceivablePayableDetailServiceImpl
}
private void appendChange(List<String> changes, String field, String before, String after) {
if (!Objects.equals(before, after)) {
changes.add("【" + field + "】从[" + Objects.toString(before, "") + "]调整为["
+ Objects.toString(after, "") + "]");
String oldValue = normalizeChangeText(before);
String newValue = normalizeChangeText(after);
if (!Objects.equals(oldValue, newValue)) {
changes.add("【" + field + "】从[" + oldValue + "]调整为[" + newValue + "]");
}
}
/**
* 变更文本归一化:null / 空白视为相同,避免出现「从[]调整为[]」无效记录
*/
private String normalizeChangeText(String value) {
return value == null ? "" : value.trim();
}
/**
* 是否存在实际前后差异;整段内容均无变化时不展示
*/
private boolean hasMeaningfulChange(String content) {
if (Func.isBlank(content)) {
return false;
}
String text = content.trim();
int suffixStart = text.lastIndexOf('(');
if (suffixStart > 0 && text.endsWith(")")) {
text = text.substring(0, suffixStart);
}
boolean hasPart = false;
for (String part : text.split(";")) {
if (Func.isBlank(part)) {
continue;
}
hasPart = true;
if (isMeaningfulChangePart(part.trim())) {
return true;
}
}
return !hasPart;
}
private boolean isMeaningfulChangePart(String part) {
int fromIdx = part.indexOf("从[");
int toIdx = part.indexOf("]调整为[");
if (fromIdx < 0 || toIdx < fromIdx || !part.endsWith("]")) {
return true;
}
String before = part.substring(fromIdx + 2, toIdx);
String after = part.substring(toIdx + 5, part.length() - 1);
return !Objects.equals(before, after);
}
private String formatValue(BigDecimal value) {
return money(value).stripTrailingZeros().toPlainString();
}
@@ -2617,6 +2665,9 @@ public class ReceivablePayableDetailServiceImpl
}
private void saveChangeRecord(ReceivablePayableDetail detail, String content, String reason, String lineNo) {
if (!hasMeaningfulChange(content)) {
return;
}
ReceivablePayableChangeRecord record = new ReceivablePayableChangeRecord();
record.setDetailId(detail.getId());
record.setLineNo(lineNo);