|
|
@@ -238,6 +238,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
private static final String STORE_MALL_FUNC = "store_mall_func";
|
|
|
/** 字典 dict_sort=1:是否展示直播中奖订单 */
|
|
|
private static final long DICT_SORT_SHOW_LIVE_LOTTERY_ORDER = 1L;
|
|
|
+ /** 字典 dict_sort=3:是否发送到货通知 */
|
|
|
+ private static final long DICT_SORT_SEND_ARRIVAL_NOTICE = 3L;
|
|
|
|
|
|
Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
@Autowired
|
|
|
@@ -538,6 +540,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
|
|
|
/** 同一企微账号 + 外部联系人,一天内只发一次支付成功消息 */
|
|
|
private static final String PAY_SUCCESS_MSG_CONTACT_REDIS_KEY = "fs:pay:success:msg:contact:";
|
|
|
+ private static final String ARRIVAL_NOTICE_MSG_REDIS_KEY = "fs:arrival:notice:msg:send:";
|
|
|
@PostConstruct
|
|
|
public void initErpServiceMap() {
|
|
|
erpServiceMap = new HashMap<>();
|
|
|
@@ -2946,6 +2949,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
.templateType(TemplateListenEnum.TYPE_3.getValue())
|
|
|
.build();
|
|
|
publisher.publishEvent(new TemplateEvent(this, templateBean));
|
|
|
+
|
|
|
+ // 到货通知:开关开启时异步推送企微消息
|
|
|
+ final Long arrivalNoticeOrderId = order.getId();
|
|
|
+ CompletableFuture.runAsync(() -> sendExpressInfoToWx(arrivalNoticeOrderId));
|
|
|
+
|
|
|
return R.ok("操作成功");
|
|
|
} else {
|
|
|
return R.error("非法操作");
|
|
|
@@ -7826,6 +7834,56 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private String buildArrivalNoticeContent(FsStoreOrderScrm order) {
|
|
|
+ String productName = resolveOrderProductNames(order);
|
|
|
+ if (StringUtils.isBlank(productName)) {
|
|
|
+ productName = "商品";
|
|
|
+ }
|
|
|
+ String deliveryId = StringUtils.isNotBlank(order.getDeliveryId()) ? order.getDeliveryId() : "";
|
|
|
+ return "您好,您的包裹【" + productName + "】已签收,请及时确认收货;\n"
|
|
|
+ + " 物流单号为:" + deliveryId + "\n"
|
|
|
+ + "\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39";
|
|
|
+ }
|
|
|
+
|
|
|
+ private String resolveOrderProductNames(FsStoreOrderScrm order) {
|
|
|
+ if (order == null || StringUtils.isBlank(order.getItemJson())) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ com.alibaba.fastjson.JSONArray itemArray = JSON.parseArray(order.getItemJson());
|
|
|
+ if (itemArray == null || itemArray.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<String> names = new ArrayList<>();
|
|
|
+ for (int i = 0; i < itemArray.size(); i++) {
|
|
|
+ JSONObject item = itemArray.getJSONObject(i);
|
|
|
+ if (item == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String name = item.getString("productName");
|
|
|
+ if (StringUtils.isBlank(name) && StringUtils.isNotBlank(item.getString("jsonInfo"))) {
|
|
|
+ JSONObject jsonInfo = JSON.parseObject(item.getString("jsonInfo"));
|
|
|
+ if (jsonInfo != null) {
|
|
|
+ name = jsonInfo.getString("productName");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(name) && !names.contains(name)) {
|
|
|
+ names.add(name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (names.isEmpty()) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return String.join("、", names);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("解析订单商品名失败, orderId={}, error={}", order.getId(), e.getMessage());
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 支付成功后向用户发送感谢文案及配图(Redis 去重,防止支付回调重试重复发送)。
|
|
|
*/
|
|
|
@@ -8021,42 +8079,26 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
|
|
|
case 1:
|
|
|
break;
|
|
|
case 2:
|
|
|
- sBuilder.append("您好,您有一个包裹正在准备发货,请耐心等待;\n");
|
|
|
+ String shipProductName = resolveOrderProductNames(order);
|
|
|
+ if (StringUtils.isBlank(shipProductName)) {
|
|
|
+ shipProductName = "商品";
|
|
|
+ }
|
|
|
+ sBuilder.append("您好,您的包裹【").append(shipProductName).append("】正在准备发货,请耐心等待;\n");
|
|
|
if (order.getDeliveryId() != null && !order.getDeliveryId().isEmpty()) {
|
|
|
sBuilder.append(" 物流单号为:").append(order.getDeliveryId()).append("\n");
|
|
|
}
|
|
|
sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
break;
|
|
|
case 3:
|
|
|
- String lastFourNumber = "";
|
|
|
- if (order.getDeliverySn().equals(ShipperCodeEnum.SF.getValue()) || order.getDeliverySn().equals(ShipperCodeEnum.ZTO.getValue())) {
|
|
|
- if("恒春来".equals(cloudHostProper.getCompanyName())
|
|
|
- && ObjectUtil.isNotEmpty(lastFourNumber = order.getVirtualPhone())){
|
|
|
- if (lastFourNumber.contains("-")) {
|
|
|
- lastFourNumber = lastFourNumber.length() >= 4 ? lastFourNumber.substring(lastFourNumber.length() - 4) : lastFourNumber;
|
|
|
- }else{
|
|
|
- lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
|
|
- }
|
|
|
- }
|
|
|
- // 原逻辑
|
|
|
- else if ((lastFourNumber = order.getUserPhone()).length() == 11) {
|
|
|
- lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
|
|
|
- }
|
|
|
+ String productNamess = resolveOrderProductNames(order);
|
|
|
+ if (StringUtils.isBlank(productNamess)) {
|
|
|
+ productNamess = "商品";
|
|
|
}
|
|
|
- ExpressInfoDTO express = expressService.getExpressInfo(order.getOrderCode(), order.getDeliverySn(), order.getDeliveryId(), lastFourNumber);
|
|
|
- if (express != null && "211".equals(express.getStateEx())) {
|
|
|
- sBuilder.append("这边查询到您有一个包裹 ");
|
|
|
- if (express.getTraces() != null && !express.getTraces().isEmpty()) {
|
|
|
- List<com.fs.hisStore.dto.TracesDTO> traces = express.getTraces();
|
|
|
- TracesDTO tracesDTO = traces.get(traces.size() - 1);
|
|
|
- sBuilder.append(" 在").append(tracesDTO.getAcceptTime()).append("已经送到了\n");
|
|
|
- sBuilder.append(" 物流单号为:").append(order.getDeliveryId()).append("\n");
|
|
|
- sBuilder.append("物流信息:").append(tracesDTO.getAcceptStation()).append("\n");
|
|
|
- } else {
|
|
|
- sBuilder.append(" 已经送到了\n");
|
|
|
- }
|
|
|
- sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
+ sBuilder.append("您好,您的包裹【").append(productNamess).append("】已签收,请及时确认收货;\n");
|
|
|
+ if (order.getDeliveryId() != null && !order.getDeliveryId().isEmpty()) {
|
|
|
+ sBuilder.append(" 物流单号为:").append(order.getDeliveryId()).append("\n");
|
|
|
}
|
|
|
+ sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
|
|
|
break;
|
|
|
case 4:
|
|
|
case 5:
|