Parcourir la source

案例项目功能提交

徐滕 il y a 5 jours
Parent
commit
3ddda180f1

+ 31 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java

@@ -426,6 +426,9 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	private String projectMasterPhone;
 	private String storageFlag;	//材料库判定参数
 	private String caseBaseStatus;	//案例文件审核状态
+	private String caseBaseNotifyId;	//案例文件流程id
+	private Integer caseBaseNotifyFlag; //新增案例文件代办判定条件
+	private Integer caseBaseAuditNotifyFlag; //新增案例文件代办(审批)判定条件
 
 
 	private ProjectReportDataVo projectReportDataVo;
@@ -2811,4 +2814,32 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	public void setCaseBaseStatus(String caseBaseStatus) {
 		this.caseBaseStatus = caseBaseStatus;
 	}
+
+	public String getCaseBaseNotifyId() {
+		return caseBaseNotifyId;
+	}
+
+	public void setCaseBaseNotifyId(String caseBaseNotifyId) {
+		this.caseBaseNotifyId = caseBaseNotifyId;
+	}
+
+	public Integer getCaseBaseNotifyFlag() {
+		return caseBaseNotifyFlag;
+	}
+
+	public void setCaseBaseNotifyFlag(Integer caseBaseNotifyFlag) {
+		this.caseBaseNotifyFlag = caseBaseNotifyFlag;
+	}
+
+	public Integer getCaseBaseAuditNotifyFlag() {
+		return caseBaseAuditNotifyFlag;
+	}
+
+	public void setCaseBaseAuditNotifyFlag(Integer caseBaseAuditNotifyFlag) {
+		this.caseBaseAuditNotifyFlag = caseBaseAuditNotifyFlag;
+	}
+
+	public void setProjectMaterialStorageStatus(String projectMaterialStorageStatus) {
+		this.projectMaterialStorageStatus = projectMaterialStorageStatus;
+	}
 }

+ 30 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsCaseBaseService.java

@@ -1,5 +1,6 @@
 package com.jeeplus.modules.ruralprojectrecords.service;
 
+import com.google.common.collect.Lists;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.service.CrudService;
@@ -85,6 +86,22 @@ public class RuralProjectRecordsCaseBaseService extends CrudService<RuralProject
         List<RuralProjectRecords> recordsList = findList(projectRecords);
 
 
+        //查询所有和当前登陆人有关的项目的审核
+        WorkProjectNotify workProjectNotify = new WorkProjectNotify();
+        workProjectNotify.setUser(UserUtils.getUser());
+        workProjectNotify.setCompanyId(UserUtils.getSelectCompany().getId());
+        workProjectNotify.setRemarks("待审批");
+        //添加发票对应编号
+        List<String> typeList= Lists.newArrayList();
+        typeList.add("113");
+        String types = StringUtils.join(typeList,',');
+        workProjectNotify.setTypes(types);
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> notifyList = workProjectNotifyService.findList(workProjectNotify);
+
+
+
+
         //查询负责人信息
         for (RuralProjectRecords records : recordsList) {
             //this.queryContractInfos(records);
@@ -115,6 +132,19 @@ public class RuralProjectRecordsCaseBaseService extends CrudService<RuralProject
                 records.setProjectReportRecordStatus(records.getProjectRecordStatus());
             }
 
