实体更新

This commit is contained in:
PQZ 2025-11-20 15:12:01 +08:00
parent 33aa5a4302
commit 308248fbc4
8 changed files with 177 additions and 51 deletions

View File

@ -34,6 +34,10 @@ public class CusBank extends DlBaseEntity
@Excel(name = "客户ID") @Excel(name = "客户ID")
private String cusId; private String cusId;
/** 客户名称 */
@Excel(name = "客户名称")
private String cusName;
/** 银行账号 */ /** 银行账号 */
@Excel(name = "银行账号") @Excel(name = "银行账号")
private String bankAccount; private String bankAccount;

View File

@ -30,6 +30,10 @@ public class CusCompany extends DlBaseEntity
@TableId(type = IdType.ASSIGN_UUID) @TableId(type = IdType.ASSIGN_UUID)
private String id; private String id;
/** 客户名称 */
@Excel(name = "客户名称")
private String cusName;
/** 客户ID */ /** 客户ID */
@Excel(name = "客户ID") @Excel(name = "客户ID")
private String cusId; private String cusId;

View File

@ -36,6 +36,10 @@ public class CusContacts extends DlBaseEntity
@Excel(name = "客户ID") @Excel(name = "客户ID")
private String cusId; private String cusId;
/** 客户名称 */
@Excel(name = "客户名称")
private String cusName;
/** 姓名 */ /** 姓名 */
@Excel(name = "姓名") @Excel(name = "姓名")
private String name; private String name;

View File

@ -34,6 +34,10 @@ public class CusManager extends DlBaseEntity
@Excel(name = "客户ID") @Excel(name = "客户ID")
private String cusId; private String cusId;
/** 客户名称 */
@Excel(name = "客户名称")
private String cusName;
/** 业务员ID */ /** 业务员ID */
@Excel(name = "业务员ID") @Excel(name = "业务员ID")
private Long userId; private Long userId;

View File

@ -7,22 +7,31 @@ import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
public class CusBankImportDTO { public class CusBankImportDTO {
@Excel(name = "客户代码") @Excel(name = "客户名称")
private String cusCode; private String cusName;
@Excel(name = "银行账") @Excel(name = "")
private String bankAccount; private String taxId;
@Excel(name = "银行名称") @Excel(name = "银行名称")
private String bankName; private String bankName;
@Excel(name = "币种") @Excel(name = "银行账号")
private String currency; private String bankAccount;
@Excel(name = "分支机构代码")
private String branchCode;
@Excel(name = "银行代码") @Excel(name = "银行代码")
private String bankCode; private String bankCode;
@Excel(name = "币种")
private String currency;
@Excel(name = "银行swift代码") @Excel(name = "银行swift代码")
private String swiftCode; private String swiftCode;
@Excel(name = "银行地址") @Excel(name = "银行地址")
private String bankAddress; private String bankAddress;
@Excel(name = "分支机构代码")
private String branchCode;
@Excel(name = "税号")
private String taxId;
} }

View File

