Browse Source

报告签发流程

[user3] 4 years ago
parent
commit
18abb93594
32 changed files with 11261 additions and 57 deletions
  1. 150 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectReportDataTwoDao.java
  2. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportData.java
  3. 770 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportDataTwo.java
  4. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/Projectcontentinfo.java
  5. 1619 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportDataTwoService.java
  6. 27 0
      src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecordTreeData.java
  7. 9 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectMessageDao.java
  8. 27 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java
  9. 10 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectcontentinfo.java
  10. 8 8
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java
  11. 941 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewTwoService.java
  12. 34 2
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageService.java
  13. 36 4
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java
  14. 35 4
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java
  15. 705 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java
  16. 181 9
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  17. 17 4
      src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataDao.xml
  18. 794 0
      src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataTwoDao.xml
  19. 50 1
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml
  20. 13 1
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/adminReportEditForm.jsp
  21. 14 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportForm.jsp
  22. 13 1
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportModify.jsp
  23. 84 13
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageLists.jsp
  24. 13 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageAudit.jsp
  25. 1767 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageAuditTwo.jsp
  26. 13 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModify.jsp
  27. 1182 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModifyTwo.jsp
  28. 13 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportForm.jsp
  29. 1638 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportFormTwo.jsp
  30. 994 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageTwoView.jsp
  31. 6 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageView.jsp
  32. 80 10
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageLists.jsp

+ 150 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectReportDataTwoDao.java

@@ -0,0 +1,150 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.projectcontentinfo.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectReportData;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralReportConsultant;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 报告详情DAO接口
+ * @author yangfan
+ * @version 2018-06-05
+ */
+@MyBatisDao
+public interface ProjectReportDataTwoDao extends CrudDao<ProjectReportDataTwo> {
+
+    ProjectReportDataTwo getNoInvalid(@Param("id") String id);
+
+    ProjectReportDataTwo getNumber(ProjectReportDataTwo projectReportData);
+
+    int updateFileStatus(ProjectReportDataTwo projectReportData);
+
+    int updateNumber(ProjectReportDataTwo projectReportData);
+
+//    List<ProjectReportDataTwo> findInvalidList(ProjectReportDataTwo projectReportData);
+
+    List<ProjectReportDataTwo> findInfoList(ProjectReportDataTwo projectReportData);
+    List<ProjectReportDataTwo> findInfoListByStatus(ProjectReportDataTwo projectReportData);
+//    List<Workattachment> getContainReportData(ProjectReportDataTwo projectReportData);
+    /**
+     * 更新流程实例ID
+     * @return
+     */
+    public int updateProcessInstanceId(ProjectReportDataTwo projectReportData);
+
+    /**
+     * 修改作废信息
+     * @param projectReportData
+     * @return
+     */
+    public int saveInvalid(ProjectReportDataTwo projectReportData);
+
+    /**
+     * 根据流程实例ID获取WorkReimbursement
+     * @param processInstanceId
+     * @return
+     */
+    public ProjectReportDataTwo getByProcessInstanceId(String processInstanceId);
+    /**
+     * 更新流程实例ID
+     * @return
+     */
+    public int updateInvalidProcessInstanceId(ProjectReportDataTwo projectReportData);
+    public void deleteReportDataInfo(@Param("reportId") String reportId);
+    public void deleteReportDataBased(@Param("reportId") String reportId);
+    public void deleteContentChange(@Param("infoId") String infoId);
+    public String getChangeId(@Param("id") String id);
+
+    /**
+     * 根据流程实例ID获取WorkReimbursement
+     * @param invalidProcessInstanceId
+     * @return
+     */
+    public ProjectReportDataTwo getByInvalidProcessInstanceId(String invalidProcessInstanceId);
+
+    void reportNumber(@Param("reportId") String reportId, @Param("number") String number, @Param("url") String url);
+
+    int updateUpId(@Param("id") String id, @Param("upId") String upId);
+
+    List<ProjectReportDataTwo> findByProjectId(String projectId);
+
+    ProjectReportDataTwo findByNum(String number);
+
+    List<RuralProjectReportData> findListOnRural(RuralProjectReportData projectReportData);
+
+    /**
+     * 查询报告文件父级节点数据信息
+     * @param projectId
+     * @return
+     */
+    List<ProjectReportTreeData> getParentReportDataList(String projectId);
+
+    /**
+     * 查询报告文件子级数据信息
+     * @param projectId
+     * @return
+     */
+    List<ProjectReportTreeData> getReportDataList(String projectId);
+
+    /**
+     * 查询项目对应的成果文件信息
+     * @param projectId
+     * @return
+     */
+    List<ProjectRecordTreeData> getProjectRecordDataList(String projectId);
+
+
+    /**
+     * 根据id查询回荡报告信息
+     * @param projectReportData
+     * @return
+     */
+    ProjectReportDataTwo findInfoByStatus(ProjectReportDataTwo projectReportData);
+
+    /**
+     * 根据项目id查询报告信息
+     * @param projectId
+     * @return
+     */
+    ProjectReportDataTwo getProjectReportData(String projectId);
+
+    /**
+     * 全过程根据id查询归档报告信息
+     * @param projectReportData
+     * @return
+     */
+    ProjectReportDataTwo processFindInfoByStatus(ProjectReportDataTwo projectReportData);
+
+    /**
+     * 根据项目id查询三级校审咨询员信息
+     * @param projectId
+     * @return
+     */
+    List<RuralReportConsultant> getConsultantList(String projectId);
+
+    /**
+     * 管理员修改项目组成员
+     * 修改报告总审人员
+     * @param projectReportData
+     * @return
+     */
+    Integer updateProjectBzshUserId(ProjectReportDataTwo projectReportData);
+
+    /**
+     * 根据项目id查找流程2
+     * @param projectId
+     * @return
+     */
+    ProjectReportDataTwo findTwoByProjectId(String projectId);
+}

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

