Pārlūkot izejas kodu

红德堂-同步天天外呼代码

Long 2 dienas atpakaļ
vecāks
revīzija
227e69d2aa

+ 5 - 3
fs-store/src/main/java/com/fs/store/controller/common/AppNotifyController.java → fs-company-app/src/main/java/com/fs/app/controller/AppNotifyController.java

@@ -1,4 +1,4 @@
-package com.fs.store.controller.common;
+package com.fs.app.controller;
 
 import cn.hutool.json.JSONUtil;
 import com.fs.call.config.CallApiConfig;
@@ -7,8 +7,10 @@ import com.fs.call.domain.CallResult;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyVoiceApi;
 import com.fs.company.domain.CompanyVoiceLogs;
-import com.fs.company.service.*;
-import com.fs.voice.service.IVoiceService;
+import com.fs.company.service.ICompanyVoiceApiService;
+import com.fs.company.service.ICompanyVoiceLogsService;
+import com.fs.company.service.ICompanyVoiceMobileService;
+import com.fs.company.service.ICompanyVoiceService;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+ 28 - 0
fs-service/src/main/java/com/fs/crm/domain/CrmCustomer.java

@@ -182,7 +182,35 @@ public class CrmCustomer extends BaseEntity
     private String intention;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date visitTime;
+    // 购买商品
+    private String goodsName;
+    // 购买规格
+    private String goodsSpecification;
+    // 店铺名称
+    private String shopName;
+    // 平台名称
+    private String platformName;
+    /**
+     * 投流来源id
+     */
+    private String traceId;
+
+    private String customerCompanyName;
+
+    private String isWx;
+
+    private String businessScenario;
 
+    private String product;
+    private String content;
 
+    private String moneyRemark;
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date nextTime; //下次跟进时间
+
+    private Integer isPoolRule; //是否参加公海回收规则 1:是
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date sysVisitTime; //系统自建跟进时间
 
 }

+ 117 - 0
fs-service/src/main/java/com/fs/crm/utils/CidUserOrderExtractor.java

