This commit is contained in:
PQZ 2025-11-19 20:18:08 +08:00
parent 21464905de
commit 33aa5a4302

View File

@ -2,23 +2,38 @@ package com.ruoyi.cus.service.impl;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.cus.domain.*;
import com.ruoyi.cus.dto.CusBankImportDTO; import com.ruoyi.cus.dto.CusBankImportDTO;
import com.ruoyi.cus.dto.CusImportDTO; import com.ruoyi.cus.dto.CusImportDTO;
import com.ruoyi.cus.service.ICusImportService; import com.ruoyi.cus.service.*;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.*;
import java.util.stream.Collectors;
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class CusImportServiceImpl implements ICusImportService { public class CusImportServiceImpl implements ICusImportService {
@Autowired
private ICusMainService cusMainService;
@Autowired
private ICusCompanyService cusCompanyService;
@Autowired
private ICusManagerService cusManagerService;
@Autowired
private ICusContactsService cusContactsService;
@Autowired
private ICusBankService cusBankService;
/** /**
* 导入客户及联系人信息 * 导入客户及联系人信息
* *
@ -42,20 +57,15 @@ public class CusImportServiceImpl implements ICusImportService {
workbook.close(); workbook.close();
// 重新获取输入流用于数据读取 // 重新获取输入流用于数据读取
InputStream inputStream = file.getInputStream(); InputStream inputStream = file.getInputStream();
// 读取第二个sheet页数据索引为1 // 读取第二个sheet页数据索引为1
ExcelUtil<CusImportDTO> cusUtil = new ExcelUtil<>(CusImportDTO.class); ExcelUtil<CusImportDTO> cusUtil = new ExcelUtil<>(CusImportDTO.class);
List<CusImportDTO> secondSheetList = cusUtil.importExcel("客户联系人", inputStream, 1); List<CusImportDTO> secondSheetList = cusUtil.importExcel("客户联系人", inputStream, 1);
System.out.println("第二个sheet页数据条数: " + (secondSheetList != null ? secondSheetList.size() : 0));
// 重新获取输入流用于读取第三个sheet页数据 // 重新获取输入流用于读取第三个sheet页数据
InputStream thirdSheetInputStream = file.getInputStream(); InputStream thirdSheetInputStream = file.getInputStream();
// 读取第三个sheet页数据索引为2 // 读取第三个sheet页数据索引为2
ExcelUtil<CusBankImportDTO> bankUtil = new ExcelUtil<>(CusBankImportDTO.class); ExcelUtil<CusBankImportDTO> bankUtil = new ExcelUtil<>(CusBankImportDTO.class);
List<CusBankImportDTO> thirdSheetList = bankUtil.importExcel("银行资料", thirdSheetInputStream, 0); List<CusBankImportDTO> thirdSheetList = bankUtil.importExcel("银行资料", thirdSheetInputStream, 0);
System.out.println("第三个sheet页数据条数: " + (thirdSheetList != null ? thirdSheetList.size() : 0)); saveCusAndBank(secondSheetList, thirdSheetList);
return AjaxResult.success("导入成功"); return AjaxResult.success("导入成功");
} catch (Exception e) { } catch (Exception e) {
return AjaxResult.error("导入失败:" + e.getMessage()); return AjaxResult.error("导入失败:" + e.getMessage());
@ -71,10 +81,105 @@ public class CusImportServiceImpl implements ICusImportService {
* @date 15:30 2025/11/19 * @date 15:30 2025/11/19
**/ **/
private void saveCusAndBank(List<CusImportDTO> cusList, List<CusBankImportDTO> bankList) { private void saveCusAndBank(List<CusImportDTO> cusList, List<CusBankImportDTO> bankList) {
if (cusList == null || cusList.isEmpty()) {
return;
}
// 使用Map按客户代码分组保留每个客户的所有联系人信息
Map<String, List<CusImportDTO>> customerGroupMap = cusList.stream()
.collect(Collectors.groupingBy(CusImportDTO::getCusCode));
// 准备批量插入的集合
List<CusMain> cusMainList = new ArrayList<>();
List<CusCompany> cusCompanyList = new ArrayList<>();
List<CusManager> cusManagerList = new ArrayList<>();
List<CusContacts> cusContactsList = new ArrayList<>();
// 遍历每个客户的联系人列表只保存一次客户信息但保存所有联系人
for (Map.Entry<String, List<CusImportDTO>> entry : customerGroupMap.entrySet()) {
List<CusImportDTO> customerContacts = entry.getValue();
if (customerContacts.isEmpty()) {
continue;
}
// 取第一个联系人记录作为客户基本信息因为同一客户的基本信息是重复的
CusImportDTO customerInfo = customerContacts.get(0);
// 为客户提供UUID
String customerId = UUID.randomUUID().toString();
// 保存客户主表信息 CusMain
CusMain customer = new CusMain();
customer.setId(customerId);
customer.setCusCode(customerInfo.getCusCode());
customer.setFullName(customerInfo.getFullName());
customer.setShortName(customerInfo.getShortName());
customer.setCusType(customerInfo.getCusType());
customer.setCountry(customerInfo.getCountry());
customer.setZoneName(customerInfo.getZoneName());
customer.setMainProds(customerInfo.getMainProds());
customer.setSiteUrl(customerInfo.getSiteUrl());
customer.setCreator(customerInfo.getCreateBy());
customer.setCreateTime(new Date());
customer.setUpdateTime(new Date());
customer.setRemark(customerInfo.getCusRemark());
cusMainList.add(customer);
// 保存客户公司信息表 CusCompany
CusCompany companyInfo = new CusCompany();
companyInfo.setCusId(customerId);
companyInfo.setCusFrom(customerInfo.getCusSource());
companyInfo.setCusLevel(customerInfo.getCusLevel());
companyInfo.setBusiType(customerInfo.getBusinessType());
companyInfo.setContactAddress(customerInfo.getContactAddress());
companyInfo.setCreator(customerInfo.getCreateBy());
companyInfo.setCreateTime(new Date());
cusCompanyList.add(companyInfo);
// 保存客户管理信息表 CusManager
CusManager managementInfo = new CusManager();
managementInfo.setCusId(customerId);
managementInfo.setUserName(customerInfo.getUserName());
managementInfo.setFollowStep(customerInfo.getFollowStep());
managementInfo.setSeasReason(customerInfo.getSeasReason());
managementInfo.setSeasGroup(customerInfo.getSeasGroup());
managementInfo.setOldDept(customerInfo.getOldDept());
managementInfo.setCreator(customerInfo.getCreateBy());
managementInfo.setCreateTime(new Date());
cusManagerList.add(managementInfo);
// 收集该客户的所有联系人信息 CusContacts
for (CusImportDTO contact : customerContacts) {
CusContacts customerContact = new CusContacts();
customerContact.setCusId(customerId);
customerContact.setName(contact.getName());
customerContact.setNickName(contact.getNickName());
customerContact.setEmail(contact.getEmail());
customerContact.setTelephone(contact.getTelephone());
customerContact.setSex(contact.getSex());
customerContact.setBirthday(new Date());
customerContact.setWhatsApp(contact.getWhatsApp());
customerContact.setCreator(contact.getCreateBy());
customerContact.setCreateTime(new Date());
cusContactsList.add(customerContact);
}
// 批量保存客户主表信息
if (!cusMainList.isEmpty()) {
cusMainService.saveBatch(cusMainList);
}
// 批量保存客户公司信息表
if (!cusCompanyList.isEmpty()) {
cusCompanyService.saveBatch(cusCompanyList);
}
// 批量保存客户管理信息表
if (!cusManagerList.isEmpty()) {
cusManagerService.saveBatch(cusManagerList);
}
// 批量保存客户联系人信息
if (!cusContactsList.isEmpty()) {
cusContactsService.saveBatch(cusContactsList);
}
}
} }
} }