@@ -62,6 +62,7 @@ public class ProjectReportData extends ActEntity<ProjectReportData> {
 	private String numberPath;
 	private String tempType;    //模板类型
 	private String bzshbUserId; //总审用户id
+	private String ZiXunShouRu;	//造价咨询营业收入(万元)
 
 	public String getNumberPath() {
 		return numberPath;
@@ -771,4 +772,12 @@ public class ProjectReportData extends ActEntity<ProjectReportData> {
 	public void setContractRate(String contractRate) {
 		this.contractRate = contractRate;
 	}
+
+	public String getZiXunShouRu() {
+		return ZiXunShouRu;
+	}
+
+	public void setZiXunShouRu(String ziXunShouRu) {
+		ZiXunShouRu = ziXunShouRu;
+	}
 }

+ 770 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportDataTwo.java

@@ -0,0 +1,770 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.projectcontentinfo.entity;
+
+
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.workcontent.web.WorkContentTypeController;
+import com.jeeplus.modules.workreview.entity.WorkReviewAudit;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 报告详情Entity
+ * @author yangfan
+ * @version 2018-06-05
+ */
+public class ProjectReportDataTwo extends ActEntity<ProjectReportDataTwo> {
+
+	private static final long serialVersionUID = 1L;
+	private String companyId;		// 公司id
+	private String officeId;		// 部门id
+	private String officeName;		// 部门id
+	private ProjectRecords project;		// 项目id
+	private String name;		// 报告名称
+	private String number;		// 报告编号
+	private String type;		// 工作内容类型
+	private String achievementType;		// 成果类型
+	private String reviewStandard;		// 复核标准
+	private User signCostOne;		// 签字造价师一
+	private User signCostTwo;		// 签字造价师二
+	private User master;		// 负责人
+	private Date reportDate;		// 报告日期
+	private String fileStatus;		// 归档状态
+	private String downFileStatus;		// 归档状态
+	private String status;		// 报告状态 1待归档 2已归档
+	private String invalidStatus;		// 报告作废状态
+	private Date startDate;
+	private Date endDate;
+	private List<Workattachment> workAttachments;
+	private String processInstanceId; // 流程实例编号
+	private String invalidProcessInstanceId; // 流程实例编号
+	private String home;
+	private List<ProjectContentData> projectContentDataList;
+	private List<ProjectBasedData> projectBasedDataList;
+	private List<WorkReviewAudit> projectReviewList;
+	private String reportId;
+	private String numberPath;
+	private String tempType;    //模板类型
+	private String bzshbUserId; //总审用户id
+
+	public String getNumberPath() {
+		return numberPath;
+	}
+
+	public void setNumberPath(String numberPath) {
+		this.numberPath = numberPath;
+	}
+
+	private ProjectReportDataTwo beforeEntity;
+	private Integer beforeCount;
+	private String clientName;
+	private String contractNum;
+	private String contractName;
+	private String projectMaster;
+	private String projectMasterId;
+	private Date createStartDate;
+	private Date createEndDate;
+	private Date createDate;
+	private String typeName;
+	private String projectName;
+	private String projectNum;
+	private String signCostOneName;
+	private String signCostTwoName;
+	private String masterName;
+	private String upId;
+
+
+	private String reviewFee;  //送审价
+	private String approvalFee;  //审定价
+	private String contractFee;   //合同价
+	private String verifyFee;    //核增核减额
+	private String verifyRate;    //核增核减率
+	private String buildingRate;    //土建比例
+	private String installRate;    //安装比例
+	private String consultFee;    //咨询标的额
+	private String buildingFee;   //土建额
+	private String installFee;    //安装额
+	private String recordNum;     //归档申请编号
+	private String templateTypeName;
+	private String conditionType;   //判断条件
+	private Date auditPassDate;   //审核通过日期
+	private User consultant;		// 专业咨询员
+	private String consultantRemarks;  //咨询员意见
+	private Date consultantDate;  //咨询员审核时间
+	private User principal;		// 项目负责人
+	private String principalRemarks;  //项目负责人意见
+	private Date principalDate;  //项目负责人审核时间
+	private User technicist;		// 项目技术员
+	private String technicistRemarks;  //项目技术员意见
+	private Date technicistDate;  //项目技术员审核时间
+
+	private String contractCategory;	//报告合同类别
+	private String contractRate;	//合同费率
+
+
+	public String getUpId() {
+		return upId;
+	}
+
+	public void setUpId(String upId) {
+		this.upId = upId;
+	}
+
+
+	public String getReportType() {
+		return reportType;
+	}
+
+	public void setReportType(String reportType) {
+		this.reportType = reportType;
+	}
+
+	private String reportType;		// 签章类型 电子章/实体章
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public ProjectReportDataTwo() {
+		super();
+	}
+
+	public ProjectReportDataTwo(String id){
+		super(id);
+	}
+
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+
+	@Override
+	public void setCreateDate(Date createDate) {
+		this.createDate = createDate;
+	}
+
+	public void setProject(ProjectRecords project) {
+		this.project = project;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	@ExcelField(title="报告编号", align=2, sort=1)
+	public String getNumber() {
+		return number;
+	}
+
+	@ExcelField(title="报告名称", align=2, sort=2)
+	public String getName() {
+		return name;
+	}
+
+	public String getType() {
+		return type;
+	}
+	@ExcelField(title="工作内容类型", align=2, sort=3)
+	public String getTypeName() {
+		return WorkContentTypeController.getContentTypeName(this.type,"");
+	}
+
+	@ExcelField(title="成果类型", align=2, sort=4,mainDictType = "achievement_type")
+	public String getAchievementType() {
+		return achievementType;
+	}
+
+	public User getSignCostOne() {
+		return signCostOne;
+	}
+
+	@ExcelField(title="签字造价师一", align=2, sort=5)
+	public String getSignCostOneName() {
+		return this.signCostOne.getName();
+	}
+
+	@ExcelField(title="签字造价师二", align=2, sort=6)
+	public String getSignCostTwoName() {
+		return this.signCostTwo.getName();
+	}
+
+	public User getSignCostTwo() {
+		return signCostTwo;
+	}
+
+	@ExcelField(title="复核标准", align=2, sort=7,dictType = "reviewStandard")
+	public String getReviewStandard() {
+		return reviewStandard;
+	}
+
+	@ExcelField(title="报告状态", align=2, sort=8,dictType = "audit_state")
+	public String getStatus() {
+		return status;
+	}
+
+	@ExcelField(title="报告日期", align=2, sort=9)
+	public Date getReportDate() {
+		return reportDate;
+	}
+
+	@ExcelField(title="归档状态", align=2, sort=10,dictType = "record_state")
+	public String getFileStatus() {
+		return fileStatus;
+	}
+
+	@ExcelField(title="负责人", align=2, sort=11)
+	public String getMasterName() {
+		return this.master.getName();
+	}
+
+	@ExcelField(title="所属部门", align=2, sort=12)
+	public String getOfficeName() {
+		return officeName;
+	}
+
+	@ExcelField(title="创建时间", align=2, sort=13)
+	@Override
+	public Date getCreateDate() {
+		return createDate;
+	}
+
+	public ProjectRecords getProject() {
+		return project;
+	}
+
+	@ExcelField(title="所属项目", align=2, sort=14)
+	public String getProjectName() {
+		return this.project.getProjectName();
+	}
+
+	@ExcelField(title="项目负责人", align=2, sort=15)
+	public String getProjectMaster() {
+		return projectMaster;
+	}
+
+	@ExcelField(title="合同编号", align=2, sort=16)
+	public String getContractNum() {
+		return contractNum;
+	}
+
+	@ExcelField(title="主委托方", align=2, sort=17)
+	public String getClientName() {
+		return clientName;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public void setAchievementType(String achievementType) {
+		this.achievementType = achievementType;
+	}
+
+	public void setReviewStandard(String reviewStandard) {
+		this.reviewStandard = reviewStandard;
+	}
+
+	public void setSignCostOne(User signCostOne) {
+		this.signCostOne = signCostOne;
+	}
+
+	public void setSignCostTwo(User signCostTwo) {
+		this.signCostTwo = signCostTwo;
+	}
+
+	public void setMaster(User master) {
+		this.master = master;
+	}
+
+	public void setReportDate(Date reportDate) {
+		this.reportDate = reportDate;
+	}
+
+	public void setFileStatus(String fileStatus) {
+		this.fileStatus = fileStatus;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getInvalidStatus() {
+		return invalidStatus;
+	}
+
+	public void setInvalidStatus(String invalidStatus) {
+		this.invalidStatus = invalidStatus;
+	}
+
+	public Date getStartDate() {
+		return startDate;
+	}
+
+	public void setStartDate(Date startDate) {
+		this.startDate = startDate;
+	}
+
+	public Date getEndDate() {
+		return endDate;
+	}
+
+	public void setEndDate(Date endDate) {
+		this.endDate = endDate;
+	}
+
+	public List<Workattachment> getWorkAttachments() {
+		return workAttachments;
+	}
+
+	public void setWorkAttachments(List<Workattachment> workAttachments) {
+		this.workAttachments = workAttachments;
+	}
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public List<ProjectContentData> getProjectContentDataList() {
+		return projectContentDataList;
+	}
+
+	public void setProjectContentDataList(List<ProjectContentData> projectContentDataList) {
+		this.projectContentDataList = projectContentDataList;
+	}
+
+	public String getReportId() {
+		return reportId;
+	}
+
+	public void setReportId(String reportId) {
+		this.reportId = reportId;
+	}
+
+	public ProjectReportDataTwo getBeforeEntity() {
+		return beforeEntity;
+	}
+
+	public void setBeforeEntity(ProjectReportDataTwo beforeEntity) {
+		this.beforeEntity = beforeEntity;
+	}
+
+	public Integer getBeforeCount() {
+		return beforeCount;
+	}
+
+	public void setBeforeCount(Integer beforeCount) {
+		this.beforeCount = beforeCount;
+	}
+
+	public String getInvalidProcessInstanceId() {
+		return invalidProcessInstanceId;
+	}
+
+	public void setInvalidProcessInstanceId(String invalidProcessInstanceId) {
+		this.invalidProcessInstanceId = invalidProcessInstanceId;
+	}
+
+	public void setOfficeName(String officeName) {
+		this.officeName = officeName;
+	}
+
+	public void setClientName(String clientName) {
+		this.clientName = clientName;
+	}
+
+	public void setContractNum(String contractNum) {
+		this.contractNum = contractNum;
+	}
+
+	public void setProjectMaster(String projectMaster) {
+		this.projectMaster = projectMaster;
+	}
+
+	public Date getCreateStartDate() {
+		return createStartDate;
+	}
+
+	public void setCreateStartDate(Date createStartDate) {
+		this.createStartDate = createStartDate;
+	}
+
+	public Date getCreateEndDate() {
+		return createEndDate;
+	}
+
+	public void setCreateEndDate(Date createEndDate) {
+		this.createEndDate = createEndDate;
+	}
+
+	public String getProjectMasterId() {
+		return projectMasterId;
+	}
+
+	public void setProjectMasterId(String projectMasterId) {
+		this.projectMasterId = projectMasterId;
+	}
+
+	public String getContractName() {
+		return contractName;
+	}
+
+	public String getProjectNum() {
+		return this.project.getProjectId();
+	}
+	public User getMaster() {
+		return master;
+	}
+
+	public List<ProjectBasedData> getProjectBasedDataList() {
+		return projectBasedDataList;
+	}
+
+	public void setProjectBasedDataList(List<ProjectBasedData> projectBasedDataList) {
+		this.projectBasedDataList = projectBasedDataList;
+	}
+
+	public List<WorkReviewAudit> getProjectReviewList() {
+		return projectReviewList;
+	}
+
+	public void setProjectReviewList(List<WorkReviewAudit> projectReviewList) {
+		this.projectReviewList = projectReviewList;
+	}
+
+
+	public String getReviewFee() {
+		return reviewFee;
+	}
+
+	public void setReviewFee(String reviewFee) {
+		this.reviewFee = reviewFee;
+	}
+
+	public void setContractName(String contractName) {
+		this.contractName = contractName;
+	}
+
+	public void setTypeName(String typeName) {
+		this.typeName = typeName;
+	}
+
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+
+	public void setProjectNum(String projectNum) {
+		this.projectNum = projectNum;
+	}
+
+	public void setSignCostOneName(String signCostOneName) {
+		this.signCostOneName = signCostOneName;
+	}
+
+	public void setSignCostTwoName(String signCostTwoName) {
+		this.signCostTwoName = signCostTwoName;
+	}
+
+	public void setMasterName(String masterName) {
+		this.masterName = masterName;
+	}
+
+	public String getApprovalFee() {
+		return approvalFee;
+	}
+
+	public void setApprovalFee(String approvalFee) {
+		this.approvalFee = approvalFee;
+	}
+
+	public String getContractFee() {
+		return contractFee;
+	}
+
+	public void setContractFee(String contractFee) {
+		this.contractFee = contractFee;
+	}
+
+	public String getVerifyFee() {
+		return verifyFee;
+	}
+
+	public void setVerifyFee(String verifyFee) {
+		this.verifyFee = verifyFee;
+	}
+
+	public String getVerifyRate() {
+		return verifyRate;
+	}
+
+	public void setVerifyRate(String verifyRate) {
+		this.verifyRate = verifyRate;
+	}
+
+	public String getBuildingRate() {
+		return buildingRate;
+	}
+
+	public void setBuildingRate(String buildingRate) {
+		this.buildingRate = buildingRate;
+	}
+
+	public String getInstallRate() {
+		return installRate;
+	}
+
+	public void setInstallRate(String installRate) {
+		this.installRate = installRate;
+	}
+
+	public String getConsultFee() {
+		return consultFee;
+	}
+
+	public void setConsultFee(String consultFee) {
+		this.consultFee = consultFee;
+	}
+
+	public String getBuildingFee() {
+		return buildingFee;
+	}
+
+	public void setBuildingFee(String buildingFee) {
+		this.buildingFee = buildingFee;
+	}
+
+	public String getInstallFee() {
+		return installFee;
+	}
+
+	public void setInstallFee(String installFee) {
+		this.installFee = installFee;
+	}
+
+	public String getRecordNum() {
+		return recordNum;
+	}
+
+	public void setRecordNum(String recordNum) {
+		this.recordNum = recordNum;
+	}
+
+	public String getTemplateTypeName() {
+		return templateTypeName;
+	}
+
+	public void setTemplateTypeName(String templateTypeName) {
+		this.templateTypeName = templateTypeName;
+	}
+
+	public String getConditionType() {
+		return conditionType;
+	}
+
+	public void setConditionType(String conditionType) {
+		this.conditionType = conditionType;
+	}
+
+	public String getTempType() {
+		return tempType;
+	}
+
+	public void setTempType(String tempType) {
+		this.tempType = tempType;
+	}
+
+	public Date getAuditPassDate() {
+		return auditPassDate;
+	}
+
+	public void setAuditPassDate(Date auditPassDate) {
+		this.auditPassDate = auditPassDate;
+	}
+
+	public String getDownFileStatus() {
+		return downFileStatus;
+	}
+
+	public void setDownFileStatus(String downFileStatus) {
+		this.downFileStatus = downFileStatus;
+	}
+
+	public String getBzshbUserId() {
+		return bzshbUserId;
+	}
+
+	public void setBzshbUserId(String bzshbUserId) {
+		this.bzshbUserId = bzshbUserId;
+	}
+
+	public User getConsultant() {
+		return consultant;
+	}
+
+	public void setConsultant(User consultant) {
+		this.consultant = consultant;
+	}
+
+	public String getConsultantRemarks() {
+		return consultantRemarks;
+	}
+
+	public void setConsultantRemarks(String consultantRemarks) {
+		this.consultantRemarks = consultantRemarks;
+	}
+
+	public User getPrincipal() {
+		return principal;
+	}
+
+	public void setPrincipal(User principal) {
+		this.principal = principal;
+	}
+
+	public String getPrincipalRemarks() {
+		return principalRemarks;
+	}
+
+	public void setPrincipalRemarks(String principalRemarks) {
+		this.principalRemarks = principalRemarks;
+	}
+
+	public User getTechnicist() {
+		return technicist;
+	}
+
+	public void setTechnicist(User technicist) {
+		this.technicist = technicist;
+	}
+
+	public String getTechnicistRemarks() {
+		return technicistRemarks;
+	}
+
+	public void setTechnicistRemarks(String technicistRemarks) {
+		this.technicistRemarks = technicistRemarks;
+	}
+
+	public Date getConsultantDate() {
+		return consultantDate;
+	}
+
+	public void setConsultantDate(Date consultantDate) {
+		this.consultantDate = consultantDate;
+	}
+
+	public Date getPrincipalDate() {
+		return principalDate;
+	}
+
+	public void setPrincipalDate(Date principalDate) {
+		this.principalDate = principalDate;
+	}
+
+	public Date getTechnicistDate() {
+		return technicistDate;
+	}
+
+	public void setTechnicistDate(Date technicistDate) {
+		this.technicistDate = technicistDate;
+	}
+
+	public String getContractCategory() {
+		return contractCategory;
+	}
+
+	public void setContractCategory(String contractCategory) {
+		this.contractCategory = contractCategory;
+	}
+
+	public String getContractRate() {
+		return contractRate;
+	}
+
+	public void setContractRate(String contractRate) {
+		this.contractRate = contractRate;
+	}
+}

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

@@ -37,6 +37,7 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	private ProjectBasedData projectBasedData;
 	private ProjectContentData projectContentData;
 	private ProjectReportData projectReportData;
+	private ProjectReportDataTwo projectReportDataTwo;
 	private String view;
 	private List<Workattachment> workAttachments;
 	private String edit;
@@ -353,4 +354,12 @@ public class Projectcontentinfo extends TreeEntity<Projectcontentinfo> {
 	public void setRecordsReported(RuralProjectRecordsReported recordsReported) {
 		this.recordsReported = recordsReported;
 	}
+
+	public ProjectReportDataTwo getProjectReportDataTwo() {
+		return projectReportDataTwo;
+	}
+
+	public void setProjectReportDataTwo(ProjectReportDataTwo projectReportDataTwo) {
+		this.projectReportDataTwo = projectReportDataTwo;
+	}
 }

File diff suppressed because it is too large
+ 1619 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportDataTwoService.java


+ 27 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecordTreeData.java

@@ -41,6 +41,7 @@ public class ProjectRecordTreeData extends DataEntity<ProjectRecordTreeData> {
     private Date date;   //时间控件
 
     private Integer projectReportStatus; //报告状态
+    private Integer projectReportStatusTwo; //报告流程2状态
     private Integer projectReportRecordStatus; //归档状态
     private Integer downProjectReportRecordStatus; //线下归档状态
     private String reportedState;   //上报状态
@@ -48,6 +49,8 @@ public class ProjectRecordTreeData extends DataEntity<ProjectRecordTreeData> {
     private String prrdId;
     private String prrId;
     private String prdId;
+    private String prdtId;
+    private String prdtProcessinstanceId;//流程2流程id
     private String prrProcessInstanceId;
     private Integer flag;
     private String flagAdmin;
@@ -599,4 +602,28 @@ public class ProjectRecordTreeData extends DataEntity<ProjectRecordTreeData> {
     public void setNewRecordAuditNotifyFlag(Integer newRecordAuditNotifyFlag) {
         this.newRecordAuditNotifyFlag = newRecordAuditNotifyFlag;
     }
+
+    public Integer getProjectReportStatusTwo() {
+        return projectReportStatusTwo;
+    }
+
+    public void setProjectReportStatusTwo(Integer projectReportStatusTwo) {
+        this.projectReportStatusTwo = projectReportStatusTwo;
+    }
+
+    public String getPrdtId() {
+        return prdtId;
+    }
+
+    public void setPrdtId(String prdtId) {
+        this.prdtId = prdtId;
+    }
+
+    public String getPrdtProcessinstanceId() {
+        return prdtProcessinstanceId;
+    }
+
+    public void setPrdtProcessinstanceId(String prdtProcessinstanceId) {
+        this.prdtProcessinstanceId = prdtProcessinstanceId;
+    }
 }

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

@@ -6,6 +6,7 @@ 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.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
 import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
@@ -44,12 +45,15 @@ public interface RuralProjectMessageDao extends CrudDao<RuralProjectRecords> {
     ProjectRecords getRuralProjectRecords(String id);
 
     ProjectReportData getProjectReportDateByProjectId(String projectId);
+    ProjectReportDataTwo getProjectReportDateTwoByProjectId(String projectId);
 
     ProjectReportData getRuralProjectReportData(String projectId);
 
     int updateRuralProjectReportData(ProjectReportData projectReportData);
+    int updateRuralProjectReportDataTwo(ProjectReportDataTwo projectReportData);
 
     int updateFileStatus(ProjectReportData projectReportData);
+    int updateFileStatusTwo(ProjectReportDataTwo projectReportData);
 
     /**
      * 添加归档信息
@@ -89,6 +93,11 @@ public interface RuralProjectMessageDao extends CrudDao<RuralProjectRecords> {
      * @param projectReportData
      */
     void deleteReport(ProjectReportData projectReportData);
+    /**
+     * 删除报告信息
+     * @param projectReportData
+     */
+    void deleteReportTwo(ProjectReportDataTwo projectReportData);
 
     /**
      * 删除归档信息

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

@@ -68,6 +68,7 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	private String recodeNum; //归档申请编号
 
 	private Integer projectReportStatus; //报告状态
+	private Integer projectReportStatusTwo; //报告流程2状态
 	private Integer projectReportRecordStatus; //归档状态
 	private Integer downProjectReportRecordStatus; //线下归档状态
 
@@ -81,6 +82,8 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 
 	private String prrId;
 	private String prdId;
+	private String prdtId;
+	private String prdtProcessinstanceId;
 	private String prrdId;
 	private String projectReportName;
 	private String officeName;
@@ -1389,4 +1392,28 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	public void setSubmitScale(BigDecimal submitScale) {
 		this.submitScale = submitScale;
 	}
+
+	public Integer getProjectReportStatusTwo() {
+		return projectReportStatusTwo;
+	}
+
+	public void setProjectReportStatusTwo(Integer projectReportStatusTwo) {
+		this.projectReportStatusTwo = projectReportStatusTwo;
+	}
+
+	public String getPrdtId() {
+		return prdtId;
+	}
+
+	public void setPrdtId(String prdtId) {
+		this.prdtId = prdtId;
+	}
+
+	public String getPrdtProcessinstanceId() {
+		return prdtProcessinstanceId;
+	}
+
+	public void setPrdtProcessinstanceId(String prdtProcessinstanceId) {
+		this.prdtProcessinstanceId = prdtProcessinstanceId;
+	}
 }

+ 10 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectcontentinfo.java

@@ -10,6 +10,7 @@ import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectBasedData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectContentData;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.sys.entity.Workattachment;
 
@@ -33,6 +34,7 @@ public class RuralProjectcontentinfo extends TreeEntity<RuralProjectcontentinfo>
 	private ProjectBasedData projectBasedData;
 	private ProjectContentData projectContentData;
 	private ProjectReportData projectReportData;
+	private ProjectReportDataTwo projectReportDataTwo;
 	private String view;
 	private List<Workattachment> workAttachments;
 	private String edit;
@@ -236,4 +238,12 @@ public class RuralProjectcontentinfo extends TreeEntity<RuralProjectcontentinfo>
 	public void setReportedId(String reportedId) {
 		this.reportedId = reportedId;
 	}
+
+	public ProjectReportDataTwo getProjectReportDataTwo() {
+		return projectReportDataTwo;
+	}
+
+	public void setProjectReportDataTwo(ProjectReportDataTwo projectReportDataTwo) {
+		this.projectReportDataTwo = projectReportDataTwo;
+	}
 }

+ 8 - 8
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java

@@ -943,8 +943,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
         if (!state) {
             users.add(projectReportData.getCreateBy());
             if ("yes".equals(flag)) {
-                String titleStr = "项目【"+projectRecords.getProjectName()+"】报告审批通过";
-                String content = "项目【"+projectRecords.getProjectName()+"】报告审批通过,报告号:" + projectReportData.getNumber();
+                String titleStr = "项目【"+projectRecords.getProjectName()+"】报告质量复核审批通过";
+                String content = "项目【"+projectRecords.getProjectName()+"】报告质量复核审批通过,报告号:" + projectReportData.getNumber();
                 str =  "报告名称:"+projectReportData.getName()+",工作内容类型:"+ WorkContentTypeController.getContentTypeName(projectReportData.getType(),"")+",项目所属部门:"+recordsOffice.getName();
                 projectReportData.setStatus("5");
                 WorkProjectNotify notify = new WorkProjectNotify();
@@ -1030,8 +1030,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
 
             } else {
                 if (!"yes".equals(flag)) {//报告驳回待办提醒
-                    title = "项目【"+ projectRecords.getProjectName()+"】新增报告被驳回";
-                    str = "项目【"+ projectRecords.getProjectName()+"】新增报告被驳回,请选择重新申请或删除报告";
+                    title = "项目【"+ projectRecords.getProjectName()+"】新增报告质量复核被驳回";
+                    str = "项目【"+ projectRecords.getProjectName()+"】新增报告质量复核被驳回,请选择重新申请或删除报告";
                     WorkProjectNotify notify = new WorkProjectNotify();
                     notify.setNotifyId(projectReportData.getId());
                     userList = workProjectNotifyService.readByNotifyId(notify);
@@ -1049,8 +1049,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
                     users.add( projectReportData.getCreateBy());
                 } else {
                     if (com.jeeplus.common.utils.StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
-                        str = "项目【"+ projectRecords.getProjectName()+"】报告待审批";
-                        title = "项目【"+ projectRecords.getProjectName()+"】报告待审批";
+                        str = "项目【"+ projectRecords.getProjectName()+"】报告质量复核待审批";
+                        title = "项目【"+ projectRecords.getProjectName()+"】报告质量复核待审批";
                         WorkProjectNotify notify = new WorkProjectNotify();
                         notify.setNotifyId(projectReportData.getId());
                         userList = workProjectNotifyService.readByNotifyId(notify);
@@ -1353,8 +1353,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
         }
         ProjectRecords projectRecords = dao.getRuralProjectRecords(projectReportData.getProject().getId());
         Office recordsOffice =officeService.get(projectRecords.getOffice());
-        String title = "项目【"+projectRecords.getProjectName()+"】报告待审批";
-        String str =  "项目【"+projectRecords.getProjectName()+"】报告待审批";
+        String title = "项目【"+projectRecords.getProjectName()+"】报告质量复核待审批";
+        String str =  "项目【"+projectRecords.getProjectName()+"】报告质量复核待审批";
         // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
         identityService.setAuthenticatedUserId(user.getId());
         // 启动流程

+ 941 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewTwoService.java

@@ -0,0 +1,941 @@
+package com.jeeplus.modules.ruralprojectrecords.service;
+
+import com.google.common.collect.Maps;
+import com.google.gson.Gson;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.historical.service.HistoricalService;
+import com.jeeplus.modules.isignature.service.ISignatureDocumentService;
+import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryRelationInfo;
+import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
+import com.jeeplus.modules.projectAccessory.service.ProjectTemplateService;
+import com.jeeplus.modules.projectFilingBatch.dao.ProjectFilingBatchDao;
+import com.jeeplus.modules.projectFilingBatch.dao.ProjectFilingbatchRelationDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataTwoDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
+import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataTwoService;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectcontentinfoService;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.projectreportnum.service.ProjectReportNumService;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectMessageDao;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectRecordsReportedDao;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralWorkProjectUserDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectcontentinfo;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralReportConsultant;
+import com.jeeplus.modules.sys.dao.WorkattachmentDao;
+import com.jeeplus.modules.sys.entity.MainDictDetail;
+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.service.OfficeService;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
+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.workclientinfo.dao.WorkClientAttachmentDao;
+import com.jeeplus.modules.workclientinfo.dao.WorkClientLinkmanDao;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import com.jeeplus.modules.workclientinfo.service.WorkClientInfoService;
+import com.jeeplus.modules.workcontent.web.WorkContentTypeController;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+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.workreview.dao.WorkReviewAuditDao;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+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.Transactional;
+
+import java.util.*;
+
+@Service
+@Transactional(readOnly = true)
+public class RuralProjectMessageNewTwoService extends CrudService<RuralProjectMessageDao, RuralProjectRecords> {
+    @Autowired
+    private RuralWorkProjectUserDao workProjectUserDao;
+    @Autowired
+    private WorkClientLinkmanDao workClientLinkmanDao;
+    @Autowired
+    protected HistoryService historyService;
+    @Autowired
+    private WorkContractInfoService contractInfoService;
+    @Autowired
+    private WorkClientAttachmentDao workClientAttachmentDao;
+    @Autowired
+    private WorkattachmentService workattachmentService;
+    @Autowired
+    private WorkClientInfoService workClientInfoService;
+    @Autowired
+    private ProjectcontentinfoDao projectcontentinfoDao;
+    @Autowired
+    private ProjectReportDataTwoDao projectReportDataDao;
+    @Autowired
+    private ProjectReportNumService projectReportNumService;
+    @Autowired
+    private ProjectReportDataTwoService projectReportDataService;
+    @Autowired
+    private WorkattachmentDao workattachmentDao;
+    @Autowired
+    private ISignatureDocumentService signatureDocumentService;
+    @Autowired
+    private OfficeService officeService;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private WorkActivityMenuService workActivityMenuService;
+    @Autowired
+    private WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private WorkActivityProcessService workActivityProcessService;
+    @Autowired
+    private WorkReviewAuditDao workReviewAuditDao;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ProjectRecordsService projectRecordsService;
+    @Autowired
+    private ActivityService activityService;
+    @Autowired
+    private WorkActivityProcessDao workActivityProcessDao;
+    @Autowired
+    private WorkContractInfoService workContractInfoService;
+    @Autowired
+    private RuralProjectRecordsReportedDao ruralProjectRecordsReportedDao;
+    @Autowired
+    private RuralProjectRecordsService ruralProjectRecordsService;
+    @Autowired
+    private HistoricalService historicalService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+    @Autowired
+    private ProjectTemplateService projectTemplateService;
+    @Autowired
+    private SubProjectInfoService subProjectInfoService;
+    @Autowired
+    private ProjectFilingbatchRelationDao filingbatchRelationDao;
+    @Autowired
+    private ProjectFilingBatchDao projectFilingBatchDao;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+    public RuralProjectRecords get(String id) {
+        return super.get(id);
+    }
+    public RuralProjectRecords getInfo(String id) {
+        RuralProjectRecords projectRecords = super.get(id);
+        if(projectRecords!=null){
+            String cid = projectRecords.getWorkContractInfo().getId();
+            WorkContractInfo workContractInfo = contractInfoService.get(cid);
+            if(null != workContractInfo) {
+                WorkClientInfo workClientInfo = workClientInfoService.get(workContractInfo.getClient().getId());
+                workContractInfo.setClient(workClientInfo);
+            }
+            projectRecords.setWorkContractInfo(workContractInfo);
+        }
+        return projectRecords;
+    }
+    public ProjectRecords getMasters(String id) {
+        ProjectRecords projectRecords = dao.getRuralProjectRecords(id);
+        List<User> users = workProjectUserDao.queryProjectUsers(projectRecords.getId(), "1");
+        projectRecords.setProjectLeaders(users);
+        return projectRecords;
+    }
+    @Transactional(readOnly = false)
+    public String saveData(Projectcontentinfo projectcontentinfo, int type) {
+        RuralProjectRecords ruralProjectRecords = projectcontentinfo.getProjectOnRural();
+        String count = "0";
+        String infoId = "";
+        Projectcontentinfo s = new Projectcontentinfo();
+        s.setParentIds("0,");
+        if (null==projectcontentinfo.getProjectReportDataTwo().getProject()){
+            projectcontentinfo.getProjectReportDataTwo().setProject(projectcontentinfo.getProject());
+        }
+        s.setProject(projectcontentinfo.getProjectReportDataTwo().getProject());
+        //根据项目id查询相关工作内容信息的数据 并将其存为父级数据
+        Projectcontentinfo contentinfo = projectcontentinfoDao.findListByProject(s).get(0);
+        projectcontentinfo.setProjectOnRural(this.getInfo(projectcontentinfo.getProject().getId()));
+        List<Workattachment> attachmentList = projectcontentinfo.getWorkAttachments();
+        if (projectcontentinfo.getProjectReportDataTwo()!=null){
+            //保存工作报告相关数据
+            ProjectReportDataTwo projectReportData = projectcontentinfo.getProjectReportDataTwo();
+            RuralProjectRecords projectRecords=ruralProjectRecordsService.get(projectcontentinfo.getProjectReportDataTwo().getProject().getId());
+            projectReportData.setCompanyId(contentinfo.getCompanyId());
+            projectReportData.setOfficeId(contentinfo.getOfficeId());
+            projectReportData.setProject(contentinfo.getProject());
+            if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportData.getId())){
+                projectReportData.setFileStatus("1");
+            }
+            if (type==1){
+                //暂存
+                projectReportData.setStatus("1");
+                String num = projectReportData.getNumber();
+                if(com.jeeplus.common.utils.StringUtils.isNotBlank(num)){
+                    projectReportNumService.updateNum(num);
+                }
+                projectReportDataService.save(projectReportData);
+            }else {
+                //送审
+                Map<String, Object> variables = Maps.newHashMap();
+                projectReportData.setStatus("2");
+                String processInstanceId = "";
+                //判断是否存在撤回
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(projectReportData.getId())){
+                    ProjectReportDataTwo old = projectReportDataService.get(projectReportData.getId());
+                    if (com.jeeplus.common.utils.StringUtils.isNotBlank(old.getProcessInstanceId())){
+                        processInstanceId = old.getProcessInstanceId();
+                    }
+                }
+                projectReportData.setConsultantDate(new Date());
+                projectReportData.setPrincipalDate(new Date());
+                //获取项目信息
+                ProjectRecords projectRecord = this.getMasters(projectcontentinfo.getProjectReportDataTwo().getProject().getId());
+                projectcontentinfo.setProject(projectRecord);
+                if (type == 2) {
+                    //启动流程
+                    String str = this.saveRuralProject(projectReportData, variables, processInstanceId, projectcontentinfo.getProject().getProjectLeaders());
+                    if (!str.equals("true")){
+                        return str;
+                    }
+                }
+            }
+            //修改项目开始时间和结束时间
+            System.out.println(ruralProjectRecords.getStartDate());
+            System.out.println(ruralProjectRecords.getEndingDate());
+            if(null != ruralProjectRecords.getStartDate() && null != ruralProjectRecords.getEndingDate()){
+                ruralProjectRecordsService.updateDate(ruralProjectRecords);
+            }
+
+            count="8";
+            infoId = projectReportData.getId();
+            contentinfo.setDictType(projectReportData.getType());
+//            contentinfo.setInfoId(projectReportData.getId());
+//            projectcontentinfoDao.updateInfoId(contentinfo);
+        }
+        //保存附件+tree
+        if (attachmentList!=null && attachmentList.size()!=0) {
+            //附件信息
+            for (Workattachment workattachment : attachmentList) {
+                if ("86".equals(workattachment.getAttachmentFlag())){
+                    workattachment.setDivIdType("_attachment");
+                } else if ("152".equals(workattachment.getAttachmentFlag())){
+                    workattachment.setDivIdType("_gistdata");
+                }else if ("153".equals(workattachment.getAttachmentFlag())){
+                    workattachment.setDivIdType("_other");
+                }
+                if (workattachment.getId() == null) {
+                    continue;
+                }
+                if (workattachment.DEL_FLAG_NORMAL.equals(workattachment.getDelFlag())) {
+                    workattachment.setAttachmentId(infoId);
+                    workattachment.setAttachmentUser(UserUtils.getUser().getId());
+                    if (com.jeeplus.common.utils.StringUtils.isBlank(workattachment.getId()) || "null".equals(workattachment.getId())) {
+                        workattachment.preInsert();
+                        if (null == workattachment.getDivIdType()){
+                            workattachment.setDivIdType("");
+                        }
+
+                        workattachmentDao.insert(workattachment);
+                        if (projectcontentinfo.getProjectReportDataTwo()!=null && com.jeeplus.common.utils.StringUtils.isNotBlank(projectcontentinfo.getProjectReportDataTwo().getId())) {
+                            try {
+                                signatureDocumentService.createIsignature(workattachment.getUrl(), workattachment.getAttachmentName(), workattachment.getId(), projectcontentinfo.getProjectReportDataTwo().getName());
+                            } catch (Exception e) {
+                                logger.info("PDF转换失败:" + e);
+                            }
+                        }
+                    } else {
+                        workattachment.preUpdate();
+                        workattachmentDao.update(workattachment);
+                    }
+                } else {
+                    workattachmentDao.delete(workattachment);
+                }
+            }
+        }
+        return "true";
+    }
+
+    public String getReportToJson(Projectcontentinfo projectcontentinfo){
+        RuralProjectcontentinfo info = new RuralProjectcontentinfo();
+        try {
+            MyBeanUtils.copyBeanNotNull2Bean(projectcontentinfo,info);//将编辑表单中的非NULL值覆盖数据库记录中的值
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+        Projectcontentinfo projectcontentinfo1 = projectcontentinfoService.getByProjectId(projectcontentinfo.getProject().getId());
+        String dictType = projectcontentinfo.getDictType();
+        RuralProjectRecords records = ruralProjectRecordsService.getQueryProjectUsers(projectcontentinfo1.getProject().getId());
+        info.setProject(records);
+        ProjectReportDataTwo projectReportData = new ProjectReportDataTwo();
+        projectReportData.setType(dictType);
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(projectcontentinfo1.getInfoId())){
+            projectReportData = projectReportDataService.get(projectcontentinfo1.getInfoId());
+        }else if (info.getProjectReportDataTwo()!=null && com.jeeplus.common.utils.StringUtils.isNotBlank(info.getProjectReportDataTwo().getId())) {
+            projectReportData = projectReportDataService.get(info.getProjectReportDataTwo().getId());
+        }else {
+            projectReportData.setNumber("");
+        }
+        if (projectReportData.getMaster()==null || com.jeeplus.common.utils.StringUtils.isBlank(projectReportData.getMaster().getId())){
+            projectReportData.setMaster(UserUtils.getUser());
+        }
+        if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportData.getStatus())){
+            projectReportData.setFileStatus("1");
+        }
+        info.setProjectReportDataTwo(projectReportData);
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
+        for (MainDictDetail mainDict:mainDictDetails) {
+            ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+            //添加项目类型
+            relateInfo.setProjectType("1");
+            //添加报告类型
+            relateInfo.setRequiredStage(1);
+            relateInfo.setId(records.getId());
+            relateInfo.setAttachType(mainDict.getValue());
+            switch(mainDict.getValue()){
+                case "11" :
+                    info.setFileAttachmentList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+                case "12" :
+                    info.setFileGistdataList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+                case "13" :
+                    info.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+            }
+        }
+
+        Gson gson = new Gson();
+        String toJson = gson.toJson(info);
+        return toJson;
+    }
+    /**
+     * 提交存储
+     * @param projectReportData
+     * @param variables
+     */
+    @Transactional(readOnly = false)
+    public String saveRuralProject(ProjectReportDataTwo projectReportData, Map<String, Object> variables, String processInstanceId, List<User> masters) {
+        User user = UserUtils.getUser();
+        Boolean insert = false;
+        if (StringUtils.isBlank(projectReportData.getId())){
+            projectReportData.preInsert();
+            insert = true;
+        }
+//        String num = projectReportData.getNumber();
+//        if(com.jeeplus.common.utils.StringUtils.isNotBlank(num)){
+//            projectReportNumService.updateNum(num);
+//        }
+        ProjectRecords projectRecords = dao.getRuralProjectRecords(projectReportData.getProject().getId());
+        Office recordsOffice =officeService.get(projectRecords.getOffice());
+        String title = "项目【"+projectRecords.getProjectName()+"】报告签发待审批";
+        String str =  "项目【"+projectRecords.getProjectName()+"】报告签发待审批";
+        // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+        identityService.setAuthenticatedUserId(user.getId());
+        // 启动流程
+        String businessKey = projectReportData.getId().toString();
+        WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("9764872f45b84acd893010e66a3db2c8", recordsOffice);
+        // 启动流程
+        String processType = workActivityMenu.getProcessType();
+        StringBuffer buffer = new StringBuffer();
+        Activity activity = new Activity();
+        WorkProjectNotify workProjectNotify = UtilNotify
+                .saveNotify(projectReportData.getId(),
+                        null,
+                        projectReportData.getCompanyId(),
+                        title,
+                        str,
+                        "97",
+                        "0",
+                        "待审批",
+                        ""
+                );
+        List<User> users = new ArrayList<>();
+
+        //总工
+        List<User> bzshbs = new ArrayList<>();
+        User bzshbsUser = UserUtils.get(projectReportData.getBzshbUserId());
+        if(null != bzshbsUser){
+            bzshbs.add(bzshbsUser);
+        }
+
+        if (insert) {
+            projectReportDataService.insert(projectReportData);
+        }else {
+            projectReportDataService.save(projectReportData);
+        }
+        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(),recordsOffice.getId(),"8",projectReportData.getCreateBy());
+                    if (enusers.size()==0){
+                        projectReportData.setStatus("1");
+                        projectReportDataService.save(projectReportData);
+                        return "流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+                    }
+                    variables.put(encount, enusers.size());
+                    variables.put(enlist, enusers);
+                }
+                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.getUser().getId())) {
+                    users.add(activity.getUser());
+                }
+                //角色审批
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                    users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),recordsOffice.getId(),"8",projectReportData.getCreateBy());
+                }
+            }
+            workProjectNotify.setId("");
+        } else {
+            if (bzshbs.size()==0 ){
+                projectReportData.setStatus("1");
+                projectReportDataService.save(projectReportData);
+            }
+            if (bzshbs.size()==0){
+                return "流程审批人不能为空,总工下无用户,请联系管理员!";
+            }
+            processType = "newReportAuditTwo";
+            users.addAll(bzshbs);
+            variables.put("bzshbList", bzshbs);
+            variables.put("bzshbcount", bzshbs.size());
+        }
+        for (User u : users){
+            workProjectNotify.setUser(u);
+            workProjectNotify.setNotifyRole("部门主任审批");
+            workProjectNotify.setId("");
+            workProjectNotifyService
+                    .save(workProjectNotify);
+            Map<String,Object> extras = new HashMap<>();
+            extras.put("type","7001");
+            extras.put("id",workProjectNotify.getId());
+            extras.put("procDefKey","97");
+            UserUtils.pushInfoToApp(title,str,extras,u.getId());
+            UserUtils.pushIm(u.getId(),str);
+        }
+        variables.put("type", processType);
+        variables.put("busId", businessKey);
+        variables.put("title", "审批单:" + projectReportData.getNumber());//设置标题;
+
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+        projectReportData.setProcessInstance(processInstance);
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(processInstanceId)) {
+            workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+            workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+            workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+        }
+        // 更新流程实例ID
+        projectReportData.setProcessInstanceId(processInstance.getId());
+        projectReportDataDao.updateProcessInstanceId(projectReportData);
+        //通知添加流程实例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.setProcessKey(processType);
+            workActivityProcess.setCount(1);
+            workActivityProcess.setProcessInstanceId(processInstance.getId());
+            workActivityProcess.setIsApproval("0");
+            workActivityProcessService.insert(workActivityProcess);
+            workActivityProcessService.insertAuditsByType(bzshbs,processInstance.getId(),1,1);
+        }
+        return "true";
+    }
+    /**
+     * 根据项目id 查询报告咨询员列表
+     * @param projectId
+     * @return
+     */
+    public List<RuralReportConsultant> getConsultantsList(String projectId){
+        List<RuralReportConsultant> list=projectcontentinfoDao.findByProjectId(projectId);
+        return list;
+    }
+    /**
+     * 根据用户查询技能信息
+     * @param projectId
+     * @return
+     */
+    public List<WorkStaffCertificate> getCertificateByUser(String userId){
+        List<WorkStaffCertificate> list=projectcontentinfoDao.getCertificateByUser(userId);
+        return list;
+    }
+
+    /**
+     * 审核流程
+     * @param reportData
+     */
+    @Transactional(readOnly = false)
+    public String auditSave(ProjectReportDataTwo reportData,List<User> auditUsers) {
+
+        if(StringUtils.isNotBlank(reportData.getConsultantRemarks())){
+            while (reportData.getConsultantRemarks().endsWith(",")){
+                reportData.setConsultantRemarks(reportData.getConsultantRemarks().substring(0,reportData.getConsultantRemarks().length()-1));
+            }
+        }
+        if(StringUtils.isNotBlank(reportData.getPrincipalRemarks())){
+            while(reportData.getPrincipalRemarks().endsWith(",")){
+                reportData.setPrincipalRemarks(reportData.getPrincipalRemarks().substring(0,reportData.getPrincipalRemarks().length()-1));
+            }
+        }
+        if(StringUtils.isNotBlank(reportData.getTechnicistRemarks())){
+            while(reportData.getTechnicistRemarks().endsWith(",")){
+                reportData.setTechnicistRemarks(reportData.getTechnicistRemarks().substring(0,reportData.getTechnicistRemarks().length()-1));
+            }
+        }
+        String flag = reportData.getAct().getFlag();
+        // 对不同环节的业务逻辑进行操作
+        Act act = reportData.getAct();
+        String taskDefKey = act.getTaskDefKey();
+        ProjectReportDataTwo projectReportData = null;
+        if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")  ) {
+            actTaskService.claim(act.getTaskId(), UserUtils.getUser().getId());
+            projectReportData = projectReportDataDao.get(reportData.getId());
+        }else {
+            projectReportData = reportData;
+            flag = "yes";
+        }
+        User user= UserUtils.get(projectReportData.getCreateBy().getId());
+        ProjectRecords projectRecords = projectRecordsService.getRuralMasters(projectReportData.getProject().getId());
+        Office recordsOffice =officeService.get(projectRecords.getOffice());
+        String title = "报告名称:"+projectReportData.getName();
+        String str =  "报告名称:"+projectReportData.getName()+",工作内容类型:"+ WorkContentTypeController.getContentTypeName(projectReportData.getType(),"")+",项目所属部门:"+recordsOffice.getName()+",负责人:"+user.getName();
+
+        if (com.jeeplus.common.utils.StringUtils.isBlank(act.getComment())){
+            act.setComment(flag.equals("yes")?"同意":"驳回");
+        }
+        String comment = "";
+        if (projectReportData.getStatus().equals("4")){
+            comment = ("yes".equals(flag)?"[重新申请] ":"[已撤销] ");
+        }else {
+            comment = ("yes".equals(flag)?"[同意] ":"[驳回] ")+act.getComment();
+        }
+        //yes 的时候状态为审核通过 否则为未通过
+        //1 审核中 2 未通过
+        projectReportData.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(projectReportData.getProcessInstanceId());
+        WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+        if (activitieList != null && activitieList.size() != 0) {
+            //判断上面act流程的流程图key是不是空  不是空则使用该流程图key信息
+            if(StringUtils.isNotBlank(act.getProcDefKey())){
+                workActivityMenu.setProcessType(act.getProcDefKey());
+            }else{
+                workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+            }
+            workActivityMenu.setActivities(activitieList);
+        }
+
+        WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+        WorkActivityProcess selectProcess = new WorkActivityProcess();
+        selectProcess.setProcessInstanceId(projectReportData.getProcessInstanceId());
+        List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+        List<Activity> activities = workActivityMenu.getActivities();
+        if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newReportAuditTwo")) {
+            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)) {
+                        workActivityProcess.setIsApproval("2");
+                        projectReportData.setStatus("4");
+                        String returnBack = "-1";
+                        for (Activity activity : activities) {
+                            if (activity.getCount() == activityProcess.getCount()) {
+                                returnBack = activity.getReturnBack();
+                                notifyRole = activity.getName();
+                                break;
+                            }
+                        }
+                        if (returnBack.equals("0")) {
+                            workActivityProcess.setId("");
+                        }
+
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                }else if(taskDefKey.equals("modifyApply")){
+                    notifyRole = "调整报告";
+                    taskCount = "0";
+                    exp = "pass";
+                    workActivityProcess.setId("");
+                    workActivityProcess.setCount(0);
+                    if (!"yes".equals(flag)) {
+                        projectReportData.setStatus("3");
+                        workActivityProcess.setIsApproval("2");
+                    } else {
+                        workActivityProcess.setIsApproval("1");
+                    }
+                    break;
+                }
+            }
+        } else {
+            workActivityMenu.setProcessType("newReportAuditTwo");
+            for (int i = 0; i < workActivityProcesses.size(); i++) {
+                WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+                String count = activityProcess.getCount() + "";
+                workActivityProcess = activityProcess;
+                if (!workActivityProcess.getIsApproval().equals("0")) {
+                    workActivityProcess.setId("");
+                }
+                // 审核环节
+                if ("bzshb".equals(taskDefKey) && count.contains("1")) {
+                    taskCount = "1";
+                    exp = "pass";
+                    if ("yes".equals(flag)) {
+                        projectReportData.setTechnicistDate(new Date());
+                        notifyRole = "审批通过";
+                        synchronized (SYN_BYTE) {
+                            //添加审核通过日期
+                            projectReportData.setAuditPassDate(new Date());
+                        }
+                        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 = "master";
+                    if (!"yes".equals(flag)) {
+                        projectReportData.setStatus("3");
+                    }
+                    break;
+                }
+            }
+        }
+        // 设置意见
+        act.setComment(("yes".equals(flag) ? "[同意] " : "[驳回] ") + act.getComment());
+        projectReportData.preUpdate();
+        // 提交流程任务
+        vars.put(exp, "yes".equals(flag) ? true : false);
+        vars.put("passs", true);
+        workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,projectReportData.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<>();
+        if (!state) {
+            users.add(projectReportData.getCreateBy());
+            if ("yes".equals(flag)) {
+                String titleStr = "项目【"+projectRecords.getProjectName()+"】报告签发审批通过";
+                String content = "项目【"+projectRecords.getProjectName()+"】报告签发审批通过,报告号:" + projectReportData.getNumber();
+                str =  "报告名称:"+projectReportData.getName()+",工作内容类型:"+ WorkContentTypeController.getContentTypeName(projectReportData.getType(),"")+",项目所属部门:"+recordsOffice.getName();
+                projectReportData.setStatus("5");
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportData.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                workProjectNotifyService
+                        .save(UtilNotify
+                                .saveNotify(projectReportData.getId(),
+                                        projectReportData.getCreateBy(),
+                                        projectReportData.getCompanyId(),
+                                        titleStr,
+                                        content,
+                                        "97",
+                                        "0",
+                                        "待通知",
+                                        notifyRole));
+
+            } else {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportData.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(projectReportData.getStatus()) && !projectReportData.getStatus().equals("3")){
+                    projectReportData.setStatus("4");
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(projectReportData.getId(),
+                                            projectReportData.getCreateBy(),
+                                            projectReportData.getCompanyId(),
+                                            title,
+                                            str,
+                                            "97",
+                                            "0",
+                                            "待通知",
+                                            notifyRole));
+                }
+            }
+            workActivityProcessService.deleteProcessIdAuditUsers(projectReportData.getProcessInstanceId());
+        } else {
+            if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newReportAuditTwo")) {
+                WorkProjectNotify notify = new WorkProjectNotify();
+                notify.setNotifyId(projectReportData.getId());
+                userList = workProjectNotifyService.readByNotifyId(notify);
+                WorkProjectNotify workProjectNotify = UtilNotify
+                        .saveNotify(projectReportData.getId(),
+                                new User(),
+                                projectReportData.getCompanyId(),
+                                title,
+                                str,
+                                "97",
+                                "0",
+                                "待审批",
+                                notifyRole);
+                List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+                        activities,
+                        workProjectNotify,
+                        taskDefKey,
+                        flag,
+                        taskCount,
+                        projectReportData.getCreateBy(),
+                        user.getOffice().getId(),
+                        "8");
+                for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+                    users.add(workProjectNotify1.getUser());
+                    workProjectNotify1.setId("");
+                    workProjectNotify1.setIsNewRecord(false);
+                    workProjectNotifyService
+                            .save(workProjectNotify1);
+                    if (!"modifyApply".equals(taskDefKey)){
+                        Map<String,Object> extras = new HashMap<>();
+                        if ("glyda".equals(taskDefKey)){
+                            extras.put("type","7003");
+                        }else if("zlfgld".equals(taskDefKey)  ){
+                            extras.put("type","7002");
+                        }else {
+                            extras.put("type","7001");
+                        }
+                        extras.put("id",workProjectNotify.getId());
+                        extras.put("procDefKey","97");
+                        UserUtils.pushInfoToApp(title,str,extras,workProjectNotify1.getUser().getId());
+
+                    }
+                }
+
+            } else {
+                if (!"yes".equals(flag)) {//报告驳回待办提醒
+                    title = "项目【"+ projectRecords.getProjectName()+"】报告签发被驳回";
+                    str = "项目【"+ projectRecords.getProjectName()+"】报告签发被驳回,请选择重新申请或删除报告";
+                    WorkProjectNotify notify = new WorkProjectNotify();
+                    notify.setNotifyId(projectReportData.getId());
+                    userList = workProjectNotifyService.readByNotifyId(notify);
+                    workProjectNotifyService
+                            .save(UtilNotify
+                                    .saveNotify(projectReportData.getId(),
+                                            projectReportData.getCreateBy(),
+                                            projectReportData.getCompanyId(),
+                                            title,
+                                            str,
+                                            "97",
+                                            "0",
+                                            "重新申请",
+                                            notifyRole));
+                    users.add( projectReportData.getCreateBy());
+                } else {
+                    if (com.jeeplus.common.utils.StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
+                        str = "项目【"+ projectRecords.getProjectName()+"】报告签发待审批";
+                        title = "项目【"+ projectRecords.getProjectName()+"】报告签发待审批";
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectReportData.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        WorkProjectNotify workProjectNotify = UtilNotify
+                                .saveNotify(projectReportData.getId(),
+                                        new User(),
+                                        projectReportData.getCompanyId(),
+                                        title,
+                                        str,
+                                        "97",
+                                        "0",
+                                        "待审批",
+                                        notifyRole);
+                        users.addAll(auditUsers);
+                        for (User user1 : users) {
+                            workProjectNotify.setUser(user1);
+                            workProjectNotify.setId("");
+                            workProjectNotify.setIsNewRecord(false);
+                            workProjectNotifyService
+                                    .save(workProjectNotify);
+                            if (!"modifyApply".equals(taskDefKey)){
+                                Map<String,Object> extras = new HashMap<>();
+                                if ("glyda".equals(taskDefKey)){
+                                    extras.put("type","7003");
+                                }else if("zlfgld".equals(taskDefKey)  ){
+                                    extras.put("type","7002");
+                                }else {
+                                    extras.put("type","7001");
+                                }
+                                extras.put("id",workProjectNotify.getId());
+                                extras.put("procDefKey","97");
+                                UserUtils.pushInfoToApp(title,str,extras,user1.getId());
+
+                            }
+                        }
+                    }else {
+                        WorkProjectNotify notify = new WorkProjectNotify();
+                        notify.setNotifyId(projectReportData.getId());
+                        userList = workProjectNotifyService.readByNotifyId(notify);
+                        users.add(projectReportData.getCreateBy());
+                        workProjectNotifyService
+                                .save(UtilNotify
+                                        .saveNotify(projectReportData.getId(),
+                                                projectReportData.getCreateBy(),
+                                                projectReportData.getCompanyId(),
+                                                title,
+                                                str,
+                                                "97",
+                                                "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());
+            }
+        }
+        if (!"yes".equals(flag)){
+            workReviewAuditDao.delReviewAudit(projectReportData.getId());
+        }
+        projectReportData.setTechnicist(reportData.getTechnicist());
+        projectReportData.setTechnicistRemarks(reportData.getTechnicistRemarks());
+        projectReportData.setConsultantRemarks(reportData.getConsultantRemarks());
+        projectReportData.setPrincipalRemarks(reportData.getPrincipalRemarks());
+        projectReportDataDao.update(projectReportData);
+
+        return "保存审核意见成功!";
+    }
+    /**
+     * 报告:强制撤销
+     * @param projectReportData
+     */
+    @Transactional(readOnly = false)
+    public void cancelInvalidate(ProjectReportDataTwo 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();
+            logger.error("Exception e:"+e);
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+
+    }
+    @Transactional(readOnly = false)
+    public void update(ProjectReportDataTwo projectReportData) {
+        projectReportData.preUpdate();
+        dao.updateRuralProjectReportDataTwo(projectReportData);
+        if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportData.getFileStatus())) {
+            projectReportData.setFileStatus("1");
+        }
+//        dao.updateFileStatusTwo(projectReportData);
+    }
+    /**
+     * 删除报告信息
+     * @param projectReportData
+     */
+    @Transactional(readOnly = false)
+    public void deleteReport(ProjectReportDataTwo projectReportData, List<ProjectTemplateInfo> attachmentList){
+        dao.deleteReportTwo(projectReportData);
+        //删除流程表信息
+        workProjectNotifyService.deleteActivityProcess(projectReportData.getProcessInstanceId());
+        //删除流程人员表信息
+        workProjectNotifyService.deleteActivityProcessUser(projectReportData.getProcessInstanceId());
+    }
+}

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

