1
This commit is contained in:
@@ -15,6 +15,7 @@ import com.jd.open.api.sdk.domain.kplunion.GoodsService.request.query.BigFieldGo
|
|||||||
import com.jd.open.api.sdk.domain.kplunion.GoodsService.request.query.GoodsReq;
|
import com.jd.open.api.sdk.domain.kplunion.GoodsService.request.query.GoodsReq;
|
||||||
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.BigfieldQueryResult;
|
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.BigfieldQueryResult;
|
||||||
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.GoodsQueryResult;
|
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.GoodsQueryResult;
|
||||||
|
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.UrlInfo;
|
||||||
import com.jd.open.api.sdk.domain.kplunion.OrderService.request.query.OrderRowReq;
|
import com.jd.open.api.sdk.domain.kplunion.OrderService.request.query.OrderRowReq;
|
||||||
import com.jd.open.api.sdk.domain.kplunion.promotionbysubunioni.PromotionService.request.get.PromotionCodeReq;
|
import com.jd.open.api.sdk.domain.kplunion.promotionbysubunioni.PromotionService.request.get.PromotionCodeReq;
|
||||||
import com.jd.open.api.sdk.request.kplunion.*;
|
import com.jd.open.api.sdk.request.kplunion.*;
|
||||||
@@ -640,10 +641,11 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
wxUtil.sendTextMessage(fromWxid, "请输入推广文案(包含商品链接):", 1, fromWxid);
|
wxUtil.sendTextMessage(fromWxid, "请输入推广文案(包含商品链接):", 1, fromWxid);
|
||||||
logger.info("进入转链流程 - 文案输入步骤");
|
logger.info("进入转链流程 - 文案输入步骤");
|
||||||
} else if ("礼金".equals(message)) {
|
} else if ("礼金".equals(message)) {
|
||||||
state.setCurrentState(GIFT_MONEY_FLOW);
|
state.setCurrentState(UserInteractionState.ProcessState.PRODUCT_PROMOTION);
|
||||||
state.setCurrentStep(STEP_PRODUCT_LINK);
|
state.setCurrentField("content");
|
||||||
wxUtil.sendTextMessage(fromWxid, "请输入商品链接:", 1, fromWxid);
|
wxUtil.sendTextMessage(fromWxid, "请输入推广文案(包含商品链接):", 1, fromWxid);
|
||||||
logger.info("进入礼金开通流程 - 商品链接步骤");
|
logger.info("进入转链流程 - 文案输入步骤");
|
||||||
|
|
||||||
} else if ("登记".equals(message)) {
|
} else if ("登记".equals(message)) {
|
||||||
state.setCurrentState(DISINFECTANT_CABINET);
|
state.setCurrentState(DISINFECTANT_CABINET);
|
||||||
state.setCurrentField("orderId");
|
state.setCurrentField("orderId");
|
||||||
@@ -654,31 +656,31 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
|
|
||||||
case PRODUCT_PROMOTION:
|
case PRODUCT_PROMOTION:
|
||||||
if ("content".equals(state.getCurrentField())) {
|
if ("content".equals(state.getCurrentField())) {
|
||||||
// 第一次输入文案
|
// 第一次输入文案,直接生成内容
|
||||||
state.getCollectedFields().put("content", message);
|
List<String> messages = generatePromotionContent(message); // 不需要图片和SKU名称
|
||||||
state.setCurrentField("option");
|
for (String s : messages) {
|
||||||
wxUtil.sendTextMessage(fromWxid, "请选择操作:\n回复 1 - 需要图片和 SKU 名称\n回复 2 - 仅进行转链", 1, fromWxid);
|
wxUtil.sendTextMessage(fromWxid, s , 1, fromWxid);
|
||||||
logger.info("转链流程 - 等待用户选择操作");
|
|
||||||
} else if ("option".equals(state.getCurrentField())) {
|
|
||||||
// 第二次选择操作
|
|
||||||
if ("1".equals(message)) {
|
|
||||||
// 需要图片和 SKU 名称
|
|
||||||
String content = state.getCollectedFields().get("content");
|
|
||||||
String result = generatePromotionContent(content, true);
|
|
||||||
wxUtil.sendTextMessage(fromWxid, "处理结果:\n" + result, 1, fromWxid);
|
|
||||||
state.reset();
|
|
||||||
} else if ("2".equals(message)) {
|
|
||||||
// 仅进行转链
|
|
||||||
String content = state.getCollectedFields().get("content");
|
|
||||||
String result = generatePromotionContent(content, false);
|
|
||||||
wxUtil.sendTextMessage(fromWxid, "处理结果:\n" + result, 1, fromWxid);
|
|
||||||
state.reset();
|
|
||||||
} else {
|
|
||||||
wxUtil.sendTextMessage(fromWxid, "无效的选择,请重新输入:\n回复 1 - 需要图片和 SKU 名称\n回复 2 - 仅进行转链", 1, fromWxid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 询问是否需要继续转链
|
||||||
|
state.setCurrentField("confirm");
|
||||||
|
wxUtil.sendTextMessage(fromWxid, "是否需要继续进行转链?\n回复 1 - 是\n回复 2 - 否", 1, fromWxid);
|
||||||
|
logger.info("转链流程 - 等待用户确认是否继续转链");
|
||||||
|
} else if ("confirm".equals(state.getCurrentField())) {
|
||||||
|
if ("1".equals(message)) {
|
||||||
|
// 继续转链逻辑
|
||||||
|
String transferredContent = transferContentWithLinks(message);
|
||||||
|
wxUtil.sendTextMessage(fromWxid, "转链完成:\n" + transferredContent, 1, fromWxid);
|
||||||
|
} else if ("2".equals(message)) {
|
||||||
|
wxUtil.sendTextMessage(fromWxid, "转链流程已取消", 1, fromWxid);
|
||||||
|
} else {
|
||||||
|
wxUtil.sendTextMessage(fromWxid, "无效的选择,请重新输入:\n回复 1 - 是\n回复 2 - 否", 1, fromWxid);
|
||||||
|
}
|
||||||
|
state.reset(); // 重置状态
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case GIFT_MONEY_FLOW:
|
case GIFT_MONEY_FLOW:
|
||||||
handleGiftMoneyFlow(fromWxid, message, state);
|
handleGiftMoneyFlow(fromWxid, message, state);
|
||||||
break;
|
break;
|
||||||
@@ -701,7 +703,25 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
logger.error("Error saving interaction state: {}", e.getMessage());
|
logger.error("Error saving interaction state: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 新增方法:处理文案中的链接并进行转链
|
||||||
|
private String transferContentWithLinks(String message) {
|
||||||
|
List<String> urls = extractUJDUrls(message);
|
||||||
|
if (urls.isEmpty()) {
|
||||||
|
return "文案中未找到有效的商品链接,请检查格式是否正确。\n" + message;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder enrichedContent = new StringBuilder();
|
||||||
|
for (String url : urls) {
|
||||||
|
String transferUrl = transfer(url);
|
||||||
|
if (transferUrl != null) {
|
||||||
|
enrichedContent.append("原链接:").append(url).append("\n")
|
||||||
|
.append("转链后链接:").append(transferUrl).append("\n");
|
||||||
|
} else {
|
||||||
|
enrichedContent.append("链接转链失败:").append(url).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return enrichedContent.toString();
|
||||||
|
}
|
||||||
|
|
||||||
// 新增礼金流程处理方法
|
// 新增礼金流程处理方法
|
||||||
private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) {
|
private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) {
|
||||||
@@ -813,11 +833,13 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
* @param message 文案内容,包含商品链接
|
* @param message 文案内容,包含商品链接
|
||||||
* @return 处理后的文案,附带商品信息
|
* @return 处理后的文案,附带商品信息
|
||||||
*/
|
*/
|
||||||
public String generatePromotionContent(String message, Boolean needImagesAndSkuName) {
|
public List<String> generatePromotionContent(String message) {
|
||||||
|
List<String> results = new ArrayList<>();
|
||||||
// 提取文案中的所有 u.jd.com 链接
|
// 提取文案中的所有 u.jd.com 链接
|
||||||
List<String> urls = extractUJDUrls(message);
|
List<String> urls = extractUJDUrls(message);
|
||||||
if (urls.isEmpty()) {
|
if (urls.isEmpty()) {
|
||||||
return "文案中未找到有效的商品链接,请检查格式是否正确。\n" + message;
|
results.add("文案中未找到有效的商品链接,请检查格式是否正确。");
|
||||||
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1059,25 +1081,23 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
* */
|
* */
|
||||||
|
|
||||||
// 如果需要图片和SKU名称,则代表要把图片下载发过去,还有对应的skuName
|
// 如果需要图片和SKU名称,则代表要把图片下载发过去,还有对应的skuName
|
||||||
StringBuilder enrichedContent = new StringBuilder();
|
StringBuilder couponInfo = new StringBuilder();
|
||||||
ArrayList<HashMap<String, String>> resultList = new ArrayList<>();
|
ArrayList<HashMap<String, String>> resultList = new ArrayList<>();
|
||||||
for (String url : urls) {
|
for (String url : urls) {
|
||||||
try {
|
try {
|
||||||
// 查询商品信息
|
// 查询商品信息
|
||||||
GoodsQueryResult productInfo = queryProductInfoByUJDUrl(url);
|
GoodsQueryResult productInfo = queryProductInfoByUJDUrl(url);
|
||||||
if (productInfo == null || productInfo.getCode() != 200) {
|
if (productInfo == null || productInfo.getCode() != 200) {
|
||||||
enrichedContent.append("商品链接查询失败:").append(url).append("\n");
|
couponInfo.append("链接查询失败:").append(url).append("\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
long totalCount = productInfo.getTotalCount();
|
long totalCount = productInfo.getTotalCount();
|
||||||
HashMap<String, String> itemMap = new HashMap<>();
|
couponInfo.append("链接查询成功:\n").append(" ").append(url).append("\n");
|
||||||
itemMap.put("url", url);
|
|
||||||
|
|
||||||
if (totalCount == 0) {
|
if (totalCount == 0) {
|
||||||
itemMap.put("type", "coupon");
|
couponInfo.append("链接类型:优惠券");
|
||||||
} else {
|
} else {
|
||||||
itemMap.put("type", "goods");
|
couponInfo.append("链接类型:商品");
|
||||||
//itemMap.put("data", JSONObject.toJSONString(productInfo.getData()));
|
|
||||||
|
|
||||||
//"materialUrl": "jingfen.jd.com/detail/BsrqLq5CfIziE7BSl3ItPp8q_3DFaNVYJqfkRRLc7HR.html",
|
//"materialUrl": "jingfen.jd.com/detail/BsrqLq5CfIziE7BSl3ItPp8q_3DFaNVYJqfkRRLc7HR.html",
|
||||||
//"oriItemId": "BMrqLq5CfIz9X04KC3ItPp8q_3DFaNVYJqfkRRLc7HR",
|
//"oriItemId": "BMrqLq5CfIz9X04KC3ItPp8q_3DFaNVYJqfkRRLc7HR",
|
||||||
@@ -1090,6 +1110,8 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
//},
|
//},
|
||||||
//"skuName": "松下(Panasonic)白月光4.0Ultra 洗烘套装 10kg滚筒洗衣机+变频热泵烘干机 除毛升级2.0 水氧SPA护理 8532N+8532NR",
|
//"skuName": "松下(Panasonic)白月光4.0Ultra 洗烘套装 10kg滚筒洗衣机+变频热泵烘干机 除毛升级2.0 水氧SPA护理 8532N+8532NR",
|
||||||
//"spuid": 100137629936,
|
//"spuid": 100137629936,
|
||||||
|
|
||||||
|
HashMap<String, String> itemMap = new HashMap<>();
|
||||||
itemMap.put("materialUrl", productInfo.getData()[0].getMaterialUrl());
|
itemMap.put("materialUrl", productInfo.getData()[0].getMaterialUrl());
|
||||||
itemMap.put("oriItemId", productInfo.getData()[0].getOriItemId());
|
itemMap.put("oriItemId", productInfo.getData()[0].getOriItemId());
|
||||||
itemMap.put("owner", productInfo.getData()[0].getOwner());
|
itemMap.put("owner", productInfo.getData()[0].getOwner());
|
||||||
@@ -1097,32 +1119,37 @@ private void handleUserInteraction(String fromWxid, String message) {
|
|||||||
itemMap.put("shopName", productInfo.getData()[0].getShopInfo().getShopName());
|
itemMap.put("shopName", productInfo.getData()[0].getShopInfo().getShopName());
|
||||||
itemMap.put("skuName", productInfo.getData()[0].getSkuName());
|
itemMap.put("skuName", productInfo.getData()[0].getSkuName());
|
||||||
itemMap.put("spuid", String.valueOf(productInfo.getData()[0].getSpuid()));
|
itemMap.put("spuid", String.valueOf(productInfo.getData()[0].getSpuid()));
|
||||||
|
couponInfo.append("商品信息:\n");
|
||||||
|
for (HashMap.Entry<String, String> entry : itemMap.entrySet()) {
|
||||||
|
couponInfo.append(" ").append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
|
||||||
|
}
|
||||||
|
StringBuilder images = new StringBuilder();
|
||||||
|
if (productInfo.getData()[0].getImageInfo() != null) {
|
||||||
|
images.append(" ").append("图片信息:\n");
|
||||||
|
for (UrlInfo image : productInfo.getData()[0].getImageInfo().getImageList()) {
|
||||||
|
images.append(" ").append(image.getUrl()).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
results.add(String.valueOf(images));
|
||||||
|
|
||||||
}
|
}
|
||||||
resultList.add(itemMap);
|
results.add(String.valueOf(couponInfo));
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("处理商品链接时发生异常:{}", url, e);
|
logger.error("处理商品链接时发生异常:{}", url, e);
|
||||||
enrichedContent.append("❌ 处理商品链接时发生异常:").append(url).append("\n");
|
couponInfo.append("❌ 处理商品链接时发生异常:").append(url).append("\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (resultList.isEmpty()){
|
StringBuilder wenan = new StringBuilder().append("文案生成: \n");
|
||||||
enrichedContent.append("❌ 处理商品链接时发生异常:").append("\n");
|
// 完成转链后替换链接为u.jd.com链接,文案不修改就返回
|
||||||
return enrichedContent.toString();
|
for (String s : urls) {
|
||||||
}
|
String transferUrl = transfer(s);
|
||||||
if(!needImagesAndSkuName){
|
wenan = new StringBuilder(message.replace(s, transferUrl));
|
||||||
// 完成转链后替换链接为u.jd.com链接,文案不修改就返回
|
|
||||||
for (HashMap<String, String> stringStringHashMap : resultList) {
|
|
||||||
String url = stringStringHashMap.get("url");
|
|
||||||
String transferUrl = transfer(url);
|
|
||||||
stringStringHashMap.put("transferUrl", transferUrl);
|
|
||||||
message = message.replace(url, transferUrl);
|
|
||||||
}
|
}
|
||||||
}
|
results.add(String.valueOf(wenan));
|
||||||
|
|
||||||
//enrichedContent.append("商品推广文案:\n\n").append(message).append("\n\n");
|
return results;
|
||||||
|
|
||||||
|
|
||||||
return enrichedContent.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user