+            //新增报告展示
+            for (WorkProjectNotify notify: notifyList) {
+                if(notify.getNotifyId().equals(records.getCaseAuditId()) && "113".equals(notify.getType())){
+                    records.setCaseBaseNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setCaseBaseNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setCaseBaseAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
         }
         page.setList(recordsList);
         return page;

+ 14 - 5
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsCaseBaseController.java

@@ -4,9 +4,11 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectRecordsDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.ProjectCaseBaseAudit;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsCaseBaseService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsOwnCaseBaseService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
@@ -43,7 +45,7 @@ public class RuralProjectRecordsCaseBaseController extends BaseController {
     @Autowired
     private RuralProjectRecordsService projectRecordsService;
     @Autowired
-    private RuralProjectRecordsCaseBaseService caseBaseService;
+    private RuralProjectRecordsOwnCaseBaseService caseBaseService;
     @Autowired
     private WorkProjectNotifyService workProjectNotifyService;
 
@@ -159,9 +161,9 @@ public class RuralProjectRecordsCaseBaseController extends BaseController {
         records.setCaseStatus("5");
         records.setCaseCreateBy(UserUtils.getUser().getId());
         if(list.size()!=0){
-            caseBaseService.updateCaseBase(records);
+            service.updateCaseBase(records);
         }else {
-            caseBaseService.insertCaseBase(records);
+            service.insertCaseBase(records);
         }
         //获取项目信息
         records = projectRecordsService.get(records.getProjectId());
@@ -206,11 +208,18 @@ public class RuralProjectRecordsCaseBaseController extends BaseController {
         records.setCaseType("0");
         records.setCaseCreateBy(UserUtils.getUser().getId());
         if(list.size()!=0){
-            caseBaseService.updateCaseBase(records);
+            service.updateCaseBase(records);
         }else {
-            caseBaseService.insertCaseBase(records);
+            service.insertCaseBase(records);
         }
         //取消之后判定案例是否存在送审流程,若存在,则需要将流程一起撤回
+        ProjectCaseBaseAudit projectCaseBaseAudit = caseBaseService.getByProjectId(records.getProjectId());
+        if(null != projectCaseBaseAudit && StringUtils.isNotBlank(projectCaseBaseAudit.getId()) && null != projectCaseBaseAudit.getStatus() && (2 == projectCaseBaseAudit.getStatus() || 4 == projectCaseBaseAudit.getStatus())) {
+            //撤回案例文件送审操作
+            caseBaseService.cancelInvalidate(projectCaseBaseAudit);
+        }
+
+
 
         map.put("result",1);
         map.put("msg","选定案例项目取消成功");

+ 203 - 5
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsOwnCaseBaseController.java

@@ -36,9 +36,11 @@ import com.jeeplus.modules.ruralprojectrecords.entity.RuralReportConsultant;
 import com.jeeplus.modules.ruralprojectrecords.entity.SubProjectInfo;
 import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
 import com.jeeplus.modules.ruralprojectrecords.service.*;
+import com.jeeplus.modules.sys.entity.Area;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.sys.service.AreaService;
 import com.jeeplus.modules.sys.service.UserService;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
 import com.jeeplus.modules.sys.utils.DictUtils;
@@ -127,6 +129,8 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
     private KnowledgeSharingDetailsService knowledgeSharingDetailsService;
     @Autowired
     private ProjectEngineeringCaseBaseService engineeringCaseBaseService;
+    @Autowired
+    private AreaService areaService;
 
     private static byte[] SYN_BYTE = new byte[0];
 
@@ -226,13 +230,14 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
         ProjectRecords projectRecords = new ProjectRecords();
         RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReportId());
         MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords, projectRecords);
-        ProjectReportData reportData = ruralProjectMessageService.getProjectReportDateByProjectId(projectReportRecord.getReportId());
-
-        reportData.setProject(projectRecords);
-        projectReportRecord.setReport(reportData);
+        if(null != ruralProjectRecords.getArea()){
+            if(StringUtils.isNotBlank(ruralProjectRecords.getArea().getType()) && ruralProjectRecords.getArea().getType().equals("4")){
+                Area parent = areaService.get(ruralProjectRecords.getArea().getParent().getId());
+                ruralProjectRecords.setArea(parent);
+            }
+        }
         projectReportRecord.setUploadMode(uploadMode);
         model.addAttribute("projectReportRecord", projectReportRecord);
-        model.addAttribute("project", projectReportRecord.getReport().getProject());
 
         ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
         //添加项目类型
@@ -311,6 +316,85 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
     }
 
     /**
+     * 根据信息获取归档信息并调转页面
+     */
+    @RequestMapping(value = "formSycnCaseBase")
+    public String formSycnCaseBase(ProjectReportRecord projectReportRecord, Model model) throws Exception {
+        //查询“配农网”工程类型id
+        String engineeringId = engineeringService.getEngineeringId("202");
+        //获取项目信息
+        ProjectRecords projectRecords = new ProjectRecords();
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReportId());
+        MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords, projectRecords);
+        if(null != ruralProjectRecords.getArea()){
+            if(StringUtils.isNotBlank(ruralProjectRecords.getArea().getType()) && ruralProjectRecords.getArea().getType().equals("4")){
+                Area parent = areaService.get(ruralProjectRecords.getArea().getParent().getId());
+                ruralProjectRecords.setArea(parent);
+            }
+        }
+        projectReportRecord.setUploadMode(uploadMode);
+        model.addAttribute("projectReportRecord", projectReportRecord);
+
+        ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+        //添加项目类型
+        relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+        relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
+        //判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+        String money = ruralProjectRecords.getSubmitMoney();
+        Integer approvalMoney = null;
+        if (StringUtils.isBlank(money)) {
+            approvalMoney = 1;
+        } else {
+            approvalMoney = Integer.parseInt(money);
+        }
+        switch (approvalMoney) {
+            case 0:
+                //金额为0
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+                break;
+            case 1:
+                //500w以下金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("1");
+                break;
+            case 2:
+                //500w以上金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("2");
+                break;
+        }
+
+        //添加报告类型
+        relateInfo.setRequiredStage(2);
+        relateInfo.setId(ruralProjectRecords.getId());
+        //查询项目是否时案例项目
+        ruralProjectRecords = projectRecordsService.getCaseBaseByProjectId(ruralProjectRecords);
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
+        //文件处理
+        projectTemplateService.disposeProjectTemplateCaseBaseFile(mainDictDetails, relateInfo, engineeringId, ruralProjectRecords, projectReportRecord, "1000");
+
+
+
+        ProjectCaseBaseAudit projectCaseBaseAudit = service.getByProjectId(ruralProjectRecords.getId());
+        if (null == projectCaseBaseAudit) {
+            projectCaseBaseAudit = new ProjectCaseBaseAudit();
+            projectCaseBaseAudit.setProjectId(ruralProjectRecords.getId());
+            projectCaseBaseAudit.setArea(ruralProjectRecords.getArea());
+            projectCaseBaseAudit.setProvince(ruralProjectRecords.getProvince());
+            projectCaseBaseAudit.setCity(ruralProjectRecords.getCity());
+        }
+        if (StringUtils.isBlank(projectCaseBaseAudit.getProjectDomain())) {
+            projectCaseBaseAudit.setProjectDomain("1");
+        }
+        //获取工程类型
+        ProjectEngineeringCaseBaseInfo engineeringInfos=engineeringCaseBaseService.get(projectCaseBaseAudit.getEngineeringType());
+        model.addAttribute("engineeringInfo", engineeringInfos);
+        model.addAttribute("projectCaseBaseAudit", projectCaseBaseAudit);
+        model.addAttribute("projectRecords", ruralProjectRecords);
+
+        return "modules/projectcontentinfo/projectReportRecordCaseBaseSycnForm";
+    }
+
+    /**
      * 暂存
      */
     @RequestMapping(value = "storeCaseBaseRecord")
@@ -422,6 +506,8 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
                         return "redirect:" + Global.getAdminPath() + "/home/?repage";
                     }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
                         return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+                    }else if (StringUtils.isNotBlank(home) && "sycnCaseBase".equals(home)){
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsCaseBase/?repage";
                     } else {
                         return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsOwnCaseBase/?repage";
                     }
@@ -438,6 +524,8 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
             return "redirect:" + Global.getAdminPath() + "/home/?repage";
         }else if (StringUtils.isNotBlank(home) && "notifyList".equals(home)){
             return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+        }else if (StringUtils.isNotBlank(home) && "sycnCaseBase".equals(home)){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsCaseBase/?repage";
         } else {
             return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsOwnCaseBase/?repage";
         }
@@ -978,4 +1066,114 @@ public class RuralProjectRecordsOwnCaseBaseController extends BaseController {
         }
     }
 
