Browse Source

报告审核

user5 5 năm trước cách đây
mục cha
commit
7d1f815735

+ 14 - 15
src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportDataService.java

@@ -3,27 +3,22 @@
  */
 package com.jeeplus.modules.projectcontentinfo.service;
 
-import java.awt.*;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.*;
-import java.util.List;
-
 import com.google.common.collect.Maps;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.oss.OSSClientUtil;
+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.WordToPic;
-import com.jeeplus.common.websocket.onchat.ChatServerPool;
 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.dao.ProjectBasedDataDao;
 import com.jeeplus.modules.projectcontentinfo.dao.ProjectContentDataDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
-import com.jeeplus.modules.projectreportnum.entity.ReportNum;
 import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectReportData;
 import com.jeeplus.modules.serialnum.service.SerialNumTplService;
@@ -50,15 +45,15 @@ import org.activiti.engine.*;
 import org.activiti.engine.history.HistoricProcessInstance;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Task;
-import org.java_websocket.WebSocket;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.jeeplus.common.persistence.Page;
-import com.jeeplus.common.service.CrudService;
-import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
-import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
+import java.awt.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.*;
+import java.util.List;
 
 /**
  * 报告详情Service
@@ -237,11 +232,15 @@ public class ProjectReportDataService extends CrudService<ProjectReportDataDao,
 		projectReportData.setPage(page);
 		projectReportData.getSqlMap().put("dsf", dataScopeFilter(projectReportData.getCurrentUser(), "o", "u","s", MenuStatusEnum.PROJECT_REPORTDATA.getValue()));
 		List<ProjectReportData> projectReportDatas = dao.findInfoListByStatus(projectReportData);
+		List<ProjectReportData> projectReportDataList = new ArrayList<>();
 		for (ProjectReportData reportData:projectReportDatas){
 			String projectMaster = projectRecordsService.getMasterStr(reportData.getProject().getId());
 			reportData.setProjectMaster(projectMaster);
+			if (null != projectMaster){
+				projectReportDataList.add(reportData);
+			}
 		}
-		page.setList(projectReportDatas);
+		page.setList(projectReportDataList);
 		return page;
 	}
 

+ 4 - 8
src/main/java/com/jeeplus/modules/projectrecord/service/ProjectRecordsService.java

@@ -10,7 +10,6 @@ import com.jeeplus.common.utils.Collections3;
 import com.jeeplus.common.utils.DateUtils;
 import com.jeeplus.common.utils.IdGen;
 import com.jeeplus.common.utils.MenuStatusEnum;
-import com.jeeplus.common.websocket.onchat.ChatServerPool;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.act.utils.ProcessDefCache;
@@ -20,13 +19,12 @@ import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
 import com.jeeplus.modules.projectrecord.dao.ProjectClientLinkmanDao;
 import com.jeeplus.modules.projectrecord.dao.ProjectRecordsDao;
+import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.projectrecord.enums.ProjectStatusEnum;
 import com.jeeplus.modules.serialnum.service.SerialNumTplService;
-import com.jeeplus.modules.sys.entity.Dict;
 import com.jeeplus.modules.sys.entity.Office;
 import com.jeeplus.modules.sys.entity.User;
-import com.jeeplus.modules.sys.service.DictService;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
@@ -38,7 +36,6 @@ 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.workclientinfo.dao.WorkClientAttachmentDao;
-import com.jeeplus.modules.workclientinfo.dao.WorkClientInfoDao;
 import com.jeeplus.modules.workclientinfo.dao.WorkClientLinkmanDao;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
@@ -50,8 +47,6 @@ import com.jeeplus.modules.workcontractinfo.service.WorkContractInfoService;
 import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
 import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
-import com.jeeplus.modules.projectrecord.dao.WorkProjectUserDao;
-import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.IdentityService;
 import org.activiti.engine.RuntimeService;
@@ -59,8 +54,6 @@ import org.activiti.engine.history.HistoricTaskInstance;
 import org.activiti.engine.history.HistoricTaskInstanceQuery;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.apache.commons.lang3.StringUtils;
-import org.java_websocket.WebSocket;
-import org.openxmlformats.schemas.drawingml.x2006.main.CTOfficeArtExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -139,6 +132,9 @@ public class ProjectRecordsService extends CrudService<ProjectRecordsDao, Projec
 	}
 	public String getMasterStr(String id) {
 		ProjectRecords projectRecords = super.get(id);
+		if(null == projectRecords){
+			return null;
+		}
 		List<User> users = workProjectUserDao.queryProjectUsers(projectRecords.getId(), "1");
 		return Collections3.extractToString(users, "name", ",");
 	}

+ 9 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectMessageDao.java

@@ -8,6 +8,7 @@ import com.jeeplus.common.persistence.annotation.MyBatisDao;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectReportData;
 
 import java.util.List;
 
@@ -24,6 +25,8 @@ public interface RuralProjectMessageDao extends CrudDao<RuralProjectRecords> {
 
     void updateSelectiveById(RuralProjectRecords projectRecords);
 
+    void updateRuralProjectReportDataById(RuralProjectReportData ruralProjectReportData);
+
     List<RuralProjectRecords> findListByStatus(RuralProjectRecords projectRecords);
 
     void updateSelectiveByProjectId(RuralProjectRecords records);
@@ -37,4 +40,10 @@ public interface RuralProjectMessageDao extends CrudDao<RuralProjectRecords> {
     ProjectRecords getRuralProjectRecords(String id);
 
     ProjectReportData getProjectReportDateByProjectId(String projectId);
+
+    ProjectReportData getRuralProjectReportData(String projectId);
+
+    int updateRuralProjectReportData(ProjectReportData projectReportData);
+
+    int updateFileStatus(ProjectReportData projectReportData);
 }

+ 95 - 2
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageService.java

@@ -3,7 +3,8 @@ package com.jeeplus.modules.ruralprojectrecords.service;
 import com.google.common.collect.Maps;
 import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.service.CrudService;
-import com.jeeplus.common.utils.*;
+import com.jeeplus.common.utils.Collections3;
+import com.jeeplus.common.utils.MenuStatusEnum;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.isignature.service.ISignatureDocumentService;
@@ -18,6 +19,7 @@ import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
 import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectMessageDao;
 import com.jeeplus.modules.ruralprojectrecords.dao.RuralWorkProjectUserDao;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectReportData;
 import com.jeeplus.modules.sys.dao.WorkattachmentDao;
 import com.jeeplus.modules.sys.entity.Office;
 import com.jeeplus.modules.sys.entity.User;
@@ -25,6 +27,7 @@ import com.jeeplus.modules.sys.entity.Workattachment;
 import com.jeeplus.modules.sys.service.OfficeService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 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;
@@ -44,6 +47,7 @@ import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
 import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
 import com.jeeplus.modules.workreview.dao.WorkReviewAuditDao;
+import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.IdentityService;
 import org.activiti.engine.RuntimeService;
@@ -51,9 +55,13 @@ import org.activiti.engine.runtime.ProcessInstance;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 项目列表Service
@@ -107,6 +115,8 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
     private ProjectRecordsService projectRecordsService;
     @Autowired
     private ActivityService activityService;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
 
     public RuralProjectRecords get(String id) {
         return super.get(id);
@@ -634,6 +644,89 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         return msg;
     }
 
+    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
+    public void updateSelectiveById(RuralProjectReportData projectRecords) {
+        dao.updateRuralProjectReportDataById(projectRecords);
+    }
+
+    public ProjectReportData ruralProjectReportData(String projectId){
+        ProjectReportData ruralProjectReportData = dao.getRuralProjectReportData(projectId);
+        return ruralProjectReportData;
+    }
+
+
+    /**
+     * 报告:强制撤销
+     * @param projectReportData
+     */
+    @Transactional(readOnly = false)
+    public void cancelInvalidate(ProjectReportData projectReportData) {
+        try {
+            String invalidateProcessInstanceId = projectReportData.getProcessInstanceId();
+            //将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+            WorkActivityProcess process = new WorkActivityProcess();
+            process.setProcessInstanceId(projectReportData.getProcessInstanceId());
+            process.setIsApproval("0");
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setProcessInstanceId(projectReportData.getProcessInstanceId());
+            List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+            WorkProjectNotify notify = new WorkProjectNotify();
+            notify.setNotifyId(projectReportData.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.setDelFlag("1");
+                        p.setIsApproval("-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);
+            }
+
+            //结束该流程,设为"撤销"状态
+            actTaskService.endProcessInstance(invalidateProcessInstanceId,"报告-强制撤销");
+            projectReportData.setStatus("3");
+            update(projectReportData);
+
+        }catch (ActivitiObjectNotFoundException e){
+            System.err.println("报告撤销异常,因为这个流程已不存在!");
+            e.printStackTrace();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Transactional(readOnly = false)
+    public void update(ProjectReportData projectReportData) {
+        projectReportData.preUpdate();
+        dao.updateRuralProjectReportData(projectReportData);
+        if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportData.getFileStatus())) {
+            projectReportData.setFileStatus("1");
+        }
+        dao.updateFileStatus(projectReportData);
+    }
+
+
+
 
 
 

+ 83 - 2
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageController.java

@@ -5,6 +5,8 @@ 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.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
 import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
 import com.jeeplus.modules.projectcontentinfo.service.ProjectReportChangeService;
@@ -21,6 +23,10 @@ import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
 import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
 import org.apache.shiro.authz.annotation.Logical;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +39,7 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
 
 /**
@@ -57,6 +64,10 @@ public class RuralProjectMessageController extends BaseController {
     private ProjectReportNumService projectReportNumService;
     @Autowired
     private ProjectReportChangeService projectReportChangeService;
+    @Autowired
+    protected HistoryService historyService;
+    @Autowired
+    private ActTaskService actTaskService;
 
     @ModelAttribute
     public RuralProjectRecords get(@RequestParam(required=false) String id) {
@@ -146,7 +157,8 @@ public class RuralProjectMessageController extends BaseController {
      */
     @RequiresPermissions(value={"ruralProject:ruralProjectMessage:edit"},logical= Logical.OR)
     @RequestMapping(value = "modify")
-    public String modify(RuralProjectcontentinfo projectcontentinfo, Model model, RedirectAttributes redirectAttributes) {
+    public String modify(RuralProjectcontentinfo projectcontentinfo,Integer status, Model model, RedirectAttributes redirectAttributes) {
+        System.out.println(status);
         Projectcontentinfo projectcontentinfo1 = projectcontentinfoService.getByProjectId(projectcontentinfo.getProjectId());
         ProjectReportData projectReportData = projectReportDataService.getOnRural(projectcontentinfo1.getInfoId());
         Projectcontentinfo projectcontent = projectcontentinfoService.getByInfoId(projectReportData.getId());
@@ -155,6 +167,13 @@ public class RuralProjectMessageController extends BaseController {
         model.addAttribute("projectId", projectcontentinfo1.getProject().getId());
         model.addAttribute("id", projectcontentinfo.getId());
         model.addAttribute("projectcontentinfo", projectcontent);
+        if (projectcontentinfo.getView().contains("report")) {
+            if(StringUtils.isNotBlank(projectReportData.getProcessInstanceId())){
+                Act act = getByAct(projectReportData.getProcessInstanceId());
+                projectReportData.setAct(act);
+            }
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportModify";
+        }
         return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportForm";
     }
 
@@ -224,9 +243,19 @@ public class RuralProjectMessageController extends BaseController {
     public String reportAudit(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response, Model model,
                               RedirectAttributes redirectAttributes) throws Exception {
         ProjectReportData projectReportData = projectcontentinfo.getProjectReportData();
+        if(StringUtils.isNotBlank(projectReportData.getProcessInstanceId())){
+            Act act = getByAct(projectReportData.getProcessInstanceId());
+            projectReportData.setAct(act);
+        }
         ProjectReportData t = projectReportDataService.getOnRural(projectReportData.getId());//从数据库取出记录的值
         try {
             MyBeanUtils.copyBeanNotNull2Bean(projectReportData, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+            if(StringUtils.isNotBlank(t.getProcessInstanceId())){
+                Act act = getByAct(t.getProcessInstanceId());
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportData.getAct(), act);
+                t.setAct(act);
+                projectcontentinfo.setProjectReportData(t);
+            }
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -254,7 +283,7 @@ public class RuralProjectMessageController extends BaseController {
             addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
         }else {
             if ("modifyApply".equals(taskDefKey)){
-                projectcontentinfoService.saveData(projectcontentinfo,3);
+                ruralProjectMessageService.saveData(projectcontentinfo,3);
             }
             String str = ruralProjectMessageService.auditSave(t, users);
             addMessage(redirectAttributes, str);
@@ -270,6 +299,58 @@ public class RuralProjectMessageController extends BaseController {
 
     }
 
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String processInstanceId = requestMap.get("processInstanceId");
+        String id = requestMap.get("id");
+        /*try {*/
+            RuralProjectRecords projectRecords = ruralProjectMessageService.get(id);
+            if(5==projectRecords.getProjectReportStatus()){
+                addMessage(redirectAttributes, "项目报告已审批通过,无法撤回");
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }
+        ProjectReportData projectReportDateByProjectId = ruralProjectMessageService.getProjectReportDateByProjectId(projectRecords.getId());
+        ruralProjectMessageService.cancelInvalidate(projectReportDateByProjectId);
+            addMessage(redirectAttributes, "撤回该项目报告成功");
+        /*}catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该项目报告失败");
+        }*/
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+    }
+
+
+
+    public Act getByAct(String processInstanceId){
+        Act act = new Act();
+        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+        ProcessInstance processInstance = actTaskService.getProcIns(processInstanceId);
+        if (processInstance!=null) {
+            List<Task> taskList = actTaskService.getCurrentTaskList(processInstance);
+            if(taskList!=null && taskList.size()>1){
+                for (Task taskInfok:taskList) {
+                    if (taskInfok.getAssignee().equals(UserUtils.getUser().getId())) {
+                        act.setTaskId(taskInfok.getId());
+                        act.setTaskName(taskInfok.getName());
+                        act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+                        act.setProcDefId(taskInfok.getProcessDefinitionId());
+                        act.setProcInsId(taskInfok.getProcessInstanceId());
+                        act.setTask(taskInfok);
+                    }
+                }
+            }else {
+                Task task = actTaskService.getCurrentTaskInfo(processInstance);
+                act.setTaskId(task.getId());
+                act.setTaskName(task.getName());
+                act.setTaskDefKey(task.getTaskDefinitionKey());
+                act.setProcDefId(task.getProcessDefinitionId());
+                act.setProcInsId(task.getProcessInstanceId());
+                act.setTask(task);
+            }
+        }
+        return  act;
+    }
 
 
 

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

@@ -90,12 +90,23 @@
 	<select id="get" resultType="RuralProjectRecords" >
 		SELECT
 			<include refid="projectRecordsColumns"/>
+		,wci.name AS "workContractInfo.name",
+		wct.id AS "workContractInfo.client.id",
+		wct.name AS "workContractInfo.client.name",
+		o.top_company AS "office.name",
+		ifnull(prd.number ,"") as "projectReportNumber"
+		,ifnull(prd.status,0) as "projectReportStatus"
         ,su.name AS "createBy.name"
         ,o.top_company AS "office.name"
         FROM rural_project_records a
-        <include refid="projectRecordsJoins"/>
-        LEFT JOIN sys_user su ON su.id = a.create_by
-        LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_area area ON area.id = a.area_id
+		LEFT JOIN work_project_user w on a.id = w.project_id
+		LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		LEFT JOIN work_contract_info wci on a.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		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 sys_user su on w.user_id = su.id
 		WHERE a.id = #{id}
 	</select>
 
@@ -118,6 +129,47 @@
 		where a.project_id = #{projectId}
 	</select>
 
+	<select id="getRuralProjectReportData" resultType="ProjectReportData">
+		select * from project_report_data where project_id = #{projectId}
+	</select>
+
+	<update id="updateRuralProjectReportData">
+		UPDATE project_report_data SET
+		update_by = #{updateBy.id},
+		update_date = #{updateDate},
+		remarks = #{remarks},
+		company_id = #{companyId},
+		office_id = #{officeId},
+		project_id = #{project.id},
+		name = #{name},
+		number = #{number},
+		type = #{type},
+		achievement_type = #{achievementType},
+		review_standard = #{reviewStandard},
+		sign_cost_one = #{signCostOne.id},
+		sign_cost_two = #{signCostTwo.id},
+		master = #{master.id},
+		report_date = #{reportDate},
+		status = #{status},
+		invalid_status = #{invalidStatus},
+		report_type = #{reportType},
+		number_path = #{numberPath},
+		review_fee = #{reviewFee},
+		approval_fee = #{approvalFee},
+		contract_fee = #{contractFee},
+		verify_fee = #{verifyFee},
+		verify_rate = #{verifyRate},
+		consult_fee = #{consultFee},
+		building_fee = #{buildingFee},
+		install_fee = #{installFee}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateFileStatus">
+		UPDATE project_report_data SET
+		file_status = #{fileStatus}
+		WHERE id = #{id}
+	</update>
 
 	
 	<select id="findList" resultType="RuralProjectRecords" >
@@ -607,6 +659,11 @@
 		WHERE id = #{id}
 	</update>
 
+	<update id="updateRuralProjectReportDataById">
+		update project_report_data set status = #{status}
+		where project_id = #{id}
+	</update>
+
 	<update id="updateSelectiveByProjectId">
 		UPDATE  rural_project_records
 		<set>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 276 - 622
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageModify.jsp


+ 2 - 2
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportForm.jsp

@@ -16,7 +16,7 @@
         function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
             if(validateForm.form()){
                 if(obj == 1){
-                    $("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectMessage/saveReport?view=report");
+                    $("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectMessage/saveReport");
                 }else{
                     $("#inputForm").attr("action","${ctx}/projectcontentinfo/projectcontentinfo/save?view=report");
                 }
@@ -305,7 +305,7 @@
 <body>
 <div class="single-form">
 	<div class="container${container}">
-		<form:form id="inputForm" modelAttribute="projectcontentinfo" action="${ctx}/projectcontentinfo/projectcontentinfo/save?view=report" method="post" class="form-horizontal">
+		<form:form id="inputForm" modelAttribute="projectcontentinfo" action="${ctx}/ruralProject/ruralProjectMessage/saveReport" method="post" class="form-horizontal">
 		<form:hidden path="id"/>
 		<form:hidden path="name"/>
 		<form:hidden path="parentIds"/>

+ 605 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportModify.jsp

@@ -0,0 +1,605 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报告详情管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		label.error{
+			top:40px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        var dataList;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+                if(obj == 1){
+                    $("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectMessage/reportAudit");
+                }else{
+                    $("#inputForm").attr("action","${ctx}/ruralProject/ruralProjectMessage/reportAudit");
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+
+            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);
+                    }
+                }
+            });
+            laydate.render({
+                elem: '#reportDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });;
+            $("#gistdata_btn").click(function () {
+                $("#gistdata_file").click();
+            });;
+            $("#other_btn").click(function () {
+                $("#other_file").click();
+            });
+        });
+        function hasInArr(id,idArr) {
+            for(var i=0;i<idArr.length;i++){
+                if(id==$(idArr[i]).val()){
+                    return true;
+                }
+            }
+            return false;
+        }
+        function insertTitle(tValue){
+            var files = $("#attachment_file")[0].files;
+            for(var i=0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = "";
+                var attachmentFlag = "86";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/basedData/" + 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, "0");
+            }
+        }
+
+        function gistdataInsertTitle(tValue){
+            var files = $("#gistdata_file")[0].files;
+            for(var i=0;i<files.length;i++) {
+                var file = files[i];
+                var gistdataId = "";
+                var gistdataFlag = "152";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/basedData/" + timestamp + "/" + file['name'];
+                var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+                /*将这段字符串存到数据库即可*/
+                var divId = "_gistdata";
+                $("#addFile" + divId).show();
+                multipartUploadWithSts(storeAs, file, gistdataId, gistdataFlag, uploadPath, divId, "0");
+            }
+        }
+
+        function otherInsertTitle(tValue){
+            var files = $("#other_file")[0].files;
+            for(var i=0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = "";
+                var attachmentFlag = "153";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/basedData/" + timestamp + "/" + file['name'];
+                var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+                /*将这段字符串存到数据库即可*/
+                var divId = "_other";
+                $("#addFile" + divId).show();
+                multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, "0");
+            }
+        }
+        
+        function selectNum() {
+			top.layer.open({
+				type: 2,
+				area: ['50%','95%'],
+				title:'选择报告号',
+				content: '${ctx}/projectreportnum/projectReportNum/select',
+				btn: ['确定','关闭'],
+				btn1: function(index, layero){
+					var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var item = iframeWin.getSelectedItem();
+					if(item === 'false'){
+						iframeWin.layer.msg('请选择一条数据', {icon: 5});
+					}else {
+						$("#number").val(item)
+						top.layer.close(index);//关闭对话框。
+					}
+				},
+				btn2: function(index){
+				}
+
+			})
+		}
+        function openDialogre(title,url,width,height,formId){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                skin: 'three-btns',
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                btn: ['提交','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    inputForm.attr("action","${ctx}/projectcontentinfo/projectcontentinfo/ajaxsaveBaseData");//表单提交成功后,从服务器返回的url在当前tab中展示
+                    var $document = iframeWin.contentWindow.document;
+                    formSubmitAjax($document,formId,index);
+                },
+                btn2: function(index){
+                }
+            });
+        }
+        function formSubmitAjax($document,inputForm,index){
+            var validateForm = $($document.getElementById(inputForm)).validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $($document.getElementById("#messageBox")).text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            if(validateForm.form()){
+                $($document.getElementById(inputForm)).ajaxSubmit({
+                    success:function(data) {
+                        if(!data.success){
+                            top.layer.msg("保存依据资料信息异常!",{icon:2});
+                            return false;
+                        }
+                        var idx = $("#workBaseDataList tr").length;
+                        addRowBaseData("#workBaseDataList",idx,workBaseDataTpl,data.body.workBasedData);
+                        parent.layer.msg(data.msg,{icon:1});
+                        top.layer.close(index)
+                    }
+                });
+            }
+        }
+
+        function delRowBaseData(obj, prefix,userId){
+            var id = $(prefix+"_id").val();
+            /* var createBy = $(prefix+"_userId").val();*/
+            var currentUser = '${fns:getUser().id}';
+            var contentId = '${projectcontentinfo.projectContentData.id}';
+            console.log(contentId);
+
+            $.ajax({
+                type:"post",
+                url:'${ctx}/projectcontentinfo/projectContentData/ajaxdelete',
+                data:{"contentId":contentId,"basedId":id},
+                dataType:"json",
+                success:function(data){
+                    if(data.success) {
+                        $(obj).parent().parent().remove();
+                        /*parent.parent.refreshTrees();*/
+                        if(data.body.inuse){
+                            return;
+                        }
+                        if (currentUser == userId) {
+                            confirmDelete('是否同步删除资料库的文件?','${ctx}/projectcontentinfo/projectcontentinfo/delete?infoId='+id+'&id=${projectcontentinfo.id}&type=1');
+                        }
+                    }else {
+                        top.layer.msg("删除依据资料失败!", {icon: 0});
+                    }
+                }
+            })
+            return;
+        }
+
+		function reviewAudits(mess, href,obj,remarks){
+				console.log(remarks);
+				var remark = $(remarks);
+				remark.val("确认");
+			    $("#audit"+obj).val("1");
+				$("#check1"+obj).attr("style","display:none");
+				$("#check2"+obj).attr("style","display");
+				top.layer.msg("已确认!", {icon: 1});
+			return false;
+		}
+
+		function getFee() {
+			var rf = $("#reviewFee").val();
+			var af = $("#approvalFee").val();
+			if(rf != ''&& af !=''){
+				var hf = parseInt(rf)-parseInt(af);
+				var rate = Math.round(parseInt(hf) / parseInt(rf) * 100) / 100 * 100
+				$("#verifyFee").val(hf);
+				$("#verifyRate").val(rate);
+			}
+			if(af !=''){
+				$("#consultFee").val(af)
+			}
+		}
+
+        function addReview(obj) {
+            var infoId = $("#id").val();
+            var name = $("#name").val();
+            $.ajax({
+                type:"post",
+                url:'${ctx}/projectcontentinfo/projectContentData/addReview',
+                data:{"reviewId":obj,"name":name,"infoId":infoId},
+                dataType:"json",
+                success:function(data){
+                    if(data.success) {
+                        $("#projectContentDataList2").html("");
+						var list = eval(data.body.list);
+						dataList=list
+                        for(var i in list){
+                            var tr = "<tr>" +
+                                "<td>" +
+                                "<input id=\"projectReviewList"+i+"_id\" name=\"projectReportData.projectReviewList["+i+"].id\" type=\"hidden\" value=\""+list[i].id+"\"/>" +
+                                "<input id=\"projectReviewList"+i+"_delFalg\" name=\"projectReportData.projectReviewList["+i+"].delFalg\" type=\"hidden\" value=\"1\"/>" +
+                                "<input id=\"projectReviewList"+i+"_remarks\" name=\"projectReportData.projectReviewList["+i+"].remarks\" type=\"hidden\" value=\"\"/>" +
+                                ""+(parseInt(i)+1)+"" +
+                                "</td>" +
+                                "<td>" +
+                                ""+list[i].standardDetail+"" +
+                                "</td>" +
+                                "<td>" +
+                               	"<div id = \"check1"+list[i].id+"\">\n" +
+                                "<input type=\"hidden\" id=\"audit"+list[i].id+"\" value=\"0\"/>\n" +
+                                "<a href=\"projectReviewList"+list[i]+"\" onclick=\"return reviewAudits('确认要审核该质量复核内容吗?', this.href,'"+list[i].id+"','#projectReviewList"+i+"_remarks')\" style=\"color:#fff;\" class=\"op-btn op-btn-edit\">确认</a>" +
+                                "</div>\n" +
+                                "<div id = \"check2"+list[i].id+"\" class=\"check-ok\" style=\"display: none\">" +
+                                "<i class=\"fa fa-check\"></i>" +
+                                "</div>"
+                                "</td>" +
+                                "</tr>";
+                            $("#projectContentDataList2").append(tr);
+                        }
+                    }else {
+                        top.layer.msg("获取数据失败!", {icon: 0});
+                    }
+                }
+            })
+        }
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container${container}">
+		<form:form id="inputForm" modelAttribute="projectcontentinfo" action="${ctx}/ruralProject/ruralProjectMessage/reportAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="name"/>
+		<form:hidden path="parentIds"/>
+		<form:hidden path="edit"/>
+		<form:hidden path="projectReportData.id"/>
+		<form:hidden path="projectReportData.createBy.id"/>
+		<form:hidden path="project.id"/>
+		<sys:message content="${message}"/>
+		<div class="form-group layui-row first lw12">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>成果类型:</label>
+				<div class="layui-input-block">
+					<form:select  path="projectReportData.achievementType" class="form-control simple-select required">
+						<form:option value="" label=""/>
+						<form:options items="${fns:getMainDictList('achievement_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+					</form:select>
+				</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">
+					<form:select path="projectReportData.reportType" class="form-control simple-select required">
+						<form:option value="" label=""/>
+						<form:option value="电子章" label="电子章"/>
+						<form:option value="实体章" label="实体章"/>
+					</form:select>
+				</div>
+			</div>
+		</div>
+			<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 with-icon">
+							<form:input id="reviewFee" path="projectReportData.reviewFee" htmlEscape="false"  class="form-control layui-input number" onchange="getFee()"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">审定价(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="approvalFee" path="projectReportData.approvalFee" htmlEscape="false"  class="form-control layui-input number" onchange="getFee()"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">合同价(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="contractFee" path="projectReportData.contractFee" htmlEscape="false"  class="form-control layui-input number"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">核增核减额(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="verifyFee" path="projectReportData.verifyFee" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">核增核减率(%):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="verifyRate" path="projectReportData.verifyRate" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">咨询标的额(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="consultFee" path="projectReportData.consultFee" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">土建造价(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="buildingFee" path="projectReportData.buildingFee" htmlEscape="false"  class="form-control layui-input number"/>
+						</div>
+					</div>
+					<div class="layui-item layui-col-sm6">
+						<label class="layui-form-label">安装造价(元):</label>
+						<div class="layui-input-block with-icon">
+							<form:input id="installFee" path="projectReportData.installFee" htmlEscape="false"  class="form-control layui-input number"/>
+						</div>
+					</div>
+				</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>报告文件</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>
+					<span id="_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="${projectcontentinfo.projectReportData.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<c:if test="${workClientAttachment.divIdType eq '_attachment'}">
+							<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}"></td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="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:if>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>依据性资料</h2></div>
+				<div class="layui-item nav-btns">
+					<a id="gistdata_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+				</div>
+				<div id="addFile_gistdata" style="display: none" class="upload-progress">
+					<span id="fileName_gistdata" ></span>
+					<span id="_gistdata" ></span>
+					<b><span id="baifenbi_gistdata" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_gistdata" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="gistdata_file" type="file" name="gistdata_file" multiple="multiple" style="display: none;" onChange="if(this.value)gistdataInsertTitle(this.value);"/>
+				<span id="gistdata_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="gistdata_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_gistdata">
+						<c:forEach items="${projectcontentinfo.projectReportData.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<c:if test="${workClientAttachment.divIdType eq '_gistdata'}">
+							<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}"></td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="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','addFileGistdata')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+										</c:if>
+									</div>
+								</td>
+							</tr>
+							</c:if>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>其他文件</h2></div>
+				<div class="layui-item nav-btns">
+					<a id="other_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+				</div>
+				<div id="addFile_other" style="display: none" class="upload-progress">
+					<span id="fileName_other" ></span>
+					<span id="_other" ></span>
+					<b><span id="baifenbi_other" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_other" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="other_file" type="file" name="other_file" multiple="multiple" style="display: none;" onChange="if(this.value)otherInsertTitle(this.value);"/>
+				<span id="other_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable_other" 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_other">
+						<c:forEach items="${projectcontentinfo.projectReportData.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<c:if test="${workClientAttachment.divIdType eq '_other'}">
+							<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}"></td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+												<td><a class="attention-info" href="javascript:void(0)" onclick="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','addFileOther')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+										</c:if>
+									</div>
+								</td>
+							</tr>
+							</c:if>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+		<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

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

@@ -298,24 +298,20 @@
                         }
                         if(d.canedit1 != undefined && d.canedit1 =="1")
                         {
-                            xml+="<a href=\"#\" onclick=\"openDialogre('修改项目', '${ctx}/ruralProject/ruralProjectMessage/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            xml+="<a href=\"#\" onclick=\"openDialogre('修改项目', '${ctx}/ruralProject/ruralProjectMessage/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改报告</a>";
                         }
                         if(d.canedit2 != undefined && d.canedit2 =="1")
                         {
-                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/ruralProject/ruralProjectMessage/modify?projectId=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/ruralProject/ruralProjectMessage/modify?projectId=" + d.id + "&view=report','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改报告</a>";
                         }
                         if(d.canrecall != undefined && d.canrecall =="1")
                         {
-                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/ruralProject/ruralProjectMessage/form?projectId=" + d.id + "','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改</a>";
+                            xml+="<a href=\"#\" onclick=\"openDialogre('调整项目', '${ctx}/ruralProject/ruralProjectMessage/modify?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"op-btn op-btn-edit\" ><i class=\"fa fa-edit\"></i> 修改报告</a>";
                         }
                         if(d.cancancel != undefined && d.cancancel =="1")
                         {
-                            xml+="<a href=\"${ctx}/ruralProject/ruralProjectRecords/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" 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/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目报告审批吗?', this.href)\" class=\"op-btn op-btn-cancel\" ><i class=\"glyphicon glyphicon-share-alt\"></i> 撤回报告</a>";
                         }
-                        /*if(d.canedit3 != undefined && d.canedit3 =="1")
-                        {
-                            xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogre('项目变更管理', '${ctx}/ruralProject/ruralProjectRecordsAlter/form?alterBeforeRecords.id='+encodeURIComponent('" + d.id + "'),'95%','95%','','送审,暂存,关闭')\" style=\"color: white;background: darkseagreen\" class=\"op-btn op-btn-op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
-                        }*/
                         return xml;
 
                     }}