客户统计的代码框架
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
package com.rj.service.impl;
|
||||
|
||||
import com.rj.entity.CustomerManagementStatistics;
|
||||
import com.rj.mapper.CustomerManagementStatisticsMapper;
|
||||
import com.rj.service.ICustomerManagementStatisticsService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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 {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int generateStatisticsByDate(LocalDate date) {
|
||||
// 先删除该日期的统计数据(如果存在)
|
||||
baseMapper.deleteByStatisticsDate(date);
|
||||
|
||||
// 查询该日期的经销商客户统计数据
|
||||
List<Map<String, Object>> dealershipStatsList = baseMapper.getDealershipStatisticsByDate(date);
|
||||
|
||||
// 查询该日期的销售客户统计数据
|
||||
List<Map<String, Object>> salesStatsList = baseMapper.getSalesStatisticsByDate(date);
|
||||
|
||||
// 查询该日期的项目客户统计数据
|
||||
List<Map<String, Object>> projectStatsList = baseMapper.getProjectStatisticsByDate(date);
|
||||
|
||||
int count = 0;
|
||||
|
||||
// 处理经销商统计数据
|
||||
for (Map<String, Object> stat : dealershipStatsList) {
|
||||
CustomerManagementStatistics statistics = new CustomerManagementStatistics();
|
||||
|
||||
// 设置经销商信息
|
||||
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 countByDealershipObj = stat.get("count_by_dealership");
|
||||
if (countByDealershipObj != null) {
|
||||
statistics.setCountByDealership(Integer.valueOf(countByDealershipObj.toString()));
|
||||
} else {
|
||||
statistics.setCountByDealership(0);
|
||||
}
|
||||
|
||||
// 查找该经销商对应的销售统计数据
|
||||
String dealershipId = dealershipIdObj != null ? dealershipIdObj.toString() : "";
|
||||
Map<String, Object> salesStat = findSalesStatByDealership(salesStatsList, dealershipId);
|
||||
|
||||
if (salesStat != null) {
|
||||
// 设置销售信息
|
||||
Object salesIdObj = salesStat.get("sales_id");
|
||||
statistics.setSalesId(salesIdObj != null ? salesIdObj.toString() : "");
|
||||
|
||||
// 设置销售统计数量
|
||||
Object countBySalesObj = salesStat.get("count_by_sales");
|
||||
if (countBySalesObj != null) {
|
||||
statistics.setCountBySales(Integer.valueOf(countBySalesObj.toString()));
|
||||
} else {
|
||||
statistics.setCountBySales(0);
|
||||
}
|
||||
} else {
|
||||
// 如果没有找到对应的销售数据,设置为空
|
||||
statistics.setSalesId("");
|
||||
statistics.setCountBySales(0);
|
||||
}
|
||||
|
||||
// 查找该经销商和销售对应的项目统计数据
|
||||
Map<String, Object> projectStat = findProjectStat(projectStatsList, dealershipId, statistics.getSalesId());
|
||||
|
||||
if (projectStat != null) {
|
||||
// 设置项目统计数量
|
||||
Object countByProjectObj = projectStat.get("count_by_project");
|
||||
if (countByProjectObj != null) {
|
||||
statistics.setCountByProject(Integer.valueOf(countByProjectObj.toString()));
|
||||
} else {
|
||||
statistics.setCountByProject(0);
|
||||
}
|
||||
} else {
|
||||
statistics.setCountByProject(0);
|
||||
}
|
||||
|
||||
// 设置统计日期和时间
|
||||
statistics.setStatisticsDate(date);
|
||||
statistics.setCreatedAt(LocalDateTime.now());
|
||||
statistics.setUpdatedAt(LocalDateTime.now());
|
||||
|
||||
// 保存统计记录
|
||||
save(statistics);
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据经销商ID查找对应的销售统计数据
|
||||
* @param salesStatsList 销售统计列表
|
||||
* @param dealershipId 经销商ID
|
||||
* @return 销售统计数据
|
||||
*/
|
||||
private Map<String, Object> findSalesStatByDealership(List<Map<String, Object>> salesStatsList, String dealershipId) {
|
||||
// 这里需要根据业务逻辑来确定经销商和销售的对应关系
|
||||
// 由于原始数据中可能没有直接的关联关系,这里返回第一个销售数据作为示例
|
||||
// 实际使用时需要根据具体的业务逻辑来调整
|
||||
if (!salesStatsList.isEmpty()) {
|
||||
return salesStatsList.get(0);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据经销商ID和销售ID查找对应的项目统计数据
|
||||
* @param projectStatsList 项目统计列表
|
||||
* @param dealershipId 经销商ID
|
||||
* @param salesId 销售ID
|
||||
* @return 项目统计数据
|
||||
*/
|
||||
private Map<String, Object> findProjectStat(List<Map<String, Object>> projectStatsList, String dealershipId, String salesId) {
|
||||
for (Map<String, Object> projectStat : projectStatsList) {
|
||||
Object projectDealershipId = projectStat.get("dealership_id");
|
||||
Object projectSalesId = projectStat.get("sales_id");
|
||||
|
||||
if (dealershipId != null && dealershipId.equals(projectDealershipId != null ? projectDealershipId.toString() : "") &&
|
||||
salesId != null && salesId.equals(projectSalesId != null ? projectSalesId.toString() : "")) {
|
||||
return projectStat;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user