2
This commit is contained in:
@@ -424,9 +424,127 @@ public class JDOrderController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文本替换:将文本中的URL替换为包含礼金的推广链接
|
* 从文案中提取u.jd链接并查询商品信息
|
||||||
* 入参:{ content, skuId/materialUrl, amount, quantity, owner, skuName }
|
* 入参:{ content }
|
||||||
* 注意:batchSize会根据文本中解析出的URL数量自动计算
|
* 返回:商品信息列表
|
||||||
|
*/
|
||||||
|
@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")
|
@PostMapping("/replaceUrlsWithGiftCoupons")
|
||||||
|
|||||||
Reference in New Issue
Block a user