Quellcode durchsuchen

项目成本统计导出修改
飞书集成修改
项目文件中心修改

Min vor 2 Jahren
Ursprung
Commit
3c002b60b1

+ 39 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/FeishuInfoController.java

@@ -135,10 +135,11 @@ public class FeishuInfoController {
                 companyReportMapper.insert(companyReport);
             }
             //获取应用可用范围内的部门
-            JSONArray availableRangeIds = feishuInfoService.getAvailableRange(feishuInfo,null);
+            Map<String, Object> availableRange = feishuInfoService.getAvailableRange(feishuInfo, null);
+            JSONArray deptArray = (JSONArray) availableRange.get("department_ids");
             JSONArray departmentInfoArrays=new JSONArray();
-            for (int i = 0; i < availableRangeIds.size(); i++) {
-                String dpId = availableRangeIds.getString(i);
+            for (int i = 0; i < deptArray.size(); i++) {
+                String dpId = deptArray.getString(i);
                 JSONArray departmentInfo = feishuInfoService.getDepartmentInfo(feishuInfo, dpId);
                 if(departmentInfo!=null&&departmentInfo.size()>0){
                     departmentInfoArrays.addAll(departmentInfo);
@@ -167,7 +168,7 @@ public class FeishuInfoController {
                     Department department = new Department();
                     department.setCompanyId(company.getId());
                     department.setDepartmentName(departmentName);
-                    department.setFeishuDeptid(departmentId);
+                    department.setFeishuDeptid(openDepartmentId);
                     departmentMapper.insert(department);
                     departmentFeishu.setSysDeptid(department.getDepartmentId());
                     departmentFeishuMapper.insert(departmentFeishu);
@@ -215,19 +216,51 @@ public class FeishuInfoController {
                             .setPassword(MD5Util.getPassword("000000"))
                             .setFeishuDeptid(departmentFeishu.getFeishuDeptid());
                     String max = departments.get(0);
-                    Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuDeptid().equals(max)).findFirst();
+                    Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuOpenDeptid().equals(max)).findFirst();
                     if(dpFs.isPresent()){
                         Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
                         user.setDepartmentName(dp.get().getDepartmentName());
                         user.setDepartmentId(dp.get().getDepartmentId());
                         user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
                     }
-                    boolean b = userList.stream().anyMatch(ul ->ul.getCorpwxUserid()!=null&&ul.getCorpwxUserid().equals(user.getCorpwxUserid()));
+                    boolean b = userList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
                     if(!b){
                         userList.add(user);
                     }
                 }
             }
+            //获取应用可用范围内的人员
+            JSONArray userArray = (JSONArray) availableRange.get("user_ids");
+            for (int i = 0; i < userArray.size(); i++) {
+                String userId = userArray.getString(i);
+                JSONObject userInfo = feishuInfoService.getUserInfo(feishuInfo, userId);
+                List<String> departments = (List<String>) userInfo.get("department_ids");
+                //不存在的人员, 进行插入
+                User user = new User();
+                //在当前部门下的员工
+                String max = departments.get(0);
+                user.setId(SnowFlake.nextId()+"")
+                        .setRoleId(role.getId())//默认普通员工
+                        .setRoleName(role.getRolename())
+                        .setCompanyId(company.getId())
+                        .setName(userInfo.getString("name"))
+                        .setFeishuUserid(userInfo.getString("open_id"))
+                        .setColor(ColorUtil.randomColor())
+                        .setJobNumber(userInfo.getString("user_id"))
+                        .setPassword(MD5Util.getPassword("000000"))
+                        .setFeishuDeptid(max);
+                Optional<DepartmentFeishu> dpFs = departmentFeishuList.stream().filter(dl -> dl.getFeishuDeptid().equals(max)).findFirst();
+                if(dpFs.isPresent()){
+                    Optional<Department> dp = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(dpFs.get().getSysDeptid())).findFirst();
+                    user.setDepartmentName(dp.get().getDepartmentName());
+                    user.setDepartmentId(dp.get().getDepartmentId());
+                    user.setDepartmentCascade(convertDepartmentIdToCascade(dp.get().getDepartmentId(),departmentList));
+                }
+                boolean b = userList.stream().anyMatch(ul ->ul.getFeishuUserid()!=null&&ul.getFeishuUserid().equals(user.getFeishuUserid()));
+                if(!b){
+                    userList.add(user);
+                }
+            }
             System.out.println("resutlList========="+userList);
             userService.saveBatch(userList);
         }

