Преглед изворни кода

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper into master

seyason пре 1 година
родитељ
комит
b0f923164d

+ 1 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -206,4 +206,5 @@ public interface ReportMapper extends BaseMapper<Report> {
 
     List<Map<String,Object>> getPlanDataWithStation(Integer companyId, String startDate, String endDate, String foremanId, Integer pageStart, Integer pageSize);
 
+    List<Map<String, Object>> getPlanDataWithUser(Integer companyId, String startDate, String endDate, Integer filterDeptId);
 }

+ 176 - 77
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4771,6 +4771,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         for (Product product : products) {
             Map<String,Object> resultMap=new HashMap<>();
             resultMap.put("productName",product.getName());
+            List<String> integratedSteelNums=new ArrayList<>();
+            List<String> roundingSteelNums=new ArrayList<>();
             //完整件数
             Integer integrated=0;
             //凑整件数
@@ -4798,6 +4800,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //如果全包含了所需路过的全部工序内容 就算完整件数
                 if(hasReportProdProduceIds.containsAll(targetProdProduceIds)){
                     integrated+=1;
+                    integratedSteelNums.add(steelNum);
                     List<ReportSteelNum> newReportSteelNums=new ArrayList<>();
                     //作为完整的钢印号直接去掉
                     for (int i = 0; i < reportSteelNums.size(); i++) {
@@ -4819,6 +4822,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             //计算凑整件数
             for (String steelNum : steelNums) {
+                if(roundingSteelNums.contains(steelNum)){
+                    continue;
+                }
                 //找到该产品下填报了该钢印号的所有日报数据
                 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());
@@ -4826,7 +4832,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 List<Integer> hasReportProdProduceIds = hasReportList.stream().map(Report::getProdProcedureId).collect(Collectors.toList());
                 //如果没有包含所需路过的全部工序内容 (有任意工序可以共同完成)-->凑整
                 //根据当前钢印号已经填报的内容 对比出没有填报的工序内容
-                if(hasReportProdProduceIds.containsAll(targetProdProduceIds)){
+                if(!hasReportProdProduceIds.containsAll(targetProdProduceIds)){
                     List<Integer> hasNotReportProdProduceIds=new ArrayList<>();
                     targetProdProduceIds.forEach(tp->{
                         if(!hasReportProdProduceIds.contains(tp)){
@@ -4834,17 +4840,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         }
                     });
                     //所有已填报的钢印号有任意满足 上面未填报工序集合 就算凑整件数
-                    //找到所有填报了未填报其工序日报数据
-                    List<Report> comparatorReportList = targetReportList.stream().filter(r ->r.getProdProcedureId()!=null && hasNotReportProdProduceIds.contains(r.getProdProcedureId())).collect(Collectors.toList());
+                    //找到所有可能填报了未填报其工序日报数据
+                    List<Report> comparatorReportList = targetReportList.stream().filter(r ->r.getSteelNumArray()!=null&&JSONArray.parseArray(r.getSteelNumArray()).stream().anyMatch(a->!integratedSteelNums.contains(a))&&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){
                         rounding+=1;
+                        roundingSteelNums.add(steelNum);
+                        //找到参与凑整的钢印号
+                        List<Integer> hasJoinReportIds = comparatorReportList.stream().map(Report::getId).collect(Collectors.toList());
+                        roundingSteelNums.addAll(reportSteelNums.stream().filter(r -> hasJoinReportIds.contains(r.getReportId())).map(ReportSteelNum::getSteelNum).collect(Collectors.toList()));
                         List<ReportSteelNum> newReportSteelNums=new ArrayList<>();
                         //作为凑整的钢印号直接去掉
                         for (int i = 0; i < reportSteelNums.size(); i++) {
-                            if(reportSteelNums.get(i).getSteelNum().equals(steelNum)){
+                            if(reportSteelNums.get(i).getSteelNum().equals(steelNum)||roundingSteelNums.contains(reportSteelNums.get(i).getSteelNum())){
                                 continue;
                             }
                             newReportSteelNums.add(reportSteelNums.get(i));
@@ -4898,6 +4908,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     }
                 }
             }
+            resultMap.put("integratedSteelNums",integratedSteelNums);
+            resultMap.put("roundingSteelNums",roundingSteelNums);
             converted = converted.setScale(2, BigDecimal.ROUND_HALF_UP);
             resultMap.put("integrated",integrated);
             resultMap.put("rounding",rounding);
@@ -5007,6 +5019,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         NumberFormat format = NumberFormat.getPercentInstance();
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, user.getCompanyId()));
         format.setMinimumFractionDigits(2);
         Integer companyId = user.getCompanyId();
         DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -5023,11 +5036,28 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         boolean viewAll = sysFunctionService.hasPriviledge(user.getRoleId(), "查看全部车间工位计划表");
         List<Map<String, Object>> mapList;
+        List<Integer> deptIds = new ArrayList<>();
+        boolean isViewUser=false;
         if(!viewAll){
+            isFilterDept=1;
+            List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getManagerId, user.getId()));
+            deptIds=departmentList.stream().map(m->m.getSuperiorId()==null?m.getDepartmentId():m.getSuperiorId()).collect(Collectors.toList());
             mapList = reportMapper.getPlanDataWithStation(companyId, startDate, endDate, user.getId(), pageStart, pageSize);
         }else {
             mapList = reportMapper.getPlanDataWithStation(companyId,startDate,endDate,null,pageStart,pageSize);
         }
+        //有传部门的情况下
+        if(filterDeptId!=null){
+            //且该部门下没有任何子部门
+            Integer count = departmentMapper.selectCount(new LambdaQueryWrapper<Department>().eq(Department::getSuperiorId, filterDeptId));
+            if(count<=0){
+                //查看人员数据
+                isViewUser=true;
+            }
+        }
+        if(isViewUser){
+            mapList = reportMapper.getPlanDataWithUser(companyId, startDate, endDate,filterDeptId);
+        }
         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));
