Ver código fonte

添加线下归档功能

user5 4 anos atrás
pai
commit
358224f38d
30 arquivos alterados com 2935 adições e 78 exclusões
  1. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportData.java
  2. 28 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectMessageDownDao.java
  3. 73 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/ProjectReportRecordTree.java
  4. 28 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java
  5. 663 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsDownMessageService.java
  6. 102 3
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/SubProjectInfoService.java
  7. 20 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java
  8. 20 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java
  9. 383 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsDownMessageController.java
  10. 38 4
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/SubProjectInfoController.java
  11. 39 1
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  12. 11 1
      src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataDao.xml
  13. 8 3
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml
  14. 141 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDownDao.xml
  15. 3 0
      src/main/resources/mappings/modules/sys/WorkattachmentDao.xml
  16. 14 5
      src/main/webapp/webpage/modules/projectAccessory/projectAccessoryRelation/projectAccessoryRelationList.jsp
  17. 22 34
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordAudit.jsp
  18. 2 2
      src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordModifyApply.jsp
  19. 71 9
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp
  20. 3 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsView.jsp
  21. 240 0
      src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownAudit.jsp
  22. 236 0
      src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownForm.jsp
  23. 264 0
      src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownModify.jsp
  24. 247 0
      src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownModifyApply.jsp
  25. 179 0
      src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownView.jsp
  26. 13 4
      src/main/webapp/webpage/modules/ruralprojectrecords/projectReportRecord/projectReportRecordView.jsp
  27. 3 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsView.jsp
  28. 3 3
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportView.jsp
  29. 69 8
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp
  30. 3 0
      src/main/webapp/webpage/modules/ruralprojectrecords/subProjectInfo/subProjectInfoList.jsp

+ 9 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportData.java

@@ -46,6 +46,7 @@ public class ProjectReportData extends ActEntity<ProjectReportData> {
 	private User master;		// 负责人
 	private Date reportDate;		// 报告日期
 	private String fileStatus;		// 归档状态
+	private String downFileStatus;		// 归档状态
 	private String status;		// 报告状态 1待归档 2已归档
 	private String invalidStatus;		// 报告作废状态
 	private Date startDate;
@@ -625,4 +626,12 @@ public class ProjectReportData extends ActEntity<ProjectReportData> {
 	public void setAuditPassDate(Date auditPassDate) {
 		this.auditPassDate = auditPassDate;
 	}
+
+	public String getDownFileStatus() {
+		return downFileStatus;
+	}
+
+	public void setDownFileStatus(String downFileStatus) {
+		this.downFileStatus = downFileStatus;
+	}
 }

+ 28 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectMessageDownDao.java

@@ -0,0 +1,28 @@
+package com.jeeplus.modules.ruralprojectrecords.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-01-26 15:34
+ **/
+@MyBatisDao
+public interface RuralProjectMessageDownDao extends CrudDao<ProjectReportRecord> {
+
+    /**
+     * 更新流程实例ID
+     * @return
+     */
+    int updateProcessInstanceId(ProjectReportRecord projectReportRecord);
+
+    /**
+     * 更新归档状态
+     * @param projectReportRecord
+     * @return
+     */
+    int updateStatus(ProjectReportRecord projectReportRecord);
+
+}

+ 73 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/ProjectReportRecordTree.java

@@ -0,0 +1,73 @@
+package com.jeeplus.modules.ruralprojectrecords.entity;
+
+import com.jeeplus.modules.sys.entity.Workattachment;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-01-27 15:19
+ **/
+public class ProjectReportRecordTree {
+    private String id;        //id
+    private String projectName;		// 项目名称
+    private String attachName;    //附件名称
+    private String attachUrl;    //附件路径
+    private String pid;       //父级id
+    private Workattachment workAttachment;
+    private Integer condition;   //标识 (1:代表第1级,剩下的以此类推)
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getAttachName() {
+        return attachName;
+    }
+
+    public void setAttachName(String attachName) {
+        this.attachName = attachName;
+    }
+
+    public String getAttachUrl() {
+        return attachUrl;
+    }
+
+    public void setAttachUrl(String attachUrl) {
+        this.attachUrl = attachUrl;
+    }
+
+    public String getPid() {
+        return pid;
+    }
+
+    public void setPid(String pid) {
+        this.pid = pid;
+    }
+
+    public Workattachment getWorkAttachment() {
+        return workAttachment;
+    }
+
+    public void setWorkAttachment(Workattachment workAttachment) {
+        this.workAttachment = workAttachment;
+    }
+
+    public Integer getCondition() {
+        return condition;
+    }
+
+    public void setCondition(Integer condition) {
+        this.condition = condition;
+    }
+}

+ 28 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java

@@ -66,8 +66,10 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 
 	private Integer projectReportStatus; //报告状态
 	private Integer projectReportRecordStatus; //归档状态
+	private Integer downProjectReportRecordStatus; //线下归档状态
 
-	private String prrProcessInstanceId; //归档流程号
+	private String prrProcessInstanceId; //线上归档流程号
+	private String prrdProcessInstanceId; //线下归档流程号
 	private String reportedProcessInstanceId;//上报流程号
 
 	private String projectType; //类型 1.工程咨询 2.造价审核
@@ -75,6 +77,7 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	private String constructionLinkman; //施工方联系人
 
 	private String prrId;
+	private String prrdId;
 	private String projectReportName;
 	private String officeName;
 	private String flagAdmin;
@@ -150,6 +153,14 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 		this.prrId = prrId;
 	}
 
+	public String getPrrdId() {
+		return prrdId;
+	}
+
+	public void setPrrdId(String prrdId) {
+		this.prrdId = prrdId;
+	}
+
 	public String getPrrProcessInstanceId() {
 		return prrProcessInstanceId;
 	}
@@ -158,6 +169,14 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 		this.prrProcessInstanceId = prrProcessInstanceId;
 	}
 
+	public String getPrrdProcessInstanceId() {
+		return prrdProcessInstanceId;
+	}
+
+	public void setPrrdProcessInstanceId(String prrdProcessInstanceId) {
+		this.prrdProcessInstanceId = prrdProcessInstanceId;
+	}
+
 	public String getRecodeNum() {
 		return recodeNum;
 	}
@@ -174,6 +193,14 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 		this.projectReportRecordStatus = projectReportRecordStatus;
 	}
 
+	public Integer getDownProjectReportRecordStatus() {
+		return downProjectReportRecordStatus;
+	}
+
+	public void setDownProjectReportRecordStatus(Integer downProjectReportRecordStatus) {
+		this.downProjectReportRecordStatus = downProjectReportRecordStatus;
+	}
+
 	public Integer getProjectReportStatus() {
 		return projectReportStatus;
 	}

+ 663 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsDownMessageService.java

