|
@@ -4112,83 +4112,126 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
}
|
|
}
|
|
// totalUser.setPersonWorkHoursWages(totalList);
|
|
// totalUser.setPersonWorkHoursWages(totalList);
|
|
personWorkHoursWagesList.addAll(totalList);
|
|
personWorkHoursWagesList.addAll(totalList);
|
|
- //获取所有人员在指定日期的分配数据
|
|
|
|
- List<ProdProcedureTeam> prodProcedureTeamList = prodProcedureTeamMapper.selectList(new QueryWrapper<ProdProcedureTeam>().select("SUM(work_time) AS workTime,SUM(job_of_money) AS jobOfMoney,user_id as userId,distribute_date as distributeDate").between("distribute_date", startDate, endDate).groupBy("user_id,distribute_date"));
|
|
|
|
- userList.forEach(u->{
|
|
|
|
|
|
+ //日期范围内所有分配数据
|
|
|
|
+ List<ProdProcedureTeam> allProcedureTeamList = prodProcedureTeamMapper.selectList(new LambdaQueryWrapper<ProdProcedureTeam>().between(ProdProcedureTeam::getDistributeDate, startDate, endDate));
|
|
|
|
+ //日期范围内所有派工数据
|
|
|
|
+ List<Integer> ids = allProcedureTeamList.stream().map(ProdProcedureTeam::getPlanProcedureId).distinct().collect(Collectors.toList());
|
|
|
|
+ List<PlanProcedureTotal> planProcedureTotalList = planProcedureTotalMapper.selectList(new LambdaQueryWrapper<PlanProcedureTotal>().in(PlanProcedureTotal::getId, ids));
|
|
|
|
+ for (User u : userList) {
|
|
List<Map<String, Object>> mapList = personWorkHoursWagesList.stream().filter(pl -> String.valueOf(pl.get("userId")).equals(u.getId())).collect(Collectors.toList());
|
|
List<Map<String, Object>> mapList = personWorkHoursWagesList.stream().filter(pl -> String.valueOf(pl.get("userId")).equals(u.getId())).collect(Collectors.toList());
|
|
for (String date : dataStringList) {
|
|
for (String date : dataStringList) {
|
|
- Optional<ProdProcedureTeam> first = prodProcedureTeamList.stream().filter(p -> p.getUserId().equals(u.getId()) && p.getDistributeDate().format(dtf1).equals(date)).findFirst();
|
|
|
|
|
|
+ List<ProdProcedureTeam> targetTeams = allProcedureTeamList.stream().filter(a -> a.getDistributeDate().format(dtf1).equals(date) && u.getId().equals(a.getUserId())).collect(Collectors.toList());
|
|
|
|
+ //找到当前人员分组的
|
|
Optional<Map<String, Object>> createDateValue = mapList.stream().filter(m -> String.valueOf(m.get("crateDate")).equals(date)).findFirst();
|
|
Optional<Map<String, Object>> createDateValue = mapList.stream().filter(m -> String.valueOf(m.get("crateDate")).equals(date)).findFirst();
|
|
- if(createDateValue.isPresent()){
|
|
|
|
|
|
+ if (createDateValue.isPresent()) {
|
|
Map<String, Object> map = createDateValue.get();
|
|
Map<String, Object> map = createDateValue.get();
|
|
- if(first.isPresent()){
|
|
|
|
- map.put("planCost",first.get().getJobOfMoney());
|
|
|
|
- map.put("planWorkTime",first.get().getWorkTime());
|
|
|
|
- BigDecimal decimalCost = new BigDecimal(String.valueOf(first.get().getJobOfMoney()));
|
|
|
|
- decimalCost=decimalCost.subtract(new BigDecimal(String.valueOf(map.get("cost")))).setScale(1,RoundingMode.HALF_UP);
|
|
|
|
- if(decimalCost.doubleValue()<0){
|
|
|
|
- decimalCost=new BigDecimal(0);
|
|
|
|
|
|
+ if (targetTeams.size() > 0) {
|
|
|
|
+ //计算本人被分配数据
|
|
|
|
+ double workTime = targetTeams.stream().mapToDouble(ProdProcedureTeam::getWorkTime).sum();
|
|
|
|
+ double cost = targetTeams.stream().mapToDouble(i -> i.getJobOfMoney().doubleValue()).sum();
|
|
|
|
+ map.put("planCost", String.format("%.2f", cost));
|
|
|
|
+ map.put("planWorkTime", String.format("%.2f", workTime));
|
|
|
|
+ List<Integer> totalIds = targetTeams.stream().map(ProdProcedureTeam::getPlanProcedureId).distinct().collect(Collectors.toList());
|
|
|
|
+ //获取与本人分配相关的所有派工数据
|
|
|
|
+ List<PlanProcedureTotal> targetPlanTotals = planProcedureTotalList.stream().filter(p -> totalIds.contains(p.getId())).collect(Collectors.toList());
|
|
|
|
+ BigDecimal lastWorkTime = new BigDecimal(0);
|
|
|
|
+ BigDecimal lastCost = new BigDecimal(0);
|
|
|
|
+ for (PlanProcedureTotal targetPlanTotal : targetPlanTotals) {
|
|
|
|
+ //不同的分配数据对应派工数据不同 需要分开计算
|
|
|
|
+ //分别计算每个派工单的已填报和总预算
|
|
|
|
+ List<ProdProcedureTeam> teamList = allProcedureTeamList.stream().filter(a -> targetPlanTotal.getId().equals(a.getPlanProcedureId())).collect(Collectors.toList());
|
|
|
|
+ List<String> teamIds = teamList.stream().map(ProdProcedureTeam::getUserId).distinct().collect(Collectors.toList());
|
|
|
|
+ //获当前分配日期下的所分配人员工时成本总和
|
|
|
|
+ double totalWorkingHours = targetPlanTotal.getTotalWorkingHours();
|
|
|
|
+ double totalWages = targetPlanTotal.getTotalWages();
|
|
|
|
+ //获当前分配日期下的所填报人员工时成本总和
|
|
|
|
+ double workTimeSum = targetPlanTotal.getTotalFillTime();
|
|
|
|
+ BigDecimal decimal = new BigDecimal(targetPlanTotal.getTotalProgress());
|
|
|
|
+ decimal = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
|
+ BigDecimal costSum = new BigDecimal(targetPlanTotal.getTotalWages());
|
|
|
|
+ costSum = costSum.multiply(decimal).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+
|
|
|
|
+ BigDecimal decimalCost = new BigDecimal(totalWages);
|
|
|
|
+ decimalCost = decimalCost.subtract(costSum).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+ BigDecimal decimalWorkTime = new BigDecimal(totalWorkingHours);
|
|
|
|
+ decimalWorkTime = decimalWorkTime.subtract(new BigDecimal(workTimeSum)).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+ //根据分配人数重新计算平均值
|
|
|
|
+ decimalCost = decimalCost.divide(new BigDecimal(teamIds.size()), 1, RoundingMode.HALF_UP);
|
|
|
|
+ decimalWorkTime = decimalWorkTime.divide(new BigDecimal(teamIds.size()), 1, RoundingMode.HALF_UP);
|
|
|
|
+ lastWorkTime=lastWorkTime.add(decimalWorkTime);
|
|
|
|
+ lastCost=lastCost.add(decimalCost);
|
|
}
|
|
}
|
|
- BigDecimal decimalWorkTime = new BigDecimal(String.valueOf(first.get().getWorkTime()));
|
|
|
|
- decimalWorkTime=decimalWorkTime.subtract(new BigDecimal(String.valueOf(map.get("workTime")))).setScale(1,RoundingMode.HALF_UP);
|
|
|
|
- if(decimalWorkTime.doubleValue()<0){
|
|
|
|
- decimalWorkTime=new BigDecimal(0);
|
|
|
|
|
|
+ if (lastWorkTime.doubleValue() >0 && lastCost.doubleValue() > 0) {
|
|
|
|
+ map.put("surplusCost", lastCost.doubleValue());
|
|
|
|
+ map.put("surplusTime", lastWorkTime.doubleValue());
|
|
}
|
|
}
|
|
- map.put("surplusCost",decimalCost.doubleValue());
|
|
|
|
- map.put("surplusTime",decimalWorkTime.doubleValue());
|
|
|
|
- }else {
|
|
|
|
- map.put("planCost",0);
|
|
|
|
- map.put("planWorkTime",0);
|
|
|
|
- map.put("surplusCost",0);
|
|
|
|
- map.put("surplusTime",0);
|
|
|
|
}
|
|
}
|
|
- }else {
|
|
|
|
- Map map=new HashMap();
|
|
|
|
- map.put("crateDate",date);
|
|
|
|
- map.put("cost",0);
|
|
|
|
- map.put("workTime",0);
|
|
|
|
- map.put("departmentName",u.getDepartmentName());
|
|
|
|
- if(first.isPresent()){
|
|
|
|
- map.put("planCost",first.get().getJobOfMoney());
|
|
|
|
- map.put("planWorkTime",first.get().getWorkTime());
|
|
|
|
- BigDecimal decimalCost = new BigDecimal(String.valueOf(first.get().getJobOfMoney()));
|
|
|
|
- decimalCost=decimalCost.subtract(new BigDecimal(String.valueOf(map.get("cost")))).setScale(1,RoundingMode.HALF_UP);
|
|
|
|
- if(decimalCost.doubleValue()<0){
|
|
|
|
- decimalCost=new BigDecimal(0);
|
|
|
|
|
|
+ } else {
|
|
|
|
+ Map map = new HashMap();
|
|
|
|
+ map.put("crateDate", date);
|
|
|
|
+ map.put("cost", 0);
|
|
|
|
+ map.put("workTime", 0);
|
|
|
|
+ map.put("departmentName", u.getDepartmentName());
|
|
|
|
+ if (targetTeams.size() > 0) {
|
|
|
|
+ double workTime = targetTeams.stream().mapToDouble(ProdProcedureTeam::getWorkTime).sum();
|
|
|
|
+ double cost = targetTeams.stream().mapToDouble(i -> i.getJobOfMoney().doubleValue()).sum();
|
|
|
|
+ map.put("planCost", String.format("%.2f", cost));
|
|
|
|
+ map.put("planWorkTime", String.format("%.2f", workTime));
|
|
|
|
+ List<Integer> totalIds = targetTeams.stream().map(ProdProcedureTeam::getPlanProcedureId).distinct().collect(Collectors.toList());
|
|
|
|
+ //获取与本人分配相关的所有派工数据
|
|
|
|
+ List<PlanProcedureTotal> targetPlanTotals = planProcedureTotalList.stream().filter(p -> totalIds.contains(p.getId())).collect(Collectors.toList());
|
|
|
|
+ BigDecimal lastWorkTime = new BigDecimal(0);
|
|
|
|
+ BigDecimal lastCost = new BigDecimal(0);
|
|
|
|
+ for (PlanProcedureTotal targetPlanTotal : targetPlanTotals) {
|
|
|
|
+ //不同的分配数据对应派工数据不同 需要分开计算
|
|
|
|
+ //分别计算每个派工单的已填报和总预算
|
|
|
|
+ List<ProdProcedureTeam> teamList = allProcedureTeamList.stream().filter(a -> targetPlanTotal.getId().equals(a.getPlanProcedureId())).collect(Collectors.toList());
|
|
|
|
+ List<String> teamIds = teamList.stream().map(ProdProcedureTeam::getUserId).distinct().collect(Collectors.toList());
|
|
|
|
+ //获当前分配日期下的所分配人员工时成本总和
|
|
|
|
+ double totalWorkingHours = targetPlanTotal.getTotalWorkingHours();
|
|
|
|
+ double totalWages = targetPlanTotal.getTotalWages();
|
|
|
|
+ //获当前分配日期下的所填报人员工时成本总和
|
|
|
|
+ double workTimeSum = targetPlanTotal.getTotalFillTime();
|
|
|
|
+ BigDecimal decimal = new BigDecimal(targetPlanTotal.getTotalProgress());
|
|
|
|
+ decimal = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
|
+ BigDecimal costSum = new BigDecimal(targetPlanTotal.getTotalWages());
|
|
|
|
+ costSum = costSum.multiply(decimal).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+
|
|
|
|
+ BigDecimal decimalCost = new BigDecimal(totalWages);
|
|
|
|
+ decimalCost = decimalCost.subtract(costSum).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+ BigDecimal decimalWorkTime = new BigDecimal(totalWorkingHours);
|
|
|
|
+ decimalWorkTime = decimalWorkTime.subtract(new BigDecimal(workTimeSum)).setScale(1, RoundingMode.HALF_UP);
|
|
|
|
+ //根据分配人数重新计算平均值
|
|
|
|
+ decimalCost = decimalCost.divide(new BigDecimal(teamIds.size()), 1, RoundingMode.HALF_UP);
|
|
|
|
+ decimalWorkTime = decimalWorkTime.divide(new BigDecimal(teamIds.size()), 1, RoundingMode.HALF_UP);
|
|
|
|
+ lastWorkTime=lastWorkTime.add(decimalWorkTime);
|
|
|
|
+ lastCost=lastCost.add(decimalCost);
|
|
}
|
|
}
|
|
- BigDecimal decimalWorkTime = new BigDecimal(String.valueOf(first.get().getWorkTime()));
|
|
|
|
- decimalWorkTime=decimalWorkTime.subtract(new BigDecimal(String.valueOf(map.get("workTime")))).setScale(1,RoundingMode.HALF_UP);
|
|
|
|
- if(decimalWorkTime.doubleValue()<0){
|
|
|
|
- decimalWorkTime=new BigDecimal(0);
|
|
|
|
|
|
+ if (lastWorkTime.doubleValue() >0 && lastCost.doubleValue() > 0) {
|
|
|
|
+ map.put("surplusCost", lastCost.doubleValue());
|
|
|
|
+ map.put("surplusTime", lastWorkTime.doubleValue());
|
|
}
|
|
}
|
|
- map.put("surplusCost",decimalCost.doubleValue());
|
|
|
|
- map.put("surplusTime",decimalWorkTime.doubleValue());
|
|
|
|
- }else {
|
|
|
|
- map.put("planCost",0);
|
|
|
|
- map.put("planWorkTime",0);
|
|
|
|
- map.put("surplusCost",0);
|
|
|
|
- map.put("surplusTime",0);
|
|
|
|
}
|
|
}
|
|
- map.put("userId",u.getId());
|
|
|
|
- map.put("userName",u.getName());
|
|
|
|
|
|
+ map.put("userId", u.getId());
|
|
|
|
+ map.put("userName", u.getName());
|
|
mapList.add(map);
|
|
mapList.add(map);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
u.setPersonWorkHoursWages(mapList);
|
|
u.setPersonWorkHoursWages(mapList);
|
|
- u.setDepartmentCascade(u.getId().equals("0")?"小计":convertDepartmentIdToCascade(u.getDepartmentId(),departmentList));
|
|
|
|
|
|
+ u.setDepartmentCascade(u.getId().equals("0") ? "小计" : convertDepartmentIdToCascade(u.getDepartmentId(), departmentList));
|
|
double workTime = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("workTime")))).sum();
|
|
double workTime = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("workTime")))).sum();
|
|
- BigDecimal bigDecimal=new BigDecimal(workTime);
|
|
|
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(workTime);
|
|
double cost = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("cost")))).sum();
|
|
double cost = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("cost")))).sum();
|
|
- double planWorkTime = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("planWorkTime")))).sum();
|
|
|
|
- BigDecimal planBigDecimal=new BigDecimal(planWorkTime);
|
|
|
|
- double planCost = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("planCost")))).sum();
|
|
|
|
- double surplusWorkTime = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("surplusTime")))).sum();
|
|
|
|
- BigDecimal surplusBigDecimal=new BigDecimal(surplusWorkTime);
|
|
|
|
- double surplusCost = mapList.stream().mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("surplusCost")))).sum();
|
|
|
|
- u.setTotalResult(String.valueOf(bigDecimal.doubleValue())+"分钟 "+String.format("%.2f",cost)+"元");
|
|
|
|
- u.setTotalPlanResult(String.valueOf(planBigDecimal.doubleValue())+"分钟 "+String.format("%.2f",planCost)+"元");
|
|
|
|
- u.setTotalSurplusResult(String.valueOf(surplusBigDecimal.doubleValue())+"分钟 "+String.format("%.2f",surplusCost)+"元");
|
|
|
|
- });
|
|
|
|
|
|
+ double planWorkTime = mapList.stream().filter(mt -> mt.get("planWorkTime") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("planWorkTime")))).sum();
|
|
|
|
+ BigDecimal planBigDecimal = new BigDecimal(planWorkTime);
|
|
|
|
+ double planCost = mapList.stream().filter(mt -> mt.get("planCost") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("planCost")))).sum();
|
|
|
|
+ double surplusWorkTime = mapList.stream().filter(mt -> mt.get("surplusTime") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("surplusTime")))).sum();
|
|
|
|
+ BigDecimal surplusBigDecimal = new BigDecimal(surplusWorkTime);
|
|
|
|
+ double surplusCost = mapList.stream().filter(mt -> mt.get("surplusCost") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("surplusCost")))).sum();
|
|
|
|
+ u.setTotalResult(String.valueOf(bigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", cost) + "元");
|
|
|
|
+ u.setTotalPlanResult(String.valueOf(planBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", planCost) + "元");
|
|
|
|
+ u.setTotalSurplusResult(String.valueOf(surplusBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", surplusCost) + "元");
|
|
|
|
+ }
|
|
resultMap.put("total",userIPage.getTotal());
|
|
resultMap.put("total",userIPage.getTotal());
|
|
resultMap.put("records",userList);
|
|
resultMap.put("records",userList);
|
|
httpRespMsg.setData(resultMap);
|
|
httpRespMsg.setData(resultMap);
|