@@ -5039,90 +5069,158 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if(maps==null||maps.size()<=0){
                 continue;
             }
-            List<Integer> deptIdList;
-            Map<Object, List<Map<String, Object>>> listMapGroupByDept;
+            List<Integer> deptIdList=new ArrayList<>();
+            List<String> userIdList=new ArrayList<>();
+            Map<Object, List<Map<String, Object>>> listMapGroupByDept=new HashMap<>();
+            Map<Object, List<Map<String, Object>>> listMapGroupByUser=new HashMap<>();
             if(isFilterDept==0){
                 deptIdList  = maps.stream().map(m -> Integer.valueOf(String.valueOf(m.get("superiorId")))).distinct().collect(Collectors.toList());
                 listMapGroupByDept = maps.stream().collect(Collectors.groupingBy(m -> Integer.valueOf(String.valueOf(m.get("superiorId")))));
             }else {
-                deptIdList = maps.stream().filter(m->Integer.valueOf(String.valueOf(m.get("superiorId"))).equals(filterDeptId)).map(m -> Integer.valueOf(String.valueOf(m.get("deptId")))).distinct().collect(Collectors.toList());
-                listMapGroupByDept = maps.stream().collect(Collectors.groupingBy(m -> Integer.valueOf(String.valueOf(m.get("deptId")))));
+                List<Integer> finalDeptIds = deptIds;
+                if(isViewUser){
+                    userIdList= maps.stream().map(m -> String.valueOf(m.get("userId"))).distinct().collect(Collectors.toList());
+                    listMapGroupByUser = maps.stream().collect(Collectors.groupingBy(m -> String.valueOf(m.get("userId"))));
+                }else {
+                    deptIdList = maps.stream().filter(m->filterDeptId!=null?Integer.valueOf(String.valueOf(m.get("superiorId"))).equals(filterDeptId):finalDeptIds.contains(Integer.valueOf(String.valueOf(m.get("superiorId"))))).map(m -> Integer.valueOf(String.valueOf(m.get("deptId")))).distinct().collect(Collectors.toList());
+                    listMapGroupByDept = maps.stream().collect(Collectors.groupingBy(m -> Integer.valueOf(String.valueOf(m.get("deptId")))));
+                }
             }