@@ -28,6 +28,7 @@ import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
 import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
 import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
 import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
 import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
 import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
@@ -320,7 +321,10 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         workProjectNotify.setType("96");
         //查询所有需要当前登录人进行处理的项目信息
         List<WorkProjectNotify> newReportNotifyList = workProjectNotifyService.findList(workProjectNotify);
-
+        //查询新的新增报告流程信息代办
+        workProjectNotify.setType("97");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newReportNotifyListTwo = workProjectNotifyService.findList(workProjectNotify);
         //查询新的归档流程信息代办
         workProjectNotify.setType("101");
         //查询所有需要当前登录人进行处理的项目信息
@@ -376,6 +380,19 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
                     break;
                 }
             }
+            //新代办流程2修改权限处理
+            for (WorkProjectNotify notify: newReportNotifyListTwo) {
+                if(notify.getNotifyId().equals(records1.getPrdtId())){
+                    records1.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records1.setNewReportNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records1.setNewReportAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
             //新代办修改权限处理
             for (WorkProjectNotify notify: newRecordNotifyList) {
                 if(notify.getNotifyId().equals(records1.getPrrId())){
@@ -465,6 +482,15 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         }
         //新增报告状态
         projectRecordTreeData.setProjectReportStatus(info.getProjectReportStatus());
+
+        //新增报告流程2状态
+        projectRecordTreeData.setProjectReportStatusTwo(info.getProjectReportStatusTwo());
+        //新增报告流程2id
+        projectRecordTreeData.setPrdtId(info.getPrdtId());
+        //新增报告流程2流程id
+        projectRecordTreeData.setPrdtProcessinstanceId(info.getPrdtProcessinstanceId());
+
+
         //线上归档状态
         projectRecordTreeData.setProjectReportRecordStatus(info.getProjectReportRecordStatus());
         //线下归档状态
@@ -919,6 +945,13 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         }
         return null;
     }
+    public ProjectReportDataTwo getProjectReportDateTwoByProjectId(String projectId){
+        if (StringUtils.isNotBlank(projectId)) {
+            ProjectReportDataTwo projectReportData = dao.getProjectReportDateTwoByProjectId(projectId);
+            return projectReportData;
+        }
+        return null;
+    }
 
 
     /**
@@ -1419,7 +1452,6 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         }
 
     }
-
     @Transactional(readOnly = false)
     public void update(ProjectReportData projectReportData) {
         projectReportData.preUpdate();

+ 36 - 4
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewController.java

@@ -252,6 +252,30 @@ public class RuralCostProjectMessageNewController extends BaseController {
             currentConsultant.setRole("负责人");
             consultants.add(currentConsultant);
         }
+        //总审
+        RuralReportConsultant zongshen = new RuralReportConsultant();
+        if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("reloadReport")){
+            List<WorkStaffCertificate> bzshbCertificateList = Lists.newArrayList();
+            if(StringUtils.isNotBlank(projectcontentinfo.getProjectReportData().getBzshbUserId())){
+                bzshbCertificateList = ruralProjectMessageService.getCertificateByUser(projectReportData.getBzshbUserId());
+            }
+            //获取专业类型
+            List<MainDictDetail> certificateMajor1 = DictUtils.getMainDictList("certificate_major");
+            for (WorkStaffCertificate certificateInfo: bzshbCertificateList) {
+                zongshen.setZhucezigezhID(certificateInfo.getNum());
+                zongshen.setZhucezigezhKey(certificateInfo.getName());
+                for (MainDictDetail type : certificateMajor1) {
+                    if(certificateInfo.getMajor().equals(type.getValue())){
+                        zongshen.setMajor(type.getLabel());
+                    }
+                }
+                User currentUser=userService.get(projectcontentinfo.getProjectReportData().getBzshbUserId());
+                zongshen.setZixunyuanName(currentUser.getName());
+                zongshen.setZixunyuan(currentUser.getId());
+                zongshen.setRole("技术咨询员");
+            }
+        }
+
         //根据项目id查找报告咨询员信息
         List<RuralReportConsultant> consultantList = ruralProjectMessageService.getConsultantsList(projectcontentinfo.getProjectId());
         //使用迭代器去除重复信息
@@ -259,7 +283,14 @@ public class RuralCostProjectMessageNewController extends BaseController {
         Iterator<RuralReportConsultant> it = consultantList.iterator();
         while(it.hasNext()){
             RuralReportConsultant consultant = it.next();
-            if(consultant.getZixunyuan().equals(currentConsultant.getZixunyuan())){
+            if(consultant.getZixunyuan().equals(zongshen.getZixunyuan())){
+                try {
+                    MyBeanUtils.copyBeanNotNull2Bean(consultant, zongshen);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                it.remove();
+            }else if(consultant.getZixunyuan().equals(currentConsultant.getZixunyuan())){
                 try {
                     MyBeanUtils.copyBeanNotNull2Bean(consultant, currentConsultant);
                 } catch (Exception e) {
@@ -519,10 +550,11 @@ public class RuralCostProjectMessageNewController extends BaseController {
                 if(reportData.getStatus().equals("2")){
                     addMessage(redirectAttributes, "报告已送审,请勿重复提交");
                     return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
-                } else if(reportData.getStatus().equals("5")){
-                    addMessage(redirectAttributes, "报告已审核完毕,请勿再次送审");
-                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
                 }
+//                else if(reportData.getStatus().equals("5")){
+//                    addMessage(redirectAttributes, "报告已审核完毕,请勿再次送审");
+//                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+//                }
             }
             String str = ruralProjectMessageService.saveData(projectcontentinfo,2);
             addMessage(redirectAttributes, "发起报告审批"+(str.equals("true")?"成功":"失败"));

+ 35 - 4
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewController.java

@@ -259,6 +259,29 @@ public class RuralProjectMessageNewController extends BaseController {
             currentConsultant.setRole("负责人");
             consultants.add(currentConsultant);
         }
+        RuralReportConsultant zongshen = new RuralReportConsultant();
+        if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("reloadReport")){
+            //总审
+            List<WorkStaffCertificate> bzshbCertificateList = Lists.newArrayList();
+            if(StringUtils.isNotBlank(projectcontentinfo.getProjectReportData().getBzshbUserId())){
+                bzshbCertificateList = ruralProjectMessageService.getCertificateByUser(projectReportData.getBzshbUserId());
+            }
+            //获取专业类型
+            List<MainDictDetail> certificateMajor1 = DictUtils.getMainDictList("certificate_major");
+            for (WorkStaffCertificate certificateInfo: bzshbCertificateList) {
+                zongshen.setZhucezigezhID(certificateInfo.getNum());
+                zongshen.setZhucezigezhKey(certificateInfo.getName());
+                for (MainDictDetail type : certificateMajor1) {
+                    if(certificateInfo.getMajor().equals(type.getValue())){
+                        zongshen.setMajor(type.getLabel());
+                    }
+                }
+                User currentUser=userService.get(projectcontentinfo.getProjectReportData().getBzshbUserId());
+                zongshen.setZixunyuanName(currentUser.getName());
+                zongshen.setZixunyuan(currentUser.getId());
+                zongshen.setRole("技术咨询员");
+            }
+        }
         //根据项目id查找报告咨询员信息
         List<RuralReportConsultant> consultantList = ruralProjectMessageService.getConsultantsList(projectcontentinfo.getProjectId());
         //使用迭代器去除重复信息
@@ -266,7 +289,14 @@ public class RuralProjectMessageNewController extends BaseController {
         Iterator<RuralReportConsultant> it = consultantList.iterator();
         while(it.hasNext()){
             RuralReportConsultant consultant = it.next();
-            if(consultant.getZixunyuan().equals(currentConsultant.getZixunyuan())){
+            if(consultant.getZixunyuan().equals(zongshen.getZixunyuan())){
+                try {
+                    MyBeanUtils.copyBeanNotNull2Bean(consultant, zongshen);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                it.remove();
+            }else if(consultant.getZixunyuan().equals(currentConsultant.getZixunyuan())){
                 try {
                     MyBeanUtils.copyBeanNotNull2Bean(consultant, currentConsultant);
                 } catch (Exception e) {
@@ -528,10 +558,11 @@ public class RuralProjectMessageNewController extends BaseController {
                 if(reportData.getStatus().equals("2")){
                     addMessage(redirectAttributes, "报告已送审,请勿重复提交");
                     return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
-                } else if(reportData.getStatus().equals("5")){
-                    addMessage(redirectAttributes, "报告已审核完毕,请勿再次送审");
-                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
                 }
+//                else if(reportData.getStatus().equals("5")){
+//                    addMessage(redirectAttributes, "报告已审核完毕,请勿再次送审");
+//                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+//                }
             }
             String str = ruralProjectMessageService.saveData(projectcontentinfo,2);
             if(str.equals("true") || str.equals("false")){

+ 705 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageNewTwoController.java

@@ -0,0 +1,705 @@
+package com.jeeplus.modules.ruralprojectrecords.web;
+
+import com.google.common.collect.Lists;
+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.projectAccessory.entity.ProjectAccessoryRelationInfo;
+import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
+import com.jeeplus.modules.projectAccessory.service.ProjectTemplateService;
+import com.jeeplus.modules.projectEngineering.service.ProjectEngineeringService;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo;
+import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
+import com.jeeplus.modules.projectcontentinfo.service.*;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecordsReported;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectcontentinfo;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralReportConsultant;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageNewService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageNewTwoService;
+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.User;
+import com.jeeplus.modules.sys.service.UserService;
+import com.jeeplus.modules.sys.utils.DictUtils;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
+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;
+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.bind.annotation.ResponseBody;
+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.Iterator;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping(value = "${adminPath}/ruralProject/ruralProjectMessageNewTwo")
+public class RuralProjectMessageNewTwoController  extends BaseController {
+    @Autowired
+    private RuralProjectRecordsService projectRecordsService;
+    @Autowired
+    private ProjectRecordsService projectRecordsServices;
+    @Autowired
+    private RuralProjectMessageNewTwoService ruralProjectMessageService;
+    @Autowired
+    private RuralProjectMessageService projectMessageService;
+    @Autowired
+    private ProjectReportDataTwoService projectReportDataService;
+    @Autowired
+    private ProjectReportDataService reportDataService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+    @Autowired
+    private ProjectReportChangeService projectReportChangeService;
+    @Autowired
+    protected HistoryService historyService;
+    @Autowired
+    private ActTaskService actTaskService;
+    @Autowired
+    private ProjectTemplateService projectTemplateService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private RuralProjectRecordsService ruralProjectRecordsService;
+    @Autowired
+    private ProjectcontentinfoDao projectcontentinfoDao;
+    @Autowired
+    private ProjectEngineeringService engineeringService;
+    @Autowired
+    private ProjectReportRecordService projectReportRecordService;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+    @ModelAttribute
+    public RuralProjectRecords get(@RequestParam(required=false) String id) {
+        RuralProjectRecords entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = projectRecordsService.get(id);
+        }
+        if (entity == null){
+            entity = new RuralProjectRecords();
+        }
+        return entity;
+    }
+    /**
+     * 跳转新增报告页面
+     * @param projectcontentinfo
+     * @param request
+     * @param response
+     * @param model
+     * @param attr
+     * @return
+     */
+    @RequestMapping(value = {"form"})
+    public String form(RuralProjectcontentinfo projectcontentinfo, Double reviewFee, HttpServletRequest request, HttpServletResponse response, Model model, RedirectAttributes attr) throws Exception {
+        //查询“配农网”工程类型id
+        String engineeringId = engineeringService.getEngineeringId("202");
+//        Projectcontentinfo projectcontentinfo1 = projectcontentinfoService.getByProjectId(projectcontentinfo.getProjectId());
+//        model.addAttribute("parentIds", projectcontentinfo1.getParentIds());
+        String dictType = projectcontentinfo.getDictType();
+        RuralProjectRecords records = projectRecordsService.getQueryProjectUsers(projectcontentinfo.getProjectId());
+
+        projectcontentinfo.setProject(records);
+        ProjectReportData data=reportDataService.getReportDataByProjectId(projectcontentinfo.getProject().getId());
+        projectcontentinfo.setProjectReportData(data);
+        ProjectReportDataTwo projectReportData =projectReportDataService.findTwoByProjectId(projectcontentinfo.getProjectId());
+        if (null == projectReportData){
+            projectReportData=new ProjectReportDataTwo();
+            projectReportData.setType(dictType);
+            projectReportData.setNumber("");
+        }else{
+            projectReportData.setType(dictType);
+            if (projectcontentinfo.getProjectReportDataTwo()!=null && StringUtils.isNotBlank(projectcontentinfo.getProjectReportDataTwo().getId())) {
+                projectReportData = projectReportDataService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            }
+            if (projectReportData.getMaster()==null || StringUtils.isBlank(projectReportData.getMaster().getId())){
+                projectReportData.setMaster(UserUtils.getUser());
+            }
+            if (StringUtils.isBlank(projectReportData.getStatus())){
+                projectReportData.setFileStatus("1");
+            }
+        }
+        if(null != reviewFee){
+            projectReportData.setReviewFee(String.valueOf(reviewFee));
+        }
+        projectcontentinfo.setProjectReportDataTwo(projectReportData);
+
+        ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+        //添加项目类型
+        relateInfo.setAttachmentProjectType(records.getProjectType());
+        relateInfo.setAttachmentProjectSort(records.getAttachmentProjectSort());
+        //判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+        String money=projectcontentinfo.getProject().getSubmitMoney();
+        Integer approvalMoney=null;
+        if(StringUtils.isBlank(money)){
+            approvalMoney=1;
+        }else{
+            approvalMoney=Integer.parseInt(money);
+        }
+        switch (approvalMoney){
+            case 0:
+                //金额为0
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+                break;
+            case 1:
+                //500w以下金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("1");
+                break;
+            case 2:
+                //500w以上金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("2");
+                break;
+        }
+
+        //添加报告类型
+        relateInfo.setRequiredStage(1);
+        relateInfo.setId(records.getId());
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
+        for (MainDictDetail mainDict : mainDictDetails) {
+            relateInfo.setAttachType(mainDict.getValue());
+            switch (mainDict.getValue()) {
+                case "11":
+                    List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateList(relateInfo);
+                    for (ProjectTemplateInfo info: fileAttachmentList) {
+                        info.setAttachTypes(info.getAttachTypes().toLowerCase());
+                        if(engineeringId.equals(records.getEngineeringType())){
+                            if("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName()) ){
+                                if(!info.getAttachTypes().contains("zip")){
+                                    info.setAttachTypes(info.getAttachTypes()+",zip");
+                                }
+                                if(!info.getAttachTypes().contains("rar")){
+                                    info.setAttachTypes(info.getAttachTypes()+",rar");
+                                }
+                            }
+                        }
+                    }
+                    projectcontentinfo.setFileAttachmentList(fileAttachmentList);
+                    break;
+                case "12":
+                    List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateList(relateInfo);
+                    for (ProjectTemplateInfo info: projectTemplateList) {
+                        info.setAttachTypes(info.getAttachTypes().toLowerCase());
+                        if(engineeringId.equals(records.getEngineeringType())){
+                            if("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName()) ){
+                                if(!info.getAttachTypes().contains("zip")){
+                                    info.setAttachTypes(info.getAttachTypes()+",zip");
+                                }
+                                if(!info.getAttachTypes().contains("rar")){
+                                    info.setAttachTypes(info.getAttachTypes()+",rar");
+                                }
+                            }
+                        }
+                    }
+                    projectcontentinfo.setFileGistdataList(projectTemplateList);
+                    break;
+                case "13":
+                    projectcontentinfo.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+            }
+
+        }
+
+        //查询总审人员信息
+        List<User> auditUserList = userService.getAuditUserList();
+        records.setBzshbUserList(auditUserList);
+        if(null == projectcontentinfo.getProjectReportDataTwo().getConsultant()){
+            projectcontentinfo.getProjectReportDataTwo().setConsultant(UserUtils.getUser());
+        }
+        if(null == projectcontentinfo.getProjectReportDataTwo().getPrincipal()){
+            projectcontentinfo.getProjectReportDataTwo().setPrincipal(UserUtils.getUser());
+        }
+        List<RuralReportConsultant> consultants = Lists.newArrayList();
+        //将自己添加到咨询员数据中
+        //根据用户查询技能信息
+        RuralReportConsultant currentConsultant = new RuralReportConsultant();
+        List<WorkStaffCertificate> userCertificateList = Lists.newArrayList();
+        if(StringUtils.isNotBlank(records.getProjectMasterId())){
+            userCertificateList = ruralProjectMessageService.getCertificateByUser(records.getProjectMasterId());
+        }
+        //获取专业类型
+        List<MainDictDetail> certificateMajor = DictUtils.getMainDictList("certificate_major");
+        for (WorkStaffCertificate certificateInfo: userCertificateList) {
+            currentConsultant.setZhucezigezhID(certificateInfo.getNum());
+            currentConsultant.setZhucezigezhKey(certificateInfo.getName());
+            for (MainDictDetail type : certificateMajor) {
+                if(certificateInfo.getMajor().equals(type.getValue())){
+                    currentConsultant.setMajor(type.getLabel());
+                }
+            }
+            User currentUser=userService.get(records.getProjectMasterId());
+            currentConsultant.setZixunyuanName(currentUser.getName());
+            currentConsultant.setZixunyuan(currentUser.getId());
+            currentConsultant.setRole("负责人");
+            consultants.add(currentConsultant);
+        }
+        //根据项目id查找报告咨询员信息
+        List<RuralReportConsultant> consultantList = ruralProjectMessageService.getConsultantsList(projectcontentinfo.getProjectId());
+        //使用迭代器去除重复信息
+        //排除 重新申请|撤销
+        Iterator<RuralReportConsultant> it = consultantList.iterator();
+        while(it.hasNext()){
+            RuralReportConsultant consultant = it.next();
+            if(consultant.getZixunyuan().equals(currentConsultant.getZixunyuan())){
+                try {
+                    MyBeanUtils.copyBeanNotNull2Bean(consultant, currentConsultant);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                it.remove();
+            }else{
+                //根据用户查询技能信息
+                List<WorkStaffCertificate> certificateList = ruralProjectMessageService.getCertificateByUser(consultant.getZixunyuan());
+                for (WorkStaffCertificate certificateInfo: certificateList) {
+                    if(certificateInfo.getName().equals(consultant.getZhucezigezhKey())){
+                        consultant.setZhucezigezhID(certificateInfo.getNum());
+                    }
+                    for (MainDictDetail type : certificateMajor) {
+                        if(certificateInfo.getMajor().equals(type.getValue())){
+                            consultant.setMajor(type.getLabel());
+                        }
+                    }
+                }
+                User user=userService.get(consultant.getZixunyuan());
+                consultant.setZixunyuanName(user.getName());
+            }
+        }
+        consultants.addAll(consultantList);
+        model.addAttribute("info", consultants);
+        //添加当前文件服务器类型
+        projectcontentinfo.setUploadMode(uploadMode);
+        model.addAttribute("projectRecords", records);
+        model.addAttribute("projectcontentinfo", projectcontentinfo);
+        model.addAttribute("projectReportDataTwo", projectcontentinfo.getProjectReportDataTwo());
+        if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().contains("report")) {
+            if(StringUtils.isNotBlank(projectReportData.getProcessInstanceId())){
+                Act act = getByAct(projectReportData.getProcessInstanceId());
+                projectReportData.setAct(act);
+            }
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModifyTwo";
+        }else if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().contains("costLiuReport")){
+            if(StringUtils.isNotBlank(projectReportData.getProcessInstanceId())){
+                Act act = getByAct(projectReportData.getProcessInstanceId());
+                projectReportData.setAct(act);
+            }
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModifyTwo";
+        }else if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().contains("costLiu")){
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportFormTwo";
+        }
+        if (projectReportData != null && projectReportData.getCreateBy() != null && StringUtils.isNotBlank(projectReportData.getCreateBy().getId()) && projectReportData.getCreateBy().getId().equals(UserUtils.getUser().getId())) {
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportFormTwo";
+        } else if (projectReportData == null || StringUtils.isBlank(projectReportData.getId())) {
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportFormTwo";
+        } else {
+            return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/reportView";
+        }
+    }
+
+    /**
+     * 新增报告信息
+     * @param projectcontentinfo
+     * @param model
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = {"saveReport"})
+    public String saveReport(Projectcontentinfo projectcontentinfo, Model model,RedirectAttributes redirectAttributes) {
+        try{
+            ProjectReportData data=reportDataService.getReportDataByProjectId(projectcontentinfo.getProject().getId());
+//            Projectcontentinfo projectcontentinfo1 = projectcontentinfoService.getByProjectId(projectcontentinfo.getProject().getId());
+            ProjectReportDataTwo reportData =projectReportDataService.findTwoByProjectId(projectcontentinfo.getProject().getId());
+            //将审核人员id放入报告信息中
+            if(StringUtils.isBlank(projectcontentinfo.getProjectReportDataTwo().getBzshbUserId())){
+                addMessage(redirectAttributes, "审核人员未选择,请重新发起请求");
+                if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiu")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                return "redirect:"+ Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+
+            }
+            if(null != reportData){
+                if(StringUtils.isBlank(projectcontentinfo.getProjectReportDataTwo().getBzshbUserId())){
+                    projectcontentinfo.getProjectReportDataTwo().setBzshbUserId(reportData.getBzshbUserId());
+                }
+                if(reportData.getStatus().equals("2")){
+                    addMessage(redirectAttributes, "报告已送审,请勿重复提交");
+                    if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiu")){
+                        return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                    }
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+                }
+//                else if(reportData.getStatus().equals("5")){
+//                    addMessage(redirectAttributes, "报告已审核完毕,请勿再次送审");
+//                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+//                }
+            }
+            String str = ruralProjectMessageService.saveData(projectcontentinfo,2);
+            if(str.equals("true") || str.equals("false")){
+                addMessage(redirectAttributes, "发起报告审批"+(str.equals("true")?"成功":"失败"));
+            } else{
+                addMessage(redirectAttributes, str);
+            }
+            ProjectReportDataTwo projectReportData = projectcontentinfo.getProjectReportDataTwo();
+            if (projectReportData!=null){
+                if (StringUtils.isNotBlank(projectcontentinfo.getEdit()) && projectcontentinfo.getEdit().equals("edit")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+                }else if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiu")){
+                     return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }
+        }catch (Exception e){
+            logger.error("ProjectcontentinfoController save Exception e"+e);
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        addMessage(redirectAttributes, "发起报告审批失败");
+        if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiu")){
+            return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+        }
+        return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+    }
+
+    /**
+     * 暂存报告信息
+     * @param projectcontentinfo
+     * @param model
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = {"holdSaveReport"})
+    public String holdSaveReport(Projectcontentinfo projectcontentinfo, Model model,RedirectAttributes redirectAttributes)  {
+        try{
+            String str = ruralProjectMessageService.saveData(projectcontentinfo,1);
+            addMessage(redirectAttributes, "暂存报告"+(str.equals("true")?"成功":"失败"));
+            ProjectReportDataTwo projectReportData = projectcontentinfo.getProjectReportDataTwo();
+            if (projectReportData!=null){
+                if (StringUtils.isNotBlank(projectcontentinfo.getEdit()) && projectcontentinfo.getEdit().equals("edit")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }
+        }catch (Exception e){
+            logger.error("ProjectcontentinfoController save Exception e"+e);
+        }
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        addMessage(redirectAttributes, "暂存报告失败");
+        ProjectRecords projectRecords = projectcontentinfo.getProject()==null?new ProjectRecords():projectcontentinfo.getProject();
+        return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+    }
+
+    //报告流程审批
+    @RequestMapping(value = {"reportAudit"})
+    public String reportAudit(Projectcontentinfo projectcontentinfo, HttpServletRequest request, HttpServletResponse response, Model model,
+                              RedirectAttributes redirectAttributes,Integer saveAuditFlag) throws Exception {
+        ProjectReportDataTwo projectReportData = projectcontentinfo.getProjectReportDataTwo();
+        if(StringUtils.isNotBlank(projectReportData.getProcessInstanceId())){
+            Act act = getByAct(projectReportData.getProcessInstanceId());
+            projectReportData.setAct(act);
+        }
+        ProjectReportDataTwo t = projectReportDataService.getOnRural(projectReportData.getId());//从数据库取出记录的值
+        if(null != saveAuditFlag){
+            if(1 == saveAuditFlag && !t.getStatus().equals("4") && !t.getStatus().equals("5")){
+                addMessage(redirectAttributes, "项目报告已送审,请勿重复送审");
+                if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiuReport")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }
+        }
+        if(t.getStatus().equals("5")){
+            addMessage(redirectAttributes, "项目报告已登记完成,无法再次送审");
+            if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiuReport")){
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+            }
+            return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+        }
+        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.setProjectReportDataTwo(t);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error("Exception e:"+e);
+        }
+        String taskDefKey =  t.getAct().getTaskDefKey();
+        List<User> users = null;
+        User auditUser = null;
+        ProjectRecords projectRecord = projectRecordsServices.getRuralMasters(projectcontentinfo.getProjectReportDataTwo().getProject().getId());
+        projectReportData.setProject(projectRecord);
+        if ("bmzr".equals(taskDefKey)){
+            users = UserUtils.getByProssType(t.getProcessInstanceId(),2);
+            if (users==null ) {
+                users = Lists.newArrayList();
+                //添加总审人员
+                auditUser = UserUtils.get(t.getBzshbUserId());
+                users.add(auditUser);
+            }
+            //users = UserUtils.getByRoleActivityEnname("bzshb",3,t.getOfficeId(),"12",t.getCreateBy());
+        }else if ("bzshb".equals(taskDefKey)){
+            users = UserUtils.getByProssType(t.getProcessInstanceId(),5);
+            if (users==null ) {
+                users = Lists.newArrayList();
+                //添加总审人员
+                auditUser = UserUtils.get(t.getBzshbUserId());
+                users.add(auditUser);
+            }
+            /*if (users==null )
+                users = UserUtils.getByRoleActivityEnname("gzr",3,t.getOfficeId(),"12",t.getCreateBy());/*users = UserUtils.getByRoleActivityEnname("gzr",3,t.getOfficeId(),"12",t.getCreateBy());
+        }else if ("gzr".equals(taskDefKey)){
+            users = UserUtils.getByProssType(t.getProcessInstanceId(),5);
+            if (users==null )
+                users = UserUtils.getByRoleActivityEnname("gzr",3,t.getOfficeId(),"12",t.getCreateBy());*/
+        }else if ("modifyApply".equals(taskDefKey)){
+            users = UserUtils.getByProssType(t.getProcessInstanceId(),1);
+        }
+        String flag = t.getAct().getFlag();
+        if ("yes".equals(flag) && (users==null || users.size()==0)){
+            addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+        }else {
+            if ("modifyApply".equals(taskDefKey)){
+                ruralProjectMessageService.saveData(projectcontentinfo,3);
+            }
+            //添加查询报告号模板的bizCode参数
+            if("1".equals(projectRecord.getProjectType())){
+                t.setConditionType("10");
+            }else if("2".equals(projectRecord.getProjectType())){
+                t.setConditionType("1003");
+            }
+            String str = ruralProjectMessageService.auditSave(t, users);
+            addMessage(redirectAttributes, str);
+        }
+        if (StringUtils.isNotBlank(projectcontentinfo.getHome()) && projectcontentinfo.getHome().equals("home")){
+            return "redirect:" + Global.getAdminPath() + "/home/?repage";
+        }else if (StringUtils.isNotBlank(projectcontentinfo.getHome()) && "notifyList".equals(projectcontentinfo.getHome())){
+            return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+        }else {
+            if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiuReport")){
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+            }
+            if("1".equals(projectRecord.getProjectType())){
+                return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+            }
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?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;
+    }
+
+    /**
+     * 判断是否含有报告信息
+     * @param id
+     * @return
+     */
+    @RequestMapping("/getReportExist")
+    @ResponseBody
+    public Map<String,String> getReportExist(String id){
+        Map map = new HashMap();
+//        Projectcontentinfo projectcontentinfo1 = projectcontentinfoService.getByProjectId(id);
+        ProjectReportDataTwo projectReportData = projectReportDataService.findTwoByProjectId(id);
+//        ProjectReportDataTwo projectReportData = projectReportDataService.getOnRural(projectcontentinfo1.getInfoId());
+        if(null != projectReportData){
+            map.put("success",true);
+        }else{
+            map.put("success",false);
+        }
+        return map;
+    }
+    /**
+     * 读取单个实体流程
+     * @return
+     */
+    @RequestMapping(value = "getProcessOne")
+    public String getProcessOne(Projectcontentinfo projectcontentinfo,String type,Model model) {
+        ProjectReportDataTwo projectReportDataInfo = projectMessageService.getProjectReportDateTwoByProjectId(projectcontentinfo.getId());
+        projectcontentinfo.setProjectReportDataTwo(projectReportDataInfo);
+        if ("2".equals(type)){          //审批中流程
+            ProjectReportDataTwo projectReportData = projectReportDataService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            model.addAttribute("processInstanceId", projectReportData.getProcessInstanceId());
+        }else if("3".equals(type)){     //变更中流程
+            ProjectReportData projectReportData = projectReportChangeService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            model.addAttribute("processInstanceId", projectReportData.getProcessInstanceId());
+        } else if("8".equals(type)){         //变更中流程
+            ProjectReportDataTwo projectReportData = projectReportDataService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            model.addAttribute("processInstanceId", projectReportData.getUpId());
+        }else if("6".equals(type) || "7".equals(type)){      //作废流程
+            ProjectReportDataTwo projectReportData = projectReportDataService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            model.addAttribute("processInstanceId", projectReportData.getInvalidProcessInstanceId());
+        }else if("5".equals(type)){
+            ProjectReportDataTwo projectReportData = projectReportDataService.get(projectcontentinfo.getProjectReportDataTwo().getId());
+            if(projectReportData.getUpId() != null){
+                model.addAttribute("processInstanceId", projectReportData.getUpId());
+            }else {
+                model.addAttribute("processInstanceId", projectReportData.getProcessInstanceId());
+            }
+        }
+        return "modules/workreimbursement/workReimbursementTrack";
+    }
+    @RequestMapping(value = "revoke")
+    public String revoke(HttpServletRequest request, RedirectAttributes redirectAttributes) throws Exception {
+        HashMap<String, String> requestMap = findRequestMap(request);
+        String processInstanceId = requestMap.get("processInstanceId");
+        String view = requestMap.get("view");
+        String id = requestMap.get("id");
+        try {
+            RuralProjectRecords projectRecords = ruralProjectMessageService.get(id);
+            if(3==projectRecords.getProjectReportStatusTwo() || 4==projectRecords.getProjectReportStatusTwo()){
+                addMessage(redirectAttributes, "项目报告已撤回、驳回,请勿重复操作");
+                if (StringUtils.isNotBlank(view) && view.equals("costLiu")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }else if(5==projectRecords.getProjectReportStatusTwo()){
+                addMessage(redirectAttributes, "项目报告已审批通过,无法撤回");
+                if (StringUtils.isNotBlank(view) && view.equals("costLiu")){
+                    return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralProjectMessage/?repage";
+            }
+            ProjectReportDataTwo projectReportDateByProjectId = projectMessageService.getProjectReportDateTwoByProjectId(projectRecords.getId());
+            ruralProjectMessageService.cancelInvalidate(projectReportDateByProjectId);
+            addMessage(redirectAttributes, "撤回该项目报告成功");
+        }catch (Exception e){
+            logger.info(e.getMessage());
+            addMessage(redirectAttributes, "撤回该项目报告失败");
+        }
+        if (StringUtils.isNotBlank(view) && view.equals("costLiu")){
+            return "redirect:"+Global.getAdminPath()+"/ruralProject/ruralCostProjectMessage/?repage";
+        }
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+    }
+    /**
+     * 删除报告信息
+     * @param projectcontentinfo
+     * @return
+     */
+    @RequestMapping(value = "deleteReport")
+    public String deleteReport(RuralProjectcontentinfo projectcontentinfo, RedirectAttributes redirectAttributes) {
+        ProjectReportDataTwo projectReportData = projectReportDataService.findTwoByProjectId(projectcontentinfo.getProjectId());
+
+        //获取项目信息
+        RuralProjectRecords records = projectRecordsService.getQueryProjectUsers(projectReportData.getProject().getId());
+        //判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
+        //Integer projectSort = projectAccessoryRelationService.decideAttachmentProjectSort(records.getAttachmentProjectSort());
+        List<ProjectTemplateInfo> attachmentList = Lists.newArrayList();
+        /*Boolean flag = false;
+        //如果是打包项目或者报告送审价不为null则可进行查询附件类型
+        if(1 == projectSort || null != projectReportData.getReviewFee()){
+            flag = true;
+        }
+        if(flag) {*/
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
+        ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+        //添加项目类型
+        relateInfo.setAttachmentProjectType(records.getProjectType());
+        relateInfo.setRequiredStage(1);
+        relateInfo.setId(records.getId());
+        relateInfo.setAttachmentProjectSort(records.getAttachmentProjectSort());
+        //判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+        //if(0 == projectSort){
+        //查看送审金额是否为500w以上金额
+//                Integer approvalMoney = projectAccessoryRelationService.decideAttachmentProjectApprovalMoney(projectReportData.getReviewFee());
+//        approvalMoney = 2;
+        String money=records.getSubmitMoney();
+        Integer approvalMoney=null;
+        if(StringUtils.isBlank(money)){
+            approvalMoney=1;
+        }else{
+            approvalMoney=Integer.parseInt(money);
+        }
+        switch (approvalMoney){
+            case 0:
+                //金额为0
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+                break;
+            case 1:
+                //500w以下金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("1");
+                break;
+            case 2:
+                //500w以上金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("2");
+                break;
+        }
+            /*}else{
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+            }*/
+        for (MainDictDetail mainDict : mainDictDetails) {
+            //添加报告类型
+            relateInfo.setAttachType(mainDict.getValue());
+            attachmentList.addAll(projectTemplateService.getProjectTemplateList(relateInfo));
+        }
+        //}
+
+
+        if(null != projectReportData){
+            //删除报告信息
+            ruralProjectMessageService.deleteReport(projectReportData,attachmentList);
+        }
+        addMessage(redirectAttributes, "删除成功");
+        if (StringUtils.isNotBlank(projectcontentinfo.getView()) && projectcontentinfo.getView().equals("costLiu")){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+    }
+
+
+}

+ 181 - 9
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -49,14 +49,8 @@ import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatchProInfo;
 import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingBatchTree;
 import com.jeeplus.modules.projectFilingBatch.entity.ProjectFilingbatchRelation;
 import com.jeeplus.modules.projectFilingBatch.service.ProjectFilingBatchService;
-import com.jeeplus.modules.projectcontentinfo.entity.ProjectContentData;
-import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
-import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
-import com.jeeplus.modules.projectcontentinfo.entity.Projectcontentinfo;
-import com.jeeplus.modules.projectcontentinfo.service.ProjectReportChangeService;
-import com.jeeplus.modules.projectcontentinfo.service.ProjectReportDataService;
-import com.jeeplus.modules.projectcontentinfo.service.ProjectReportRecordService;
-import com.jeeplus.modules.projectcontentinfo.service.ProjectcontentinfoService;
+import com.jeeplus.modules.projectcontentinfo.entity.*;
+import com.jeeplus.modules.projectcontentinfo.service.*;
 import com.jeeplus.modules.projectrecord.entity.ProjectFollowReport;
 import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
@@ -380,6 +374,8 @@ public class WorkProjectNotifyController extends BaseController {
 	@Autowired
 	private ProjectReportDataService projectReportDataService;
 	@Autowired
+	private ProjectReportDataTwoService projectReportDataTwoService;
+	@Autowired
 	private ProjectcontentinfoService projectcontentinfoService;
 	@Autowired
 	private ProjectReportChangeService projectReportChangeService;
@@ -2816,7 +2812,183 @@ public class WorkProjectNotifyController extends BaseController {
 						projectcontentinfo.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileOtherList()));
 						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageView";
 					}
-				} else if (workProjectNotify.getType().equals("46")) {    //工作内容报告变更
+				}else if (workProjectNotify.getType().equals("97")) {    //工作内容报告new流程2
+					//查询“配农网”工程类型id
+					String engineeringId = engineeringService.getEngineeringId("202");
+
+					ProjectReportDataTwo projectReportDataTwo = projectReportDataTwoService.getOnRural(workProjectNotify.getNotifyId());
+					RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.getQueryProjectUsers(projectReportDataTwo.getProject().getId());
+					ProjectReportData data=projectReportDataService.getReportDataByProjectId(projectReportDataTwo.getProject().getId());
+					if (StringUtils.isBlank(ruralProjectRecords.getProjectMasterId())) {
+						ruralProjectRecords.setProjectMasterId(projectReportDataTwo.getPrincipal().getId());
+						ruralProjectRecords.setProjectMasterName(projectReportDataTwo.getPrincipal().getName());
+					}
+					Act act = getByAct(projectReportDataTwo.getProcessInstanceId());
+					projectReportDataTwo.setAct(act);
+					Projectcontentinfo projectcontentinfo = new Projectcontentinfo();
+					projectcontentinfo.setProjectReportData(data);
+					projectcontentinfo.setProjectReportDataTwo(projectReportDataTwo);
+					//添加当前文件服务器类型
+					projectcontentinfo.setUploadMode(uploadMode);
+					List<MainDictDetail> achievementTypes = DictUtils.getMainDictList("achievement_type");
+					if (null != achievementTypes) {
+						for (MainDictDetail achievementType : achievementTypes) {
+							if (achievementType.getValue().equals(projectReportDataTwo.getAchievementType())) {
+								projectReportDataTwo.setAchievementType(achievementType.getLabel());
+								break;
+							}
+						}
+					}
+					//根据条件查询附件必填项
+					//判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
+					ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+					//添加项目类型
+					relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+					relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
+					String money = ruralProjectRecords.getSubmitMoney();
+					Integer approvalMoney = null;
+					if (StringUtils.isBlank(money)) {
+						approvalMoney = 1;
+					} else {
+						approvalMoney = Integer.parseInt(money);
+					}
+					switch (approvalMoney) {
+						case 0:
+							//金额为0
+							relateInfo.setAttachmentProjectApprovalMoney(null);
+							break;
+						case 1:
+							//500w以下金额状态
+							relateInfo.setAttachmentProjectApprovalMoney("1");
+							break;
+						case 2:
+							//500w以上金额状态
+							relateInfo.setAttachmentProjectApprovalMoney("2");
+							break;
+					}
+
+					//添加报告类型
+					relateInfo.setRequiredStage(1);
+					relateInfo.setId(ruralProjectRecords.getId());
+					//查询报告文件、依据性文件、其他文件必填列表以及数据
+					List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
+					for (MainDictDetail mainDict : mainDictDetails) {
+						relateInfo.setAttachType(mainDict.getValue());
+						switch (mainDict.getValue()) {
+							case "11":
+								List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateList(relateInfo);
+								for (ProjectTemplateInfo info : fileAttachmentList) {
+									info.setAttachTypes(info.getAttachTypes().toLowerCase());
+									if (engineeringId.equals(ruralProjectRecords.getEngineeringType())) {
+										if ("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName())) {
+											if (!info.getAttachTypes().contains("zip")) {
+												info.setAttachTypes(info.getAttachTypes() + ",zip");
+											}
+											if (!info.getAttachTypes().contains("rar")) {
+												info.setAttachTypes(info.getAttachTypes() + ",rar");
+											}
+										}
+									}
+								}
+								projectcontentinfo.setFileAttachmentList(fileAttachmentList);
+								break;
+							case "12":
+								List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateList(relateInfo);
+								for (ProjectTemplateInfo info : projectTemplateList) {
+									info.setAttachTypes(info.getAttachTypes().toLowerCase());
+									if (engineeringId.equals(ruralProjectRecords.getEngineeringType())) {
+										if ("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName())) {
+											if (!info.getAttachTypes().contains("zip")) {
+												info.setAttachTypes(info.getAttachTypes() + ",zip");
+											}
+											if (!info.getAttachTypes().contains("rar")) {
+													info.setAttachTypes(info.getAttachTypes() + ",rar");
+											}
+										}
+									}
+								}
+								projectcontentinfo.setFileGistdataList(projectTemplateList);
+								break;
+							case "13":
+								projectcontentinfo.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
+								break;
+						}
+
+					}
+					if (StringUtils.isNotBlank(workProjectNotify.getHome())) {
+						projectcontentinfo.setHome(workProjectNotify.getHome());
+					} else {
+						projectcontentinfo.setHome("home");
+					}
+					//获取子项目列表信息
+					List<SubProjectInfo> subProjectInfos = this.queryReportDetails(projectReportDataTwo.getProject().getId());
+					//获取合同信息
+					WorkContractInfo workContractInfo = this.queryWorkContract(projectReportDataTwo.getProject().getId());
+					//收费标准
+					//查询合同对应委托方客户信息
+					if (null != workContractInfo) {
+						WorkClientInfo clientInfo = workClientInfoService.get(workContractInfo.getClient().getId());
+						model.addAttribute("workClientInfo", clientInfo);
+						if (StringUtils.isNotBlank(workContractInfo.getChargeCriterion())) {
+							//收费标准
+							String[] biao = workContractInfo.getChargeCriterion().split(",");
+							List<String> chargeCriterionList = new ArrayList<>();
+							for (int i = 0; i < biao.length; i++) {
+								chargeCriterionList.add(biao[i]);
+							}
+							projectcontentinfo.setChargeCriterionList(chargeCriterionList);
+						}
+					}
+					RuralProjectRecords projectRecordPlans = this.planView(projectReportDataTwo.getProject().getId());
+					model.addAttribute("processInstanceId", projectReportDataTwo.getProcessInstanceId());
+					model.addAttribute("projectId", projectReportDataTwo.getProject().getId());
+//					model.addAttribute("id", projectcontentinfo.getId());
+					model.addAttribute("projectcontentinfo", projectcontentinfo);
+					model.addAttribute("projectRecords", ruralProjectRecords);
+					model.addAttribute("subProjectInfos", subProjectInfos);
+					model.addAttribute("workContractInfo", workContractInfo);
+					model.addAttribute("projectRecordPlans", projectRecordPlans);
+					WorkReviewAudit workReviewAudit = new WorkReviewAudit();
+					String type = "";
+					if ("master".equals(act.getTaskDefKey())) {
+						type = "2";
+					} else if ("bmzr".equals(act.getTaskDefKey())) {
+						type = "3";
+					} else if ("bzshbyg".equals(act.getTaskDefKey())) {
+						type = "4";
+					} else if ("bzshb".equals(act.getTaskDefKey())) {
+						if (null == projectReportDataTwo.getTechnicist())
+							projectReportDataTwo.setTechnicist(UserUtils.getUser());
+						type = "4";
+					}
+					model.addAttribute("projectReportDataTwo", projectReportDataTwo);
+					workReviewAudit.setCompanyId(UserUtils.getSelectCompany().getId());
+					workReviewAudit.setType(type);	
+					workReviewAudit.setReportId(workProjectNotify.getNotifyId());
+					List<WorkReviewAudit> workReviewAudits = workReviewStandardService.findAuditList(workReviewAudit);
+					model.addAttribute("type", type);
+					model.addAttribute("list", workReviewAudits);
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+						projectcontentinfo.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileAttachmentList()));
+						projectcontentinfo.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileGistdataList()));
+						projectcontentinfo.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileOtherList()));
+						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageTwoView";
+					} else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						projectcontentinfo.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileAttachmentList()));
+						projectcontentinfo.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileGistdataList()));
+						projectcontentinfo.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileOtherList()));
+						model.addAttribute("identification", "projectReportData");
+						model.addAttribute("identificationName", "报告审核意见");
+						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageAuditTwo";
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModifyTwo";
+					} else {
+						projectcontentinfo.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileAttachmentList()));
+						projectcontentinfo.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileGistdataList()));
+						projectcontentinfo.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectcontentinfo.getFileOtherList()));
+						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageTwoView";
+					}
+				}else if (workProjectNotify.getType().equals("46")) {    //工作内容报告变更
 					ProjectReportData projectReportData = projectReportChangeService.get(workProjectNotify.getNotifyId());
 					Act act = getByAct(projectReportData.getProcessInstanceId());
 					projectReportData.setAct(act);

+ 17 - 4
src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataDao.xml

@@ -52,7 +52,8 @@
 		a.principal_date as "principalDate",
 		a.technicist_date as "technicistDate",
 		a.contract_category as "contractCategory",
-		a.contract_rate as "contractRate"
+		a.contract_rate as "contractRate",
+		a.ZiXunShouRu as "ZiXunShouRu"
 	</sql>
 
 	<sql id="projectReportDataJoins">
@@ -560,7 +561,8 @@
 			principal_date,
 			technicist_date,
 			contract_category,
-			contract_rate
+			contract_rate,
+			ZiXunShouRu
 		) VALUES (
 			#{id},
 			#{createBy.id},
@@ -676,7 +678,15 @@
 			#{principalDate},
 			#{technicistDate},
 			#{contractCategory},
-			#{contractRate}
+			#{contractRate},
+			<choose>
+				<when test="ZiXunShouRu != null and ZiXunShouRu !=''">
+					#{ZiXunShouRu}
+				</when>
+				<otherwise>
+					0
+				</otherwise>
+			</choose>
 		)
 	</insert>
 
