新创元报表

新创元报表
Chengliang 2 years ago
parent 81a177301b
commit 0dccc72bd9

@ -19,4 +19,13 @@ public interface ReportCollectService {
* @return: com.engine.thinktrans.entity.vo.TendencyReportVO
*/
TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam);
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/11/20 10:05 AM
* @param: [param]
* @return: com.engine.thinktrans.entity.vo.TendencyReportVO
*/
TendencyReportVO getOnJobStatistics();
}

@ -21,4 +21,13 @@ public interface ReportExportService {
* @return: org.apache.poi.xssf.usermodel.XSSFWorkbook
*/
XSSFWorkbook personTendencyExport(TendencyReportParam tendencyReportParam);
/**
* @Description:
* @Author: liang.cheng
* @Date: 2023/11/20 3:02 PM
* @param: []
* @return: org.apache.poi.xssf.usermodel.XSSFWorkbook
*/
XSSFWorkbook onJobStatisticsExport();
}

@ -13,6 +13,7 @@ import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.hrm.company.DepartmentComInfo;
import java.time.LocalDate;
import java.time.Year;
import java.time.YearMonth;
import java.util.ArrayList;
@ -31,7 +32,7 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
@Override
public TendencyReportVO getPersonTendency(TendencyReportParam tendencyReportParam) {
List<ReportColumns> columns = getReportColumns();
List<ReportColumns> columns = getPTReportColumns();
List<Integer> deptList = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.executeQuery("select a.deptid from hrmdepartmentdefined a left join hrmdepartment b on a.deptid =b.id where a.bmcj in (0,1)");
@ -59,15 +60,7 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
});
//求和
List<Integer> result = countLists.stream()
.reduce((a, b) -> {
List<Integer> sum = new ArrayList<>();
for (int i = 0; i < a.size(); i++) {
sum.add(a.get(i) + b.get(i));
}
return sum;
})
.orElse(new ArrayList<>());
List<Integer> result = summary(countLists);
List<String> stringList = result.stream()
.map(String::valueOf)
@ -84,11 +77,74 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
.build();
}
/**
*
* @param param
* @return
*/
@Override
public TendencyReportVO getOnJobStatistics() {
List<ReportColumns> columns = getOJSReportColumns();
List<Integer> deptList = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.executeQuery("select a.deptid from hrmdepartmentdefined a left join hrmdepartment b on a.deptid =b.id where a.bmcj in (0,1)");
while (rs.next()) {
deptList.add(Util.getIntValue(rs.getString("deptid")));
}
List<ReportChildrenData> datas = new ArrayList<>();
List<List<Integer>> countLists = new ArrayList<>();
deptList.forEach(id -> {
List<Integer> countList = new ArrayList<>();
ReportChildrenData childrenData = getOnJobChildrenData(id,countList);
datas.add(childrenData);
countLists.add(countList);
});
//求和
List<Integer> result = summary(countLists);
List<String> stringList = result.stream()
.map(String::valueOf)
.collect(Collectors.toList());
List<String> sums = new ArrayList<>();
sums.add("/");
sums.add("全公司");
sums.addAll(stringList);
datas.add(ReportChildrenData.builder().data(sums).build());
return TendencyReportVO.builder()
.columns(columns)
.datas(datas)
.build();
}
@SneakyThrows
private ReportChildrenData getOnJobChildrenData(Integer id, List<Integer> countList) {
RecordSet rs = new RecordSet();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
List<String> data = new ArrayList<>();
data.add(departmentComInfo.getDepartmentCode(String.valueOf(id)));
data.add(departmentComInfo.getDepartmentName(String.valueOf(id)));
ArrayList<String> allSubDepartment = new ArrayList<>();
departmentComInfo.getAllChildDeptByDepId(allSubDepartment, String.valueOf(id));
allSubDepartment.add(String.valueOf(id));
String allId = StringUtils.join(allSubDepartment, ",");
List<YearMonth> yearMonths = CommonDateUtil.getYearMonths(LocalDate.now());
StringBuilder st = new StringBuilder();
st.append("select count(1) as sum from hrmresource where status < 4 and companystartdate <= ? and departmentid in");
st.append(" (").append(allId).append(")");
yearMonths.forEach(yearMonth -> {
String endMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateEndOfMonth(yearMonth));
rs.executeQuery(st.toString(),endMonth);
if (rs.next()) {
Integer sum = Util.getIntValue(rs.getString("sum"),0);
data.add(String.valueOf(sum));
countList.add(sum);
}
});
return ReportChildrenData.builder().data(data).build();
}
@SneakyThrows
private ReportChildrenData getReportChildrenData(TendencyReportParam param, Integer id,List<Integer> countList) {
RecordSet rs = new RecordSet();
@ -128,10 +184,10 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
/**
*
* 1
* @return
*/
private List<ReportColumns> getReportColumns() {
private List<ReportColumns> getPTReportColumns() {
List<ReportColumns> columns = new ArrayList<>();
columns.add(ReportColumns.builder().title("月份").key("0").build());
columns.add(ReportColumns.builder().title("1月").key("1").build());
@ -149,5 +205,44 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
return columns;
}
/**
* 2
* @return
*/
private List<ReportColumns> getOJSReportColumns() {
List<ReportColumns> columns = new ArrayList<>();
columns.add(ReportColumns.builder().title("部门编号").key("-1").build());
columns.add(ReportColumns.builder().title("部门名称").key("0").build());
columns.add(ReportColumns.builder().title("一月").key("1").build());
columns.add(ReportColumns.builder().title("二月").key("2").build());
columns.add(ReportColumns.builder().title("三月").key("3").build());
columns.add(ReportColumns.builder().title("四月").key("4").build());
columns.add(ReportColumns.builder().title("五月").key("5").build());
columns.add(ReportColumns.builder().title("六月").key("6").build());
columns.add(ReportColumns.builder().title("七月").key("7").build());
columns.add(ReportColumns.builder().title("八月").key("8").build());
columns.add(ReportColumns.builder().title("九月").key("9").build());
columns.add(ReportColumns.builder().title("十月").key("10").build());
columns.add(ReportColumns.builder().title("十一月").key("11").build());
columns.add(ReportColumns.builder().title("十二月").key("12").build());
return columns;
}
/**
*
* @return
*/
private List<Integer> summary(List<List<Integer>> countLists){
return countLists.stream()
.reduce((a, b) -> {
List<Integer> sum = new ArrayList<>();
for (int i = 0; i < a.size(); i++) {
sum.add(a.get(i) + b.get(i));
}
return sum;
})
.orElse(new ArrayList<>());
}
}

@ -35,7 +35,7 @@ public class ReportExportServiceImpl extends Service implements ReportExportServ
TendencyReportVO personTendency = getReportCollectService(user).getPersonTendency(tendencyReportParam);
// 1.工作簿名称
String sheetName = "年度人力趋势报表("+tendencyReportParam.getYear()+"年)";
String sheetName = "年度人力趋势("+tendencyReportParam.getYear()+"年)";
// 2.表头(后面动态获取)
List<List<Object>> excelSheetData = new ArrayList<>();
@ -49,10 +49,34 @@ public class ReportExportServiceImpl extends Service implements ReportExportServ
//数据
List<ReportChildrenData> datas = personTendency.getDatas();
List<List<Object>> rows = datas.stream()
.map(data -> {
List<Object> convertedData = new ArrayList<>(data.getData());
return convertedData;
})
.map(data -> (List<Object>) new ArrayList<Object>(data.getData()))
.collect(Collectors.toList());
excelSheetData.addAll(rows);
return ExcelUtil.genWorkbook(excelSheetData, sheetName);
}
@Override
public XSSFWorkbook onJobStatisticsExport() {
TendencyReportVO personTendency = getReportCollectService(user).getOnJobStatistics();
// 1.工作簿名称
String sheetName = "实时在职人数";
// 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>) new ArrayList<Object>(data.getData()))
.collect(Collectors.toList());

@ -46,7 +46,11 @@ public class ExcelUtil {
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleCell.setCellStyle(titleStyle);
if ("实时在职人数".equals(sheetName)){
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 13));
}else {
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 12));
}
// 设置表头样式
@ -69,7 +73,7 @@ public class ExcelUtil {
// 自适应宽度
//sheet.autoSizeColumn(0, true);
//默认列宽
sheet.setDefaultColumnWidth(20);
sheet.setDefaultColumnWidth(18);
//默认行高
sheet.setDefaultRowHeightInPoints(18);

@ -40,4 +40,14 @@ public class ReportCollectController {
TendencyReportParam tendencyReportParam = TendencyReportParam.builder().deptIds(deptIds).year(year).useKind(useKind).build();
return new ResponseResult<TendencyReportParam, TendencyReportVO>(user).run(getReportCollectService(user) :: getPersonTendency,tendencyReportParam);
}
@GET
@Path("/onJobStatistics")
@Produces(MediaType.APPLICATION_JSON)
public String getOnJobStatistics(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, TendencyReportVO>(user).run(getReportCollectService(user) :: getOnJobStatistics);
}
}

@ -56,4 +56,25 @@ public class ReportExportController {
response.setContentType("application/octet-stream");
return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
}
@GET
@Path("/onJobStatistics/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response onJobStatisticsExport(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getReportExportService(user).onJobStatisticsExport();
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();
}
}

Loading…
Cancel
Save