-            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));
-                BigDecimal planNum=new BigDecimal(0);
-                BigDecimal nowNum=new BigDecimal(0);
-                BigDecimal planCost=new BigDecimal(0);
-                BigDecimal nowCost=new BigDecimal(0);
-                BigDecimal planHour=new BigDecimal(0);
-                BigDecimal nowHour=new BigDecimal(0);
-                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")))));
-                    planCost=planCost.add(new BigDecimal((String.valueOf(map.get("planCost")))));
-                    nowCost=nowCost.add(new BigDecimal((String.valueOf(map.get("nowCost")))));
-                    planHour=planHour.add(new BigDecimal((String.valueOf(map.get("planHour")))));
-                    nowHour=nowHour.add(new BigDecimal((String.valueOf(map.get("nowHour")))));
+            if(isViewUser){
+                for (String userId : userIdList) {
+                    Map<String,Object> item=new HashMap<>();
+                    item.put("startDate",date.replaceAll("-",""));
+                    List<Map<String, Object>> list = listMapGroupByUser.get(userId);
+                    item.put("userId",userId);
+                    BigDecimal planCost=new BigDecimal(0);
+                    BigDecimal nowCost=new BigDecimal(0);
+                    BigDecimal planHour=new BigDecimal(0);
+                    BigDecimal nowHour=new BigDecimal(0);
+                    for (Map<String, Object> map : list) {
+                        planCost=planCost.add(new BigDecimal((String.valueOf(map.get("planCost")))));
+                        nowCost=nowCost.add(new BigDecimal((String.valueOf(map.get("nowCost")))));
+                        planHour=planHour.add(new BigDecimal((String.valueOf(map.get("planHour")))));
+                        nowHour=nowHour.add(new BigDecimal((String.valueOf(map.get("nowHour")))));
+                    }
+                    planCost=planCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    nowCost=nowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    planHour=planHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    nowHour=nowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    item.put("planCost",planCost.doubleValue());
+                    item.put("nowCost",nowCost.doubleValue());
+                    item.put("planHour",planHour.doubleValue());
+                    item.put("nowHour",nowHour.doubleValue());
+                    resultList.add(item);
+                }
+            }else {
+                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));
+                    BigDecimal planNum=new BigDecimal(0);
+                    BigDecimal nowNum=new BigDecimal(0);
+                    BigDecimal planCost=new BigDecimal(0);
+                    BigDecimal nowCost=new BigDecimal(0);
+                    BigDecimal planHour=new BigDecimal(0);
+                    BigDecimal nowHour=new BigDecimal(0);
+                    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")))));
+                        planCost=planCost.add(new BigDecimal((String.valueOf(map.get("planCost")))));
+                        nowCost=nowCost.add(new BigDecimal((String.valueOf(map.get("nowCost")))));
+                        planHour=planHour.add(new BigDecimal((String.valueOf(map.get("planHour")))));
+                        nowHour=nowHour.add(new BigDecimal((String.valueOf(map.get("nowHour")))));
+                    }
+                    planNum=planNum.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    nowNum=nowNum.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    planCost=planCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    nowCost=nowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    planHour=planHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    nowHour=nowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                    item.put("planNum",planNum.doubleValue());
+                    item.put("nowNum",nowNum.doubleValue());
+                    item.put("planCost",planCost.doubleValue());
+                    item.put("nowCost",nowCost.doubleValue());
+                    item.put("planHour",planHour.doubleValue());
+                    item.put("nowHour",nowHour.doubleValue());
+                    BigDecimal progress = nowNum.divide(planNum,2, BigDecimal.ROUND_HALF_UP);
+                    item.put("progress",format.format(progress.doubleValue()));
+                    resultList.add(item);
                 }