+
+
+
+    /**
+     * 保存项目案例文件,并进行处理
+     */
+    @RequestMapping(value = "saveSycnCaseBaseRecord")
+    public String saveSycnCaseBaseRecord(ProjectCaseBaseAudit projectCaseBaseAudit, Model model, RedirectAttributes redirectAttributes) throws Exception {
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectCaseBaseAudit.getProjectId());
+        addMessage(redirectAttributes, "案例数据保存成功");
+
+        //根据项目id查询案例文件流程信息
+        ProjectCaseBaseAudit t = service.getByProjectId(projectCaseBaseAudit.getProjectId());
+        if (null != t) {
+            MyBeanUtils.copyBeanNotNull2Bean(projectCaseBaseAudit, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+        }else{
+            addMessage(redirectAttributes, "该项目还没有提交案例文件审核,无法进行数据同步");
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsCaseBase/?repage";
+        }
+
+
+        //先根据id查询案例资料的知识库中是否存在数据,如果存在,则将其进行删除。
+        List<KnowledgeSharingInfo> byProjectId = knowledgeSharingDetailsService.getByProjectId(ruralProjectRecords.getId());
+        for (KnowledgeSharingInfo knowledgeSharingInfo : byProjectId) {
+            knowledgeSharingDetailsService.delete(knowledgeSharingInfo);
+        }
+
+        //将原有文件数据同步状态进行还原
+        List<ProjectTemplateInfo> caseBaseProjectTemplateList = projectTemplateDao.getCaseBaseAccessoryListByParentId("14");
+        List<Workattachment> attachmentAllList = com.google.common.collect.Lists.newArrayList();
+        for (ProjectTemplateInfo projectTemplateInfo : caseBaseProjectTemplateList) {
+            //根据项目id和案例类型信息查询项目案例的所有项目
+            Workattachment workAttachment = new Workattachment();
+            workAttachment.setAttachmentId(projectTemplateInfo.getId());
+            workAttachment.setProjectId(ruralProjectRecords.getId());
+            workAttachment.setAttachmentFlag("100");
+            List<Workattachment> attachmentList = workattachmentService.getAttList(workAttachment);
+
+            attachmentAllList.addAll(attachmentList);
+        }
+        for (Workattachment workattachment : attachmentAllList) {
+            //调整数据同步状态
+            if("1".equals(workattachment.getSyncDifySync())){
+                workattachment.setSyncDifySync("0");
+                workattachmentService.updateSyncDifySync(workattachment);
+            }
+        }
+        //审核通过之后对标记同步的数据进行同步,
+        //对上传的文件进行同步到dify
+        //查询案例相关的文件
+        //获取案例类型参数
+        // 将 selectedIds 字符串按逗号分隔成数组
+        if(StringUtils.isNotBlank(projectCaseBaseAudit.getSelectedIds())){
+            String[] selectedIdsArray = projectCaseBaseAudit.getSelectedIds().split(",");
+            //对前端确认同步的文件id进行处理成List
+            List<String> synchronizationList = Arrays.asList(selectedIdsArray);
+            //根据id查询数据进行同步
+            List<Workattachment> attachmentList = workattachmentService.getByIdList(synchronizationList);
+
+
+
+            List<Workattachment> attachmentAuditList = com.google.common.collect.Lists.newArrayList();
+            for (ProjectTemplateInfo projectTemplateInfo : caseBaseProjectTemplateList) {
+                //根据项目id和案例类型信息查询项目案例的所有项目
+                Workattachment workAttachment = new Workattachment();
+                workAttachment.setAttachmentId(projectTemplateInfo.getId());
+                workAttachment.setProjectId(ruralProjectRecords.getId());
+                workAttachment.setAttachmentFlag("100");
+                List<Workattachment> atList = workattachmentService.getAttList(workAttachment);
+                attachmentAuditList.addAll(atList);
+            }
+            for (Workattachment workattachment : attachmentList) {
+                for (Workattachment workattachment1 : attachmentAuditList) {
+                    if (workattachment.getId().equals(workattachment1.getId())) {
+                        //数据库中调整成已同步
+                        workattachment1.setSyncDifySync("1");
+                        workattachmentService.updateSyncDifySync(workattachment1);
+                    }
+                }
+            }
+
+            for (Workattachment workattachment : attachmentList) {
+                workattachment.setProjectId("");
+                workattachment.setId("");
+                workattachment.setSyncDifySync("1");
+                workattachment.setAttachmentName(ruralProjectRecords.getProjectReportNumber() + "-" + workattachment.getAttachmentName());
+            }
+
+
+            if(attachmentList.size()>0){
+                KnowledgeSharingInfo knowledgeSharingInfo = new KnowledgeSharingInfo();
+                knowledgeSharingInfo.setColumnId("10");
+                knowledgeSharingInfo.setSubject(ruralProjectRecords.getProjectName() + "案例资料文件");
+                knowledgeSharingInfo.setWorkAttachments(attachmentList);
+                knowledgeSharingInfo.setCreateBy(projectCaseBaseAudit.getCreateBy());
+                knowledgeSharingInfo.setCreateDate(new Date());
+                knowledgeSharingInfo.setUpdateBy(projectCaseBaseAudit.getUpdateBy());
+                knowledgeSharingInfo.setUpdateDate(new Date());
+                knowledgeSharingInfo.setProjectId(ruralProjectRecords.getId());
+                knowledgeSharingDetailsService.save(knowledgeSharingInfo);
+                knowledgeSharingDetailsService.saveToDify(knowledgeSharingInfo, "1");
+
+
+            }
+        }
+
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/RuralProjectRecordsCaseBase/?repage";
+    }
+
 }

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

@@ -1248,6 +1248,7 @@ public class WorkattachmentService extends CrudService<WorkattachmentDao, Workat
 		return workattachmentDao.getByIdList(idList);
 	}
 
+	@Transactional(readOnly = false)
 	public void updateSyncDifySync( Workattachment workattachment){
 		workattachmentDao.updateSyncDifySync(workattachment);
 	}

+ 13 - 11
src/main/java/com/jeeplus/modules/sys/web/AreaController.java

@@ -233,17 +233,19 @@ public class AreaController extends BaseController {
 							prantsSet.add(prantsmap);
 						}
 					}
-					List<Area> areaList = Lists.newArrayList();
-					//根据id查该地区下所有子集
-					areaList = areaService.findAraeListByParentId(areaList,e.getId());
-					for (Area info: areaList) {
-						Map<String, Object> prantsmap = Maps.newHashMap();
-						prantsmap.put("id", info.getId());
-						prantsmap.put("pId", info.getParentId());
-						prantsmap.put("pIds", info.getParentIds());
-						prantsmap.put("name", info.getName());
-						prantsmap.put("selectName", selectName);
-						prantsSet.add(prantsmap);
+					if(!e.getType().equals("3") && !e.getType().equals("4")){
+						List<Area> areaList = Lists.newArrayList();
+						//根据id查该地区下所有子集
+						areaList = areaService.findAraeListByParentId(areaList,e.getId());
+						for (Area info: areaList) {
+							Map<String, Object> prantsmap = Maps.newHashMap();
+							prantsmap.put("id", info.getId());
+							prantsmap.put("pId", info.getParentId());
+							prantsmap.put("pIds", info.getParentIds());
+							prantsmap.put("name", info.getName());
+							prantsmap.put("selectName", selectName);
+							prantsSet.add(prantsmap);
+						}
 					}
 				}
 				map.put("id", e.getId());

+ 41 - 1
src/main/java/com/jeeplus/modules/sys/web/WorkattachmentController.java

@@ -18,6 +18,9 @@ import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.externalUnit.entity.ExternalUnitWorkClientAttachment;
 import com.jeeplus.modules.knowledgeSharing.dify.DifyApiClient;
 import com.jeeplus.modules.knowledgeSharing.entity.KnowledgeBase;
+import com.jeeplus.modules.knowledgeSharing.service.KnowledgeSharingDetailsService;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
 import com.jeeplus.modules.projectmaterialstorage.service.ProjectMaterialStorageService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
