Browse Source

Merge remote-tracking branch 'origin/master'

user5 2 months ago
parent
commit
1b32aeda9f
18 changed files with 838 additions and 170 deletions
  1. 23 0
      src/main/java/com/jeeplus/modules/externalUnit/dao/ExternalUnitUserFileDao.java
  2. 55 0
      src/main/java/com/jeeplus/modules/externalUnit/entity/ExternalUnitUserFile.java
  3. 283 125
      src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitCapitalDemandService.java
  4. 87 4
      src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitFeedbackService.java
  5. 274 14
      src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitProjectRecordsService.java
  6. 16 14
      src/main/java/com/jeeplus/modules/externalUnit/web/ExternalUnitCapitalDemandController.java
  7. 2 1
      src/main/java/com/jeeplus/modules/externalUnit/web/ExternalUnitProjectRecordsController.java
  8. 2 0
      src/main/java/com/jeeplus/modules/sys/dao/WorkattachmentDao.java
  9. 6 1
      src/main/java/com/jeeplus/modules/sys/service/WorkattachmentService.java
  10. 2 0
      src/main/java/com/jeeplus/modules/sys/web/WorkattachmentController.java
  11. 7 3
      src/main/resources/mappings/modules/externalUnit/ExternalUnitCapitalDemandDao.xml
  12. 2 2
      src/main/resources/mappings/modules/externalUnit/ExternalUnitFeedbackDao.xml
  13. 68 0
      src/main/resources/mappings/modules/externalUnit/ExternalUnitUserFileDao.xml
  14. 4 0
      src/main/resources/mappings/modules/sys/WorkattachmentDao.xml
  15. 2 2
      src/main/webapp/webpage/modules/externalUnit/capitalDemandFormView.jsp
  16. 1 1
      src/main/webapp/webpage/modules/externalUnit/externalUnitProjectFile.jsp
  17. 1 0
      src/main/webapp/webpage/modules/externalUnit/externalUnitProjectRecordsForm.jsp
  18. 3 3
      src/main/webapp/webpage/modules/externalUnit/externalUnitProjectRecordsList.jsp

+ 23 - 0
src/main/java/com/jeeplus/modules/externalUnit/dao/ExternalUnitUserFileDao.java

@@ -0,0 +1,23 @@
+package com.jeeplus.modules.externalUnit.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.externalUnit.entity.ExternalUnitProjectUser;
+import com.jeeplus.modules.externalUnit.entity.ExternalUnitUserFile;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@MyBatisDao
+public interface ExternalUnitUserFileDao extends CrudDao<ExternalUnitUserFile> {
+    List<ExternalUnitUserFile> getByFileId(@Param("fileId") String fileId);
+
+    void deleteByFileId(@Param("fileId")String fileId);
+
+    List<ExternalUnitUserFile> getByUserIdAndProId(@Param("userId")String userId, @Param("proId")String proId);
+
+    void deleteByProIdAndUserId(@Param("userId")String userId, @Param("proId")String proId);
+    void updateByProIdAndUserId(@Param("userId")String userId, @Param("proId")String proId);
+
+    List<ExternalUnitUserFile> getByProjectId(@Param("proId")String proId);
+}

+ 55 - 0
src/main/java/com/jeeplus/modules/externalUnit/entity/ExternalUnitUserFile.java

@@ -0,0 +1,55 @@
+package com.jeeplus.modules.externalUnit.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+
+/**
+ * 外部单位-人员文件关联
+ */
+public class ExternalUnitUserFile extends DataEntity<ExternalUnitUserFile> {
+
+    private String userId; //用户id
+    private String fileId; //文件id
+    private String projectId; //项目id
+    private String projectSecondId; //项目下提资需求或意见反馈的id
+    private String type; //用来区分是意见反馈还是提资需求(0:提资需求 1:意见反馈)
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getProjectSecondId() {
+        return projectSecondId;
+    }
+
+    public void setProjectSecondId(String projectSecondId) {
+        this.projectSecondId = projectSecondId;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getFileId() {
+        return fileId;
+    }
+
+    public void setFileId(String fileId) {
+        this.fileId = fileId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+}

+ 283 - 125
src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitCapitalDemandService.java

@@ -9,11 +9,14 @@ import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.externalUnit.dao.ExternalUnitCapitalDemandDao;
 import com.jeeplus.modules.externalUnit.dao.ExternalUnitProjectRecordsDao;
+import com.jeeplus.modules.externalUnit.dao.ExternalUnitUserFileDao;
 import com.jeeplus.modules.externalUnit.entity.ExternalUnitCapitalDemand;
 import com.jeeplus.modules.externalUnit.entity.ExternalUnitProjectRecords;
+import com.jeeplus.modules.externalUnit.entity.ExternalUnitUserFile;
 import com.jeeplus.modules.externalUnit.entity.ExternalUnitWorkClientAttachment;
 import com.jeeplus.modules.signatureManagement.electronicSignature.entity.DistrictDirectorApplication;
 import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.Role;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
@@ -42,6 +45,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @Transactional(readOnly = true)
@@ -88,6 +92,9 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
     @Autowired
     private ExternalUnitProjectRecordsDao unitProjectRecordsDao;
 
+    @Autowired
+    private ExternalUnitUserFileDao externalUnitUserFileDao;
+
 
 
     public ExternalUnitCapitalDemand get(String id) {
@@ -146,9 +153,9 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                 );
         long s6=System.currentTimeMillis();
         List<User> users = new ArrayList<>();
-        List<User> jfsh = new ArrayList<>();
+//        List<User> jfsh = new ArrayList<>();
         List<User> wjbc = new ArrayList<>();
-        List<User> jffh = new ArrayList<>();
+//        List<User> jffh = new ArrayList<>();
         if (StringUtils.isNotBlank(capitalDemand.getId())){
             //通知添加流程实例ID
             WorkProjectNotify notify = new WorkProjectNotify();
@@ -156,13 +163,13 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
             workProjectNotifyService.readByNotifyId(notify);
         }
         //甲方审核
-        List<User> members = unitProjectRecordsDao.findJf(capitalDemand.getProject().getId(), "");
-        jfsh.addAll(members);
+//        List<User> members = unitProjectRecordsDao.findJf(capitalDemand.getProject().getId(), "");
+//        jfsh.addAll(members);
         //文件补充
         User user1 = UserUtils.get(capitalDemand.getExaminer());
         wjbc.add(user1);
         //甲方复核
-        jffh.addAll(members);
+//        jffh.addAll(members);
         long s7=System.currentTimeMillis();
         if (StringUtils.isNotBlank(workActivityMenu.getId())) {
             workProjectNotify.setNotifyRole("");
@@ -198,22 +205,22 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
             }
             workProjectNotify.setId("");
         } else {
-            if (jfsh.size()==0 ){
+            if (wjbc.size()==0 ){
                 capitalDemand.setStatus("1");//暂存
                 this.save(capitalDemand);
             }
-            if (jfsh.size()==0){
+            if (wjbc.size()==0){
                 return "流程审批人不能为空,请联系管理员!";
             }
-            variables.put("jfshCount",jfsh.size());
-            variables.put("jfshList",jfsh);
+            variables.put("wjbcCount",wjbc.size());
+            variables.put("wjbcList",wjbc);
             processType = "capitalDemand";
-            users.addAll(jfsh);
+            users.addAll(wjbc);
         }
         for (User user : users){
             workProjectNotify.setUser(user);
             workProjectNotify.setId("");
-            workProjectNotify.setNotifyRole("甲方审核");
+            workProjectNotify.setNotifyRole("文件补充");
             workProjectNotifyService
                     .save(workProjectNotify);
             Map<String,Object> extras = new HashMap<>();
@@ -254,15 +261,15 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
             workActivityProcess.setProcessInstanceId(processInstance.getId());
             workActivityProcess.setIsApproval("0");
             workActivityProcessService.save(workActivityProcess);
-				workActivityProcess.setCount(2);
-				workActivityProcess.setId("");
-				workActivityProcessService.save(workActivityProcess);
-            workActivityProcess.setCount(3);
-            workActivityProcess.setId("");
-            workActivityProcessService.save(workActivityProcess);
-            workActivityProcessService.insertAuditsByType(jfsh,processInstance.getId(),1,1);
-            workActivityProcessService.insertAuditsByType(wjbc,processInstance.getId(),2,1);
-            workActivityProcessService.insertAuditsByType(jffh,processInstance.getId(),3,1);
+//				workActivityProcess.setCount(2);
+//				workActivityProcess.setId("");
+//				workActivityProcessService.save(workActivityProcess);
+//            workActivityProcess.setCount(3);
+//            workActivityProcess.setId("");
+//            workActivityProcessService.save(workActivityProcess);
+//            workActivityProcessService.insertAuditsByType(jfsh,processInstance.getId(),1,1);
+            workActivityProcessService.insertAuditsByType(wjbc,processInstance.getId(),1,1);
+//            workActivityProcessService.insertAuditsByType(jffh,processInstance.getId(),3,1);
         }
         return "";
 
@@ -370,65 +377,69 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     workActivityProcess.setId("");
                 }
                 // 审核环节
-                if ("jfsh".equals(taskDefKey) && count.contains("1")) {
-                    taskCount = "1";
-                    exp = "pass";
-                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
-                        //审核通过处理
-                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),2,1);
-                        notifyRole = "文件补充";
-                        workActivityProcess.setIsApproval("1");
-                        enname = "wjbc";
-                        vars.put("wjbcList", auditUsers);
-                        vars.put("wjbcCount",auditUsers.size());
-
-                    }
-//                    else {
-//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
-//                        workActivityProcess.setIsApproval("2");
+//                if ("jfsh".equals(taskDefKey) && count.contains("1")) {
+//                    taskCount = "1";
+//                    exp = "pass";
+//                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
+//                        //审核通过处理
+//                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),2,1);
+//                        notifyRole = "文件补充";
+//                        workActivityProcess.setIsApproval("1");
+//                        enname = "wjbc";
+//                        vars.put("wjbcList", auditUsers);
+//                        vars.put("wjbcCount",auditUsers.size());
+//
 //                    }
