|
@@ -4007,10 +4007,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
public HttpRespMsg getPersonWorkHoursWagesList(String deptId, String userId, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
|
|
|
HttpRespMsg httpRespMsg=new HttpRespMsg();
|
|
|
HashMap resultMap=new HashMap();
|
|
|
- Integer pageStart = null;
|
|
|
- if (pageIndex!=null){
|
|
|
- pageStart = (pageIndex -1) * pageSize;
|
|
|
- }
|
|
|
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
DateTimeFormatter dtf1=DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
List<LocalDate> dateList = getDays(LocalDate.parse(startDate, dtf), LocalDate.parse(endDate, dtf));
|
|
@@ -4045,7 +4041,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
targetUserIds.add("-1");
|
|
|
queryWrapper.in("id",targetUserIds);
|
|
|
}
|
|
|
- IPage<User> userIPage = userMapper.selectPage(new Page<>(pageStart, pageSize), queryWrapper);
|
|
|
+ IPage<User> userIPage = userMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
|
|
|
List<User> userList = userIPage.getRecords();
|
|
|
userList.forEach(u->{
|
|
|
List<Map<String, Object>> mapList = personWorkHoursWagesList.stream().filter(pl -> pl.get("userId").equals(u.getId())).collect(Collectors.toList());
|
|
@@ -4778,7 +4774,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//凑整件数
|
|
|
Integer rounding=0;
|
|
|
//拆算件数
|
|
|
- double converted=0;
|
|
|
+ BigDecimal converted=new BigDecimal(0);
|
|
|
//找到产品下的工序
|
|
|
List<ProdProcedure> targetProdProcedures = prodProcedureList.stream().filter(p -> p.getProductId().equals(product.getId())).collect(Collectors.toList());
|
|
|
//过滤工序id 作为完整件数 需要路过的全部工序
|
|
@@ -4790,6 +4786,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//过滤已经填报过的所有钢印号去重
|
|
|
List<ReportSteelNum> targetReportSteelNums = reportSteelNums.stream().filter(r -> targetReportIds.contains(r.getReportId())).collect(Collectors.toList());
|
|
|
List<String> steelNums = targetReportSteelNums.stream().map(ReportSteelNum::getSteelNum).distinct().collect(Collectors.toList());
|
|
|
+ //先计算完整件数
|
|
|
for (String steelNum : steelNums) {
|
|
|
//找到该产品下填报了该钢印号的所有日报数据
|
|
|
List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(steelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
|
|
@@ -4799,9 +4796,35 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
//如果全包含了所需路过的全部工序内容 就算完整件数
|
|
|
if(hasReportProdProduceIds.containsAll(targetProdProduceIds)){
|
|
|
integrated+=1;
|
|
|
- }else {
|
|
|
- //如果没有包含所需路过的全部工序内容 (有任意工序可以共同完成)-->凑整
|
|
|
- //根据当前钢印号已经填报的内容 对比出没有填报的工序内容
|
|
|
+ List<ReportSteelNum> newReportSteelNums=new ArrayList<>();
|
|
|
+ //作为完整的钢印号直接去掉
|
|
|
+ for (int i = 0; i < reportSteelNums.size(); i++) {
|
|
|
+ if(reportSteelNums.get(i).getSteelNum().equals(steelNum)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ newReportSteelNums.add(reportSteelNums.get(i));
|
|
|
+ }
|
|
|
+ reportSteelNums=newReportSteelNums;
|
|
|
+ List<String> newSteelNums=new ArrayList<>();
|
|
|
+ for (int i = 0; i < steelNums.size(); i++) {
|
|
|
+ if(steelNums.get(i).equals(steelNum)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ newSteelNums.add(steelNums.get(i));
|
|
|
+ }
|
|
|
+ steelNums=newSteelNums;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //计算凑整件数
|
|
|
+ for (String steelNum : steelNums) {
|
|
|
+ //找到该产品下填报了该钢印号的所有日报数据
|
|
|
+ List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(steelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
|
|
|
+ List<Report> hasReportList = targetReportList.stream().filter(r->hasReportIds.contains(r.getId())).collect(Collectors.toList());
|
|
|
+ //过滤日报所填了哪些工序
|
|
|
+ List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
|
|
|
+ //如果没有包含所需路过的全部工序内容 (有任意工序可以共同完成)-->凑整
|
|
|
+ //根据当前钢印号已经填报的内容 对比出没有填报的工序内容
|
|
|
+ if(hasReportProdProduceIds.containsAll(targetProdProduceIds)){
|
|
|
List<Integer> hasNotReportProdProduceIds=new ArrayList<>();
|
|
|
targetProdProduceIds.forEach(tp->{
|
|
|
if(!hasReportProdProduceIds.contains(tp)){
|
|
@@ -4816,7 +4839,46 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
boolean match = targetComparator.containsAll(hasNotReportProdProduceIds);
|
|
|
if(match){
|
|
|
rounding+=1;
|
|
|
- }else {
|
|
|
+ List<ReportSteelNum> newReportSteelNums=new ArrayList<>();
|
|
|
+ //作为凑整的钢印号直接去掉
|
|
|
+ for (int i = 0; i < reportSteelNums.size(); i++) {
|
|
|
+ if(reportSteelNums.get(i).getSteelNum().equals(steelNum)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ newReportSteelNums.add(reportSteelNums.get(i));
|
|
|
+ }
|
|
|
+ reportSteelNums=newReportSteelNums;
|
|
|
+ List<String> newSteelNums=new ArrayList<>();
|
|
|
+ for (int i = 0; i < steelNums.size(); i++) {
|
|
|
+ if(steelNums.get(i).equals(steelNum)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ newSteelNums.add(steelNums.get(i));
|
|
|
+ }
|
|
|
+ steelNums=newSteelNums;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(String steelNum : steelNums){
|
|
|
+ //找到该产品下填报了该钢印号的所有日报数据
|
|
|
+ List<Integer> hasReportIds = reportSteelNums.stream().filter(r -> r.getSteelNum().equals(steelNum)).collect(Collectors.toList()).stream().map(ReportSteelNum::getReportId).collect(Collectors.toList());
|
|
|
+ List<Report> hasReportList = targetReportList.stream().filter(r->hasReportIds.contains(r.getId())).collect(Collectors.toList());
|
|
|
+ //过滤日报所填了哪些工序
|
|
|
+ List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
|
|
|
+ if(!hasReportProdProduceIds.containsAll(targetProdProduceIds)){
|
|
|
+ List<Integer> hasNotReportProdProduceIds=new ArrayList<>();
|
|
|
+ targetProdProduceIds.forEach(tp->{
|
|
|
+ if(!hasReportProdProduceIds.contains(tp)){
|
|
|
+ hasNotReportProdProduceIds.add(tp);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ //所有已填报的钢印号有任意满足 上面未填报工序集合 就算凑整件数
|
|
|
+ //找到所有填报了未填报其工序日报数据
|
|
|
+ List<Report> comparatorReportList = targetReportList.stream().filter(r ->r.getProdProcedureId()!=null && hasNotReportProdProduceIds.contains(r.getProdProcedureId())).collect(Collectors.toList());
|
|
|
+ //过滤这些日报下的工序数据
|
|
|
+ List<Integer> targetComparator = comparatorReportList.stream().map(Report::getProdProcedureId).distinct().collect(Collectors.toList());
|
|
|
+ boolean match = targetComparator.containsAll(hasNotReportProdProduceIds);
|
|
|
+ if(match){
|
|
|
//计算当前产品的总预算工时
|
|
|
BigDecimal reduce = targetProdProcedures.stream().map(i -> new BigDecimal(i.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
//利用上面找到的所填了哪些工序 按照所在工序占比计算
|
|
@@ -4825,21 +4887,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
for (ProdProcedure hasReportProcedure : hasReportProcedures) {
|
|
|
//找到当前工序所在产品总预算工时
|
|
|
BigDecimal decimal = new BigDecimal(hasReportProcedure.getWorkingTime());
|
|
|
- BigDecimal divide = decimal.divide(reduce, 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide = decimal.divide(reduce, 2,BigDecimal.ROUND_HALF_UP);
|
|
|
BigDecimal check = new BigDecimal(1);
|
|
|
- check=check.multiply(divide);
|
|
|
- bigDecimal=bigDecimal.add(check);
|
|
|
+ check=check.multiply(divide).setScale(2,BigDecimal.ROUND_HALF_UP);
|
|
|
+ bigDecimal=bigDecimal.add(check).setScale(2,BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
- converted+=bigDecimal.doubleValue();
|
|
|
+ converted=converted.add(bigDecimal);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
+ converted = converted.setScale(2, BigDecimal.ROUND_HALF_UP);
|
|
|
resultMap.put("integrated",integrated);
|
|
|
resultMap.put("rounding",rounding);
|
|
|
resultMap.put("converted",converted);
|
|
|
BigDecimal bigDecimal=new BigDecimal(integrated);
|
|
|
- bigDecimal=bigDecimal.add(new BigDecimal(rounding)).add(new BigDecimal(converted));
|
|
|
+ bigDecimal=bigDecimal.add(new BigDecimal(rounding)).add(converted);
|
|
|
resultMap.put("total",bigDecimal.doubleValue());
|
|
|
resultMapList.add(resultMap);
|
|
|
}
|
|
@@ -4939,73 +5001,87 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public HttpRespMsg getPlanDataWithStation(Integer isFilterDept,Integer stationId, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
|
|
|
- HttpRespMsg msg=new HttpRespMsg();
|
|
|
- User user = userMapper.selectById(request.getHeader("token"));
|
|
|
- NumberFormat format = NumberFormat.getPercentInstance();
|
|
|
- format.setMinimumFractionDigits(2);
|
|
|
- Integer companyId = user.getCompanyId();
|
|
|
- DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
- DateTimeFormatter dtf1=DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
- List<LocalDate> dates = getDays(LocalDate.parse(startDate, dtf), LocalDate.parse(endDate, dtf));
|
|
|
- List<String> dataStringList=new ArrayList<>();
|
|
|
- for (LocalDate localDate : dates) {
|
|
|
- dataStringList.add(localDate.format(dtf1));
|
|
|
- }
|
|
|
- Integer pageStart = null;
|
|
|
- if (pageIndex!=null){
|
|
|
- pageStart = (pageIndex -1) * pageSize;
|
|
|
- pageSize=pageStart+pageSize;
|
|
|
- }
|
|
|
- List<Integer> deptIds=null;
|
|
|
- if(isFilterDept!=0){
|
|
|
- List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().select(Department::getDepartmentId).eq(Department::getSuperiorId, stationId));
|
|
|
- deptIds=departmentList.stream().map(Department::getDepartmentId).distinct().collect(Collectors.toList());
|
|
|
- }
|
|
|
- boolean viewAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部车间工位计划表");
|
|
|
- List<Map<String, Object>> mapList;
|
|
|
- Integer total;
|
|
|
- if(!viewAll){
|
|
|
- mapList = reportMapper.getPlanDataWithStation(companyId, startDate, endDate, user.getId(), deptIds, pageStart, pageSize);
|
|
|
- // total = reportMapper.getPlanDataWithStationCount(companyId, startDate, endDate, user.getId(), deptIds, null, null);
|
|
|
- }else {
|
|
|
- mapList = reportMapper.getPlanDataWithStation(companyId,startDate,endDate,null,deptIds,pageStart,pageSize);
|
|
|
- // total =reportMapper.getPlanDataWithStationCount(companyId,startDate,endDate,null,deptIds,null,null);
|
|
|
- }
|
|
|
- List<String> dateList = mapList.stream().map(m -> String.valueOf(m.get("startDate"))).distinct().collect(Collectors.toList());
|
|
|
- Map<Object, List<Map<String, Object>>> listMapGroupByDate = mapList.stream().collect(Collectors.groupingBy(m -> String.valueOf(m.get("startDate"))));
|
|
|
- Map<String,Object> resultMap=new HashMap<>();
|
|
|
- //处理数据 先按照日期 再按照分组重新组装数据
|
|
|
- List<Map<String,Object>> resultList=new ArrayList<>();
|
|
|
- for (String date : dateList) {
|
|
|
- List<Map<String, Object>> maps = listMapGroupByDate.get(date);
|
|
|
- if(maps==null||maps.size()<=0){
|
|
|
- continue;
|
|
|
- }
|
|
|
- List<Integer> deptIdList = maps.stream().map(m -> Integer.valueOf(String.valueOf(m.get("deptId")))).distinct().collect(Collectors.toList());
|
|
|
- Map<Object, List<Map<String, Object>>> listMapGroupByDept = maps.stream().collect(Collectors.groupingBy(m -> Integer.valueOf(String.valueOf(m.get("deptId")))));
|
|
|
- Map<String,Object> item=new HashMap<>();
|
|
|
- item.put("startDate",date);
|
|
|
- BigDecimal planNum=new BigDecimal(0);
|
|
|
- BigDecimal nowNum=new BigDecimal(0);
|
|
|
- for (Integer dept : deptIdList) {
|
|
|
- List<Map<String, Object>> list = listMapGroupByDept.get(dept);
|
|
|
- item.put("deptId",dept);
|
|
|
- for (Map<String, Object> map : list) {
|
|
|
- planNum=planNum.add(new BigDecimal((String.valueOf(map.get("planNum")))));
|
|
|
- nowNum=nowNum.add(new BigDecimal((String.valueOf(map.get("nowNum")))));
|
|
|
- }
|
|
|
- item.put("planNum",planNum.doubleValue());
|
|
|
- item.put("nowNum",nowNum.doubleValue());
|
|
|
- BigDecimal progress = nowNum.divide(planNum, RoundingMode.HALF_UP);
|
|
|
- item.put("progress",format.format(progress.doubleValue()));
|
|
|
- resultList.add(item);
|
|
|
- }
|
|
|
- }
|
|
|
- resultMap.put("records",resultList.subList(pageStart,pageSize));
|
|
|
- resultMap.put("header",dataStringList);
|
|
|
- resultMap.put("total",resultList.size());
|
|
|
- msg.setData(resultMap);
|
|
|
- return msg;
|
|
|
- }
|
|
|
+ public HttpRespMsg getPlanDataWithStation(Integer isFilterDept,Integer stationId, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
|
|
|
+ HttpRespMsg msg=new HttpRespMsg();
|
|
|
+ User user = userMapper.selectById(request.getHeader("token"));
|
|
|
+ NumberFormat format = NumberFormat.getPercentInstance();
|
|
|
+ format.setMinimumFractionDigits(2);
|
|
|
+ Integer companyId = user.getCompanyId();
|
|
|
+ DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ DateTimeFormatter dtf1=DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
+ List<LocalDate> dates = getDays(LocalDate.parse(startDate, dtf), LocalDate.parse(endDate, dtf));
|
|
|
+ List<String> dataStringList=new ArrayList<>();
|
|
|
+ for (LocalDate localDate : dates) {
|
|
|
+ dataStringList.add(localDate.format(dtf1));
|
|
|
+ }
|
|
|
+ Integer pageStart = null;
|
|
|
+ if (pageIndex!=null){
|
|
|
+ pageStart = (pageIndex -1) * pageSize;
|
|
|
+ pageSize=pageStart+pageSize;
|
|
|
+ }
|
|
|
+ List<Integer> deptIds=null;
|
|
|
+ if(isFilterDept!=0){
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().select(Department::getDepartmentId).eq(Department::getSuperiorId, stationId));
|
|
|
+ deptIds=departmentList.stream().map(Department::getDepartmentId).distinct().collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ boolean viewAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部车间工位计划表");
|
|
|
+ List<Map<String, Object>> mapList;
|
|
|
+ Integer total;
|
|
|
+ if(!viewAll){
|
|
|
+ mapList = reportMapper.getPlanDataWithStation(companyId, startDate, endDate, user.getId(), deptIds, pageStart, pageSize);
|
|
|
+// total = reportMapper.getPlanDataWithStationCount(companyId, startDate, endDate, user.getId(), deptIds, null, null);
|
|
|
+ }else {
|
|
|
+ mapList = reportMapper.getPlanDataWithStation(companyId,startDate,endDate,null,deptIds,pageStart,pageSize);
|
|
|
+// total =reportMapper.getPlanDataWithStationCount(companyId,startDate,endDate,null,deptIds,null,null);
|
|
|
+ }
|
|
|
+ List<String> dateList = mapList.stream().map(m -> String.valueOf(m.get("startDate"))).distinct().collect(Collectors.toList());
|
|
|
+ Map<Object, List<Map<String, Object>>> listMapGroupByDate = mapList.stream().collect(Collectors.groupingBy(m -> String.valueOf(m.get("startDate"))));
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
|
|
|
+ Map<String,Object> resultMap=new HashMap<>();
|
|
|
+ //处理数据 先按照日期 再按照分组重新组装数据
|
|
|
+ List<Map<String,Object>> resultList=new ArrayList<>();
|
|
|
+ for (String date : dateList) {
|
|
|
+ List<Map<String, Object>> maps = listMapGroupByDate.get(date);
|
|
|
+ if(maps==null||maps.size()<=0){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<Integer> deptIdList = maps.stream().map(m -> Integer.valueOf(String.valueOf(m.get("deptId")))).distinct().collect(Collectors.toList());
|
|
|
+ Map<Object, List<Map<String, Object>>> listMapGroupByDept = maps.stream().collect(Collectors.groupingBy(m -> Integer.valueOf(String.valueOf(m.get("deptId")))));
|
|
|
+ BigDecimal planNum=new BigDecimal(0);
|
|
|
+ BigDecimal nowNum=new BigDecimal(0);
|
|
|
+ for (Integer dept : deptIdList) {
|
|
|
+ Map<String,Object> item=new HashMap<>();
|
|
|
+ item.put("startDate",date.replaceAll("-",""));
|
|
|
+ List<Map<String, Object>> list = listMapGroupByDept.get(dept);
|
|
|
+ item.put("deptId",dept);
|
|
|
+ item.put("departmentCascade",convertDepartmentIdToCascade(dept,departmentList));
|
|
|
+ for (Map<String, Object> map : list) {
|
|
|
+ planNum=planNum.add(new BigDecimal((String.valueOf(map.get("planNum")))));
|
|
|
+ nowNum=nowNum.add(new BigDecimal((String.valueOf(map.get("nowNum")))));
|
|
|
+ }
|
|
|
+ item.put("planNum",planNum.doubleValue());
|
|
|
+ item.put("nowNum",nowNum.doubleValue());
|
|
|
+ BigDecimal progress = nowNum.divide(planNum, RoundingMode.HALF_UP);
|
|
|
+ item.put("progress",format.format(progress.doubleValue()));
|
|
|
+ resultList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> deptIdList = resultList.stream().map(r -> String.valueOf(r.get("deptId"))).distinct().collect(Collectors.toList());
|
|
|
+ List<Map<String,Object>> lastList=new ArrayList<>();
|
|
|
+ for (String dept : deptIdList) {
|
|
|
+ Map<String,Object> map=new HashMap<>();
|
|
|
+ map.put("departmentCascade",convertDepartmentIdToCascade(Integer.valueOf(dept),departmentList));
|
|
|
+ map.put("deptList",resultList.stream().filter(r->String.valueOf(r.get("deptId")).equals(dept)).collect(Collectors.toList()));
|
|
|
+ lastList.add(map);
|
|
|
+ }
|
|
|
+ //得到的数据再根据部门过滤一下
|
|
|
+ if(pageSize>lastList.size()){
|
|
|
+ pageSize=lastList.size();
|
|
|
+ }
|
|
|
+ resultMap.put("records",lastList.subList(pageStart,pageSize));
|
|
|
+ resultMap.put("header",dataStringList);
|
|
|
+ resultMap.put("total",lastList.size());
|
|
|
+ msg.setData(resultMap);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
}
|