@@ -63,6 +66,12 @@ public class WorkattachmentController extends BaseController {
 	private RuralProjectRecordsService ruralProjectRecordsService;
 	@Autowired
 	private ProjectMaterialStorageService projectMaterialStorageService;
+	@Autowired
+	private RuralProjectRecordsService projectRecordsService;
+	@Autowired
+	private ProjectReportDataService projectReportDataService;
+	@Autowired
+	private KnowledgeSharingDetailsService knowledgeSharingDetailsService;
 
 	@Autowired
 	private WorkReimbursementService workReimbursementService;
@@ -249,7 +258,7 @@ public class WorkattachmentController extends BaseController {
 	 */
 	@RequestMapping("/deleteFileFromAliyun")
 	@ResponseBody
-	public HashMap<Object, Object> deleteFileFromAliyun(String id,String type,String url,Model model){
+	public HashMap<Object, Object> deleteFileFromAliyun(String id,String type,String url,Model model) throws Exception {
 		Workattachment workAttachment1 = workattachmentService.get(id);
 		if(StringUtils.isNotBlank(id)) {
 			Workattachment workattachment = workattachmentService.get(id);
@@ -271,7 +280,38 @@ public class WorkattachmentController extends BaseController {
 						e.printStackTrace();
 					}
 				}
+
+			//判定是否同步到dify中,如果已同步则需要访问dify删除该文件
+			if(null != workattachment && StringUtils.isNotBlank(workattachment.getSyncDifySync()) && "1".equals(workattachment.getSyncDifySync())){
+				//查询有没有项目id。如果有,则查询报告号,和文件名称进行拼接,去删除dify中的对应文件
+				if(StringUtils.isNotBlank(workattachment.getAttachmentId()) && StringUtils.isNotBlank(workattachment.getProjectId())){
+					RuralProjectRecords ruralProjectRecords = projectRecordsService.get(workattachment.getProjectId());
+					if(null != ruralProjectRecords){
+						ProjectReportData reportData = projectReportDataService.getReportDataByProjectId(ruralProjectRecords.getId());
+						if(null != reportData){
+							//生成报告号和文件名称的合成名称。此名称是存放到dify中的文件名称格式
+							String fileName = reportData.getNumber() + "-" + workattachment.getAttachmentName();
+							if(StringUtils.isNotBlank(fileName)){
+								//查询dify案例资料对应的知识库id
+								String typeIdByColumnId = knowledgeSharingDetailsService.getTypeIdByColumnId("10");
+								if(StringUtils.isNotBlank(typeIdByColumnId)){
+									//根据文件名称和知识库id进行删除文件
+									JSONObject jsonObject = DifyApiClient.findKnowledgeBaseById(1, 999, typeIdByColumnId, fileName);
+									JSONArray data = jsonObject.getJSONArray("data");
+									List<KnowledgeBase> knowledgeBaseList = JSON.parseArray(data.toString(), KnowledgeBase.class);
+									if (!knowledgeBaseList.isEmpty()) {
+										DifyApiClient.deleteDocument(typeIdByColumnId, knowledgeBaseList.get(0).getId());
+									}
+								}
+							}
+						}
+					}
+				}
+
 			}
+			
+			}
+
 			HashMap<Object, Object> map = Maps.newHashMap();
 			map.put("str","success");
 

+ 1 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsCaseBaseDao.xml

@@ -307,6 +307,7 @@
 		,if(case_status > 0 ,case_status,"0") as "caseStatus"
 		,pcda.process_instance_id as "caseAuditProcessId"
 		,pcda.id as "caseAuditId"
+		,pcda.id as "caseAuditId"
 		,ifnull(pcda.status,0) as "caseAuditStatus"
 		FROM rural_project_records a
 		LEFT JOIN sys_area area ON area.id = a.area_id

+ 1 - 1
src/main/resources/mappings/modules/sys/AreaDao.xml

@@ -264,7 +264,7 @@
 		<where>
 			a.del_flag = 0
 			<if test="name != null and name !=''">
-				and a.name= #{name}
+				and a.name LIKE concat('%',#{name},'%')
 			</if>
 			and a.type != 4
 		</where>

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

@@ -23,6 +23,7 @@
 		,a.sort as "sort"
 		,a.description as "description"
 		,a.project_id as "projectId"
+		,a.sync_dify_sync as "syncDifySync"
 	</sql>
 
 	<sql id="workattachmentJoins">

+ 1 - 1
src/main/webapp/webpage/modules/projectMaterialStorage/projectMaterialStorageForm.jsp

@@ -165,7 +165,7 @@
 </head>
 <body>
 <div class="single-form">
-	<div class="container">
+	<div class="" style="margin-left: 30px;margin-right: 30px">
 	<form:form id="inputForm" modelAttribute="projectRecords" action="${ctx}/project/projectMaterialStorage/save?projectNumber=${projectRecords.id}&&pageId=1"  method="post" class="form-horizontal">
 <%--		<form:hidden path="id" name = "projectNumber"/>--%>
 		<input type="hidden" id="storageFlag" name="storageFlag" value="${projectRecords.storageFlag}">

+ 2 - 2
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordCaseBaseForm.jsp

@@ -298,7 +298,7 @@
 				<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
 					<div class="layui-input-block">
-						<input id="projectName" name="projectName"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="${projectReportRecord.report.project.projectName}"/>
+						<input id="projectName" name="projectName"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="${projectRecords.projectName}"/>
 					</div>
 				</div>
 				<div class="layui-item layui-col-sm6 lw7">
@@ -409,7 +409,7 @@
 								<td></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${filecaseBase.id}&projectId=${project.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','upTable_caseBase')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${filecaseBase.id}&projectId=${projectRecords.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','upTable_caseBase')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 									</div>
 								</td>
 								<td style="display:none">${filecaseBase.fileFlag}</td>

+ 941 - 0
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordCaseBaseSycnForm.jsp

@@ -0,0 +1,941 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	</div><script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+	<script src="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.js" charset="utf-8"></script>
+	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<script src="${ctxStatic}/common/html/js/script.js"></script>
+	<%@include file="/webpage/include/treetable.jsp" %>
+
+	<style>
+		label.error:nth-child(2){
+			top:40px;
+			left:0;
+		}
+		.layui-table th{
+			font-size: 14px;
+			/*表头内容居中显示*/
+			text-align: center;
+		}
+		.layui-table td{
+			/*表头内容居中显示*/
+			text-align: left;
+		}
+		span{
+			font-size: 14px;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+		function listTr(obj){
+			var name=$(obj).attr("id");
+			var tiao="."+name;
+			var span=$(obj).find("td").eq(2);
+			$(span).toggle(function () {
+				$(tiao).hide();
+				$(span).find("span").eq(0).attr("class","default_shut")
+			},function () {
+				$(tiao).show();
+				$(span).find("span").eq(0).attr("class","default_open")
+			});
+		}
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var onsubmit = $("#onsubmit").val();
+				if("true" == onsubmit){
+					$("#onsubmit").val(false);
+				}else{
+					parent.layer.msg("请勿重复提交!", {icon: 5});
+					return false
+				}
+				var caseBase = $("#file_caseBase tr").length;
+				for(var i=0; i<caseBase; i++) {
+					var numberStr = $("#file_caseBase tr").eq(i).find("td:first").html();
+					var second = $("#file_caseBase tr").eq(i).find("td:eq(1)").html();
+					var fileFlag = $("#file_caseBase tr").eq(i).find("td:last").html();
+					if(second == 1){
+						if(numberStr != undefined && numberStr !=null && numberStr !=''){
+							if (fileFlag==1){
+
+							}else{
+								top.layer.msg("请上传案例文件!", {icon: 0});
+								$("#onsubmit").val(true);
+								return false;
+							}
+						}
+					}
+				}
+				var flag=judgment();
+				if (flag){
+					$("#inputForm").attr("action","${ctx}/ruralProject/RuralProjectRecordsOwnCaseBase/saveSycnCaseBaseRecord");
+				}else if (!flag){
+					$("#onsubmit").val(true);
+					return flag;
+				}
+				$("#inputForm").submit();
+				return true;
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+
+        }
+        $(document).ready(function() {
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+			$(".tabMove").mouseover(function(){
+				//tips层-下
+				var td=$(this)
+				var tdval=$(this).find("input").val();
+				layer.tips(tdval, td, {
+					tips: 3
+				});
+			})
+
+
+			var value = '${projectCaseBaseAudit.projectDomain}';
+			if (value === '1') {
+				document.getElementById('engineeringTypeBlock').style.display = '';
+			} else {
+				document.getElementById('engineeringTypeBlock').style.display = 'none';
+			}
+
+
+			layui.use(['form', 'layer'], function () {
+				var form = layui.form;
+
+				form.on('select', function(data){
+					var value = data.value;
+					if (value === '1') {
+						document.getElementById('engineeringTypeBlock').style.display = '';
+					} else {
+						document.getElementById('engineeringTypeBlock').style.display = 'none';
+					}
+				});
+
+				$.ajax({
+					type : "POST",
+					url : "${ctx}/ruralProject/RuralProjectRecordsOwnCaseBase/engineeringTreeMenu",
+					//请求成功
+					success : function(result) {
+						var s='{"title": "menu item 4","id": "4"}'
+						var str=jQuery.parseJSON(result);
+						//工程类型树形菜单
+						layui.dropdown.render({
+							elem: '#demo100'
+							,style: 'width: 450px;'
+							,data:str
+							,click: function(item){
+								$("#demo100").find("span").html(item.title)
+								$("#demo100").find("#engineeringType").val(item.id)
+							}
+						});
+					}
+				});
+
+			})
+
+			$('#areaId').on("change", function () {
+				console.log(3213213)
+				var areaId = $("#areaId").val();
+				$("#province").val('');
+				$("#city").val('');
+				$("#county").val('');
+				$.ajax({
+					type : "POST",
+					url : "${ctx}/sys/area/getParent",
+					data : {'areaId':areaId},
+					//请求成功
+					success : function(result) {
+						var pro = result.province;
+						var city = result.city;
+						if(pro != '') {
+							$("#province").val(pro);
+						}
+						if(city != '') {
+							$("#city").val(city);
+						}
+						$("#areaShow").html(pro+"-"+city);
+					},
+
+				});
+			})
+        });
+        function insertTitle(tValue){
+            var list = "${projectReportRecord.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "99";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "projectRecords";
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+		function otherInsertTitle(tValue){
+			var files = $("#other_file")[0].files;
+			for(var i=0;i<files.length;i++) {
+				var file = files[i];
+				var attachmentId = "";
+				var attachmentFlag = "153";
+				console.log(file);
+				var timestamp = new Date().getTime();
+
+				var storeAs = "projectRecords";
+				var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+				/*将这段字符串存到数据库即可*/
+				var divId = "_other";
+				$("#addFile" + divId).show();
+				multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, "0");
+			}
+		}
+
+		function caseBaseInsertTitle(tValue){
+			var files = $("#caseBase_file")[0].files;
+			for(var i=0;i<files.length;i++) {
+				var file = files[i];
+				var attachmentId = "";
+				var attachmentFlag = "154";
+				console.log(file);
+				var timestamp = new Date().getTime();
+
+				var storeAs = "projectRecords";
+				var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+				/*将这段字符串存到数据库即可*/
+				var divId = "_caseBase";
+				$("#addFile" + divId).show();
+				multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, "0");
+			}
+		}
+
+		function readOpenInfo(value) {
+			layer.open({
+				title: '内容',
+				btn: ['关闭'],
+				content: value
+			});
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectCaseBaseAudit" method="post" class="form-horizontal layui-form">
+			<form:hidden path="id"/>
+			<form:hidden path="projectId"/>
+			<input type="hidden" id="onsubmit" value="true">
+			<input type="hidden" id="areaType" value="${projectCaseBaseAudit.area.type}">
+			<input type="hidden" id="province" name="province" value="${projectCaseBaseAudit.province}">
+			<input type="hidden" id="city" name="city" value="${projectCaseBaseAudit.city}">
+			<input type="hidden" id="selectedIds" name="selectedIds" value="" />
+
+
+
+			<div class="form-group layui-row first lw12">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block">
+						<input id="projectName" name="projectName"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="${projectRecords.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目所在地:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectCaseBaseAudit.province}-${projectCaseBaseAudit.city}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>工程建设开始日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate judgment form-control layui-input layer-date laydate-icon" style="background-color: #f1f1f1" readonly="readonly" id="startDate" name="startDate" placeholder="请选择开始日期" value="<fmt:formatDate value="${projectCaseBaseAudit.startDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line"><span class="require-item">*</span>工程建设结束日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate judgment form-control layui-input layer-date laydate-icon" style="background-color: #f1f1f1" readonly="readonly" id="endDate" name="endDate" placeholder="请选择结束日期" value="<fmt:formatDate value="${projectCaseBaseAudit.endDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label"><span class="require-item">*</span>工程领域:</label>
+					<div class="layui-input-block">
+						<form:select placeholder="请选择" path="projectDomain" disabled="true" style="background-color: #f1f1f1" class="form-control judgment editable-select layui-input" id="projectProperties" value="${projectCaseBaseAudit.projectDomain}">
+							<form:option value=""/>
+							<form:options items="${fns:getMainDictList('project_domain')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>
+					</div>
+
+				</div>
+				<div class="layui-item layui-col-sm6 lw7" id="engineeringTypeBlock" style="${showEngineeringType ? '' : 'display:none;'}">
+					<label class="layui-form-label"><span class="require-item">*</span>工程类型:</label>
+					<div class="layui-input-block">
+						<button type="button" class="layui-btn layui-btn-primary" style="width: 100%;text-align: left;background-color: #f1f1f1" id="demo100" disabled>
+							<span>${engineeringInfo.engineeringName}</span>
+							<input type="hidden" name="engineeringType" id="engineeringType" class="judgment" value="${engineeringInfo.id}"/>
+							<i class="layui-icon layui-icon-down layui-font-12" style="float: right"></i>
+						</button>
+					</div>
+				</div>
+
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>案例文件</h2></div>
+				<div id="addFile_caseBase" style="display: none" class="upload-progress">
+					<span id="fileName_caseBase" ></span>
+					<span id="_caseBase" ></span>
+					<b><span id="baifenbi_caseBase" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_caseBase" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="caseBase_file" type="file" name="caseBase_file" multiple="multiple" style="display: none;" onChange="if(this.value)caseBaseInsertTitle(this.value);"/>
+				<span id="caseBase_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable_caseBase" class="table table-bordered table-condensed tree_table">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th width="20%">文件要求</th>
+							<th width="35%">文件描述/文件</th>
+							<th width="20%">文件类型</th>
+							<th width="160px">上传时间</th>
+							<th width="120px">文件大小(M)</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_caseBase">
+						<c:forEach items="${projectReportRecord.fileCaseBaseList}" var = "filecaseBase" varStatus="status">
+							<tr id="file_caseBase_${filecaseBase.id}_tr" onclick="listTr(this)">
+									<%-- <td>${status.index + 1}</td>--%>
+								<td style="display:none">${filecaseBase.id}</td>
+								<td style="display:none">${filecaseBase.mustFlag}</td>
+								<c:choose>
+									<c:when test="${filecaseBase.mustFlag == 1}">
+										<td class="tabMove" style="text-align: left;"><span class='default_open ' style="padding-right: 15px; "></span><span style="color: red">* </span>${filecaseBase.attachName}<input type="hidden" value="${filecaseBase.attachName}"/></td>
+									</c:when>
+									<c:otherwise>
+										<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${filecaseBase.attachName}<input type="hidden" value="${filecaseBase.attachName}"/></td>
+									</c:otherwise>
+								</c:choose>
+								<td>
+										<%--									<div><span class="file_nei">内容:</span><div class="file_neirong">${filecaseBase.attachName}</div></div>--%>
+									<div style="white-space:normal; word-break:break-all;overflow:hidden;"><span style="font-weight: bold">文件格式及大小:</span>${filecaseBase.attachLength}M;</div><div style="white-space:normal; word-break:break-all;overflow:hidden;">  ${filecaseBase.attachTypes}</div>
+								</td>
+								<td></td>
+								<td></td>
+								<td></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${filecaseBase.id}&projectId=${projectRecords.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','upTable_caseBase')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									</div>
+								</td>
+								<td style="display:none">${filecaseBase.fileFlag}</td>
+
+							</tr>
+							<c:forEach items="${filecaseBase.workAttachments}" var = "workClientAttachment" varStatus="status">
+								<tr id="addFile_caseBase_${workClientAttachment.id}_tr" class="addFile_caseBase_${filecaseBase.id}_tr">
+									<td></td>
+									<c:choose>
+										<c:when test="${projectReportRecord.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(filecaseBase.attachName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(filecaseBase.attachName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+									<td class="op-td" style="white-space:normal; word-break:break-all;overflow:hidden;" onclick="readOpenInfo('${workClientAttachment.description}')">${workClientAttachment.description}</td>
+
+
+									<td class="op-td" style="text-align:center;">
+										<fmt:formatDate value="${workClientAttachment.createDate}" type="date"/>
+									</td>
+									<td class="op-td" style="text-align:center;">
+											${workClientAttachment.fileSize}
+									</td>
+									<td class="op-td">
+										<div class="op-btn-box" >
+												<%--附件下载删除--%>
+											<c:choose>
+												<c:when test="${projectReportRecord.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载1</a>
+														</c:when>
+														<c:otherwise>
+															<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+
+										</div>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<script type="text/template" id="caseBaseTpl">//<!--
+                <tr id="budgetList{{idx}}">
+                    <td class="hide">
+                        <input id="caseBaseTpl{{idx}}_id" type="hidden" value="{{row.id}}" class="clientId"/>
+                    </td>
+                    <td class="hide">
+                        0
+                    </td>
+                    <td style="text-align:center;">
+                        {{row.attachName}}
+                    </td>
+                    <td style="text-align:center;">
+                        {{row.attachLength}}
+                    </td>
+                    <td style="text-align:center;">
+                        {{row.attachTypes}}
+                    </td>
+                    <td style="text-align:center;">
+
+                    </td>
+					<td class="op-td">
+						<div class="op-btn-box" >
+							<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId={{row.id}}&projectId=${project.id}','70%','80%',false,'inputForm','upTable_caseBase')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+						</div>
+					</td>
+                </tr>//-->
+			</script>
+
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+<script>
+	function openBill2(title,url,width,height,target,formId,tableId){
+		var rows = $(this).parent().prevAll().length + 1;
+		var frameIndex = parent.layer.getFrameIndex(window.name);
+		var urls = url+"&index="+frameIndex;
+		if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+			width='auto';
+			height='auto';
+		}else{//如果是PC端,根据用户设置的width和height显示。
+
+		}
+		top.layer.open({
+			type: 2,
+			name : "iframeRefresh",
+			area: [width, height],
+			title: title,
+			skin:"two-btns",
+			maxmin: false, //开启最大化最小化按钮
+			content: urls ,
+			btn: ['确定','关闭'],
+			yes: function(index, layero){
+				var body = top.layer.getChildFrame('body', index);
+				var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+				var inputForm = body.find('#inputForm');
+				var top_iframe;
+				if(target){
+					top_iframe = target;//如果指定了iframe,则在改frame中跳转
+				}else{
+					top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+				}
+				inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+				inputForm.attr("action","${ctx}/projectAccessory/projectAccessory/saveWorkAttachment");//表单提交成功后,从服务器返回的url在当前tab中展示
+				var $document = iframeWin.contentWindow.document;
+
+				formSubmit2($document,formId,index,tableId);
+
+			},
+			cancel: function(index){
+			},
+		});
+	}
+	function formSubmit2($document,inputForm,index,tableId){
+
+		var validateForm = $($document.getElementById(inputForm)).validate({
+			submitHandler: function(form){
+				loading('正在提交,请稍等...');
+				form.submit();
+			},
+			errorContainer: "#messageBox",
+			errorPlacement: function(error, element) {
+				$($document.getElementById("#messageBox")).text("输入有误,请先更正。");
+				if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+					error.appendTo(element.parent().parent());
+				} else {
+					error.insertAfter(element);
+				}
+			}
+		});
+		if(validateForm.form()){
+			var action = $document.getElementById(inputForm).action;
+			var handleInfo = $($document.getElementById(inputForm)).serialize();
+			$.ajax({
+				type : "POST",
+				url : action,
+				data : handleInfo,
+				//请求成功
+				success:function(data) {
+					var d = data;
+					//输出提示信息
+					if(d.str.length>0){
+						parent.layer.msg(d.str,{icon:1});
+					}
+					//将数据临时挂载在父级页面
+					parent.tempSyncIds = [...confirmIdList]
+					location.reload();
+					top.layer.close(index)
+				}
+			});
+
+		}
+	}
+
+
+	//新增行方法
+	var caseBaseTpl = $("#caseBaseTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+
+	function formAttachment(title,url,width,height,target,formId,divId){
+		var rows = $(this).parent().prevAll().length + 1;
+		var frameIndex = parent.layer.getFrameIndex(window.name);
+		var urls = url;
+		if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+			width='auto';
+			height='auto';
+		}else{//如果是PC端,根据用户设置的width和height显示。
+
+		}
+		top.layer.open({
+			type: 2,
+			area: [width, height],
+			title: title,
+			skin:"two-btns",
+			maxmin: false, //开启最大化最小化按钮
+			content: urls ,
+			btn: ['确定','关闭'],
+			yes: function(index, layero){
+				var body = top.layer.getChildFrame('body', index);
+				var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+				var inputForm = body.find('#inputForm');
+				var top_iframe;
+				inputForm.attr("action","${ctx}/projectTemplate/projectTemplate/getProjectTemplateInfo");//表单提交成功后,从服务器返回的url在当前tab中展示
+				var $document = iframeWin.contentWindow.document;
+				formSubmitAjax($document,formId,index,divId);
+
+			},
+			cancel: function(index){
+			}
+		});
+	}
+	function formSubmitAjax($document,inputForm,index,divId){
+		var validateForm = $($document.getElementById(inputForm)).validate({
+			submitHandler: function(form){
+				loading('正在提交,请稍等...');
+				form.submit();
+			},
+			errorContainer: "#messageBox",
+			errorPlacement: function(error, element) {
+				$($document.getElementById("#messageBox")).text("输入有误,请先更正。");
+				if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+					error.appendTo(element.parent().parent());
+				} else {
+					error.insertAfter(element);
+				}
+			}
+		});
+		if(validateForm.form()){
+			$($document.getElementById(inputForm)).ajaxSubmit({
+				success:function(data) {
+					if(!data.success){
+						top.layer.msg("保存依据资料信息异常!",{icon:2});
+						return false;
+					}
+					var idx = ''
+					if(divId == 'file_caseBase'){
+						idx = $("#file_caseBase tr").length;
+						addRowBaseData("#file_caseBase",idx,caseBaseTpl,data.body.projectAccessoryInfo);
+					}
+					parent.layer.msg(data.msg,{icon:1});
+					top.layer.close(index)
+				}
+			});
+		}
+	}
+
+
+	function hasInArr(id,idArr) {
+		for(var i=0;i<idArr.length;i++){
+			if(id==$(idArr[i]).val()){
+				return true;
+			}
+		}
+		return false;
+	}
+	function existBaseData(id,length) {
+		for (var i=0;i<length;i++) {
+			var val = $('#file_attachment'+i+'_id').val();
+			if(id==val){
+				return true;
+			}
+		}
+		return false;
+	}
+
+	function addRowBaseData(list, idx, tpl, row){
+		bornTemplete(list, idx, tpl, row, idx);
+	}
+
+	function bornTemplete(list, idx, tpl, row, idx1){
+		var idx1 = '';
+		if(list == 'file_attachment'){
+			idx1 = $("#file_attachment tr").length +1;
+		}else if(list == 'file_gistdata'){
+			idx1 = $("#file_gistdata tr").length +1;
+		}else if(list == 'file_other'){
+			idx1 = $("#file_other tr").length +1;
+		}else if(list == 'file_caseBase'){
+			idx1 = $("#file_caseBase tr").length +1;
+		}
+
+		$(list).append(Mustache.render(tpl, {
+			idx: idx, delBtn: true, row: row,
+			order:idx1 + 1, idx1:idx1
+		}));
+		$(list+idx).find("select").each(function(){
+			$(this).val($(this).attr("data-value"));
+		});
+		$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+			var ss = $(this).attr("data-value").split(',');
+			for (var i=0; i<ss.length; i++){
+				if($(this).val() == ss[i]){
+					$(this).attr("checked","checked");
+				}
+			}
+		});
+	}
+	function delRowBaseData(obj, prefix,userId){
+		var id = $(prefix+"_id").val();
+		var currentUser = '${fns:getUser().id}';
+		var contentId = '${projectcontentinfo.projectContentData.id}';
+		console.log(contentId);
+		var condition = "${flag}";
+		$.ajax({
+			type:"post",
+			url:'${ctx}/projectcontentinfo/projectContentData/ajaxdelete',
+			data:{"contentId":contentId,"basedId":id,"condition":condition},
+			dataType:"json",
+			success:function(data){
+				if(data.success) {
+					if("according" == condition || "completion" == condition || "early" == condition || "claim" == condition || "design" == condition || "visa" == condition || "interim" == condition || "distribution" == condition || "material" == condition || "armor" == condition ){
+						$(obj).parent().parent().remove();
+					}else{
+						$(obj).parent().parent().remove();
+					}
+					if(data.body.inuse){
+						return;
+					}
+					if (currentUser == userId) {
+						confirmDelete('是否同步删除资料库的文件?','${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+id+'&id=${projectcontentinfo.id}&type=1');
+					}
+				}else {
+					top.layer.msg("删除依据资料失败!", {icon: 0});
+				}
+			}
+		})
+		return;
+	}
+
+	function delBaseData(obj, prefix,userId){
+		var id = $(prefix+"_id").val();
+		var currentUser = '${fns:getUser().id}';
+		var contentId = '${projectcontentinfo.projectContentData.id}';
+		console.log(contentId);
+		var condition = "${flag}";
+		$.ajax({
+			type:"post",
+			url:'${ctx}/projectcontentinfo/projectContentData/ajaxdelete',
+			data:{"contentId":contentId,"basedId":id,"condition":condition},
+			dataType:"json",
+			success:function(data){
+				if(data.success) {
+					if("according" == condition || "completion" == condition || "early" == condition || "claim" == condition || "design" == condition || "visa" == condition || "interim" == condition || "distribution" == condition || "material" == condition || "armor" == condition ){
+						$(obj).parent().parent().parent().remove();
+					}else{
+						$(obj).parent().parent().remove();
+					}
+					if(data.body.inuse){
+						return;
+					}
+					if (currentUser == userId) {
+						confirmDelete('是否同步删除资料库的文件?','${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+id+'&id=${projectcontentinfo.id}&type=1');
+					}
+				}else {
+					top.layer.msg("删除依据资料失败!", {icon: 0});
+				}
+			}
+		})
+		return;
+	}
+
+	function confirmDelete(mess, href){
+		top.layer.confirm(mess, {icon: 3, title:'系统提示'}, function(index){
+			if (typeof href == 'function') {
+				href();
+			}else{
+				$.ajax({
+					url:href,
+					type:"post",
+					success:function(data){
+						if(data.success){
+							top.layer.msg("删除依据资料成功!", {icon: 0});
+						}
+					}
+				});
+			}
+			top.layer.close(index);
+		});
+		return false;
+	}
+
+
+	var allDataList = [
+		<c:forEach var="item" items="${projectReportRecord.fileCaseBaseList}" varStatus="i">
+		<c:forEach var="attachment" items="${item.workAttachments}">
+		{
+			id: '${attachment.id}',
+			syncDifySync: '${attachment.syncDifySync}',
+			attachmentName:'${attachment.attachmentName}'
+		}
+		<c:if test="${!i.last || !attachment.last}">,</c:if>
+		</c:forEach>
+		</c:forEach>
+	];
+
+	var confirmIdList = [];  // 用于存储已同步的项的 id
+
+	//文件类型列表
+	const fileExtensions = [
+		"MARKDOWN",
+		"MDX",
+		"PDF",
+		"XLSX",
+		"XLS",
+		"DOCX",
+		"TXT",
+		"HTML",
+		"CSV",
+		"VTT",
+		"PROPERTIES",
+		"MD",
+		"HTM"
+	];
+
+	// 判断后缀
+	function isSupportedExtension(attachmentName) {
+		console.log(12312)
+		if (typeof attachmentName !== 'string') return false;
+
+		const parts = attachmentName.split('.');
+		if (parts.length < 2) return false; // 没有后缀
+
+		const ext = parts.pop().toUpperCase();
+
+		return fileExtensions.includes(ext);
+	}
+
+
+	// 初始化同步状态列表
+	function initConfirmIdList() {
+		console.log(456456)
+		confirmIdList = allDataList.filter(item => item.syncDifySync === '1').map(item => item.id);
+		updateSelectedIds();  // 初始化时同步 selectedIds
+	}
+
+	// 渲染按钮
+	function renderButtons() {
+		console.log(789789)
+		allDataList.forEach(function(item) {
+			// 判断文件类型
+			if(!isSupportedExtension(item.attachmentName)){
+				return
+			}
+			// 获取当前行(tr)元素和最后一个 td 元素
+			var trEl = document.getElementById('addFile_caseBase_' + item.id + '_tr');
+			if (!trEl) return;
+
+			var tdEl = trEl.getElementsByTagName('td')[trEl.getElementsByTagName('td').length - 1]; // 获取最后一个 td 元素
+			var id = String(item.id || '').trim();
+
+			// 获取现有的同步或取消同步按钮
+			var existingConfirmBtn = tdEl.querySelector('.op-btn-confirm'); // 只选择同步按钮
+			// 如果同步按钮已存在
+			if (existingConfirmBtn) {
+				if (confirmIdList.indexOf(item.id) !== -1) {
+					existingConfirmBtn.textContent = '取消同步';
+					existingConfirmBtn.setAttribute('onclick', 'changeStatus(\'0\', \'' + id + '\')');
+					existingConfirmBtn.classList.remove('layui-bg-green');
+					existingConfirmBtn.classList.add('layui-bg-red');
+				} else {
+					existingConfirmBtn.textContent = '同步';
+					existingConfirmBtn.setAttribute('onclick', 'changeStatus(\'1\', \'' + id + '\')');
+					existingConfirmBtn.classList.remove('layui-bg-red');
+					existingConfirmBtn.classList.add('layui-bg-green');
+				}
+			} else {
+				// 如果没有按钮,则插入一个新的同步/取消同步按钮
+				var confirmBtn = document.createElement('a');
+				confirmBtn.classList.add('op-btn', 'op-btn-confirm');
+
+				if (confirmIdList.indexOf(item.id) !== -1) {
+					confirmBtn.textContent = '取消同步';
+					confirmBtn.setAttribute('onclick', 'changeStatus(\'0\', \'' + id + '\')');
+					confirmBtn.classList.add('layui-bg-red');
+				} else {
+					confirmBtn.textContent = '同步';
+					confirmBtn.setAttribute('onclick', 'changeStatus(\'1\', \'' + id + '\')');
+					confirmBtn.classList.add('layui-bg-green');
+				}
+
+				tdEl.appendChild(confirmBtn);  // 将同步按钮添加到最后一个 td 元素
+			}
+
+			// 设置行背景色
+			if (confirmIdList.indexOf(item.id) !== -1) {
+				trEl.style.backgroundColor = '#fff3cd';  // 已同步,背景色
+			} else {
+				trEl.style.backgroundColor = '';  // 清除背景色
+			}
+		});
+		// 每次渲染按钮后更新 selectedIds
+		updateSelectedIds();
+	}
+
+	// 更新 selectedIds 到隐藏的 input 中
+	function updateSelectedIds() {
+		const selectedIds = confirmIdList.join(',');  // 将 selectedIds 列表转为逗号分隔的字符串
+		document.getElementById('selectedIds').value = selectedIds;  // 将值同步到 input 中
+	}
+
+	// 变更状态(同步/取消同步)
+	function changeStatus(status, id) {
+		if (status === '1') {
+			if (!confirmIdList.includes(id)) confirmIdList.push(id);  // 将 id 加入已同步列表
+		} else {
+			confirmIdList = confirmIdList.filter(i => i !== id);  // 从已同步列表中移除 id
+		}
+
+		// 更新 allDataList 中的状态
+		const item = allDataList.find(i => i.id === id);
+		if (item) item.syncDifySync = status;
+
+		// 重新渲染按钮并更新 selectedIds
+		renderButtons();
+	}
+
+	window.onload = function() {
+		// 获取临时挂载在父级页面的数据
+		var tempConfirmIdList = parent.tempSyncIds
+		// 判断临时数据是否存在
+		if(tempConfirmIdList){
+			confirmIdList =	[...tempConfirmIdList]
+			parent.tempSyncIds = null
+		}else{
+			initConfirmIdList();
+		}
+		renderButtons();
+	};
+</script>
+</body>
+</html>

+ 67 - 2
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralProjectRecordsCaseBaseList.jsp

@@ -602,6 +602,59 @@
 				}
 			});
 		}
