ソースを参照

crm导入客户优化与修复查询报错bug

lmx 6 時間 前
コミット
c672574440

+ 8 - 0
fs-service/src/main/java/com/fs/crm/mapper/CrmCustomerMapper.java

@@ -997,4 +997,12 @@ public interface CrmCustomerMapper extends BaseMapper<CrmCustomer> {
     @Select("select customer_id  from  crm_customer where company_id = #{companyId} and  mobile=#{remarkMobile} limit 1")
     @Select("select customer_id  from  crm_customer where company_id = #{companyId} and  mobile=#{remarkMobile} limit 1")
     Long selectCrmCustomerByCrmMobileAndCompanyId(@Param("companyId") Long companyId, @Param("remarkMobile") String remarkMobile);
     Long selectCrmCustomerByCrmMobileAndCompanyId(@Param("companyId") Long companyId, @Param("remarkMobile") String remarkMobile);
 
 
+    /**
+     * 批量插入客户
+     *
+     * @param list 客户列表
+     * @return 结果
+     */
+    int insertBatchCrmCustomer(@Param("list") List<CrmCustomer> list);
+
 }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/crm/param/CrmLineCustomerListQueryParam.java

@@ -85,4 +85,9 @@ public class CrmLineCustomerListQueryParam extends BaseQueryParam
     @Excel(name = "标签" )
     @Excel(name = "标签" )
     private String tags;
     private String tags;
 
 
+
+    private Integer attritionLevel;
+
+    private String intentionDegree;
+
 }
 }

+ 5 - 0
fs-service/src/main/java/com/fs/crm/param/CrmMyCustomerListQueryParam.java

@@ -95,4 +95,9 @@ public class CrmMyCustomerListQueryParam extends BaseQueryParam
     private String corpId;
     private String corpId;
     /** 客户级别 */
     /** 客户级别 */
     private Long customerLevel;
     private Long customerLevel;
+
+
+    private Integer attritionLevel;
+
+    private String intentionDegree;
 }
 }

+ 25 - 28
fs-service/src/main/java/com/fs/crm/service/impl/CrmCustomerServiceImpl.java

@@ -551,49 +551,33 @@ public class CrmCustomerServiceImpl extends ServiceImpl<CrmCustomerMapper, CrmCu
         StringBuilder successMsg = new StringBuilder();
         StringBuilder successMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
         StringBuilder failureMsg = new StringBuilder();
         StringBuilder importMsg = new StringBuilder();
         StringBuilder importMsg = new StringBuilder();
+
+        // 数据准备
+        List<CrmCustomer> batchList = new ArrayList<>();
+        List<CrmCompanyLineCustomerImportParam> validParams = new ArrayList<>();
+
         for (CrmCompanyLineCustomerImportParam customer : list)
         for (CrmCompanyLineCustomerImportParam customer : list)
         {
         {
             try
             try
             {
             {
-//                String regex = "^1[3456789]\\d{9}$";
-//                if(!customer.getMobile().matches(regex)){
-//                    failureNum++;
-//                    String msg = "<br/>" + failureNum + "、客户 " + customer.getMobile() + " 导入失败:电话号码格式不正确";
-//                    failureMsg.append(msg );
-//                    continue;
-//                }
-                CrmCustomer crmCustomer=new CrmCustomer();
-                BeanUtils.copyProperties(customer,crmCustomer);
+                CrmCustomer crmCustomer = new CrmCustomer();
+                BeanUtils.copyProperties(customer, crmCustomer);
                 crmCustomer.setIsDel(0);
                 crmCustomer.setIsDel(0);
                 crmCustomer.setIsLine(1);
                 crmCustomer.setIsLine(1);
                 crmCustomer.setCompanyId(companyId);
                 crmCustomer.setCompanyId(companyId);
                 crmCustomer.setStatus(1);
                 crmCustomer.setStatus(1);
                 crmCustomer.setIsReceive(1);
                 crmCustomer.setIsReceive(1);
-                if(StringUtils.isNotEmpty(customer.getSource())){
+                if (StringUtils.isNotEmpty(customer.getSource())) {
                     try {
                     try {
                         crmCustomer.setSource(Integer.parseInt(customer.getSource()));
                         crmCustomer.setSource(Integer.parseInt(customer.getSource()));
-                    }
-                    catch (Exception e){
+                    } catch (Exception e) {
                     }
                     }
                 }
                 }
                 crmCustomer.setCustomerCode(OrderUtils.getOrderNo());
                 crmCustomer.setCustomerCode(OrderUtils.getOrderNo());
                 crmCustomer.setCreateTime(new Date());
                 crmCustomer.setCreateTime(new Date());
                 crmCustomer.setCreateUserId(companyUserId);
                 crmCustomer.setCreateUserId(companyUserId);
-                crmCustomerMapper.insertCrmCustomer(crmCustomer);
-                successNum++;
-                successMsg.append("<br/>" + successNum + "、客户 " + customer.getCustomerName() + " 导入成功");
-                //若存在归属员工编号 就将线索客户分配给该业务员  updated by qxj 2023年05月12日16:51:37
-                if(StringUtils.isNotEmpty(customer.getOwnerCompanyUserCode())){
-                    CompanyUser companyUser=companyUserMapper.selectUserByUserName(customer.getOwnerCompanyUserCode());
-                    if(companyUser!=null){
-                       Boolean isSuccess=assignUserAfterImport(operName,crmCustomer.getCustomerId(),companyUser);
-                       if(isSuccess){
-                           successMsg.append(" <br/> "+customer.getOwnerCompanyUserCode()+"客户分配成功");
-                       }else{
-                           successMsg.append(" <br/> "+customer.getOwnerCompanyUserCode()+"客户分配失败");
-                       }
-                    }
-                }
+                batchList.add(crmCustomer);
+                validParams.add(customer);
             }
             }
             catch (Exception e) {
             catch (Exception e) {
                 failureNum++;
                 failureNum++;
@@ -602,9 +586,22 @@ public class CrmCustomerServiceImpl extends ServiceImpl<CrmCustomerMapper, CrmCu
             }
             }
         }
         }
 
 
