Просмотр исходного кода

优化correctWorkingTime:修正部门工时

seyason 2 лет назад
Родитель
Сommit
0a0ab88d06

+ 45 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -5205,29 +5205,60 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     public HttpRespMsg correctWorkingTime(String userIds, String startDate, String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         QueryWrapper<Report> queryWrapper=new QueryWrapper<>();
-        if(startDate!=null&&endDate!=null){
+        //只需要查询2个字段,report表比较大,按需要的字段查询来提高sql效率
+        queryWrapper.select("id, creator_id, dept_id");
+        if(!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)){
             queryWrapper.between("create_date",startDate,endDate);
         }
+        if (StringUtils.isEmpty(userIds)) {
+            msg.setError("人员不能为空");
+            return msg;
+        }
         String[] split = userIds.split(",");
         List<String> userIdList = Arrays.asList(split);
         queryWrapper.in("creator_id",userIdList);
         List<Report> reportList = reportMapper.selectList(queryWrapper);
-        List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", userIdList));
-        for (String userId : userIdList) {
-            //当前人员所填的日报数据
-            List<Report> list = reportList.stream().filter(rl -> rl.getCreatorId().equals(userId)).collect(Collectors.toList());
-            //当前人员
-            User user = userList.stream().filter(ul -> ul.getId().equals(userId)).findFirst().get();
-            //满足 与人员当前部门不相符的日报数据才发生变更
-            List<Report> needChangeReportList = list.stream().filter(l -> !l.getDeptId().equals(user.getDepartmentId())).collect(Collectors.toList());
-            needChangeReportList.forEach(nl->{
-                nl.setDeptId(user.getDepartmentId());
+
+        if (reportList.size() == 0) {
+            msg.setError("当前人员尚未填写日报");
+        } else {
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", userIdList));
+            //声明需要更新的数据集合,移到for循环外面来执行updateBatch
+            List<Report> needChangeReportList = new ArrayList<>();
+            reportList.forEach(r->{
+                //找到日报填写人当前的部门
+                User user = userList.stream().filter(ul -> ul.getId().equals(r.getCreatorId())).findFirst().get();
+                if (!r.getDeptId().equals(user.getDepartmentId())) {
+                    r.setCreatorId(null);
+                    System.out.println(""+r.getId()+", "+r.getDeptId());
+                    r.setDeptId(user.getDepartmentId());
+                    needChangeReportList.add(r);
+                }
             });
-            if(needChangeReportList.size()>0&&!updateBatchById(needChangeReportList)){
-                msg.setError(MessageUtils.message("Company.validationError"));
-                return msg;
+            if (needChangeReportList.size() > 0) {
+                updateBatchById(needChangeReportList);
+                msg.data = "共更新"+needChangeReportList.size()+"条日报数据";
+            } else {
+                msg.data = "日报所属部门与人员当前部门一致,无需更新";
             }
         }
+
+        //上方的写法比下方的更简洁,减少一次外循环,性能更好
+//        for (String userId : userIdList) {
+//            //当前人员所填的日报数据
+//            List<Report> list = reportList.stream().filter(rl -> rl.getCreatorId().equals(userId)).collect(Collectors.toList());
+//            //当前人员
+//            User user = userList.stream().filter(ul -> ul.getId().equals(r.getCreatorId())).findFirst().get();
+//            //满足 与人员当前部门不相符的日报数据才发生变更
+//            List<Report> updateReportList = list.stream().filter(l -> !l.getDeptId().equals(user.getDepartmentId())).collect(Collectors.toList());
+//            needChangeReportList.forEach(nl->{
+//                nl.setDeptId(user.getDepartmentId());
+//            });
+//            if(needChangeReportList.size()>0&&!updateBatchById(needChangeReportList)){
+//                msg.setError(MessageUtils.message("Company.validationError"));
+//                return msg;
+//            }
+//        }
         return msg;
     }
 

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -3439,7 +3439,7 @@ export default {
         if (res.code == "ok") {
           this.getUser();
           this.workingHoursDialog = false
-          this.$message({message: '操作成功',type: "success"});
+          this.$message({message: '操作成功:'+res.data,type: "success"});
         } else {
             this.$message({message: res.msg,type: "error"});
         }