|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package com.engine.thinktrans.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.engine.core.impl.Service;
|
|
|
|
|
import com.engine.thinktrans.entity.PersonnelSizeTop;
|
|
|
|
|
import com.engine.thinktrans.entity.ReportChildrenData;
|
|
|
|
|
import com.engine.thinktrans.entity.ReportColumns;
|
|
|
|
|
import com.engine.thinktrans.entity.param.TendencyReportParam;
|
|
|
|
@ -13,12 +14,11 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import weaver.conn.RecordSet;
|
|
|
|
|
import weaver.hrm.company.DepartmentComInfo;
|
|
|
|
|
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.time.Year;
|
|
|
|
|
import java.time.YearMonth;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -119,6 +119,131 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public TendencyReportVO getPersonnelSize(Integer year) {
|
|
|
|
|
List<ReportColumns> columns = getPSReportColumns();
|
|
|
|
|
List<String> addList = new ArrayList<>();
|
|
|
|
|
List<String> addRate = new ArrayList<>();
|
|
|
|
|
List<ReportChildrenData> datas = getPersonnelSizeData(year,addList,addRate);
|
|
|
|
|
return TendencyReportVO.builder()
|
|
|
|
|
.columns(columns)
|
|
|
|
|
.datas(datas)
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> getTop(Integer year) {
|
|
|
|
|
Map<String,Object> result = new HashMap<>(4);
|
|
|
|
|
List<String> addList = new ArrayList<>();
|
|
|
|
|
List<String> addRate = new ArrayList<>();
|
|
|
|
|
if (year == null) {
|
|
|
|
|
year = Year.now().getValue();
|
|
|
|
|
}
|
|
|
|
|
getPersonnelSizeData(year,addList,addRate);
|
|
|
|
|
List<PersonnelSizeTop> pstList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
String startYear = CommonDateUtil.getYearDayFirst(year);
|
|
|
|
|
String endYear = CommonDateUtil.getYearDayEnd(year);
|
|
|
|
|
int sumStart = 0;
|
|
|
|
|
int sumEnd = 0;
|
|
|
|
|
int entrySum = 0;
|
|
|
|
|
int leaveSum = 0;
|
|
|
|
|
rs.executeQuery("select count(1) as sumstart from hrmresource where status < 4 and companystartdate <= ?",startYear);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
sumStart = Util.getIntValue(rs.getString("sumstart"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as sumend from hrmresource where status < 4 and companystartdate <= ?",endYear);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
sumEnd = Util.getIntValue(rs.getString("sumend"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as entrysum from hrmresource where companystartdate >= ? and companystartdate <= ?",startYear,endYear);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
entrySum = Util.getIntValue(rs.getString("entrysum"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as leavesum from hrmstatushistory where type_n = 5 and changedate >= ? and changedate <= ?",startYear,endYear);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
leaveSum = Util.getIntValue(rs.getString("leavesum"));
|
|
|
|
|
}
|
|
|
|
|
int addPerson = entrySum - leaveSum;
|
|
|
|
|
|
|
|
|
|
String rate = calculateRate(addRate,addPerson,sumStart);
|
|
|
|
|
|
|
|
|
|
pstList.add(PersonnelSizeTop.builder().title("年初人数").count(sumStart).color("#67c29a").build());
|
|
|
|
|
pstList.add(PersonnelSizeTop.builder().title("累计入职人数").count(entrySum).color("#9c5113").build());
|
|
|
|
|
pstList.add(PersonnelSizeTop.builder().title("累计离职人数").count(leaveSum).color("#e26b0a").build());
|
|
|
|
|
pstList.add(PersonnelSizeTop.builder().title("年末人数").count(sumEnd).color("#35889c").build());
|
|
|
|
|
pstList.add(PersonnelSizeTop.builder().title("净增长率").count(rate).color("#f6d262").build());
|
|
|
|
|
result.put("pstTop",pstList);
|
|
|
|
|
result.put("list",addList);
|
|
|
|
|
result.put("rate",addRate);
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<ReportChildrenData> getPersonnelSizeData(Integer year, List<String> addList, List<String> addRate) {
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
List<ReportChildrenData> result = new ArrayList<>();
|
|
|
|
|
if (year == null) {
|
|
|
|
|
year = Year.now().getValue();
|
|
|
|
|
}
|
|
|
|
|
List<YearMonth> yearMonths = CommonDateUtil.getYearMonths(year);
|
|
|
|
|
for (int i = 0; i < yearMonths.size(); i++) {
|
|
|
|
|
List<String> data = new ArrayList<>();
|
|
|
|
|
String startMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateStartOfMonth(yearMonths.get(i)));
|
|
|
|
|
String endMonth = CommonDateUtil.getFormatYear(CommonDateUtil.toDateEndOfMonth(yearMonths.get(i)));
|
|
|
|
|
int sumStart = 0;
|
|
|
|
|
int sumEnd = 0;
|
|
|
|
|
int entrySum = 0;
|
|
|
|
|
int leaveSum = 0;
|
|
|
|
|
data.add(String.format("%d 月",i+1));
|
|
|
|
|
rs.executeQuery("select count(1) as sumstart from hrmresource where status < 4 and companystartdate <= ?",startMonth);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
sumStart = Util.getIntValue(rs.getString("sumstart"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as sumend from hrmresource where status < 4 and companystartdate <= ?",endMonth);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
sumEnd = Util.getIntValue(rs.getString("sumend"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as entrysum from hrmresource where companystartdate >= ? and companystartdate <= ?",startMonth,endMonth);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
entrySum = Util.getIntValue(rs.getString("entrysum"));
|
|
|
|
|
}
|
|
|
|
|
rs.executeQuery("select count(1) as leavesum from hrmstatushistory where type_n = 5 and changedate >= ? and changedate <= ?",startMonth,endMonth);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
leaveSum = Util.getIntValue(rs.getString("leavesum"));
|
|
|
|
|
}
|
|
|
|
|
int addPerson = entrySum - leaveSum;
|
|
|
|
|
|
|
|
|
|
String rate = calculateRate(addRate,addPerson,sumStart);
|
|
|
|
|
addList.add(String.valueOf(addPerson));
|
|
|
|
|
|
|
|
|
|
data.add(String.valueOf(sumStart));
|
|
|
|
|
data.add(String.valueOf(entrySum));
|
|
|
|
|
data.add(String.valueOf(leaveSum));
|
|
|
|
|
data.add(String.valueOf(addPerson));
|
|
|
|
|
data.add(String.valueOf(sumEnd));
|
|
|
|
|
data.add(rate);
|
|
|
|
|
result.add(ReportChildrenData.builder().data(data).build());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<ReportColumns> getPSReportColumns() {
|
|
|
|
|
List<ReportColumns> columns = new ArrayList<>();
|
|
|
|
|
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());
|
|
|
|
|
return columns;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SneakyThrows
|
|
|
|
|
private ReportChildrenData getOnJobChildrenData(Integer id, List<Integer> countList) {
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
@ -246,5 +371,25 @@ public class ReportCollectServiceImpl extends Service implements ReportCollectSe
|
|
|
|
|
.orElse(new ArrayList<>());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 求比例
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private String calculateRate(List<String> addRate,int add,int sum) {
|
|
|
|
|
String rate;
|
|
|
|
|
if (sum != 0) {
|
|
|
|
|
double rt = (double) add * 100 / sum;
|
|
|
|
|
DecimalFormat decimalFormat = new DecimalFormat("0.00");
|
|
|
|
|
decimalFormat.setRoundingMode(java.math.RoundingMode.HALF_UP);
|
|
|
|
|
rate = decimalFormat.format(rt) + "%";
|
|
|
|
|
addRate.add(decimalFormat.format(rt));
|
|
|
|
|
}else {
|
|
|
|
|
rate = String.valueOf(add * 100) +"%";
|
|
|
|
|
addRate.add(String.valueOf(add * 100));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return rate;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|