forked from chenwei/weaver-matfron
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
4.7 KiB
Plaintext
105 lines
4.7 KiB
Plaintext
<%@ page import="weaver.general.*" %>
|
|
<%@page import="weaver.conn.RecordSet"%>
|
|
<%@ page import="com.alibaba.fastjson.JSONObject" %>
|
|
<%@ page import="java.util.*" %>
|
|
<%@ page import="java.util.stream.Collectors" %>
|
|
<%@ page import="com.engine.matfron.entity.OptionVO" %>
|
|
<%@ page import="java.time.LocalDate" %>
|
|
<%@ page import="java.time.Period" %>
|
|
<%@ page import="com.engine.matfron.util.CommonUtils" %>
|
|
<jsp:useBean id="ResourceComInfo" class="weaver.hrm.resource.ResourceComInfo" scope="page"/>
|
|
<jsp:useBean id="bb" class="weaver.general.BaseBean" scope="page" />
|
|
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
|
|
|
|
<%
|
|
String subcompanyid1 = "62";
|
|
JSONObject jsonObject = new JSONObject();
|
|
OptionVO OptionVO = getAgeAndSex(subcompanyid1);
|
|
jsonObject.put("data",OptionVO);
|
|
|
|
%>
|
|
<%=jsonObject.toString() %>
|
|
|
|
<%!
|
|
|
|
public OptionVO getAgeAndSex(String subcompanyid1) {
|
|
RecordSet rs = new RecordSet();
|
|
LinkedList<Integer> barSeriesData = new LinkedList<>();
|
|
LinkedList<Integer> barSeriesDataTwo = new LinkedList<>();
|
|
List<String> ageArr = Arrays.asList("20及以下","21~25","26~30","31~35","36~40","41~45","46~50","51~55","56及以上");
|
|
String where = " and (belongto is null or belongto = -1 ) and subcompanyid1 = "+subcompanyid1;
|
|
List<String> birthdayListMen = new ArrayList<>();
|
|
rs.executeQuery(" select birthday from hrmresource where status < 4 "+where+" and sex is not null and birthday is not null and birthday <> '' and sex = 0");
|
|
while (rs.next()) {
|
|
birthdayListMen.add(Util.null2String(rs.getString("birthday")));
|
|
}
|
|
List<Integer> menAge = birthdayListMen.stream().map(birthday -> {
|
|
LocalDate birthdate = LocalDate.parse(birthday);
|
|
LocalDate now = LocalDate.now();
|
|
return Period.between(birthdate, now).getYears();
|
|
}).collect(Collectors.toList());
|
|
|
|
for (int i = 0; i < ageArr.size(); i++) {
|
|
if(i==0){
|
|
String split0 = "0";
|
|
String split1 = "20";
|
|
List<Integer> collect = menAge.stream().filter(item -> item >= Integer.parseInt(split0) && item <= Integer.parseInt(split1)).collect(Collectors.toList());
|
|
barSeriesData.add(collect.size());
|
|
}else if(i==(ageArr.size()-1)){
|
|
String split0 = "56";
|
|
String split1 = "100";
|
|
List<Integer> collect = menAge.stream().filter(item -> item >= Integer.parseInt(split0) && item <= Integer.parseInt(split1)).collect(Collectors.toList());
|
|
barSeriesData.add(collect.size());
|
|
}else{
|
|
String[] split = ageArr.get(i).split("~");
|
|
List<Integer> collect = menAge.stream().filter(item -> item >= Integer.parseInt(split[0]) && item <= Integer.parseInt(split[1])).collect(Collectors.toList());
|
|
barSeriesData.add(collect.size());
|
|
}
|
|
}
|
|
|
|
int yMax = barSeriesData.stream().max(Integer::compare).orElse(0);
|
|
|
|
List<String> birthdayListWomen = new ArrayList<>();
|
|
rs.executeQuery("select birthday from hrmresource where status < 4 "+where+" and sex is not null and birthday is not null and sex = 1");
|
|
while (rs.next()) {
|
|
birthdayListWomen.add(Util.null2String(rs.getString("birthday")));
|
|
}
|
|
List<Integer> womenAge = birthdayListWomen.stream()
|
|
.map(birthday -> {
|
|
LocalDate birthdate = LocalDate.parse(birthday);
|
|
LocalDate now = LocalDate.now();
|
|
return Period.between(birthdate, now).getYears();
|
|
})
|
|
.collect(Collectors.toList());
|
|
|
|
LinkedList<Integer> list = new LinkedList<>();
|
|
for (int i = 0; i < ageArr.size(); i++) {
|
|
String[] split = ageArr.get(i).split("~");
|
|
List<Integer> collect = womenAge.stream().filter(item -> item >= Integer.parseInt(split[0]) && item <= Integer.parseInt(split[1])).collect(Collectors.toList());
|
|
barSeriesDataTwo.add(-collect.size());
|
|
list.add(collect.size());
|
|
}
|
|
|
|
int yMin = -(list.stream().max(Integer::compare).orElse(0));
|
|
int sum = yMax > Math.abs(yMin) ? yMax : yMin ;
|
|
|
|
int divisor = sum % 6;
|
|
sum = sum + (6 - divisor) + 12;
|
|
int ceil =(int) Math.ceil((double) sum / 3);
|
|
int roundedMax = CommonUtils.roundedMax(ceil, 6);
|
|
|
|
return OptionVO.builder()
|
|
.titleText("年龄与性别分析")
|
|
.yMin(-roundedMax)
|
|
.yMax(roundedMax)
|
|
.yInterval(ceil)
|
|
.barSeriesData(barSeriesData)
|
|
.barSeriesDataTwo(barSeriesDataTwo)
|
|
.build();
|
|
}
|
|
|
|
%>
|
|
|
|
|
|
|