-                planNum=planNum.setScale(2,BigDecimal.ROUND_HALF_UP);
-                nowNum=nowNum.setScale(2,BigDecimal.ROUND_HALF_UP);
-                planCost=planCost.setScale(2,BigDecimal.ROUND_HALF_UP);
-                nowCost=nowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
-                planHour=planHour.setScale(2,BigDecimal.ROUND_HALF_UP);
-                nowHour=nowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
-                item.put("planNum",planNum.doubleValue());
-                item.put("nowNum",nowNum.doubleValue());
-                item.put("planCost",planCost.doubleValue());
-                item.put("nowCost",nowCost.doubleValue());
-                item.put("planHour",planHour.doubleValue());
-                item.put("nowHour",nowHour.doubleValue());
-                BigDecimal progress = nowNum.divide(planNum,2, BigDecimal.ROUND_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));
-            List<Map<String, Object>> maps = resultList.stream().filter(r -> String.valueOf(r.get("deptId")).equals(dept)).collect(Collectors.toList());
-            map.put("deptList",maps);
-            map.put("deptId",dept);
-            BigDecimal totalPlanNum = new BigDecimal(0);
-            BigDecimal totalNowNum = new BigDecimal(0);
-            BigDecimal totalPlanHour = new BigDecimal(0);
-            BigDecimal totalNowHour = new BigDecimal(0);
-            BigDecimal totalPlanCost = new BigDecimal(0);
-            BigDecimal totalNowCost= new BigDecimal(0);
-            for (Map<String, Object> stringObjectMap : maps) {
-                totalPlanNum=totalPlanNum.add(new BigDecimal((String.valueOf(stringObjectMap.get("planNum")))));
-                totalNowNum=totalNowNum.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowNum")))));
-                totalPlanHour=totalPlanHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("planHour")))));
-                totalNowHour=totalNowHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowHour")))));
-                totalPlanCost=totalPlanCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("planCost")))));
-                totalNowCost=totalNowCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowCost")))));
+        if(isViewUser){
+            List<String> userIdList = resultList.stream().map(r -> String.valueOf(r.get("userId"))).distinct().collect(Collectors.toList());
+            for (String userId : userIdList) {
+                Map<String,Object> map=new HashMap<>();
+                List<Map<String, Object>> maps = resultList.stream().filter(r -> String.valueOf(r.get("userId")).equals(userId)).collect(Collectors.toList());
+                map.put("userList",maps);
+                map.put("userId",userId);
+                Optional<User> first = userList.stream().filter(u -> u.getId().equals(userId)).findFirst();
+                map.put("userName",first.isPresent()?first.get().getName():"");
+                BigDecimal totalPlanHour = new BigDecimal(0);
+                BigDecimal totalNowHour = new BigDecimal(0);
+                BigDecimal totalPlanCost = new BigDecimal(0);
+                BigDecimal totalNowCost= new BigDecimal(0);
+                for (Map<String, Object> stringObjectMap : maps) {
+                    totalPlanHour=totalPlanHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("planHour")))));
+                    totalNowHour=totalNowHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowHour")))));
+                    totalPlanCost=totalPlanCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("planCost")))));
+                    totalNowCost=totalNowCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowCost")))));
+                }
+                totalPlanHour=totalPlanHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalNowHour=totalNowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalPlanCost=totalPlanCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalNowCost=totalNowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                map.put("totalPlanHour",totalPlanHour.doubleValue());
+                map.put("totalNowHour",totalNowHour.doubleValue());
+                map.put("totalPlanCost",totalPlanCost.doubleValue());
+                map.put("totalNowCost",totalNowCost.doubleValue());
+                lastList.add(map);
+            }
+        }else {
+            List<String> deptIdList = resultList.stream().map(r -> String.valueOf(r.get("deptId"))).distinct().collect(Collectors.toList());
+            for (String dept : deptIdList) {
+                Map<String,Object> map=new HashMap<>();
+                map.put("departmentCascade",convertDepartmentIdToCascade(Integer.valueOf(dept),departmentList));
+                List<Map<String, Object>> maps = resultList.stream().filter(r -> String.valueOf(r.get("deptId")).equals(dept)).collect(Collectors.toList());
+                map.put("deptList",maps);
+                map.put("deptId",dept);
+                BigDecimal totalPlanNum = new BigDecimal(0);
+                BigDecimal totalNowNum = new BigDecimal(0);
+                BigDecimal totalPlanHour = new BigDecimal(0);
+                BigDecimal totalNowHour = new BigDecimal(0);
+                BigDecimal totalPlanCost = new BigDecimal(0);
+                BigDecimal totalNowCost= new BigDecimal(0);
+                for (Map<String, Object> stringObjectMap : maps) {
+                    totalPlanNum=totalPlanNum.add(new BigDecimal((String.valueOf(stringObjectMap.get("planNum")))));
+                    totalNowNum=totalNowNum.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowNum")))));
+                    totalPlanHour=totalPlanHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("planHour")))));
+                    totalNowHour=totalNowHour.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowHour")))));
+                    totalPlanCost=totalPlanCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("planCost")))));
+                    totalNowCost=totalNowCost.add(new BigDecimal((String.valueOf(stringObjectMap.get("nowCost")))));
+                }
+                totalPlanNum=totalPlanNum.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalNowNum=totalNowNum.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalPlanHour=totalPlanHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalNowHour=totalNowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalPlanCost=totalPlanCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                totalNowCost=totalNowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
+                map.put("totalPlanNum",totalPlanNum.doubleValue());
+                map.put("totalNowNum",totalNowNum.doubleValue());
+                map.put("totalPlanHour",totalPlanHour.doubleValue());
+                map.put("totalNowHour",totalNowHour.doubleValue());
+                map.put("totalPlanCost",totalPlanCost.doubleValue());
+                map.put("totalNowCost",totalNowCost.doubleValue());
+                BigDecimal totalProgress = totalNowNum.divide(totalPlanNum, 2, BigDecimal.ROUND_HALF_UP);
+                map.put("totalProgress",format.format(totalProgress.doubleValue()));
+                lastList.add(map);
             }
