场景:某公司希望对其销售数据进行统计分析以便更好地了解其业务状况。数据涉及7个关联表需要实现年统计、月统计、周统计和日统计功能并能导出统计结果为Excel文件。功能需求:1 销售记录展示带分页功能、模糊查询产品、客户、区域、门店、日期、最近的数据展示在第一条;2 年度销售统计功能按钮;3 月度销售统计功能按钮;4 周度销售统计功能按钮;5 日度销售统计功能按钮;6 统计结果导出为Excel文件。j
import java.util.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class SalesDataAnalysis {
private List<SalesRecord> salesRecords;
public SalesDataAnalysis(List<SalesRecord> salesRecords) {
this.salesRecords = salesRecords;
}
public List<SalesRecord> getSalesRecords() {
return salesRecords;
}
public void setSalesRecords(List<SalesRecord> salesRecords) {
this.salesRecords = salesRecords;
}
// 销售记录展示功能
public List<SalesRecord> displaySalesRecords(int page, String keyword) {
List<SalesRecord> filteredRecords = new ArrayList<>();
// 模糊查询
for (SalesRecord record : salesRecords) {
if (record.getProduct().contains(keyword) ||
record.getCustomer().contains(keyword) ||
record.getRegion().contains(keyword) ||
record.getStore().contains(keyword) ||
record.getDate().contains(keyword)) {
filteredRecords.add(record);
}
}
// 最近的数据展示在第一条
Collections.reverse(filteredRecords);
// 分页功能
int pageSize = 10;
int startIndex = (page - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, filteredRecords.size());
return filteredRecords.subList(startIndex, endIndex);
}
// 年度销售统计功能
public Map<String, Double> calculateYearlySales() {
Map<String, Double> yearlySales = new HashMap<>();
for (SalesRecord record : salesRecords) {
String year = record.getDate().substring(0, 4);
double sales = yearlySales.getOrDefault(year, 0.0);
sales += record.getAmount();
yearlySales.put(year, sales);
}
return yearlySales;
}
// 月度销售统计功能
public Map<String, Double> calculateMonthlySales() {
Map<String, Double> monthlySales = new HashMap<>();
for (SalesRecord record : salesRecords) {
String month = record.getDate().substring(0, 7);
double sales = monthlySales.getOrDefault(month, 0.0);
sales += record.getAmount();
monthlySales.put(month, sales);
}
return monthlySales;
}
// 周度销售统计功能
public Map<String, Double> calculateWeeklySales() {
Map<String, Double> weeklySales = new HashMap<>();
for (SalesRecord record : salesRecords) {
// 计算日期所在周的起始日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(record.getDate());
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
String weekStartDate = String.format("%tF", calendar);
double sales = weeklySales.getOrDefault(weekStartDate, 0.0);
sales += record.getAmount();
weeklySales.put(weekStartDate, sales);
}
return weeklySales;
}
// 日度销售统计功能
public Map<String, Double> calculateDailySales() {
Map<String, Double> dailySales = new HashMap<>();
for (SalesRecord record : salesRecords) {
double sales = dailySales.getOrDefault(record.getDate(), 0.0);
sales += record.getAmount();
dailySales.put(record.getDate(), sales);
}
return dailySales;
}
// 导出统计结果为Excel文件
public void exportToExcel(Map<String, Double> salesData, String filePath) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sales Data");
int rowNum = 0;
for (Map.Entry<String, Double> entry : salesData.entrySet()) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(entry.getKey());
row.createCell(1).setCellValue(entry.getValue());
}
try {
FileOutputStream outputStream = new FileOutputStream(filePath);
workbook.write(outputStream);
workbook.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:上述代码中的SalesRecord类表示销售记录,包含产品、客户、区域、门店、日期和销售金额等属性。请根据实际情况自行定义该类并在SalesDataAnalysis类中使用。另外,还需引入相应的包,如java.util.*、org.apache.poi.ss.usermodel.*和org.apache.poi.xssf.usermodel.*。
原文地址: https://www.cveoy.top/t/topic/jbNm 著作权归作者所有。请勿转载和采集!