@ -2,6 +2,7 @@ package com.ruoyi.cus.service;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@ -18,44 +19,58 @@ import com.ruoyi.cus.vo.ViewTimeVO;
* @author vinjor-m * @author vinjor-m
* @date 2025-11-03 * @date 2025-11-03
*/ */
public interface ICusMainService extends IService<CusMain> public interface ICusMainService extends IService<CusMain> {
{
IPage<MainVO> queryListPage(MainVO pageReqVO, Page<CusMain> page); IPage<MainVO> queryListPage(MainVO pageReqVO, Page<CusMain> page);
/** /**
* 新增客户信息 * 新增客户信息
*
* @param cusMainVO TODO
* @author vinjor-M * @author vinjor-M
* @date 15:56 2025/11/6 * @date 15:56 2025/11/6
* @param cusMainVO TODO **/
**/
void saveNewCus(CusMainVO cusMainVO); void saveNewCus(CusMainVO cusMainVO);
/** /**
* 根据id查询客户信息 * 根据id查询客户信息
* @author vinjor-M *
* @date 15:41 2025/11/12
* @param id 客户id * @param id 客户id
* @return com.ruoyi.cus.vo.CusMainVO * @return com.ruoyi.cus.vo.CusMainVO
**/ * @author vinjor-M
* @date 15:41 2025/11/12
**/
CusMainVO getDataById(String id); CusMainVO getDataById(String id);
/** /**
* 查看客户信息面板数据对象 * 查看客户信息面板数据对象
* @author vinjor-M *
* @date 10:34 2025/11/18
* @param id 数据id * @param id 数据id
* @return com.ruoyi.cus.vo.CusViewVO * @return com.ruoyi.cus.vo.CusViewVO
**/ * @author vinjor-M
* @date 10:34 2025/11/18
**/
CusViewVO viewData(String id); CusViewVO viewData(String id);
/** /**
* 获取客户其他信息 * 获取客户其他信息
*
* @param cusId 客户id
* @return com.ruoyi.cus.vo.CusViewVO
* @author vinjor-M * @author vinjor-M
* @date 13:14 2025/11/18 * @date 13:14 2025/11/18
* @param id 客户id **/
* @return com.ruoyi.cus.vo.CusViewVO
**/
CusViewVO getOtherInfo(String cusId); CusViewVO getOtherInfo(String cusId);
/**
* 通过名称保存客户主表信息
*
* @param cusMainList TODO
* @return void
* @author PQZ
* @date 14:44 2025/11/20
**/
void saveOrUpdateByCusName(List<CusMain> cusMainList);
} }

View File

