gongchunyi
5 天以前 41b041d72e7451595f9d3e2c25549e57444164fa
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -13,16 +13,13 @@
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.basic.pojo.CustomerFollowUp;
import com.ruoyi.basic.pojo.CustomerFollowUpFile;
import com.ruoyi.basic.service.CustomerFollowUpFileService;
import com.ruoyi.basic.service.CustomerFollowUpService;
import com.ruoyi.basic.service.CustomerReturnVisitService;
import com.ruoyi.basic.service.ICustomerService;
import com.ruoyi.basic.pojo.CustomerRegions;
import com.ruoyi.basic.service.*;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.pojo.SalesLedger;
import lombok.AllArgsConstructor;
@@ -58,6 +55,8 @@
    private CustomerFollowUpFileService customerFollowUpFileService;
    private CustomerReturnVisitService customerReturnVisitService;
    private final ICustomerRegionsService customerRegionsService;
    /**
     * 查询客户档案
@@ -110,69 +109,87 @@
            dto.setFollowUpList(followUpDtoList);
        }
        //  地区名称
        CustomerRegions customerRegions = customerRegionsService.getById(customer.getRegionsId());
        dto.setRegionsName(customerRegions.getRegionsName());
        return dto;
    }
    /**
     * 查询客户档案列表
     *
     * @param customer 客户档案
     * @return 客户档案
     * @param page     分页对象
     * @param customer 客户查询条件
     * @return 客户档案分页列表
     */
    @Override
    public IPage<Customer> selectCustomerList(Page<Customer> page, Customer customer) {
        // 1. 处理空值场景(参数校验)
        if (page == null) {
            page = Page.of(1, 10); // 默认第1页,每页10条数据
        }
        if (customer == null) {
            customer = new Customer(); // 避免空对象导致的NPE
        }
    public IPage<CustomerDto> selectCustomerList(Page<Customer> page, Customer customer) {
        if (page == null) page = Page.of(1, 10);
        if (customer == null) customer = new Customer();
        // 2. 构建查询条件(增强空值安全)
        LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
        String customerName = customer.getCustomerName();
        String customerType = customer.getCustomerType();
        Long regionsId = customer.getRegionsId();
        if (StringUtils.isNotBlank(customerName)) {
            queryWrapper.like(Customer::getCustomerName, customerName);
        }
        if (StringUtils.isNotBlank(customerType)) {
            queryWrapper.like(Customer::getCustomerType, customerType);
            queryWrapper.eq(Customer::getCustomerType, customerType);
        }
        // 3. 执行分页查询(保留分页元数据)
        if (regionsId != null) {
            // 调用 regionsService 获取当前地区及其所有后代的 ID 集合
            List<Long> allRegionsIds = customerRegionsService.regionsChildrenIds(regionsId);
            if (!CollectionUtils.isEmpty(allRegionsIds)) {
                queryWrapper.in(Customer::getRegionsId, allRegionsIds);
            } else {
                queryWrapper.eq(Customer::getRegionsId, regionsId);
            }
        }
        IPage<Customer> customerPage = customerMapper.selectPage(page, queryWrapper);
        // 4. 数据处理(增强空值安全 & 代码可读性)
        List<Customer> processedList = customerPage.getRecords().stream()
                .filter(Objects::nonNull) // 过滤空对象(避免后续操作NPE)
                .peek(c -> {
                    // 安全获取字段,避免null值拼接
        List<CustomerDto> dtoList = customerPage.getRecords().stream()
                .filter(Objects::nonNull)
                .map(c -> {
                    CustomerDto dto = new CustomerDto();
                    BeanUtils.copyProperties(c, dto);
                    // 地址电话拼接
                    String address = StringUtils.defaultString(c.getCompanyAddress(), "");
                    String phone = StringUtils.defaultString(c.getCompanyPhone(), "");
                    c.setAddressPhone(address + "(" + phone + ")");
                    dto.setAddressPhone(address + "(" + phone + ")");
                    // 填充地区名称
                    if (c.getRegionsId() != null) {
                        CustomerRegions regions = customerRegionsService.getById(c.getRegionsId());
                        if (regions != null) {
                            dto.setRegionsName(regions.getRegionsName());
                        }
                    }
                    // 查询最新的跟进记录
                    CustomerFollowUp followUp = customerFollowUpService.getOne(
                            new LambdaQueryWrapper<CustomerFollowUp>()
                                    .eq(CustomerFollowUp::getCustomerId, c.getId())
                                    .orderByDesc(CustomerFollowUp::getFollowUpTime)
                                    .last("LIMIT 1")
                    );
                    if (followUp != null) {
                        c.setFollowUpLevel(followUp.getFollowUpLevel());
                        c.setFollowUpTime(followUp.getFollowUpTime());
                    }
//                    CustomerFollowUp followUp = customerFollowUpService.getOne(
//                            new LambdaQueryWrapper<CustomerFollowUp>()
//                                    .eq(CustomerFollowUp::getCustomerId, c.getId())
//                                    .orderByDesc(CustomerFollowUp::getFollowUpTime)
//                                    .last("LIMIT 1")
//                    );
//
//                    if (followUp != null) {
//                        dto.setFollowUpLevel(followUp.getFollowUpLevel());
//                        dto.setFollowUpTime(Date.from(followUp.getFollowUpTime().atZone(ZoneId.systemDefault()).toInstant()));
//                    }
                    return dto;
                })
                .collect(Collectors.toList());
        // 5. 更新分页结果中的数据(保持分页信息完整)
        IPage<Customer> resultPage = new Page<>(customerPage.getCurrent(), customerPage.getSize(), customerPage.getTotal());
        resultPage.setRecords(processedList);
        IPage<CustomerDto> resultPage = new Page<>(customerPage.getCurrent(), customerPage.getSize(), customerPage.getTotal());
        resultPage.setRecords(dtoList);
        return customerPage; // 返回包含分页信息的IPage对象
        return resultPage;
    }
    /**