package com.ruoyi.basic.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.CustomerMapper; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.service.ICustomerService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.security.LoginUser; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** * 客户档案Service业务层处理 * * @author ruoyi * @date 2025-05-07 */ @Service @AllArgsConstructor @Slf4j public class CustomerServiceImpl extends ServiceImpl implements ICustomerService { private CustomerMapper customerMapper; /** * 查询客户档案 * * @param id 客户档案主键 * @return 客户档案 */ @Override public Customer selectCustomerById(Long id) { return customerMapper.selectById(id); } /** * 查询客户档案列表 * * @param customer 客户档案 * @return 客户档案 */ @Override public IPage selectCustomerList(Page page, Customer customer) { // 1. 处理空值场景(参数校验) if (page == null) { page = Page.of(1, 10); // 默认第1页,每页10条数据 } if (customer == null) { customer = new Customer(); // 避免空对象导致的NPE } // 2. 构建查询条件(增强空值安全) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); String customerName = customer.getCustomerName(); if (StringUtils.isNotBlank(customerName)) { queryWrapper.like(Customer::getCustomerName, customerName); } // 3. 执行分页查询(保留分页元数据) IPage customerPage = customerMapper.selectPage(page, queryWrapper); // 4. 数据处理(增强空值安全 & 代码可读性) List processedList = customerPage.getRecords().stream() .filter(Objects::nonNull) // 过滤空对象(避免后续操作NPE) .peek(c -> { // 安全获取字段,避免null值拼接 String address = StringUtils.defaultString(c.getCompanyAddress(), ""); String phone = StringUtils.defaultString(c.getCompanyPhone(), ""); c.setAddressPhone(address + "(" + phone + ")"); // 优化字符串拼接 }) .collect(Collectors.toList()); // 5. 更新分页结果中的数据(保持分页信息完整) customerPage.setRecords(processedList); return customerPage; // 返回包含分页信息的IPage对象 } /** * 新增客户档案 * * @param customer 客户档案 * @return 结果 */ @Override public int insertCustomer(Customer customer) { LoginUser loginUser = SecurityUtils.getLoginUser(); Integer tenantId = loginUser.getTenantId(); customer.setTenantId(Long.valueOf(tenantId)); return customerMapper.insert(customer); } /** * 修改客户档案 * * @param customer 客户档案 * @return 结果 */ @Override public int updateCustomer(Customer customer) { LoginUser loginUser = SecurityUtils.getLoginUser(); Integer tenantId = loginUser.getTenantId(); customer.setTenantId(Long.valueOf(tenantId)); return customerMapper.updateById(customer); } /** * 批量删除客户档案 * * @param ids 需要删除的客户档案主键 * @return 结果 */ @Override public int deleteCustomerByIds(Long[] ids) { List idList = Arrays.asList(ids); return customerMapper.deleteBatchIds(idList); } @Override public List selectCustomerListByIds(Long[] ids) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(Customer::getId, Arrays.asList(ids)); return customerMapper.selectList(queryWrapper); } @Override public List selectCustomerLists(Customer customer) { return customerMapper.selectList(null); } @Override public List> customerList(Customer customer) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); queryWrapper.select(Customer::getId, Customer::getCustomerName, Customer::getTaxpayerIdentificationNumber); // 获取原始查询结果 List> result = customerMapper.selectMaps(queryWrapper); // 将下划线命名转换为驼峰命名 return result.stream().map(map -> map.entrySet().stream() .collect(Collectors.toMap( entry -> underlineToCamel(entry.getKey()), Map.Entry::getValue)) ).collect(Collectors.toList()); } /** * 下划线命名转驼峰命名 */ private String underlineToCamel(String param) { if (param == null || "".equals(param.trim())) { return ""; } int len = param.length(); StringBuilder sb = new StringBuilder(len); for (int i = 0; i < len; i++) { char c = param.charAt(i); if (c == '_') { if (++i < len) { sb.append(Character.toUpperCase(param.charAt(i))); } } else { sb.append(Character.toLowerCase(c)); } } return sb.toString(); } }