BrCodeController.java 4.42 KB
//: com.huaheng.pc.manager.brcode.controller/BrCodeController.java
package com.huaheng.pc.manager.brcode.controller;

import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.pc.manager.brcode.domain.BrCode;
import com.huaheng.pc.manager.brcode.service.BrCodeService;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.JRCsvExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.util.*;

/** A class comment */
@Controller
@RequestMapping("/manager/BrCode")
public class BrCodeController extends BaseController {
  /** A field comment */
  private String prefix = "/manager/BrCode";
  @Resource
  private BrCodeService brCodeService;
  @Resource
  private DataSource dataSource;
  @Resource // 启动失败是注入类错误
  private HttpServletResponse response;

  @GetMapping()
  public String BrCodeScanner () {
    return prefix + "/brcode";
  }

  /** A method comment */

  @PostMapping("/printBrCode")
  public void printBrCode (Integer page) {
    Connection connection = null;
    Collection<BrCode> brCodes = null;
    if(page != 0)
      // 查询
      brCodes = brCodeService.query(page);
    try {

      /*加载模板-begin*/
      // 获取文件流
      final ClassPathResource resource = new ClassPathResource("jaspers/BrCodePF.jasper"); // 要打印的文件的ClassPathResource √
      InputStream in = resource.getInputStream(); // 获取输入流
      JasperReport jasperReport = (JasperReport) JRLoader.loadObject(in); // 利用输出和输入流以及JasperReport对象提供的方法来返回一个pdf文件 JasperReport对象传入文件
      /*加载模板-end*/
      // 打印PDF对象
      JRAbstractExporter exporter = new JRPdfExporter();
      connection = dataSource.getConnection();
      List<JasperPrint> list = new LinkedList<>();
      // 格式化模板参数出入
      Map<String, Object> param = new HashMap<>();// param key1:left;key2:right
      // Useless
      //    param.keySet().toArray()[0]=new String[]{"left"};
      //    param.keySet().toArray()[1]= new String[]{"right"};
      for (int i = 0; i < brCodes.size(); i++) {
        Object right, left;
        param.put("left", ((BrCode) brCodes.toArray()[i]).getCode());// 右边总是比左边大
        // 判断是否为双数追后执行
        i++;
        if( i< brCodes.size())
          right= ((BrCode) brCodes.toArray()[i]).getCode();
        else
          right=null;
        param.put("right", right);// 自增1并放入
        // 模板传入参数后
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, connection); //  填充jasperReport编译报表 报告参数paramters{(map) mysql连接
        list.add(jasperPrint);
      }
      // 下面是固定输出数据源
      ServletOutputStream output = response.getOutputStream();
      exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, list);
      exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, output); // 序列化jasper对象
      exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
      // the end
      exporter.exportReport();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    } catch (JRException e) {
      e.printStackTrace();
    } finally {
      try {
        connection.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

  @GetMapping("create")
  public void create () {
    BrCode brCode = new BrCode();
    brCode.setCreatedBy(ShiroUtils.getUser().getLoginName());
    brCode.setLastUpdatedBy(ShiroUtils.getUser().getLoginName());
    for (int i = 0; i < 1000000; i++) {
      brCode.setCode("E"+String.format("%06d", i)+"^");
      brCodeService.save(brCode);
    }
  }

} ///:~