@@ -824,7 +834,10 @@
 		technicist_id = #{technicist.id},
 		technicist_remarks = #{technicistRemarks},
 		contract_category = #{contractCategory},
-		contract_rate = #{contractRate}
+		contract_rate = #{contractRate},
+		<if test="ZiXunShouRu != null and ZiXunShouRu != ''">
+			ZiXunShouRu = #{ZiXunShouRu}
+		</if>
 		WHERE id = #{id}
 	</update>
 

+ 794 - 0
src/main/resources/mappings/modules/projectcontentinfo/ProjectReportDataTwoDao.xml

@@ -0,0 +1,794 @@
+<?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.projectcontentinfo.dao.ProjectReportDataTwoDao">
+
+	<sql id="projectReportDataColumns">
+		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.company_id AS "companyId",
+		a.office_id AS "officeId",
+		a.project_id AS "project.id",
+		a.status AS "status",
+		a.process_instance_id AS "processInstanceId",
+		a.audit_pass_date AS "auditPassDate"
+	</sql>
+	<sql id="projectReportDataColumns1">
+		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.company_id AS "companyId",
+		a.office_id AS "officeId",
+		a.project_id AS "project.id",
+		a.name AS "name",
+		a.number AS "number",
+		a.type AS "type",
+		a.achievement_type AS "achievementType",
+		a.review_standard AS "reviewStandard",
+		a.sign_cost_one AS "signCostOne.id",
+		a.sign_cost_two AS "signCostTwo.id",
+		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",
+		a.process_instance_id AS "processInstanceId",
+		a.invalid_process_instance_id AS "invalidProcessInstanceId",
+		m.name AS "master.name",
+		a.number_path as "numberPath",
+		a.update_process_instance_id as "upId",
+		a.review_fee AS "reviewFee",
+		a.approval_fee AS "approvalFee",
+		a.contract_fee AS "contractFee",
+		a.verify_fee AS "verifyFee",
+		a.verify_rate AS "verifyRate",
+		a.consult_fee AS "consultFee",
+		a.building_fee AS "buildingFee",
+		a.install_fee AS "installFee",
+		a.building_rate as "buildingRate",
+		a.install_rate as "installRate",
+		a.consultant_id as "consultant.id",
+		a.consultant_remarks as "consultantRemarks",
+		a.principal_id as "principal.id",
+		a.principal_remarks as "principalRemarks",
+		a.technicist_id as "technicist.id",
+		a.technicist_remarks as "technicistRemarks",
+		a.consultant_date as "consultantDate",
+		a.principal_date as "principalDate",
+		a.technicist_date as "technicistDate",
+		a.contract_category as "contractCategory",
+		a.contract_rate as "contractRate"
+	</sql>
+
+	<sql id="projectReportDataJoins">
+		LEFT JOIN sys_user m ON m.id = a.master
+	</sql>
+
+
+	<select id="get" resultType="ProjectReportDataTwo" >
+		SELECT
+			<include refid="projectReportDataColumns"/>
+			,a.bzshb_user_id as "bzshbUserId"
+		FROM project_report_data_two a
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findByNum" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		WHERE a.number = #{number}
+	</select>
+	<select id="getNoInvalid" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="getNumber" resultType="ProjectReportDataTwo" >
+		SELECT
+		a.id AS "id",
+		a.number AS "number"
+		FROM project_report_data a
+		WHERE
+		a.del_flag = #{DEL_FLAG_NORMAL}
+		AND a.project_id = #{project.id}
+		ORDER BY a.number DESC
+		limit 1
+	</select>
+	<select id="getChangeId" resultType="java.lang.String" >
+		SELECT
+		a.id AS "id"
+		FROM project_report_change a
+		WHERE
+		a.del_flag = '0'
+		AND a.report_id = #{id}
+		ORDER BY a.before_count DESC
+		limit 1
+	</select>
+
+<!--	<select id="findList" resultType="ProjectReportDataTwo" >-->
+<!--		SELECT-->
+<!--			<include refid="projectReportDataColumns"/>-->
+<!--		FROM project_report_data_two a-->
+<!--		<include refid="projectReportDataJoins"/>-->
+<!--		<where>-->
+<!--			a.del_flag = #{DEL_FLAG_NORMAL}-->
+<!--			<if test="project != null and project.id != null and project.id != ''">-->
+<!--				AND a.project_id = #{project.id}-->
+<!--			</if>-->
+<!--			<if test="type != null and type != ''">-->
+<!--				AND a.type = #{type}-->
+<!--			</if>-->
+<!--			<if test="name != null and name != ''">-->
+<!--				AND a.name like-->
+<!--				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>-->
+<!--				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>-->
+<!--			</if>-->
+<!--			<if test="number != null and number != ''">-->
+<!--				AND a.number = #{number}-->
+<!--			</if>-->
+<!--			<if test="status != null and status != ''">-->
+<!--				AND a.status = #{status}-->
+<!--			</if>-->
+<!--			<if test="master!=null and master.id != null and master.id != ''">-->
+<!--				AND a.master = #{master.id}-->
+<!--			</if>-->
+<!--			<if test="startDate != null and startDate != ''">-->
+<!--				AND a.report_date &gt;= #{startDate}-->
+<!--			</if>-->
+<!--			<if test="endDate != null and endDate != ''">-->
+<!--				AND a.report_date &lt;= #{endDate}-->
+<!--			</if>-->
+<!--		</where>-->
+<!--		<choose>-->
+<!--			<when test="page !=null and page.orderBy != null and page.orderBy != ''">-->
+<!--				ORDER BY ${page.orderBy}-->
+<!--			</when>-->
+<!--			<otherwise>-->
+<!--				ORDER BY a.update_date DESC-->
+<!--			</otherwise>-->
+<!--		</choose>-->
+<!--	</select>-->
+
+	<select id="findListOnRural" resultType="RuralProjectReportData" >
+		SELECT
+			<include refid="projectReportDataColumns"/>
+		FROM project_report_data a
+		<include refid="projectReportDataJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="project != null and project.id != null and project.id != ''">
+				AND a.project_id = #{project.id}
+			</if>
+			<if test="type != null and type != ''">
+				AND a.type = #{type}
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name like
+				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+			<if test="master!=null and master.id != null and master.id != ''">
+				AND a.master = #{master.id}
+			</if>
+			<if test="startDate != null and startDate != ''">
+				AND a.report_date &gt;= #{startDate}
+			</if>
+			<if test="endDate != null and endDate != ''">
+				AND a.report_date &lt;= #{endDate}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findInfoList" resultType="ProjectReportDataTwo" >
+		SELECT
+			<include refid="projectReportDataColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		o.top_company AS "officeName",
+		uo.name AS "signCostOne.name",
+		ut.name AS "signCostTwo.name",
+		r.project_name AS "project.projectName",
+		r.project_id AS "project.projectId"
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_user uo ON uo.id = a.sign_cost_one
+		LEFT JOIN sys_user ut ON ut.id = a.sign_cost_two
+		LEFT JOIN project_records r ON r.id = a.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.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="project != null and project.id != null and project.id != ''">
+				AND a.project_id = #{project.id}
+			</if>
+			<if test="type != null and type != ''">
+				AND a.type = #{type}
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name like
+				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number like
+				<if test="dbName == 'oracle'">'%'||#{number}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{number}, '%')</if>
+			</if>
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+			<if test="achievementType != null and achievementType != ''">
+				AND a.achievement_type = #{achievementType}
+			</if>
+			<if test="signCostOne!=null and signCostOne.id != null and signCostOne.id != ''">
+				AND a.sign_cost_one = #{signCostOne.id}
+			</if>
+			<if test="signCostTwo!=null and signCostTwo.id != null and signCostTwo.id != ''">
+				AND a.sign_cost_two = #{signCostTwo.id}
+			</if>
+			<if test="master!=null and master.id != null and master.id != ''">
+				AND a.master = #{master.id}
+			</if>
+			<if test="reviewStandard != null and reviewStandard != ''">
+				AND a.review_standard = #{reviewStandard}
+			</if>
+
+			<if test="startDate != null and startDate != ''">
+				AND a.report_date &gt;= #{startDate}
+			</if>
+			<if test="endDate != null and endDate != ''">
+				AND a.report_date &lt;= #{endDate}
+			</if>
+			<if test="fileStatus != null and fileStatus != ''">
+				AND a.file_status = #{fileStatus}
+			</if>
+			<if test="officeId != null and officeId != ''">
+				AND a.office_id = #{officeId}
+			</if>
+			<if test="createStartDate != null and createStartDate != ''">
+				AND a.create_date &gt;= #{createStartDate}
+			</if>
+			<if test="createEndDate != null and createEndDate != ''">
+				AND a.create_date &lt;= #{createEndDate}
+			</if>
+			<if test="project!=null and project.projectName != null and project.projectName != ''">
+				AND r.project_name like
+				<if test="dbName == 'oracle'">'%'||#{project.projectName}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{project.projectName}, '%')</if>
+			</if>
+			<if test="contractNum != null and contractNum != ''">
+				AND wci.contract_num like
+				<if test="dbName == 'oracle'">'%'||#{contractNum}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{contractNum}, '%')</if>
+			</if>
+			<if test="clientName != null and clientName != ''">
+				AND wct.name like
+				<if test="dbName == 'oracle'">'%'||#{clientName}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{clientName}, '%')</if>
+			</if>
+			<if test="projectMasterId != null and projectMasterId != ''">
+				AND #{projectMasterId} in (select user_id from work_project_user pm WHERE pm.project_id = a.project_id AND is_master = '1' AND pm.del_flag = '0')
+			</if>
+			${sqlMap.dsf}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	<select id="findInfoListByStatus" resultType="ProjectReportDataTwo" >
+		SELECT
+			<include refid="projectReportDataColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		o.name AS "officeName",
+		uo.name AS "signCostOne.name",
+		ut.name AS "signCostTwo.name",
+		r.project_name AS "project.projectName",
+		r.project_id AS "project.projectId"
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_user uo ON uo.id = a.sign_cost_one
+		LEFT JOIN sys_user ut ON ut.id = a.sign_cost_two
+		LEFT JOIN project_records r ON r.id = a.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.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="project != null and project.id != null and project.id != ''">
+				AND a.project_id = #{project.id}
+			</if>
+			<if test="type != null and type != ''">
+				AND a.type = #{type}
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name like
+				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number like
+				<if test="dbName == 'oracle'">'%'||#{number}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{number}, '%')</if>
+			</if>
+			<if test="achievementType != null and achievementType != ''">
+				AND a.achievement_type = #{achievementType}
+			</if>
+			<if test="signCostOne!=null and signCostOne.id != null and signCostOne.id != ''">
+				AND a.sign_cost_one = #{signCostOne.id}
+			</if>
+			<if test="signCostTwo!=null and signCostTwo.id != null and signCostTwo.id != ''">
+				AND a.sign_cost_two = #{signCostTwo.id}
+			</if>
+			<if test="master!=null and master.id != null and master.id != ''">
+				AND a.master = #{master.id}
+			</if>
+			<if test="reviewStandard != null and reviewStandard != ''">
+				AND a.review_standard = #{reviewStandard}
+			</if>
+
+			<if test="startDate != null and startDate != ''">
+				AND a.report_date &gt;= #{startDate}
+			</if>
+			<if test="endDate != null and endDate != ''">
+				AND a.report_date &lt;= #{endDate}
+			</if>
+			<if test="fileStatus != null and fileStatus != ''">
+				AND a.file_status = #{fileStatus}
+			</if>
+			<if test="officeId != null and officeId != ''">
+				AND a.office_id = #{officeId}
+			</if>
+			<if test="createStartDate != null and createStartDate != ''">
+				AND a.create_date &gt;= #{createStartDate}
+			</if>
+			<if test="createEndDate != null and createEndDate != ''">
+				AND a.create_date &lt;= #{createEndDate}
+			</if>
+			<if test="project!=null and project.projectName != null and project.projectName != ''">
+				AND r.project_name like
+				<if test="dbName == 'oracle'">'%'||#{project.projectName}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{project.projectName}, '%')</if>
+			</if>
+			<if test="contractNum != null and contractNum != ''">
+				AND wci.contract_num like
+				<if test="dbName == 'oracle'">'%'||#{contractNum}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{contractNum}, '%')</if>
+			</if>
+			<if test="clientName != null and clientName != ''">
+				AND wct.name like
+				<if test="dbName == 'oracle'">'%'||#{clientName}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{clientName}, '%')</if>
+			</if>
+			<if test="projectMasterId != null and projectMasterId != ''">
+				AND #{projectMasterId} in (select user_id from work_project_user pm WHERE pm.project_id = a.project_id AND is_master = '1' AND pm.del_flag = '0')
+			</if>
+			AND a.status in ('5','7')
+			${sqlMap.dsf}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+
+<!--	<select id="getContainReportData" resultType="com.jeeplus.modules.sys.entity.Workattachment">-->
+<!--		select a.id,a.attachment_name as "attachmentName",a.attachment_user as attachmentUser,a.type as "type",-->
+<!--		a.create_date as "createDate",a.url,prd.name as "reportDataName"-->
+<!--		from work_attachment a-->
+<!--		left join project_report_data_two prd on a.attachment_id = prd.id-->
+<!--		left join project_report_record prr on prr.report_id = prd.id-->
+<!--		where prr.status='5' and prd.del_flag = '0'-->
+<!--		 and prd.project_id = #{project.id}-->
+<!--		 and prd.status in ('5','7')-->
+<!--		<if test="name != null and name != ''">-->
+<!--			AND a.attachment_name like CONCAT('%', #{name}, '%')-->
+<!--		</if>-->
+<!--	</select>-->
+
+
+
+<!--	<select id="findInvalidList" resultType="ProjectReportDataTwo" >-->
+<!--		SELECT-->
+<!--			<include refid="projectReportDataColumns1"/>-->
+<!--		FROM project_report_data a-->
+<!--		<include refid="projectReportDataJoins"/>-->
+<!--		<where>-->
+<!--			a.del_flag = #{DEL_FLAG_NORMAL} AND a.status IN ('6','7')-->
+<!--			<if test="project != null and project.id != null and project.id != ''">-->
+<!--				AND a.project_id = #{project.id}-->
+<!--			</if>-->
+<!--			<if test="type != null and type != ''">-->
+<!--				AND a.type = #{type}-->
+<!--			</if>-->
+<!--			<if test="name != null and name != ''">-->
+<!--				AND a.name like-->
+<!--				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>-->
+<!--				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>-->
+<!--			</if>-->
+<!--			<if test="number != null and number != ''">-->
+<!--				AND a.number = #{number}-->
+<!--			</if>-->
+<!--			<if test="master!=null and master.id != null and master.id != ''">-->
+<!--				AND a.master = #{master.id}-->
+<!--			</if>-->
+<!--			<if test="startDate != null and startDate != ''">-->
+<!--				AND a.report_date &gt;= #{startDate}-->
+<!--			</if>-->
+<!--			<if test="endDate != null and endDate != ''">-->
+<!--				AND a.report_date &lt;= #{endDate}-->
+<!--			</if>-->
+<!--		</where>-->
+<!--		<choose>-->
+<!--			<when test="page !=null and page.orderBy != null and page.orderBy != ''">-->
+<!--				ORDER BY ${page.orderBy}-->
+<!--			</when>-->
+<!--			<otherwise>-->
+<!--				ORDER BY a.update_date DESC-->
+<!--			</otherwise>-->
+<!--		</choose>-->
+<!--	</select>-->
+
+<!--	<select id="findAllList" resultType="ProjectReportDataTwo" >-->
+<!--		SELECT-->
+<!--			<include refid="projectReportDataColumns1"/>-->
+<!--		FROM project_report_data a-->
+<!--		<include refid="projectReportDataJoins"/>-->
+<!--		<where>-->
+<!--			a.del_flag = #{DEL_FLAG_NORMAL}-->
+<!--		</where>-->
+<!--		<choose>-->
+<!--			<when test="page !=null and page.orderBy != null and page.orderBy != ''">-->
+<!--				ORDER BY ${page.orderBy}-->
+<!--			</when>-->
+<!--			<otherwise>-->
+<!--				ORDER BY a.update_date DESC-->
+<!--			</otherwise>-->
+<!--		</choose>-->
+<!--	</select>-->
+
+	<insert id="insert">
+		INSERT INTO project_report_data_two(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			company_id,
+			office_id,
+			project_id,
+			status,
+		    bzshb_user_id
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{companyId},
+			#{officeId},
+			#{project.id},
+			#{status},
+			#{bzshbUserId}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE project_report_data_two SET
+			update_by = #{updateBy.id}
+			,update_date = #{updateDate}
+			,remarks = #{remarks}
+			,company_id = #{companyId}
+			,office_id = #{officeId}
+			,project_id = #{project.id}
+
+		<if test="status != null and status != ''">
+			,status = #{status}
+		</if>
+		<if test="bzshbUserId != null and bzshbUserId != ''">
+			,bzshb_user_id = #{bzshbUserId}
+		</if>
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateNumber">
+		UPDATE project_report_data SET
+			number = #{number}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateFileStatus">
+		UPDATE project_report_data SET
+		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>
+
+	<update id="saveInvalid">
+		UPDATE project_report_data_two SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			<if test="invalidStatus != null and invalidStatus != ''">
+				invalid_status = #{invalidStatus},
+			</if>
+			status = #{status}
+		WHERE id = #{id}
+	</update>
+
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM project_report_data_two
+		WHERE id = #{id}
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE project_report_data_two SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="ProjectReportDataTwo" statementType="STATEMENT">
+		select * FROM project_report_data_two  where ${propertyName} = '${value}'
+	</select>
+
+	<update id="updateProcessInstanceId">
+		UPDATE project_report_data_two SET
+		process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<!-- 获取流程ID -->
+	<select id="getByProcessInstanceId" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		WHERE a.process_instance_id = #{processInstanceId}
+	</select>
+	<update id="updateInvalidProcessInstanceId">
+		UPDATE project_report_data_two SET
+		invalid_process_instance_id = #{invalidProcessInstanceId}
+		WHERE id = #{id}
+	</update>
+	<update id="deleteReportDataInfo">
+		DELETE FROM project_report_content WHERE report_id = #{reportId} AND type = '1'
+	</update>
+	<update id="deleteReportDataBased">
+		DELETE FROM project_report_content WHERE report_id = #{reportId} AND type = '3'
+	</update>
+	<update id="deleteContentChange">
+		DELETE FROM project_content_change WHERE info_id = #{infoId}
+	</update>
+	<update id="reportNumber">
+		UPDATE project_report_data_two SET
+			number = #{number},number_path = #{url}
+		WHERE id = #{reportId}
+	</update>
+	<!-- 获取流程ID -->
+	<select id="getByInvalidProcessInstanceId" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		WHERE a.invalid_process_instance_id = #{invalidProcessInstanceId}
+	</select>
+
+	<update id="updateUpId">
+		update project_report_data_two
+		set update_process_instance_id = #{upId}
+		<where>
+			id = #{id}
+		</where>
+	</update>
+
+    <select id="findByProjectId" parameterType="String" resultType="ProjectReportDataTwo">
+		SELECT
+		<include refid="projectReportDataColumns"/>
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		<where>
+			project_id = #{projectId}
+		</where>
+	</select>
+
+	<select id="getParentReportDataList" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData">
+		select a.type_id as id,a.type_name as type,0 as pid
+		 from work_content_type a where type_id in(
+			select distinct prd.type
+			from project_report_data_two prd
+			where prd.del_flag = 0 and prd.project_id = #{projectId})
+		order by a.type_id
+	</select>
+
+	<select id="getReportDataList" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportTreeData">
+		select a.id,a.name,a.number,a.type as pid,a.report_type as reportType,wct.type_name as type,
+		a.review_standard as reviewStandard,a.achievement_type as achievementType,
+		a.create_date as createDate,a.status as fileStatus,a.create_by as createBy
+		from project_report_data_two a
+		left join work_content_type wct on a.type = wct.type_id
+		where a.del_flag = 0 AND a.project_id = #{projectId}
+		order by a.update_date desc,a.name
+	</select>
+
+
+
+	<select id="getProjectRecordDataList" resultType="com.jeeplus.modules.projectrecord.entity.ProjectRecordTreeData">
+		select a.id,a.name as projectName,a.number as projectId,#{projectId} as pid,
+		a.create_date as createDate,a.status as projectStatus,a.create_by as createBy,
+		su.name as projectRegistrant,
+		wct.type_name as projectLeader,
+		wctp.type_name as clientName
+		from project_report_data_two a
+		left join sys_user su on su.id = a.create_by
+		left join work_content_type wct on a.type = wct.type_id
+		left join work_content_type wctp on wct.parent_id = wctp.type_id
+		where a.del_flag = 0 and a.project_id = #{projectId}
+		order by a.update_date desc,a.name
+	</select>
+
+	<select id="findInfoByStatus" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		o.name AS "officeName",
+		uo.name AS "signCostOne.name",
+		ut.name AS "signCostTwo.name",
+		r.project_name AS "project.projectName",
+		r.project_id AS "project.projectId"
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_user uo ON uo.id = a.sign_cost_one
+		LEFT JOIN sys_user ut ON ut.id = a.sign_cost_two
+		LEFT JOIN project_records r ON r.id = a.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.del_flag = 0 and a.file_status in(1,2)
+			AND a.status in ('5','7')
+			and a. id =#{id}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="getProjectReportData" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo">
+		select
+		<include refid="projectReportDataColumns"/>
+		,a.bzshb_user_id as "bzshbUserId"
+		from project_report_data_two a
+		LEFT JOIN sys_user m ON m.id = a.master
+		where a.del_flag = 0 AND a.project_id = #{projectId}
+		limit 1
+	</select>
+
+	<select id="processFindInfoByStatus" resultType="ProjectReportDataTwo" >
+		SELECT
+		<include refid="projectReportDataColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		o.name AS "officeName",
+		uo.name AS "signCostOne.name",
+		ut.name AS "signCostTwo.name",
+		r.project_name AS "project.projectName",
+		r.project_id AS "project.projectId"
+		FROM project_report_data_two a
+		<include refid="projectReportDataJoins"/>
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_user uo ON uo.id = a.sign_cost_one
+		LEFT JOIN sys_user ut ON ut.id = a.sign_cost_two
+		LEFT JOIN rural_project_records r ON r.id = a.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.del_flag = 0 and a.file_status in(1,2)
+			AND a.status in ('5','7')
+			and a. id =#{id}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="getConsultantList" resultType="com.jeeplus.modules.ruralprojectrecords.entity.RuralReportConsultant">
+		select
+		  a.id,
+		  a.zixunyuan,
+		  a.zhucezigezhID,
+		  su.name as "zixunyuanName",
+		  wsc.major as "major"
+		from
+		  rural_report_consultant a
+		  left join sys_user su on su.id = a.zixunyuan
+		  left join work_staff_achives wsa on su.id = wsa.user_id
+		  left join work_staff_certificate wsc on wsc.staff_id = wsa.id and wsc.name = a.zhucezigezhID
+		where projectId = #{projectId}
+	</select>
+	<select id="findTwoByProjectId"
+			resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo">
+		SELECT
+			<include refid="projectReportDataColumns"/>
+			,a.bzshb_user_id as "bzshbUserId"
+		FROM
+			rural_project_records r
+				LEFT JOIN project_report_data_two a on a.project_id=r.id
+		where
+			r.id=#{projectId}
+	</select>
+	<update id="updateProjectBzshUserId">
+		UPDATE project_report_data_two SET
+			bzshb_user_id =  #{bzshbUserId}
+		WHERE id = #{id}
+	</update>
+
+</mapper>

+ 50 - 1
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml

@@ -145,6 +145,9 @@
 		,ifnull(rprr.report_status,0) as "reportStatus"
 		,ifnull(rprr.sync_status,0) as "syncStatus"
 		,rprr.process_instance_id as "reportedProcessInstanceId"
+		,ifnull(prdt.status,0) as "projectReportStatusTwo"
+		,prdt.id as prdtId
+		,prdt.process_instance_id as prdtProcessinstanceId
         FROM rural_project_records a
 		LEFT JOIN sys_area area ON area.id = a.area_id
 		LEFT JOIN work_project_user w on a.id = w.project_id
@@ -153,6 +156,7 @@
 		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 project_report_data_two prdt on prdt.project_id = a.id
 		LEFT JOIN sys_user su on w.user_id = su.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
@@ -172,12 +176,34 @@
 		WHERE a.id = #{id}
 	</select>
 
-	<select id="getProjectReportDateByProjectId" resultType="ProjectReportData">
+	<select id="getProjectReportDateByProjectId" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData">
 		SELECT
 		<include refid="projectReportDataColumns"/>
 		from project_report_data a
 		where a.project_id = #{projectId}
 	</select>
+	<sql id="projectReportDataColumnsTwo">
+		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.company_id AS "companyId",
+		a.office_id AS "officeId",
+		a.project_id AS "project.id",
+		a.status AS "status",
+		a.process_instance_id AS "processInstanceId",
+		a.audit_pass_date AS "auditPassDate"
+	</sql>
+
+	<select id="getProjectReportDateTwoByProjectId" resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectReportDataTwo">
+		SELECT
+		<include refid="projectReportDataColumnsTwo"/>
+		from project_report_data_two a
+		where a.project_id = #{projectId}
+	</select>
 
 	<select id="getRuralProjectReportData" resultType="ProjectReportData">
 		select * from project_report_data where project_id = #{projectId}
@@ -319,6 +345,9 @@
 		,ifnull(rprr.report_status,0) as "reportStatus"
 		,ifnull(rprr.sync_status,0) as "syncStatus"
 		,rprr.process_instance_id as "reportedProcessInstanceId"
+		,ifnull(prdt.status,0) as "projectReportStatusTwo"
+		,prdt.id as prdtId
+		,prdt.process_instance_id as prdtProcessinstanceId
 		FROM rural_project_records a
 		LEFT JOIN sys_area area ON area.id = a.area_id
 		left join rural_project_records_reported rprr on rprr.id = a.id
@@ -333,6 +362,7 @@
 		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 project_report_data_two prdt on prdt.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>
@@ -1115,6 +1145,9 @@
 	<delete id="deleteReport">
 		delete from project_report_data where id = #{id}
 	</delete>
+	<delete id="deleteReportTwo">
+		delete from project_report_data_two where id = #{id}
+	</delete>
 
 	<delete id="deleteRecord">
 		delete from rural_project_report_record where id = #{id}
@@ -1129,6 +1162,22 @@
 			reported_state = #{reportedState}
 		WHERE id = #{id}
 	</update>
+	<update id="updateFileStatusTwo">
+		UPDATE project_report_data_two SET
+			file_status = #{fileStatus}
+		WHERE id = #{id}
+	</update>
+	<update id="updateRuralProjectReportDataTwo">
+		UPDATE project_report_data_two SET
+		update_by = #{updateBy.id},
+		update_date = #{updateDate},
+		remarks = #{remarks},
+		company_id = #{companyId},
+		office_id = #{officeId},
+		project_id = #{project.id},
+		status = #{status}
+		WHERE id = #{id}
+	</update>
 
 	<select id="getRecordsInfo" resultType="RuralProjectRecords">
 		SELECT

+ 13 - 1
src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/adminReportEditForm.jsp

@@ -788,7 +788,13 @@
                 }
             })
         }
