package com.ruoyi.basic.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.CustomerPrivateDto; import com.ruoyi.basic.mapper.CustomerPrivateMapper; import com.ruoyi.basic.mapper.CustomerPrivatePoolMapper; import com.ruoyi.basic.pojo.CustomerFollowUp; import com.ruoyi.basic.pojo.CustomerPrivate; import com.ruoyi.basic.pojo.CustomerPrivatePool; import com.ruoyi.basic.pojo.CustomerReturnVisit; import com.ruoyi.basic.service.CustomerFollowUpService; import com.ruoyi.basic.service.CustomerPrivateService; import com.ruoyi.basic.service.CustomerReturnVisitService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.pojo.SalesLedger; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.stream.Collectors; /** *

* 客户档案 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-04-17 10:39:09 */ @Service @Transactional(rollbackFor = Exception.class) @RequiredArgsConstructor public class CustomerPrivateServiceImpl extends ServiceImpl implements CustomerPrivateService { private final CustomerPrivatePoolMapper customerPrivatePoolMapper; private final CustomerFollowUpService customerFollowUpService; private final CustomerReturnVisitService customerReturnVisitService; private final SalesLedgerMapper salesLedgerMapper; private final CustomerPrivateMapper customerPrivateMapper; private final CustomerPrivateService customerPrivateService; @Override public Boolean add(CustomerPrivateDto customerPrivateDto) { //新增私海 客户 this.save(customerPrivateDto); //新增私海记录 CustomerPrivatePool customerPrivatePool = new CustomerPrivatePool(); customerPrivatePool.setCustomerId(customerPrivateDto.getId()); customerPrivatePool.setType(0L); customerPrivatePool.setBoundId(SecurityUtils.getLoginUser().getUserId()); customerPrivatePoolMapper.insert(customerPrivatePool); return true; } @Override public Integer delete(List ids) { List customerPrivatePools = customerPrivatePoolMapper.selectList(new QueryWrapper().lambda().in(CustomerPrivatePool::getId, ids)); List salesLedgers = salesLedgerMapper.selectList(new QueryWrapper().lambda().in(SalesLedger::getCustomerId, customerPrivatePools.stream().map(CustomerPrivatePool::getCustomerId).collect(Collectors.toList()))); if (!CollectionUtils.isEmpty(salesLedgers)) { throw new RuntimeException("客户有销售合同,请先删除销售合同"); } if (CollectionUtils.isEmpty(customerPrivatePools)) { throw new RuntimeException("客户不存在"); } customerFollowUpService.remove(new QueryWrapper().lambda().in(CustomerFollowUp::getCustomerPrivatePoolId, customerPrivatePools.stream().map(CustomerPrivatePool::getCustomerId).collect(Collectors.toList()))); customerReturnVisitService.remove(new QueryWrapper().lambda().in(CustomerReturnVisit::getCustomerPrivatePoolId, customerPrivatePools.stream().map(CustomerPrivatePool::getCustomerId).collect(Collectors.toList()))); customerPrivatePools.stream().forEach(customerPrivatePool -> { customerPrivatePool.setDeleteFlag(1); customerPrivatePoolMapper.updateById(customerPrivatePool); }); return 1; } @Override public R importData(MultipartFile file) { try { List existingList = customerPrivateService.list(); java.util.Set existingCustomerNames = existingList.stream() .map(CustomerPrivate::getCustomerName) .collect(Collectors.toSet()); ExcelUtil util = new ExcelUtil(CustomerPrivate.class); List userList = util.importExcel(file.getInputStream()); if (CollectionUtils.isEmpty(userList)) { return R.fail("模板错误或导入数据为空"); } int successCount = 0; int skipCount = 0; for (CustomerPrivate user : userList) { if (existingCustomerNames.contains(user.getCustomerName())) { skipCount++; continue; } CustomerPrivateDto customerPrivateDto = new CustomerPrivateDto(); BeanUtils.copyProperties(user, customerPrivateDto); this.add(customerPrivateDto); existingCustomerNames.add(user.getCustomerName()); successCount++; } return R.ok("导入完成,成功" + successCount + "条,跳过重复" + skipCount + "条"); } catch (Exception e) { e.printStackTrace(); return R.fail("导入失败:" + e.getMessage()); } } }