@@ -0,0 +1,117 @@
+package com.fs.crm.utils;
+
+import com.fs.crm.vo.CrmOrderInfoVo;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 订单信息提取工具类(适配字段间隔不确定 + Java 8日期转换)
+ */
+public class CidUserOrderExtractor {
+    // 优化后的正则:加入\\s*匹配任意空白间隔,忽略字段间不确定的空格/换行
+    private static final String ORDER_REGEX =
+            "(.*?)\\s*-\\s*(.+?)\\s*(.*?)\\s*日期\\s*(\\d{4}-\\d{2}-\\d{2}\\s*\\d{2}:\\d{2}:\\d{2})\\s*" +
+                    "订单号\\s*(\\d+)\\s*商品\\s*(.+?)\\s*规格\\s*(.+?)\\s*物流\\s*(.+?)\\s*" +
+                    "数量(件)\\s*(\\d+)\\s*实付金额\\s*(\\d+(\\.\\d+)?)";
+
+    private static final Pattern ORDER_PATTERN = Pattern.compile(ORDER_REGEX);
+
+    // Java 8 日期格式化器(线程安全,可全局复用,对应订单日期格式:yyyy-MM-dd HH:mm:ss)
+    private static final DateTimeFormatter DATE_TIME_FORMATTER =
+            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 提取单个订单文本的信息(适配间隔不确定)
+     * @param orderText 原始订单文本(允许字段间有任意空白/换行)
+     * @return 封装后的OrderInfo对象
+     */
+    public static CrmOrderInfoVo extractSingleOrder(String orderText) {
+        if (orderText == null || orderText.trim().isEmpty()) {
+            return null;
+        }
+
+        // 预处理:将多个连续空白替换为单个空格(可选,进一步提高匹配稳定性)
+        String standardizedText = orderText.replaceAll("\\s+", " ");
+        Matcher matcher = ORDER_PATTERN.matcher(standardizedText);
+        CrmOrderInfoVo orderInfo = new CrmOrderInfoVo();
+
+        if (matcher.find()) {
+            try {
+                // 1. 提取各分组字段(忽略间隔,正则已适配)
+                String platform = matcher.group(1).trim();
+                String shop = matcher.group(2).trim();
+                String dateStr = matcher.group(3).trim();
+                String orderNo = matcher.group(4).trim();
+                String productName = matcher.group(5).trim();
+                String specification = matcher.group(6).trim();
+                String logistics = matcher.group(7).trim();
+                String quantityStr = matcher.group(8).trim();
+                String payAmountStr = matcher.group(9).trim();
+
+                // 2. Java 8 日期转换:字符串 → LocalDateTime(核心步骤)
+                LocalDateTime buyDate = parseDateToLocalDateTime(dateStr);
+
+                // 3. 其他字段类型转换
+                Integer quantity = Integer.parseInt(quantityStr);
+                BigDecimal payAmount = new BigDecimal(payAmountStr);
+
+                // 4. 封装到实体类
+                orderInfo.setPlatform(platform);
+                orderInfo.setShop(shop);
+                orderInfo.setBuyDate(buyDate);
+                orderInfo.setOrderNo(orderNo);
+                orderInfo.setProductName(productName);
+                orderInfo.setSpecification(specification);
+                orderInfo.setQuantity(quantity);
+                orderInfo.setLogistics(logistics);
+                orderInfo.setPayAmount(payAmount);
+
+            } catch (NumberFormatException | DateTimeParseException e) {
+                System.err.println("字段类型转换失败:" + e.getMessage());
+            }
+        }
+
+        return orderInfo;
+    }
+
+    /**
+     * Java 8 日期字符串转换为LocalDateTime(单独抽取,便于复用和异常处理)
+     * @param dateStr 日期字符串(格式:yyyy-MM-dd HH:mm:ss,允许中间有多个空格)
+     * @return LocalDateTime对象,转换失败返回null
+     */
+    private static LocalDateTime parseDateToLocalDateTime(String dateStr) {
+        if (dateStr == null || dateStr.trim().isEmpty()) {
+            return null;
+        }
+
+        try {
+            // 标准化日期字符串:将中间的多个空格替换为单个空格(确保格式匹配)
+            String standardDateStr = dateStr.replaceAll("\\s+", " ");
+            // Java 8 核心转换方法:parse(String, DateTimeFormatter)
+            return LocalDateTime.parse(standardDateStr, DATE_TIME_FORMATTER);
+        } catch (DateTimeParseException e) {
+            System.err.println("日期转换失败,格式不匹配(要求:yyyy-MM-dd HH:mm:ss):" + e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * Java 8 LocalDateTime转换为自定义格式字符串(扩展方法,便于展示/存储)
+     * @param localDateTime 待转换的LocalDateTime对象
+     * @param pattern 自定义日期格式(如:yyyy/MM/dd HH:mm)
+     * @return 格式化后的日期字符串
+     */
+    public static String formatLocalDateTime(LocalDateTime localDateTime, String pattern) {
+        if (localDateTime == null || pattern == null || pattern.trim().isEmpty()) {
+            return null;
+        }
+
+        DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern(pattern);
+        return localDateTime.format(customFormatter);
+    }
+}

+ 28 - 0
fs-service/src/main/java/com/fs/crm/vo/CrmOrderInfoVo.java

@@ -0,0 +1,28 @@
+package com.fs.crm.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class CrmOrderInfoVo {
+    // 平台(京东/天猫)
+    private String platform;
+    // 店铺名称
+    private String shop;
+    // 购买日期
+    private LocalDateTime buyDate;
+    // 订单号
+    private String orderNo;
+    // 商品名称
+    private String productName;
+    // 商品规格
+    private String specification;
+    // 购买数量
+    private Integer quantity;
+    // 物流信息
+    private String logistics;
+    // 实付金额
+    private BigDecimal payAmount;
+}

+ 1 - 0
fs-service/src/main/java/com/fs/voice/service/impl/VoiceServiceImpl.java

@@ -275,6 +275,7 @@ public class VoiceServiceImpl implements IVoiceService
         CallApiConfig apiConfig=JSONUtil.toBean(api.getApiJson(), CallApiConfig.class);
         Long time=new Date().getTime();
         String seq=time.toString();
+        time = time / 1000;
         Call call=new Call();
         CallRequest callRequest=new CallRequest();
         callRequest.setUserData("");

+ 1 - 1
fs-store/src/main/resources/application.yml

@@ -6,4 +6,4 @@ server:
 # Spring配置
 spring:
   profiles:
-    active: dev-yjb
+    active: dev