-
+		function num(obj){
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+		}
 
 	</script>
 	<script type="text/javascript">
@@ -1626,6 +1632,12 @@
 							<input class="laydate-icondate form-control layui-input layer-date laydate-icon" style="background-color: #fff" readonly="readonly" id="endingDate" name="projectOnRural.endingDate" placeholder="请选择结束日期" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 						</div>
 					</div>
+					<div class="layui-item layui-col-sm6 lw7">
+						<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+						<div class="layui-input-block">
+							<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+						</div>
+					</div>
 				</div>
 				<div class="form-group layui-row">
 					<div style="float: right"> <a href="${ctx}/workfullmanage/workFullManage/downloadMassControl?id=${projectReportData.id}"  onclick="return confirmx('确认要下载控制流程单吗?', this.href)" class="nav-btn layui-btn" ><i class="fa fa-file-excel-o"></i> 下载流程单</a></div>

+ 14 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportForm.jsp

@@ -607,6 +607,13 @@
 				}
 			});
 		}
+		function num(obj){
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+		}
 	</script>
 </head>
 <body>
@@ -1004,7 +1011,14 @@
 						<input placeholder="请输入结束日期" style="background-color: #fff" class="laydate-icondate form-control layui-input layer-date laydate-icon" readonly="readonly" id="endingDate" name="projectOnRural.endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+					<div class="layui-input-block">
