实体更新

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")
private String cusId;
/** 客户名称 */
@Excel(name = "客户名称")
private String cusName;
/** 银行账号 */
@Excel(name = "银行账号")
private String bankAccount;

View File

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

View File

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

View File

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

View File

@ -7,22 +7,31 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class CusBankImportDTO {
@Excel(name = "客户代码")
private String cusCode;
@Excel(name = "银行账")
private String bankAccount;
@Excel(name = "客户名称")
private String cusName;
@Excel(name = "")
private String taxId;
@Excel(name = "银行名称")
private String bankName;
@Excel(name = "币种")
private String currency;
@Excel(name = "银行账号")
private String bankAccount;
@Excel(name = "分支机构代码")
private String branchCode;
@Excel(name = "银行代码")
private String bankCode;
@Excel(name = "币种")
private String currency;
@Excel(name = "银行swift代码")
private String swiftCode;
@Excel(name = "银行地址")
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.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
@ -18,44 +19,58 @@ import com.ruoyi.cus.vo.ViewTimeVO;
* @author vinjor-m
* @date 2025-11-03
*/
public interface ICusMainService extends IService<CusMain>
{
public interface ICusMainService extends IService<CusMain> {
IPage<MainVO> queryListPage(MainVO pageReqVO, Page<CusMain> page);
/**
* 新增客户信息
*
* @param cusMainVO TODO
* @author vinjor-M
* @date 15:56 2025/11/6
* @param cusMainVO TODO
**/
void saveNewCus(CusMainVO cusMainVO);
/**
* 根据id查询客户信息
* @author vinjor-M
* @date 15:41 2025/11/12
*
* @param id 客户id
* @return com.ruoyi.cus.vo.CusMainVO
* @author vinjor-M
* @date 15:41 2025/11/12
**/
CusMainVO getDataById(String id);
/**
* 查看客户信息面板数据对象
* @author vinjor-M
* @date 10:34 2025/11/18
*
* @param id 数据id
* @return com.ruoyi.cus.vo.CusViewVO
* @author vinjor-M
* @date 10:34 2025/11/18
**/
CusViewVO viewData(String id);
/**
* 获取客户其他信息
*
* @param cusId 客户id
* @return com.ruoyi.cus.vo.CusViewVO
* @author vinjor-M
* @date 13:14 2025/11/18
* @param id 客户id
* @return com.ruoyi.cus.vo.CusViewVO
**/
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.CusImportDTO;
import com.ruoyi.cus.service.*;
import com.ruoyi.utils.SnowflakeIdGenerator;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -33,6 +34,8 @@ public class CusImportServiceImpl implements ICusImportService {
private ICusContactsService cusContactsService;
@Autowired
private ICusBankService cusBankService;
@Autowired
private SnowflakeIdGenerator snowflakeIdGenerator;
/**
* 导入客户及联系人信息
@ -46,13 +49,9 @@ public class CusImportServiceImpl implements ICusImportService {
// 先打印所有sheet页名称
Workbook workbook = new XSSFWorkbook(file.getInputStream());
int numberOfSheets = workbook.getNumberOfSheets();
System.out.println("总共有 " + numberOfSheets + " 个sheet页");
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
System.out.println("Sheet " + i + " 名称: " + sheet.getSheetName());
}
// 关闭workbook
workbook.close();
// 重新获取输入流用于数据读取
@ -87,13 +86,14 @@ public class CusImportServiceImpl implements ICusImportService {
// 使用Map按客户代码分组保留每个客户的所有联系人信息
Map<String, List<CusImportDTO>> customerGroupMap = cusList.stream()
.collect(Collectors.groupingBy(CusImportDTO::getCusCode));
.collect(Collectors.groupingBy(CusImportDTO::getFullName));
// 准备批量插入的集合
List<CusMain> cusMainList = new ArrayList<>();
List<CusCompany> cusCompanyList = new ArrayList<>();
List<CusManager> cusManagerList = new ArrayList<>();
List<CusContacts> cusContactsList = new ArrayList<>();
List<CusBank> cusBankList = new ArrayList<>();
// 遍历每个客户的联系人列表只保存一次客户信息但保存所有联系人
for (Map.Entry<String, List<CusImportDTO>> entry : customerGroupMap.entrySet()) {
List<CusImportDTO> customerContacts = entry.getValue();
@ -103,9 +103,10 @@ public class CusImportServiceImpl implements ICusImportService {
// 取第一个联系人记录作为客户基本信息因为同一客户的基本信息是重复的
CusImportDTO customerInfo = customerContacts.get(0);
// 为客户提供UUID
String customerId = UUID.randomUUID().toString();
// 保存客户主表信息 CusMain
String customerId = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
// 提取客户主表信息 CusMain
CusMain customer = new CusMain();
//绑定客户id
customer.setId(customerId);
customer.setCusCode(customerInfo.getCusCode());
customer.setFullName(customerInfo.getFullName());
@ -121,8 +122,9 @@ public class CusImportServiceImpl implements ICusImportService {
customer.setRemark(customerInfo.getCusRemark());
cusMainList.add(customer);
// 保存客户公司信息表 CusCompany
// 提取客户公司信息表 CusCompany
CusCompany companyInfo = new CusCompany();
//绑定客户id
companyInfo.setCusId(customerId);
companyInfo.setCusFrom(customerInfo.getCusSource());
companyInfo.setCusLevel(customerInfo.getCusLevel());
@ -132,8 +134,9 @@ public class CusImportServiceImpl implements ICusImportService {
companyInfo.setCreateTime(new Date());
cusCompanyList.add(companyInfo);
// 保存客户管理信息表 CusManager
// 提取客户管理信息表 CusManager
CusManager managementInfo = new CusManager();
//绑定客户id
managementInfo.setCusId(customerId);
managementInfo.setUserName(customerInfo.getUserName());
managementInfo.setFollowStep(customerInfo.getFollowStep());
@ -144,9 +147,11 @@ public class CusImportServiceImpl implements ICusImportService {
managementInfo.setCreateTime(new Date());
cusManagerList.add(managementInfo);
// 收集该客户的所有联系人信息 CusContacts
// 提取客户的所有联系人信息 CusContacts
for (CusImportDTO contact : customerContacts) {
CusContacts customerContact = new CusContacts();
customerContact.setId(snowflakeIdGenerator.generateId());
//绑定客户id
customerContact.setCusId(customerId);
customerContact.setName(contact.getName());
customerContact.setNickName(contact.getNickName());
@ -159,26 +164,49 @@ public class CusImportServiceImpl implements ICusImportService {
customerContact.setCreateTime(new Date());
cusContactsList.add(customerContact);
}
//提取银行信息
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 (!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;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSON;
@ -266,4 +268,60 @@ public class CusMainServiceImpl extends ServiceImpl<CusMainMapper,CusMain> impl
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);
}
}
}