From 308248fbc45191777fbf7427ef34f8168dfd9635 Mon Sep 17 00:00:00 2001 From: PQZ Date: Thu, 20 Nov 2025 15:12:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E4=BD=93=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/cus/domain/CusBank.java | 4 + .../java/com/ruoyi/cus/domain/CusCompany.java | 4 + .../com/ruoyi/cus/domain/CusContacts.java | 4 + .../java/com/ruoyi/cus/domain/CusManager.java | 4 + .../com/ruoyi/cus/dto/CusBankImportDTO.java | 29 ++++--- .../ruoyi/cus/service/ICusMainService.java | 43 ++++++---- .../service/impl/CusImportServiceImpl.java | 82 +++++++++++++------ .../cus/service/impl/CusMainServiceImpl.java | 58 +++++++++++++ 8 files changed, 177 insertions(+), 51 deletions(-) diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusBank.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusBank.java index f78788e..ebb6f2c 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusBank.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusBank.java @@ -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; diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusCompany.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusCompany.java index 09d24ca..1d39fa5 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusCompany.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusCompany.java @@ -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; diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusContacts.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusContacts.java index d99d06c..b412daf 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusContacts.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusContacts.java @@ -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; diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusManager.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusManager.java index 0bb4aa1..a90ee5d 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusManager.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/domain/CusManager.java @@ -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; diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java index a13de66..cc973b6 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/dto/CusBankImportDTO.java @@ -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; + + + + + + + + + } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusMainService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusMainService.java index 9061d19..faa9cd1 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusMainService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusMainService.java @@ -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; @@ -14,48 +15,62 @@ import com.ruoyi.cus.vo.ViewTimeVO; /** * 客户信息Service接口 - * + * * @author vinjor-m * @date 2025-11-03 */ -public interface ICusMainService extends IService -{ +public interface ICusMainService extends IService { IPage queryListPage(MainVO pageReqVO, Page 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 cusMainList); + + } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java index 18940c4..031121c 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusImportServiceImpl.java @@ -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> customerGroupMap = cusList.stream() - .collect(Collectors.groupingBy(CusImportDTO::getCusCode)); + .collect(Collectors.groupingBy(CusImportDTO::getFullName)); // 准备批量插入的集合 List cusMainList = new ArrayList<>(); List cusCompanyList = new ArrayList<>(); List cusManagerList = new ArrayList<>(); List cusContactsList = new ArrayList<>(); + List cusBankList = new ArrayList<>(); // 遍历每个客户的联系人列表,只保存一次客户信息,但保存所有联系人 for (Map.Entry> entry : customerGroupMap.entrySet()) { List 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); } - // 批量保存客户主表信息 - 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); + } + + } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusMainServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusMainServiceImpl.java index 331e93a..e931581 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusMainServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusMainServiceImpl.java @@ -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 impl return cusViewVO; } + /** + * 通过名称保存客户主表信息 + * + * @param cusMainList List + * @return void + * @author PQZ + * @date 14:44 2025/11/20 + **/ + @Override + public void saveOrUpdateByCusName(List cusMainList) { + if (cusMainList == null || cusMainList.isEmpty()) { + return; + } + // 提取所有需要处理的 fullName + List fullNames = cusMainList.stream() + .map(CusMain::getFullName) + .filter(StringUtils::isNotEmpty) + .distinct() + .collect(Collectors.toList()); + // 一次性查询数据库中已存在的客户信息 + Map existingCusMap = new HashMap<>(); + if (!fullNames.isEmpty()) { + List existingCusList = this.list( + new LambdaQueryWrapper() + .in(CusMain::getFullName, fullNames) + ); + existingCusMap = existingCusList.stream() + .collect(Collectors.toMap(CusMain::getFullName, Function.identity())); + } + // 分离需要新增和更新的客户 + List toSaveList = new ArrayList<>(); + List 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); + } + } + }