当前位置: 首页 > 知识库问答 >
问题:

将查询结果的总和作为单独的数据

司空玮
2023-03-14

Etity公司

@Entity
public class DateFMail {

    @Id
    
    private double balance;

    public DateFMail() {
    }

    public DateFMail(double balance) {this.balance = balance;}

    public DateFMail(DateFMail dateFMail) {
    }

    public double getBalance() { return balance;}

    @Override
    public String toString() {
        return "DateFMail{" +
                "balance=" + balance +
                '}';
    }
}

服务

public interface DateFMailService {
    List<DateFMail> findAll();
}

Impl

@服务公共类DateFMailServiceImpl实现DateFMailService{

@Autowired
private DateFMailRepository mailRepository;

@Override
public List<DateFMail> findAll() {
    return mailRepository.findAll();
}

}

存储库

@Repository公共接口DateFMailRepository扩展JpaRepository

@Query(value = "SELECT SUM(balance) \n" +
        "      FROM agents", nativeQuery = true)
List<DateFMail> findAll();

}

邮件分离器

@Service
public class EmailDos {

    @Autowired
    private JavaMailSender mailSender;

     private DateFMailRepository mailRepository;

    String fileDate1 = new SimpleDateFormat("dd.MM.yyyy").format(new Date());

    LocalDate today = LocalDate.now();
    String fileDate = (today.minusDays(1)).format(DateTimeFormatter.ofPattern("dd MMM"));
    String fileDate2 = (today.minusMonths(1)).format(DateTimeFormatter.ofPattern("MMM"));

    public void sendMailSum(String from, String to, String subject, String body, String fileToAttach) throws SQLException {

            List<DateFMail> list = new ArrayList<>(mailRepository.findAll());
            List<DateFMail> list1 = list.stream()
                    .map(DateFMail::new)
                    .collect(Collectors.toList());
       
        System.out.println("sending email...................");
        System.out.println(list1);
        MimeMessagePreparator preparator = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws Exception {
                mimeMessage.setFrom(new InternetAddress(from));
                mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                mimeMessage.setSubject(subject);
                mimeMessage.setText(body);

                FileSystemResource file = new FileSystemResource(new File("C:...xlsx"));
                MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
                helper.setFrom("SomeAddress@gmail.com");
                helper.setTo(InternetAddress.parse("SomeAddress@gmail.com"));  
                helper.setText("Good day!\nIn attachment payments for " + fileDate + " с 12.00-00.00" + "\nAmount for " + fileDate1 + list1);

                helper.addAttachment("...xlsx", file);

                mailSender.send(mimeMessage);
                System.out.println("email Fab was successfully sent.....");
            }
        };

        try {
            mailSender.send(preparator);
        } catch (MailException ex) {
            System.err.println(ex.getMessage());
        }
    }
}

控制器

@Component
public class DateFMailController {

    @Autowired
    private DateFMailService mailService;

    public void saveSum() throws IOException {
        saveExcel(mailService.findAll(), "....xlsx");
    }

    private void saveExcel(List<DateFMail> list, String fileName) throws IOException {

        Workbook workbook = new XSSFWorkbook();
        CreationHelper createHelper = workbook.getCreationHelper();

        Sheet sheet = workbook.createSheet("ECards");
        sheet.autoSizeColumn(0);

        Row header = sheet.createRow(0);

        CellStyle headerStyle = workbook.createCellStyle();
        headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        XSSFFont font = ((XSSFWorkbook) workbook).createFont();
        font.setFontName("Arial");
        font.setFontHeightInPoints((short) 10);
        font.setBold(true);
        headerStyle.setFont(font);

        Cell headerCell = header.createCell(0);
        headerCell.setCellValue("Sum");
        headerCell.setCellStyle(headerStyle);

        CellStyle style = workbook.createCellStyle();
        style.setWrapText(true);

        int ix_row=2;
        for (DateFMail dateFMail : list) {
            Row row = sheet.createRow(ix_row);
            Cell cell = row.createCell(0);
            cell.setCellValue(dateFMail.getBalance());
            cell.setCellStyle(style);

            ix_row++;
        }

        FileOutputStream outputStream = new FileOutputStream(fileName);
        workbook.write(outputStream);
        workbook.close();
    }
}