+						<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+					</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 lw7">

+ 13 - 1
src/main/webapp/webpage/modules/ruralprojectrecords/cost/projectcontentinfo/new/reportModify.jsp

@@ -523,7 +523,13 @@
                 }
             })
         }
-
+		function num(obj){
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+		}
 	</script>
 </head>
 <body>
@@ -873,6 +879,12 @@
 						<input placeholder="请输入结束日期" style="background-color: #fff" class="laydate-icondate form-control layui-input laydate-icon " readonly="readonly" id="endingDate" name="projectOnRural.endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+					<div class="layui-input-block">
+						<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+					</div>
+				</div>
 			</div>
 			<%--<div class="form-group layui-row first lw12">
 				<div class="form-group-label"><h2>咨询质量控制信息</h2></div>

+ 84 - 13
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageLists.jsp

@@ -349,6 +349,40 @@
 			});
 
 		}
+		function openDialogReportTwoView(title,url,id,width,height){
+
+
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			$.ajax({
+				async: false,
+				url: "${ctx}/ruralProject/ruralProjectMessageNewTwo/getReportExist?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+						top.layer.open({
+							type: 2,
+							skin: 'one-btn',
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							content: url ,
+							btn: ['关闭'],
+							cancel: function(index){
+							}
+						});
+					}else{
+						top.layer.msg("该项目报告信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
+		}
 
 
 
@@ -835,7 +869,7 @@
 								return "<font>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
 							}
 						}},