-                    break;
-                } else if ("wjbc".equals(taskDefKey) && count.contains("2")) {
-                    taskCount = "2";
+////                    else {
+////                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
+////                        workActivityProcess.setIsApproval("2");
+////                    }
+//                    break;
+//                } else
+                    if ("wjbc".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
                     exp = "pass";
                     if ("yes".equals(capitalDemand.getAct().getFlag())) {
                         //审核通过处理
-                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),3,1);
-                        notifyRole = "甲方复核";
+//                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),3,1);
+//                        notifyRole = "甲方复核";
+                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
                         workActivityProcess.setIsApproval("1");
-                        enname = "jffh";
-                        vars.put("jffhList", auditUsers);
-                        vars.put("jffhCount",auditUsers.size());
+//                        enname = "jffh";
+//                        vars.put("jffhList", auditUsers);
+//                        vars.put("jffhCount",auditUsers.size());
                     } else {
                         notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
                         workActivityProcess.setIsApproval("2");
                     }
                     break;
-                } else if ("jffh".equals(taskDefKey) && count.contains("3")) {
-                    taskCount = "3";
-                    exp = "pass";
-                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
-                        //审核通过处理
-                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
-                        workActivityProcess.setIsApproval("1");
-                    }
-//                    else {
-//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
-//                        workActivityProcess.setIsApproval("2");
-//                    }
-                    break;
                 } else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
-                    notifyRole = "甲方审批";
-                    taskCount = "0";
-                    exp = "pass";
-                    workActivityProcess.setCount(0);
-                    enname ="jfsh";
-                    if (!"yes".equals(capitalDemand.getAct().getFlag())) {
-                        capitalDemand.setStatus("3");
+                        notifyRole = "文件补充";
+                        taskCount = "0";
+                        exp = "pass";
+                        workActivityProcess.setCount(0);
+                        enname ="wjbc";
+                        if (!"yes".equals(capitalDemand.getAct().getFlag())) {
+                            capitalDemand.setStatus("3");
+                        }
+                        break;
+                    } else if ("apply_end".equals(taskDefKey)) {
                     }
-                    break;
-                } else if ("apply_end".equals(taskDefKey)) {
-                }
+//                    if ("jffh".equals(taskDefKey) && count.contains("3")) {
+//                    taskCount = "3";
+//                    exp = "pass";
+//                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
+//                        //审核通过处理
+//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
+//                        workActivityProcess.setIsApproval("1");
+//                    }
+////                    else {
+////                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
+////                        workActivityProcess.setIsApproval("2");
+////                    }
+//                    break;
+//                } else
+
 
             }
         }
@@ -528,7 +539,7 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                                 .save(workProjectNotify1);
                         if (!"modifyApply".equals(taskDefKey)){
                             Map<String,Object> extras = new HashMap<>();
-                            if ("wjbc".equals(taskDefKey) || "jffh".equals(taskDefKey)){
+                            if ("wjbc".equals(taskDefKey) ){
                                 extras.put("type","7001");
                             }else {
                                 extras.put("type","7002");
@@ -587,7 +598,7 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                                         .save(workProjectNotify);
                                 if (!"modifyApply".equals(taskDefKey)){
                                     Map<String,Object> extras = new HashMap<>();
-                                    if ("jfsh".equals(taskDefKey)){
+                                    if ("wjbc".equals(taskDefKey)){
                                         extras.put("type","7001");
                                     }else {
                                         extras.put("type","7002");
@@ -655,6 +666,74 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     workClientAttachmentDao.deleteExterunit(workClientAttachment);
                 }
             }
+
+            /**
+             * 将文件信息同步到人员文件关联表中
+             */
+            //查询附件
+            ExternalUnitWorkClientAttachment workClientAttachment = new ExternalUnitWorkClientAttachment();
+            workClientAttachment.setAttachmentId(capitalDemand.getId());
+            workClientAttachment.setAttachmentFlag("160");
+            workClientAttachment.setDivIdType("_exterProcess");
+            List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListExter(workClientAttachment);
+            //查询项目组成员
+            List<User> members = unitProjectRecordsDao.isDelFalg(capitalDemand.getProject().getId(), "");
+            if (CollectionUtils.isNotEmpty(members)){
+                //将项目组成员中的施工方从list中剔除掉
+                for (Iterator<User> iterator = members.iterator(); iterator.hasNext(); ) {
+                    User member = iterator.next();
+                    User user1 = UserUtils.get(member.getId());
+
+                    if (user1.getRoleList() != null) {
+                        for (Role role : user1.getRoleList()) {
+                            if (role.getEnname().equals("sgf")) {
+                                // 删除 members 中的对应 user
+                                iterator.remove();
+                                break;
+                            }
+                        }
+                    }
+                }
+                //由于附件上传人都为施工方,所以可以将查询出来的人员id查出对应的信息并将它们存到上面剔除掉施工方人员的项目组中
+                List<String> uniqueCreateByIdListUsingDistinct = attachmentList.stream()
+                        .map(attachment -> attachment.getCreateBy().getId()) // 获取每个 attachment 的 createBy.id
+                        .distinct() // 去重
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(uniqueCreateByIdListUsingDistinct)){
+                    for (String s : uniqueCreateByIdListUsingDistinct) {
+                        User user = UserUtils.get(s);
+                        if (user != null){
+                            members.add(user);
+                        }
+                    }
+                }
+                //如果项目组成员中没有创建人,将创建人添加进去
+                User user = UserUtils.get(capitalDemand.getCreateBy().getId());
+                boolean containsUser = members.stream().anyMatch(member -> member.getId().equals(user.getId()));
+                // 如果没有包含,则将 user 添加到 members 列表中
+                if (!containsUser) {
+                    members.add(user);
+                }
+                if (CollectionUtils.isNotEmpty(attachmentList)){
+                    for (ExternalUnitWorkClientAttachment attachment : attachmentList) {
+                        //先在关联表中查询文件id是否已经存在
+                        List<ExternalUnitUserFile> externalUnitUserFiles = externalUnitUserFileDao.getByFileId(attachment.getId());
+                        if (CollectionUtils.isNotEmpty(externalUnitUserFiles)){
+                            externalUnitUserFileDao.deleteByFileId(attachment.getId());
+//                        continue;
+                        }
+                        for (User member : members) {
+                            ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                            externalUnitUserFile.setFileId(attachment.getId());
+                            externalUnitUserFile.setProjectId(capitalDemand.getProject().getId());
+                            externalUnitUserFile.setUserId(member.getId());
+                            externalUnitUserFile.setProjectSecondId(capitalDemand.getId());
+                            externalUnitUserFile.setType("0");
+                            externalUnitUserFileDao.insert(externalUnitUserFile);
+                        }
+                    }
+                }
+            }
         }
         return "保存审核意见成功!";
     }
@@ -887,8 +966,8 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     workActivityProcess.setId("");
                 }
                 // 审核环节