保存运行程序

@Component
public class SaveCardsStartupRunner implements ApplicationRunner {

    @Autowired
    private ECardController eCardController;
    private DateFMailController controller;
  

//    @Autowired
//    private EmailDos emailDos;

    String fileDate1 = new SimpleDateFormat("dd.MM.yyyy").format(new Date());

    LocalDate today = LocalDate.now();
    String fileDate = (today.minusDays(1)).format(DateTimeFormatter.ofPattern("dd MMM"));
    String fileDate2 = (today.minusMonths(1)).format(DateTimeFormatter.ofPattern("MMM"));

    @Override
    public void run(ApplicationArguments args) throws Exception {
        eCardController.saveCards();
        controller.saveSum();
    }
}

我已经纠正了我的问题。我已经在这里粘贴了所有与我的问题相关的代码。对于初学者,我只想将存储库的查询结果输出到控制台。但在我刚刚发布的表单中,我得到了一个NullPointerException错误,并在代码的一部分中指出:controller。saveSum();-控制器=空。

共有1个答案

鄢承运
2023-03-14

创建PaymentService类,该类应包含方法getTotalPayment。将此类注入EmailSend(提示:请将此类名从EmailSend更改为EmailSender,因为类名应为名词)类。然后在PaymentService类中,您应该与数据存储库类交互。从EmailSend类调用此getTotalPayment方法。

 类似资料:
  • 问题内容: 我有一个报告,显示客户订购的产品及其价格: 我想插入一行来汇总每个公司的订单,如下所示: 这是一些代码,显示了我所拥有的查询的基本结构: 有谁知道如何做到这一点?我在Transact-SQL(Microsoft SQL Server)中编写此代码。 问题答案: 感谢大家的反馈/帮助,至少让我想到了不同的方法。我想出了一些与我使用的SQL Server版本无关的东西(我们的供应商经常更改

  • 问题内容: 我需要编写一个查询,该查询从表中返回汇总和非汇总数据。 下面的示例应有助于阐明我要执行的操作。我有以下(简化)表: 为了便于讨论,假设每个学生都属于一个课程组。我想编写一个查询,该查询将返回如下结果集: student.name,student.weight,weight_apgaw,weight_apgh 在哪里: weight_apgaw: 是单个学生的体重,表示为他/她所属课程组

  • 问题内容: 我正在使用Codeigniter执行分页功能,但我认为这通常适用于PHP / mySQL编码。 我正在使用offset和limit检索目录列表,具体取决于每页要多少结果。但是要知道所需的总页数,我需要知道(结果总数)/(限制)。现在,我正在考虑第二次运行SQL查询,然后计算所需的行数,但不使用LIMIT。但是我认为这似乎是在浪费计算资源。 有没有更好的方法?谢谢! 编辑:我的SQL查询

  • 我正在尝试计算配置单元中视图的平均/最小/最大记录计数 并试图实现如下内容: 但我收到一条错误消息: avg=5 min=4 max=6

  • 这可以在单个sql查询中完成吗?或者我必须在循环中对每个房间进行查询吗?还是在一次查询中转储整个数据集,然后在pyhton中处理它更有效率?这是一个很小的数据集,但我有兴趣知道哪一个是最有效的方法。 先谢谢你,马丁 下面是我的表结构:

  • 我有两个表TABLE_A,列名为COLUMN1 COLUMN2 COLUMN3 COLUMN 4 COLUM5 abc def ghi jkl mno 123 456 789 001 121 TABLE_B列名为COLUMN6 COLUMN7,其数据为 专栏5 124 第4列bca 第3列aaa 列5 BBB 所以我将Table_A的列名作为Table_B中的数据 所以我想在一个查询中做这样的事情