fix: 收票指定应付调试数据

This commit is contained in:
刘泉佳
2026-09-24 20:47:44 +08:00
parent a2fd96da9d
commit 976abdf73a
2 changed files with 53 additions and 2 deletions
@@ -32,8 +32,10 @@ import feign.Util;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
/**
@@ -70,7 +72,32 @@ public class CustomFeignLogger extends Logger {
bodyStr = new String(body, StandardCharsets.UTF_8);
}
log.info("===> [{}] {} {} | Headers: {} | Body: {}", configKey, method, url, headers, flattenBody(bodyStr));
String queryParams = extractQueryParams(url);
if ("GET".equalsIgnoreCase(method) && !queryParams.isEmpty()) {
log.info("===> [{}] {} {} | Headers: {} | Params: {} | Body: {}", configKey, method, url, headers, queryParams, flattenBody(bodyStr));
} else {
log.info("===> [{}] {} {} | Headers: {} | Body: {}", configKey, method, url, headers, flattenBody(bodyStr));
}
}
private String extractQueryParams(String url) {
int queryStart = url.indexOf('?');
if (queryStart < 0 || queryStart >= url.length() - 1) {
return "";
}
String queryString = url.substring(queryStart + 1);
Map<String, String> params = new LinkedHashMap<>();
for (String pair : queryString.split("&")) {
int eqPos = pair.indexOf('=');
if (eqPos > 0) {
String key = URLDecoder.decode(pair.substring(0, eqPos), StandardCharsets.UTF_8);
String value = URLDecoder.decode(pair.substring(eqPos + 1), StandardCharsets.UTF_8);
params.put(key, value);
} else if (!pair.isEmpty()) {
params.put(URLDecoder.decode(pair, StandardCharsets.UTF_8), "");
}
}
return params.toString();
}
@Override
@@ -239,7 +239,31 @@ public class KingdeeReceivedInvoiceSyncSupport {
// 【必填】单价:该行运输单价(与应付单同源;单据头 isincludetax=true 录入价税合计,单价仅作参考)
entry.setPrice(entryGroup.price());
// 【必填】物料编码.编码:按项目业务类型/业务模式/装卸大类映射(与应付单同源)
entry.setMaterialNumber(entryGroup.materialNumber());
String materialNumber = entryGroup.materialNumber();
// 调试:物料编码和计量单位编码映射(收票单场景)
if (true) {
Map<String, String[]> comboMap = Map.of(
"国际货运代理服务费", new String[]{"Item-00001081", "ci"},
"物流配送", new String[]{"Item-00001080", "TON"},
"国内道路货物运输服务-公路运输-吨", new String[]{"Item-00001080", "TON"},
"国内道路货物运输服务-公路运输-公斤", new String[]{"Item-00001080", "KG"},
"装卸", new String[]{"Item-00001080", "KG"}
);
String measureunitName = entryGroup.measureunitNumber();
String comboKey = materialNumber;
if (materialNumber.contains("国内道路货物运输服务")) {
comboKey = materialNumber + "-" + measureunitName;
}
if (comboMap.containsKey(comboKey)) {
String[] combo = comboMap.get(comboKey);
materialNumber = combo[0];
} else {
List<String[]> combos = new ArrayList<>(comboMap.values());
String[] randomCombo = combos.get(new java.util.Random().nextInt(combos.size()));
materialNumber = randomCombo[0];
}
}
entry.setMaterialNumber(materialNumber);
// 金额(不含税):该行结算金额(不含税)(与应付单 e_amount 同源取数;结算合计费用项行无不含税金额不传)
if (entryGroup.amountNoTax() != null) {
entry.setEAmount(kingdeeApBillSyncSupport.money(entryGroup.amountNoTax()));