@ -6,6 +6,7 @@ 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.*; import com.ruoyi.cus.service.*;
import com.ruoyi.utils.SnowflakeIdGenerator;
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;
@ -33,6 +34,8 @@ public class CusImportServiceImpl implements ICusImportService {
private ICusContactsService cusContactsService; private ICusContactsService cusContactsService;
@Autowired @Autowired
private ICusBankService cusBankService; private ICusBankService cusBankService;
@Autowired
private SnowflakeIdGenerator snowflakeIdGenerator;
/** /**
* 导入客户及联系人信息 * 导入客户及联系人信息
@ -46,13 +49,9 @@ public class CusImportServiceImpl implements ICusImportService {
// 先打印所有sheet页名称 // 先打印所有sheet页名称
Workbook workbook = new XSSFWorkbook(file.getInputStream()); Workbook workbook = new XSSFWorkbook(file.getInputStream());
int numberOfSheets = workbook.getNumberOfSheets(); int numberOfSheets = workbook.getNumberOfSheets();
System.out.println("总共有 " + numberOfSheets + " 个sheet页");
for (int i = 0; i < numberOfSheets; i++) { for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i); Sheet sheet = workbook.getSheetAt(i);
System.out.println("Sheet " + i + " 名称: " + sheet.getSheetName());
} }
// 关闭workbook // 关闭workbook
workbook.close(); workbook.close();
// 重新获取输入流用于数据读取 // 重新获取输入流用于数据读取
@ -87,13 +86,14 @@ public class CusImportServiceImpl implements ICusImportService {
// 使用Map按客户代码分组保留每个客户的所有联系人信息 // 使用Map按客户代码分组保留每个客户的所有联系人信息
Map<String, List<CusImportDTO>> customerGroupMap = cusList.stream() Map<String, List<CusImportDTO>> customerGroupMap = cusList.stream()
.collect(Collectors.groupingBy(CusImportDTO::getCusCode)); .collect(Collectors.groupingBy(CusImportDTO::getFullName));
// 准备批量插入的集合 // 准备批量插入的集合
List<CusMain> cusMainList = new ArrayList<>(); List<CusMain> cusMainList = new ArrayList<>();
List<CusCompany> cusCompanyList = new ArrayList<>(); List<CusCompany> cusCompanyList = new ArrayList<>();
List<CusManager> cusManagerList = new ArrayList<>(); List<CusManager> cusManagerList = new ArrayList<>();
List<CusContacts> cusContactsList = new ArrayList<>(); List<CusContacts> cusContactsList = new ArrayList<>();
List<CusBank> cusBankList = new ArrayList<>();
// 遍历每个客户的联系人列表只保存一次客户信息但保存所有联系人 // 遍历每个客户的联系人列表只保存一次客户信息但保存所有联系人
for (Map.Entry<String, List<CusImportDTO>> entry : customerGroupMap.entrySet()) { for (Map.Entry<String, List<CusImportDTO>> entry : customerGroupMap.entrySet()) {
List<CusImportDTO> customerContacts = entry.getValue(); List<CusImportDTO> customerContacts = entry.getValue();
@ -103,9 +103,10 @@ public class CusImportServiceImpl implements ICusImportService {
// 取第一个联系人记录作为客户基本信息因为同一客户的基本信息是重复的 // 取第一个联系人记录作为客户基本信息因为同一客户的基本信息是重复的
CusImportDTO customerInfo = customerContacts.get(0); CusImportDTO customerInfo = customerContacts.get(0);
// 为客户提供UUID // 为客户提供UUID
String customerId = UUID.randomUUID().toString(); String customerId = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
// 保存客户主表信息 CusMain // 提取客户主表信息 CusMain
CusMain customer = new CusMain(); CusMain customer = new CusMain();
//绑定客户id
customer.setId(customerId); customer.setId(customerId);
customer.setCusCode(customerInfo.getCusCode()); customer.setCusCode(customerInfo.getCusCode());
customer.setFullName(customerInfo.getFullName()); customer.setFullName(customerInfo.getFullName());
@ -121,8 +122,9 @@ public class CusImportServiceImpl implements ICusImportService {
customer.setRemark(customerInfo.getCusRemark()); customer.setRemark(customerInfo.getCusRemark());
cusMainList.add(customer); cusMainList.add(customer);
// 保存客户公司信息表 CusCompany // 提取客户公司信息表 CusCompany
CusCompany companyInfo = new CusCompany(); CusCompany companyInfo = new CusCompany();
//绑定客户id
companyInfo.setCusId(customerId); companyInfo.setCusId(customerId);
companyInfo.setCusFrom(customerInfo.getCusSource()); companyInfo.setCusFrom(customerInfo.getCusSource());
companyInfo.setCusLevel(customerInfo.getCusLevel()); companyInfo.setCusLevel(customerInfo.getCusLevel());
@ -132,8 +134,9 @@ public class CusImportServiceImpl implements ICusImportService {
companyInfo.setCreateTime(new Date()); companyInfo.setCreateTime(new Date());
cusCompanyList.add(companyInfo); cusCompanyList.add(companyInfo);
// 保存客户管理信息表 CusManager // 提取客户管理信息表 CusManager
CusManager managementInfo = new CusManager(); CusManager managementInfo = new CusManager();
//绑定客户id
managementInfo.setCusId(customerId); managementInfo.setCusId(customerId);
managementInfo.setUserName(customerInfo.getUserName()); managementInfo.setUserName(customerInfo.getUserName());
managementInfo.setFollowStep(customerInfo.getFollowStep()); managementInfo.setFollowStep(customerInfo.getFollowStep());
@ -144,9 +147,11 @@ public class CusImportServiceImpl implements ICusImportService {
managementInfo.setCreateTime(new Date()); managementInfo.setCreateTime(new Date());
cusManagerList.add(managementInfo); cusManagerList.add(managementInfo);
// 收集该客户的所有联系人信息 CusContacts // 提取客户的所有联系人信息 CusContacts
for (CusImportDTO contact : customerContacts) { for (CusImportDTO contact : customerContacts) {
CusContacts customerContact = new CusContacts(); CusContacts customerContact = new CusContacts();
customerContact.setId(snowflakeIdGenerator.generateId());
//绑定客户id
customerContact.setCusId(customerId); customerContact.setCusId(customerId);
customerContact.setName(contact.getName()); customerContact.setName(contact.getName());
customerContact.setNickName(contact.getNickName()); customerContact.setNickName(contact.getNickName());
@ -159,26 +164,49 @@ public class CusImportServiceImpl implements ICusImportService {
customerContact.setCreateTime(new Date()); customerContact.setCreateTime(new Date());
cusContactsList.add(customerContact); cusContactsList.add(customerContact);
} }
// 批量保存客户主表信息
if (!cusMainList.isEmpty()) { //提取银行信息
cusMainService.saveBatch(cusMainList); for (CusBankImportDTO bank : bankList) {
if (bank.getCusName().equals(customerInfo.getFullName())) {
CusBank bankInfo = new CusBank();
//绑定客户id
bankInfo.setCusId(customerId);
bankInfo.setBankAccount(bank.getBankAccount());
bankInfo.setBankName(bank.getBankName());
bankInfo.setCurrency(bank.getCurrency());
bankInfo.setBankCode(bank.getBankCode());
bankInfo.setSwiftCode(bank.getSwiftCode());
bankInfo.setBankAddress(bank.getBankAddress());
bankInfo.setBranchCode(bank.getBranchCode());
bankInfo.setTaxId(bank.getTaxId());
cusBankList.add(bankInfo);
}
} }
// 批量保存客户公司信息表
if (!cusCompanyList.isEmpty()) {
cusCompanyService.saveBatch(cusCompanyList);
}
// 批量保存客户管理信息表
if (!cusManagerList.isEmpty()) {
cusManagerService.saveBatch(cusManagerList);
}
// 批量保存客户联系人信息
if (!cusContactsList.isEmpty()) {
cusContactsService.saveBatch(cusContactsList);
}
} }
// 批量保存客户主表信息
if (!cusMainList.isEmpty()) {
cusMainService.saveBatch(cusMainList);
}
// 批量保存客户公司信息表
if (!cusCompanyList.isEmpty()) {
cusCompanyService.saveBatch(cusCompanyList);
}
// 批量保存客户管理信息表
if (!cusManagerList.isEmpty()) {
cusManagerService.saveBatch(cusManagerList);
}
// 批量保存客户联系人信息
if (!cusContactsList.isEmpty()) {
cusContactsService.saveBatch(cusContactsList);
}
//批量保存银行账户信息
if (!cusBankList.isEmpty()) {
cusBankService.saveBatch(cusBankList);
}
} }

View File

@ -1,6 +1,8 @@
package com.ruoyi.cus.service.impl; package com.ruoyi.cus.service.impl;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
@ -266,4 +268,60 @@ public class CusMainServiceImpl extends ServiceImpl<CusMainMapper,CusMain> impl
return cusViewVO; return cusViewVO;
} }
/**
* 通过名称保存客户主表信息
*
* @param cusMainList List<CusMain>
* @return void
* @author PQZ
* @date 14:44 2025/11/20
**/
@Override
public void saveOrUpdateByCusName(List<CusMain> cusMainList) {
if (cusMainList == null || cusMainList.isEmpty()) {
return;
}
// 提取所有需要处理的 fullName
List<String> fullNames = cusMainList.stream()
.map(CusMain::getFullName)
.filter(StringUtils::isNotEmpty)
.distinct()
.collect(Collectors.toList());
// 一次性查询数据库中已存在的客户信息
Map<String, CusMain> existingCusMap = new HashMap<>();
if (!fullNames.isEmpty()) {
List<CusMain> existingCusList = this.list(
new LambdaQueryWrapper<CusMain>()
.in(CusMain::getFullName, fullNames)
);
existingCusMap = existingCusList.stream()
.collect(Collectors.toMap(CusMain::getFullName, Function.identity()));
}
// 分离需要新增和更新的客户
List<CusMain> toSaveList = new ArrayList<>();
List<CusMain> toUpdateList = new ArrayList<>();
for (CusMain cusMain : cusMainList) {
if (StringUtils.isEmpty(cusMain.getFullName())) {
continue;
}
CusMain existingCus = existingCusMap.get(cusMain.getFullName());
if (existingCus != null) {
// 如果存在设置ID并加入更新列表
cusMain.setId(existingCus.getId());
toUpdateList.add(cusMain);
} else {
// 如果不存在则生成新的ID并加入保存列表
toSaveList.add(cusMain);
}
}
// 批量保存和更新
if (!toSaveList.isEmpty()) {
this.saveBatch(toSaveList);
}
if (!toUpdateList.isEmpty()) {
this.updateBatchById(toUpdateList);
}
}
} }