-					{align:'center', title: '报告',  width:90,templet:function(d){
+					{align:'center', title: '质量复核',  width:90,templet:function(d){
 							var st = getAuditState(""+d.projectReportStatus);
 							if(d.pid ==0){
 								if(st.action)
@@ -847,6 +881,18 @@
 								return '';
 							}
 						}},
+					{align:'center', title: '报告签发',  width:90,templet:function(d){
+							var st = getAuditState(""+d.projectReportStatusTwo);
+							if(d.pid ==0){
+								if(st.action)
+									var xml = "<span onclick=\"openDialogReportTwoView('流程追踪', '${ctx}/ruralProject/ruralProjectMessageNewTwo/getProcessOne?id=" + d.id + "&projectReportData.id=" + d.bid + "&type=2','"+d.id+"','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;
+							}else{
+								return '';
+							}
+						}},
 					{align:'center', title: '电子',  width:90,templet:function(d){
 							var st = getRuralProjectArchiveState(""+d.projectReportRecordStatus);
 							if(d.pid ==0){
@@ -931,33 +977,58 @@
 				}
 				if(d.flag == 1){
 					if(d.projectReportStatus == 0){
-						xml+="<a href=\"#\" onclick=\"openDialogre('新增报告', '${ctx}/ruralProject/ruralCostProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 新增报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('新增报告质量复核', '${ctx}/ruralProject/ruralCostProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 新增质量复核</a>";
 					}
 					if(d.projectReportStatus == 1){
-						xml+="<a href=\"#\" onclick=\"openDialogre('修改报告信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改报告</a>";
-						//xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('修改报告质量复核信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改质量复核</a>";
+						<%--xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";--%>
 					}
 					if(d.projectReportStatus == 2){
-						xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目报告审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回报告</a>";
+						xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目报告质量复核审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回质量复核</a>";
 					}
 					if(d.projectReportStatus == 3){
 						//撤回操作
-						xml+="<a href=\"#\" onclick=\"openDialogre('调整报告信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/modify?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改报告</a>";
-						//xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('调整报告质量复核信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/modify?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改质量复核</a>";
+						<%--xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告质量复核吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";--%>
 					}
 					if(d.projectReportStatus == 4){
 						//驳回操作
 						if(d.newReportNotifyFlag == 1){
-							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改报告</a>";
+							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告质量复核信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改质量复核</a>";
 						}else{
-							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告信息', '${ctx}/ruralProject/ruralCostProjectMessage/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改报告</a>";
+							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告质量复核信息', '${ctx}/ruralProject/ruralCostProjectMessage/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改质量复核</a>";
 						}
 
-						//xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
+						<%--xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告质量复核吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";--%>
+					}
+					if(d.projectReportStatus == 5){
+						if (d.projectReportStatusTwo != 5 && d.projectReportStatusTwo != 2){
+							xml+="<a href=\"#\" onclick=\"openDialogre('修改报告信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/form?projectId=" + d.id +"&view=reloadReport','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 重新复核</a>";
+						}
+						if(d.projectReportStatusTwo == 0){
+							xml+="<a href=\"#\" onclick=\"openDialogre('报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id +"&view=costLiu','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 报告签发</a>";
+						}
+						if(d.projectReportStatusTwo == 1){
+							xml+="<a href=\"#\" onclick=\"openDialogre('修改报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id +"&view=costLiu','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "&view=costLiu\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
+						if(d.projectReportStatusTwo == 2){
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/revoke?id=" + d.id + "&processInstanceId=" + d.prdtProcessinstanceId + "&view=costLiu\" onclick=\"return confirmx('确认要撤回该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回签发</a>";
+						}
+						if(d.projectReportStatusTwo == 3){
+							//撤回操作
+							xml+="<a href=\"#\" onclick=\"openDialogre('调整报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id + "&view=costLiu','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "&view=costLiu\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
+						if(d.projectReportStatusTwo == 4){
+							//驳回操作
+							xml+="<a href=\"#\" onclick=\"openDialogre('调整报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id + "&view=costLiuReport ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "&view=costLiu\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
 					}
 
 					//线上归档操作
-					if(d.projectReportStatus == 5){
+					if(d.projectReportStatusTwo == 5){
 						/*xml+="<a href=\"#\" style='background-color: #FFB800' onclick=\"openDialogre('下载模板', '${ctx}/ruralProject/ruralCostProjectMessage/skipDownloadFtl?id=" + d.id +"','35%', '35%','','下载,关闭')\" class=\"op-btn\" > 下载模板</a>";*/
 						if(d.projectReportRecordStatus == 0){
 							xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
@@ -1002,7 +1073,7 @@
 					}*/
 
 					/*上报相关按钮*/
-					if(d.projectReportRecordStatus == 5 || d.projectReportStatus == 5){
+					if(d.projectReportRecordStatus == 5 || d.projectReportStatusTwo == 5){
 						if(d.syncStatus == 0){
 							if(d.reportStatus == 0){
 								if(d.reportedState == 0 || d.reportedState == 6){
@@ -1039,7 +1110,7 @@
 				}
 				<shiro:hasPermission name="ruralProject:ruralCostProjectMessage:adminEdit">
 					if ('0'!=d.projectReportStatus){
-						xml+="<a href=\"#\" onclick=\"openDialogre('修改项目报告', '${ctx}/ruralProject/ruralCostProjectMessage/adminEditForm?projectId=" + d.id + "','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('修改质量复核', '${ctx}/ruralProject/ruralCostProjectMessage/adminEditForm?projectId=" + d.id + "','95%', '95%','','提交,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改质量复核</a>";
 					}
 				</shiro:hasPermission>
 				xml+="</div>";

+ 13 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageAudit.jsp

@@ -142,6 +142,13 @@
                 }
             });
         }
+		function num(obj){
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+		}
 	</script>
 </head>
 <body >
@@ -496,6 +503,12 @@
 								<input class=" form-control layui-input" readonly="readonly" id="endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 							</div>
 						</div>
+						<div class="layui-item layui-col-sm6 lw7">
+							<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+							<div class="layui-input-block">
+								<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" readonly="true" onkeyup="num(this)" class="form-control layui-input"/>
+							</div>
+						</div>
 					</div>
 					<div class="form-group layui-row">
 						<div class="form-group-label"><h2>成果文件</h2></div>

File diff suppressed because it is too large
+ 1767 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageAuditTwo.jsp


+ 13 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModify.jsp

@@ -289,6 +289,13 @@
                 }
             });
         }
+        function num(obj){
+            obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+            obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+            obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+            obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+            obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+        }
     </script>
 </head>
 <body >
@@ -599,6 +606,12 @@
                         <input placeholder="请输入结束日期" style="background-color: #fff" class="laydate-icondate form-control layui-input laydate-icon" readonly="readonly" id="endingDate" name="projectOnRural.endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
                     </div>
                 </div>
+                <div class="layui-item layui-col-sm6 lw7">
+                    <label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+                    <div class="layui-input-block">
+                        <form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+                    </div>
+                </div>
             </div>
             <%--<div class="form-group layui-row first lw12">
                 <div class="form-group-label"><h2>咨询质量控制信息</h2></div>

File diff suppressed because it is too large
+ 1182 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/projectRecordsMessageModifyTwo.jsp


+ 13 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportForm.jsp

@@ -530,6 +530,13 @@
 				}
 			});
 		}
+		function num(obj){
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+		}
 	</script>
 </head>
 <body>
@@ -932,6 +939,12 @@
 							<input placeholder="请选择结束日期" style="background-color: #fff" class="laydate-icondate form-control layui-input layer-date laydate-icon " readonly="readonly" id="endingDate" name="projectOnRural.endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 						</div>
 					</div>
+					<div class="layui-item layui-col-sm6 lw7">
+						<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+						<div class="layui-input-block">
+							<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+						</div>
+					</div>
 				</div>
 			<%--<div class="form-group layui-row first lw12">
 				<div class="form-group-label"><h2>咨询质量控制信息</h2></div>

File diff suppressed because it is too large
+ 1638 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/reportFormTwo.jsp


+ 994 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageTwoView.jsp

@@ -0,0 +1,994 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报告详情管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<%@include file="/webpage/include/treetable.jsp" %>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			layui.use(['form', 'layer'], function () {
+				var form = layui.form;
+			})
+			$("#upTable").treeTable({expandLevel : 5},{ expandable: true });
+			$("#gistdata_upTable").treeTable({expandLevel : 5},{ expandable: true });
+			$("#upTable_other").treeTable({expandLevel : 5},{ expandable: true });
+			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();
+			});
+			$("#gistdata_btn").click(function () {
+				$("#gistdata_file").click();
+			});
+			$("#other_btn").click(function () {
+				$("#other_file").click();
+			});
+			if ("${projectcontentinfo.projectReportData.contractCategory}" !=null){
+				if("${projectcontentinfo.projectReportData.contractCategory}"=='1'){
+					$("#contractFee").parent().parent().hide();
+					$("#contractRate").parent().parent().show();
+				}else if("${projectcontentinfo.projectReportData.contractCategory}"=='0'){
+					$("#contractFee").parent().parent().show();
+					$("#contractRate").parent().parent().hide();
+				}
+			}
+		});
+
+		function readOpenInfo(value) {
+			layer.open({
+				title: '意见',
+				btn: ['关闭'],
+				content: value
+			});
+		}
+	</script>
+</head>
+
+<body>
+<div class="single-form">
+	<div class="container${container}  view-form">
+		<form:form id="inputForm" modelAttribute="projectcontentinfo" action="${ctx}/ruralProject/ruralProjectMessage/reportAudit" method="post" class="form-horizontal layui-form">
+			<%--<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:input path="projectReportData.achievementType" htmlEscape="false"  class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">签章类型:</label>
+					<div class="layui-input-block">
+						<form:input path="projectReportData.ReportType" htmlEscape="false"  class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+			</div>--%>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>项目信息</h2></div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<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="${projectRecords.projectId}"/>
+								<%--							<form:input path="projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>--%>
+							<span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty projectRecords.projectStatus}">${fns:getDictLabel(projectRecords.projectStatus, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+						</div>
+					</div>
+				</div>
+					<%--<div class="layui-item layui-col-sm6 lw6">--%>
+					<%--<label class="layui-form-label">规模类型:</label>--%>
+					<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.scaleType}"/>--%>
+					<%--</div>--%>
+					<%--</div>--%>
+					<%--<div class="layui-item layui-col-sm6 lw6">--%>
+					<%--<label class="layui-form-label">规模单位:</label>--%>
+					<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.scaleUnit}"/>--%>
+					<%--</div>--%>
+					<%--</div>--%>
+					<%--<div class="layui-item layui-col-sm6 lw6">--%>
+					<%--<label class="layui-form-label">规模数量:</label>--%>
+					<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.scaleQuantity}"/>--%>
+					<%--</div>--%>
+					<%--</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw6">--%>
+<%--					<label class="layui-form-label">项目所在地:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.area.name}"/>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw7">--%>
+<%--					<label class="layui-form-label">所在省份:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.province}"/>--%>
+<%--							&lt;%&ndash;						<form:input path="${projectRecords.province}" htmlEscape="false" id="province" class="form-control layui-input" readonly="true"/>&ndash;%&gt;--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw7">--%>
+<%--					<label class="layui-form-label">所在地级市:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.city}"/>--%>
+<%--							&lt;%&ndash;						<form:input path="city" htmlEscape="false" id="city" class="form-control layui-input" readonly="true"/>&ndash;%&gt;--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw7">--%>
+<%--					<label class="layui-form-label">所在区县:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.county}"/>--%>
+<%--							&lt;%&ndash;						<form:input path="county" htmlEscape="false" id="areaName1" class="form-control layui-input" readonly="true"/>&ndash;%&gt;--%>
+<%--					</div>--%>
+<%--				</div>--%>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目所在地:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.province}-${projectRecords.city}-${projectRecords.county}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">投资性质:</label>
+					<div class="layui-input-block">
+						<c:if test="${projectRecords.projectProperties==null}">
+							<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input"/>
+						</c:if>
+						<c:forEach  items="${fns:getMainDictList('project_properties')}" var="v">
+							<c:if test="${v.value==projectRecords.projectProperties}">
+								<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${v.label}"/>
+							</c:if>
+						</c:forEach>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">建设地点:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.projectSite}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目责任人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.leaderNameStr}"/>
+					</div>
+				</div>
+					<%--<div class="layui-item layui-col-sm6 lw6">
+                        <label class="layui-form-label">项目类型:</label>
+                        <div class="layui-input-block">
+                            <input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.projectTypeId}"/>
+                        </div>
+                    </div>--%>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">项目类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${fns:getMainDictLabel(projectRecords.workContractInfo.contractTypeDoc, 'contract_info_type', '')}"/>
+							<%--						<form:select path="projectTypeId" class="form-control editable-select layui-input" id="projectTypeId" value="${projectTypeId}" readonly="true">--%>
+							<%--							&lt;%&ndash;<form:option value=""/>--%>
+							<%--                            <form:options items="${fns:getProjectType()}" itemLabel="label" itemValue="label" htmlEscape="false"/>&ndash;%&gt;--%>
+							<%--							<form:options items="${fns:getProjectType()}" itemLabel="typeName" itemValue="typeId" readonly="true"></form:options>--%>
+							<%--						</form:select>--%>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">创建人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.createBy.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<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="${projectRecords.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+					<%--<div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label">工程结构:</label>
+                        <div class="layui-input-block">
+                                <input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.projectStructure}"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label">地上层数:</label>
+                        <div class="layui-input-block">
+                            <form:input path="onGroundNum" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label">底下层数:</label>
+                        <div class="layui-input-block">
+                            <form:input path="underGroundNum" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>
+                        </div>
+                    </div>--%>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">建筑面积或规模:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.buildingScale}"/>
+							<%--						<form:input path="buildingScale" htmlEscape="false"  class="form-control layui-input number" readonly="true"/>--%>
+					</div>
+				</div>
+					<%--<div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label">计量单位:</label>
+                        <div class="layui-input-block">
+                            <input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.measuringUnit}"/>
+                        </div>
+                    </div>--%>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">工程用途:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${projectRecords.projectUse}"/>
+					</div>
+				</div>
+					<%--<div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label double-line"><span class="require-item">*</span>咨询标的额(万元):</label>
+                        <div class="layui-input-block">
+                            <input value="<fmt:formatNumber value="${projectRecords.totalFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="totalFees" class="form-control layui-input required number"  readonly="true"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label double-line">其中土建造价(万元):</label>
+                        <div class="layui-input-block">
+                            <input   value="<fmt:formatNumber value="${projectRecords.buildingFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="buildingFees" class="form-control layui-input" readonly="true"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label double-line">其中安装造价(万元):</label>
+                        <div class="layui-input-block">
+                            <input  value="<fmt:formatNumber value="${projectRecords.installFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="installFees" class="form-control layui-input" readonly="true"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label double-line">其中土建百分比(%):</label>
+                        <div class="layui-input-block">
+                            <form:input path="buildingPercent" htmlEscape="false" id="buildingPercent" class="form-control layui-input" readonly="true"/>
+                        </div>
+                    </div>
+                    <div class="layui-item layui-col-sm6 lw7">
+                        <label class="layui-form-label double-line">其中安装百分比(%):</label>
+                        <div class="layui-input-block">
+                            <form:input path="installPercent" htmlEscape="false" id="installPercent" class="form-control layui-input" readonly="true"/>
+                        </div>
+                    </div>--%>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">单位造价(元):</label>
+					<div class="layui-input-block">
+						<input value="<fmt:formatNumber value="${projectRecords.unitFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="unitFees" class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">土建单位造价(元):</label>
+					<div class="layui-input-block">
+						<input  value="<fmt:formatNumber value="${projectRecords.buildingUnitFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="buildingUnitFees" class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">安装单位造价(元):</label>
+					<div class="layui-input-block">
+						<input  value="<fmt:formatNumber value="${projectRecords.installUnitFees}" pattern="#,##0.00#"/>" htmlEscape="false" id="installUnitFees" class="form-control layui-input" readonly="readonly"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6 with-textarea">
+					<label class="layui-form-label">工程概况:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true" maxlength="1000" class="form-control" >${projectRecords.projectDesc}</textarea>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6 with-textarea">
+					<label class="layui-form-label">特殊要求:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true" maxlength="1000" class="form-control" >${projectRecords.remarks}</textarea>
+					</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" 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="approvalFee" path="projectReportData.approvalFee" htmlEscape="false"  class="form-control layui-input" readonly="true"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同类别:</label>
+					<div class="layui-input-block with-icon">
+						<input type="radio" title="金额合同" lay-filter="jine" name="projectReportData.contractCategory" id="jine" value="0" disabled <c:if test="${projectcontentinfo.projectReportData.contractCategory=='0'}">checked</c:if>>
+						<input type="radio" title="费率合同" lay-filter="jine" name="projectReportData.contractCategory" id="jine1" value="1" disabled <c:if test="${projectcontentinfo.projectReportData.contractCategory=='1'}">checked</c:if>>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同价(元):</label>
+					<div class="layui-input-block with-icon">
+						<form:input placeholder="请输入合同价" id="contractFee" path="projectReportData.contractFee" htmlEscape="false" readonly="true" class="form-control layui-input number"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6" style="display: none;">
+					<label class="layui-form-label">费率(%):</label>
+					<div class="layui-input-block with-icon">
+						<form:input placeholder="请输入合同费率" id="contractRate" path="projectReportData.contractRate" htmlEscape="false" readonly="true" 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" 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" 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" 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" 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="installFee" path="projectReportData.installFee" htmlEscape="false"  class="form-control layui-input" 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="buildingRate" path="projectReportData.buildingRate" 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="installRate" path="projectReportData.installRate" 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">
+						<input class=" form-control layui-input" readonly="readonly" id="startDate" value="<fmt:formatDate value="${projectRecords.startDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">工作结束日期:</label>
+					<div class="layui-input-block with-icon">
+						<input class=" form-control layui-input" readonly="readonly" id="endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+					<div class="layui-input-block">
+						<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>成果文件</h2></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 width="55%">文件类型</th>
+							<th width="">文件名</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectcontentinfo.fileAttachmentList}" var = "fileAttachment" varStatus="status">
+							<tr id="${fileAttachment.id}" pid="${fileAttachment.parent.id}">
+								<c:choose>
+									<c:when test="${fileAttachment.mustFlag == 1}">
+										<td><span style="color: red">* </span>${fileAttachment.attachName}</td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fileAttachment.flag == 0}">
+												<td>${fileAttachment.attachName}</td>
+											</c:when>
+											<c:otherwise>
+												<td></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td style="text-align:center;">
+									<c:choose>
+										<c:when test="${fileAttachment.flag == 0}">
+											${fileAttachment.attachLength}M;  ${fileAttachment.attachTypes}
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${projectcontentinfo.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'jpg')
+                                                           or fn:containsIgnoreCase(fileAttachment.attachName,'png')
+                                                           or fn:containsIgnoreCase(fileAttachment.attachName,'gif')
+                                                           or fn:containsIgnoreCase(fileAttachment.attachName,'bmp')
+                                                           or fn:containsIgnoreCase(fileAttachment.attachName,'jpeg')}">
+															<img src="${fileAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileAttachment.temporaryUrl}','90%','90%')" alt="${fileAttachment.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.temporaryUrl}',1)">${fileAttachment.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.temporaryUrl}',3)">${fileAttachment.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.temporaryUrl}',2)">${fileAttachment.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'jpg')
+																				   or fn:containsIgnoreCase(fileAttachment.attachName,'png')
+																				   or fn:containsIgnoreCase(fileAttachment.attachName,'gif')
+																				   or fn:containsIgnoreCase(fileAttachment.attachName,'bmp')
+																				   or fn:containsIgnoreCase(fileAttachment.attachName,'jpeg')}">
+															<img src="${fileAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileAttachment.url}','90%','90%')" alt="${fileAttachment.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.url}',1)">${fileAttachment.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileAttachment.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.url}',3)">${fileAttachment.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileAttachment.url}',2)">${fileAttachment.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+<!--											<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${fileAttachment.url}','90%','90%')">${fileAttachment.attachName} ; </a>-->
+										</c:otherwise>
+									</c:choose>
+								</td>
+								<td class="op-td" style="text-align:center;">
+									<div class="op-btn-box" >
+										<div class="op-btn-box" >
+											<c:choose>
+												<c:when test="${fileAttachment.flag == 0}">
+
+												</c:when>
+												<c:otherwise>
+													<%--附件下载删除--%>
+													<c:choose>
+														<c:when test="${projectcontentinfo.uploadMode == 2}">
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(fileAttachment.attachName,'pdf')}">
+																	<a href="javascript:void(0)" onclick="openPreview('${fileAttachment.temporaryUrl}',1)" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+																</c:when>
+																<c:otherwise>
+																	<a href="${fileAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+																</c:otherwise>
+															</c:choose>
+														</c:when>
+														<c:otherwise>
+															<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${fileAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:otherwise>
+													</c:choose>
+													<c:if test="${fileAttachment.collectFlag != 1}">
+														<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${fileAttachment.url}','${fileAttachment.createBy.id}','${fileAttachment.fileSize}')" class="op-btn op-btn-delete"  style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+													</c:if>
+												</c:otherwise>
+											</c:choose>
+										</div>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>依据性资料</h2></div>
+				<div id="addFile_gistdata" style="display: none" class="upload-progress">
+					<span id="fileName_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 width="55%">文件类型</th>
+							<th width="">文件名</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_gistdata">
+						<c:forEach items="${projectcontentinfo.fileGistdataList}" var = "fileGistdata" varStatus="status">
+							<tr id="${fileGistdata.id}" pid="${fileGistdata.parent.id}">
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${fileGistdata.mustFlag == 1}">
+										<td><span style="color: red">* </span>${fileGistdata.attachName}</td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fileGistdata.flag == 0}">
+												<td>${fileGistdata.attachName}</td>
+											</c:when>
+											<c:otherwise>
+												<td></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td style="text-align:center;">
+									<c:choose>
+										<c:when test="${fileGistdata.flag == 0}">
+											${fileGistdata.attachLength}M;  ${fileGistdata.attachTypes}
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${projectcontentinfo.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'jpg')
+                                                           or fn:containsIgnoreCase(fileGistdata.attachName,'png')
+                                                           or fn:containsIgnoreCase(fileGistdata.attachName,'gif')
+                                                           or fn:containsIgnoreCase(fileGistdata.attachName,'bmp')
+                                                           or fn:containsIgnoreCase(fileGistdata.attachName,'jpeg')}">
+															<img src="${fileGistdata.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileGistdata.temporaryUrl}','90%','90%')" alt="${fileGistdata.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.temporaryUrl}',1)">${fileGistdata.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.temporaryUrl}',3)">${fileGistdata.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.temporaryUrl}',2)">${fileGistdata.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'jpg')
+																				   or fn:containsIgnoreCase(fileGistdata.attachName,'png')
+																				   or fn:containsIgnoreCase(fileGistdata.attachName,'gif')
+																				   or fn:containsIgnoreCase(fileGistdata.attachName,'bmp')
+																				   or fn:containsIgnoreCase(fileGistdata.attachName,'jpeg')}">
+															<img src="${fileGistdata.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileGistdata.url}','90%','90%')" alt="${fileGistdata.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.url}',1)">${fileGistdata.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileGistdata.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.url}',3)">${fileGistdata.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileGistdata.url}',2)">${fileGistdata.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+<%--											<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${fileGistdata.url}','90%','90%')">${fileGistdata.attachName} ; </a>--%>
+										</c:otherwise>
+									</c:choose>
+								</td>
+								<td class="op-td"  style="text-align:center;">
+									<div class="op-btn-box" >
+										<c:choose>
+											<c:when test="${fileGistdata.flag == 0}">
+
+											</c:when>
+											<c:otherwise>
+												<%--附件下载删除--%>
+												<c:choose>
+													<c:when test="${projectcontentinfo.uploadMode == 2}">
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(fileGistdata.attachName,'pdf')}">
+																<a href="javascript:void(0)" onclick="openPreview('${fileGistdata.temporaryUrl}',1)" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+															</c:when>
+															<c:otherwise>
+																<a href="${fileGistdata.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+															</c:otherwise>
+														</c:choose>
+													</c:when>
+													<c:otherwise>
+														<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${fileGistdata.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+												<c:if test="${fileGistdata.collectFlag != 1}">
+													<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${fileGistdata.url}','${fileGistdata.createBy.id}','${fileGistdata.fileSize}')" class="op-btn op-btn-delete"  style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+												</c:if>
+											</c:otherwise>
+										</c:choose>
+									</div>
+								</td>
+								<td style="display:none">${fileGistdata.id}</td>
+								<td style="display:none">${fileGistdata.mustFlag}</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>其他文件</h2></div>
+				<div id="addFile_other" style="display: none" class="upload-progress">
+					<span id="fileName_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 width="55%">文件类型</th>
+							<th width="">文件名</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_other">
+						<c:forEach items="${projectcontentinfo.fileOtherList}" var = "fileOther" varStatus="status">
+							<tr id="${fileOther.id}" pid="${fileOther.parent.id}">
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${fileOther.mustFlag == 1}">
+										<td><span style="color: red">* </span>${fileOther.attachName}</td>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fileOther.flag == 0}">
+												<td>${fileOther.attachName}</td>
+											</c:when>
+											<c:otherwise>
+												<td></td>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td style="text-align:center;">
+									<c:choose>
+										<c:when test="${fileOther.flag == 0}">
+											${fileOther.attachLength}M;  ${fileOther.attachTypes}
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${projectcontentinfo.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'jpg')
+                                                           or fn:containsIgnoreCase(fileOther.attachName,'png')
+                                                           or fn:containsIgnoreCase(fileOther.attachName,'gif')
+                                                           or fn:containsIgnoreCase(fileOther.attachName,'bmp')
+                                                           or fn:containsIgnoreCase(fileOther.attachName,'jpeg')}">
+															<img src="${fileOther.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileOther.temporaryUrl}','90%','90%')" alt="${fileOther.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.temporaryUrl}',1)">${fileOther.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.temporaryUrl}',3)">${fileOther.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.temporaryUrl}',2)">${fileOther.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'jpg')
+																				   or fn:containsIgnoreCase(fileOther.attachName,'png')
+																				   or fn:containsIgnoreCase(fileOther.attachName,'gif')
+																				   or fn:containsIgnoreCase(fileOther.attachName,'bmp')
+																				   or fn:containsIgnoreCase(fileOther.attachName,'jpeg')}">
+															<img src="${fileOther.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${fileOther.url}','90%','90%')" alt="${fileOther.attachName}">
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachName,'pdf')}">
+																	<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.url}',1)">${fileOther.attachName} ; </a>
+																</c:when>
+																<c:otherwise>
+																	<c:choose>
+																		<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'rar')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'zip')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'jar')
+																					   or fn:containsIgnoreCase(fileOther.attachName,'7z')}">
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.url}',3)">${fileOther.attachName}</a>
+																		</c:when>
+																		<c:otherwise>
+																			<a class="attention-info" href="javascript:void(0)" onclick="openPreview('${fileOther.url}',2)">${fileOther.attachName}</a>
+																		</c:otherwise>
+																	</c:choose>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+<%--											<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${fileOther.url}','90%','90%')">${fileOther.attachName} ; </a>--%>
+										</c:otherwise>
+									</c:choose>
+								</td>
+								<td class="op-td" style="text-align:center;">
+									<div class="op-btn-box" >
+										<c:choose>
+											<c:when test="${fileOther.flag == 0}">
+
+											</c:when>
+											<c:otherwise>
+												<%--附件下载删除--%>
+												<c:choose>
+													<c:when test="${projectcontentinfo.uploadMode == 2}">
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(fileOther.attachName,'pdf')}">
+																<a href="javascript:void(0)" onclick="openPreview('${fileOther.temporaryUrl}',1)" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+															</c:when>
+															<c:otherwise>
+																<a href="${fileOther.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+															</c:otherwise>
+														</c:choose>
+													</c:when>
+													<c:otherwise>
+														<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${fileOther.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+												<c:if test="${fileOther.collectFlag != 1}">
+													<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${fileOther.url}','${fileOther.createBy.id}','${fileOther	.fileSize}')" class="op-btn op-btn-delete"  style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+												</c:if>
+											</c:otherwise>
+										</c:choose>
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+
+			<c:if test="${not empty processInstanceId}">
+				<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="${processInstanceId}"/>
+						<act:histoicFlow procInsId="${processInstanceId}"/>
+					</div>
+				</div>
+			</c:if>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+<script>
+	function openBill2(title,url,width,height,target,formId,tableId){
+		var rows = $(this).parent().prevAll().length + 1;
+		var frameIndex = parent.layer.getFrameIndex(window.name);
+		var urls = url+"&index="+frameIndex;
+		if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+			width='auto';
+			height='auto';
+		}else{//如果是PC端,根据用户设置的width和height显示。
+
+		}
+		top.layer.open({
+			type: 2,
+			area: [width, height],
+			title: title,
+			skin:"two-btns",
+			maxmin: false, //开启最大化最小化按钮
+			content: urls ,
+			btn: ['确定','关闭'],
+			yes: function(index, layero){
+				var body = top.layer.getChildFrame('body', index);
+				var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+				var inputForm = body.find('#inputForm');
+				var top_iframe;
+				if(target){
+					top_iframe = target;//如果指定了iframe,则在改frame中跳转
+				}else{
+					top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+				}
+				inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+				inputForm.attr("action","${ctx}/projectAccessory/projectAccessory/saveWorkAttachment");//表单提交成功后,从服务器返回的url在当前tab中展示
+				var $document = iframeWin.contentWindow.document;
+
+				formSubmit2($document,formId,index,tableId);
+
+			},
+			cancel: function(index){
+			}
+		});
+	}
+	function formSubmit2($document,inputForm,index,tableId){
+
+		var validateForm = $($document.getElementById(inputForm)).validate({
+			submitHandler: function(form){
+				loading('正在提交,请稍等...');
+				form.submit();
+			},
+			errorContainer: "#messageBox",
+			errorPlacement: function(error, element) {
+				$($document.getElementById("#messageBox")).text("输入有误,请先更正。");
+				if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+					error.appendTo(element.parent().parent());
+				} else {
+					error.insertAfter(element);
+				}
+			}
+		});
+		if(validateForm.form()){
+			$($document.getElementById(inputForm)).ajaxSubmit({
+				success:function(data) {
+					var d = data;
+					//输出提示信息
+					if(d.str.length>0){
+						parent.layer.msg(d.str,{icon:1});
+					}
+					$("#"+tableId).load(location.href + " #"+tableId);
+					//关闭当前页
+					top.layer.close(index)
+				}
+			});
+		}
+	}
+
+	function formAttachment(title,url,width,height,target,formId){
+		var rows = $(this).parent().prevAll().length + 1;
+		var frameIndex = parent.layer.getFrameIndex(window.name);
+		var urls = url;
+		if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+			width='auto';
+			height='auto';
+		}else{//如果是PC端,根据用户设置的width和height显示。
+
+		}
+		top.layer.open({
+			type: 2,
+			area: [width, height],
+			title: title,
+			skin:"two-btns",
+			maxmin: false, //开启最大化最小化按钮
+			content: urls ,
+			btn: ['确定','关闭'],
+			yes: function(index, layero){
+				var body = top.layer.getChildFrame('body', index);
+				var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+				var inputForm = body.find('#inputForm');
+				var top_iframe;
+				if(target){
+					top_iframe = target;//如果指定了iframe,则在改frame中跳转
+				}else{
+					top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+				}
+				inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+				inputForm.attr("action","${ctx}/projectAccessory/projectAccessory/saveWorkAttachment");//表单提交成功后,从服务器返回的url在当前tab中展示
+				var $document = iframeWin.contentWindow.document;
+				var iframeWin = layero.find('iframe')[0].contentWindow; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+				var item = iframeWin.getSelectedItem();
+				setValuee(item);
+
+			},
+			cancel: function(index){
+			}
+		});
+	}
+	function setValuee(obj){
+		for(var i=0;i<obj.length;i++){
+			var idArr = $("#file_attachment tr:visible .clientId");
+			if(obj[i].id!=''&&!hasInArr(obj[i].id,idArr)){
+				addRowBaseData("#workBaseDataList",workBaseDataRowIdx,workBaseDataTpl,obj[i]);
+				$("#workBaseDataList"+workBaseDataRowIdx+"_nature").html("引用");
+				workBaseDataRowIdx=workBaseDataRowIdx+1;
+			}
+		}
+	}
+</script>
+</body>
+</html>