-                if ("wjbc".equals(taskDefKey) && count.contains("2")) {
-                    taskCount = "2";
+                if ("wjbc".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
                     exp = "pass";
                     if ("yes".equals(capitalDemand.getAct().getFlag())) {
                         //审核通过处理
@@ -898,11 +977,11 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     }
                     break;
                 } else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
-                    notifyRole = "甲方审批";
+                    notifyRole = "文件补充";
                     taskCount = "0";
                     exp = "pass";
                     workActivityProcess.setCount(0);
-                    enname ="jfsh";
+                    enname ="wjbc";
                     if (!"yes".equals(capitalDemand.getAct().getFlag())) {
                         capitalDemand.setStatus("3");
                     }
@@ -961,7 +1040,7 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
         WorkActivityProcess workActivityProcess1 = new WorkActivityProcess();
         workActivityProcess1.setId(IdGen.uuid());
         workActivityProcess1.setProcessKey("capitalDemand");
-        workActivityProcess1.setCount(2);
+        workActivityProcess1.setCount(1);
         workActivityProcess1.setProcessInstanceId(capitalDemand.getProcessInstanceId());
         workActivityProcess1.setIsApproval("0");
         workActivityProcess1.setCreateBy(createUser);
@@ -1017,8 +1096,16 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
             UserUtils.pushInfoToApp(title,str,extras,user.getId());
 
         }
-
-
+        //将转办人进行保存
+        if ("yes".equals(capitalDemand.getAct().getFlag())) {
+            ExternalUnitCapitalDemand demand = get(capitalDemand.getId());
+            if (StringUtils.isNotBlank(demand.getTurner())){
+                String newTurner = demand.getTurner()+","+capitalDemand.getTurner();
+                capitalDemand.setTurner(newTurner);
+            }else {
+                capitalDemand.setTurner(capitalDemand.getTurner());
+            }
+        }
         dao.update(capitalDemand);
         //上传附件
          if (CollectionUtils.isNotEmpty(capitalDemand.getWorkAttachments())){
@@ -1145,65 +1232,69 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     workActivityProcess.setId("");
                 }
                 // 审核环节
-                if ("jfsh".equals(taskDefKey) && count.contains("1")) {
-                    taskCount = "1";
-                    exp = "pass";
-                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
-                        //审核通过处理
-                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),2,1);
-                        notifyRole = "文件补充";
-                        workActivityProcess.setIsApproval("1");
-                        enname = "wjbc";
-                        vars.put("wjbcList", auditUsers);
-                        vars.put("wjbcCount",auditUsers.size());
-
-                    }
-//                    else {
-//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
-//                        workActivityProcess.setIsApproval("2");
+//                if ("jfsh".equals(taskDefKey) && count.contains("1")) {
+//                    taskCount = "1";
+//                    exp = "pass";
+//                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
+//                        //审核通过处理
+//                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),2,1);
+//                        notifyRole = "文件补充";
+//                        workActivityProcess.setIsApproval("1");
+//                        enname = "wjbc";
+//                        vars.put("wjbcList", auditUsers);
+//                        vars.put("wjbcCount",auditUsers.size());
+//
 //                    }
-                    break;
-                } else if ("wjbc".equals(taskDefKey) && count.contains("2")) {
-                    taskCount = "2";
+////                    else {
+////                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
+////                        workActivityProcess.setIsApproval("2");
+////                    }
+//                    break;
+//                } else
+                    if ("wjbc".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
                     exp = "pass";
                     if ("yes".equals(capitalDemand.getAct().getFlag())) {
                         //审核通过处理
-                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),3,1);
-                        notifyRole = "甲方复核";
+//                        workActivityProcessService.insertAuditsByType(auditUsers,capitalDemand.getProcessInstanceId(),1,1);
+//                        notifyRole = "文件补充";
+                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
                         workActivityProcess.setIsApproval("1");
-                        enname = "jffh";
-                        vars.put("jffhList", auditUsers);
-                        vars.put("jffhCount",auditUsers.size());
+//                        enname = "wjbc";
+//                        vars.put("wjbcList", auditUsers);
+//                        vars.put("wjbcCount",auditUsers.size());
                     } else {
                         notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
                         workActivityProcess.setIsApproval("2");
                     }
                     break;
-                } else if ("jffh".equals(taskDefKey) && count.contains("3")) {
-                    taskCount = "3";
-                    exp = "pass";
-                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
-                        //审核通过处理
-                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
-                        workActivityProcess.setIsApproval("1");
-                    }
-//                    else {
-//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
-//                        workActivityProcess.setIsApproval("2");
-//                    }
-                    break;
                 } else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
-                    notifyRole = "甲方审批";
-                    taskCount = "0";
-                    exp = "pass";
-                    workActivityProcess.setCount(0);
-                    enname ="jfsh";
-                    if (!"yes".equals(capitalDemand.getAct().getFlag())) {
-                        capitalDemand.setStatus("3");
+                        notifyRole = "文件补充";
+                        taskCount = "0";
+                        exp = "pass";
+                        workActivityProcess.setCount(0);
+                        enname ="wjbc";
+                        if (!"yes".equals(capitalDemand.getAct().getFlag())) {
+                            capitalDemand.setStatus("3");
+                        }
+                        break;
+                    } else if ("apply_end".equals(taskDefKey)) {
                     }
-                    break;
-                } else if ("apply_end".equals(taskDefKey)) {
-                }
+//                    if ("jffh".equals(taskDefKey) && count.contains("3")) {
+//                    taskCount = "3";
+//                    exp = "pass";
+//                    if ("yes".equals(capitalDemand.getAct().getFlag())) {
+//                        //审核通过处理
+//                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求审核完成";
+//                        workActivityProcess.setIsApproval("1");
+//                    }
+////                    else {
+////                        notifyRole = "项目-"+capitalDemand.getProject().getName()+"提资需求调整申请";
+////                        workActivityProcess.setIsApproval("2");
+////                    }
+//                    break;
+//                } else
+
 
             }
         }
