🐛 修复 MinIO 预签名走外网 HTTPS,并过滤无效应收应付变更记录
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+69
-18
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user