+ 6 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/projectRecordsMessageView.jsp

@@ -389,6 +389,12 @@
 						<input class=" form-control layui-input" readonly="readonly" id="endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
 					</div>
 				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label double-line">造价咨询营业收入(万元):</label>
+					<div class="layui-input-block">
+						<form:input path="projectReportData.ZiXunShouRu" placeholder="请输入造价咨询营业收入" htmlEscape="false" onkeyup="num(this)" class="form-control layui-input"/>
+					</div>
+				</div>
 			</div>
 			<%--<div class="form-group layui-row first lw12">
 				<div class="form-group-label"><h2>咨询质量控制信息</h2></div>

+ 80 - 10
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageLists.jsp

@@ -346,6 +346,40 @@
 				}
 			});
 
+		}//打开对话框(查看)
+		function openDialogReportTwoView(title,url,id,width,height){
+
+
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			$.ajax({
+				async: false,
+				url: "${ctx}/ruralProject/ruralProjectMessageNewTwo/getReportExist?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+						top.layer.open({
+							type: 2,
+							skin: 'one-btn',
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							content: url ,
+							btn: ['关闭'],
+							cancel: function(index){
+							}
+						});
+					}else{
+						top.layer.msg("该项目报告信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
 		}
 
 
@@ -835,7 +869,7 @@
 								return "<font>"+layui.util.toDateString(date,'yyyy-MM-dd')+"</font>";
 							}
 						}},
-					{align:'center', title: '报告',  width:90,templet:function(d){
+					{align:'center', title: '质量复核',  width:90,templet:function(d){
 							var st = getAuditState(""+d.projectReportStatus);
 							if(d.pid ==0){
 								if(st.action)
@@ -847,6 +881,18 @@
 								return '';
 							}
 						}},
+                    {align:'center', title: '报告签发',  width:90,templet:function(d){
+                            var st = getAuditState(""+d.projectReportStatusTwo);
+                            if(d.pid ==0){
+                                if(st.action)
+                                    var xml = "<span onclick=\"openDialogReportTwoView('流程追踪', '${ctx}/ruralProject/ruralProjectMessageNewTwo/getProcessOne?id=" + d.id + "&projectReportData.id=" + d.bid + "&type=2','"+d.id+"','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;
+                            }else{
+                                return '';
+                            }
+                        }},
 					{align:'center', title: '电子',  width:90,templet:function(d){
 							var st = getRuralProjectArchiveState(""+d.projectReportRecordStatus);
 							if(d.pid ==0){
@@ -932,32 +978,56 @@
 				}
 				if(d.flag == 1){
 					if(d.projectReportStatus == 0){
-						xml+="<a href=\"#\" onclick=\"openDialogre('新增报告', '${ctx}/ruralProject/ruralProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 新增报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('新增质量复核', '${ctx}/ruralProject/ruralProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 新增质量复核</a>";
 					}
 					if(d.projectReportStatus == 1){
-						xml+="<a href=\"#\" onclick=\"openDialogre('修改报告信息', '${ctx}/ruralProject/ruralProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('修改质量复核', '${ctx}/ruralProject/ruralProjectMessageNew/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改质量复核</a>";
 						//xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
 					}
 					if(d.projectReportStatus == 2){
-						xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目报告审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-btn-red\" > 撤回报告</a>";
+						xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/revoke?id=" + d.id + "&processInstanceId=" + d.procId + "\" onclick=\"return confirmx('确认要撤回该项目报告审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-btn-red\" > 撤回质量复核</a>";
 					}
 					if(d.projectReportStatus == 3){
 						//撤回操作
-						xml+="<a href=\"#\" onclick=\"openDialogre('调整报告信息', '${ctx}/ruralProject/ruralProjectMessageNew/modify?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改报告</a>";
+						xml+="<a href=\"#\" onclick=\"openDialogre('调整质量复核', '${ctx}/ruralProject/ruralProjectMessageNew/modify?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改质量复核</a>";
 						//xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
 					}
 					if(d.projectReportStatus == 4){
 						//驳回操作
 						if(d.newReportNotifyFlag == 1){
-							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告信息', '${ctx}/ruralProject/ruralProjectMessageNew/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改报告</a>";
+							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整质量复核', '${ctx}/ruralProject/ruralProjectMessageNew/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改质量复核</a>";
 						}else{
-							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整报告信息', '${ctx}/ruralProject/ruralProjectMessage/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改报告</a>";
+							xml+="<a href=\"#\" onclick=\"openDialogreReport('调整质量复核', '${ctx}/ruralProject/ruralProjectMessage/modify?projectId=" + d.id + "&view=report','"+d.id+"','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改质量复核</a>";
 						}
 						//xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";
 					}
-
+                    if(d.projectReportStatus == 5){
+                    	if (d.projectReportStatusTwo != 5 && d.projectReportStatusTwo != 2){
+							xml+="<a href=\"#\" onclick=\"openDialogre('修改报告质量复核信息', '${ctx}/ruralProject/ruralProjectMessageNew/form?projectId=" + d.id +"&view=reloadReport','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 重新复核</a>";
+						}
+						if(d.projectReportStatusTwo == 0){
+							xml+="<a href=\"#\" onclick=\"openDialogre('报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 报告签发</a>";
+						}
+						if(d.projectReportStatusTwo == 1){
+							xml+="<a href=\"#\" onclick=\"openDialogre('修改报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
+						if(d.projectReportStatusTwo == 2){
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/revoke?id=" + d.id + "&processInstanceId=" + d.prdtProcessinstanceId + "\" onclick=\"return confirmx('确认要撤回该报告签发审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-btn-red\" > 撤回签发</a>";
+						}
+						if(d.projectReportStatusTwo == 3){
+							//撤回操作
+							xml+="<a href=\"#\" onclick=\"openDialogre('调整报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
+						if(d.projectReportStatusTwo == 4){
+							//撤回操作
+							xml+="<a href=\"#\" onclick=\"openDialogre('调整报告签发', '${ctx}/ruralProject/ruralProjectMessageNewTwo/form?projectId=" + d.id + "&view=report ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改签发</a>";
+							xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessageNewTwo/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该报告签发吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除签发</a>";
+						}
+                    }
 					//线上归档操作
-					if(d.projectReportStatus == 5){
+					if(d.projectReportStatusTwo == 5){
 						/*xml+="<a href=\"#\" style='background-color: #FFB800' onclick=\"openDialogre('下载模板', '${ctx}/ruralProject/ruralProjectMessage/skipDownloadFtl?id=" + d.id +"','35%', '35%','','下载,关闭')\" class=\"op-btn\" > 下载模板</a>";*/
 						if(d.projectReportRecordStatus == 0){
 							xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
@@ -1001,7 +1071,7 @@
 					}*/
 
 					/*上报相关按钮*/
-					if(d.projectReportRecordStatus == 5 || d.projectReportStatus == 5){
+					if(d.projectReportRecordStatus == 5 || d.projectReportStatusTwo == 5){
 						if(d.syncStatus == 0){
 							if(d.reportStatus == 0){
 								if(d.reportedState == 0 || d.reportedState == 6){