@@ -0,0 +1,663 @@
+package com.jeeplus.modules.ruralprojectrecords.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportRecordDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectMessageDownDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.sys.dao.WorkattachmentDao;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-01-26 15:31
+ **/
+@Service
+@Transactional(readOnly = true)
+public class RuralProjectRecordsDownMessageService extends CrudService<RuralProjectMessageDownDao, ProjectReportRecord> {
+
+    @Autowired
+    protected HistoryService historyService;
+    @Autowired
+    private ProjectReportDataService projectReportDataService;
+    @Autowired
+    private WorkattachmentDao workattachmentDao;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private WorkActivityMenuService workActivityMenuService;
+    @Autowired
+    private WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private WorkActivityProcessService workActivityProcessService;
+    @Autowired
+    private RuralProjectRecordsService ruralProjectRecordsService;
+    @Autowired
+    private ProjectReportRecordDao projectReportRecordDao;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ActivityService activityService;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+
+    public ProjectReportRecord get(String id) {
+        ProjectReportRecord projectReportRecord = super.get(id);
+        if (projectReportRecord!=null && StringUtils.isNotBlank(projectReportRecord.getId())){
+            ProjectReportData reportData = ruralProjectMessageService.getProjectReportDateByProjectId(projectReportRecordDao.getProjectId(projectReportRecord.getReport().getId()));
+            projectReportRecord.setReport(reportData);
+            Workattachment workattachment = new Workattachment();
+            workattachment.setAttachmentId(id);
+            projectReportRecord.setWorkAttachments(workattachmentDao.findList(workattachment));
+        }
+        return projectReportRecord;
+    }
+
+    /**
+     * 提交归档存储
+     * @param projectReportRecord
+     * @param variables
+     */
+    @Transactional(readOnly = false)
+    public String saveProjectReportRecord(ProjectReportRecord projectReportRecord, Map<String, Object> variables, String processInstanceId) {
+
+        User user = UserUtils.getUser();
+        Boolean insert = false;
+        if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportRecord.getId())){
+            projectReportRecord.setCompanyId(user.getComId());
+            projectReportRecord.setOfficeId(user.getOffice().getId());
+            projectReportRecord.preInsert();
+            insert = true;
+        }
+        //将附件插入数据库
+        saveWorkattachments(projectReportRecord);
+        //对数据进行插入数据库
+        if (insert) { //新增操作
+            this.insert(projectReportRecord);
+        }else {//修改操作
+            this.save(projectReportRecord);
+        }
+        //判断如果是暂存,则跳过流程操作
+        if("1".equals(projectReportRecord.getFlag())){
+            return "true";
+        }
+        //获取项目信息
+        RuralProjectRecords record = ruralProjectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+
+        //启动流程操作
+        String title = "项目【"+ record.getProjectName()+"】线下归档待审批";
+        String str = "项目【"+ record.getProjectName()+"】线下归档待审批";
+        // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+        identityService.setAuthenticatedUserId(user.getId());
+        // 启动流程
+        String businessKey = projectReportRecord.getId().toString();
+        Office office = UserUtils.getSelectOffice();
+        WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("5864872f45b84acd893010e66a3db2c8", office);
+
+        String processType = workActivityMenu.getProcessType();
+        StringBuffer buffer = new StringBuffer();
+        Activity activity = new Activity();
+        WorkProjectNotify workProjectNotify = UtilNotify
+                .saveNotify(projectReportRecord.getId(),
+                        null,
+                        projectReportRecord.getCompanyId(),
+                        title,
+                        str,
+                        "65",
+                        "0",
+                        "待审批",
+                        ""
+                );
+        List<User> users = new ArrayList<>();
+        List<User> bggdglys = UserUtils.getByRoleActivityEnname("xxgdydyhu",3,office.getId(),"10",projectReportRecord.getCreateBy());
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(workActivityMenu.getId())) {
+            workProjectNotify.setNotifyRole("");
+            workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+            List<Activity> activities = workActivityMenu.getActivities();
+            for (Activity a : activities) {
+                String encount = a.getEncount();
+                String enlist = a.getEnlist();
+                if (a.getRole()!=null && com.jeeplus.common.utils.StringUtils.isNotBlank(a.getRole().getEnname())){
+                    List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"10",projectReportRecord.getCreateBy());
+                    if (enusers.size()==0){
+                        projectReportRecord.setStatus("1");
+                        //this.save(projectReportRecord);
+                        return "报告归档流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+                    }
+                    variables.put(enlist, enusers);
+                    variables.put(encount, enusers.size());
+                }
+                if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+                    activity = a;
+                }
+            }
+            buffer.append(activity.getRole().getEnname());
+            if (activity != null && com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getId())) {
+                //角色审批
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                    users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"10",projectReportRecord.getCreateBy());
+                }
+                //人员审批
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getUser().getId())) {
+                    users.add(activity.getUser());
+                }
+            }
+            workProjectNotify.setId("");
+        } else {
+            variables.put("bggdglyList", bggdglys);
+            if (bggdglys.size()==0){
+                projectReportRecord.setStatus("1");
+                this.save(projectReportRecord);
+                return "流程审批人不能为空,报告归档管理员下无用户,请联系管理员!";
+            }
+            variables.put("bggdglycount",bggdglys.size());
+            processType = "reportRecordDown";
+            users.addAll(bggdglys);
+        }
+        for (User u : users){
+            workProjectNotify.setUser(u);
+            workProjectNotify.setId("");
+            workProjectNotify.setNotifyRole("档案管理员审批");
+            workProjectNotifyService
+                    .save(workProjectNotify);
+            Map<String,Object> extras = new HashMap<>();
+            extras.put("type","7001");
+            extras.put("id",workProjectNotify.getId());
+            extras.put("procDefKey","65");
+            UserUtils.pushInfoToApp(title,str,extras,u.getId());
+            UserUtils.pushIm(u.getId(),str);
+        }
+        variables.put("type", processType);
+        variables.put("busId", businessKey);
+        variables.put("title", "报告归档编号:" + projectReportRecord.getRecordNum());//设置标题;
+
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+
+        projectReportRecord.setProcessInstance(processInstance);
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(processInstanceId)) {
+            workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+            workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+            workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+        }
+        ProjectReportData projectReportData =projectReportRecord.getReport();
+        projectReportData.setDownFileStatus("2");
+        projectReportDataService.updateFileStatus(projectReportData);
+        // 修改更新流程实例ID
+        projectReportRecord.setProcessInstanceId(processInstance.getId());
+        dao.updateProcessInstanceId(projectReportRecord);
+        //通知添加流程实例ID
+        workProjectNotify.setProcessInstanceId(processInstance.getId());
+        workProjectNotifyService.save(workProjectNotify);
+        List<Activity> list = workActivityMenu.getActivities();
+        if (list != null && list.size() != 0) {
+            workActivityProcessService.saveList(list, processInstance.getId());
+        } else {
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setCount(1);
+            workActivityProcess.setProcessKey(processType);
+            workActivityProcess.setProcessInstanceId(processInstance.getId());
+            workActivityProcess.setIsApproval("0");
+            workActivityProcessService.insert(workActivityProcess);
+            workActivityProcessService.insertAuditsByType(bggdglys,processInstance.getId(),1,1);
+        }
+        return "true";
+    }
+
+
+    /**
+     * 新增线下归档信息
+     * @param projectReportRecord
+     */
+    @Transactional(readOnly = false)
+    public void insert(ProjectReportRecord projectReportRecord) {
+        dao.insert(projectReportRecord);
+    }
+
+    /**
+     * 编辑线下归档信息
+     * @param projectReportRecord
+     */
+    @Transactional(readOnly = false)
+    public void save(ProjectReportRecord projectReportRecord) {
+        ProjectReportData projectReportData =projectReportRecord.getReport();
+        projectReportData.setDownFileStatus("2");
+        //修改归档状态
+        projectReportDataService.updateFileStatus(projectReportData);
+        if (projectReportRecord.getIsNewRecord()){
+            projectReportRecord.preInsert();
+            projectReportRecord.setCreateDate(new Date());
+            dao.update(projectReportRecord);
+        }else{
+            projectReportRecord.preUpdate();
+            //修改归档信息
+            dao.update(projectReportRecord);
+        }
+        saveWorkattachments(projectReportRecord);
+    }
+
+    /**
+     * 添加附件信息
+     * @param projectReportRecord
+     */
+    @Transactional(readOnly = false)
+    public void saveWorkattachments(ProjectReportRecord projectReportRecord) {
+        List<Workattachment> workattachments = projectReportRecord.getWorkAttachments();
+        if (workattachments!=null && workattachments.size()!=0){
+            for (Workattachment workattachment:workattachments){
+                if (workattachment.getId() == null) {
+                    continue;
+                }
+                if (workattachment.DEL_FLAG_NORMAL.equals(workattachment.getDelFlag())) {
+                    workattachment.setAttachmentId(projectReportRecord.getId());
+                    workattachment.setAttachmentFlag("99");
+                    workattachment.setAttachmentUser(UserUtils.getUser().getId());
+                    if (com.jeeplus.common.utils.StringUtils.isBlank(workattachment.getId()) || "null".equals(workattachment.getId())) {
+                        workattachment.preInsert();
+                        workattachmentDao.insert(workattachment);
+                    } else {
+                        workattachment.preUpdate();
+                        workattachmentDao.update(workattachment);
+                    }
+                } else {
+                    workattachmentDao.delete(workattachment);
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 审核流程
+     * @param reportRecord
+     */
+    @Transactional(readOnly = false)
+    public String auditSave(ProjectReportRecord reportRecord,List<User> auditUsers) {
+        String flag = reportRecord.getAct().getFlag();
+        ProjectReportRecord projectReportRecord = null;
+        // 对不同环节的业务逻辑进行操作
+        Act act = reportRecord.getAct();
+        String taskDefKey = act.getTaskDefKey();
+        if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")  ) {
+            actTaskService.claim(act.getTaskId(), UserUtils.getUser().getId());
+            projectReportRecord = get(reportRecord.getId());
+        }else {
+            projectReportRecord = reportRecord;
+            saveWorkattachments(reportRecord);
+            flag = "yes";
+        }
+        projectReportRecord.setFileNum(reportRecord.getFileNum());
+        projectReportRecord.setFileNumTow(reportRecord.getFileNumTow());
+        projectReportRecord.setName(reportRecord.getName());
+        projectReportRecord.setAccomplishDate(new Date());
+        User user= UserUtils.get(projectReportRecord.getCreateBy().getId());
+        String title =  "报告名称:"+projectReportRecord.getReport().getName();
+        String str = "线下归档申请编号:"+projectReportRecord.getRecordNum()+ ",主委托方:"+projectReportRecord.getClientName()+",申请人:"+user.getName()+",所属部门:"+UserUtils.getSelectOffice().getName();
+
+        if (StringUtils.isBlank(act.getComment())){
+            act.setComment(flag.equals("yes")?"同意":"驳回");
+        }
+        String comment = "";
+        if (projectReportRecord.getStatus().equals("4")){
+            comment = ("yes".equals(flag)?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(flag)?"[同意] ":"[驳回] ")+act.getComment();
+        }
+        //yes 的时候状态为审核通过 否则为未通过
+        //1 审核中 2 未通过
+        projectReportRecord.setStatus(("yes".equals(flag) ? "2" : "4"));
+        Map<String, Object> vars = Maps.newHashMap();
+        //业务逻辑对应的条件表达式
+        String exp = "";
+        String taskCount = "";
+        String notifyRole = "";
+        int key = 0;
+        String enname = "";
+        List<Activity> activitieList = activityService.getByProcessInstanceId(projectReportRecord.getProcessInstanceId());
+        WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+        if (activitieList != null && activitieList.size() != 0) {
+            workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+            workActivityMenu.setActivities(activitieList);
+        }
+
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        WorkActivityProcess selectProcess = new WorkActivityProcess();
+        selectProcess.setProcessInstanceId(projectReportRecord.getProcessInstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("reportRecordDown")) {
+            key = 1;
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+                    taskCount = activityProcess.getCount()+"";
+                    workActivityProcess = activityProcess;
+                    if (!workActivityProcess.getIsApproval().equals("0")) {
+                        workActivityProcess.setId("");
+                    }
+                    exp = "pass";
+                    if (!"yes".equals(flag)) {
+                        projectReportRecord.setStatus("4");
+                        workActivityProcess.setIsApproval("2");
+                        String returnBack = "-1";
+                        for (Activity activity : activities) {
+                            if (activity.getCount() == activityProcess.getCount()) {
+                                notifyRole = activity.getName();
+                                returnBack = activity.getReturnBack();
+                                break;
+                            }
+                        }
+                        if (returnBack.equals("0")) {
+                            workActivityProcess.setId("");
+                        }
+
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                }else if(taskDefKey.equals("modifyApply")){
+                    taskCount = "0";
+                    notifyRole = "调整报告";
+                    exp = "pass";
+                    workActivityProcess.setId("");
+                    workActivityProcess.setCount(0);
+                    if (!"yes".equals(flag)) {
+                        projectReportRecord.setStatus("3");
+                        workActivityProcess.setIsApproval("2");
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                    break;
+                }
+            }
+        } else {
+            workActivityMenu.setProcessType("reportRecordDown");
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                workActivityProcess = activityProcess;
+                String count = activityProcess.getCount() + "";
+                if (!workActivityProcess.getIsApproval().equals("0")) {
+                    workActivityProcess.setId("");
+                }
+                // 审核环节
+                if ("bggdgly".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
+                    exp = "pass";
+                    if ("yes".equals(flag)) {
+                        notifyRole = "审批通过";
+                        workActivityProcess.setIsApproval("1");
+                    } else {
+                        notifyRole = "调整报告归档";
+                        workActivityProcess.setIsApproval("2");
+                    }
+                    break;
+                }else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+                    notifyRole = "线下项目归档管理员审批";
+                    taskCount = "0";
+                    exp = "pass";
+                    workActivityProcess.setCount(0);
+                    enname = "bggdgly";
+                    if (!"yes".equals(flag)) {
+                        projectReportRecord.setStatus("3");
+                    }
+                    break;
+                }
+
+            }
+        }
+        // 设置意见
+        act.setComment(("yes".equals(flag) ? "[同意] " : "[驳回] ") + act.getComment());
+        projectReportRecord.preUpdate();
+        // 提交流程任务
+        vars.put(exp, "yes".equals(flag) ? true : false);
+        vars.put("passs", true);
+        workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,projectReportRecord.getProcessInstanceId(),taskDefKey,"modifyApply",flag,comment, activities);
+        // 提交流程任务
+        actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+        boolean state = actTaskService.isProcessEnd(act.getProcInsId());
+        List<User> users = new ArrayList<>();
+        List<User> userList = new ArrayList<>();
+        //获取项目信息
+        RuralProjectRecords record = ruralProjectRecordsService.get(reportRecord.getReport().getProject().getId());
+
+        if (!state) {
+            String titleStr = "项目【"+ record.getProjectName()+"】归档完成";
+            String content = "项目【"+ record.getProjectName()+"】归档完成,案卷号:" + projectReportRecord.getFileNum();
+            users.add(projectReportRecord.getCreateBy());
+            if ("yes".equals(flag)) {
+                ProjectReportData projectReportData =projectReportRecord.getReport();
+                projectReportData.setDownFileStatus("3");
+                projectReportDataService.updateFileStatus(projectReportData);
+                projectReportRecord.setStatus("5");
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportRecord.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNotify(projectReportRecord.getId(),
+                                        projectReportRecord.getCreateBy(),
+                                        projectReportRecord.getCompanyId(),
+                                        titleStr,
+                                        content,
+                                        "65",
+                                        "0",
+                                        "待通知",
+                                        notifyRole));
+
+            } else {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportRecord.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                if (StringUtils.isNotBlank(projectReportRecord.getStatus()) && !projectReportRecord.getStatus().equals("3")){
+                    projectReportRecord.setStatus("4");
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(projectReportRecord.getId(),
+                                            projectReportRecord.getCreateBy(),
+                                            projectReportRecord.getCompanyId(),
+                                            title,
+                                            str,
+                                            "65",
+                                            "0",
+                                            "待通知",
+                                            notifyRole));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(projectReportRecord.getProcessInstanceId());
+        } else {
+            if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("reportRecordDown")) {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportRecord.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                WorkProjectNotify workProjectNotify = UtilNotify
+                        .saveNotify(projectReportRecord.getId(),
+                                new User(),
+                                projectReportRecord.getCompanyId(),
+                                title,
+                                str,
+                                "65",
+                                "0",
+                                "待审批",
+                                notifyRole);
+                List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+                        activities,
+                        workProjectNotify,
+                        taskDefKey,
+                        flag,
+                        taskCount,
+                        projectReportRecord.getCreateBy(),
+                        user.getOffice().getId(),
+                        "10");
+                for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+                    users.add(workProjectNotify1.getUser());
+                    workProjectNotify1.setId("");
+                    workProjectNotify1.setIsNewRecord(false);
+                    workProjectNotifyService
+                            .save(workProjectNotify1);
+                }
+
+            } else {
+                if (!"yes".equals(flag)) {//驳回待办信息
+                    str = "项目【"+ record.getProjectName()+"】线下归档被驳回,请重新归档";
+                    title = "项目【"+ record.getProjectName()+"】线下归档被驳回";
+                    WorkProjectNotify notify = new WorkProjectNotify();
+                    notify.setNotifyId(projectReportRecord.getId());
+                    userList = workProjectNotifyService.readByNotifyId(notify);
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(projectReportRecord.getId(),
+                                            projectReportRecord.getCreateBy(),
+                                            projectReportRecord.getCompanyId(),
+                                            title,
+                                            str,
+                                            "65",
+                                            "0",
+                                            "重新申请",
+                                            notifyRole));
+                    users.add( projectReportRecord.getCreateBy());
+                } else {
+                    if (StringUtils.isNotBlank(enname)) {//驳回重新归档
+                        str = "项目【"+ record.getProjectName()+"】线下归档信息重新登记,待审批";
+                        title = "项目【"+ record.getProjectName()+"】线下归档信息重新登记,待审批";
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectReportRecord.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        WorkProjectNotify workProjectNotify = UtilNotify
+                                .saveNotify(projectReportRecord.getId(),
+                                        new User(),
+                                        projectReportRecord.getCompanyId(),
+                                        title,
+                                        str,
+                                        "65",
+                                        "0",
+                                        "待审批",
+                                        notifyRole);
+                        users.addAll(auditUsers);
+                        for (User user1 : users) {
+                            workProjectNotify.setUser(user1);
+                            workProjectNotify.setId("");
+                            workProjectNotify.setIsNewRecord(false);
+                            workProjectNotifyService
+                                    .save(workProjectNotify);
+                        }
+                    }else {
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectReportRecord.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        users.add(projectReportRecord.getCreateBy());
+                        workProjectNotifyService
+                                .save(UtilNotify
+                                        .saveNotify(projectReportRecord.getId(),
+                                                projectReportRecord.getCreateBy(),
+                                                projectReportRecord.getCompanyId(),
+                                                title,
+                                                str,
+                                                "65",
+                                                "0",
+                                                "重新申请",
+                                                notifyRole));
+                    }
+                }
+            }
+        }
+        if (users!=null && users.size()!=0) {
+            for (User u : users) {
+                UserUtils.pushIm(u.getId(),title);
+            }
+        }
+        if (users!=null && userList.size()!=0) {
+            for (User u : userList) {
+                UserUtils.pushMeIm(u.getId());
+            }
+        }
+        dao.update(projectReportRecord);
+        return "保存审核意见成功!";
+    }
+
+
+    /**
+     * 线下归档:强制撤销
+     * @param projectReportRecord
+     */
+    @Transactional(readOnly = false)
+    public void cancelInvalidate(ProjectReportRecord projectReportRecord){
+        String invalidateProcessInstanceId = projectReportRecord.getProcessInstanceId();
+        //将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+        WorkActivityProcess process = new WorkActivityProcess();
+        process.setProcessInstanceId(projectReportRecord.getProcessInstanceId());
+        process.setIsApproval("0");
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        workActivityProcess.setProcessInstanceId(projectReportRecord.getProcessInstanceId());
+        List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+        WorkProjectNotify notify = new WorkProjectNotify();
+        notify.setNotifyId(projectReportRecord.getId());
+        List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+        if (userList!=null && userList.size()!=0) {
+            for (User u : userList) {
+                User user = UserUtils.get(u.getId());
+                UserUtils.pushMeIm(user.getId());
+            }
+        }
+        if(processList!=null && processList.size()>0){
+            for (int i =0;i<processList.size();i++) {
+                WorkActivityProcess p = processList.get(i);
+                if(com.jeeplus.common.utils.StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+                    p.setIsApproval("-1");
+                    p.setDelFlag("1");
+                    workActivityProcessDao.updateDelFlagAndIsApproval(p);
+                }
+            }
+            WorkActivityProcess pro = new WorkActivityProcess();
+            pro.setId("");
+            pro.preInsert();
+            pro.setDelFlag("0");
+            pro.setRemarks("[强制撤销]");
+            pro.setProcessKey(processList.get(0).getProcessKey());
+            pro.setIsApproval("1");
+            pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+            pro.setCount(0);
+            workActivityProcessDao.insert(pro);
+        }
+
+        //结束该流程,设为"撤销"状态
+        try {
+            actTaskService.endProcessInstance(invalidateProcessInstanceId,"报告归档-强制撤销");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        projectReportRecord.setStatus("3");
+        projectReportRecord.preUpdate();
+        dao.update(projectReportRecord);
+
+    }
+}

