diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusBankService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusBankService.java index c53ba90..be7239b 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusBankService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusBankService.java @@ -1,6 +1,7 @@ package com.ruoyi.cus.service; 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; @@ -8,11 +9,20 @@ import com.ruoyi.cus.domain.CusBank; /** * 客户银行资料Service接口 - * + * * @author vinjor-m * @date 2025-11-03 */ -public interface ICusBankService extends IService -{ +public interface ICusBankService extends IService { IPage queryListPage(CusBank pageReqVO, Page page); + + /** + * 批量保存银行卡信息 + * + * @param cusBankList 银行集合 + * @return void + * @author PQZ + * @date 15:58 2025/11/20 + **/ + void saveOrUpdateByAccount(List cusBankList); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusCompanyService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusCompanyService.java index 0350655..459f298 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusCompanyService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusCompanyService.java @@ -1,6 +1,7 @@ package com.ruoyi.cus.service; 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; @@ -8,11 +9,20 @@ import com.ruoyi.cus.domain.CusCompany; /** * 客户公司信息Service接口 - * + * * @author vinjor-m * @date 2025-11-03 */ -public interface ICusCompanyService extends IService -{ +public interface ICusCompanyService extends IService { IPage queryListPage(CusCompany pageReqVO, Page page); + + /** + * 批量保存客户公司信息 + * + * @param cusCompanyList 客户公司信息集合 + * @return void + * @author PQZ + * @date 15:15 2025/11/20 + **/ + void saveOrUpdateByCusName(List cusCompanyList); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusContactsService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusContactsService.java index 76704ab..04e86c5 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusContactsService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusContactsService.java @@ -1,6 +1,7 @@ package com.ruoyi.cus.service; 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; @@ -8,11 +9,10 @@ import com.ruoyi.cus.domain.CusContacts; /** * 客户联系人Service接口 - * + * * @author vinjor-m * @date 2025-11-03 */ -public interface ICusContactsService extends IService -{ +public interface ICusContactsService extends IService { IPage queryListPage(CusContacts pageReqVO, Page page); } 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 faa9cd1..2c0ae86 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 @@ -65,7 +65,7 @@ public interface ICusMainService extends IService { /** * 通过名称保存客户主表信息 * - * @param cusMainList TODO + * @param cusMainList 客户信息集合 * @return void * @author PQZ * @date 14:44 2025/11/20 diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusManagerService.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusManagerService.java index 6662dd0..d76ed90 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusManagerService.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/ICusManagerService.java @@ -1,6 +1,7 @@ package com.ruoyi.cus.service; 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; @@ -8,11 +9,20 @@ import com.ruoyi.cus.domain.CusManager; /** * 客户管理信息Service接口 - * + * * @author vinjor-m * @date 2025-11-03 */ -public interface ICusManagerService extends IService -{ +public interface ICusManagerService extends IService { IPage queryListPage(CusManager pageReqVO, Page page); + + /** + * 批量保存客户管理信息 + * + * @param cusManagerList 客户管理信息集合 + * @return void + * @author PQZ + * @date 15:15 2025/11/20 + **/ + void saveOrUpdateByCusName(List cusManagerList); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusBankServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusBankServiceImpl.java index ccd6fc1..4e837d4 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusBankServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusBankServiceImpl.java @@ -1,27 +1,33 @@ package com.ruoyi.cus.service.impl; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.DlBaseEntity; +import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cus.mapper.CusBankMapper; import com.ruoyi.cus.domain.CusBank; import com.ruoyi.cus.service.ICusBankService; +import org.springframework.transaction.annotation.Transactional; /** * 客户银行资料Service业务层处理 - * + * * @author vinjor-m * @date 2025-11-03 */ @Service -public class CusBankServiceImpl extends ServiceImpl implements ICusBankService -{ +public class CusBankServiceImpl extends ServiceImpl implements ICusBankService { @Autowired private CusBankMapper cusBankMapper; @@ -29,4 +35,67 @@ public class CusBankServiceImpl extends ServiceImpl impl public IPage queryListPage(CusBank pageReqVO, Page page) { return cusBankMapper.queryListPage(pageReqVO, page); } + + + /** + * 根据银行账号保存或更新客户银行信息 + * + * @param cusBankList 客户银行信息列表 + * @author lingma + * @date 2025/11/20 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdateByAccount(List cusBankList) { + if (cusBankList == null || cusBankList.isEmpty()) { + return; + } + + // 1. 提取所有有效的 bankAccount 并去重 + List bankAccounts = cusBankList.stream() + .map(CusBank::getBankAccount) + .filter(StringUtils::isNotEmpty) + .distinct() + .collect(Collectors.toList()); + + // 2. 查询数据库中已有的银行信息 + Map existingBankMap = new HashMap<>(); + if (!bankAccounts.isEmpty()) { + List existingBanks = this.list(new LambdaQueryWrapper() + .in(CusBank::getBankAccount, bankAccounts)); + existingBankMap = existingBanks.stream() + .collect(Collectors.toMap(CusBank::getBankAccount, Function.identity())); + } + + // 3. 分离需要新增和更新的数据 + List toSaveList = new ArrayList<>(); + List toUpdateList = new ArrayList<>(); + + for (CusBank bank : cusBankList) { + if (StringUtils.isEmpty(bank.getBankAccount())) { + continue; // 忽略没有 bankAccount 的数据 + } + + CusBank existing = existingBankMap.get(bank.getBankAccount()); + if (existing != null) { + // 存在就更新 + bank.setId(existing.getId()); + //保留原来的客户id + bank.setCusId(existing.getCusId()); + toUpdateList.add(bank); + } else { + // 不存在就新增 + toSaveList.add(bank); + } + } + + // 4. 批量保存与更新 + if (!toSaveList.isEmpty()) { + this.saveBatch(toSaveList); + } + if (!toUpdateList.isEmpty()) { + this.updateBatchById(toUpdateList); + } + } + } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusCompanyServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusCompanyServiceImpl.java index 5184a56..2ffa60b 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusCompanyServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusCompanyServiceImpl.java @@ -1,24 +1,32 @@ package com.ruoyi.cus.service.impl; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cus.mapper.CusCompanyMapper; import com.ruoyi.cus.domain.CusCompany; import com.ruoyi.cus.service.ICusCompanyService; +import org.springframework.transaction.annotation.Transactional; /** * 客户公司信息Service业务层处理 - * + * * @author vinjor-m * @date 2025-11-03 */ @Service -public class CusCompanyServiceImpl extends ServiceImpl implements ICusCompanyService -{ +public class CusCompanyServiceImpl extends ServiceImpl implements ICusCompanyService { @Autowired private CusCompanyMapper cusCompanyMapper; @@ -26,4 +34,67 @@ public class CusCompanyServiceImpl extends ServiceImpl queryListPage(CusCompany pageReqVO, Page page) { return cusCompanyMapper.queryListPage(pageReqVO, page); } + + /** + * 批量保存客户公司信息 + * + * @param cusCompanyList 客户公司信息集合 + * @return void + * @author PQZ + * @date 15:15 2025/11/20 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdateByCusName(List cusCompanyList) { + if (cusCompanyList == null || cusCompanyList.isEmpty()) { + return; + } + + // 1. 提取所有有效的 cusName 并去重 + List cusNames = cusCompanyList.stream() + .map(CusCompany::getCusName) + .filter(StringUtils::isNotEmpty) + .distinct() + .collect(Collectors.toList()); + + // 2. 查询数据库中已有的公司信息 + Map existingCompanyMap = new HashMap<>(); + if (!cusNames.isEmpty()) { + List existingCompanies = this.list(new LambdaQueryWrapper() + .in(CusCompany::getCusName, cusNames)); + existingCompanyMap = existingCompanies.stream() + .collect(Collectors.toMap(CusCompany::getCusName, Function.identity())); + } + + // 3. 分离需要新增和更新的数据 + List toSaveList = new ArrayList<>(); + List toUpdateList = new ArrayList<>(); + + for (CusCompany company : cusCompanyList) { + if (StringUtils.isEmpty(company.getCusName())) { + continue; // 忽略没有 cusName 的数据 + } + + CusCompany existing = existingCompanyMap.get(company.getCusName()); + if (existing != null) { + // 存在就更新 + company.setId(existing.getId()); + //保留原来的客户id + company.setCusId(existing.getCusId()); + toUpdateList.add(company); + } else { + // 不存在就新增 + toSaveList.add(company); + } + } + + // 4. 批量保存与更新 + if (!toSaveList.isEmpty()) { + this.saveBatch(toSaveList); + } + if (!toUpdateList.isEmpty()) { + this.updateBatchById(toUpdateList); + } + } + } 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 031121c..66424ca 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 @@ -126,6 +126,7 @@ public class CusImportServiceImpl implements ICusImportService { CusCompany companyInfo = new CusCompany(); //绑定客户id companyInfo.setCusId(customerId); + companyInfo.setCusName(customerInfo.getFullName()); companyInfo.setCusFrom(customerInfo.getCusSource()); companyInfo.setCusLevel(customerInfo.getCusLevel()); companyInfo.setBusiType(customerInfo.getBusinessType()); @@ -138,6 +139,7 @@ public class CusImportServiceImpl implements ICusImportService { CusManager managementInfo = new CusManager(); //绑定客户id managementInfo.setCusId(customerId); + managementInfo.setCusName(customerInfo.getFullName()); managementInfo.setUserName(customerInfo.getUserName()); managementInfo.setFollowStep(customerInfo.getFollowStep()); managementInfo.setSeasReason(customerInfo.getSeasReason()); @@ -153,6 +155,7 @@ public class CusImportServiceImpl implements ICusImportService { customerContact.setId(snowflakeIdGenerator.generateId()); //绑定客户id customerContact.setCusId(customerId); + customerContact.setCusName(contact.getFullName()); customerContact.setName(contact.getName()); customerContact.setNickName(contact.getNickName()); customerContact.setEmail(contact.getEmail()); @@ -171,6 +174,7 @@ public class CusImportServiceImpl implements ICusImportService { CusBank bankInfo = new CusBank(); //绑定客户id bankInfo.setCusId(customerId); + bankInfo.setCusName(bank.getCusName()); bankInfo.setBankAccount(bank.getBankAccount()); bankInfo.setBankName(bank.getBankName()); bankInfo.setCurrency(bank.getCurrency()); @@ -187,15 +191,15 @@ public class CusImportServiceImpl implements ICusImportService { // 批量保存客户主表信息 if (!cusMainList.isEmpty()) { - cusMainService.saveBatch(cusMainList); + cusMainService.saveOrUpdateByCusName(cusMainList); } // 批量保存客户公司信息表 if (!cusCompanyList.isEmpty()) { - cusCompanyService.saveBatch(cusCompanyList); + cusCompanyService.saveOrUpdateByCusName(cusCompanyList); } // 批量保存客户管理信息表 if (!cusManagerList.isEmpty()) { - cusManagerService.saveBatch(cusManagerList); + cusManagerService.saveOrUpdateByCusName(cusManagerList); } // 批量保存客户联系人信息 if (!cusContactsList.isEmpty()) { @@ -203,7 +207,7 @@ public class CusImportServiceImpl implements ICusImportService { } //批量保存银行账户信息 if (!cusBankList.isEmpty()) { - cusBankService.saveBatch(cusBankList); + cusBankService.saveOrUpdateByAccount(cusBankList); } diff --git a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusManagerServiceImpl.java b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusManagerServiceImpl.java index 28bd32a..b2b36c5 100644 --- a/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusManagerServiceImpl.java +++ b/dl_admin/ruoyi-admin/src/main/java/com/ruoyi/cus/service/impl/CusManagerServiceImpl.java @@ -1,24 +1,32 @@ package com.ruoyi.cus.service.impl; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cus.mapper.CusManagerMapper; import com.ruoyi.cus.domain.CusManager; import com.ruoyi.cus.service.ICusManagerService; +import org.springframework.transaction.annotation.Transactional; /** * 客户管理信息Service业务层处理 - * + * * @author vinjor-m * @date 2025-11-03 */ @Service -public class CusManagerServiceImpl extends ServiceImpl implements ICusManagerService -{ +public class CusManagerServiceImpl extends ServiceImpl implements ICusManagerService { @Autowired private CusManagerMapper cusManagerMapper; @@ -26,4 +34,68 @@ public class CusManagerServiceImpl extends ServiceImpl queryListPage(CusManager pageReqVO, Page page) { return cusManagerMapper.queryListPage(pageReqVO, page); } + + /** + * 批量保存客户管理信息 + * + * @param cusManagerList 客户管理信息集合 + * @return void + * @author PQZ + * @date 15:15 2025/11/20 + **/ + @Override + @Transactional(rollbackFor = Exception.class) + public void saveOrUpdateByCusName(List cusManagerList) { + if (cusManagerList == null || cusManagerList.isEmpty()) { + return; + } + // 1. 提取所有有效的 cusName 并去重 + List cusNames = cusManagerList.stream() + .map(CusManager::getCusName) + .filter(StringUtils::isNotEmpty) + .distinct() + .collect(Collectors.toList()); + + // 2. 查询数据库中已有的管理信息 + Map existingManagerMap = new HashMap<>(); + if (!cusNames.isEmpty()) { + List existingManagers = this.list(new LambdaQueryWrapper() + .in(CusManager::getCusName, cusNames)); + existingManagerMap = existingManagers.stream() + .collect(Collectors.toMap(CusManager::getCusName, Function.identity())); + } + + // 3. 分离需要新增和更新的数据 + List toSaveList = new ArrayList<>(); + List toUpdateList = new ArrayList<>(); + + for (CusManager manager : cusManagerList) { + if (StringUtils.isEmpty(manager.getCusName())) { + continue; // 忽略没有 cusName 的数据 + } + + CusManager existing = existingManagerMap.get(manager.getCusName()); + if (existing != null) { + // 存在就更新 + manager.setId(existing.getId()); + //保留原来的客户id + manager.setCusId(existing.getCusId()); + toUpdateList.add(manager); + } else { + // 不存在就新增 + toSaveList.add(manager); + } + } + + // 4. 批量保存与更新 + if (!toSaveList.isEmpty()) { + this.saveBatch(toSaveList); + } + if (!toUpdateList.isEmpty()) { + this.updateBatchById(toUpdateList); + } + } + + + }