|  | @@ -18,6 +18,7 @@ import org.apache.poi.hssf.usermodel.*;
 | 
	
		
			
				|  |  |  import org.apache.poi.ss.usermodel.BorderStyle;
 | 
	
		
			
				|  |  |  import org.apache.poi.ss.usermodel.HorizontalAlignment;
 | 
	
		
			
				|  |  |  import org.apache.poi.ss.usermodel.VerticalAlignment;
 | 
	
		
			
				|  |  | +import org.apache.poi.ss.util.CellRangeAddress;
 | 
	
		
			
				|  |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  |  import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -213,13 +214,14 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
 | 
	
		
			
				|  |  |          // 在 workbook 中添加一个sheet,对应 excel 文档中的 sheet
 | 
	
		
			
				|  |  |          HSSFSheet sheet = wb.createSheet("分项明细");
 | 
	
		
			
				|  |  |          // 获取 cell 样式
 | 
	
		
			
				|  |  | -        HSSFCellStyle cellStyle = getCellStyle(wb);
 | 
	
		
			
				|  |  | +        HSSFCellStyle cellTitleStyle = getCellStyle(wb,"center",true);
 | 
	
		
			
				|  |  | +        HSSFCellStyle cellContentStyle = getCellStyle(wb,"center",true);
 | 
	
		
			
				|  |  |          // 创建标题,合并标题单元格
 | 
	
		
			
				|  |  |          // 行号
 | 
	
		
			
				|  |  | -        int rowNum = 0;
 | 
	
		
			
				|  |  | +        int rowNum = 2;
 | 
	
		
			
				|  |  |          // 第一行
 | 
	
		
			
				|  |  |          HSSFRow first = sheet.createRow(rowNum++);
 | 
	
		
			
				|  |  | -        String[] left = {"序号", "业务类型", "作业类型", "提单号", "货名", "客户", "件数", "重量", "体积", "入库时间", "计算天数", "货物堆存费"};
 | 
	
		
			
				|  |  | +        String[] left = {"序号", "业务类型", "作业类型", "提单号", "货名", "客户", "件数", "重量", "体积", "入库时间","出库时间", "计算天数", "货物堆存费"};
 | 
	
		
			
				|  |  |          List<String> middle = tFeesMapper.selectTFeesNameList();
 | 
	
		
			
				|  |  |          String[] right = {"金额", "计划员", "计费时间", "结费时间", "仓库", "备注"};
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -228,15 +230,29 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
 | 
	
		
			
				|  |  |          all.addAll(middle);
 | 
	
		
			
				|  |  |          Collections.addAll(all, right);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        // 创建并获取大标题样式
 | 
	
		
			
				|  |  | +        /*HSSFCellStyle cellBigTitleStyle = getCellStyle(wb,"center",false);
 | 
	
		
			
				|  |  | +        CellRangeAddress cBigTitle = new CellRangeAddress(0,0,0,all.size()/4);
 | 
	
		
			
				|  |  | +        setBigTitle("青岛大木仓配物流有限公司现场收费统计表(仓储业务)",0,sheet,cellBigTitleStyle,cBigTitle);
 | 
	
		
			
				|  |  | +        setFont(cellBigTitleStyle,wb,"宋体",11,true);*/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // 创建并获取统计范围时间样式
 | 
	
		
			
				|  |  | +        HSSFCellStyle cellRangeTimeStyle = getCellStyle(wb,"center",false);
 | 
	
		
			
				|  |  | +        CellRangeAddress cRangeTimeTitle = new CellRangeAddress(1,1,0,all.size()/9);
 | 
	
		
			
				|  |  | +        setBigTitle("统计范围:" + billDetailsSubItem.getDateRange(),1,sheet,cellRangeTimeStyle,cRangeTimeTitle);
 | 
	
		
			
				|  |  | +        setFont(cellRangeTimeStyle,wb,"宋体",11,false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          int size = all.size();
 | 
	
		
			
				|  |  |          for (int i = 0; i < size; i++) {
 | 
	
		
			
				|  |  |              HSSFCell tempCell = first.createCell(i);
 | 
	
		
			
				|  |  | -            if (i > 11 && i < size - 6) {
 | 
	
		
			
				|  |  | +            if (i > 12 && i < size - 6) {
 | 
	
		
			
				|  |  |                  tempCell.setCellValue(all.get(i) + "单价");
 | 
	
		
			
				|  |  |              } else {
 | 
	
		
			
				|  |  |                  tempCell.setCellValue(all.get(i));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            tempCell.setCellStyle(cellStyle);
 | 
	
		
			
				|  |  | +            tempCell.setCellStyle(cellTitleStyle);
 | 
	
		
			
				|  |  | +            // 设置第三行标题栏字体
 | 
	
		
			
				|  |  | +            setFont(cellTitleStyle,wb,"宋体",11,true);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // 根据客户名称,发货方查询清单数据
 | 
	
	
		
			
				|  | @@ -253,10 +269,11 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
 | 
	
		
			
				|  |  |                  HSSFCell temCell = tempRow.createCell(i);
 | 
	
		
			
				|  |  |                  String cellValue = "";
 | 
	
		
			
				|  |  |                  if (i == 0) {
 | 
	
		
			
				|  |  | +                    // 序号
 | 
	
		
			
				|  |  |                      cellValue = StringUtils.objToStr(index++);
 | 
	
		
			
				|  |  |                  } else if (i == 1) {
 | 
	
		
			
				|  |  |                      // 业务类型
 | 
	
		
			
				|  |  | -                    cellValue = StringUtils.objToStr(bd.getfBusinesstype());
 | 
	
		
			
				|  |  | +                    cellValue = StringUtils.objToStr(bd.getfBilltype());
 | 
	
		
			
				|  |  |                  } else if (i == 2) {
 | 
	
		
			
				|  |  |                      // 作业类型
 | 
	
		
			
				|  |  |                      cellValue = StringUtils.objToStr(bd.getTwlfBusinesstype());
 | 
	
	
		
			
				|  | @@ -301,13 +318,14 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
 | 
	
		
			
				|  |  |                      cellValue = StringUtils.objToStr(bd.getfStlamountdate());
 | 
	
		
			
				|  |  |                  } else if (i == size - 2) {
 | 
	
		
			
				|  |  |                      // 仓库
 | 
	
		
			
				|  |  | -                    cellValue = StringUtils.objToStr(bd.getfWarehouseId());
 | 
	
		
			
				|  |  | +                    cellValue = StringUtils.objToStr(bd.getFhName());
 | 
	
		
			
				|  |  |                  } else if (i == size - 1) {
 | 
	
		
			
				|  |  |                      // 备注
 | 
	
		
			
				|  |  |                      cellValue = StringUtils.objToStr(bd.getRemark());
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  temCell.setCellValue(cellValue);
 | 
	
		
			
				|  |  | -                temCell.setCellStyle(cellStyle);
 | 
	
		
			
				|  |  | +                temCell.setCellStyle(cellContentStyle);
 | 
	
		
			
				|  |  | +                setFont(cellContentStyle,wb,"宋体",12,false);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -340,23 +358,90 @@ public class TWarehousebillsfeesServiceImpl implements ITWarehousebillsfeesServi
 | 
	
		
			
				|  |  |          return downloadPath;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 获取 excel 表格的 cell 相关样式
 | 
	
		
			
				|  |  | -    public HSSFCellStyle getCellStyle(HSSFWorkbook wb) {
 | 
	
		
			
				|  |  | -        HSSFCellStyle cellStyle = wb.createCellStyle();
 | 
	
		
			
				|  |  | -        // 水平居中
 | 
	
		
			
				|  |  | -        cellStyle.setAlignment(HorizontalAlignment.CENTER);
 | 
	
		
			
				|  |  | -        // 垂直居中
 | 
	
		
			
				|  |  | -        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 | 
	
		
			
				|  |  | -        // 上边框
 | 
	
		
			
				|  |  | -        cellStyle.setBorderTop(BorderStyle.THIN);
 | 
	
		
			
				|  |  | -        // 下边框
 | 
	
		
			
				|  |  | -        cellStyle.setBorderBottom(BorderStyle.THIN);
 | 
	
		
			
				|  |  | -        // 左边框
 | 
	
		
			
				|  |  | -        cellStyle.setBorderLeft(BorderStyle.THIN);
 | 
	
		
			
				|  |  | -        // 右边框
 | 
	
		
			
				|  |  | -        cellStyle.setBorderRight(BorderStyle.THIN);
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 封装大标题实现复用
 | 
	
		
			
				|  |  | +     * @param title 标题
 | 
	
		
			
				|  |  | +     * @param row 所在行
 | 
	
		
			
				|  |  | +     * @param sheet sheet
 | 
	
		
			
				|  |  | +     * @param cellStyle 样式
 | 
	
		
			
				|  |  | +     * @param cellAddresses 合并行参数
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public void setBigTitle(String title,int row,HSSFSheet sheet,HSSFCellStyle cellStyle,CellRangeAddress cellAddresses){
 | 
	
		
			
				|  |  | +        // 合并参数
 | 
	
		
			
				|  |  | +        sheet.addMergedRegion(cellAddresses);
 | 
	
		
			
				|  |  | +        // 大标题部分
 | 
	
		
			
				|  |  | +        HSSFRow bigTitleRow = sheet.createRow(row);
 | 
	
		
			
				|  |  | +        HSSFCell cell = bigTitleRow.createCell(0);
 | 
	
		
			
				|  |  | +        cell.setCellValue(title);
 | 
	
		
			
				|  |  | +        cell.setCellStyle(cellStyle);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 设置 excel 内内容字体
 | 
	
		
			
				|  |  | +     * @param style 传入的已设置的 excel 样式
 | 
	
		
			
				|  |  | +     * @param workbook 工作簿
 | 
	
		
			
				|  |  | +     * @param fontName 字体名称,例如: "宋体"
 | 
	
		
			
				|  |  | +     * @param fontSize 字体大小
 | 
	
		
			
				|  |  | +     * @param isBold 是否加粗,true:加粗,false:不加粗
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public void setFont(HSSFCellStyle style,HSSFWorkbook workbook,String fontName,int fontSize,boolean isBold){
 | 
	
		
			
				|  |  | +        HSSFFont font = workbook.createFont();
 | 
	
		
			
				|  |  | +        // 设置字体
 | 
	
		
			
				|  |  | +        font.setFontName(fontName);
 | 
	
		
			
				|  |  | +        // 是否加粗
 | 
	
		
			
				|  |  | +        font.setBold(isBold);
 | 
	
		
			
				|  |  | +        // 字体大小
 | 
	
		
			
				|  |  | +        font.setFontHeightInPoints((short) fontSize);
 | 
	
		
			
				|  |  | +        // 需要设置在谁上
 | 
	
		
			
				|  |  | +        style.setFont(font);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 获取并设置工作表 excel 样式
 | 
	
		
			
				|  |  | +     * @param workbook 工作簿
 | 
	
		
			
				|  |  | +     * @param position 位置参数:left-居左,right-居右,center-居中
 | 
	
		
			
				|  |  | +     * @param showFrame 是否显示边框,true:显示,false:不显示
 | 
	
		
			
				|  |  | +     * @return 已设置的 excel 样式
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public HSSFCellStyle getCellStyle(HSSFWorkbook workbook,String position,boolean showFrame){
 | 
	
		
			
				|  |  | +        // 创建标题的显示样式
 | 
	
		
			
				|  |  | +        HSSFCellStyle headerStyle = workbook.createCellStyle();
 | 
	
		
			
				|  |  | +        // 设置水平垂直居中+上下左右边框+边框是否显示
 | 
	
		
			
				|  |  | +        setHeaderStyle(headerStyle,position,showFrame);
 | 
	
		
			
				|  |  |          // 返回
 | 
	
		
			
				|  |  | -        return cellStyle;
 | 
	
		
			
				|  |  | +        return headerStyle;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 封装边框以及水平+垂直居中+边框是否显示
 | 
	
		
			
				|  |  | +     * @param headerStyle 样式
 | 
	
		
			
				|  |  | +     * @param position 位置参数:left-居左,right-居右,center-居中
 | 
	
		
			
				|  |  | +     * @param showFrame 是否显示边框,true:显示,false:不显示
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    public void setHeaderStyle(HSSFCellStyle headerStyle,String position,boolean showFrame){
 | 
	
		
			
				|  |  | +        // 水平位置摆放
 | 
	
		
			
				|  |  | +        switch (position) {
 | 
	
		
			
				|  |  | +            case "left": // 居左
 | 
	
		
			
				|  |  | +                headerStyle.setAlignment(HorizontalAlignment.LEFT);
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case "right": // 居右
 | 
	
		
			
				|  |  | +                headerStyle.setAlignment(HorizontalAlignment.RIGHT);
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            case "center": // 居中
 | 
	
		
			
				|  |  | +                headerStyle.setAlignment(HorizontalAlignment.CENTER);
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        // 垂直居中
 | 
	
		
			
				|  |  | +        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 | 
	
		
			
				|  |  | +        if (showFrame) {
 | 
	
		
			
				|  |  | +            // 上边框
 | 
	
		
			
				|  |  | +            headerStyle.setBorderTop(BorderStyle.THIN);
 | 
	
		
			
				|  |  | +            // 下边框
 | 
	
		
			
				|  |  | +            headerStyle.setBorderBottom(BorderStyle.THIN);
 | 
	
		
			
				|  |  | +            // 左边框
 | 
	
		
			
				|  |  | +            headerStyle.setBorderLeft(BorderStyle.THIN);
 | 
	
		
			
				|  |  | +            // 右边框
 | 
	
		
			
				|  |  | +            headerStyle.setBorderRight(BorderStyle.THIN);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  }
 |