+ 102 - 3
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/SubProjectInfoService.java

@@ -2,7 +2,6 @@ package com.jeeplus.modules.ruralprojectrecords.service;
 
 import com.alibaba.fastjson.JSON;
 import com.github.junrar.Archive;
-import com.github.junrar.exception.RarException;
 import com.github.junrar.rarfile.FileHeader;
 import com.google.common.collect.Lists;
 import com.jeeplus.common.bos.BOSClientUtil;
@@ -11,15 +10,17 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.service.CrudService;
 import com.jeeplus.common.utils.MenuStatusEnum;
 import com.jeeplus.common.utils.StringUtils;
-import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.modules.projectAccessory.service.ProjectTemplateService;
 import com.jeeplus.modules.ruralprojectrecords.dao.SubProjectInfoDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.ProjectReportRecordTree;
 import com.jeeplus.modules.ruralprojectrecords.entity.SubProjectInfo;
 import com.jeeplus.modules.ruralprojectrecords.utils.ImportExcelUtil;
 import com.jeeplus.modules.sys.dao.WorkattachmentDao;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
-import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.stereotype.Service;
@@ -50,6 +51,18 @@ import java.util.Enumeration;
 public class SubProjectInfoService extends CrudService<SubProjectInfoDao, SubProjectInfo> {
     @Autowired
     private WorkattachmentDao workattachmentDao;
+    @Autowired
+    private ProjectTemplateService projectTemplateService;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageService;
+
+    /**
+     * 获取项目附件模板类型
+     * @return
+     */
+    public static List<MainDictDetail> attachmentTemplateList(){
+        return  DictUtils.getMainDictList("attachment_template_type");
+    }
 
     public SubProjectInfo get(String id) {
         return super.get(id);
@@ -691,4 +704,90 @@ public class SubProjectInfoService extends CrudService<SubProjectInfoDao, SubPro
         return bool;
     }
 
+
+
+
+    /**
+     * 查询所有数据
+     * @param subProjectInfo
+     * @return
+     */
+    public Map<String,List> findListTree(SubProjectInfo subProjectInfo) {
+        Map<String,List> map = new HashMap<>();
+        //新建树形列表集合
+        List<ProjectReportRecordTree> treeList=new ArrayList<>();
+        //查询子项目信息
+        List<SubProjectInfo> subProjectList = findList(subProjectInfo);
+        if(subProjectList.size()>0){
+            for (SubProjectInfo subProject:subProjectList) {
+                //将项目类型放入树形列表集合中
+                ProjectReportRecordTree recordTreeData = new ProjectReportRecordTree();
+                //将界面需要展示数据放入类中
+                recordTreeData.setId(subProject.getId());
+                recordTreeData.setProjectName(subProject.getProjectName());
+                recordTreeData.setAttachName("");
+                recordTreeData.setPid("0");
+                //将项目类型设置为第一级数据
+                recordTreeData.setCondition(1);
+                //将项目类型信息放入
+                treeList.add(recordTreeData);
+
+                //获取项目附件模板类型
+                List<MainDictDetail> attachmentTemplateList = attachmentTemplateList();
+                if(attachmentTemplateList.size()>0){
+                    //遍历项目中的项目附件模板类型信息
+                    for (MainDictDetail mainDict:attachmentTemplateList) {
+                        ProjectReportRecordTree mainDictData = new ProjectReportRecordTree();
+                        //将第一级id添加到二级id中,解决三级数据重复展示问题
+                        mainDictData.setId(recordTreeData.getId()+","+mainDict.getValue());
+                        mainDictData.setProjectName(mainDict.getLabel());
+                        mainDictData.setAttachName("");
+                        mainDictData.setPid(recordTreeData.getId());
+
+                        //将项目附件模板类型设置为第二级数据
+                        mainDictData.setCondition(2);
+
+                        //根据条件查询第三级数据集合
+                        Workattachment workattachment = new Workattachment();
+                        workattachment.setAttachmentId(subProject.getId());
+                        switch (mainDict.getValue()) {
+                            case "11":
+                                workattachment.setDivIdType("_subAttachment");
+                                break;
+                            case "12":
+                                workattachment.setDivIdType("_subGistdata");
+                                break;
+                            case "13":
+                                workattachment.setDivIdType("_subOther");
+                                break;
+                        }
+                        if(StringUtils.isNotBlank(workattachment.getDivIdType())){
+                            //查询附件信息并添加
+                            List<Workattachment> workattachmentList = workattachmentDao.findList(workattachment);
+                            if(0 != workattachmentList.size()) {
+                                for (Workattachment workattachmentInfo : workattachmentList) {
+                                    ProjectReportRecordTree contentData = new ProjectReportRecordTree();
+                                    contentData.setPid(mainDictData.getId());
+                                    contentData.setId(workattachmentInfo.getId());
+                                    contentData.setProjectName(workattachmentInfo.getAttachmentName());
+                                    contentData.setAttachName(workattachmentInfo.getAttachmentName());
+                                    contentData.setAttachUrl(workattachmentInfo.getUrl());
+
+                                    //将具体类型设置为第三级数据
+                                    contentData.setCondition(3);
+                                    treeList.add(contentData);
+                                }
+                                //将项目附件模板类型信息放入
+                                treeList.add(mainDictData);
+                            }
+                        }
+                    }
+                }
+            }
+
+        }
+        map.put("data",treeList);
+        return map;
+    }
+
 }

+ 20 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectRecordsController.java

@@ -15,10 +15,14 @@ import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
 import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
 import com.jeeplus.modules.projectrecord.service.ProjectPlanService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.Office;
@@ -74,6 +78,10 @@ public class RuralCostProjectRecordsController extends BaseController {
 	private ActivityService activityService;
 	@Autowired
 	private ProjectPlanService projectPlanService;
+	@Autowired
+	private ProjectReportDataService projectReportDataService;
+	@Autowired
+	private RuralProjectMessageService ruralProjectMessageService;
 
 	private static String template_path = Global.getProjectTemplatePath()+"咨询工作方案.xlsx";
 	private static String template_name = "咨询工作方案.xlsx";
@@ -196,6 +204,18 @@ public class RuralCostProjectRecordsController extends BaseController {
 					break;
 				}
 			}
+
+			//查询项目报告信息
+			ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(projectRecords.getId());
+			//如果项目报告不为空,则查询项目线上归档信息
+			if(null != projectReportData){
+				ProjectReportRecord projectReportRecord = ruralProjectMessageService.getProjectReportRecord(projectReportData.getId());
+				if(null != projectReportRecord){
+					model.addAttribute("projectId", projectRecords.getId());
+				}else{
+					model.addAttribute("projectId", "");
+				}
+			}
 		}
 		model.addAttribute("projectRecords", projectRecords);
 		return "modules/ruralprojectrecords/cost/ruralCostProjectRecordsView";

+ 20 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsController.java

@@ -15,10 +15,14 @@ import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
 import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
 import com.jeeplus.modules.projectrecord.service.ProjectPlanService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.Office;
@@ -74,6 +78,10 @@ public class RuralProjectRecordsController extends BaseController {
 	private ActivityService activityService;
 	@Autowired
 	private ProjectPlanService projectPlanService;
+	@Autowired
+	private ProjectReportDataService projectReportDataService;
+	@Autowired
+	private RuralProjectMessageService ruralProjectMessageService;
 
 	private static String template_path = Global.getProjectTemplatePath()+"咨询工作方案.xlsx";
 	private static String template_name = "咨询工作方案.xlsx";
@@ -171,6 +179,18 @@ public class RuralProjectRecordsController extends BaseController {
 					break;
 				}
 			}
+
+			//查询项目报告信息
+			ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(projectRecords.getId());
+			//如果项目报告不为空,则查询项目线上归档信息
+			if(null != projectReportData){
+				ProjectReportRecord projectReportRecord = ruralProjectMessageService.getProjectReportRecord(projectReportData.getId());
+				if(null != projectReportRecord){
+					model.addAttribute("projectId", projectRecords.getId());
+				}else{
+					model.addAttribute("projectId", "");
+				}
+			}
 		}
 		model.addAttribute("projectRecords", projectRecords);
 		return "modules/ruralprojectrecords/ruralProjectRecordsView";

+ 383 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsDownMessageController.java