@@ -1307,7 +1398,7 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                             .save(workProjectNotify1);
                     if (!"modifyApply".equals(taskDefKey)){
                         Map<String,Object> extras = new HashMap<>();
-                        if ("wjbc".equals(taskDefKey) || "jffh".equals(taskDefKey)){
+                        if ("wjbc".equals(taskDefKey) ){
                             extras.put("type","7001");
                         }else {
                             extras.put("type","7002");
@@ -1366,7 +1457,7 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                                     .save(workProjectNotify);
                             if (!"modifyApply".equals(taskDefKey)){
                                 Map<String,Object> extras = new HashMap<>();
-                                if ("jfsh".equals(taskDefKey)){
+                                if ("wjbc".equals(taskDefKey)){
                                     extras.put("type","7001");
                                 }else {
                                     extras.put("type","7002");
@@ -1434,6 +1525,73 @@ public class ExternalUnitCapitalDemandService extends CrudService<ExternalUnitCa
                     workClientAttachmentDao.deleteExterunit(workClientAttachment);
                 }
             }
+            /**
+             * 将文件信息同步到人员文件关联表中
+             */
+            //查询附件
+            ExternalUnitWorkClientAttachment workClientAttachment = new ExternalUnitWorkClientAttachment();
+            workClientAttachment.setAttachmentId(capitalDemand.getId());
+            workClientAttachment.setAttachmentFlag("160");
+            workClientAttachment.setDivIdType("_exterProcess");
+            List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListExter(workClientAttachment);
+            //查询项目组成员
+            List<User> members = unitProjectRecordsDao.isDelFalg(capitalDemand.getProject().getId(), "");
+            if (CollectionUtils.isNotEmpty(members)){
+                //将项目组成员中的施工方从list中剔除掉
+                for (Iterator<User> iterator = members.iterator(); iterator.hasNext(); ) {
+                    User member = iterator.next();
+                    User user1 = UserUtils.get(member.getId());
+
+                    if (user1.getRoleList() != null) {
+                        for (Role role : user1.getRoleList()) {
+                            if (role.getEnname().equals("sgf")) {
+                                // 删除 members 中的对应 user
+                                iterator.remove();
+                                break;
+                            }
+                        }
+                    }
+                }
+                //由于附件上传人都为施工方,所以可以将查询出来的人员id查出对应的信息并将它们存到上面剔除掉施工方人员的项目组中
+                List<String> uniqueCreateByIdListUsingDistinct = attachmentList.stream()
+                        .map(attachment -> attachment.getCreateBy().getId()) // 获取每个 attachment 的 createBy.id
+                        .distinct() // 去重
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(uniqueCreateByIdListUsingDistinct)){
+                    for (String s : uniqueCreateByIdListUsingDistinct) {
+                        User user = UserUtils.get(s);
+                        if (user != null){
+                            members.add(user);
+                        }
+                    }
+                }
+                //如果项目组成员中没有创建人,将创建人添加进去
+                User user = UserUtils.get(capitalDemand.getCreateBy().getId());
+                boolean containsUser = members.stream().anyMatch(member -> member.getId().equals(user.getId()));
+                // 如果没有包含,则将 user 添加到 members 列表中
+                if (!containsUser) {
+                    members.add(user);
+                }
+                if (CollectionUtils.isNotEmpty(attachmentList)){
+                    for (ExternalUnitWorkClientAttachment attachment : attachmentList) {
+                        //先在关联表中查询文件id是否已经存在
+                        List<ExternalUnitUserFile> externalUnitUserFiles = externalUnitUserFileDao.getByFileId(attachment.getId());
+                        if (CollectionUtils.isNotEmpty(externalUnitUserFiles)){
+                            externalUnitUserFileDao.deleteByFileId(attachment.getId());
+//                        continue;
+                        }
+                        for (User member : members) {
+                            ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                            externalUnitUserFile.setFileId(attachment.getId());
+                            externalUnitUserFile.setProjectId(capitalDemand.getProject().getId());
+                            externalUnitUserFile.setUserId(member.getId());
+                            externalUnitUserFile.setProjectSecondId(capitalDemand.getId());
+                            externalUnitUserFile.setType("0");
+                            externalUnitUserFileDao.insert(externalUnitUserFile);
+                        }
+                    }
+                }
+            }
         }
         return "审核成功";
     }

+ 87 - 4
src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitFeedbackService.java

@@ -6,12 +6,12 @@ import com.jeeplus.common.service.CrudService;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.externalUnit.dao.ExternalUnitFeedbackDao;
-import com.jeeplus.modules.externalUnit.entity.ExternalUnitCapitalDemand;
-import com.jeeplus.modules.externalUnit.entity.ExternalUnitFeedback;
-import com.jeeplus.modules.externalUnit.entity.ExternalUnitProjectRecords;
-import com.jeeplus.modules.externalUnit.entity.ExternalUnitWorkClientAttachment;
+import com.jeeplus.modules.externalUnit.dao.ExternalUnitProjectRecordsDao;
+import com.jeeplus.modules.externalUnit.dao.ExternalUnitUserFileDao;
+import com.jeeplus.modules.externalUnit.entity.*;
 import com.jeeplus.modules.signatureManagement.electronicSignature.entity.DistrictDirectorApplication;
 import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.Role;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
@@ -78,6 +78,10 @@ public class ExternalUnitFeedbackService extends CrudService<ExternalUnitFeedbac
     private ActivityService activityService;
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private ExternalUnitProjectRecordsDao unitProjectRecordsDao;
+    @Autowired
+    private ExternalUnitUserFileDao externalUnitUserFileDao;
 
 
     public ExternalUnitFeedback get(String id) {
@@ -769,6 +773,85 @@ public class ExternalUnitFeedbackService extends CrudService<ExternalUnitFeedbac
                     workClientAttachmentDao.deleteExterunit(workClientAttachment);
                 }
             }