-            totalPlanNum=totalPlanNum.setScale(2,BigDecimal.ROUND_HALF_UP);
-            totalNowNum=totalNowNum.setScale(2,BigDecimal.ROUND_HALF_UP);
-            totalPlanHour=totalPlanHour.setScale(2,BigDecimal.ROUND_HALF_UP);
-            totalNowHour=totalNowHour.setScale(2,BigDecimal.ROUND_HALF_UP);
-            totalPlanCost=totalPlanCost.setScale(2,BigDecimal.ROUND_HALF_UP);
-            totalNowCost=totalNowCost.setScale(2,BigDecimal.ROUND_HALF_UP);
-            map.put("totalPlanNum",totalPlanNum.doubleValue());
-            map.put("totalNowNum",totalNowNum.doubleValue());
-            map.put("totalPlanHour",totalPlanHour.doubleValue());
-            map.put("totalNowHour",totalNowHour.doubleValue());
-            map.put("totalPlanCost",totalPlanCost.doubleValue());
-            map.put("totalNowCost",totalNowCost.doubleValue());
-            BigDecimal totalProgress = totalNowNum.divide(totalPlanNum, 2, BigDecimal.ROUND_HALF_UP);
-            map.put("totalProgress",format.format(totalProgress.doubleValue()));
-            lastList.add(map);
         }
+
         if(stationId!=null){
             lastList=lastList.stream().filter(l->Integer.valueOf(String.valueOf(l.get("deptId"))).equals(stationId)).collect(Collectors.toList());
         }
@@ -5133,6 +5231,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         resultMap.put("records",(pageIndex==null||pageSize==null)?lastList:lastList.subList(pageStart,pageSize));
         resultMap.put("header",dataStringList);
         resultMap.put("total",lastList.size());
+        resultMap.put("isViewUser",isViewUser);
         msg.setData(resultMap);
         return msg;
     }

+ 26 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml

@@ -314,7 +314,8 @@
         select b.id as planId,(Case when b.plan_type=0 then b.product_scheduling_num else b.task_change_notice_num end) as taskName,
         b.foreman_name as userName,IFNULL(ROUND(SUM(a.total_working_hours),2),0) as planWorkTime,IFNULL(ROUND(SUM(a.total_wages),2),0)  as planCost,
         IFNULL(ROUND(SUM(a.`total_fill_time`),2),0) AS nowWorkTime,