+		function notifyDialogre(title,url,width,height,target){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				skin:"three-btns",
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				btn: ['通过','驳回','关闭'],
+				btn1: function(index, layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(1) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+				},
+				btn2:function(index,layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(2) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+					return false;
+				},
+				btn3: function(index){
+				}
+			});
+
+		}
 	</script>
 	<style>
 		body{
@@ -970,13 +1023,23 @@
 				,{align:'center',title:"操作",width:260,templet:function(d){
 						var xml = "";
 
+						if(d.caseBaseAuditNotifyFlag != undefined && d.caseBaseAuditNotifyFlag !=null && "" != d.caseBaseAuditNotifyFlag && d.caseBaseAuditNotifyFlag == 1)
+						{
+							xml+="<a href=\"#\" onclick=\"notifyDialogre('案例文件审批', '${ctx}/workprojectnotify/workProjectNotify/form?id=" + d.caseBaseNotifyId +"&home=sycnCaseBase','95%', '95%')\" class=\"layui-btn layui-btn-xs layui-bg-green\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;'  > 审批</a>";
+						}
+
+						<shiro:hasPermission name="project:projectMaterialStorage:addCaseBase">
+						if(d.caseAuditStatus && d.caseAuditStatus != 0){
+							xml += "<a href=\"#\" onclick=\"openDialogre('案例文件同步', '${ctx}/ruralProject/RuralProjectRecordsOwnCaseBase/formSycnCaseBase?reportId=" + d.id +"&id=" + d.caseAuditId + "','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs \" style='height: 32px;margin-top: 5px;margin-bottom: 5px;background-color: #FFB800' > 文件同步</a>";
+						}
+						</shiro:hasPermission>
 
-						<shiro:hasPermission name="project:projectMaterialStorage:add">
+						<shiro:hasPermission name="project:projectMaterialStorage:addCaseBase">
 						xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogreMaterialStorage('添加项目材料信息', '${ctx}/project/projectMaterialStorage/form?id=" + d.id +"&storageFlag=caseBase"+"','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;'  > 材料库处理</a>";
 						</shiro:hasPermission>
 						//案例项目移除按钮
 						<shiro:hasPermission name="ruralProject:RuralProjectRecordsCaseBase:canceCaseBase">
-						if(d.reportedState == 5 && d.projectReportRecordStatus == 5){
+						if((d.reportedState == 5 || d.reportedState == 7) && (d.projectReportRecordStatus == 5 || d.projectReportRecordStatus == 7)){
 							if(d.caseType == 1){
 								xml+="<a href=\"javascript:void(0)\" onclick=\"deleteFun('${ctx}/ruralProject/RuralProjectRecordsCaseBase/canceCaseBase?projectId=" + d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-red\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;'  > 撤销该案例项目</a>";
 							}
@@ -1043,6 +1106,8 @@
 					,"caseAuditId":"${projectRecords.caseAuditId}"
 					,"caseAuditStatus":"${projectRecords.caseAuditStatus}"
 					,"caseAuditProcessId":"${projectRecords.caseAuditProcessId}"
+					,"caseBaseNotifyId":"${projectRecords.caseBaseNotifyId}"
+					,"caseBaseAuditNotifyFlag":"${projectRecords.caseBaseAuditNotifyFlag}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">