+            /**
+             * 将文件信息同步到人员文件关联表中
+             */
+            //当全部审核通过后
+            if (!state){
+                //查询附件
+                ExternalUnitWorkClientAttachment workClientAttachment = new ExternalUnitWorkClientAttachment();
+                workClientAttachment.setAttachmentId(feedback.getId());
+                workClientAttachment.setAttachmentFlag("160");
+                workClientAttachment.setDivIdType("_exterFeedback");
+                List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListFeedback(workClientAttachment);
+                //查询项目组成员
+                List<User> members = unitProjectRecordsDao.isDelFalg(feedback.getProject().getId(), "");
+                if (CollectionUtils.isNotEmpty(members)){
+                    //将项目组成员中的施工方从list中剔除掉
+                    for (Iterator<User> iterator = members.iterator(); iterator.hasNext(); ) {
+                        User member = iterator.next();
+                        User user1 = UserUtils.get(member.getId());
+
+                        if (user1.getRoleList() != null) {
+                            for (Role role : user1.getRoleList()) {
+                                if (role.getEnname().equals("sgf")) {
+                                    // 删除 members 中的对应 user
+                                    iterator.remove();
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                    //将文件上传人添加到项目租成员中
+                    List<String> uniqueCreateByIdListUsingDistinct = attachmentList.stream()
+                            .map(attachment -> attachment.getCreateBy().getId()) // 获取每个 attachment 的 createBy.id
+                            .distinct() // 去重
+                            .collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(uniqueCreateByIdListUsingDistinct)){
+                        for (String s : uniqueCreateByIdListUsingDistinct) {
+                            User user = UserUtils.get(s);
+                            if (user != null){
+                                members.add(user);
+                            }
+                        }
+                    }
+                    //如果项目组成员中没有创建人,将创建人添加进去
+                    User user = UserUtils.get(feedback.getCreateBy().getId());
+                    boolean containsUser = members.stream().anyMatch(member -> member.getId().equals(user.getId()));
+                    // 如果没有包含,则将 user 添加到 members 列表中
+                    if (!containsUser) {
+                        members.add(user);
+                    }
+                    //在对members进行一次去重
+                    List<User> distinctMembers = members.stream()
+                            .collect(Collectors.toMap(User::getId, u -> u, (existing, replacement) -> existing)) // 根据 id 去重
+                            .values()
+                            .stream()
+                            .collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(attachmentList)){
+                        for (ExternalUnitWorkClientAttachment attachment : attachmentList) {
+                            //先在关联表中查询文件id是否已经存在
+                            List<ExternalUnitUserFile> externalUnitUserFiles = externalUnitUserFileDao.getByFileId(attachment.getId());
+                            if (CollectionUtils.isNotEmpty(externalUnitUserFiles)){
+                                externalUnitUserFileDao.deleteByFileId(attachment.getId());
+//                        continue;
+                            }
+                            for (User member : distinctMembers) {
+                                ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                                externalUnitUserFile.setFileId(attachment.getId());
+                                externalUnitUserFile.setProjectId(feedback.getProject().getId());
+                                externalUnitUserFile.setUserId(member.getId());
+                                externalUnitUserFile.setProjectSecondId(feedback.getId());
+                                externalUnitUserFile.setType("1");
+                                externalUnitUserFileDao.insert(externalUnitUserFile);
+                            }
+                        }
+                    }
+                }
+            }
+
+
+
         }
         return "保存审核意见成功!";
 

+ 274 - 14
src/main/java/com/jeeplus/modules/externalUnit/service/ExternalUnitProjectRecordsService.java

@@ -8,13 +8,11 @@ import com.jeeplus.common.utils.MenuStatusEnum;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.examplesingle.entity.ExampleSingle;
-import com.jeeplus.modules.externalUnit.dao.ExternalUnitCapitalDemandDao;
-import com.jeeplus.modules.externalUnit.dao.ExternalUnitFeedbackDao;
-import com.jeeplus.modules.externalUnit.dao.ExternalUnitProjectRecordsDao;
-import com.jeeplus.modules.externalUnit.dao.ExternalUnitProjectUserDao;
+import com.jeeplus.modules.externalUnit.dao.*;
 import com.jeeplus.modules.externalUnit.entity.*;
 
 import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.Role;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
 import com.jeeplus.modules.sys.utils.UserUtils;
@@ -27,9 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 @Service
 @Transactional(readOnly = true)
@@ -56,6 +52,9 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
     @Autowired
     private ActTaskService actTaskService;
 
+    @Autowired
+    private ExternalUnitUserFileDao externalUnitUserFileDao;
+
 
     public ExternalUnitProjectRecords get(String id) {
         return super.get(id);
@@ -126,6 +125,9 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
         }else {
             super.save(projectRecords);
         }
+        //查询修改前项目组成员
+        List<User> members = unitProjectRecordsDao.isDelFalg(projectRecords.getId(), "");
+
         //先进行一次删除
         projectUserDao.deleteByProjectId(projectRecords.getId());
         if (StringUtils.isNotBlank(projectRecords.getMemberIds())){
@@ -146,9 +148,171 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
                 externalUnitProjectUser.setDelFlag("0");
                 projectUserDao.insert(externalUnitProjectUser);
             }
+        }
+        //查询修改后项目组成员
+        List<User> newMembers = unitProjectRecordsDao.isDelFalg(projectRecords.getId(), "");
+        //用来存放两次成员结果中不重复的人员
+        List<User> result = new ArrayList<>();
+        // 使用HashSet存储已出现的id
+        Set<String> memberIds = new HashSet<>();
+
+        String inOrOut = "";
+        //此处的判断是为了区分新增还是删除
+        if (members.size() > newMembers.size()){//删除
+            for (User member : newMembers) {
+                memberIds.add(member.getId());  // 将成员的id加入到集合中
+            }
+            for (User newMember : members) {
+                // 如果新成员的id在members中没有出现,则加入结果列表
+                if (!memberIds.contains(newMember.getId())) {
+                    result.add(newMember);
+                }
+            }
+            inOrOut = "out";
+        }else if (members.size() < newMembers.size()){//新增
+            for (User member : members) {
+                memberIds.add(member.getId());  // 将成员的id加入到集合中
+            }
+            for (User newMember : newMembers) {
+                // 如果新成员的id在members中没有出现,则加入结果列表
+                if (!memberIds.contains(newMember.getId())) {
+                    result.add(newMember);
+                }
+            }
+            inOrOut = "in";
+        }else if (members.size() == newMembers.size()){//可能会出现在提交前先删除后添加的情况
+            Set<String> ids = new HashSet<>();
+            //对原本的项目组成员删除
+            for (User member : newMembers) {
+                ids.add(member.getId());  // 将成员的id加入到集合中
+            }
+            for (User newMember : members) {
+                // 如果新成员的id在members中没有出现,则加入结果列表
+                if (!ids.contains(newMember.getId())) {
+                    externalUnitUserFileDao.deleteByProIdAndUserId(newMember.getId(), projectRecords.getId());
+                }
+            }
+            //新增的项目组成员
+            for (User member : members) {
+                memberIds.add(member.getId());  // 将成员的id加入到集合中
+            }
+            for (User newMember : newMembers) {
+                // 如果新成员的id在members中没有出现,则加入结果列表
+                if (!memberIds.contains(newMember.getId())) {
+                    result.add(newMember);
+                }
+            }
+            inOrOut = "in";
+        }
+        if (CollectionUtils.isNotEmpty(result)){
+            if ("in".equals(inOrOut)){//新增或修改
+                //遍历result,并在人员文件关联表中查询
+                for (User user : result) {
+                    boolean isSgf = false;
+                    //判断该用户是否是施工方
+                    User user1 = UserUtils.get(user.getId());
+                    if (user1.getRoleList() != null) {
+                        for (Role role : user1.getRoleList()) {
+                            if (role.getEnname().equals("sgf")) {
+                                isSgf = true;
+                                break;
+                            }
+                        }
+                    }
+                    //判断是否是施工方
+                    if (!isSgf){
+                        //查询该项目下所有的文件信息
+                        List<ExternalUnitUserFile> list = externalUnitUserFileDao.getByProjectId(projectRecords.getId());
+                        List<ExternalUnitUserFile> distinctResult = new ArrayList<>();
+                        Map<String, ExternalUnitUserFile> userMap = new HashMap<>();
+                        if (CollectionUtils.isNotEmpty(list)){
+                            for (ExternalUnitUserFile file : list) {
+                                String fileId = file.getFileId();
+
+                                // 如果 map 中没有这个 userId,则添加进去
+                                if (!userMap.containsKey(fileId)) {
+                                    userMap.put(fileId, file);
+                                }
+                            }
+                            // 从 map 中获取去重后的结果
+                            distinctResult.addAll(userMap.values());
+                        }
+
+
+                        //查询该用户在该项目下是否已经有关联的文件
+                        List<ExternalUnitUserFile> userFileList = externalUnitUserFileDao.getByUserIdAndProId(user.getId(), projectRecords.getId());
+
+                        if (CollectionUtils.isNotEmpty(userFileList)){
+                            //原本已存在,修改状态
+                            externalUnitUserFileDao.updateByProIdAndUserId(user.getId(), projectRecords.getId());
+
+                            if (CollectionUtils.isNotEmpty(distinctResult)){
+                                /**
+                                 * 获取distinctResult中除userFileList之外的数据,将该用户添加到表中
+                                 */
+                                //需要新增的数据
+                                List<ExternalUnitUserFile> needInsert = new ArrayList<>();
+
+                                // 将 userFileList 中的 id 放入一个 Set 中,以便快速查找
+                                Set<String> userFileIds = new HashSet<>();
+                                for (ExternalUnitUserFile userFile : userFileList) {
+                                    userFileIds.add(userFile.getId());  // 假设 ExternalUnitUserFile 有 getId 方法
+                                }
+
+                                // 遍历 list,如果某个 item 不在 userFileIds 中,则加入 result
+                                for (ExternalUnitUserFile file : distinctResult) {
+                                    if (!userFileIds.contains(file.getId())) {
+                                        needInsert.add(file);
+                                    }
+                                }
+                                //遍历需要新增的数据,将该用户添加到表中
+                                if (CollectionUtils.isNotEmpty(needInsert)){
+                                    for (ExternalUnitUserFile userFile : needInsert) {
+                                        ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                                        externalUnitUserFile.setType(userFile.getType());
+                                        externalUnitUserFile.setProjectSecondId(userFile.getProjectSecondId());
+                                        externalUnitUserFile.setProjectId(userFile.getProjectId());
+                                        externalUnitUserFile.setFileId(userFile.getFileId());
+                                        externalUnitUserFile.setUserId(user.getId());
+                                        externalUnitUserFileDao.insert(externalUnitUserFile);
+                                    }
+                                }
+                            }
+                        }else {
+                            //将去重后的数据与用户进行关联
+                            if (CollectionUtils.isNotEmpty(distinctResult)){
+                                for (ExternalUnitUserFile userFile : distinctResult) {
+                                    ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                                    externalUnitUserFile.setType(userFile.getType());
+                                    externalUnitUserFile.setProjectSecondId(userFile.getProjectSecondId());
+                                    externalUnitUserFile.setProjectId(userFile.getProjectId());
+                                    externalUnitUserFile.setFileId(userFile.getFileId());
+                                    externalUnitUserFile.setUserId(user.getId());
+                                    externalUnitUserFileDao.insert(externalUnitUserFile);
+                                }
+                            }
+                        }
+                    }else {
+                        //当该人员是施工方,且之前有上传过文件
+                        //查询该用户在该项目下是否已经有关联的文件
+                        List<ExternalUnitUserFile> userFileList = externalUnitUserFileDao.getByUserIdAndProId(user.getId(), projectRecords.getId());
+
+                        if (CollectionUtils.isNotEmpty(userFileList)) {
+                            //原本已存在,修改状态
+                            externalUnitUserFileDao.updateByProIdAndUserId(user.getId(), projectRecords.getId());
+                        }
+                    }
 
+                }
+            }else if ("out".equals(inOrOut)){//逻辑删除
+                for (User user : result) {
+                    externalUnitUserFileDao.deleteByProIdAndUserId(user.getId(), projectRecords.getId());
+                }
+            }
         }
 
