|
@@ -1,17 +1,24 @@
|
|
|
package nckd.jxccl.swc.stm.plugin.form.appr;
|
|
package nckd.jxccl.swc.stm.plugin.form.appr;
|
|
|
|
|
|
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import kd.bos.algo.Algo;
|
|
import kd.bos.algo.Algo;
|
|
|
import kd.bos.algo.AlgoContext;
|
|
import kd.bos.algo.AlgoContext;
|
|
|
import kd.bos.algo.DataSet;
|
|
import kd.bos.algo.DataSet;
|
|
|
import kd.bos.algo.Row;
|
|
import kd.bos.algo.Row;
|
|
|
|
|
+import kd.bos.common.enums.EnableEnum;
|
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
import kd.bos.dataentity.entity.DynamicObject;
|
|
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
|
|
+import kd.bos.entity.EntityMetadataCache;
|
|
|
|
|
+import kd.bos.entity.QueryEntityType;
|
|
|
import kd.bos.form.control.events.ItemClickEvent;
|
|
import kd.bos.form.control.events.ItemClickEvent;
|
|
|
import kd.bos.form.control.events.ItemClickListener;
|
|
import kd.bos.form.control.events.ItemClickListener;
|
|
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
|
import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
|
|
+import kd.bos.logging.Log;
|
|
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
import kd.bos.orm.query.QCP;
|
|
import kd.bos.orm.query.QCP;
|
|
|
import kd.bos.orm.query.QFilter;
|
|
import kd.bos.orm.query.QFilter;
|
|
|
import kd.bos.servicehelper.QueryServiceHelper;
|
|
import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
|
|
+import kd.hr.hbp.business.servicehelper.HRQueryEntityHelper;
|
|
|
import kd.sdk.plugin.Plugin;
|
|
import kd.sdk.plugin.Plugin;
|
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
import nckd.jxccl.base.common.constant.FormConstant;
|
|
|
import nckd.jxccl.base.common.utils.ConvertUtil;
|
|
import nckd.jxccl.base.common.utils.ConvertUtil;
|
|
@@ -40,6 +47,7 @@ import java.util.stream.Collectors;
|
|
|
*/
|
|
*/
|
|
|
public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugin, ItemClickListener {
|
|
public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugin, ItemClickListener {
|
|
|
|
|
|
|
|
|
|
+ private static final Log logger = LogFactory.getLog(GrpSalStlApprFormPlugin.class);
|
|
|
@Override
|
|
@Override
|
|
|
public void registerListener(EventObject e) {
|
|
public void registerListener(EventObject e) {
|
|
|
//监听工具栏
|
|
//监听工具栏
|
|
@@ -80,11 +88,13 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
|
|
|
//获取上年度数据
|
|
//获取上年度数据
|
|
|
Map<Long, List<DynamicObject>> lastYearDataMap = getLastYearData(year, unitIds);
|
|
Map<Long, List<DynamicObject>> lastYearDataMap = getLastYearData(year, unitIds);
|
|
|
//计算中高层不同类别人员的平均人数和薪酬总额
|
|
//计算中高层不同类别人员的平均人数和薪酬总额
|
|
|
- Map<Long, Result> longResultMap = avgPeopleNum(year, unitIds);
|
|
|
|
|
|
|
+ Map<Long, Result> avgMasPeopleNumMap = avgMasPeopleNum(year, unitIds);
|
|
|
//按单位汇总任期激励金额
|
|
//按单位汇总任期激励金额
|
|
|
- Map<Long, BigDecimal> longBigDecimalMap = sumTermBonusByUnit(year, unitIds);
|
|
|
|
|
|
|
+ Map<Long, BigDecimal> sumTermBonusByUnit = sumTermBonusByUnit(year, unitIds);
|
|
|
//集团核定单项”+“优秀生津贴”项目薪酬数据
|
|
//集团核定单项”+“优秀生津贴”项目薪酬数据
|
|
|
-
|
|
|
|
|
|
|
+ Map<Long, BigDecimal> sumItemMap = sumItem(year, unitIds);
|
|
|
|
|
+ //
|
|
|
|
|
+ Map<Long, BigDecimal> avgPeopleNumMap = avgPeopleNum(year, unitIds);
|
|
|
for (DynamicObject entry : entryEntity) {
|
|
for (DynamicObject entry : entryEntity) {
|
|
|
long unitId = entry.getLong(String.join(".", StmConstant.NCKD_UNIT, StmConstant.ID_KEY));
|
|
long unitId = entry.getLong(String.join(".", StmConstant.NCKD_UNIT, StmConstant.ID_KEY));
|
|
|
if(unitId > 0){
|
|
if(unitId > 0){
|
|
@@ -104,21 +114,29 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
|
|
|
//上年单项工资差额
|
|
//上年单项工资差额
|
|
|
entry.set(StmConstant.NCKD_LYRITEMWGDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRITEMWGDIFF)));
|
|
entry.set(StmConstant.NCKD_LYRITEMWGDIFF, lastYearData.getBigDecimal(String.join(".",StmConstant.NCKD_ENTRYENTITY,StmConstant.NCKD_LYRITEMWGDIFF)));
|
|
|
}
|
|
}
|
|
|
- Result result = longResultMap.get(unitId);
|
|
|
|
|
- if(result != null) {
|
|
|
|
|
|
|
+ Result avgMasPeopleNum = avgMasPeopleNumMap.get(unitId);
|
|
|
|
|
+ if(avgMasPeopleNum != null) {
|
|
|
//负责人累计平均人数
|
|
//负责人累计平均人数
|
|
|
- entry.set(StmConstant.NCKD_RESPAVGNUM, result.respAvgNum);
|
|
|
|
|
|
|
+ entry.set(StmConstant.NCKD_RESPAVGNUM, avgMasPeopleNum.respAvgNum);
|
|
|
//负责人薪酬合计
|
|
//负责人薪酬合计
|
|
|
- entry.set(StmConstant.NCKD_RESPWGTTL, result.resPwgTtl);
|
|
|
|
|
|
|
+ entry.set(StmConstant.NCKD_RESPWGTTL, avgMasPeopleNum.resPwgTtl);
|
|
|
//专务、巡察专员累计平均人数
|
|
//专务、巡察专员累计平均人数
|
|
|
- entry.set(StmConstant.NCKD_SPECINSPAVGNUM, result.specInspAvgNum);
|
|
|
|
|
|
|
+ entry.set(StmConstant.NCKD_SPECINSPAVGNUM, avgMasPeopleNum.specInspAvgNum);
|
|
|
//专务、巡察专员薪酬合计
|
|
//专务、巡察专员薪酬合计
|
|
|
- entry.set(StmConstant.NCKD_SPECINSPWGTTL, result.specInspWgTtl);
|
|
|
|
|
|
|
+ entry.set(StmConstant.NCKD_SPECINSPWGTTL, avgMasPeopleNum.specInspWgTtl);
|
|
|
}
|
|
}
|
|
|
- BigDecimal sumTermBonus = longBigDecimalMap.get(unitId);
|
|
|
|
|
|
|
+ BigDecimal sumTermBonus = sumTermBonusByUnit.get(unitId);
|
|
|
if(sumTermBonus != null){
|
|
if(sumTermBonus != null){
|
|
|
entry.set(StmConstant.NCKD_TERMBONUS, sumTermBonus);
|
|
entry.set(StmConstant.NCKD_TERMBONUS, sumTermBonus);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ BigDecimal sumItem = sumItemMap.get(unitId);
|
|
|
|
|
+ if(sumItem != null){
|
|
|
|
|
+ entry.set(StmConstant.NCKD_ONETIMEITEMWG, sumItem);
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal avgPeopleNum = avgPeopleNumMap.get(unitId);
|
|
|
|
|
+ entry.set(StmConstant.NCKD_ALLEMPAVGNUM, avgPeopleNum);
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
this.getView().updateView(StmConstant.NCKD_ENTRYENTITY);
|
|
this.getView().updateView(StmConstant.NCKD_ENTRYENTITY);
|
|
@@ -128,6 +146,123 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 统计平均人数
|
|
|
|
|
+ * ((起始月月初数据+起始月月末数据)/2+……(结束月月初数据+结束月月末数据)/2)/总月数
|
|
|
|
|
+ * @param year 年份
|
|
|
|
|
+ * @param unitIds 单位
|
|
|
|
|
+ * @return: void
|
|
|
|
|
+ * @author W.Y.C
|
|
|
|
|
+ * @date: 2025/12/31 14:43
|
|
|
|
|
+ */
|
|
|
|
|
+ private Map<Long,BigDecimal> avgPeopleNum(Date year, List<Long> unitIds){
|
|
|
|
|
+ try(AlgoContext context = Algo.newContext()) {
|
|
|
|
|
+ //计算方式为:((起始月月初数据+起始月月末数据)/2+……(结束月月初数据+结束月月末数据)/2)/总月数
|
|
|
|
|
+ Date beginDate = DateUtil.beginOfYear(year);
|
|
|
|
|
+ Date endDate = DateUtil.endOfDay(year);
|
|
|
|
|
+ QueryFieldBuilder queryFieldBuilder = QueryFieldBuilder.create()
|
|
|
|
|
+ .addIdNumberNameWithExtras(new String[]{StmConstant.NCKD_EMPLOYEE}, FormConstant.EMP_NUMBER_KEY)
|
|
|
|
|
+ .add(FormConstant.STARTDATE)
|
|
|
|
|
+ .add(FormConstant.ENDDATE)
|
|
|
|
|
+ .addIdNumberName(FormConstant.COMPANY_KEY)
|
|
|
|
|
+ .add(FormConstant.HRPI_EMPENTREL, FormConstant.STARTDATE)
|
|
|
|
|
+ .add(FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE)
|
|
|
|
|
+ .addIdNumberName(FormConstant.HRPI_EMPENTREL, FormConstant.LABORRELTYPE)
|
|
|
|
|
+ .addIdNumberName(FormConstant.HRPI_EMPENTREL, FormConstant.LABOR_REL_STATUS)
|
|
|
|
|
+ .add(FormConstant.HRPI_EMPENTREL, FormConstant.IS_HIRED);
|
|
|
|
|
+ QFilter queryFilter = new QFilter(FormConstant.COMPANY_KEY, QCP.in, unitIds)
|
|
|
|
|
+ .and(FormConstant.IS_SEQLATESTRECORD, QCP.equals, EnableEnum.YES.getCode())
|
|
|
|
|
+ .and(FormConstant.IS_DELETED, QCP.equals, EnableEnum.NO.getCode())
|
|
|
|
|
+ .and(FormConstant.IS_PRIMARY, QCP.equals, EnableEnum.YES.getCode())
|
|
|
|
|
+ .and(FormConstant.ISCURRENTDATA, QCP.equals, EnableEnum.YES.getCode())
|
|
|
|
|
+ //取当年还有效的人员
|
|
|
|
|
+ .and(FormConstant.ENDDATE, QCP.large_equals, beginDate)
|
|
|
|
|
+ .and(String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE), QCP.large_equals, beginDate);
|
|
|
|
|
+ QueryEntityType queryEntityType = (QueryEntityType) EntityMetadataCache.getDataEntityType("personfilequery");
|
|
|
|
|
+ DataSet dataSet = HRQueryEntityHelper.getInstance().getQueryDataSet(queryEntityType, queryFieldBuilder.buildSelect(), new QFilter[]{queryFilter}, null);
|
|
|
|
|
+
|
|
|
|
|
+ // 计算所有职工平均人数
|
|
|
|
|
+ // 用工关系类型:雇佣类(1010_S,1090_S)、劳务类(JT_1040)、返聘类(JT_1050)、外部类(1030_S)
|
|
|
|
|
+ // 用工状态:在职(ishired=true)
|
|
|
|
|
+ // 获取当前日期以确定需要计算的月份范围
|
|
|
|
|
+ Date currentDate = new Date();
|
|
|
|
|
+ Date currentYearBegin = DateUtil.beginOfYear(currentDate);
|
|
|
|
|
+ int totalMonths;
|
|
|
|
|
+ if (DateUtil.getYear(year) == DateUtil.getYear(currentDate)) {
|
|
|
|
|
+ // 如果是当年,只计算到当前月份
|
|
|
|
|
+ totalMonths = DateUtil.getMonthValue(currentDate);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 如果不是当年,计算12个月
|
|
|
|
|
+ totalMonths = 12;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Map<Integer,Map<Long, AvgPeopleNumResult>> monthAvgCountMap = new HashMap<>();
|
|
|
|
|
+ for (int month = 1; month <= totalMonths; month++) {
|
|
|
|
|
+ Date monthBeginDate = DateUtil.beginOfMonth(DateUtil.addMonths(beginDate, month - 1));
|
|
|
|
|
+ String monthBeginDateStr = DateUtil.format(monthBeginDate, DateUtil.NORM_DATE_PATTERN);
|
|
|
|
|
+ Date monthEndDate = DateUtil.endOfMonth(DateUtil.addMonths(beginDate, month - 1));
|
|
|
|
|
+ String monthEndDateStr = DateUtil.format(monthEndDate, DateUtil.NORM_DATE_PATTERN);
|
|
|
|
|
+
|
|
|
|
|
+ // 获取月初人数:在月初仍然在职的人员数量
|
|
|
|
|
+ String monthBeginFilter = String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.IS_HIRED) + "=true " +
|
|
|
|
|
+ "and " + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABORRELTYPE,FormConstant.NUMBER_KEY) + " in('1010_S','1090_S','1030_S','JT_1050','JT_1040') " +
|
|
|
|
|
+ "and " + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.STARTDATE) + " <= to_date('" + monthBeginDateStr + "','yyyy-MM-dd') " +
|
|
|
|
|
+ "and (" + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE) + " is null or " +
|
|
|
|
|
+ String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE) + " >= to_date('" + monthBeginDateStr + "','yyyy-MM-dd'))";
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, AvgPeopleNumResult> resultMap = new HashMap<>();
|
|
|
|
|
+ DataSet beginMonthDataSet = dataSet.copy().filter(monthBeginFilter).groupBy(new String[]{String.join(".", FormConstant.COMPANY_KEY, FormConstant.ID_KEY),String.join(".", FormConstant.COMPANY_KEY, FormConstant.NAME_KEY)}).count().finish();
|
|
|
|
|
+ while (beginMonthDataSet.hasNext()) {
|
|
|
|
|
+ Row row = beginMonthDataSet.next();
|
|
|
|
|
+ Long companyId = row.getLong(String.join(".", FormConstant.COMPANY_KEY, FormConstant.ID_KEY));
|
|
|
|
|
+ String companyName = row.getString(String.join(".", FormConstant.COMPANY_KEY, FormConstant.NAME_KEY));
|
|
|
|
|
+ Integer count = row.getInteger("count");
|
|
|
|
|
+ resultMap.computeIfAbsent(companyId, k -> new AvgPeopleNumResult()).beginCount = count;
|
|
|
|
|
+ logger.info("【{}】截至【{}】在职人数:{}",companyName,monthBeginDateStr,count);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取月末人数:在月末仍然在职的人员数量
|
|
|
|
|
+ String monthEndFilter = String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.IS_HIRED) + "=true " +
|
|
|
|
|
+ "and " + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.LABORRELTYPE,FormConstant.NUMBER_KEY) + " in('1010_S','1090_S','1030_S','JT_1050','JT_1040') " +
|
|
|
|
|
+ "and " + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.STARTDATE) + " <= to_date('" + monthEndDateStr + "','yyyy-MM-dd') " +
|
|
|
|
|
+ "and (" + String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE) + " is null or " +
|
|
|
|
|
+ String.join(".", FormConstant.HRPI_EMPENTREL, FormConstant.ENDDATE) + " >= to_date('" + monthEndDateStr + "','yyyy-MM-dd'))";
|
|
|
|
|
+
|
|
|
|
|
+ DataSet endMonthDataSet = dataSet.copy().filter(monthEndFilter).groupBy(new String[]{String.join(".", FormConstant.COMPANY_KEY, FormConstant.ID_KEY),String.join(".", FormConstant.COMPANY_KEY, FormConstant.NAME_KEY)}).count().finish();
|
|
|
|
|
+ while (endMonthDataSet.hasNext()) {
|
|
|
|
|
+ Row row = endMonthDataSet.next();
|
|
|
|
|
+ Long companyId = row.getLong(String.join(".", FormConstant.COMPANY_KEY, FormConstant.ID_KEY));
|
|
|
|
|
+ String companyName = row.getString(String.join(".", FormConstant.COMPANY_KEY, FormConstant.NAME_KEY));
|
|
|
|
|
+ Integer count = row.getInteger("count");
|
|
|
|
|
+ resultMap.computeIfAbsent(companyId, k -> new AvgPeopleNumResult()).endCount = count;
|
|
|
|
|
+ logger.info("【{}】截至【{}】在职人数:{}",companyName,monthEndDateStr,count);
|
|
|
|
|
+ }
|
|
|
|
|
+ monthAvgCountMap.put(month, resultMap);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, BigDecimal> unitAvgMap = new HashMap<>();
|
|
|
|
|
+ for (Long unitId : unitIds) {
|
|
|
|
|
+ BigDecimal unitTotalAvgCount = BigDecimal.ZERO;
|
|
|
|
|
+ for (int month = 1; month <= totalMonths; month++) {
|
|
|
|
|
+ Map<Long, AvgPeopleNumResult> resultMap = monthAvgCountMap.get(month);
|
|
|
|
|
+ AvgPeopleNumResult avgPeopleNumResult = resultMap.get(unitId);
|
|
|
|
|
+ if(avgPeopleNumResult != null) {
|
|
|
|
|
+ //计算月平均人数:(月初人数 + 月末人数) / 2
|
|
|
|
|
+ BigDecimal monthAvgCount = new BigDecimal(avgPeopleNumResult.beginCount + avgPeopleNumResult.endCount).divide(new BigDecimal(2), 2, RoundingMode.HALF_UP);
|
|
|
|
|
+ unitTotalAvgCount = unitTotalAvgCount.add(monthAvgCount);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 计算全年平均人数:总平均人数 / 总月份数
|
|
|
|
|
+ BigDecimal totalAvgCount = unitTotalAvgCount.divide(new BigDecimal(totalMonths), 2, RoundingMode.HALF_UP);
|
|
|
|
|
+ unitAvgMap.put(unitId, totalAvgCount);
|
|
|
|
|
+ }
|
|
|
|
|
+ return unitAvgMap;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ class AvgPeopleNumResult {
|
|
|
|
|
+ int beginCount;
|
|
|
|
|
+ int endCount;
|
|
|
|
|
+ }
|
|
|
/**
|
|
/**
|
|
|
* 获取上年度数据
|
|
* 获取上年度数据
|
|
|
* @param year 年份
|
|
* @param year 年份
|
|
@@ -165,7 +300,7 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
|
|
|
* @param unitIds 单位ID列表
|
|
* @param unitIds 单位ID列表
|
|
|
* @return 每个单位的计算结果映射
|
|
* @return 每个单位的计算结果映射
|
|
|
*/
|
|
*/
|
|
|
- private Map<Long,Result> avgPeopleNum(Date year, List<Long> unitIds){
|
|
|
|
|
|
|
+ private Map<Long,Result> avgMasPeopleNum(Date year, List<Long> unitIds){
|
|
|
Map<Long,Result> result = new HashMap<>();
|
|
Map<Long,Result> result = new HashMap<>();
|
|
|
|
|
|
|
|
// 定义常量
|
|
// 定义常量
|
|
@@ -338,14 +473,33 @@ public class GrpSalStlApprFormPlugin extends AbstractFormPlugin implements Plugi
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
/**
|
|
/**
|
|
|
- * 按单位汇总任期激励金额
|
|
|
|
|
|
|
+ * 按单位汇总集团核定单项工资小计、优秀生津贴
|
|
|
* @param year 年份
|
|
* @param year 年份
|
|
|
* @param unitIds 单位ID列表
|
|
* @param unitIds 单位ID列表
|
|
|
* @return 每个单位的任期激励总额映射
|
|
* @return 每个单位的任期激励总额映射
|
|
|
*/
|
|
*/
|
|
|
- /*private Map<Long, BigDecimal> sumTermBonusByUnit1(Date year, List<Long> unitIds){
|
|
|
|
|
- SWCHelper.querySalaryList(unitPersonMap.keySet(), beginDate, endDate, "-1")
|
|
|
|
|
- }*/
|
|
|
|
|
|
|
+ private Map<Long, BigDecimal> sumItem(Date year, List<Long> unitIds){
|
|
|
|
|
+ Date beginDate = DateUtil.beginOfYear(year);
|
|
|
|
|
+ Date endDate = DateUtil.endOfDay(year);
|
|
|
|
|
+ //集团核定单项工资小计、优秀生津贴
|
|
|
|
|
+ List<String> itemNumbers = Lists.newArrayList("JT391","JT050");
|
|
|
|
|
+ DynamicObjectCollection query = SWCHelper.querySalaryByOrgList(unitIds, itemNumbers, beginDate, endDate, "-1");
|
|
|
|
|
+
|
|
|
|
|
+ if(!query.isEmpty()){
|
|
|
|
|
+ // 按单位分组并汇总金额
|
|
|
|
|
+ return query.stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ obj -> obj.getLong(String.join(".", FormConstant.ORG_KEY, MasConstant.ID_KEY)),
|
|
|
|
|
+ Collectors.reducing(
|
|
|
|
|
+ BigDecimal.ZERO,
|
|
|
|
|
+ obj -> obj.getBigDecimal("hsas_caltableentry.calamountvalue"),
|
|
|
|
|
+ BigDecimal::add
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+ }else{
|
|
|
|
|
+ return new HashMap<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
class Result {
|
|
class Result {
|
|
|
/** 负责人累计平均人数 */
|
|
/** 负责人累计平均人数 */
|