1
This commit is contained in:
@@ -69,6 +69,7 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
// 2. 从Redis获取文档配置
|
// 2. 从Redis获取文档配置
|
||||||
String fileId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "fileId");
|
String fileId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "fileId");
|
||||||
String sheetId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "sheetId");
|
String sheetId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "sheetId");
|
||||||
|
Integer startRow = redisCache.getCacheObject(REDIS_KEY_PREFIX + "startRow");
|
||||||
|
|
||||||
// 如果Redis中没有,则使用配置文件中的默认值
|
// 如果Redis中没有,则使用配置文件中的默认值
|
||||||
if (fileId == null || fileId.isEmpty()) {
|
if (fileId == null || fileId.isEmpty()) {
|
||||||
@@ -77,11 +78,15 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
if (sheetId == null || sheetId.isEmpty()) {
|
if (sheetId == null || sheetId.isEmpty()) {
|
||||||
sheetId = tencentDocConfig.getSheetId();
|
sheetId = tencentDocConfig.getSheetId();
|
||||||
}
|
}
|
||||||
|
if (startRow == null) {
|
||||||
|
startRow = tencentDocConfig.getStartRow();
|
||||||
|
}
|
||||||
|
|
||||||
config.put("hasAccessToken", hasAccessToken);
|
config.put("hasAccessToken", hasAccessToken);
|
||||||
config.put("accessTokenStatus", accessTokenStatus);
|
config.put("accessTokenStatus", accessTokenStatus);
|
||||||
config.put("fileId", fileId);
|
config.put("fileId", fileId);
|
||||||
config.put("sheetId", sheetId);
|
config.put("sheetId", sheetId);
|
||||||
|
config.put("startRow", startRow);
|
||||||
config.put("appId", tencentDocConfig.getAppId());
|
config.put("appId", tencentDocConfig.getAppId());
|
||||||
config.put("apiBaseUrl", tencentDocConfig.getApiBaseUrl());
|
config.put("apiBaseUrl", tencentDocConfig.getApiBaseUrl());
|
||||||
|
|
||||||
@@ -111,7 +116,7 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
* 更新配置(保存到Redis,180天有效期)
|
* 更新配置(保存到Redis,180天有效期)
|
||||||
* 注意:accessToken 由系统自动管理,无需手动配置
|
* 注意:accessToken 由系统自动管理,无需手动配置
|
||||||
*
|
*
|
||||||
* @param params 包含 fileId, sheetId
|
* @param params 包含 fileId, sheetId, startRow
|
||||||
*/
|
*/
|
||||||
@Log(title = "腾讯文档配置", businessType = BusinessType.UPDATE)
|
@Log(title = "腾讯文档配置", businessType = BusinessType.UPDATE)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@@ -119,6 +124,7 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
try {
|
try {
|
||||||
String fileId = params.getString("fileId");
|
String fileId = params.getString("fileId");
|
||||||
String sheetId = params.getString("sheetId");
|
String sheetId = params.getString("sheetId");
|
||||||
|
Integer startRow = params.getInteger("startRow");
|
||||||
|
|
||||||
// 验证必填字段
|
// 验证必填字段
|
||||||
if (fileId == null || fileId.trim().isEmpty()) {
|
if (fileId == null || fileId.trim().isEmpty()) {
|
||||||
@@ -128,6 +134,11 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
return AjaxResult.error("工作表ID不能为空");
|
return AjaxResult.error("工作表ID不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// startRow默认值为3
|
||||||
|
if (startRow == null || startRow < 1) {
|
||||||
|
startRow = 3;
|
||||||
|
}
|
||||||
|
|
||||||
// 检查是否已授权
|
// 检查是否已授权
|
||||||
boolean hasAccessToken = false;
|
boolean hasAccessToken = false;
|
||||||
try {
|
try {
|
||||||
@@ -144,18 +155,22 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
// 保存到Redis(180天有效期)
|
// 保存到Redis(180天有效期)
|
||||||
redisCache.setCacheObject(REDIS_KEY_PREFIX + "fileId", fileId.trim(), 180, TimeUnit.DAYS);
|
redisCache.setCacheObject(REDIS_KEY_PREFIX + "fileId", fileId.trim(), 180, TimeUnit.DAYS);
|
||||||
redisCache.setCacheObject(REDIS_KEY_PREFIX + "sheetId", sheetId.trim(), 180, TimeUnit.DAYS);
|
redisCache.setCacheObject(REDIS_KEY_PREFIX + "sheetId", sheetId.trim(), 180, TimeUnit.DAYS);
|
||||||
|
redisCache.setCacheObject(REDIS_KEY_PREFIX + "startRow", startRow, 180, TimeUnit.DAYS);
|
||||||
|
|
||||||
// 同时更新TencentDocConfig对象(内存中)
|
// 同时更新TencentDocConfig对象(内存中)
|
||||||
tencentDocConfig.setFileId(fileId.trim());
|
tencentDocConfig.setFileId(fileId.trim());
|
||||||
tencentDocConfig.setSheetId(sheetId.trim());
|
tencentDocConfig.setSheetId(sheetId.trim());
|
||||||
|
tencentDocConfig.setStartRow(startRow);
|
||||||
|
|
||||||
log.info("H-TF订单自动写入配置已更新 - fileId: {}, sheetId: {}", fileId.trim(), sheetId.trim());
|
log.info("H-TF订单自动写入配置已更新 - fileId: {}, sheetId: {}, startRow: {}",
|
||||||
|
fileId.trim(), sheetId.trim(), startRow);
|
||||||
|
|
||||||
JSONObject result = new JSONObject();
|
JSONObject result = new JSONObject();
|
||||||
result.put("message", "配置更新成功,已保存到Redis(180天有效期)");
|
result.put("message", "配置更新成功,已保存到Redis(180天有效期)");
|
||||||
result.put("fileId", fileId.trim());
|
result.put("fileId", fileId.trim());
|
||||||
result.put("sheetId", sheetId.trim());
|
result.put("sheetId", sheetId.trim());
|
||||||
result.put("hint", "现在录入分销标识为 H-TF 的订单时,将自动追加到此腾讯文档");
|
result.put("startRow", startRow);
|
||||||
|
result.put("hint", "现在录入分销标识为 H-TF 的订单时,将自动追加到此腾讯文档(从第" + startRow + "行开始匹配)");
|
||||||
|
|
||||||
return AjaxResult.success("配置更新成功", result);
|
return AjaxResult.success("配置更新成功", result);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -225,6 +240,7 @@ public class TencentDocConfigController extends BaseController {
|
|||||||
try {
|
try {
|
||||||
redisCache.deleteObject(REDIS_KEY_PREFIX + "fileId");
|
redisCache.deleteObject(REDIS_KEY_PREFIX + "fileId");
|
||||||
redisCache.deleteObject(REDIS_KEY_PREFIX + "sheetId");
|
redisCache.deleteObject(REDIS_KEY_PREFIX + "sheetId");
|
||||||
|
redisCache.deleteObject(REDIS_KEY_PREFIX + "startRow");
|
||||||
|
|
||||||
log.info("H-TF订单自动写入配置已清除");
|
log.info("H-TF订单自动写入配置已清除");
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ public class TencentDocConfig {
|
|||||||
/** 工作表ID(H-TF订单的目标工作表ID) */
|
/** 工作表ID(H-TF订单的目标工作表ID) */
|
||||||
private String sheetId;
|
private String sheetId;
|
||||||
|
|
||||||
|
/** 起始行号(从第几行开始搜索匹配单号,默认为3,即第3行开始为数据行) */
|
||||||
|
private Integer startRow = 3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配置初始化后验证
|
* 配置初始化后验证
|
||||||
*/
|
*/
|
||||||
@@ -150,5 +153,13 @@ public class TencentDocConfig {
|
|||||||
public void setSheetId(String sheetId) {
|
public void setSheetId(String sheetId) {
|
||||||
this.sheetId = sheetId;
|
this.sheetId = sheetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getStartRow() {
|
||||||
|
return startRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartRow(Integer startRow) {
|
||||||
|
this.startRow = startRow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public interface ITencentDocService {
|
|||||||
* @param order 订单信息
|
* @param order 订单信息
|
||||||
* @return 上传结果
|
* @return 上传结果
|
||||||
*/
|
*/
|
||||||
JSONObject appendLogisticsToSheet(String accessToken, String fileId, String sheetId, JDOrder order);
|
JSONObject appendLogisticsToSheet(String accessToken, String fileId, String sheetId, Integer startRow, JDOrder order);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取表格数据
|
* 读取表格数据
|
||||||
|
|||||||
@@ -1664,9 +1664,10 @@ private String handleTF(String input) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 从Redis获取文档配置(fileId 和 sheetId)
|
// 2. 从Redis获取文档配置(fileId、sheetId 和 startRow)
|
||||||
String fileId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "fileId");
|
String fileId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "fileId");
|
||||||
String sheetId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "sheetId");
|
String sheetId = redisCache.getCacheObject(REDIS_KEY_PREFIX + "sheetId");
|
||||||
|
Integer startRow = redisCache.getCacheObject(REDIS_KEY_PREFIX + "startRow");
|
||||||
|
|
||||||
// 如果Redis中没有,则使用配置文件中的默认值
|
// 如果Redis中没有,则使用配置文件中的默认值
|
||||||
if (fileId == null || fileId.isEmpty()) {
|
if (fileId == null || fileId.isEmpty()) {
|
||||||
@@ -1675,19 +1676,23 @@ private String handleTF(String input) {
|
|||||||
if (sheetId == null || sheetId.isEmpty()) {
|
if (sheetId == null || sheetId.isEmpty()) {
|
||||||
sheetId = tencentDocConfig.getSheetId();
|
sheetId = tencentDocConfig.getSheetId();
|
||||||
}
|
}
|
||||||
|
if (startRow == null) {
|
||||||
|
startRow = tencentDocConfig.getStartRow();
|
||||||
|
}
|
||||||
|
|
||||||
// 3. 验证配置是否完整
|
// 3. 验证配置是否完整
|
||||||
if (fileId == null || fileId.isEmpty() || sheetId == null || sheetId.isEmpty()) {
|
if (fileId == null || fileId.isEmpty() || sheetId == null || sheetId.isEmpty()) {
|
||||||
System.err.println("✗ H-TF订单文档配置不完整,跳过自动写入。" +
|
System.err.println("✗ H-TF订单文档配置不完整,跳过自动写入。" +
|
||||||
"\n 提示:请通过 POST /jarvis/tencentDoc/config 接口配置文档ID和工作表ID" +
|
"\n 提示:请通过 POST /jarvis/tencentDoc/config 接口配置文档ID和工作表ID" +
|
||||||
"\n fileId: " + (fileId != null && !fileId.isEmpty() ? fileId : "未配置") +
|
"\n fileId: " + (fileId != null && !fileId.isEmpty() ? fileId : "未配置") +
|
||||||
"\n sheetId: " + (sheetId != null && !sheetId.isEmpty() ? sheetId : "未配置"));
|
"\n sheetId: " + (sheetId != null && !sheetId.isEmpty() ? sheetId : "未配置") +
|
||||||
|
"\n startRow: " + (startRow != null ? startRow : "默认3"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 调用腾讯文档服务追加订单数据
|
// 4. 调用腾讯文档服务追加订单数据
|
||||||
com.alibaba.fastjson2.JSONObject result = tencentDocService.appendLogisticsToSheet(
|
com.alibaba.fastjson2.JSONObject result = tencentDocService.appendLogisticsToSheet(
|
||||||
accessToken, fileId, sheetId, order);
|
accessToken, fileId, sheetId, startRow, order);
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
System.out.println("✓ H-TF订单已自动追加到腾讯文档" +
|
System.out.println("✓ H-TF订单已自动追加到腾讯文档" +
|
||||||
|
|||||||
@@ -168,12 +168,17 @@ public class TencentDocServiceImpl implements ITencentDocService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject appendLogisticsToSheet(String accessToken, String fileId, String sheetId, JDOrder order) {
|
public JSONObject appendLogisticsToSheet(String accessToken, String fileId, String sheetId, Integer startRow, JDOrder order) {
|
||||||
try {
|
try {
|
||||||
if (order == null) {
|
if (order == null) {
|
||||||
throw new IllegalArgumentException("订单信息不能为空");
|
throw new IllegalArgumentException("订单信息不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// startRow 参数用于标识从第几行开始是数据行(预留给未来的搜索匹配功能)
|
||||||
|
// 当前使用 append 方式追加数据,暂不使用 startRow
|
||||||
|
log.debug("追加订单到腾讯文档 - fileId: {}, sheetId: {}, startRow配置: {}, 订单: {}",
|
||||||
|
fileId, sheetId, startRow, order.getRemark());
|
||||||
|
|
||||||
// 获取用户信息(包含Open-Id)
|
// 获取用户信息(包含Open-Id)
|
||||||
// 官方响应格式:{ "ret": 0, "msg": "Succeed", "data": { "openID": "xxx", ... } }
|
// 官方响应格式:{ "ret": 0, "msg": "Succeed", "data": { "openID": "xxx", ... } }
|
||||||
JSONObject userInfo = TencentDocApiUtil.getUserInfo(accessToken);
|
JSONObject userInfo = TencentDocApiUtil.getUserInfo(accessToken);
|
||||||
|
|||||||
Reference in New Issue
Block a user