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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录