新创元报表

新创元报表
Chengliang 1 year ago
parent f4a31f20d9
commit 81a177301b

@ -1,6 +1,6 @@
<component name="ArtifactManager">
<artifact type="jar" name="weaver-develop:jar">
<output-path>$PROJECT_DIR$/out/artifacts/weaver_develop_jar</output-path>
<output-path>$PROJECT_DIR$/../../../../weaver/ecology/WEB-INF/lib</output-path>
<root id="archive" name="weaver-develop.jar">
<element id="module-output" name="weaver-develop" />
</root>

@ -0,0 +1,14 @@
package com.api.thinktrans.web;
import javax.ws.rs.Path;
/**
* @Author liang.cheng
* @Date 2023/11/17 1:57 PM
* @Description: TODO
* @Version 1.0
*/
@Path("/thinktrans/common")
public class ReportExportController extends com.engine.thinktrans.web.ReportExportController {
}

@ -0,0 +1,24 @@
package com.engine.thinktrans.service;
import com.engine.thinktrans.entity.param.TendencyReportParam;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* @Author liang.cheng
* @Date 2023/11/17 2:03 PM
* @Description: TODO
* @Version 1.0
*/
public interface ReportExportService {
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/11/17 2:43 PM
* @param: [tendencyReportParam]
* @return: org.apache.poi.xssf.usermodel.XSSFWorkbook
*/
XSSFWorkbook personTendencyExport(TendencyReportParam tendencyReportParam);
}

@ -7,7 +7,6 @@ import com.engine.thinktrans.entity.param.TendencyReportParam;
import com.engine.thinktrans.entity.vo.TendencyReportVO;
import com.engine.thinktrans.service.ReportCollectService;
import com.engine.thinktrans.util.CommonDateUtil;
import com.engine.thinktrans.util.OperateUtil;
import com.weaver.general.Util;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
@ -20,7 +19,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* @Author liang.cheng

@ -0,0 +1,62 @@
package com.engine.thinktrans.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.thinktrans.entity.ReportChildrenData;
import com.engine.thinktrans.entity.ReportColumns;
import com.engine.thinktrans.entity.param.TendencyReportParam;
import com.engine.thinktrans.entity.vo.TendencyReportVO;
import com.engine.thinktrans.service.ReportCollectService;
import com.engine.thinktrans.service.ReportExportService;
import com.engine.thinktrans.util.ExcelUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.User;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author liang.cheng
* @Date 2023/11/17 2:04 PM
* @Description: TODO
* @Version 1.0
*/
public class ReportExportServiceImpl extends Service implements ReportExportService {
private ReportCollectService getReportCollectService(User user) {
return ServiceUtil.getService(ReportCollectServiceImpl.class,user);
}
@Override
public XSSFWorkbook personTendencyExport(TendencyReportParam tendencyReportParam) {
TendencyReportVO personTendency = getReportCollectService(user).getPersonTendency(tendencyReportParam);
// 1.工作簿名称
String sheetName = "年度人力趋势报表("+tendencyReportParam.getYear()+"年)";
// 2.表头(后面动态获取)
List<List<Object>> excelSheetData = new ArrayList<>();
List<ReportColumns> columns = personTendency.getColumns();
String[] header = columns.stream()
.map(ReportColumns::getTitle)
.toArray(String[]::new);
excelSheetData.add(Arrays.asList(header));
//数据
List<ReportChildrenData> datas = personTendency.getDatas();
List<List<Object>> rows = datas.stream()
.map(data -> {
List<Object> convertedData = new ArrayList<>(data.getData());
return convertedData;
})
.collect(Collectors.toList());
excelSheetData.addAll(rows);
return ExcelUtil.genWorkbook(excelSheetData, sheetName);
}
}

