瀏覽代碼

修复考勤bug, 子项目直接删除问题

seyason 2 年之前
父節點
當前提交
7d141097bd

+ 26 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -3372,16 +3372,36 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         //兼容中英文逗号
                         String[] subNames = subNameCell.getStringCellValue().trim().split(",|\\,");
                         if (subNames != null) {
-                            subProjectMapper.delete(new QueryWrapper<SubProject>().eq("project_id",project.getId()));
+                            //执行插入,删除操作。不能全部删除,避免已经有的子项目被填写了工时,而造成查不到的情况
+                            List<SubProject> subProjectList = subProjectMapper.selectList(new QueryWrapper<SubProject>().eq("project_id",project.getId()));
+                            List<Integer> readyToRemoveIds = subProjectList.stream().filter(subProject -> {
+                                boolean notExist = true;
+                                for (String s : subNames) {
+                                    if (!StringUtils.isEmpty(s)) {
+                                        if (subProject.getName().equals(s)) {
+                                            //找到了本次有的子项目
+                                            notExist = false;
+                                        }
+                                    }
+                                }
+                                return notExist;
+                            }).map(SubProject::getId).collect(Collectors.toList());
+                            if (readyToRemoveIds.size() > 0) {
+                                subProjectMapper.deleteBatchIds(readyToRemoveIds);
+                            }
                             for (String s : subNames) {
                                 if (!StringUtils.isEmpty(s)) {
-                                    SubProject sp = new SubProject();
-                                    sp.setName(s);
-                                    sp.setProjectId(project.getId());
-                                    sp.setCompanyId(user.getCompanyId());
-                                    subProjectMapper.insert(sp);
+                                    //数据库里面没有的子项目,新增进来
+                                    if (!subProjectList.stream().anyMatch(subProject -> s.equals(subProject.getName()))) {
+                                        SubProject sp = new SubProject();
+                                        sp.setName(s);
+                                        sp.setProjectId(project.getId());
+                                        sp.setCompanyId(user.getCompanyId());
+                                        subProjectMapper.insert(sp);
+                                    }
                                 }
                             }
+
                         }
                     }
                     //导入项目参与人,遵守只增不减的原则, 避免误删

+ 10 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -959,7 +959,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         time = 0;
                     }
                     userCorpwxTime.setWorkHours(time);
-                    System.out.println(userCorpwxTime);
                     UserCorpwxTime item = userCorpwxTimeMapper.selectOne(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", (String) objects[i])
                             .eq("create_date", date));
 //                    if(userId!=null){
@@ -1492,11 +1491,19 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         }
                     }
 
-                    UserCorpwxTime item = userCorpwxTimeMapper.selectOne(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", curUserid)
+                    System.out.println("curUserid="+curUserid+",localDate="+localDate);
+                    List<UserCorpwxTime> itemList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", curUserid)
                             .eq("create_date", localDate));
                     //有工作时长或者打卡时长或者请假时长,外出时长,都算有效时间
                     boolean hasTimeRecord = ct.getWorkHours() > 0 || ct.getCardTime() >= 1.0 || ct.getAskLeaveTime() > 0 || ct.getOutdoorTime() > 0;
-                    if (item != null) {
+                    if (itemList.size() > 0) {
+                        UserCorpwxTime item = itemList.get(0);
+                        if (itemList.size() > 1) {
+                            System.out.println("数据异常: "+curUserid+", "+localDate+". 存在"+itemList.size()+"条考勤,已自动删除多余的");
+                            for (int t=1; t < itemList.size(); t++) {
+                                userCorpwxTimeMapper.deleteById(itemList.get(t).getId());
+                            }
+                        }
                         ct.setId(item.getId());
                         //之前有的时长不合法,或者新的有打卡时长
                         if (item.getWorkHours() <= 0 || hasTimeRecord) {