@@ -0,0 +1,383 @@
+package com.jeeplus.modules.ruralprojectrecords.web;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportRecordService;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsDownMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: 徐滕
+ * @create: 2021-01-26 14:25
+ **/
+@Controller
+@RequestMapping(value = "${adminPath}/ruralProject/ruralProjectDownMessage")
+public class RuralProjectRecordsDownMessageController extends BaseController {
+    @Autowired
+    private RuralProjectRecordsDownMessageService projectRecordsService;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageService;
+    @Autowired
+    protected HistoryService historyService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ProjectReportRecordService projectReportRecordService;
+    @Autowired
+    private RuralProjectRecordsService ruralProjectRecordsService;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+
+    @ModelAttribute
+    public ProjectReportRecord get(@RequestParam(required=false) String id) {
+        ProjectReportRecord entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = projectRecordsService.get(id);
+        }
+        if (entity == null){
+            entity = new ProjectReportRecord();
+        }
+        return entity;
+    }
+
+    /**
+     * 跳转线下归档新增页面
+     * @param projectReportRecord
+     * @param model
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "formRecord")
+    public String form(ProjectReportRecord projectReportRecord, Model model) throws Exception {
+        //判断不是查看方法
+        if (StringUtils.isBlank(projectReportRecord.getView()) || !projectReportRecord.getView().equals("view")){
+            //判断有无归档记录信息,没有则添加当前人员信息
+            if(StringUtils.isBlank(projectReportRecord.getId())){
+                projectReportRecord.setCreateDate(new Date());
+                projectReportRecord.setCreateBy(UserUtils.getUser());
+            }
+        }
+        ProjectReportData projectReportData = new ProjectReportData();
+        ProjectRecords projectRecords = new ProjectRecords();
+        projectReportData.setFileStatus("1");
+        //获取报告信息
+        ProjectReportData reportData = ruralProjectMessageService.getProjectReportDateByProjectId(projectReportRecord.getReportId());
+        if(null != reportData){
+            if (StringUtils.isBlank(projectReportRecord.getView()) || !projectReportRecord.getView().equals("view")){
+                synchronized (SYN_BYTE) {
+                    int count = projectReportRecordService.getNumber(reportData.getId());
+                    projectReportRecord.setRecordNum(count > 9 ? reportData.getNumber() + "-" + count + "" : reportData.getNumber() + "-" + "0" + count);
+                }
+            }else{
+                ProjectReportRecord projectReportRecordInfo =ruralProjectMessageService.getProjectReportRecord(reportData.getId());
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecordInfo, projectReportRecord);
+            }
+        }
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(projectReportRecord.getReportId());
+        MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords, projectRecords);
+        //获取合同信息
+        WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(projectRecords.getWorkContractInfo().getId());
+        projectRecords.setWorkContractInfo(projectContractInfo);
+        reportData.setProject(projectRecords);
+        projectReportRecord.setReport(reportData);
+        model.addAttribute("projectReportRecord", projectReportRecord);
+        model.addAttribute("project", projectReportRecord.getReport().getProject());
+        if(null != projectContractInfo){
+            if(projectContractInfo.getWorkClientInfoList().size()>0){
+                model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
+            }
+        }
+
+
+        if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("view")){
+            return "modules/ruralprojectrecords/down/projectReportRecordDownView";
+        }
+        return "modules/ruralprojectrecords/down/projectReportRecordDownForm";
+    }
+
+    /**
+     * 跳转线下归档详情页面
+     * @param projectReportRecord
+     * @param model
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "view")
+    public String view(ProjectReportRecord projectReportRecord, Model model) throws Exception {
+        model.addAttribute("projectReportRecord",projectReportRecord);
+        return "modules/ruralprojectrecords/down/projectReportRecordDownView";
+    }
+
+    /**
+     * 保存线下归档
+     * @param projectReportRecord
+     * @param model
+     * @param redirectAttributes
+     * @param saveAuditFlag
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "saveRecord")
+    public String save(ProjectReportRecord projectReportRecord, Model model, RedirectAttributes redirectAttributes, Integer saveAuditFlag) throws Exception{
+        if (!beanValidator(model, projectReportRecord)){
+            return form(projectReportRecord, model);
+        }
+        try {
+            User user = projectReportRecord.getCreateBy();
+            String sta = projectReportRecord.getStatus();
+            if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+                addMessage(redirectAttributes, "您不是申请人,无法修改");
+                if("1".equals(projectReportRecord.getFlag())){
+                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                }else{
+                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                }
+            }
+            //状态设置为审核中
+            projectReportRecord.setStatus("2");
+            String processInstanceId ="";
+            if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(sta) && "3".equals(sta)){
+                processInstanceId = projectRecordsService.get(projectReportRecord.getId()).getProcessInstanceId();
+            }
+            Map<String, Object> variables = new HashMap<>();
+            if(!projectReportRecord.getIsNewRecord()){//编辑表单保存
+                ProjectReportRecord t = projectRecordsService.get(projectReportRecord.getId());//从数据库取出记录的值
+                if(null != saveAuditFlag){
+                    if(1 == saveAuditFlag && t.getStatus().equals("2")){
+                        addMessage(redirectAttributes, "报告归档已送审,请勿重复送审");
+                        if("1".equals(projectReportRecord.getFlag())){
+                            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                        }else{
+                            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                        }
+                    }
+                    if(t.getStatus().equals("5")){
+                        addMessage(redirectAttributes, "报告归档已登记完成,无法再次送审");
+                        if("1".equals(projectReportRecord.getFlag())){
+                            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                        }else{
+                            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                        }
+                    }
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecord,t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modify")){
+                    projectReportRecord.setStatus("2");
+                }
+                projectRecordsService.saveProjectReportRecord(t,variables,processInstanceId);//保存
+            }else {//新增表单保存
+                ProjectReportRecord reportRecord = projectRecordsService.get(projectReportRecord.getReport().getId());//从数据库取出记录的值
+                if(null !=reportRecord){
+                    projectReportRecord.setId(reportRecord.getId());
+                }
+                projectRecordsService.saveProjectReportRecord(projectReportRecord,variables,processInstanceId);//保存
+            }
+            addMessage(redirectAttributes, "保存报告归档成功");
+        }catch (Exception e){
+            addMessage(redirectAttributes, "保存报告归档失败");
+        }
+        if("1".equals(projectReportRecord.getFlag())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+        }else{
+
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+    }
+
+    /**
+     * 暂存线下归档
+     * @param projectReportRecord
+     * @param model
+     * @param redirectAttributes
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "holdSaveRecord")
+    public String holdSaveRecord(ProjectReportRecord projectReportRecord, Model model, RedirectAttributes redirectAttributes) throws Exception{
+        if (!beanValidator(model, projectReportRecord)){
+            return form(projectReportRecord, model);
+        }
+        try {
+            //获取创建者信息
+            User user = projectReportRecord.getCreateBy();
+            String sta = projectReportRecord.getStatus();
+            if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+                addMessage(redirectAttributes, "您不是申请人,无法修改");
+                if("1".equals(projectReportRecord.getFlag())){
+                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                }else{
+                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                }
+            }
+            //添加暂存判定
+            projectReportRecord.setFlag("1");
+            //将状态改为暂存状态
+            projectReportRecord.setStatus("1");
+            String processInstanceId ="";
+            if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(sta) && "3".equals(sta)){
+                processInstanceId = projectReportRecordService.get(projectReportRecord.getId()).getProcessInstanceId();
+            }
+            Map<String, Object> variables = new HashMap<>();
+            if(!projectReportRecord.getIsNewRecord()){//编辑表单保存
+                ProjectReportRecord t = projectReportRecordService.get(projectReportRecord.getId());//从数据库取出记录的值
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecord,t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modify")){
+                    projectReportRecord.setStatus("1");
+                }
+                projectRecordsService.saveProjectReportRecord(t,variables,processInstanceId);//保存
+            }else {//新增表单保存
+                ProjectReportRecord reportRecord = projectRecordsService.get(projectReportRecord.getReport().getId());//从数据库取出记录的值
+                if(null != reportRecord){
+                    addMessage(redirectAttributes, "报告归档已存在,请勿重复提交");
+                    if("1".equals(projectReportRecord.getFlag())){
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                    }else{
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                    }
+                }
+                projectRecordsService.saveProjectReportRecord(projectReportRecord,variables,processInstanceId);//保存
+            }
+            addMessage(redirectAttributes, "保存报告归档暂存成功");
+        }catch (Exception e){
+            addMessage(redirectAttributes, "保存报告归档暂存失败");
+        }
+        if("1".equals(projectReportRecord.getFlag())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+        }else{
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+    }
+
+
+    /**
+     * 查看,编辑线下归档表单页面
+     * @param projectReportRecord
+     * @param model
+     * @return
+     */
+    @RequestMapping(value = "formRecordModify")
+    public String formRecordModify(ProjectReportRecord projectReportRecord, Model model) {
+        if(StringUtils.isBlank(projectReportRecord.getId())){
+            projectReportRecord.setCreateDate(new Date());
+            projectReportRecord.setCreateBy(UserUtils.getUser());
+        }
+        projectReportRecord.setView("modify");
+
+        model.addAttribute("projectReportRecord", projectReportRecord);
+        model.addAttribute("project", projectReportRecord.getReport().getProject());
+        if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("view")){
+            return "modules/ruralprojectrecords/down/projectReportRecordDownView";
+        }
+        ProcessInstance processInstance = actTaskService.getProcIns(projectReportRecord.getProcessInstanceId());
+        if (processInstance!=null) {
+            Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+            Act act = new Act();
+            act.setTaskId(taskInfok.getId());
+            act.setTaskName(taskInfok.getName());
+            act.setProcDefId(taskInfok.getProcessDefinitionId());
+            act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+            act.setProcInsId(taskInfok.getProcessInstanceId());
+            act.setTask(taskInfok);
+            projectReportRecord.setAct(act);
+        }
+        return "modules/ruralprojectrecords/down/projectReportRecordDownModify";
+    }
+
+    /**
+     * 线下归档审批
+     * @param projectReportRecord
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = {"auditSave"})
+    public String auditSave(ProjectReportRecord projectReportRecord, RedirectAttributes redirectAttributes) {
+        try {
+            // 对不同环节的业务逻辑进行操作
+            List<User> users = UserUtils.getByProssType(projectReportRecord.getProcessInstanceId(),1);
+            String flag = projectReportRecord.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                String str = projectRecordsService.auditSave(projectReportRecord,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            logger.error("Exception e:"+e);
+            addMessage(redirectAttributes, "报告归档流程审批失败");
+        }
+        if (StringUtils.isNotBlank(projectReportRecord.getHome()) && projectReportRecord.getHome().equals("home")){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else {
+            if("1".equals(projectReportRecord.getFlag())){
+                return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+            }else{
+                return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+            }
+        }
+    }
+
+
+    /**
+     * 线下报告归档:强制撤回
+     * @param projectReportRecord
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping("cancelInvalidate")
+    public String cancelInvalidate(ProjectReportRecord projectReportRecord,RedirectAttributes redirectAttributes){
+        projectReportRecord = projectRecordsService.get(projectReportRecord.getId());
+        try {
+            if(projectReportRecord.getStatus().equals("5")){
+                addMessage(redirectAttributes, "报告归档已审批通过,无法撤回");
+            }else{
+                if(projectReportRecord.getStatus().equals("2")){
+                    projectRecordsService.cancelInvalidate(projectReportRecord);
+                    addMessage(redirectAttributes, "强制撤回报告归档成功");
+                }else{
+                    addMessage(redirectAttributes, "报告归档不是送审状态,无法撤回");
+                    if("1".equals(projectReportRecord.getFlag())){
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+                    }else{
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                    }
+                }
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "强制撤回报告归档失败");
+        }
+        if("1".equals(projectReportRecord.getFlag())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+        }else{
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+    }
+}

+ 38 - 4
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/SubProjectInfoController.java

@@ -6,7 +6,12 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.utils.MyBeanUtils;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryRelationInfo;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
 import com.jeeplus.modules.ruralprojectrecords.entity.SubProjectInfo;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.SubProjectInfoService;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.utils.UserUtils;
@@ -23,10 +28,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -41,6 +43,10 @@ public class SubProjectInfoController extends BaseController {
 
     @Autowired
     private SubProjectInfoService subProjectInfoService;
+    @Autowired
+    private ProjectReportDataService projectReportDataService;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageService;
 
     @ModelAttribute
     public SubProjectInfo get(@RequestParam(required=false) String id) {
@@ -66,6 +72,18 @@ public class SubProjectInfoController extends BaseController {
     public String list(SubProjectInfo subProjectInfo, HttpServletRequest request, HttpServletResponse response, Model model) {
         //获取子项目信息
         Page<SubProjectInfo> page = subProjectInfoService.findPage(new Page<SubProjectInfo>(request, response), subProjectInfo);
+
+        //查询项目报告信息
+        ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(subProjectInfo.getParentProId());
+        //如果项目报告不为空,则查询项目线上归档信息
+        if(null != projectReportData){
+            ProjectReportRecord projectReportRecord = ruralProjectMessageService.getProjectReportRecord(projectReportData.getId());
+            if(null != projectReportRecord){
+                model.addAttribute("projectId", subProjectInfo.getParentProId());
+            }else{
+                model.addAttribute("projectId", "");
+            }
+        }
         model.addAttribute("page", page);
         model.addAttribute("parentProId", subProjectInfo.getParentProId());
         return "modules/ruralprojectrecords/subProjectInfo/subProjectInfoList";
@@ -198,4 +216,20 @@ public class SubProjectInfoController extends BaseController {
         return result;
     }
 
+    /**
+     * 获取子项目树状图
+     * @param subProjectInfo
+     * @return
+     */
+    @RequestMapping(value = "getSubProjectTree")
+    @ResponseBody
+    public Map<String, List> getSubProjectTree(SubProjectInfo subProjectInfo){
+        Map map = new HashMap();
+        if(StringUtils.isNotBlank(subProjectInfo.getParentProId())){
+            return subProjectInfoService.findListTree(subProjectInfo);
+        }
+        map.put("data",new ArrayList<ProjectAccessoryRelationInfo>());
+        return map;
+    }
+
 }

