|
|
@@ -0,0 +1,130 @@
|
|
|
+package com.linkwechat.coal.modules.bdshdb.customer.service.impl;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.CustomerLeads;
|
|
|
+import com.linkwechat.coal.modules.bdshdb.customer.domain.entity.LocalAppUser;
|
|
|
+import com.linkwechat.coal.modules.bdshdb.customer.mapper.CustomerLeadsMapper;
|
|
|
+import com.linkwechat.coal.modules.bdshdb.customer.service.ICustomerLeadsService;
|
|
|
+import com.linkwechat.coal.modules.bdshdb.customer.service.ILocalAppUserService;
|
|
|
+import com.linkwechat.domain.WeUser;
|
|
|
+import com.linkwechat.service.IWeUserService;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import java.util.Date;
|
|
|
+/**
|
|
|
+ * 客户线索服务实现类
|
|
|
+ *
|
|
|
+ * @author linkwechat
|
|
|
+ * @since 2025-12-04
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class CustomerLeadsServiceImpl extends ServiceImpl<CustomerLeadsMapper, CustomerLeads> implements ICustomerLeadsService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IWeUserService weUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ILocalAppUserService localAppUserService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从主数据库(SCRM)查询用户
|
|
|
+ * @param phone 手机号码
|
|
|
+ * @return WeUser 用户实体
|
|
|
+ */
|
|
|
+ private WeUser findWeUserByPhone(String phone) {
|
|
|
+ return weUserService.getOne(
|
|
|
+ new LambdaQueryWrapper<WeUser>()
|
|
|
+ .eq(WeUser::getPhone, phone)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从本地生活数据库查询用户
|
|
|
+ * @param phone 手机号码
|
|
|
+ * @return LocalAppUser 用户实体
|
|
|
+ */
|
|
|
+ private LocalAppUser findLocalAppUserByPhone(String phone) {
|
|
|
+ return localAppUserService.getOne(
|
|
|
+ new LambdaQueryWrapper<LocalAppUser>()
|
|
|
+ .eq(LocalAppUser::getPhone, phone)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean saveCustomerLeads(String phone) {
|
|
|
+ try {
|
|
|
+ if (phone == null || phone.trim().isEmpty()) {
|
|
|
+ log.warn("手机号码不能为空");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否已经存在该手机号的线索
|
|
|
+ LambdaQueryWrapper<CustomerLeads> existWrapper = new LambdaQueryWrapper<>();
|
|
|
+ existWrapper.eq(CustomerLeads::getPhone, phone);
|
|
|
+ CustomerLeads existingLeads = this.getOne(existWrapper);
|
|
|
+ if (existingLeads != null) {
|
|
|
+ log.info("手机号 {} 的客户线索已存在", phone);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ CustomerLeads customerLeads = CustomerLeads.builder()
|
|
|
+ .phone(phone)
|
|
|
+ .triggerTime(new Date())
|
|
|
+ .processingStatus(2) // 2-未处理
|
|
|
+ .createdTime(new Date())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ // 先查询we_user表(scrm数据库)
|
|
|
+ WeUser weUser = findWeUserByPhone(phone);
|
|
|
+ if (weUser != null) {
|
|
|
+ // 在we_user表中找到用户,使用we_user的数据
|
|
|
+ log.info("在we_user表中找到用户: phone={}", phone);
|
|
|
+ customerLeads.setUserName(weUser.getName());
|
|
|
+ customerLeads.setGender(weUser.getSex());
|
|
|
+ customerLeads.setBirthDate(weUser.getBirthday());
|
|
|
+ customerLeads.setUserSource(weUser.getSource() != null ? weUser.getSource() + 1 : 1); // 转换:0->1(晋掌柜), 1->2(掌柜生活)
|
|
|
+ customerLeads.setUserStatus(weUser.getStatus() != null ? weUser.getStatus() + 1 : 1); // 转换:0->1(正式), 1->2(临时)
|
|
|
+ customerLeads.setUserType(weUser.getType());
|
|
|
+ customerLeads.setCreatedBy("system");
|
|
|
+ customerLeads.setUpdatedBy("system");
|
|
|
+ customerLeads.setUpdatedTime(new Date());
|
|
|
+ } else {
|
|
|
+ // 在we_user表中未找到,查询local_app_user表(jeecg-boot数据库)
|
|
|
+ log.info("在we_user表中未找到用户,查询local_app_user表: phone={}", phone);
|
|
|
+ LocalAppUser localAppUser = findLocalAppUserByPhone(phone);
|
|
|
+ if (localAppUser != null) {
|
|
|
+ // 在local_app_user表中找到用户
|
|
|
+ customerLeads.setUserName(localAppUser.getName());
|
|
|
+ // local_app_user表没有性别和生日字段,设为默认值
|
|
|
+ customerLeads.setGender(0); // 默认女性
|
|
|
+ customerLeads.setBirthDate(null);
|
|
|
+ customerLeads.setUserSource(2); // 掌柜生活
|
|
|
+ customerLeads.setUserStatus(localAppUser.getIsFormal()); // 1.临时 2.正式
|
|
|
+ customerLeads.setUserType(localAppUser.getUserType());
|
|
|
+ customerLeads.setCreatedBy("system");
|
|
|
+ customerLeads.setUpdatedBy("system");
|
|
|
+ customerLeads.setUpdatedTime(new Date());
|
|
|
+ } else {
|
|
|
+ log.warn("在两个数据库中都未找到手机号 {} 对应的用户", phone);
|
|
|
+ // 即使没找到用户,也创建一个基础的线索记录
|
|
|
+ customerLeads.setUserName("未知用户");
|
|
|
+ customerLeads.setGender(0);
|
|
|
+ customerLeads.setUserSource(0);
|
|
|
+ customerLeads.setUserStatus(2);
|
|
|
+ customerLeads.setUserType(0);
|
|
|
+ customerLeads.setCreatedBy("system");
|
|
|
+ customerLeads.setUpdatedBy("system");
|
|
|
+ customerLeads.setUpdatedTime(new Date());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return this.save(customerLeads);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("保存客户线索失败: phone={}, error={}", phone, e.getMessage(), e);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|