-        IFNULL(ROUND(SUM(a.`total_wages`*a.`total_progress`/100),2),0) AS nowCost
+        IFNULL(ROUND(SUM(a.`total_wages`*a.`total_progress`/100),2),0) AS nowCost,
+        b.product_name as productName,b.num as planNum,DATE_FORMAT(b.start_date,'%Y-%m-%d') as startDate,DATE_FORMAT(b.end_date,'%Y-%m-%d') as endDate,b.station_name as statinoName
         from plan b
         left join plan_procedure_total a on a.plan_id=b.id
         left join user u on u.id=b.station_id
@@ -460,13 +461,14 @@
         FROM plan p
         LEFT JOIN plan_procedure_total ppt ON ppt.plan_id=p.id
         LEFT JOIN department d ON p.station_id=d.department_id
+        LEFT JOIN department dd ON d.superior_id=dd.department_id
         <where>
             p.company_id=#{companyId}
             <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
                 and p.start_date between #{startDate} and #{endDate}
             </if>
             <if test="foremanId!=null">
-                and p.station_id=#{foremanId}
+                and (d.manager_id=#{foremanId} or dd.manager_id=#{foremanId})
             </if>
         </where>
         group by p.id
@@ -476,4 +478,26 @@
 <!--        </if>-->
     </select>
 
+
+    <select id="getPlanDataWithUser" resultType="java.util.Map">
+        select d.department_id as deptId,u.id as userId, u.name as userName,p.start_date as startDate,IFNULL(ppt2.job_of_money,0) as planCost,IFNULL(ppt2.work_time,0) as planHour,
+        IFNULL((select SUM(working_time) from report where report.user_procedure_team_id=ppt2.id),0) as nowHour,
+        IFNULL((select SUM(cost) from report where report.user_procedure_team_id=ppt2.id),0) as nowCost
+        from
+        plan_procedure_total ppt
+        left join prod_procedure_team ppt2 on ppt2.plan_procedure_id=ppt.id
+        left join user u on ppt2.user_id=u.id
+        left join department d on u.department_id=d.department_id
+        left join plan p on ppt.plan_id=p.id
+        <where>
+         p.company_id=#{companyId}
+         <if test="filterDeptId!=null">
+             and d.department_id=#{filterDeptId}
+         </if>
+        <if test="startDate!=null and startDate!='' and endDate!=null and endDate!=''">
+            and p.start_date between #{startDate} and #{endDate}
+        </if>
+        </where>
+    </select>
+
 </mapper>

+ 33 - 12
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -142,10 +142,23 @@
 
             <!-- 计划实时进度表 -->
             <el-table v-if="ins == 3"  key="4" border :data="planRealTimeProgressList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
-                <el-table-column align="center" prop="taskName" label="排产计划" min-width="150">
+                <el-table-column align="center" prop="taskName" label="排产工单号" min-width="150">
                   <template slot-scope="scope">{{scope.row.taskName}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="userName" label="工长" min-width="250"></el-table-column>
+                <el-table-column align="center" prop="statinoName" label="工位" min-width="250"></el-table-column>
+                <el-table-column align="center" prop="planNum" label="计划件数" min-width="150">
+                  <template slot-scope="scope">{{scope.row.planNum}}</template>
+                </el-table-column>
+                <el-table-column align="center" prop="productName" label="产品名称" min-width="150">
+                  <template slot-scope="scope">{{scope.row.productName}}</template>
+                </el-table-column>
+                <el-table-column align="center" prop="startDate" label="开始日期" min-width="150">
+                  <template slot-scope="scope">{{scope.row.startDate}}</template>
+                </el-table-column>
+                <el-table-column align="center" prop="endDate" label="完工日期" min-width="150">
+                  <template slot-scope="scope">{{scope.row.endDate}}</template>
+                </el-table-column>
+                <el-table-column align="center" prop="statinoName" label="工位" min-width="250"></el-table-column>
                 <el-table-column align="center"  label="计划工时" min-width="150">
                   <template slot-scope="scope" v-if="scope.row.planWorkTime">{{scope.row.planWorkTime}}分钟 {{scope.row.planCost}}元</template>
                 </el-table-column>
@@ -179,7 +192,7 @@
                 <el-table-column align="center" prop="rounding" label="凑整件数" min-width="150">
                   <template slot-scope="scope">{{scope.row.rounding}}</template>
                 </el-table-column>
-                <el-table-column align="center" prop="converted" label="算件数" min-width="150">
+                <el-table-column align="center" prop="converted" label="算件数" min-width="150">
                   <template slot-scope="scope">{{scope.row.converted}}</template>
                 </el-table-column>
                 <el-table-column align="center" prop="total" label="总件数" min-width="150">
@@ -189,28 +202,34 @@
 
             <!-- 车间工位计划表 -->
             <el-table v-if="ins == 6"  key="7" border :data="planDataWithStationDatas" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
-                <el-table-column align="center" prop="departmentCascade" label="部门名称"   min-width="150"  fixed="left">
+                <el-table-column v-if="!isViewUser" align="center" prop="departmentCascade" label="部门名称"   min-width="150"  fixed="left">
                   <template slot-scope="scope">
                     <span class="colorText" @click="getPlanDataWithStation(scope.row.deptId)" >{{scope.row.departmentCascade}}</span>
                     <!-- <span class="colorText" >{{scope.row.departmentCascade}}</span> -->
                   </template>
                 </el-table-column>
+                <el-table-column v-else align="center" prop="departmentCascade" label="人员名称"   min-width="150"  fixed="left">
+                  <template slot-scope="scope">
+                    <span class="colorText">{{scope.row.userName}}</span>
+                    <!-- <span class="colorText" >{{scope.row.departmentCascade}}</span> -->
+                  </template>
+                </el-table-column>
                 <el-table-column v-for="(item, index) in planDataWithStationHead" :key="index" :label="item" align="center" min-width="250">
                     <template slot-scope="scope">
-                        <div v-for="(items, indexs) in scope.row.deptList" :key="indexs" >
+                        <div  v-for="(items, indexs) in (isViewUser?scope.row.userList:scope.row.deptList)" :key="indexs" >
                             <div v-if="items.startDate == item">
-                                <div>计划数:{{items.planNum}}  {{items.planHour}}分钟  {{items.planCost}}元 </div>
-                                <div>实际数:{{items.nowNum}}  {{items.nowHour}}分钟  {{items.nowCost}}元</div>
-                                <div>进度:{{items.progress}}</div>
+                                <div>计划数:{{items.planNum}} {{items.planHour}}分钟  {{items.planCost}}元 </div>
+                                <div>实际数:{{items.nowNum}} {{items.nowHour}}分钟  {{items.nowCost}}元</div>
+                                <div v-if="!isViewUser">进度:{{items.progress}}</div>
                             </div>
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column align="center" prop="totalResult" label="合计" min-width="150">
+                <el-table-column align="center" prop="totalResult" label="合计" min-width="280">
                    <template slot-scope="scope">
-                                计划数:{{scope.row.totalPlanNum}}  {{scope.row.totalPlanHour}}分钟  {{scope.row.totalPlanCost}}元 
-                                实际数:{{scope.row.totalNowNum}}  {{scope.row.totalNowHour}}分钟  {{scope.row.totalNowCost}}元
-                                进度:{{scope.row.totalProgress}}
+                                <div>计划数:{{scope.row.totalPlanNum}}  {{scope.row.totalPlanHour}}分钟  {{scope.row.totalPlanCost}}元 </div>
+                                <div>实际数:{{scope.row.totalNowNum}}  {{scope.row.totalNowHour}}分钟  {{scope.row.totalNowCost}}元</div>
+                                <div>进度:{{scope.row.totalProgress}}</div>
                   </template>
                 </el-table-column>
             </el-table>
@@ -595,6 +614,7 @@ export default {
       productionQuantityList:[],
       planDataWithStationDatas:[],
       planDataWithStationHead:[],
+      isViewUser:false,
 
       //筛选项
       productId:"",
@@ -1016,6 +1036,7 @@ export default {
             this.planDataWithStationDatas=res.data.records
             this.planDataWithStationHead=res.data.header
             this.total=res.data.total
+            this.isViewUser=res.data.isViewUser
           } else {
             this.$message({
               message: res.msg,