+
+
     }
 
     /**
@@ -189,6 +353,38 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
 //        page.setCountFlag(false);
 //        workClientAttachment.setPage(page);
         List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListExter(workClientAttachment);
+        //本公司人员及甲方可以获取全部信息,施工方只能看到自己上传的文件以及与自己有关审核的流程文件
+        User user = UserUtils.getUser();
+        boolean isSgf = false;
+        if (user.getRoleList() != null) {
+            for (Role role : user.getRoleList()) {
+                if (role.getEnname().equals("sgf")) {
+                    isSgf = true;
+                    break;
+                }
+            }
+        }
+        List<ExternalUnitWorkClientAttachment> result = new ArrayList<>();
+
+        if (isSgf){
+            //从人员文件关联表中找到当前项目下与当前登录人有关的信息
+            List<ExternalUnitUserFile> userFiles = externalUnitUserFileDao.getByUserIdAndProId(user.getId(),projectRecords.getId());
+
+            // 遍历 userFiles 列表
+            for (ExternalUnitUserFile userFile : userFiles) {
+                String fileId = userFile.getFileId(); // 获取fileId
+
+                // 在 attachmentList 中查找匹配的id
+                for (ExternalUnitWorkClientAttachment attachment : attachmentList) {
+                    if (attachment.getId().equals(fileId) && userFile.getDelFlag().equals("0")) {
+                        result.add(attachment); // 添加匹配的attachment到结果列表
+                    }
+                }
+            }
+        }else {
+            result.addAll(attachmentList);
+        }
+
         //获取项目下审核未完成的提资需求信息
         List<ExternalUnitCapitalDemand> capitalDemandList = capitalDemandDao.findByProjectId(projectRecords.getId());
         ArrayList<String> ids = new ArrayList<>();
@@ -198,26 +394,35 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
             }
         }
         //把查询出来的文件信息中包含这些id的文件给去除掉
-        for (Iterator<ExternalUnitWorkClientAttachment> iterator = attachmentList.iterator(); iterator.hasNext(); ) {
+        for (Iterator<ExternalUnitWorkClientAttachment> iterator = result.iterator(); iterator.hasNext(); ) {
             ExternalUnitWorkClientAttachment attachment = iterator.next();
             if (ids.contains(attachment.getAttachmentId())) {
                 iterator.remove();  // 删除符合条件的文件
             }
         }
 
-        workattachmentService.exterunitAttachmentManageOnUrl(attachmentList);
+        workattachmentService.exterunitAttachmentManageOnUrl(result);
 
-        attachmentList.sort((a, b) -> b.getCreateDate().compareTo(a.getCreateDate()));
+        result.sort((a, b) -> b.getCreateDate().compareTo(a.getCreateDate()));
         // 处理分页逻辑
-        int totalRecords = attachmentList.size(); // 总记录数
+        int totalRecords = result.size(); // 总记录数
         page.setCount(totalRecords);  // 设置总记录数
 
         // 计算分页偏移量
-        int startRow = (page.getPageNo() - 1) * page.getPageSize();
-        int endRow = Math.min(startRow + page.getPageSize(), totalRecords);
+        int startRow = 0;
+        int endRow = 0;
+        if (page.getPageNo()>0){
+            startRow = (page.getPageNo() - 1) * page.getPageSize();
+            endRow = Math.min(startRow + page.getPageSize(), totalRecords);
+        }else {
+            startRow = page.getPageNo() * page.getPageSize();
+            endRow = Math.min(startRow + page.getPageSize(), totalRecords);
+        }
+
+
 
         // 对数据进行分页切割
-        List<ExternalUnitWorkClientAttachment> pagedList = attachmentList.subList(startRow, endRow);
+        List<ExternalUnitWorkClientAttachment> pagedList = result.subList(startRow, endRow);
 
         // 设置分页后的数据
         page.setList(pagedList);
@@ -225,6 +430,7 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
         // 你还可以根据需要设置分页的其他信息,如是否有下一页、上一页等
         page.setCountFlag(false);
 
+
         workClientAttachment.setPage(page);
 
         return page;
@@ -239,6 +445,7 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
         workClientAttachment.setAttachmentId(projectRecords.getId());
         workClientAttachment.setAttachmentFlag("160");
         workClientAttachment.setDivIdType("_exterNoProcess");
+        workClientAttachment.setAttachmentUser(UserUtils.getUser().getId());
         List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListExter(workClientAttachment);
         workattachmentService.exterunitAttachmentManageOnUrl(attachmentList);
         projectRecords.setWorkAttachments(attachmentList);
@@ -270,6 +477,59 @@ public class ExternalUnitProjectRecordsService extends CrudService<ExternalUnitP
                 }
             }
         }
+        /**
+         * /获取文件信息,并将文件添加到关联表中
+         */
+
+        ExternalUnitWorkClientAttachment workClientAttachment = new ExternalUnitWorkClientAttachment();
+        workClientAttachment.setAttachmentId(projectRecords.getId());
+        workClientAttachment.setAttachmentFlag("160");
+        workClientAttachment.setDivIdType("_exterNoProcess");
+        List<ExternalUnitWorkClientAttachment> attachmentList = workattachmentService.getAttachmentListExter(workClientAttachment);
+        //查询项目组成员
+        List<User> members = unitProjectRecordsDao.isDelFalg(projectRecords.getId(), "");
+        if (CollectionUtils.isNotEmpty(members)){
+            //将项目组成员中的施工方从list中剔除掉
+            for (Iterator<User> iterator = members.iterator(); iterator.hasNext(); ) {
+                User member = iterator.next();
+                User user1 = UserUtils.get(member.getId());
+
+                if (user1.getRoleList() != null) {
+                    for (Role role : user1.getRoleList()) {
+                        if (role.getEnname().equals("sgf")) {
+                            // 删除 members 中的对应 user
+                            iterator.remove();
+                            break;
+                        }
+                    }
+                }
+            }
+            //当前登录人是否在项目租成员中,不存在则添加进去
+            User user = UserUtils.getUser();
+            boolean containsUser = members.stream().anyMatch(member -> member.getId().equals(user.getId()));
+            // 如果没有包含,则将 user 添加到 members 列表中
+            if (!containsUser) {
+                members.add(user);
+            }
+            if (CollectionUtils.isNotEmpty(attachmentList)){
+                for (ExternalUnitWorkClientAttachment attachment : attachmentList) {
+                    //先在关联表中查询文件id是否已经存在
+                    List<ExternalUnitUserFile> externalUnitUserFiles = externalUnitUserFileDao.getByFileId(attachment.getId());
+                    if (CollectionUtils.isNotEmpty(externalUnitUserFiles)){
+                        externalUnitUserFileDao.deleteByFileId(attachment.getId());
+//                        continue;
+                    }
+                    for (User member : members) {
+                        ExternalUnitUserFile externalUnitUserFile = new ExternalUnitUserFile();
+                        externalUnitUserFile.setFileId(attachment.getId());
+                        externalUnitUserFile.setProjectId(projectRecords.getId());
+                        externalUnitUserFile.setUserId(member.getId());
+                        externalUnitUserFileDao.insert(externalUnitUserFile);
+                    }
+                }
+            }
+        }
+
     }
 
     /**

+ 16 - 14
src/main/java/com/jeeplus/modules/externalUnit/web/ExternalUnitCapitalDemandController.java

@@ -306,23 +306,25 @@ public class ExternalUnitCapitalDemandController extends BaseController {
             List<User> users = null;
             //所属部门
             Office office = officeService.get(capitalDemand.getOfficeId());
-            if ("jfsh".equals(taskDefKey)){
-                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 2);
+//            if ("jfsh".equals(taskDefKey)){
+//                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 2);
+//                if (users == null)
+//                    users = UserUtils.getByRoleActivityEnname("wjbc", 3, office.getId(), "5", capitalDemand.getCreateBy());
+//
+//            }else
+                if ("wjbc".equals(taskDefKey)){
+                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 1);
                 if (users == null)
                     users = UserUtils.getByRoleActivityEnname("wjbc", 3, office.getId(), "5", capitalDemand.getCreateBy());
-
-            }else if ("wjbc".equals(taskDefKey)){
-                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 3);
-                if (users == null)
-                    users = UserUtils.getByRoleActivityEnname("jffh", 3, office.getId(), "5", capitalDemand.getCreateBy());
-            }else if ("jffh".equals(taskDefKey)){
-                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 3);
-                if (users == null)
-                    users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 1);
-
             }else if ("modifyApply".equals(taskDefKey)){
-                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 1);
-            }
+                    users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 1);
+                }
+//                else if ("jffh".equals(taskDefKey)){
+//                users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 3);
+//                if (users == null)
+//                    users = UserUtils.getByProssType(capitalDemand.getProcessInstanceId(), 1);
+//
+//            }
             String flag = capitalDemand.getAct().getFlag();
             if ("yes".equals(flag) && (users==null || users.size()==0)){
                 addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");

+ 2 - 1
src/main/java/com/jeeplus/modules/externalUnit/web/ExternalUnitProjectRecordsController.java

@@ -210,7 +210,7 @@ public class ExternalUnitProjectRecordsController extends BaseController {
 
 
     /**
-     * 新增项目文件
+     * 文件管理列表
      * @param projectRecords
      * @param model
      * @return
@@ -220,6 +220,7 @@ public class ExternalUnitProjectRecordsController extends BaseController {
         ExternalUnitProjectRecords externalUnitProjectRecords = new ExternalUnitProjectRecords();
         if (null != projectRecords.getId()){
             externalUnitProjectRecords = unitProjectRecordsService.get(projectRecords.getId());
+            externalUnitProjectRecords.setToflag(projectRecords.getToflag());
             model.addAttribute("projectRecords",externalUnitProjectRecords);
         }
         //进行查询之后进行任何操作,返回还是查询之后的数据页面

+ 2 - 0
src/main/java/com/jeeplus/modules/sys/dao/WorkattachmentDao.java

@@ -103,6 +103,8 @@ public interface WorkattachmentDao extends CrudDao<Workattachment> {
     void deleteExter(ExternalUnitWorkClientAttachment workattachment);
 
     List<Workattachment> getByAttachmentIdAndUrlAndAttachmentFlag(Workattachment workAttachment);
+    //删除外部单位人员文件关联表中的数据
+    void deleteUserFileByFileId(@Param("fileId") String fileId);
 
     /**
      * 根据id获取对象

+ 6 - 1
src/main/java/com/jeeplus/modules/sys/service/WorkattachmentService.java

@@ -302,7 +302,7 @@ public class WorkattachmentService extends CrudService<WorkattachmentDao, Workat
 		}
 
 	}
-
+	@Transactional(readOnly = false)
 	public void deleteExter(ExternalUnitWorkClientAttachment workattachment) {
 		workattachmentDao.deleteExter(workattachment);
 	}
@@ -1170,6 +1170,11 @@ public class WorkattachmentService extends CrudService<WorkattachmentDao, Workat
 	public List<Workattachment> getByAttachmentIdAndUrlAndAttachmentFlag( Workattachment workattachment){
 		return workattachmentDao.getByAttachmentIdAndUrlAndAttachmentFlag(workattachment);
 	}
+	//删除外部单位人员文件关联表中的信息
+	@Transactional(readOnly = false)
+	public void deleteUserFileByFileId(String id) {
+		workattachmentDao.deleteUserFileByFileId(id);
+	}
 
 	/**
 	 * 根据id获取对象

+ 2 - 0
src/main/java/com/jeeplus/modules/sys/web/WorkattachmentController.java

@@ -317,6 +317,8 @@ public class WorkattachmentController extends BaseController {
 					e.printStackTrace();
 				}
 			}
+			//根据文件id删除人员文件关联表中对应的信息
+			workattachmentService.deleteUserFileByFileId(id);
 		}
 		HashMap<Object, Object> map = Maps.newHashMap();
 		map.put("str","success");

+ 7 - 3
src/main/resources/mappings/modules/externalUnit/ExternalUnitCapitalDemandDao.xml

@@ -15,7 +15,8 @@
             a.status,
             a.remarks,
             a.project_id,
-            a.examiner
+            a.examiner,
+            a.turner
     </sql>
 
 
@@ -29,7 +30,7 @@
     <select id="queryCount" resultType="int">
         select count(distinct a.id)
         from external_unit_capital_demand a
-        where a.project_id = #{projectId} and a.del_flag ='0'
+        where a.project_id = #{projectId} and a.del_flag ='0' and(a.create_by = #{currentUser.id} or a.examiner = #{currentUser.id} or  FIND_IN_SET(#{currentUser.id}, a.turner) > 0 )
     </select>
 
     <select id="findByProId" resultType="ExternalUnitCapitalDemand">
@@ -40,7 +41,7 @@
         from external_unit_capital_demand a
         left join sys_user su on a.create_by = su.id
         left join external_unit_project_records pr on a.project_id = pr.id
-        where a.project_id = #{projectId} and a.del_flag ='0'
+        where a.project_id = #{projectId} and a.del_flag ='0' and(a.create_by = #{currentUser.id} or a.examiner = #{currentUser.id} or  FIND_IN_SET(#{currentUser.id}, a.turner) > 0 )
         <choose>
             <when test="page !=null and page.orderBy != null and page.orderBy != ''">
                 ORDER BY ${page.orderBy}
@@ -106,6 +107,9 @@
 			status = #{status},
 			remarks = #{remarks},
 			examiner = #{examiner}
+        <if test="turner != null and turner != ''">
+            ,turner = #{turner}
+        </if>
 		where id =#{id}
     </update>
 

+ 2 - 2
src/main/resources/mappings/modules/externalUnit/ExternalUnitFeedbackDao.xml

@@ -29,7 +29,7 @@
     <select id="queryCount" resultType="int">
         select count(distinct a.id)
         from external_unit_feedback a
-        where a.project_id = #{projectId} and a.del_flag ='0'
+        where a.project_id = #{projectId} and a.del_flag ='0' and (a.create_by = #{currentUser.id} or FIND_IN_SET(#{currentUser.id}, a.examiner) > 0 )
     </select>
 
 
@@ -41,7 +41,7 @@
         from external_unit_feedback a
         left join sys_user su on a.create_by = su.id
         left join external_unit_project_records pr on a.project_id = pr.id
-        where a.project_id = #{projectId} and a.del_flag ='0'
+        where a.project_id = #{projectId} and a.del_flag ='0' and (a.create_by = #{currentUser.id} or FIND_IN_SET(#{currentUser.id}, a.examiner) > 0 )
         <choose>
             <when test="page !=null and page.orderBy != null and page.orderBy != ''">
                 ORDER BY ${page.orderBy}

+ 68 - 0
src/main/resources/mappings/modules/externalUnit/ExternalUnitUserFileDao.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.externalUnit.dao.ExternalUnitUserFileDao">
+    <select id="getByFileId" resultType="ExternalUnitUserFile">
+        select
+            file_id,
+            user_id,
+            project_id,
+            del_flag,
+            `type`,
+            project_second_id
+        from external_unit_user_file
+        where file_id = #{fileId} and del_flag = '0'
+    </select>
+
+    <delete id="deleteByFileId">
+        delete from external_unit_user_file where file_id = #{fileId}
+    </delete>
+
+    <insert id="insert">
+        insert into external_unit_user_file(
+            user_id,
+            project_id,
+            file_id,
+            project_second_id,
+            `type`,
+            del_flag
+        ) values (
+            #{userId},
+            #{projectId},
+            #{fileId},
+            #{projectSecondId},
+            #{type},
+            #{delFlag}
+        )
+    </insert>
+
+    <select id="getByUserIdAndProId" resultType="ExternalUnitUserFile">
+        select
+            file_id,
+            user_id,
+            project_id,
+            del_flag,
+            `type`,
+            project_second_id
+        from external_unit_user_file
+        where user_id = #{userId} and project_id = #{proId} and (`type` != '1' or `type` is NULL)
+    </select>
+    <delete id="deleteByProIdAndUserId">
+        update external_unit_user_file set del_flag = '1' where project_id = #{proId} and user_id = #{userId}
+    </delete>
+    <delete id="updateByProIdAndUserId">
+        update external_unit_user_file set del_flag = '0' where project_id = #{proId} and user_id = #{userId}
+    </delete>
+
+    <select id="getByProjectId" resultType="ExternalUnitUserFile">
+        select
+            file_id,
+            user_id,
+            project_id,
+            del_flag,
+            project_second_id,
+            `type`
+        from external_unit_user_file
+        where project_id = #{proId} and del_flag = '0'
+    </select>
+
+</mapper>

+ 4 - 0
src/main/resources/mappings/modules/sys/WorkattachmentDao.xml

@@ -459,6 +459,10 @@
 		</where>
 	</select>
 
+	<delete id="deleteUserFileByFileId">
+		delete from external_unit_user_file where file_id = #{fileId}
+	</delete>
+
 
 <!--		<select id="getWorkattachmentById" resultMap="Workattachment">-->
 <!--			SELECT-->

+ 2 - 2
src/main/webapp/webpage/modules/externalUnit/capitalDemandFormView.jsp

@@ -193,7 +193,7 @@
 					</div>
 				</div>
 			</div>
-			<c:if test="${capitalDemand.status == '5'}">
+<%--			<c:if test="${capitalDemand.status == '5'}">--%>
 				<div class="form-group-label"><h2>文件管理</h2></div>
 				<div class="layui-item nav-btns">
 						<%--				<a id="attachment_btn_conciliationRecords" class="nav-btn nav-btn-add" title="上传文件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>--%>
@@ -385,7 +385,7 @@
 						</tbody>
 					</table>
 				</div>
-			</c:if>
+<%--			</c:if>--%>
 
 		</form:form>
 	</div>

+ 1 - 1
src/main/webapp/webpage/modules/externalUnit/externalUnitProjectFile.jsp

@@ -168,7 +168,7 @@
 	<div class="layui-row" style="margin-top: 60px;">
 		<div class="full-width fl">
 			<div class="layui-row contentShadow shadowLR" id="queryDiv">
-				<form:form id="searchForm" modelAttribute="externalUnitProjectRecords" action="${ctx}/externalUnit/externalUnit/projectFile?id=${externalUnitProjectRecords.id}" method="post" class="form-inline">
+				<form:form id="searchForm" modelAttribute="externalUnitProjectRecords" action="${ctx}/externalUnit/externalUnit/projectFile?id=${projectRecords.id}" method="post" class="form-inline">
 					<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
 					<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
 					<input id="toflag" name="toflag" type="hidden" value="1"/>

+ 1 - 0
src/main/webapp/webpage/modules/externalUnit/externalUnitProjectRecordsForm.jsp

@@ -130,6 +130,7 @@
 					if (newIds && !newIds.endsWith(',')) {
 						newIds += ",";
 					}
+					newIds = newIds.substring(0,newIds.lastIndexOf(","))
 					// 将数组转换回字符串,并更新隐藏输入元素的值
 					$("#hiddenMemberIds").val(newIds);
 

+ 3 - 3
src/main/webapp/webpage/modules/externalUnit/externalUnitProjectRecordsList.jsp

@@ -174,11 +174,11 @@
                             <label class="layui-form-label">创建时间:</label>
                             <div class="layui-input-block readOnlyFFF">
                                 <input id="beginDate" placeholder="开始时间" name="beginDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
-                                       value="<fmt:formatDate value="${workClientInfo.beginDate}" pattern="yyyy-MM-dd"/>"/>
+                                       value="<fmt:formatDate value="${externalUnitProjectRecords.beginDate}" pattern="yyyy-MM-dd"/>"/>
                                 </input>
                                 <span class="group-sep">-</span>
                                 <input id="endDate" placeholder="结束时间" name="endDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group"
-                                       value="<fmt:formatDate value="${workClientInfo.endDate}" pattern="yyyy-MM-dd"/>"/>
+                                       value="<fmt:formatDate value="${externalUnitProjectRecords.endDate}" pattern="yyyy-MM-dd"/>"/>
                                 </input>
                             </div>
                         </div>
@@ -192,7 +192,7 @@
                         <div class="layui-item query athird">
                             <label class="layui-form-label">创建人:</label>
                             <div class="layui-input-block  with-icon">
-                                <sys:inquireselectUserNotReadolny id="create" name="createId" value="${createId}" labelName="createNameStr" labelValue="${createName}"
+                                <sys:inquireselectUserNotReadolny id="create" name="createId" value="${externalUnitProjectRecords.createId}" labelName="createNameStr" labelValue="${externalUnitProjectRecords.createNameStr}"
                                                                   title="用户" url="/sys/office/treeDataAll?type=3" cssClass="form-control required layui-input" allowClear="true" notAllowSelectParent="true"/>
                             </div>
                         </div>