+ 16 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectDocumentController.java

@@ -315,22 +315,22 @@ public class ProjectDocumentController {
         //检查,如果是首次使用没有数据,需要创建数据
         String userId = request.getHeader("Token");
         User user = userMapper.selectById(userId);
-        if (parentFid == null) {
-            QueryWrapper<ProjectDocument> firstQuery = new QueryWrapper<ProjectDocument>();
-            firstQuery.eq("project_id", projectId);
-            if (projectDocumentMapper.selectCount(firstQuery) == 0) {
-                String[] names = new String[]{MessageUtils.message("project.storesReserve"),MessageUtils.message("project.processDocuments"),MessageUtils.message("project.deliverable")};
-                for (String name : names) {
-                    ProjectDocument doc = new ProjectDocument();
-                    doc.setProjectId(projectId);
-                    doc.setIsFolder(1);
-                    doc.setDocumentName(name);
-                    doc.setCreatorId(userId);
-                    doc.setCreatorName(user.getName());
-                    projectDocumentMapper.insert(doc);
-                }
-            }
-        }
+//        if (parentFid == null) {
+//            QueryWrapper<ProjectDocument> firstQuery = new QueryWrapper<ProjectDocument>();
+//            firstQuery.eq("project_id", projectId);
+//            if (projectDocumentMapper.selectCount(firstQuery) == 0) {
+//                String[] names = new String[]{MessageUtils.message("project.storesReserve"),MessageUtils.message("project.processDocuments"),MessageUtils.message("project.deliverable")};
+//                for (String name : names) {
+//                    ProjectDocument doc = new ProjectDocument();
+//                    doc.setProjectId(projectId);
+//                    doc.setIsFolder(1);
+//                    doc.setDocumentName(name);
+//                    doc.setCreatorId(userId);
+//                    doc.setCreatorName(user.getName());
+//                    projectDocumentMapper.insert(doc);
+//                }
+//            }
+//        }
 
 
         QueryWrapper<ProjectDocument> exp = new QueryWrapper<ProjectDocument>();

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectDocumentTemplateController.java

@@ -87,8 +87,8 @@ public class ProjectDocumentTemplateController {
             if(jsonArray!=null&&jsonArray.size()>0){
                 ProjectDocumentTemplate projectDocumentTemplate=new ProjectDocumentTemplate();
                 projectDocumentTemplate.setCompanyId(companyId);
-                projectDocumentTemplate.setCreWithPro(creWithPro);
-                projectDocumentTemplate.setName(name);
+                projectDocumentTemplate.setCreWithPro(1);
+                projectDocumentTemplate.setName("默认文件夹");
                 projectDocumentTemplateService.save(projectDocumentTemplate);
                 //模板第一层
                 for (int i = 0; i < jsonArray.size(); i++) {

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/FeishuInfoService.java

@@ -24,7 +24,9 @@ public interface FeishuInfoService extends IService<FeishuInfo> {
 
     JSONObject getCorpInfo(FeishuInfo feishuInfo);
 
-    JSONArray getAvailableRange(FeishuInfo feishuInfo,String pageToken);
+    JSONObject getUserInfo(FeishuInfo feishuInfo, String feishuUserId);
+
+    Map<String,Object> getAvailableRange(FeishuInfo feishuInfo, String pageToken);
 
     JSONArray getSubDepartmentList(FeishuInfo feishuInfo, String departmentId, String pageToken);
 

+ 48 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FeishuInfoServiceImpl.java

@@ -59,6 +59,8 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
         public static final String GET_DEPARTMENT_INFO="https://open.feishu.cn/open-apis/contact/v3/departments/:department_id";
         /*批量发送消息*/
         public static final String BATCH_SEND_MESSAGE="https://open.feishu.cn/open-apis/message/v4/batch_send/";
+        /*获取单个用户信息*/
+        public static final String GET_USER_INFO="https://open.feishu.cn/open-apis/contact/v3/users/:user_id";
 
 
         @Resource
@@ -149,8 +151,36 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
         }
 
         @Override
-        public JSONArray getAvailableRange(FeishuInfo feishuInfo,String pageToken){
-                JSONArray result=new JSONArray();
+        public JSONObject getUserInfo(FeishuInfo feishuInfo, String feishuUserId){
+                if(feishuInfo.getExpireTime().isBefore(LocalDateTime.now())){
+                        String tenantAccessToken = getTenantAccessToken(feishuInfo.getAppId());
+                        feishuInfo.setAccessToken(tenantAccessToken);
+                }
+                JSONObject result=new JSONObject();
+                String url = GET_USER_INFO.replace(":user_id",feishuUserId);
+                HttpHeaders headers = new HttpHeaders();
+                RestTemplate restTemplate = new RestTemplate();
+                MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+                headers.setContentType(type);
+                headers.add("Authorization","Bearer "+feishuInfo.getAccessToken());
+                HttpEntity<JSONObject> httpEntity = new HttpEntity<>(null, headers);
+                ResponseEntity<String> ResponseEntity = restTemplate.exchange(url,HttpMethod.GET,httpEntity,String.class);
+                if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
+                        String resp = ResponseEntity.getBody();
+                        JSONObject respJson = JSONObject.parseObject(resp);
+                        if (respJson.getInteger("code")==0){
+                                JSONObject data = respJson.getJSONObject("data");
+                                result=data.getJSONObject("user");
+                        }
+                }
+                return result;
+        }
+
+        @Override
+        public Map<String,Object> getAvailableRange(FeishuInfo feishuInfo,String pageToken){
+                Map resultMap=new HashMap();
+                JSONArray departmentResult=new JSONArray();
+                JSONArray userResult=new JSONArray();
                 String url = GET_AVAILABLE_RANGE;
                 HttpHeaders headers = new HttpHeaders();
                 RestTemplate restTemplate = new RestTemplate();
@@ -170,18 +200,29 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
                         if (respJson.getInteger("code")==0){
                                 JSONObject data = respJson.getJSONObject("data");
                                 JSONArray departmentIds = data.getJSONArray("department_ids");
+                                JSONArray userIds = data.getJSONArray("user_ids");
                                 if(departmentIds!=null&&departmentIds.size()>0){
-                                        result.addAll(departmentIds);
+                                        departmentResult.addAll(departmentIds);
+                                }
+                                if(userIds!=null&&userIds.size()>0){
+                                        userResult.addAll(userIds);
                                 }
                                 if(data.getBoolean("has_more")){
-                                        JSONArray array = getAvailableRange(feishuInfo, data.getString("page_token"));
-                                        if(array!=null&&array.size()>0){
-                                                result.addAll(array);
+                                        Map<String, Object> range = getAvailableRange(feishuInfo, data.getString("page_token"));
+                                        JSONArray deptArray = (JSONArray) range.get("department_ids");
+                                        if(deptArray!=null&&deptArray.size()>0){
+                                                departmentResult.addAll(deptArray);
+                                        }
+                                        JSONArray userArray = (JSONArray) range.get("user_ids");
+                                        if(userArray!=null&&userArray.size()>0){
+                                                userResult.addAll(userArray);
                                         }
                                 }
                         }
                 }
-                return result;
+                resultMap.put("department_ids",departmentResult);
+                resultMap.put("user_ids",userResult);
+                return resultMap;
         }
 
         @Override

+ 55 - 33
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -705,28 +705,28 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     operationRecord.setContent(MessageUtils.message("Template.creatProject"));
                     operationRecord.setCompanyId(user.getCompanyId());
                     operationRecordService.save(operationRecord);
-                    //随着存在随着项目创建而创建的文件中心模板:暂时注释掉,等设计好了再打开
-//                    List<ProjectDocumentTemplate> templateList = projectDocumentTemplateMapper.selectList(new QueryWrapper<ProjectDocumentTemplate>().eq("company_id", companyId).eq("cre_with_pro", 1));
-//                    List<Integer> collect = templateList.stream().map(ProjectDocumentTemplate::getId).distinct().collect(Collectors.toList());
-//                    collect.add(-1);
-//                    List<ProDocumentTemDetail> proDocumentTemDetailList = proDocumentTemDetailMapper.selectList(new QueryWrapper<ProDocumentTemDetail>().in("template_id", collect));
-//                    List<ProDocumentTemDetail> details = proDocumentTemDetailList.stream().filter(p -> p.getParentId() == null).collect(Collectors.toList());
-//                    List<ProjectDocument> list=new ArrayList<>();
-//                    details.forEach(dl->{
-//                        ProjectDocument projectDocument=new ProjectDocument();
-//                        projectDocument.setDocumentName(dl.getName());
-//                        projectDocument.setLabel(dl.getName());
-//                        projectDocument.setIsFolder(1);
-//                        projectDocument.setIndate(LocalDateTime.now());
-//                        projectDocument.setProjectId(project.getId());
-//                        projectDocument.setIsDeleted(0);
-//                        projectDocument.setCreatorId(project.getCreatorId());
-//                        projectDocument.setCreatorName(user.getName());
-//                        projectDocument.setProDocumentTemDetailId(dl.getId());
-//                        list.add(projectDocument);
-//                    });
-//                    projectDocumentService.saveBatch(list);
-//                    getParentFolders(list,proDocumentTemDetailList,project,user);
+                    //随着存在随着项目创建而创建的文件中心模板
+                    List<ProjectDocumentTemplate> templateList = projectDocumentTemplateMapper.selectList(new QueryWrapper<ProjectDocumentTemplate>().eq("company_id", companyId).eq("cre_with_pro", 1));
+                    List<Integer> collect = templateList.stream().map(ProjectDocumentTemplate::getId).distinct().collect(Collectors.toList());
+                    collect.add(-1);
+                    List<ProDocumentTemDetail> proDocumentTemDetailList = proDocumentTemDetailMapper.selectList(new QueryWrapper<ProDocumentTemDetail>().in("template_id", collect));
+                    List<ProDocumentTemDetail> details = proDocumentTemDetailList.stream().filter(p -> p.getParentId() == null).collect(Collectors.toList());
+                    List<ProjectDocument> list=new ArrayList<>();
+                    details.forEach(dl->{
+                        ProjectDocument projectDocument=new ProjectDocument();
+                        projectDocument.setDocumentName(dl.getName());
+                        projectDocument.setLabel(dl.getName());
+                        projectDocument.setIsFolder(1);
+                        projectDocument.setIndate(LocalDateTime.now());
+                        projectDocument.setProjectId(project.getId());
+                        projectDocument.setIsDeleted(0);
+                        projectDocument.setCreatorId(project.getCreatorId());
+                        projectDocument.setCreatorName(user.getName());
+                        projectDocument.setProDocumentTemDetailId(dl.getId());
+                        list.add(projectDocument);
+                    });
+                    projectDocumentService.saveBatch(list);
+                    getParentFolders(list,proDocumentTemDetailList,project,user);
                 }
             }
         } else {
@@ -1505,47 +1505,57 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             }else{
                 List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
                 List<Object> projectNames = list.stream().map(mp -> mp.get("project")).collect(Collectors.toList());
+                List<Object> projectCodes = list.stream().map(mp -> mp.get("projectCode")).collect(Collectors.toList());
                 List<Object> projectIds = list.stream().map(mp -> mp.get("id")).collect(Collectors.toList());
-                List<String> headList = new ArrayList<String>();
+                List<String> headListOne = new ArrayList<String>();
                 //headList.add("人员");
-                headList.add(MessageUtils.message("entry.personnel"));
+                headListOne.add("");
+                headListOne.add("项目编号");
+                projectCodes.forEach(pn->{
+                    headListOne.add(String.valueOf(pn));
+                });
+                List<String> headListTwo = new ArrayList<String>();
+                //headList.add("人员");
+                headListTwo.add(MessageUtils.message("entry.personnel"));
+                headListTwo.add("部门");
                 projectNames.forEach(pn->{
                     if ("hours".equals(exportContent) && functionTimeList.size()>0){
                         //headList.add(String.valueOf(pn)+"/工时");
-                        headList.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.workHours"));
+                        headListTwo.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.workHours"));
                     }else if ("cost".equals(exportContent) && functionCostList.size()>0){
                         //headList.add(String.valueOf(pn)+"/成本");
-                        headList.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.cost"));
+                        headListTwo.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.cost"));
                     }else {
                         if(functionTimeList.size()>0){
                             //headList.add(String.valueOf(pn)+"/工时");
-                            headList.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.workHours"));
+                            headListTwo.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.workHours"));
                         }
                         if (functionCostList.size()>0){
                             //headList.add(String.valueOf(pn)+"/成本");
-                            headList.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.cost"));
+                            headListTwo.add(String.valueOf(pn)+"/"+MessageUtils.message("entry.cost"));
                         }
                     }
                 });
                 if ("hours".equals(exportContent) && functionTimeList.size()>0){
                     //headList.add("合计/工时");
-                    headList.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.workHours"));
+                    headListTwo.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.workHours"));
                 }else if ("cost".equals(exportContent) && functionCostList.size()>0){
                     //headList.add("合计/成本");
-                    headList.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.cost"));
+                    headListTwo.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.cost"));
                 }else {
                     if(functionTimeList.size()>0){
                         //headList.add("合计/工时");
-                        headList.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.workHours"));
+                        headListTwo.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.workHours"));
                     }
                     if(functionCostList.size()>0){
                         //headList.add("合计/成本");
-                        headList.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.cost"));
+                        headListTwo.add(MessageUtils.message("entry.total")+"/"+MessageUtils.message("entry.cost"));
                     }
                 }
 
                 allList=new ArrayList<>();
-                allList.add(headList);
+                allList.add(headListOne);
+                allList.add(headListTwo);
                 //统计当前所有项目所有人的时间成本投入
                 List<Map<String, Object>> membList = projectMapper.getProjectCostGroupByProject(companyId,startDate, endDate, projectId,userIdList,deptIds);
                 for (User user : userList) {
@@ -1553,10 +1563,21 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     double costTime = 0;
                     List<Map<String, Object>> mapList = membList.stream().filter(mb -> mb.get("creatorId").equals(user.getId())).collect(Collectors.toList());
                     List<String> membRowData=new ArrayList<>();
+                    Optional<Department> first = allDepartmentList.stream().filter(dl -> dl.getDepartmentId().equals(user.getDepartmentId())).findFirst();
                     if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                         membRowData.add((String)("$userName="+user.getCorpwxUserid()+"$"));
+                        if(first.isPresent()){
+                            membRowData.add((String)("$departmentName="+first.get().getCorpwxDeptid()+"$"));
+                        }else {
+                            membRowData.add("");
+                        }
                     }else {
                         membRowData.add(user.getName());
+                        if(first.isPresent()){
+                            membRowData.add(first.get().getDepartmentName());
+                        }else {
+                            membRowData.add("");
+                        }
                     }
                     for(Object i:projectIds){
                         List<Map<String, Object>> resultList = mapList.stream().filter(mp -> mp.get("projectId").equals(i)).collect(Collectors.toList());
@@ -8551,6 +8572,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             taskGroupMapper.delete(new QueryWrapper<TaskGroup>().in("project_id",idList));
             projectSeparateMapper.delete(new QueryWrapper<ProjectSeparate>().in("id",idList));
         }
+        sb.append("]");
         operationRecord.setContent(sb.toString());
         operationRecordService.save(operationRecord);
         msg.data=message;