Files
smartDriveEE/src/main/java/com/rj/service/impl/CustomerManagementStatisticsServiceImpl.java
2026-02-08 19:42:24 +08:00

169 lines
7.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.rj.service.impl;
import com.rj.entity.CustomerManagementStatistics;
import com.rj.entity.SalesManagement;
import com.rj.mapper.CustomerManagementStatisticsMapper;
import com.rj.service.ICustomerManagementStatisticsService;
import com.rj.service.ISalesManagementService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* <p>
* 客户统计表 服务实现类
* </p>
*
* @author 李中华 ,spllzh
* @since 2025-08-07
*/
@Service
public class CustomerManagementStatisticsServiceImpl extends ServiceImpl<CustomerManagementStatisticsMapper, CustomerManagementStatistics> implements ICustomerManagementStatisticsService {
@Autowired
private ISalesManagementService salesManagementService;
@Override
@Transactional(rollbackFor = Exception.class)
public int generateStatisticsByDate(LocalDate date) {
// 先删除该日期的统计数据(如果存在)
baseMapper.deleteByStatisticsDate(date);
// 查询该日期的统计数据(按租户、经销商、项目、销售分组)
List<Map<String, Object>> statsList = baseMapper.getStatisticsByDate(date);
int count = 0;
// 处理统计数据,每个组合生成一条记录
for (Map<String, Object> stat : statsList) {
CustomerManagementStatistics statistics = new CustomerManagementStatistics();
// 设置租户ID
Object tenantIdObj = stat.get("tenant_id");
statistics.setTenantId(tenantIdObj != null ? tenantIdObj.toString() : "");
// 设置经销商信息
Object dealershipIdObj = stat.get("dealership_id");
statistics.setDealershipId(dealershipIdObj != null ? dealershipIdObj.toString() : "");
Object dealershipNameObj = stat.get("dealership_name");
statistics.setDealershipName(dealershipNameObj != null ? dealershipNameObj.toString() : "未知经销商");
// 设置销售信息
Object salesIdObj = stat.get("sales_id");
statistics.setSalesId(salesIdObj != null ? salesIdObj.toString() : "");
// 设置经销商统计数量(该经销商当天的客户总数)
Object countByDealershipObj = stat.get("count_by_dealership");
if (countByDealershipObj != null) {
statistics.setCountByDealership(Integer.valueOf(countByDealershipObj.toString()));
} else {
statistics.setCountByDealership(0);
}
// 设置销售统计数量(该销售当天的客户总数)
Object countBySalesObj = stat.get("count_by_sales");
if (countBySalesObj != null) {
statistics.setCountBySales(Integer.valueOf(countBySalesObj.toString()));
} else {
statistics.setCountBySales(0);
}
// 设置项目统计数量(该项目当天的客户总数)
Object countByProjectObj = stat.get("count_by_project");
if (countByProjectObj != null) {
statistics.setCountByProject(Integer.valueOf(countByProjectObj.toString()));
} else {
statistics.setCountByProject(0);
}
// 设置统计日期和时间
statistics.setStatisticsDate(date);
statistics.setCreatedAt(LocalDateTime.now());
statistics.setUpdatedAt(LocalDateTime.now());
// 保存统计记录
save(statistics);
count++;
}
return count;
}
@Override
public int generateYesterdayStatistics() {
LocalDate yesterday = LocalDate.now().minusDays(1);
return generateStatisticsByDate(yesterday);
}
@Override
public List<CustomerManagementStatistics> getStatisticsByDateRange(LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<CustomerManagementStatistics> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate)
.orderByAsc(CustomerManagementStatistics::getStatisticsDate)
.orderByAsc(CustomerManagementStatistics::getDealershipId);
return list(queryWrapper);
}
@Override
public List<CustomerManagementStatistics> getStatisticsByDealership(String dealershipId, LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<CustomerManagementStatistics> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CustomerManagementStatistics::getDealershipId, dealershipId)
.between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate)
.orderByAsc(CustomerManagementStatistics::getStatisticsDate);
return list(queryWrapper);
}
@Override
public List<CustomerManagementStatistics> getStatisticsBySales(String salesId, LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<CustomerManagementStatistics> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CustomerManagementStatistics::getSalesId, salesId)
.between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate)
.orderByAsc(CustomerManagementStatistics::getStatisticsDate);
return list(queryWrapper);
}
@Override
public List<CustomerManagementStatistics> getStatisticsBySales(String salesId, String salesPhone, LocalDate startDate, LocalDate endDate) {
LambdaQueryWrapper<CustomerManagementStatistics> queryWrapper = new LambdaQueryWrapper<>();
// 如果提供了电话号码先通过电话号码查询到salesId
String finalSalesId = salesId;
if ((finalSalesId == null || finalSalesId.trim().isEmpty()) &&
salesPhone != null && !salesPhone.trim().isEmpty()) {
// 通过电话号码查询销售人员
LambdaQueryWrapper<SalesManagement> salesQueryWrapper = new LambdaQueryWrapper<>();
salesQueryWrapper.eq(SalesManagement::getLoginAccount, salesPhone);
List<SalesManagement> salesList = salesManagementService.list(salesQueryWrapper);
if (salesList == null || salesList.isEmpty()) {
// 如果没有找到对应的销售人员,返回空列表
return List.of();
}
// 如果找到多个销售人员使用第一个的ID
// 或者可以根据业务需求处理多个销售人员的情况
finalSalesId = salesList.get(0).getId();
}
// 如果最终没有salesId返回空列表
if (finalSalesId == null || finalSalesId.trim().isEmpty()) {
return List.of();
}
// 根据salesId查询统计数据
queryWrapper.eq(CustomerManagementStatistics::getSalesId, finalSalesId)
.between(CustomerManagementStatistics::getStatisticsDate, startDate, endDate)
.orderByAsc(CustomerManagementStatistics::getStatisticsDate);
return list(queryWrapper);
}
}