+        // 批量插入
+        int batchSize = 500;
+        for (int i = 0; i < batchList.size(); i += batchSize) {
+            List<CrmCustomer> subList = batchList.subList(i, Math.min(i + batchSize, batchList.size()));
+            crmCustomerMapper.insertBatchCrmCustomer(subList);
+        }
+
+        // 构建结果消息
+        for (int i = 0; i < batchList.size(); i++) {
+            CrmCompanyLineCustomerImportParam customer = validParams.get(i);
+            successNum++;
+            successMsg.append("<br/>" + successNum + "、客户 " + customer.getCustomerName() + " 导入成功");
+        }
+
         if (failureNum > 0) {
         if (failureNum > 0) {
             failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
             failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            //throw new CustomException(failureMsg.toString());
         }
         }
         else {
         else {
             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");

+ 25 - 0
fs-service/src/main/resources/mapper/crm/CrmCustomerMapper.xml

@@ -522,6 +522,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         </trim>
     </insert>
     </insert>
 
 
+    <insert id="insertBatchCrmCustomer" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="customerId">
+        insert into crm_customer
+        (
+            customer_code, customer_name, mobile, sex, weixin, remark, user_id, create_user_id,
+            receive_user_id, customer_user_id, address, city_ids, location, detail_address, lng, lat,
+            create_time, update_time, status, is_receive, dept_id, is_del, customer_type,
+            receive_time, pool_time, company_id, is_line, source, tags, ext_json, visit_status,
+            register_date, register_link_url, register_desc, register_submit_time, is_pool,
+            register_type, pay_money, buy_count, source_code, push_time, push_code,
+            visit_time, traffic_source, import_type, third_account, clue_id, qw_name
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+                #{item.customerCode}, #{item.customerName}, #{item.mobile}, #{item.sex}, #{item.weixin}, #{item.remark}, #{item.userId}, #{item.createUserId},
+                #{item.receiveUserId}, #{item.customerUserId}, #{item.address}, #{item.cityIds}, #{item.location}, #{item.detailAddress}, #{item.lng}, #{item.lat},
+                #{item.createTime}, #{item.updateTime}, #{item.status}, #{item.isReceive}, #{item.deptId}, #{item.isDel}, #{item.customerType},
+                #{item.receiveTime}, #{item.poolTime}, #{item.companyId}, #{item.isLine}, #{item.source}, #{item.tags}, #{item.extJson}, #{item.visitStatus},
+                #{item.registerDate}, #{item.registerLinkUrl}, #{item.registerDesc}, #{item.registerSubmitTime}, #{item.isPool},
+                #{item.registerType}, #{item.payMoney}, #{item.buyCount}, #{item.sourceCode}, #{item.pushTime}, #{item.pushCode},
+                #{item.visitTime}, #{item.trafficSource}, #{item.importType}, #{item.thirdAccount}, #{item.clueId}, #{item.qwName}
+            )
+        </foreach>
+    </insert>
+
     <select id="selectCrmCustomerInfoById" resultType="com.fs.crm.domain.CrmCustomerInfo">
     <select id="selectCrmCustomerInfoById" resultType="com.fs.crm.domain.CrmCustomerInfo">
         SELECT
         SELECT
             id,customer_id,name,sex,age,address,habits,illness_time,body,study,course_status,course,family,family_disease,disease,is_line,
             id,customer_id,name,sex,age,address,habits,illness_time,body,study,course_status,course,family,family_disease,disease,is_line,