+ 39 - 1
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -62,6 +62,7 @@ import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecordsReporte
 import com.jeeplus.modules.ruralprojectrecords.enums.ProjectStatusEnum;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsAlterService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsDownMessageService;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.serialnum.service.SerialNumTplService;
 import com.jeeplus.modules.sys.entity.*;
@@ -378,6 +379,8 @@ public class WorkProjectNotifyController extends BaseController {
 	private WorkReviewStandardService workReviewStandardService;
 	@Autowired
 	private ProjectReportRecordService projectReportRecordService;
+	@Autowired
+	private RuralProjectRecordsDownMessageService ruralProjectRecordsDownMessageService;
     @Autowired
     private WorkReceiptsSettleService workReceiptsSettleService;
 	@Autowired
@@ -757,6 +760,10 @@ public class WorkProjectNotifyController extends BaseController {
 				ProjectReportRecord projectReportRecord = projectReportRecordService.get(workProjectNotify.getNotifyId());
 				if (projectReportRecord != null)
 				processInstanceId = projectReportRecord.getProcessInstanceId();
+			}else if(workProjectNotify.getType().equals("65")){	//工作内容报告归档
+				ProjectReportRecord projectReportRecord = ruralProjectRecordsDownMessageService.get(workProjectNotify.getNotifyId());
+				if (projectReportRecord != null)
+				processInstanceId = projectReportRecord.getProcessInstanceId();
 			}else if("52".equals(workProjectNotify.getType())){	//收入结算
                 WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
 				if (workReceiptsSettle != null)
@@ -1919,7 +1926,15 @@ public class WorkProjectNotifyController extends BaseController {
 					projectReportRecord.setAct(act);
 					projectReportRecord.setHome("home");
 
-
+					WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(ruralProjectRecords.getWorkContractInfo().getId());
+					ruralProjectRecords.setWorkContractInfo(projectContractInfo);
+					MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords,projectReportRecord.getReport().getProject());//将编辑表单中的非NULL值覆盖数据库记录中的值
+					if(null != projectContractInfo){
+						if(projectContractInfo.getWorkClientInfoList().size()>0){
+							model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
+						}
+					}
+					
 					//根据条件查询附件必填项
 					//判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
 					Integer projectSort = projectAccessoryRelationService.decideAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
@@ -1983,6 +1998,25 @@ public class WorkProjectNotifyController extends BaseController {
 						return "modules/ruralprojectrecords/projectReportRecord/projectReportRecordView";
 
 					}
+				} else if (workProjectNotify.getType().equals("65")) {    //工作内容报告归档
+					ProjectReportRecord projectReportRecord = ruralProjectRecordsDownMessageService.get(workProjectNotify.getNotifyId());
+					//获取项目信息
+					RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+					Act act = getByAct(projectReportRecord.getProcessInstanceId());
+					projectReportRecord.setAct(act);
+					projectReportRecord.setHome("home");
+
+					model.addAttribute("projectReportRecord", projectReportRecord);
+					model.addAttribute("project", projectReportRecord.getReport().getProject());
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+						return "modules/ruralprojectrecords/down/projectReportRecordDownView";
+					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/ruralprojectrecords/down/projectReportRecordDownAudit";
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/ruralprojectrecords/down/projectReportRecordDownModifyApply";
+					} else {
+						return "modules/ruralprojectrecords/down/projectReportRecordDownView";
+					}
 				} else if (workProjectNotify.getType().equals("151")) {    //工作内容报告归档
 					ProjectReportRecord projectReportRecord = projectReportRecordService.get(workProjectNotify.getNotifyId());
 					Act act = getByAct(projectReportRecord.getProcessInstanceId());
@@ -2865,6 +2899,10 @@ public class WorkProjectNotifyController extends BaseController {
 					ProjectReportRecord projectReportRecord = projectReportRecordService.get(workProjectNotify.getNotifyId());
 					model.addAttribute("projectReportRecord", projectReportRecord);
 					return "modules/projectcontentinfo/reportRecordView";
+				}else if(workProjectNotify.getType().equals("65")){	//工作内容报告归档
+					ProjectReportRecord projectReportRecord = ruralProjectRecordsDownMessageService.get(workProjectNotify.getNotifyId());
+					model.addAttribute("projectReportRecord", projectReportRecord);
+					return "modules/projectcontentinfo/reportRecordView";
 				}else if("52".equals(workProjectNotify.getType())){	//收入结算
                     WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
                     model.addAttribute("workReceiptsSettle", workReceiptsSettle);

+ 11 - 1
src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataDao.xml

@@ -23,6 +23,7 @@
 		a.master AS "master.id",
 		a.report_date AS "reportDate",
 		a.file_status AS "fileStatus",
+		a.down_file_status AS "downFileStatus",
 		a.status AS "status",
 		a.invalid_status AS "invalidStatus",
 		a.report_type AS "reportType",
@@ -85,6 +86,7 @@
 		a.master AS "master.id",
 		a.report_date AS "reportDate",
 		a.file_status AS "fileStatus",
+		a.down_file_status AS "downFileStatus",
 		a.status AS "status",
 		a.report_type AS "reportType",
 		a.process_instance_id AS "processInstanceId",
@@ -516,6 +518,7 @@
 			master,
 			report_date,
 			file_status,
+			down_file_status,
 			status,
 			invalid_status,
 			report_type,
@@ -551,6 +554,7 @@
 			#{master.id},
 			#{reportDate},
 			#{fileStatus},
+			#{downFileStatus},
 			#{status},
 			#{invalidStatus},
 			#{reportType},
@@ -653,7 +657,13 @@
 
 	<update id="updateFileStatus">
 		UPDATE project_report_data SET
-		file_status = #{fileStatus}
+		id = #{id}
+		<if test="fileStatus != null and fileStatus != ''">
+			,file_status = #{fileStatus}
+		</if>
+		<if test="downFileStatus != null and downFileStatus != ''">
+			,down_file_status = #{downFileStatus}
+		</if>
 		WHERE id = #{id}
 	</update>
 

+ 8 - 3
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml

@@ -217,10 +217,13 @@
 		ifnull(prd.number ,"") as "projectReportNumber"
 		,ifnull(prd.status,0) as "projectReportStatus"
 		,ifnull(prd.name,"") as "projectReportName"
-		,ifnull(prr.status,0) as "projectReportRecordStatus",
-        prr.file_num as recodeNum,
-		prr.process_instance_id as prrProcessInstanceId
+		,ifnull(prr.status,0) as "projectReportRecordStatus"
+		,ifnull(prrd.status,0) as "downProjectReportRecordStatus",
+        prrd.file_num as recodeNum,
+		prr.process_instance_id as prrProcessInstanceId,
+		prrd.process_instance_id as prrdProcessInstanceId
 		,prr.id as prrId
+		,prrd.id as prrdId
 		,prd.audit_pass_date as auditPassDate
 		,if(date_add(prd.audit_pass_date,interval #{endingCount} day) >now(),"0","1") as reportedType
 		,ifnull(rprr.report_status,0) as "reportStatus"
@@ -240,6 +243,7 @@
         LEFT JOIN sys_office o ON o.id = a.office_id
 		left join project_report_data prd on prd.project_id = a.id
 		left join rural_project_report_record prr on prr.report_id = prd.id
+		left join rural_project_report_record_down prrd on prrd.report_id = prd.id
 		<where>
 			a.status = 5
 			<if test="projectId != null and projectId != ''">
@@ -362,6 +366,7 @@
         </if>
 		left join project_report_data prd on prd.project_id = a.id
 		left join rural_project_report_record prr on prr.report_id = prd.id
+		left join rural_project_report_record_down prrd on prrd.report_id = prd.id
         <where>
             a.status = 5
             <if test="projectId != null and projectId != ''">

+ 141 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDownDao.xml

@@ -0,0 +1,141 @@
+<?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.ruralprojectrecords.dao.RuralProjectMessageDownDao">
+
+	<sql id="projectReportRecordColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.report_id AS "report.id",
+		a.company_id AS "companyId",
+		a.office_id AS "officeId",
+		a.record_num AS "recordNum",
+		a.file_num AS "fileNum",
+		a.file_num_tow AS "fileNumTow",
+		a.name AS "name",
+		a.record_date AS "recordDate",
+		a.accomplish_date AS "accomplishDate",
+		a.status AS "status",
+		a.number_count AS "numberCount",
+		a.process_instance_id AS "processInstanceId",
+		a.sign_cost_one AS "signCostOne.id",
+		a.sign_cost_two AS "signCostTwo.id",
+		u.name AS "createBy.name",
+		d.name AS "report.name",
+		d.number AS "report.number"
+	</sql>
+
+	<sql id="projectReportRecordJoins">
+		JOIN project_report_data d ON d.id = a.report_id
+		JOIN sys_user u ON u.id = a.create_by
+	</sql>
+
+
+	<select id="get" resultType="ProjectReportRecord">
+		SELECT
+		<include refid="projectReportRecordColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		d.report_date AS "report.reportDate",
+		r.project_name AS "projectName",
+		r.project_id AS "projectNum"
+		FROM rural_project_report_record_down a
+		<include refid="projectReportRecordJoins"/>
+		LEFT JOIN rural_project_records r ON r.id = d.project_id
+		LEFT JOIN work_contract_info wci on r.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		WHERE a.id = #{id}
+	</select>
+
+	<insert id="insert">
+		INSERT INTO rural_project_report_record_down(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			report_id,
+			company_id,
+			office_id,
+			record_num,
+			file_num,
+			file_num_tow,
+			name,
+			record_date,
+			status,
+			number_count,
+			sign_cost_one,
+			sign_cost_two,
+			process_instance_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{report.id},
+			#{companyId},
+			#{officeId},
+			#{recordNum},
+			#{fileNum},
+			#{fileNumTow},
+			#{name},
+			#{recordDate},
+			#{status},
+			#{numberCount},
+			#{signCostOne.id},
+			#{signCostTwo.id},
+			#{processInstanceId}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE rural_project_report_record_down SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			report_id = #{report.id},
+			company_id = #{companyId},
+			office_id = #{officeId},
+			record_num = #{recordNum},
+			file_num = #{fileNum},
+			file_num_tow= #{fileNumTow},
+			name = #{name},
+			record_date = #{recordDate},
+			accomplish_date = #{accomplishDate},
+			status = #{status},
+			number_count = #{numberCount},
+			sign_cost_one = #{signCostOne.id},
+			sign_cost_two = #{signCostTwo.id},
+			process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+
+	<update id="updateProcessInstanceId">
+		UPDATE rural_project_report_record_down SET
+		process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateStatus">
+		UPDATE rural_project_report_record_down SET
+		status = #{status}
+		WHERE id = #{id}
+	</update>
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM rural_project_report_record_down
+		WHERE id = #{id}
+	</update>
+</mapper>

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

@@ -167,6 +167,9 @@
 			<if test="attachmentFlag != null and attachmentFlag != ''">
 				AND attachment_flag = #{attachmentFlag}
 			</if>
+			<if test="divIdType != null and divIdType != ''">
+				AND div_id_type = #{divIdType}
+			</if>
 		</where>
 		<choose>
 			<when test="page !=null and page.orderBy != null and page.orderBy != ''">

+ 14 - 5
src/main/webapp/webpage/modules/projectAccessory/projectAccessoryRelation/projectAccessoryRelationList.jsp

@@ -176,7 +176,13 @@
 		 * 项目类别变更进行处理
 		 */
 		function projectSortChange() {
+			var attachmentProjectType = $("#attachmentProjectType").val()
 			var attachmentProjectSort = $("#attachmentProjectSort").val()
+			var attachmentProjectApprovalMoney = $("#attachmentProjectApprovalMoney").val()
+			//确定项目类型不能为空
+			if(undefined == attachmentProjectType || null == attachmentProjectType || "" == attachmentProjectType){
+				return;
+			}
 			if(undefined != attachmentProjectSort && null != attachmentProjectSort && "" != attachmentProjectSort){
 				$.ajax({
 					type:"post",
@@ -187,6 +193,9 @@
 						if(data.result == 0) {
 							document.getElementById("attachmentProjectApprovalMoney").disabled=false;
 							document.getElementById("attachmentProjectApprovalMoney").style="background-color:#FFFFFF";
+							if(undefined != attachmentProjectApprovalMoney && null != attachmentProjectApprovalMoney && "" != attachmentProjectApprovalMoney){
+								$("#searchForm").submit();
+							}
 						}else if(data.result == 1){
 							document.getElementById("attachmentProjectApprovalMoney").disabled=true;
 							document.getElementById("attachmentProjectApprovalMoney").style="background-color:#e2e2e2";
@@ -227,7 +236,7 @@
 						<div class="layui-item query athird ">
 							<label class="layui-form-label">项目类型:</label>
 							<div class="layui-input-block">
-								<form:select path="attachmentProjectType" class=" form-control  simple-select">
+								<form:select path="attachmentProjectType" class=" form-control  simple-select" onchange="projectSortChange()">
 									<form:option value="" label=""/>
 									<form:options items="${fns:getMainDictList('attachment_project_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
 								</form:select>
@@ -243,20 +252,20 @@
 							</div>
 						</div>
 
-						<div class="layui-item athird">
+						<%--<div class="layui-item athird">
 							<div class="input-group">
 								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
 								<button id="searchReset" class="fixed-btn searchReset fr" onclick="resetSearch()">重置</button>
 								<button id="searchQuery" class="fixed-btn searchQuery fr" onclick="search()">查询</button>
 							</div>
-						</div>
+						</div>--%>
 						<div style="    clear:both;"></div>
 					</div>
-					<div id="moresees" style="clear:both;display:none;" class="lw6">
+					<div id="moresees" style="clear:both;/*display:none;*/" class="lw6">
 						<div class="layui-item query athird ">
 							<label class="layui-form-label">送审金额:</label>
 							<div class="layui-input-block">
-								<form:select path="attachmentProjectApprovalMoney" class=" form-control  simple-select">
+								<form:select path="attachmentProjectApprovalMoney" class=" form-control  simple-select" onchange="projectSortChange()">
 									<form:option value="" label=""/>
 									<form:options items="${fns:getMainDictList('attachment_project_approval_money')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
 								</form:select>

+ 22 - 34
src/main/webapp/webpage/modules/projectcontentinfo/projectReportRecordAudit.jsp

@@ -4,6 +4,7 @@
 <head>
 	<title>合同归档管理</title>
 	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
 	<script type="text/javascript">
         var validateForm;
         function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
@@ -11,7 +12,7 @@
 			var fileNumTow =  $("#fileNumTow").val();
             if(validateForm.form()){
                 if(obj == 1){
-					if(fileNum == ''|| fileNum == undefined){
+					/*if(fileNum == ''|| fileNum == undefined){
 						top.layer.msg('填写案卷号!', {icon: 0});
 						return;
 					}
@@ -22,7 +23,7 @@
 					if(fileNum != fileNumTow){
 						top.layer.msg('两次案卷号填写不同,请重新输入!', {icon: 0});
 						return;
-					}
+					}*/
                     $('#flag').val('yes');
                 }else{
                     $('#flag').val('no');
@@ -79,7 +80,7 @@
 						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.number}"/>
 					</div>
 				</div>
-				<div class="layui-item layui-col-sm6">
+				<%--<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label"><span class="require-item">*</span>案卷号:</label>
 					<div class="layui-input-block">
 						<div class="input-group">
@@ -100,7 +101,7 @@
 					<div class="layui-input-block">
 						<input id="fileNumTow" name="fileNumTow" type="text"  class="layui-input form-control" equalTo="#fileNum"/>
 					</div>
-				</div>
+				</div>--%>
 				<%--<div class="layui-item layui-col-sm6">
 					<label class="layui-form-label">归档申请编号:</label>
 					<div class="layui-input-block">
@@ -304,7 +305,7 @@
 								</td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 									</div>
 								</td>
 							</tr>
@@ -357,7 +358,7 @@
 								</td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 									</div>
 								</td>
 							</tr>
@@ -368,13 +369,13 @@
 			</div>
 
 
-			<%--<div class="form-group layui-row">
-				<div class="form-group-label"><h2>附件信息列表</h2></div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>子项目附件信息栏</h2></div>
 
 				<div class="layui-item layui-col-xs12 form-table-container">
 					<table id="permissionTable" class="layui-table" lay-filter="permissionTable"></table>
 				</div>
-			</div>--%>
+			</div>
 
 			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
@@ -574,7 +575,7 @@
 		}
 	}
 </script>
-<%--<script>
+<script>
 	/*使用模块加载的方式 加载文件*/
 	layui.config({
 		base: '${ctx}/resoueces/css/layui/module/'
@@ -595,32 +596,19 @@
 				treeIdName: 'permissionId',//id字段的名称
 				treePidName: 'pid',//pid字段的名称
 				treeDefaultClose: false,//是否默认折叠
-				treeLinkage: true,//父级展开时是否自动展开所有子级
+				treeLinkage: false,//父级展开时是否自动展开所有子级
 				elem: '#permissionTable',
-				url: '${ctx}/projectAccessory/projectAccessory/getProjectAccessoryTreeData?projectId=${project.id}',
+				url: '${ctx}/subProject/subProject/getSubProjectTree?parentProId=${project.id}',
 				page: false,
 				cols: [[
 					{type: 'numbers', title: '编号' ,width:80},
-					{field: 'type', title: '电子件名称'},
-					{field: 'workAttachments',title: '附件',templet:function(d){
-							if(d.pid !='0'){
-								if(null == d.workAttachments || '' == d.workAttachments){
-									return "<span style=\"color:red\" title='无附件'>无附件</span>";
-								}else{
-									var html = '';
-									for (var x in d.workAttachments) {
-										html += "<div style='display:inline;float:left;'><a style='width:100px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;' class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览','"+d.workAttachments[x].url+"','90%','90%')\" title='"+d.workAttachments[x].attachmentName+"'>"+d.workAttachments[x].attachmentName+"</a></div>"
-										if(x != d.workAttachments.length-1){
-											html += "<div style='display:inline;float:left;'> ; </div>";
-										}
-									}
-									return html;
-								}
-							}else{
-								return "";
-							}
+					{field: 'projectName', title: '子项目名称/附件类型'},
+					{field: 'attachName',align:'center', title: '附件名称',templet:function(d){
+							var html = '';
+							html += "<div><a class=\"attention-info\" href=\"javascript:void(0)\" onclick=\"preview('预览','"+d.attachUrl+"','90%','90%')\" title='"+d.attachName+"'>"+d.attachName+"</a></div>"
+							return html;
 						}},
-					{templet: complain, title: '附件管理',width:80}
+					{templet: complain ,align:'center', title: '操作',width:150}
 				]],
 				done: function () {
 					layer.closeAll('loading');
@@ -645,9 +633,9 @@
 
 
 		function complain(d){//操作中显示的内容
-			if(d.pid !=0){
+			if(undefined != d.attachUrl && null != d.attachUrl && '' != d.attachUrl){
 				return [
-					'<a href="javascript:void(0)"  onclick="openBill2(\'附件详情\', \'${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId='+d.id+'&projectId='+d.projectId+'\',\'70%\',\'80%\',false,\'inputForm\')" class="op-btn op-btn-edit" ><i class="fa fa-search-plus"></i> 详情</a>',
+						'<a href="${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(d.attachUrl)+'" class="op-btn op-btn-download">下  载</a>',
 				].join('');
 			}else{
 				return[''].join('');
@@ -727,6 +715,6 @@
 			});
 		}
 	}
-</script>--%>
+</script>
 </body>
 </html>

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

@@ -387,7 +387,7 @@
 								</td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileGistdata.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','gistdata_upTable')" 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=${fileGistdata.id}&projectId=${project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 									</div>
 								</td>
 							</tr>
@@ -438,7 +438,7 @@
 								</td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileOther.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','upTable_other')" 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=${fileOther.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 									</div>
 								</td>
 							</tr>

+ 71 - 9
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp

@@ -402,7 +402,7 @@
 						return "<a class=\"attention-info\" title=\""+d.contract+"\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看合同信息', '${ctx}/workcontractinfo/workContractInfo/lookForm?id=" + d.contractId + "','95%', '95%')\">" + d.contract + "</a>";
 					}}
                 ,{field:'recodeNum', align:'center',title: '案卷号',minWidth:200,templet:function(d){
-                        return "<a class=\"attention-info\" title=\"" + d.contract + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecord?reportId=" + d.id + "&view=view','95%', '95%')\">" + d.recodeNum + "</a>";
+                        return "<a class=\"attention-info\" title=\"" + d.contract + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/view?id=" + d.prrdId + "&view=view','95%', '95%')\">" + d.recodeNum + "</a>";
 
 					}}
                 ,{field:'projMaster', align:'center',title: '负责人', width:65,templet:function(d){
@@ -421,7 +421,7 @@
                             var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
-                ,{align:'center', title: '归档状态',  width:70,templet:function(d){
+                ,{align:'center', title: '线上归档状态',  width:70,templet:function(d){
                         var st = getRuralProjectArchiveState(d.projectReportRecordStatus);
                         if(st.action)
                             var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
@@ -429,6 +429,14 @@
                             var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
+				,{align:'center', title: '线下归档状态',  width:70,templet:function(d){
+						var st = getRuralProjectArchiveState(d.downProjectReportRecordStatus);
+						if(st.action)
+							var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrdProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+						return xml;
+					}}
 				,{align:'center', title: '上报状态',  width:90,templet:function(d){
 						var st = getReportedState(d.reportedState);
 						if(st.action)
@@ -437,7 +445,7 @@
 							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
 						return xml;
 					}}
-                ,{field:'op',align:'center',title:"操作", fixed: 'right',width:250,templet:function(d){
+                ,{field:'op',align:'center',title:"操作", fixed: 'right',width:350,templet:function(d){
                         ////对操作进行初始化
                         var xml="";
                         if(d.canAdd != undefined && d.canAdd =="1")
@@ -475,31 +483,56 @@
 							xml+="<a href=\"#\" style='background-color: #FFB800' onclick=\"openDialogre('下载模板', '${ctx}/ruralProject/ruralProjectMessage/skipDownloadFtl?id=" + d.id +"','35%', '35%','','下载,关闭')\" class=\"op-btn\" > 下载模板</a>";
 							if(d.recordAdd != undefined && d.recordAdd =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 线上归档</a>";
 							}
 							if(d.recordedit1 != undefined && d.recordedit1 =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordedit2 != undefined && d.recordedit2 =="1")
 							{
 								//驳回操作
-								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordrecall != undefined && d.recordrecall =="1")
 							{
 								//撤回操作
-								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordcancel != undefined && d.recordcancel =="1")
 							{
-								xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该报告归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回归档</a>";
+								xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该报告线上归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回线上归档</a>";
 							}
                         }
 
+						/*线下归档相关按钮*/
+						if(d.projectReportStatus == 5){
+							if(d.downRecordAdd != undefined && d.downRecordAdd =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('新增线下归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecord?reportId=" + d.id +"&flag=2','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 线下归档</a>";
+							}
+							if(d.downRecordedit1 != undefined && d.downRecordedit1 =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId +"&flag=2','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordedit2 != undefined && d.downRecordedit2 =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId + "&view=modify&flag=2','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordrecall != undefined && d.downRecordrecall =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId + "&flag=2','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordcancel != undefined && d.downRecordcancel =="1")
+							{
+								xml+="<a href=\"${ctx}/ruralProject/ruralProjectDownMessage/cancelInvalidate?id=" + d.prrdId + "&flag=2&processInstanceId=" + d.prrdProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该线下报告归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回线下归档</a>";
+							}
+						}
+
+
 						/*上报相关按钮*/
 						if(d.projectReportRecordStatus == 5 || d.projectReportStatus == 5){
 							if(d.syncStatus == 0){
@@ -565,6 +598,9 @@
 					,"view":"${projectRecords.view}"
 					,"reportStatus":"${projectRecords.reportStatus}"
 					,"syncStatus":"${projectRecords.syncStatus}"
+					,"downProjectReportRecordStatus":"${projectRecords.downProjectReportRecordStatus}"
+					,"prrdProcessInstanceId":"${projectRecords.prrdProcessInstanceId}"
+					,"prrdId":"${projectRecords.prrdId}"
                     <c:choose>
                         <c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">
                             ,"canAdd":<c:choose>
@@ -610,7 +646,33 @@
                                 <c:when test="${projectRecords.projectReportRecordStatus == 2 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id == projectRecords.createBy.id)}">"1"</c:when>
                             <c:otherwise>"0"</c:otherwise>
                             </c:choose>
-                            ,"reportedAdd":<c:choose>
+
+
+					<%-- 线下归档状态 --%>
+					,"downRecordAdd":<c:choose>
+							<c:when test="${projectRecords.downProjectReportRecordStatus == 0 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"downRecordedit1":<c:choose>
+							<c:when test="${projectRecords.downProjectReportRecordStatus == 1 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"downRecordedit2":<c:choose>
+							<c:when test="${projectRecords.downProjectReportRecordStatus == 4 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"downRecordrecall":<c:choose>
+							<c:when test="${projectRecords.downProjectReportRecordStatus == 3 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"downRecordcancel":<c:choose>
+							<c:when test="${projectRecords.downProjectReportRecordStatus == 2 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+
+
+
+					,"reportedAdd":<c:choose>
                                 <c:when test="${(projectRecords.reportedState == 0 || projectRecords.reportedState == 6) && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id == projectRecords.createBy.id)}">"1"</c:when>
                             <c:otherwise>"0"</c:otherwise>
                             </c:choose>

+ 3 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectRecordsView.jsp

@@ -76,6 +76,9 @@
 		<ul class="list-tabs" >
 			<li class="active"><a href="${ctx}/ruralProject/ruralProjectRecords/view?id=${projectRecords.id}">项目详情</a></li>
 			<li><a href="${ctx}/subProject/subProject/list?parentProId=${projectRecords.id}&projectType=${projectRecords.projectType}">子项目列表</a></li>
+			<c:if test="${not empty projectId}">
+				<li><a href="${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=${projectId}&view=view">项目线上归档信息</a></li>
+			</c:if>
 		</ul>
 	</div>
 	<div class="container view-form">

+ 240 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownAudit.jsp

@@ -0,0 +1,240 @@
+<%@ 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">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+        	var fileNum =  $("#fileNum").val();
+			var fileNumTow =  $("#fileNumTow").val();
+            if(validateForm.form()){
+                if(obj == 1){
+					if(fileNum == ''|| fileNum == undefined){
+						top.layer.msg('填写案卷号!', {icon: 0});
+						return;
+					}
+					if(fileNumTow == ''|| fileNumTow == undefined){
+						top.layer.msg('请再次填写案卷号!', {icon: 0});
+						return;
+					}
+					if(fileNum != fileNumTow){
+						top.layer.msg('两次案卷号填写不同,请重新输入!', {icon: 0});
+						return;
+					}
+                    $('#flag').val('yes');
+                }else{
+                    $('#flag').val('no');
+                }
+                $("#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);
+                    }
+                }
+            });
+        });
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" action="${ctx}/ruralProject/ruralProjectDownMessage/auditSave" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="type"/>
+		<form:hidden path="home"/>
+		<form:hidden path="numberCount"/>
+		<form:hidden id="reportId" path="report.id"/>
+		<form:hidden path="createBy.id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<sys:message content="${message}"/>
+			<div class="form-group layui-row first lw9">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">报告号:</label>
+					<div class="layui-input-block with-icon">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.number}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>案卷号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" id="fileNum" name="fileNum"  class="form-control layui-input" value="${projectReportRecord.fileNum}"/>
+							<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_state', '')}
+										</c:when>
+										<c:otherwise>新添</c:otherwise>
+									</c:choose></label>
+							 </span>
+						</div>
+					</div>
+				</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="fileNumTow" name="fileNumTow" type="text"  class="layui-input form-control" equalTo="#fileNum"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">报告日期:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.contractNum}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.contractName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.clientName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.projectNum}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档申请人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.createBy.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">提交归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档完成日期:</label>
+					<div class="layui-input-block">
+						<input id="accomplishDate" name="accomplishDate"  htmlEscape="false" readonly="true" class="form-control  layui-input"
+							   value="<fmt:formatDate value="${projectReportRecord.accomplishDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">说明:</label>
+					<div class="layui-input-block">
+						<textarea path="remarks" htmlEscape="false" readonly="true" rows="3" maxlength="255" class="form-control" >${projectReportRecord.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectReportRecord.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<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}">
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+											</c:when>
+											<c:otherwise>
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批意见</h2></div>
+				<div class="layui-item layui-col-xs12 with-textarea" >
+					<label class="layui-form-label">审批意见:</label>
+					<div class="layui-input-block">
+						<form:textarea path="act.comment" class="form-control" rows="4" maxlength="127" />
+						<input type="file" name="upload_files" style="display: none;">
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectReportRecord.act.procInsId}"/>
+					<act:histoicFlow procInsId="${projectReportRecord.act.procInsId}"/>
+				</div>
+			</div>
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 236 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownForm.jsp

@@ -0,0 +1,236 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<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 doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var leng = $("#file_attachment tr").length;
+				if(leng == 0){
+					parent.layer.msg("请添加附件信息!", {icon: 0});
+					return ;
+				}
+
+				if(obj == 2){
+					$("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectDownMessage/holdSaveRecord");
+				}else{
+					$("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectDownMessage/saveRecord");
+				}
+				$("#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();
+            });
+
+        });
+        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 = "attachment-file/workContractRd/"+timestamp+"/"+file['name'];
+            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);}
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.id"/>
+			<form:hidden path="report.name"/>
+			<form:hidden path="report.project.id"/>
+			<form:hidden path="flag"/>
+
+			<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">报告号:</label>
+					<div class="layui-input-block">
+						<form:input id="reportNumber" path="report.number" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">报告日期:</label>
+					<div class="layui-input-block">
+						<input id="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同编号:</label>
+					<div class="layui-input-block">
+						<input id="contractNum" name="contractNum"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.report.project.workContractInfo.contractNum}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<input id="contractName" name="contractName"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.report.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<input id="clientName" name="clientName"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${workClientInfoName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<input id="projectNum" name="projectNum"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.report.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input id="projectName" name="projectName"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="${projectReportRecord.report.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档申请人:</label>
+					<div class="layui-input-block">
+						<form:input id="cBName" path="createBy.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">提交归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date layui-input laydate-icon"
+							   value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">说明:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" htmlEscape="false" rows="4" maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2><span class="require-item">*</span>附件信息</h2></div>
+				<div class="layui-item nav-btns">
+					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+				</div>
+				<div id="addFile_attachment" style="display: none" class="upload-progress">
+					<span id="fileName_attachment" ></span>
+					<b><span id="baifenbi_attachment" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectReportRecord.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<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}">
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+											</c:when>
+											<c:otherwise>
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+										<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+											<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+										</c:if>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 264 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownModify.jsp

@@ -0,0 +1,264 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<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 doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var projectId = '${project.id}';
+				var leng = $("#file_attachment tr").length;
+				var boolFlag = true;
+				if(leng == 0){
+					parent.layer.msg("请添加附件信息!", {icon: 0});
+					return ;
+				}
+
+				$("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectDownMessage/saveRecord");
+				$("#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();
+            });
+
+        });
+        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 = "attachment-file/workContractRd/"+timestamp+"/"+file['name'];
+            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 setValuee(obj){
+            $("#reportId").val(obj.id);
+            $("#reportnumber").val(obj.number);
+            $("#reportName").val(obj.name);
+            $("#reportDate").val(obj.reportDate);
+            $("#contractNum").val(obj.contractNum);
+            $("#contractName").val(obj.contractName);
+            $("#clientName").val(obj.clientName);
+            $("#projectName").val(obj.projectName);
+            $("#projectNum").val(obj.projectNum);
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontentinfo/projectReportRecord/getNumber',
+                data:{
+                    "reportId":obj.id
+                },
+                success:function(data){
+                    var numberCount = data.numberCount;
+                    $("#recordNum").val(obj.number+"-"+numberCount);
+                    $("#numberCount").val(numberCount);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="view"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.id"/>
+			<form:hidden path="report.name"/>
+			<form:hidden path="report.project.id"/>
+			<form:hidden path="flag"/>
+			<input type="hidden" name="saveAuditFlag" value="1">
+			<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">报告号:</label>
+					<div class="layui-input-block">
+						<form:input id="reportNumber" path="report.number" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">报告日期:</label>
+					<div class="layui-input-block">
+						<input id="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同编号:</label>
+					<div class="layui-input-block">
+						<form:input id="contractNum" path="contractNum" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id="contractName" path="contractName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id="clientName" path="clientName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id="projectNum" path="projectNum" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id="projectName" path="projectName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档申请人:</label>
+					<div class="layui-input-block">
+						<form:input id="cBName" path="createBy.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">说明:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"    class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2><span class="require-item">*</span>附件信息</h2></div>
+				<div class="layui-item nav-btns">
+					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+				</div>
+				<div id="addFile_attachment" style="display: none" class="upload-progress">
+					<span id="fileName_attachment" ></span>
+					<b><span id="baifenbi_attachment" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectReportRecord.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<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}">
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+											</c:when>
+											<c:otherwise>
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+										<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+											<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+										</c:if>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectReportRecord.processInstanceId}"/>
+					<act:histoicFlow procInsId="${projectReportRecord.processInstanceId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 247 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownModifyApply.jsp

@@ -0,0 +1,247 @@
+<%@ 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">
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var projectId = '${project.id}';
+				var leng = $("#file_attachment tr").length;
+				var boolFlag = true;
+				if(leng == 0){
+					parent.layer.msg("请添加附件信息!", {icon: 0});
+					return ;
+				}
+				$("#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();
+            });
+
+        });
+        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 = "attachment-file/workContractRd/"+timestamp+"/"+file['name'];
+            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 setValuee(obj){
+            $("#reportId").val(obj.id);
+            $("#type").val(obj.type);
+            $("#reportnumber").val(obj.number);
+            $("#reportName").val(obj.name);
+            $("#reportDate").val(obj.reportDate);
+            $("#contractNum").val(obj.contractNum);
+            $("#contractName").val(obj.contractName);
+            $("#clientName").val(obj.clientName);
+            $("#projectName").val(obj.projectName);
+            $("#projectNum").val(obj.projectNum);
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontentinfo/projectReportRecord/getNumber',
+                data:{
+                    "reportId":obj.number
+                },
+                success:function(data){
+                    var numberCount = data.numberCount;
+                    $("#recordNum").val(obj.number+"-"+numberCount);
+                    $("#numberCount").val(numberCount);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" action="${ctx}/ruralProject/ruralProjectDownMessage/auditSave" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="type"/>
+			<form:hidden path="home"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.id"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="report.name"/>
+
+			<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">报告号:</label>
+					<div class="layui-input-block">
+						<form:input id="reportNumber" path="report.number" htmlEscape="false"   readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">报告日期:</label>
+					<div class="layui-input-block">
+						<input id="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同编号:</label>
+					<div class="layui-input-block">
+						<form:input id="contractNum" path="contractNum" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id="contractName" path="contractName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id="clientName" path="clientName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id="projectNum" path="projectNum" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id="projectName" path="projectName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档申请人:</label>
+					<div class="layui-input-block">
+						<form:input id="cBName" path="createBy.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">说明:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" htmlEscape="false" rows="4" maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2><span class="require-item">*</span>附件信息</h2></div>
+				<div class="layui-item nav-btns">
+					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+				</div>
+				<div id="addFile_attachment" style="display: none" class="upload-progress">
+					<span id="fileName_attachment" ></span>
+					<b><span id="baifenbi_attachment" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectReportRecord.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<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}">
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+											</c:when>
+											<c:otherwise>
+												<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+										<c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+											<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+										</c:if>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectReportRecord.act.procInsId}"/>
+					<act:histoicFlow procInsId="${projectReportRecord.act.procInsId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 179 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/down/projectReportRecordDownView.jsp

@@ -0,0 +1,179 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<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">
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container view-form">
+		<div class="form-group layui-row first lw9">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">报告号:</label>
+				<div class="layui-input-block with-icon">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.number}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">案卷号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.fileNum}"/>
+						<span class="input-group-btn">
+								<label class="form-status">
+									<c:choose>
+										<c:when test="${not empty projectReportRecord.status}">${fns:getDictLabel(projectReportRecord.status, 'audit_record_state', '')}
+										</c:when>
+										<c:otherwise>新添</c:otherwise>
+									</c:choose></label>
+							 </span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">确认案卷号:</label>
+				<div class="layui-input-block">
+					<input id="fileNumTow" name="fileNumTow" readonly="true" type="text"  class="layui-input form-control" equalTo="#fileNum" value="${projectReportRecord.fileNumTow}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">报告日期:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">合同编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.contractNum}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.contractName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.clientName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.projectNum}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">归档申请人:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.createBy.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">提交归档时间:</label>
+				<div class="layui-input-block">
+					<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">归档完成日期:</label>
+				<div class="layui-input-block">
+					<input id="accomplishDate" name="accomplishDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.accomplishDate}" pattern="yyyy-MM-dd"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12  with-textarea">
+				<label class="layui-form-label">说明:</label>
+				<div class="layui-input-block">
+					<textarea path="remarks" htmlEscape="false" readonly="true" rows="3" maxlength="20" class="form-control" >${projectReportRecord.remarks}</textarea>
+				</div>
+			</div>
+		</div>
+
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>附件信息</h2></div>
+			<span id="attachment_title"></span>
+			<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+				<table id="upTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<%-- <th>序号</th>--%>
+						<th>文件预览</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="150px">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+					<c:forEach items="${projectReportRecord.workAttachments}" var = "workClientAttachment" varStatus="status">
+						<tr>
+								<%-- <td>${status.index + 1}</td>--%>
+							<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}">
+								</c:when>
+								<c:otherwise>
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+											<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+										</c:when>
+										<c:otherwise>
+											<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+										</c:otherwise>
+									</c:choose>
+								</c:otherwise>
+							</c:choose>
+							<td>${workClientAttachment.createBy.name}</td>
+							<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+							<td class="op-td">
+								<div class="op-btn-box" >
+									<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+								</div>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+			<div class="form-group layui-row page-end"></div>
+	</div>
+</div>
+</body>
+</html>

+ 13 - 4
src/main/webapp/webpage/modules/ruralprojectrecords/projectReportRecord/projectReportRecordView.jsp

@@ -29,6 +29,15 @@
 </head>
 <body>
 <div class="single-form">
+	<div class="list-form-tab contentShadow shadowLTR" id="tabDiv">
+		<ul class="list-tabs" >
+			<li><a href="${ctx}/ruralProject/ruralProjectRecords/view?id=${project.id}">项目详情</a></li>
+			<li><a href="${ctx}/subProject/subProject/list?parentProId=${project.id}&projectType=${project.projectType}">子项目列表</a></li>
+			<c:if test="${not empty project.id}">
+				<li class="active"><a href="${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=${project.id}&view=view">项目线上归档信息</a></li>
+			</c:if>
+		</ul>
+	</div>
 	<div class="container view-form">
 		<div class="form-group layui-row first lw9">
 			<div class="form-group-label"><h2>基本信息</h2></div>
@@ -38,7 +47,7 @@
 					<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectReportRecord.report.number}"/>
 				</div>
 			</div>
-			<div class="layui-item layui-col-sm6">
+			<%--<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">案卷号:</label>
 				<div class="layui-input-block">
 					<div class="input-group">
@@ -59,7 +68,7 @@
 				<div class="layui-input-block">
 					<input id="fileNumTow" name="fileNumTow" readonly="true" type="text"  class="layui-input form-control" equalTo="#fileNum" value="${projectReportRecord.fileNumTow}"/>
 				</div>
-			</div>
+			</div>--%>
 			<%--<div class="layui-item layui-col-sm6">
 				<label class="layui-form-label">签字造价师一:</label>
 				<div class="layui-input-block">
@@ -247,7 +256,7 @@
 							</td>
 							<td class="op-td">
 								<div class="op-btn-box" >
-									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 								</div>
 							</td>
 						</tr>
@@ -297,7 +306,7 @@
 							</td>
 							<td class="op-td">
 								<div class="op-btn-box" >
-									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 								</div>
 							</td>
 						</tr>

+ 3 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsView.jsp

@@ -76,6 +76,9 @@
 		<ul class="list-tabs" >
 			<li class="active"><a href="${ctx}/ruralProject/ruralProjectRecords/view?id=${projectRecords.id}">项目详情</a></li>
 			<li><a href="${ctx}/subProject/subProject/list?parentProId=${projectRecords.id}&projectType=${projectRecords.projectType}">子项目列表</a></li>
+			<c:if test="${not empty projectId}">
+				<li><a href="${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=${projectId}&view=view">项目线上归档信息</a></li>
+			</c:if>
 		</ul>
 	</div>
 	<div class="container view-form">

+ 3 - 3
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportView.jsp

@@ -136,7 +136,7 @@
 							</td>
 							<td class="op-td">
 								<div class="op-btn-box" >
-									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileAttachment.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileAttachment.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 								</div>
 							</td>
 						</tr>
@@ -183,7 +183,7 @@
 							</td>
 							<td class="op-td">
 								<div class="op-btn-box" >
-									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileGistdata.id}&projectId=${project.id}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 								</div>
 							</td>
 						</tr>
@@ -230,7 +230,7 @@
 							</td>
 							<td class="op-td">
 								<div class="op-btn-box" >
-									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${projectcontentinfo.project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentView?attachmentId=${fileOther.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
 								</div>
 							</td>
 						</tr>

+ 69 - 8
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp

@@ -402,7 +402,7 @@
 						return "<a class=\"attention-info\" title=\""+d.contract+"\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看合同信息', '${ctx}/workcontractinfo/workContractInfo/lookForm?id=" + d.contractId + "','95%', '95%')\">" + d.contract + "</a>";
 					}}
                 ,{field:'recodeNum', align:'center',title: '案卷号',minWidth:200,templet:function(d){
-                        return "<a class=\"attention-info\" title=\"" + d.recodeNum + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=" + d.id + "&view=view','95%', '95%')\">" + d.recodeNum + "</a>";
+                        return "<a class=\"attention-info\" title=\"" + d.recodeNum + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/view?id=" + d.prrdId + "&view=view','95%', '95%')\">" + d.recodeNum + "</a>";
 
 					}}
                 ,{field:'projMaster', align:'center',title: '负责人', width:65,templet:function(d){
@@ -421,7 +421,7 @@
                             var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
-                ,{align:'center', title: '归档状态',  width:70,templet:function(d){
+                ,{align:'center', title: '线上归档状态',  width:70,templet:function(d){
                         var st = getRuralProjectArchiveState(d.projectReportRecordStatus);
                         if(st.action)
                             var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
@@ -429,6 +429,14 @@
                             var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
+                ,{align:'center', title: '线下归档状态',  width:70,templet:function(d){
+                        var st = getRuralProjectArchiveState(d.downProjectReportRecordStatus);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrdProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
                 ,{align:'center', title: '上报状态',  width:90,templet:function(d){
                         var st = getReportedState(d.reportedState);
                         if(st.action)
@@ -437,7 +445,7 @@
                             var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
-                ,{field:'op',align:'center',title:"操作", fixed: 'right',width:250,templet:function(d){
+                ,{field:'op',align:'center',title:"操作", fixed: 'right',width:350,templet:function(d){
                         ////对操作进行初始化
                         var xml="";
                         if(d.canAdd != undefined && d.canAdd =="1")
@@ -477,28 +485,54 @@
 							xml+="<a href=\"#\" style='background-color: #FFB800' onclick=\"openDialogre('下载模板', '${ctx}/ruralProject/ruralProjectMessage/skipDownloadFtl?id=" + d.id +"','35%', '35%','','下载,关闭')\" class=\"op-btn\" > 下载模板</a>";
 							if(d.recordAdd != undefined && d.recordAdd =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 线上归档</a>";
 							}
 							if(d.recordedit1 != undefined && d.recordedit1 =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordedit2 != undefined && d.recordedit2 =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordrecall != undefined && d.recordrecall =="1")
 							{
-								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 重新归档</a>";
+								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线上重新归档</a>";
 								/*xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteRecord?reportId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目归档信息吗?', this.href)\" class=\"op-btn op-btn-delete\" ><i class=\"fa fa-trash\"></i> 删除归档</a>";*/
 							}
 							if(d.recordcancel != undefined && d.recordcancel =="1")
 							{
-								xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该报告归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回归档</a>";
+								xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该线上报告归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回线上归档</a>";
 							}
                         }
+
+						/*线下归档相关按钮*/
+						if(d.projectReportStatus == 5){
+							if(d.downRecordAdd != undefined && d.downRecordAdd =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('新增线下归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecord?reportId=" + d.id +"&flag=1','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn layui-bg-green\" ><i class=\"fa fa-plus\"></i> 线下归档</a>";
+							}
+							if(d.downRecordedit1 != undefined && d.downRecordedit1 =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId +"&flag=1','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordedit2 != undefined && d.downRecordedit2 =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId + "&view=modify&flag=1','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordrecall != undefined && d.downRecordrecall =="1")
+							{
+								xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectDownMessage/formRecordModify?id=" + d.prrdId + "&flag=1','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 线下重新归档</a>";
+							}
+							if(d.downRecordcancel != undefined && d.downRecordcancel =="1")
+							{
+								xml+="<a href=\"${ctx}/ruralProject/ruralProjectDownMessage/cancelInvalidate?id=" + d.prrdId + "&flag=1&processInstanceId=" + d.prrdProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该线下报告归档审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回线下归档</a>";
+							}
+                        }
+
+
 						/*上报相关按钮*/
 						if(d.projectReportRecordStatus == 5 || d.projectReportStatus == 5){
 							if(d.syncStatus == 0){
@@ -554,9 +588,12 @@
                     ,"createDate":"<fmt:formatDate value="${projectRecords.createDate}" pattern="yyyy-MM-dd"/>"
                     ,"projectReportStatus":"${projectRecords.projectReportStatus}"
                     ,"projectReportRecordStatus":"${projectRecords.projectReportRecordStatus}"
+                    ,"downProjectReportRecordStatus":"${projectRecords.downProjectReportRecordStatus}"
                     ,"prrProcessInstanceId":"${projectRecords.prrProcessInstanceId}"
+                    ,"prrdProcessInstanceId":"${projectRecords.prrdProcessInstanceId}"
                     ,"reportedProcessInstanceId":"${projectRecords.reportedProcessInstanceId}"
                     ,"prrId":"${projectRecords.prrId}"
+                    ,"prrdId":"${projectRecords.prrdId}"
                     ,"procId":"${projectRecords.processInstanceId}"
                     ,"projectReportName":"${projectRecords.projectReportName}"
                     ,"reportedState":"${projectRecords.reportedState}"
@@ -609,6 +646,30 @@
                                 <c:when test="${projectRecords.projectReportRecordStatus == 2 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
                             <c:otherwise>"0"</c:otherwise>
                             </c:choose>
+
+                            <%-- 线下归档状态 --%>
+                            ,"downRecordAdd":<c:choose>
+                                <c:when test="${projectRecords.downProjectReportRecordStatus == 0 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+                                <c:otherwise>"0"</c:otherwise>
+                            </c:choose>
+                            ,"downRecordedit1":<c:choose>
+                                <c:when test="${projectRecords.downProjectReportRecordStatus == 1 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+                                <c:otherwise>"0"</c:otherwise>
+                            </c:choose>
+                            ,"downRecordedit2":<c:choose>
+                                <c:when test="${projectRecords.downProjectReportRecordStatus == 4 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+                                <c:otherwise>"0"</c:otherwise>
+                            </c:choose>
+                            ,"downRecordrecall":<c:choose>
+                                <c:when test="${projectRecords.downProjectReportRecordStatus == 3 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+                                <c:otherwise>"0"</c:otherwise>
+                            </c:choose>
+                            ,"downRecordcancel":<c:choose>
+                                <c:when test="${projectRecords.downProjectReportRecordStatus == 2 && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id)}">"1"</c:when>
+                            <c:otherwise>"0"</c:otherwise>
+                            </c:choose>
+
+
 							,"reportedAdd":<c:choose>
 									<c:when test="${(projectRecords.reportedState == 0 || projectRecords.reportedState == 6) && (fns:getUser().id == projectRecords.leaderIds || fns:getUser().id == projectRecords.createBy.id)}">"1"</c:when>
 							<c:otherwise>"0"</c:otherwise>

+ 3 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/subProjectInfo/subProjectInfoList.jsp

@@ -219,6 +219,9 @@
 		<ul class="list-tabs" >
 			<li><a href="${ctx}/ruralProject/ruralProjectRecords/view?id=${subProjectInfo.parentProId}">项目详情</a></li>
 			<li class="active"><a href="${ctx}/subProject/subProject/list?parentProId=${subProjectInfo.parentProId}&projectType=${subProjectInfo.projectType}">子项目列表</a></li>
+			<c:if test="${not empty projectId}">
+				<li><a href="${ctx}/ruralProject/ruralProjectMessage/formRecord?reportId=${projectId}&view=view">项目线上归档信息</a></li>
+			</c:if>
 		</ul>
 	</div>
 	<sys:message content="${message}"/>