@ApiOperation(value = "获取子公司sub,省分prov,总部hq, 全部 total 指标值中的 最高分,最低分,平均分")
@RequestMapping(value = "/getMaxAndMinAndAverageKpiValue", method = RequestMethod.POST)
private Map<String, Object> getMaxAndMinAndAverageKpiValue(@RequestBody KpiStatisticsReq req) {
if (req.getKpiIds() == null) {
return ResponseUtil.fail("请输入 kpi指标的kpiId数组");
}
try {
List<HashMap<String, Object>> list = new CopyOnWriteArrayList();
if (req.getBranch() == null) {
req.setBranch("total");
}
List<String> ldapOrgCodesList1 = soaOrgWithPathBranchServiceImpl.queryLdapOrgCodesByBranch(req.getBranch());
List<String> ldapOrgCodesList2= new ArrayList<>();
ldapOrgCodesList2.addAll(ldapOrgCodesList1);
if (req.getLdapOrgCodes()!=null){
ldapOrgCodesList2.addAll(Arrays.asList(req.getLdapOrgCodes()));
}
final List<String> ldapOrgCodesList=ldapOrgCodesList2.stream().distinct().collect(Collectors.toList());
ForkJoinPool forkJoinPool = new ForkJoinPool();
for (Integer kpiId : req.getKpiIds()) {
forkJoinPool.execute(() -> {
Kpi kpi = kpiServiceImpl.queryInfoByNatrualKey(kpiId);
// 获取 子公司编码 ldap code
HashMap<String, Object> datas = new HashMap<>();
datas.put("kpi", kpi);
// List<KpiValue> appKpiListAll = new ArrayList<>();
List<Double> doubles = new ArrayList<>();
KpiValue appKpiParam = new KpiValue();
for (String scope : ldapOrgCodesList) {
appKpiParam.setScope(scope);
appKpiParam.setKpiId(kpiId);
// List<KpiValue> appKpiList = kpiValueService.searchInfos(appKpiParam);
KpiValue kpiValue = kpiValueService.searchOne(appKpiParam);
if (kpiValue != null && kpiValue.getValue() != null && !kpiValue.getValue().trim().equals("")) {
// doubles.add(Double.parseDouble(kpiValue.getValue()));
doubles.add(new BigDecimal(kpiValue.getValue()).setScale(4, BigDecimal.ROUND_HALF_UP).doubleValue());
}
}
if (doubles.size() > 0) {
DoubleSummaryStatistics statistics = doubles.stream().mapToDouble(x -> x).summaryStatistics();
datas.put("max", BigDecimal.valueOf(statistics.getMax()).setScale(4, BigDecimal.ROUND_HALF_UP));
datas.put("min", BigDecimal.valueOf(statistics.getMin()).setScale(4, BigDecimal.ROUND_HALF_UP));
datas.put("average", BigDecimal.valueOf(statistics.getAverage()).setScale(4, BigDecimal.ROUND_HALF_UP));
datas.put("sum", BigDecimal.valueOf(statistics.getSum()).setScale(4, BigDecimal.ROUND_HALF_UP));
datas.put("count", statistics.getCount());
}
list.add(datas);
});
}
while (forkJoinPool.getActiveThreadCount() != 0) {
Thread.sleep(100);
}
forkJoinPool.shutdown();
return ResponseUtil.ok(list);
} catch (Exception e) {
e.printStackTrace();
LoggerUtils.error(getClass(), "查询失败!" + e.getMessage());
return ResponseUtil.fail("查询失败!" + e.getMessage());
}
}