This commit is contained in:
Leo
2025-11-09 00:00:44 +08:00
parent a8c948e958
commit 18d2fb8dee

View File

@@ -485,7 +485,7 @@ public class TencentDocController extends BaseController {
// 2. 检查订单是否已推送(防止重复推送) // 2. 检查订单是否已推送(防止重复推送)
JDOrder order = jdOrderService.selectJDOrderByThirdPartyOrderNo(thirdPartyOrderNo); JDOrder order = jdOrderService.selectJDOrderByThirdPartyOrderNo(thirdPartyOrderNo);
if (order == null) { if (order == null) {
logOperation(null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "订单不存在"); "FAILED", "订单不存在");
return AjaxResult.error("订单不存在:" + thirdPartyOrderNo); return AjaxResult.error("订单不存在:" + thirdPartyOrderNo);
} }
@@ -494,7 +494,7 @@ public class TencentDocController extends BaseController {
if (order.getTencentDocPushed() != null && order.getTencentDocPushed() == 1 && !forceRePush) { if (order.getTencentDocPushed() != null && order.getTencentDocPushed() == 1 && !forceRePush) {
String pushTimeStr = order.getTencentDocPushTime() != null ? String pushTimeStr = order.getTencentDocPushTime() != null ?
new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(order.getTencentDocPushTime()) : "未知"; new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(order.getTencentDocPushTime()) : "未知";
logOperation(null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"SKIPPED", String.format("订单已推送,推送时间: %s", pushTimeStr)); "SKIPPED", String.format("订单已推送,推送时间: %s", pushTimeStr));
return AjaxResult.error(String.format("该订单已推送到腾讯文档(推送时间:%s请勿重复操作如需重新推送请使用强制推送功能。", pushTimeStr)); return AjaxResult.error(String.format("该订单已推送到腾讯文档(推送时间:%s请勿重复操作如需重新推送请使用强制推送功能。", pushTimeStr));
} }
@@ -504,7 +504,7 @@ public class TencentDocController extends BaseController {
try { try {
accessToken = tencentDocTokenService.getValidAccessToken(); accessToken = tencentDocTokenService.getValidAccessToken();
} catch (Exception e) { } catch (Exception e) {
logOperation(null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, null, null, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "访问令牌无效: " + e.getMessage()); "FAILED", "访问令牌无效: " + e.getMessage());
return AjaxResult.error("访问令牌无效,请先完成授权"); return AjaxResult.error("访问令牌无效,请先完成授权");
} }
@@ -530,7 +530,7 @@ public class TencentDocController extends BaseController {
} }
if (fileId == null || fileId.isEmpty() || sheetId == null || sheetId.isEmpty()) { if (fileId == null || fileId.isEmpty() || sheetId == null || sheetId.isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "文档配置不完整"); "FAILED", "文档配置不完整");
return AjaxResult.error("文档配置不完整,请先完成配置"); return AjaxResult.error("文档配置不完整,请先完成配置");
} }
@@ -544,7 +544,7 @@ public class TencentDocController extends BaseController {
if (!lockAcquired) { if (!lockAcquired) {
log.warn("获取锁失败,该订单正在被其他请求处理:{}", thirdPartyOrderNo); log.warn("获取锁失败,该订单正在被其他请求处理:{}", thirdPartyOrderNo);
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "获取分布式锁失败,该订单正在处理中"); "FAILED", "获取分布式锁失败,该订单正在处理中");
return AjaxResult.error("该订单正在处理中,请稍后再试"); return AjaxResult.error("该订单正在处理中,请稍后再试");
} }
@@ -558,7 +558,7 @@ public class TencentDocController extends BaseController {
JSONObject headerData = tencentDocService.readSheetData(accessToken, fileId, sheetId, headerRange); JSONObject headerData = tencentDocService.readSheetData(accessToken, fileId, sheetId, headerRange);
if (headerData == null || !headerData.containsKey("gridData")) { if (headerData == null || !headerData.containsKey("gridData")) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "无法读取表头数据"); "FAILED", "无法读取表头数据");
return AjaxResult.error("无法读取表头数据"); return AjaxResult.error("无法读取表头数据");
} }
@@ -567,7 +567,7 @@ public class TencentDocController extends BaseController {
JSONObject gridData = headerData.getJSONObject("gridData"); JSONObject gridData = headerData.getJSONObject("gridData");
JSONArray rows = gridData.getJSONArray("rows"); JSONArray rows = gridData.getJSONArray("rows");
if (rows == null || rows.isEmpty()) { if (rows == null || rows.isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "表头数据为空"); "FAILED", "表头数据为空");
return AjaxResult.error("表头数据为空"); return AjaxResult.error("表头数据为空");
} }
@@ -593,7 +593,7 @@ public class TencentDocController extends BaseController {
} }
if (orderNoColumn == -1 || logisticsColumn == -1) { if (orderNoColumn == -1 || logisticsColumn == -1) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "未找到'单号'或'物流'列"); "FAILED", "未找到'单号'或'物流'列");
return AjaxResult.error("未找到'单号'或'物流'列,请检查表头配置"); return AjaxResult.error("未找到'单号'或'物流'列,请检查表头配置");
} }
@@ -605,7 +605,7 @@ public class TencentDocController extends BaseController {
JSONObject data = tencentDocService.readSheetData(accessToken, fileId, sheetId, dataRange); JSONObject data = tencentDocService.readSheetData(accessToken, fileId, sheetId, dataRange);
if (data == null || !data.containsKey("gridData")) { if (data == null || !data.containsKey("gridData")) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "无法读取数据区域"); "FAILED", "无法读取数据区域");
return AjaxResult.error("无法读取数据区域"); return AjaxResult.error("无法读取数据区域");
} }
@@ -614,7 +614,7 @@ public class TencentDocController extends BaseController {
JSONArray dataRows = dataGridData.getJSONArray("rows"); JSONArray dataRows = dataGridData.getJSONArray("rows");
if (dataRows == null || dataRows.isEmpty()) { if (dataRows == null || dataRows.isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "数据区域为空"); "FAILED", "数据区域为空");
return AjaxResult.error("数据区域为空"); return AjaxResult.error("数据区域为空");
} }
@@ -638,7 +638,7 @@ public class TencentDocController extends BaseController {
} }
if (targetRow == -1) { if (targetRow == -1) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, logisticsLink,
"FAILED", "未找到单号"); "FAILED", "未找到单号");
return AjaxResult.error("未找到单号: " + thirdPartyOrderNo); return AjaxResult.error("未找到单号: " + thirdPartyOrderNo);
} }
@@ -650,7 +650,7 @@ public class TencentDocController extends BaseController {
JSONObject verifyData = tencentDocService.readSheetData(accessToken, fileId, sheetId, verifyRange); JSONObject verifyData = tencentDocService.readSheetData(accessToken, fileId, sheetId, verifyRange);
if (verifyData == null || !verifyData.containsKey("gridData")) { if (verifyData == null || !verifyData.containsKey("gridData")) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"FAILED", "验证读取失败"); "FAILED", "验证读取失败");
return AjaxResult.error("验证读取失败"); return AjaxResult.error("验证读取失败");
} }
@@ -659,7 +659,7 @@ public class TencentDocController extends BaseController {
JSONArray verifyRows = verifyGridData.getJSONArray("rows"); JSONArray verifyRows = verifyGridData.getJSONArray("rows");
if (verifyRows == null || verifyRows.isEmpty()) { if (verifyRows == null || verifyRows.isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"FAILED", "验证行数据为空"); "FAILED", "验证行数据为空");
return AjaxResult.error("验证行数据为空"); return AjaxResult.error("验证行数据为空");
} }
@@ -669,7 +669,7 @@ public class TencentDocController extends BaseController {
// 验证单号是否仍然匹配 // 验证单号是否仍然匹配
if (verifyCells == null || verifyCells.size() <= orderNoColumn) { if (verifyCells == null || verifyCells.size() <= orderNoColumn) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"SKIPPED", "验证时单号列为空,行已变化"); "SKIPPED", "验证时单号列为空,行已变化");
return AjaxResult.error("验证失败:行数据已变化,单号列为空"); return AjaxResult.error("验证失败:行数据已变化,单号列为空");
} }
@@ -681,7 +681,7 @@ public class TencentDocController extends BaseController {
} }
if (!thirdPartyOrderNo.equals(verifyOrderNo)) { if (!thirdPartyOrderNo.equals(verifyOrderNo)) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"SKIPPED", String.format("验证失败:单号不匹配,期望 %s实际 %s", thirdPartyOrderNo, verifyOrderNo)); "SKIPPED", String.format("验证失败:单号不匹配,期望 %s实际 %s", thirdPartyOrderNo, verifyOrderNo));
return AjaxResult.error("验证失败:单号不匹配,行数据已变化"); return AjaxResult.error("验证失败:单号不匹配,行数据已变化");
} }
@@ -692,7 +692,7 @@ public class TencentDocController extends BaseController {
if (logisticsCell.containsKey("cellValue")) { if (logisticsCell.containsKey("cellValue")) {
String existingLogistics = logisticsCell.getJSONObject("cellValue").getString("text"); String existingLogistics = logisticsCell.getJSONObject("cellValue").getString("text");
if (existingLogistics != null && !existingLogistics.trim().isEmpty()) { if (existingLogistics != null && !existingLogistics.trim().isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"SKIPPED", String.format("物流链接列已有值:%s", existingLogistics)); "SKIPPED", String.format("物流链接列已有值:%s", existingLogistics));
return AjaxResult.error(String.format("该订单物流链接已存在:%s", existingLogistics)); return AjaxResult.error(String.format("该订单物流链接已存在:%s", existingLogistics));
} }
@@ -705,13 +705,13 @@ public class TencentDocController extends BaseController {
JSONObject userInfo = com.ruoyi.jarvis.util.TencentDocApiUtil.getUserInfo(accessToken); JSONObject userInfo = com.ruoyi.jarvis.util.TencentDocApiUtil.getUserInfo(accessToken);
JSONObject userData = userInfo.getJSONObject("data"); JSONObject userData = userInfo.getJSONObject("data");
if (userData == null) { if (userData == null) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"FAILED", "无法获取用户数据"); "FAILED", "无法获取用户数据");
return AjaxResult.error("无法获取用户数据"); return AjaxResult.error("无法获取用户数据");
} }
String openId = userData.getString("openID"); String openId = userData.getString("openID");
if (openId == null || openId.isEmpty()) { if (openId == null || openId.isEmpty()) {
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"FAILED", "无法获取Open-Id"); "FAILED", "无法获取Open-Id");
return AjaxResult.error("无法获取Open-Id"); return AjaxResult.error("无法获取Open-Id");
} }
@@ -729,7 +729,7 @@ public class TencentDocController extends BaseController {
); );
// 12. 记录成功日志 // 12. 记录成功日志
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, targetRow, logisticsLink,
"SUCCESS", null); "SUCCESS", null);
log.info("✓ 物流链接写入成功 - 单号: {}, 行: {}, 链接: {}", thirdPartyOrderNo, targetRow, logisticsLink); log.info("✓ 物流链接写入成功 - 单号: {}, 行: {}, 链接: {}", thirdPartyOrderNo, targetRow, logisticsLink);
@@ -757,7 +757,7 @@ public class TencentDocController extends BaseController {
} catch (Exception e) { } catch (Exception e) {
log.error("填充物流链接失败", e); log.error("填充物流链接失败", e);
logOperation(fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, null, logOperation(null, fileId, sheetId, "WRITE_SINGLE", thirdPartyOrderNo, null, null,
"FAILED", "异常: " + e.getMessage()); "FAILED", "异常: " + e.getMessage());
return AjaxResult.error("填充物流链接失败: " + e.getMessage()); return AjaxResult.error("填充物流链接失败: " + e.getMessage());
} finally { } finally {
@@ -776,11 +776,12 @@ public class TencentDocController extends BaseController {
/** /**
* 记录操作日志到数据库 * 记录操作日志到数据库
*/ */
private void logOperation(String fileId, String sheetId, String operationType, private void logOperation(String batchId, String fileId, String sheetId, String operationType,
String orderNo, Integer targetRow, String logisticsLink, String orderNo, Integer targetRow, String logisticsLink,
String status, String errorMessage) { String status, String errorMessage) {
try { try {
com.ruoyi.jarvis.domain.TencentDocOperationLog log = new com.ruoyi.jarvis.domain.TencentDocOperationLog(); com.ruoyi.jarvis.domain.TencentDocOperationLog log = new com.ruoyi.jarvis.domain.TencentDocOperationLog();
log.setBatchId(batchId);
log.setFileId(fileId); log.setFileId(fileId);
log.setSheetId(sheetId); log.setSheetId(sheetId);
log.setOperationType(operationType); log.setOperationType(operationType);
@@ -882,6 +883,9 @@ public class TencentDocController extends BaseController {
} }
} }
// 从参数获取批次ID如果是批量调用会传入
String batchId = params.get("batchId") != null ? String.valueOf(params.get("batchId")) : null;
// 从参数或配置中获取文档信息 // 从参数或配置中获取文档信息
String fileId = (String) params.get("fileId"); String fileId = (String) params.get("fileId");
String sheetId = (String) params.get("sheetId"); String sheetId = (String) params.get("sheetId");
@@ -1194,7 +1198,7 @@ public class TencentDocController extends BaseController {
} }
// 记录同步日志 // 记录同步日志
logOperation(fileId, sheetId, "BATCH_SYNC", orderNo, excelRow, existingLogisticsLink, logOperation(batchId, fileId, sheetId, "BATCH_SYNC", orderNo, excelRow, existingLogisticsLink,
"SKIPPED", "文档中已有物流链接,已同步订单状态"); "SKIPPED", "文档中已有物流链接,已同步订单状态");
} }
} catch (Exception e) { } catch (Exception e) {
@@ -1397,7 +1401,7 @@ public class TencentDocController extends BaseController {
} }
// 记录操作日志 // 记录操作日志
logOperation(fileId, sheetId, "BATCH_SYNC", expectedOrderNo, row, logisticsLink, logOperation(batchId, fileId, sheetId, "BATCH_SYNC", expectedOrderNo, row, logisticsLink,
"SUCCESS", null); "SUCCESS", null);
} catch (Exception e) { } catch (Exception e) {
log.error("写入数据失败 - 行: {}", entry.getKey(), e); log.error("写入数据失败 - 行: {}", entry.getKey(), e);
@@ -1406,7 +1410,7 @@ public class TencentDocController extends BaseController {
// 记录失败日志 // 记录失败日志
String orderNo = entry.getValue().getString("orderNo"); String orderNo = entry.getValue().getString("orderNo");
String logisticsLink = entry.getValue().getString("logisticsLink"); String logisticsLink = entry.getValue().getString("logisticsLink");
logOperation(fileId, sheetId, "BATCH_SYNC", orderNo, entry.getKey(), logisticsLink, logOperation(batchId, fileId, sheetId, "BATCH_SYNC", orderNo, entry.getKey(), logisticsLink,
"FAILED", "写入异常: " + e.getMessage()); "FAILED", "写入异常: " + e.getMessage());
} }