2
This commit is contained in:
@@ -424,9 +424,127 @@ public class JDOrderController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 文本替换:将文本中的URL替换为包含礼金的推广链接
|
||||
* 入参:{ content, skuId/materialUrl, amount, quantity, owner, skuName }
|
||||
* 注意:batchSize会根据文本中解析出的URL数量自动计算
|
||||
* 从文案中提取u.jd链接并查询商品信息
|
||||
* 入参:{ content }
|
||||
* 返回:商品信息列表
|
||||
*/
|
||||
@PostMapping("/extractUrlsAndQueryProducts")
|
||||
public AjaxResult extractUrlsAndQueryProducts(@RequestBody Map<String, Object> body) {
|
||||
try {
|
||||
String content = (String) body.get("content");
|
||||
if (content == null || content.trim().isEmpty()) {
|
||||
return AjaxResult.error("content is required");
|
||||
}
|
||||
|
||||
logger.info("提取URL并查询商品 - content长度={}", content.length());
|
||||
|
||||
// 提取文本中的所有u.jd链接
|
||||
java.util.List<String> urls = new java.util.ArrayList<>();
|
||||
java.util.regex.Pattern urlPattern = java.util.regex.Pattern.compile(
|
||||
"(?:https?://)?u\\.jd\\.com/[^\\s]+",
|
||||
java.util.regex.Pattern.CASE_INSENSITIVE);
|
||||
java.util.regex.Matcher matcher = urlPattern.matcher(content);
|
||||
|
||||
while (matcher.find()) {
|
||||
String url = matcher.group(0);
|
||||
if (url != null && !url.trim().isEmpty()) {
|
||||
// 如果没有协议,添加https://
|
||||
String fullUrl = url.trim();
|
||||
if (!fullUrl.startsWith("http://") && !fullUrl.startsWith("https://")) {
|
||||
fullUrl = "https://" + fullUrl;
|
||||
}
|
||||
urls.add(fullUrl);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("提取URL并查询商品 - 提取到{}个u.jd链接", urls.size());
|
||||
|
||||
if (urls.isEmpty()) {
|
||||
return AjaxResult.success(new JSONObject()
|
||||
.fluentPut("products", new JSONArray())
|
||||
.fluentPut("urls", new JSONArray())
|
||||
.fluentPut("message", "未找到u.jd链接"));
|
||||
}
|
||||
|
||||
// 去重
|
||||
java.util.Set<String> uniqueUrls = new java.util.LinkedHashSet<>(urls);
|
||||
urls = new java.util.ArrayList<>(uniqueUrls);
|
||||
|
||||
// 为每个URL查询商品信息
|
||||
JSONArray products = new JSONArray();
|
||||
for (String url : urls) {
|
||||
try {
|
||||
logger.info("查询商品信息 - URL: {}", url);
|
||||
String queryUrl = requestUrl + "generatePromotionContent";
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("skey", skey);
|
||||
param.put("promotionContent", url);
|
||||
|
||||
String result = HttpUtils.sendJsonPost(queryUrl, param.toJSONString());
|
||||
logger.debug("商品查询响应: {}", result);
|
||||
|
||||
try {
|
||||
Object parsed = JSON.parse(result);
|
||||
if (parsed instanceof JSONArray) {
|
||||
JSONArray arr = (JSONArray) parsed;
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
JSONObject product = arr.getJSONObject(i);
|
||||
if (product != null) {
|
||||
product.put("originalUrl", url); // 保存原始URL
|
||||
products.add(product);
|
||||
}
|
||||
}
|
||||
} else if (parsed instanceof JSONObject) {
|
||||
JSONObject obj = (JSONObject) parsed;
|
||||
if (obj.get("list") instanceof JSONArray) {
|
||||
JSONArray list = obj.getJSONArray("list");
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
JSONObject product = list.getJSONObject(i);
|
||||
if (product != null) {
|
||||
product.put("originalUrl", url);
|
||||
products.add(product);
|
||||
}
|
||||
}
|
||||
} else if (obj.get("data") instanceof JSONArray) {
|
||||
JSONArray data = obj.getJSONArray("data");
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
JSONObject product = data.getJSONObject(i);
|
||||
if (product != null) {
|
||||
product.put("originalUrl", url);
|
||||
products.add(product);
|
||||
}
|
||||
}
|
||||
} else if (obj.containsKey("materialUrl") || obj.containsKey("skuName")) {
|
||||
obj.put("originalUrl", url);
|
||||
products.add(obj);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("解析商品信息失败 - URL: {}, error: {}", url, e.getMessage());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("查询商品信息异常 - URL: {}", url, e);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("提取URL并查询商品完成 - 找到{}个商品", products.size());
|
||||
|
||||
JSONObject response = new JSONObject();
|
||||
response.put("products", products);
|
||||
response.put("urls", urls);
|
||||
response.put("totalUrls", urls.size());
|
||||
response.put("totalProducts", products.size());
|
||||
|
||||
return AjaxResult.success(response);
|
||||
} catch (Exception e) {
|
||||
logger.error("提取URL并查询商品异常", e);
|
||||
return AjaxResult.error("提取URL并查询商品失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 文本替换:根据选中的商品创建礼金并替换文案中的URL
|
||||
* 入参:{ content, selectedProducts: [{skuId/materialUrl, amount, quantity, owner, skuName, originalUrl}], ... }
|
||||
* 返回:替换后的文本和礼金信息
|
||||
*/
|
||||
@PostMapping("/replaceUrlsWithGiftCoupons")
|
||||
|
||||
Reference in New Issue
Block a user