@ -0,0 +1,102 @@
package com.engine.thinktrans.util;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.util.List;
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/11/17 2:59 PM
*/
public class ExcelUtil {
public static XSSFWorkbook genWorkbook(List<List<Object>> rowList, String sheetName) {
XSSFWorkbook workbook = new XSSFWorkbook();
// 设置主体样式
XSSFCellStyle cellStyle = workbook.createCellStyle();
XSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 14);
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setFont(font);
cellStyle.setWrapText(true);
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
XSSFSheet sheet = workbook.createSheet(sheetName);
//设置标题
Row titleRow = sheet.createRow(0);
Cell titleCell = titleRow.createCell(0);
titleCell.setCellValue(sheetName);
// 设置标题样式
CellStyle titleStyle = workbook.createCellStyle();
Font titleFont1 = workbook.createFont();
titleFont1.setFontHeightInPoints((short) 18);
titleFont1.setBold(true);
titleFont1.setFontName("宋体");
titleStyle.setFont(titleFont1);
titleStyle.setAlignment(HorizontalAlignment.CENTER);
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleCell.setCellStyle(titleStyle);
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 13));
// 设置表头样式
XSSFCellStyle titleCellStyle = workbook.createCellStyle();
XSSFFont titleFont = workbook.createFont();
titleFont.setFontName("宋体");
titleFont.setBold(true);
titleFont.setFontHeightInPoints((short) 14);
titleCellStyle.setFont(titleFont);
titleCellStyle.setAlignment(HorizontalAlignment.CENTER);
titleCellStyle.setFillForegroundColor(IndexedColors.WHITE1.getIndex());
titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
titleCellStyle.setBorderTop(BorderStyle.THIN);
titleCellStyle.setBorderBottom(BorderStyle.THIN);
titleCellStyle.setBorderLeft(BorderStyle.THIN);
titleCellStyle.setBorderRight(BorderStyle.THIN);
// 自适应宽度
//sheet.autoSizeColumn(0, true);
//默认列宽
sheet.setDefaultColumnWidth(20);
//默认行高
sheet.setDefaultRowHeightInPoints(18);
for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {
List<Object> infoList = rowList.get(rowIndex);
XSSFRow row = sheet.createRow(rowIndex+2);
for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) {
XSSFCell cell = row.createCell(cellIndex);
if (rowIndex == 0) {
cell.setCellStyle(titleCellStyle);
} else {
cell.setCellStyle(cellStyle);
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
} else {
cell.setCellType(CellType.STRING);
cell.setCellValue(o == null ? "" : o.toString());
}
}
}
return workbook;
}
}

@ -0,0 +1,59 @@
package com.engine.thinktrans.web;
import com.engine.common.util.ServiceUtil;
import com.engine.thinktrans.entity.param.TendencyReportParam;
import com.engine.thinktrans.service.ReportExportService;
import com.engine.thinktrans.service.impl.ReportExportServiceImpl;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.time.LocalDate;
/**
* @Author liang.cheng
* @Date 2023/11/17 1:57 PM
* @Description: TODO
* @Version 1.0
*/
public class ReportExportController {
private ReportExportService getReportExportService(User user) {
return ServiceUtil.getService(ReportExportServiceImpl.class,user);
}
@GET
@Path("/personTendency/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response personTendencyExport(@Context HttpServletRequest request, @Context HttpServletResponse response,
@QueryParam("deptIds") String deptIds, @QueryParam("year") Integer year, @QueryParam("useKind") String useKind) {
User user = HrmUserVarify.getUser(request, response);
TendencyReportParam tendencyReportParam = TendencyReportParam.builder().deptIds(deptIds).year(year).useKind(useKind).build();
XSSFWorkbook workbook = getReportExportService(user).personTendencyExport(tendencyReportParam);
String time = LocalDate.now().toString();
String fileName = "年度人力趋势报表" + time;
try {
fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
StreamingOutput output = outputStream -> {
workbook.write(outputStream);
outputStream.flush();
};
response.setContentType("application/octet-stream");
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
}
}

@ -22,8 +22,11 @@ public class MainTest {
public static void main(String[] args) {
String yearDayFirst = CommonDateUtil.getYearDayFirst(2034);
System.out.println(yearDayFirst);
List<ReportChildrenData> reportChildrenDataList = new ArrayList<>();
reportChildrenDataList.add(new ReportChildrenData(Arrays.asList("A", "B", "C")));
reportChildrenDataList.add(new ReportChildrenData(Arrays.asList("D", "E", "F")));
}

Loading…
Cancel
Save