Browse Source

项目电子归档流程更新

user5 3 năm trước cách đây
mục cha
commit
5fe93bc6ca
22 tập tin đã thay đổi với 7168 bổ sung35 xóa
  1. 237 0
      src/main/java/com/jeeplus/modules/act/web/ActTaskController.java
  2. 4 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectReportRecordDao.java
  3. 9 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/entity/ProjectReportRecord.java
  4. 435 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportRecordService.java
  5. 75 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java
  6. 18 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java
  7. 161 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java
  8. 170 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageService.java
  9. 540 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordTwoService.java
  10. 2 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java
  11. 484 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java
  12. 2 1
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectMessageController.java
  13. 175 0
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  14. 20 1
      src/main/resources/mappings/modules/projectcontentinfo/ProjectReportRecordDao.xml
  15. 17 0
      src/main/webapp/WEB-INF/tags/act/histoicFlowRecordTwo.tag
  16. 20 15
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp
  17. 1730 0
      src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordAudit.jsp
  18. 1057 0
      src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordForm.jsp
  19. 1118 0
      src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModify.jsp
  20. 856 0
      src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModifyApply.jsp
  21. 22 17
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp
  22. 16 0
      src/main/webapp/webpage/modules/workreimbursement/projectRecordTwoTrack.jsp

+ 237 - 0
src/main/java/com/jeeplus/modules/act/web/ActTaskController.java

@@ -10,6 +10,8 @@ import com.jeeplus.common.web.BaseController;
 import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectReportRecordService;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralPeojectRecordChooseCheckService;
 import com.jeeplus.modules.sys.entity.Role;
@@ -54,6 +56,8 @@ public class ActTaskController extends BaseController {
 	private SystemService systemService;
 	@Autowired
 	private RuralPeojectRecordChooseCheckService ruralPeojectRecordChooseCheckService;
+	@Autowired
+	private ProjectReportRecordService projectReportRecordService;
 
 	/**
 	 * 获取待办列表
@@ -314,6 +318,239 @@ public class ActTaskController extends BaseController {
 		return "modules/act/actTaskHistoricFlow";
 	}
 
+
+/**
+	 * 获取流转历史列表(新的电子归档筛选信息)
+	 * @param startAct 开始活动节点名称
+	 * @param endAct 结束活动节点名称
+	 */
+	@RequestMapping(value = "histoicFlowOnRecordTwo")
+	public String histoicFlowOnRecordTwo(Act act,String recordId, String startAct, String endAct, Model model){
+		if (StringUtils.isNotBlank(act.getProcInsId())){
+
+			//查询电子归档信息
+			ProjectReportRecord newProjectReportRecord = projectReportRecordService.get(recordId);
+
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessInstanceId(act.getProcInsId());
+			List<WorkActivityProcess> list = workActivityProcessService.findByProcInsId(workActivityProcess);
+			workActivityProcess.setIsApproval("0");
+			List<WorkActivityProcess> lists = workActivityProcessService.findByProcInsIdAudit(workActivityProcess);
+			List<WorkActivityProcess> beginList = workActivityProcessService.findByProcInsIdAndIsApproval(workActivityProcess);
+			List<Act> histoicFlows = new ArrayList<>();
+			Date beginDate = new Date();
+			String userName = "";
+			Date endDate = new Date();
+			if (beginList!=null && beginList.size()!=0){
+				beginDate = beginList.get(0).getCreateDate();
+				userName = beginList.get(0).getCreateBy().getName();
+			}else {
+				if (lists!=null && lists.size()!=0){
+					beginDate = lists.get(lists.size()-1).getCreateDate();
+				}
+			}
+			if (list!=null && list.size()!=0){
+				endDate = list.get(list.size()-1).getUpdateDate();
+			}
+
+
+			if (list!=null && lists!=null && list.size()==0 && lists.size()==0){
+				List<Act> histoicFlowList = actTaskService.histoicFlowList(act.getProcInsId(), startAct, endAct);
+				histoicFlows = getList(histoicFlowList);
+			}else {
+				Act act1 = new Act();
+				act1.setBeginDate(beginDate);
+				act1.setEndDate(beginDate);
+				act1.setTaskName("开始");
+				act1.setComment("发起申请");
+				act1.setDurationTime("0秒");
+				if (StringUtils.isNotBlank(userName)){
+					act1.setAssigneeName(userName);
+				}else if(lists.size()!=0){
+					act1.setAssigneeName(UserUtils.get(lists.get(lists.size()-1).getCreateBy().getId()).getName());
+				}else if (list.size()!=0){
+					act1.setAssigneeName(UserUtils.get(list.get(list.size()-1).getCreateBy().getId()).getName());
+				}
+
+				histoicFlows.add(act1);
+				for (int i =0;i<list.size();i++){
+					WorkActivityProcess activityProcess = list.get(i);
+					Act a = new Act();
+					if (activityProcess.getActivity() ==null){
+						if (StringUtils.isNotBlank(userName)){
+							a.setAssigneeName(userName);
+						}else if (lists!=null && lists.size()!=0){
+							a.setAssigneeName(UserUtils.get(lists.get(lists.size()-1).getCreateBy().getId()).getName());
+						}else {
+							a.setAssigneeName(UserUtils.get(list.get(list.size()-1).getCreateBy().getId()).getName());
+						}
+						if("销假申请".equals(activityProcess.getRemarks())||"续假申请".equals(activityProcess.getRemarks())){
+							a.setTaskName("开始");
+						}else{
+							a.setTaskName("重申|撤销");
+						}
+					}else if (activityProcess.getActivity().getUser()!=null && StringUtils.isNotBlank(activityProcess.getActivity().getUser().getId())){
+						String id = activityProcess.getActivity().getUser().getId();
+						if ("1".equals(id)){
+							a.setAssigneeName("负责人");
+						}else {
+							a.setAssigneeName(UserUtils.get(activityProcess.getActivity().getUser().getId()).getName());
+						}
+						a.setTaskName(activityProcess.getActivity().getName());
+					}else{
+						User user = new User();
+						if (activityProcess.getUpdateBy()!=null && StringUtils.isNotBlank(activityProcess.getUpdateBy().getId())){
+							user = UserUtils.get(activityProcess.getUpdateBy().getId());
+						}
+						SysRoleActivity role = activityProcess.getActivity().getRole();
+						String buffer = UserUtils.getRoleActivityEnname(UserUtils.getSelectCompany().getId(),UserUtils.getUser());
+						if (role.getEnname().contains(buffer.toString())){
+							SysRoleActivity r = systemService.getRoleActivityByEnname(role.getEnname());
+							if(r!=null&&!"".equals(r)){
+								a.setRoleName(r.getName());
+								a.setAssigneeName(user.getName());
+							}
+						}else {
+							SysRoleActivity r = systemService.getRoleActivityByEnname(buffer+role.getEnname());
+							if(r!=null&&!"".equals(r)){
+								a.setRoleName(r.getName());
+								a.setAssigneeName(user.getName());
+							}else if(r==null&&"qyr".equals(role.getEnname())){
+								a.setRoleName("签约人");
+								a.setAssigneeName(user.getName());
+							}else if(r==null&&"master".equals(role.getEnname())){
+								a.setRoleName("负责人");
+								a.setAssigneeName(user.getName());
+							}else if(r==null&&"sqr".equals(role.getEnname())){
+								a.setRoleName("申请人");
+								a.setAssigneeName(user.getName());
+							}
+						}
+						a.setTaskName(activityProcess.getActivity().getName());
+					}
+
+					a.setComment(activityProcess.getRemarks());
+					if (compareDate(beginDate,activityProcess.getUpdateDate())!=0) {
+						if (i==0){
+							a.setBeginDate(beginDate);
+							a.setEndDate(activityProcess.getUpdateDate());
+						}else {
+							a.setBeginDate(list.get(i-1).getUpdateDate());
+							a.setEndDate(activityProcess.getUpdateDate());
+						}
+					}
+					if (a.getBeginDate()!=null && a.getEndDate()!=null){
+						String durationTime = "";
+						long time = 0;
+						if (a.getEndDate().getTime()>a.getBeginDate().getTime()){
+							time = a.getEndDate().getTime() - a.getBeginDate().getTime();
+						}else {
+							time = a.getBeginDate().getTime() - a.getEndDate().getTime() ;
+						}
+
+						time /= 1000;
+						long day = time/(24*3600);
+						if (day != 0){
+							durationTime = day+"天";
+						}
+						time = time % (24*3600);
+						long hour = time/3600;
+						if (hour != 0){
+							durationTime += hour+"小时";
+						}
+						time = time % 3600;
+						long min = time/60;
+						if (min != 0){
+							durationTime += min+"分";
+						}
+						time = time % 60;
+						long sec = time;
+						if (sec != 0){
+							durationTime += sec+"秒";
+						}
+						a.setDurationTime(durationTime);
+					}
+					histoicFlows.add(a);
+				}
+				RuralProjectRecords project = null;
+				Integer flag = 0;
+				for (WorkActivityProcess info: lists) {
+					if(null != newProjectReportRecord && !"modifyApply".equals(info.getActivityTask())){
+						if(2 == newProjectReportRecord.getRecordAuditType() && "总审审核".equals(info.getActivity().getName()) && "newReportRecordTwo".equals(info.getProcessKey())){
+							lists.remove(info);
+						}
+					}
+				}
+				for (int i =0;i<lists.size();i++){
+					WorkActivityProcess activityProcess = lists.get(i);
+					Act a = new Act();
+					if (activityProcess.getActivity() ==null) {
+						//根据processInstanceId查询是否为项目表中的信息,如果是则判定是否是”重申|撤销“展示,如果是则跳过
+						project = ruralPeojectRecordChooseCheckService.getProjectByCheckProcessInstanceId(activityProcess.getProcessInstanceId());
+						if(null == project){
+							if (StringUtils.isNotBlank(userName)) {
+								a.setAssigneeName(userName);
+							} else {
+								a.setAssigneeName(UserUtils.get(lists.get(lists.size() - 1).getCreateBy().getId()).getName());
+							}
+							if("销假申请".equals(activityProcess.getRemarks())||"续假申请".equals(activityProcess.getRemarks())){
+								a.setTaskName("开始");
+							}else{
+								a.setTaskName("重申|撤销");
+							}
+						}
+					}else if (activityProcess.getActivity().getUser()!=null && StringUtils.isNotBlank(activityProcess.getActivity().getUser().getId())){
+						String id = activityProcess.getActivity().getUser().getId();
+						if ("1".equals(id)){
+							a.setRoleName("负责人");
+						}else {
+							a.setAssigneeName(UserUtils.get(activityProcess.getActivity().getUser().getId()).getName());
+						}
+						a.setTaskName(activityProcess.getActivity().getName());
+					}else{
+						flag++;
+						SysRoleActivity role = activityProcess.getActivity().getRole();
+						String buffer = UserUtils.getRoleActivityEnname(UserUtils.getSelectCompany().getId(),UserUtils.getUser());
+						if (activityProcess.getProcessUserList()!=null && activityProcess.getProcessUserList().size()!=0){
+							a.setAssigneeName(Collections3.extractToString(activityProcess.getProcessUserList(), "name", ","));
+						}
+						if("master".equals(role.getEnname())){
+							a.setRoleName("负责人");
+						}else if("qyr".equals(role.getEnname())){
+							a.setRoleName("签约人");
+						}else if("sqr".equals(role.getEnname())){
+							a.setRoleName("申请人");
+                            a.setAssigneeName(UserUtils.get(lists.get(lists.size() - 1).getCreateBy().getId()).getName());
+						}else {
+							if (role.getEnname().contains(buffer)){
+								SysRoleActivity r = systemService.getRoleActivityByEnname(role.getEnname());
+								a.setRoleName(r.getName());
+							}else {
+								//如果流程中指定的角色为董事长dsz,而该公司下没有这样角色,则r=null,空指针
+								SysRoleActivity r = systemService.getRoleActivityByEnname(buffer+role.getEnname());
+								a.setRoleName(r!=null?r.getName():"");
+							}
+						}
+						a.setTaskName(activityProcess.getActivity().getName());
+					}
+
+					a.setComment(activityProcess.getRemarks());
+					if (i==0){
+						a.setBeginDate(endDate);
+					}
+					if(StringUtils.isNotBlank(a.getTaskName())){
+						if(flag == 1 && null != project) {
+							a.setBeginDate(endDate);
+						}
+						histoicFlows.add(a);
+					}
+				}
+			}
+			model.addAttribute("histoicFlowList", histoicFlows);
+		}
+		return "modules/act/actTaskHistoricFlow";
+	}
+
 	/**
 	 * 获取流程流向图
 	 * @param act 流程实例

+ 4 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/dao/ProjectReportRecordDao.java

@@ -81,4 +81,8 @@ public interface ProjectReportRecordDao extends CrudDao<ProjectReportRecord> {
      * @return
      */
     Integer deleteDefectRecord(ProjectMaterialDefectRecord materialDefectRecord);
+
+
+    Integer updateRuralProjectReportRecordOnFileId(ProjectReportRecord projectReportRecord);
+
 }

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

@@ -65,6 +65,7 @@ public class ProjectReportRecord extends ActEntity<ProjectReportRecord> {
 	private List<String> chargeCriterionList;	//合同收费标准
 
 	private Integer type;//(1:ProjectReportRecord  2:RuralProjectReportRecord)
+	private Integer recordAuditType;//归档状态(1:总审驳回,2:归档管理员驳回)
 
 	public Integer getType() {
 		return type;
@@ -431,4 +432,12 @@ public class ProjectReportRecord extends ActEntity<ProjectReportRecord> {
 	public void setCatalogueAttachmentId(String catalogueAttachmentId) {
 		this.catalogueAttachmentId = catalogueAttachmentId;
 	}
+
+	public Integer getRecordAuditType() {
+		return recordAuditType;
+	}
+
+	public void setRecordAuditType(Integer recordAuditType) {
+		this.recordAuditType = recordAuditType;
+	}
 }

+ 435 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportRecordService.java

@@ -1548,4 +1548,439 @@ public class ProjectReportRecordService extends CrudService<ProjectReportRecordD
 		return data;
 	}
 
+	/**
+	 * 审核流程
+	 * @param reportRecord
+	 */
+	@Transactional(readOnly = false)
+	public String newAuditSaveTwo(ProjectReportRecord reportRecord,List<User> auditUsers) {
+		String flag = reportRecord.getAct().getFlag();
+		ProjectReportRecord projectReportRecord = null;
+		String catalogueAttachmentId = null;
+		// 对不同环节的业务逻辑进行操作
+		Act act = reportRecord.getAct();
+		String taskDefKey = act.getTaskDefKey();
+		if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")  ) {
+			actTaskService.claim(act.getTaskId(), UserUtils.getUser().getId());
+			projectReportRecord = get(reportRecord.getId());
+		}else {
+			projectReportRecord = get(reportRecord.getId());
+			//获取项目信息
+			RuralProjectRecords record = ruralProjectRecordsService.getById(reportRecord.getReport().getProject().getId());
+			//查询其他资料对应附件结构信息
+			ProjectTemplateInfo templateInfo = projectTemplateDao.getProjectTemplateInfoByName("其他资料");
+
+			//生成文件目录
+			//获取上传阿里云盘文件地址
+			String uploadCatalogueFilePath = downloadCatalogue(record.getId());
+			if(StringUtils.isNotBlank(uploadCatalogueFilePath)){
+				//将备考表添加到附件中
+				Workattachment workattachment = new Workattachment();
+				workattachment.setAttachmentId(templateInfo.getId());
+				workattachment.setProjectId(record.getId());
+				workattachment.setUrl(uploadCatalogueFilePath);
+				workattachment.setType("doc");
+				workattachment.setAttachmentFlag("100");
+				workattachment.setAttachmentName("文件目录.doc");
+				workattachment.setAttachmentUser(UserUtils.getUser().getId());
+				workattachment.setCompanyId(UserUtils.getSelectCompany().getId());
+				workattachmentService.insertOnWorkAttachment(workattachment);
+				//添加目录附件id
+				projectReportRecord.setCatalogueAttachmentId(workattachment.getId());
+
+				if (StringUtils.isNotBlank(reportRecord.getCatalogueAttachmentId()) && StringUtils.isNotBlank(projectReportRecord.getCatalogueAttachmentId())) {
+					if(!reportRecord.getCatalogueAttachmentId().equals(projectReportRecord.getCatalogueAttachmentId())){
+						workattachmentService.deleteById(reportRecord.getCatalogueAttachmentId());
+						catalogueAttachmentId = projectReportRecord.getCatalogueAttachmentId();
+					}
+				}
+			}
+
+			projectReportRecord = reportRecord;
+			saveWorkattachments(reportRecord);
+			flag = "yes";
+		}
+		projectReportRecord.setReferenceRemarks(reportRecord.getReferenceRemarks());
+		projectReportRecord.setFileNum(reportRecord.getFileNum());
+		projectReportRecord.setFileNumTow(reportRecord.getFileNumTow());
+		projectReportRecord.setName(reportRecord.getName());
+		projectReportRecord.setAccomplishDate(new Date());
+		User user= UserUtils.get(projectReportRecord.getCreateBy().getId());
+		String title =  "报告名称:"+projectReportRecord.getReport().getName();
+		String str = "归档申请编号:"+projectReportRecord.getRecordNum()+ ",主委托方:"+projectReportRecord.getClientName()+",申请人:"+user.getName()+",所属部门:"+UserUtils.getSelectOffice().getName();
+
+		if (StringUtils.isBlank(act.getComment())){
+			act.setComment(flag.equals("yes")?"同意":"驳回");
+		}
+		String comment = "";
+		if (projectReportRecord.getStatus().equals("4")){
+			comment = ("yes".equals(flag)?"[重新申请] ":"[已撤销] ");
+		}else {
+			comment = ("yes".equals(flag)?"[同意] ":"[驳回] ")+act.getComment();
+		}
+		//yes 的时候状态为审核通过 否则为未通过
+		//1 审核中 2 未通过
+		projectReportRecord.setStatus(("yes".equals(flag) ? "2" : "4"));
+		Map<String, Object> vars = Maps.newHashMap();
+		//业务逻辑对应的条件表达式
+		String exp = "";
+		String taskCount = "";
+		String notifyRole = "";
+		int key = 0;
+		String enname = "";
+		List<Activity> activitieList = activityService.getByProcessInstanceId(projectReportRecord.getProcessInstanceId());
+		WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+		if (activitieList != null && activitieList.size() != 0) {
+			Iterator<Activity> iterator = activitieList.iterator();
+			while (iterator.hasNext()){
+				Activity activityInfo = iterator.next();
+				if (!"newReportRecordTwo".equals(activityInfo.getProcessKey())){
+					iterator.remove();
+				}
+			}
+			workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+			workActivityMenu.setActivities(activitieList);
+		}
+		//获取项目信息
+		RuralProjectRecords record = ruralProjectRecordsService.getById(reportRecord.getReport().getProject().getId());
+
+		WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+		WorkActivityProcess selectProcess = new WorkActivityProcess();
+		selectProcess.setProcessInstanceId(projectReportRecord.getProcessInstanceId());
+		List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+		List<Activity> activities = workActivityMenu.getActivities();
+		if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newReportRecordTwo")) {
+			key = 1;
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+					taskCount = activityProcess.getCount()+"";
+					workActivityProcess = activityProcess;
+					if (!workActivityProcess.getIsApproval().equals("0")) {
+						workActivityProcess.setId("");
+					}
+					exp = "pass";
+					if (!"yes".equals(flag)) {
+						projectReportRecord.setStatus("4");
+						workActivityProcess.setIsApproval("2");
+						String returnBack = "-1";
+						for (Activity activity : activities) {
+							if (activity.getCount() == activityProcess.getCount()) {
+								notifyRole = activity.getName();
+								returnBack = activity.getReturnBack();
+								break;
+							}
+						}
+						if (returnBack.equals("0")) {
+							workActivityProcess.setId("");
+						}
+
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+				}else if(taskDefKey.equals("modifyApply")){
+					taskCount = "0";
+					notifyRole = "调整报告";
+					exp = "pass";
+					workActivityProcess.setId("");
+					workActivityProcess.setCount(0);
+					if (!"yes".equals(flag)) {
+						projectReportRecord.setStatus("3");
+						workActivityProcess.setIsApproval("2");
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+					break;
+				}
+			}
+		} else {
+			workActivityMenu.setProcessType("newReportRecordTwo");
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				workActivityProcess = activityProcess;
+				String count = activityProcess.getCount() + "";
+				if (!workActivityProcess.getIsApproval().equals("0")) {
+					workActivityProcess.setId("");
+				}
+				// 审核环节
+				if ("bzshb".equals(taskDefKey) && count.contains("1")) {
+					taskCount = "1";
+					exp = "pass";
+					if ("yes".equals(flag)) {
+						notifyRole = "归档管理员审批";
+						workActivityProcess.setIsApproval("1");
+						enname = "bggdgly";
+						vars.put("bggdglyList", auditUsers);
+						vars.put("bggdglycount",auditUsers.size());
+						vars.put("passLv",true);
+						projectReportRecord.setRecordAuditType(1);
+					} else {
+						notifyRole = "调整报告归档";
+						workActivityProcess.setIsApproval("2");
+						projectReportRecord.setRecordAuditType(1);
+					}
+					break;
+				}else if (("bggdgly".equals(taskDefKey) || "bggdgly2".equals(taskDefKey)) && count.contains("2")) {
+					taskCount = "2";
+					exp = "pass";
+					if ("yes".equals(flag)) {
+						workActivityProcessService.insertAuditsByType(auditUsers,reportRecord.getProcessInstanceId(),2,1);
+
+						//判定为非全过程项目进行备考表信息处理
+						if(!"3".equals(record.getProjectType())){
+							//查询其他资料对应附件结构信息
+							ProjectTemplateInfo templateInfo = projectTemplateDao.getProjectTemplateInfoByName("其他资料");
+							//获取上传阿里云盘文件地址
+							String uploadFilePath = downloadReference(reportRecord, record);
+							if(StringUtils.isNotBlank(uploadFilePath)){
+								//将备考表添加到附件中
+								Workattachment workattachment = new Workattachment();
+								workattachment.setAttachmentId(templateInfo.getId());
+								workattachment.setProjectId(record.getId());
+								workattachment.setUrl(uploadFilePath);
+								workattachment.setType("doc");
+								workattachment.setAttachmentFlag("100");
+								workattachment.setAttachmentName("备考表.doc");
+								workattachment.setAttachmentUser(UserUtils.getUser().getId());
+								workattachmentService.insertOnWorkAttachment(workattachment);
+							}
+						}
+						notifyRole = "审批通过";
+						workActivityProcess.setIsApproval("1");
+					} else {
+						vars.put("passLv",false);
+						notifyRole = "调整报告归档";
+						workActivityProcess.setIsApproval("2");
+						projectReportRecord.setRecordAuditType(2);
+					}
+					break;
+				}else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+					if(2 == projectReportRecord.getRecordAuditType()){
+						notifyRole = "报告归档管理员审批";
+						taskCount = "0";
+						exp = "pass";
+						workActivityProcess.setCount(0);
+						enname = "bggdgly";
+						vars.put("passLv", false);
+					}else{
+						notifyRole = "总审审批";
+						taskCount = "0";
+						exp = "pass";
+						workActivityProcess.setCount(0);
+						enname = "bzshb";
+						vars.put("passLv", true);
+					}
+					if (!"yes".equals(flag)) {
+						projectReportRecord.setStatus("3");
+					}
+					break;
+				} else if ("apply_end".equals(taskDefKey)) {
+				}
+
+			}
+		}
+		// 设置意见
+		act.setComment(("yes".equals(flag) ? "[同意] " : "[驳回] ") + act.getComment());
+		projectReportRecord.preUpdate();
+		// 提交流程任务
+		vars.put(exp, "yes".equals(flag) ? true : false);
+		vars.put("passs", true);
+		workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,projectReportRecord.getProcessInstanceId(),taskDefKey,"modifyApply",flag,comment, activities);
+		// 提交流程任务
+		actTaskService.complete(act.getTaskId(), act.getProcInsId(), act.getComment(), vars);
+		boolean state = actTaskService.isProcessEnd(act.getProcInsId());
+		List<User> users = new ArrayList<>();
+		List<User> userList = new ArrayList<>();
+
+		if (!state) {
+			String titleStr = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档完成";
+			String content = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档完成,案卷号:" + projectReportRecord.getFileNum();
+			if("3".equals(record.getProjectType())){
+				titleStr = "全过程项目【"+ record.getProjectName()+"】归档完成";
+				content = "全过程项目【"+ record.getProjectName()+"】归档完成,归档编号:" + projectReportRecord.getFileNum();
+			}
+			users.add(projectReportRecord.getCreateBy());
+			if ("yes".equals(flag)) {
+				ProjectReportData projectReportData =projectReportRecord.getReport();
+				projectReportData.setFileStatus("3");
+				projectReportDataService.updateFileStatus(projectReportData);
+				projectReportRecord.setStatus("5");
+
+				//修改审批状态
+				if(!"3".equals(record.getProjectType())){
+
+					//修改项目表中上报状态
+					//判断项目是否超期,如果超期则将上报标志改为超期上报(7) 否则变更为正常上报数据
+					if(1 == record.getOverRecordStatus()){
+						record.setProjectRecordStatus(7);
+						//修改项目归档表中状态
+						projectReportRecord.setStatus("7");
+					}else{
+						record.setProjectRecordStatus(5);
+					}
+
+				}
+
+				//修改项目表中字段信息
+				dao.updateReported(record);
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(projectReportRecord.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				workProjectNotifyService
+						.save(UtilNotify
+								.saveNotify(projectReportRecord.getId(),
+										projectReportRecord.getCreateBy(),
+										projectReportRecord.getCompanyId(),
+										titleStr,
+										content,
+										"103",
+										"0",
+										"待通知",
+										notifyRole));
+
+			} else {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(projectReportRecord.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				if (StringUtils.isNotBlank(projectReportRecord.getStatus()) && !projectReportRecord.getStatus().equals("3")){
+					projectReportRecord.setStatus("4");
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(projectReportRecord.getId(),
+											projectReportRecord.getCreateBy(),
+											projectReportRecord.getCompanyId(),
+											title,
+											str,
+											"103",
+											"0",
+											"待通知",
+											notifyRole));
+				}
+			}
+			workActivityProcessService.deleteProcessIdAuditUsers(projectReportRecord.getProcessInstanceId());
+		} else {
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newReportRecordTwo")) {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(projectReportRecord.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				WorkProjectNotify workProjectNotify = UtilNotify
+						.saveNotify(projectReportRecord.getId(),
+								new User(),
+								projectReportRecord.getCompanyId(),
+								title,
+								str,
+								"103",
+								"0",
+								"待审批",
+								notifyRole);
+				List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+						activities,
+						workProjectNotify,
+						taskDefKey,
+						flag,
+						taskCount,
+						projectReportRecord.getCreateBy(),
+						user.getOffice().getId(),
+						"10");
+				for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+					users.add(workProjectNotify1.getUser());
+					workProjectNotify1.setId("");
+					workProjectNotify1.setIsNewRecord(false);
+					workProjectNotifyService
+							.save(workProjectNotify1);
+				}
+
+			} else {
+				if (!"yes".equals(flag)) {//驳回待办信息
+					str = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档被驳回,请重新归档";
+					title = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档被驳回";
+					if("3".equals(record.getProjectType())){
+						title = "全过程项目【"+ record.getProjectName()+"】归档被驳回";
+						str = "全过程项目【"+ record.getProjectName()+"】归档被驳回,请重新归档";
+					}
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(projectReportRecord.getId());
+					userList = workProjectNotifyService.readByNotifyId(notify);
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(projectReportRecord.getId(),
+											projectReportRecord.getCreateBy(),
+											projectReportRecord.getCompanyId(),
+											title,
+											str,
+											"103",
+											"0",
+											"重新申请",
+											notifyRole));
+					users.add( projectReportRecord.getCreateBy());
+				} else {
+					if (StringUtils.isNotBlank(enname)) {//驳回重新归档
+						str = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档信息,待审批";
+						title = "报告号:"+reportRecord.getReport().getNumber()+"。项目【"+ record.getProjectName()+"】归档信息,待审批";
+						if("3".equals(record.getProjectType())){
+							title = "全过程项目【"+ record.getProjectName()+"】归档信息,待审批";
+							str = "全过程项目【"+ record.getProjectName()+"】归档信息,待审批";
+						}
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(projectReportRecord.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						WorkProjectNotify workProjectNotify = UtilNotify
+								.saveNotify(projectReportRecord.getId(),
+										new User(),
+										projectReportRecord.getCompanyId(),
+										title,
+										str,
+										"103",
+										"0",
+										"待审批",
+										notifyRole);
+						users.addAll(auditUsers);
+						for (User user1 : users) {
+							workProjectNotify.setUser(user1);
+							workProjectNotify.setId("");
+							workProjectNotify.setIsNewRecord(false);
+							workProjectNotifyService
+									.save(workProjectNotify);
+						}
+					}else {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(projectReportRecord.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						users.add(projectReportRecord.getCreateBy());
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(projectReportRecord.getId(),
+												projectReportRecord.getCreateBy(),
+												projectReportRecord.getCompanyId(),
+												title,
+												str,
+												"103",
+												"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 (1 == projectReportRecord.getType()){
+			dao.update(projectReportRecord);
+		}else if(2 == projectReportRecord.getType()){
+			if(StringUtils.isNotBlank(catalogueAttachmentId)){
+				projectReportRecord.setCatalogueAttachmentId(catalogueAttachmentId);
+			}
+			dao.updateRuralProjectReportRecord(projectReportRecord);
+		}
+		return "保存审核意见成功!";
+	}
+
 }

+ 75 - 0
src/main/java/com/jeeplus/modules/projectcontentinfo/web/ProjectReportRecordController.java

@@ -23,6 +23,7 @@ import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.dao.UserDao;
+import com.jeeplus.modules.sys.entity.Office;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import org.activiti.engine.runtime.ProcessInstance;
@@ -569,4 +570,78 @@ public class ProjectReportRecordController extends BaseController {
 		}
 	}
 
+	//报告流程审批
+	@RequestMapping(value = {"newAuditSaveTwo"})
+	public String newAuditSaveTwo(ProjectReportRecord projectReportRecord, HttpServletRequest request, HttpServletResponse response, Model model,
+							   RedirectAttributes redirectAttributes) {
+		try {
+			Office office = UserUtils.getSelectOffice();
+			//查询项目新增报告信息
+			ProjectReportData reportData = projectReportDataService.get(projectReportRecord.getReport().getId());
+			// 对不同环节的业务逻辑进行操作
+			List<User> users = null;
+			User auditUser = null;
+			String taskDefKey =  projectReportRecord.getAct().getTaskDefKey();
+			if ("bzshb".equals(taskDefKey)){
+				users = UserUtils.getByProssType(projectReportRecord.getProcessInstanceId(),5);
+				if (users==null ) {
+					users = UserUtils.getByRoleActivityEnname("bggdgly",3,office.getId(),"10",projectReportRecord.getCreateBy());
+				}
+			}else if ("bggdgly".equals(taskDefKey)){
+				users = UserUtils.getByProssType(projectReportRecord.getProcessInstanceId(),5);
+				if (users==null ) {
+					users = UserUtils.getByRoleActivityEnname("bggdgly",3,office.getId(),"10",projectReportRecord.getCreateBy());
+				}
+			}else if ("bggdgly2".equals(taskDefKey)){
+				users = UserUtils.getByProssType(projectReportRecord.getProcessInstanceId(),5);
+				if (users==null ) {
+					users = UserUtils.getByRoleActivityEnname("bggdgly",3,office.getId(),"10",projectReportRecord.getCreateBy());
+				}
+			}else if ("modifyApply".equals(taskDefKey)){
+				if(1 == projectReportRecord.getRecordAuditType()){
+					users = UserUtils.getByProssType(projectReportRecord.getProcessInstanceId(),1);
+				}else{
+					users = UserUtils.getByRoleActivityEnname("bggdgly",3,office.getId(),"10",projectReportRecord.getCreateBy());
+				}
+
+			}
+
+			String flag = projectReportRecord.getAct().getFlag();
+			if ("yes".equals(flag) && (users==null || users.size()==0)){
+				addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+			}else {
+				String str = projectReportRecordService.newAuditSaveTwo(projectReportRecord,users);
+				addMessage(redirectAttributes, str);
+			}
+		}catch (Exception e){
+			logger.error("Exception e:"+e);
+			addMessage(redirectAttributes, "报告归档流程审批失败");
+		}
+		if (StringUtils.isNotBlank(projectReportRecord.getHome()) && projectReportRecord.getHome().equals("home")){
+			return "redirect:" + Global.getAdminPath() + "/home/?repage";
+		}else if (StringUtils.isNotBlank(projectReportRecord.getHome()) && "notifyList".equals(projectReportRecord.getHome())){
+			return "redirect:" + Global.getAdminPath() + "/workprojectnotify/workProjectNotify/list/?repage";
+		}else {
+			RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+			if(StringUtils.isNotBlank(projectReportRecord.getCondition())){
+				if("earlyArchive".equals(projectReportRecord.getCondition())){
+					return "redirect:"+Global.getAdminPath()+"/project/projectEarlyPigeonhole/?repage";
+				}else if("completionArchive".equals(projectReportRecord.getCondition())) {
+					return "redirect:" + Global.getAdminPath() + "/project/projectCompletionPigeonhole/?repage";
+				}
+			}
+			if(null != ruralProjectRecords){
+				if (StringUtils.isNotBlank(projectReportRecord.getHome()) && projectReportRecord.getHome().equals("recordAll")){
+					return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessageAll/?repage";
+				}
+				if("1".equals(ruralProjectRecords.getProjectType())){
+					return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+				}else if("2".equals(ruralProjectRecords.getProjectType())){
+					return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+				}
+			}
+			return "redirect:"+Global.getAdminPath()+"/project/projectEarlyPigeonhole/?repage";
+		}
+	}
+
 }

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

@@ -214,6 +214,8 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	private Integer newReportTwoAuditNotifyFlag; //报告签发(审批)判定条件
 	private Integer newReportMaterialNotifyFlag; //缺失说明代办判定条件
 	private Integer newReportMaterialAuditNotifyFlag; //缺失说明(审批)判定条件
+	private Integer newRecordTwoNotifyFlag; //新归档代办判定条件
+	private Integer newRecordTwoAuditNotifyFlag; //新归档(审批)判定条件
 
 	private Integer reportDataFlag; //报告号是否存在判定条件
 
@@ -1638,4 +1640,20 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	public void setReportedTypeList(List<String> reportedTypeList) {
 		this.reportedTypeList = reportedTypeList;
 	}
+
+	public Integer getNewRecordTwoNotifyFlag() {
+		return newRecordTwoNotifyFlag;
+	}
+
+	public void setNewRecordTwoNotifyFlag(Integer newRecordTwoNotifyFlag) {
+		this.newRecordTwoNotifyFlag = newRecordTwoNotifyFlag;
+	}
+
+	public Integer getNewRecordTwoAuditNotifyFlag() {
+		return newRecordTwoAuditNotifyFlag;
+	}
+
+	public void setNewRecordTwoAuditNotifyFlag(Integer newRecordTwoAuditNotifyFlag) {
+		this.newRecordTwoAuditNotifyFlag = newRecordTwoAuditNotifyFlag;
+	}
 }

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

@@ -13,6 +13,7 @@ import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.historical.entity.HistoricalData;
 import com.jeeplus.modules.historical.service.HistoricalService;
 import com.jeeplus.modules.isignature.service.ISignatureDocumentService;
+import com.jeeplus.modules.projectAccessory.dao.ProjectTemplateDao;
 import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryRelationInfo;
 import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
 import com.jeeplus.modules.projectAccessory.service.ProjectTemplateService;
@@ -48,6 +49,7 @@ import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.tools.utils.HttpPostTool;
 import com.jeeplus.modules.utils.Aestool;
 import com.jeeplus.modules.utils.Rsatool;
+import com.jeeplus.modules.utils.SftpClientUtil;
 import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
 import com.jeeplus.modules.workactivity.entity.Activity;
 import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
@@ -74,6 +76,8 @@ import com.jeeplus.modules.workreview.service.WorkReviewStandardService;
 import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
 import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
 import com.jeeplus.modules.workstaff.service.WorkStaffBasicInfoService;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
 import org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.IdentityService;
@@ -85,9 +89,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -181,6 +188,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
     private WorkReviewStandardService workReviewStandardService;
     @Autowired
     private UserDao userDao;
+    @Autowired
+    private ProjectTemplateDao projectTemplateDao;
 
     private static byte[] SYN_BYTE = new byte[0];
 
@@ -2522,6 +2531,35 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
             workActivityProcessService.insertAuditsByType(bggdglys,processInstance.getId(),1,1);
             workActivityProcessService.insertAuditsByType(zsUserList,processInstance.getId(),2,0);
         }
+
+        //查询其他资料对应附件结构信息
+        ProjectTemplateInfo templateInfo = projectTemplateDao.getProjectTemplateInfoByName("其他资料");
+
+        //生成文件目录
+        //获取上传阿里云盘文件地址
+        String uploadCatalogueFilePath = downloadCatalogue(record.getId());
+
+        if(StringUtils.isNotBlank(uploadCatalogueFilePath)){
+            //将备考表添加到附件中
+            Workattachment workattachment = new Workattachment();
+            workattachment.setAttachmentId(templateInfo.getId());
+            workattachment.setProjectId(record.getId());
+            workattachment.setUrl(uploadCatalogueFilePath);
+            workattachment.setType("doc");
+            workattachment.setAttachmentFlag("100");
+            workattachment.setAttachmentName("文件目录.doc");
+            workattachment.setAttachmentUser(UserUtils.getUser().getId());
+            workattachment.setCompanyId(UserUtils.getSelectCompany().getId());
+            workattachmentService.insertOnWorkAttachment(workattachment);
+            //添加目录附件id
+            projectReportRecord.setCatalogueAttachmentId(workattachment.getId());
+
+            if (StringUtils.isNotBlank(projectReportRecord.getCatalogueAttachmentId())) {
+                if(!projectReportRecord.getCatalogueAttachmentId().equals(projectReportRecord.getCatalogueAttachmentId())){
+                    workattachmentService.deleteById(projectReportRecord.getCatalogueAttachmentId());
+                }
+            }
+        }
         return "true";
     }
     /**
@@ -3381,4 +3419,127 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
         }
     }
 
+
+    //生成目录
+    public String downloadCatalogue(String projectId)  {
+        Map data = catalogueData(projectId);
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("catalogue.ftl","UTF-8");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        //获取当前时间戳
+        long time = new Date().getTime();
+        File docFile = new File(time + "文件目录.doc");
+        FreemarkerUtil.generateFile(data,template,docFile);
+        String filePath = ResponseUtil.returnViewResponse(time + "文件目录.doc", docFile);
+
+        //本地备考表信息生成file文件
+        File file = new File(filePath);
+        //File转MultipartFile文件
+        SftpClientUtil sftpClientUtil = new SftpClientUtil();
+        MultipartFile mFile = sftpClientUtil.transformFile(docFile);
+        //文件上传oss
+        String uploadPath = null;
+        try {
+            uploadPath = ResponseUtil.uploadOss(mFile, "reportRecord");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            //删除本地文件
+            if (!file.isDirectory()) {
+                file.delete();
+            }
+        }
+        return uploadPath;
+    }
+
+    //获取数据
+    private Map<String,Object> catalogueData(String projectId){
+        //获取数据
+        RuralProjectRecords projectRecords = ruralProjectRecordsService.getQueryProjectUsers(projectId);
+        //文件信息获取
+        RuralProjectcontentinfo ruralProjectcontentinfo = ruralProjectRecordsService.formAccessory(projectRecords);
+        //目录
+        List<Map<String,String>> list=new LinkedList<>();
+        //序号
+        int count=1;
+        //成果文件
+        if (ruralProjectcontentinfo.getFileAttachmentList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileAttachmentList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","成果文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //依据性文件
+        if (ruralProjectcontentinfo.getFileGistdataList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileGistdataList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","依据文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //其它文件
+        if (ruralProjectcontentinfo.getFileGistdataList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileOtherList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","其它文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //freemarker参数值准备
+        Map<String,Object> data  = new LinkedHashMap<>();
+        //获取报告
+        ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(projectRecords.getId());
+        if (null!=projectReportData){
+            if(com.jeeplus.common.utils.StringUtils.isNotBlank(projectReportData.getNumber())){
+                data.put("number",projectReportData.getNumber());
+            }else{
+                data.put("number","");
+            }
+        }else{
+            //文号
+            data.put("number","");
+        }
+        data.put("list",list);
+        return data;
+    }
 }

+ 170 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageService.java

@@ -242,6 +242,54 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
         page.setCountFlag(false);
         projectRecords.setPage(page);
         List<RuralProjectRecords> recordsList = findList(projectRecords);
+
+        //查询所有和当前登陆人有关的项目的审核
+        WorkProjectNotify workProjectNotify = new WorkProjectNotify();
+        workProjectNotify.setUser(UserUtils.getUser());
+        workProjectNotify.setCompanyId(UserUtils.getSelectCompany().getId());
+        workProjectNotify.setRemarks("待审批");
+        //添加发票对应编号
+        workProjectNotify.setType("92");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> notifyList = workProjectNotifyService.findList(workProjectNotify);
+
+        //添加发票对应编号
+        workProjectNotify.setType("51");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> recordNotifyList = workProjectNotifyService.findList(workProjectNotify);
+
+        //添加发票对应编号
+        workProjectNotify.setType("95");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> reportedNotifyList = workProjectNotifyService.findList(workProjectNotify);
+
+        //查询新的新增报告流程信息代办
+        workProjectNotify.setType("96");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newReportNotifyList = workProjectNotifyService.findList(workProjectNotify);
+        //查询新的新增报告流程信息代办
+        workProjectNotify.setType("97");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newReportNotifyListTwo = workProjectNotifyService.findList(workProjectNotify);
+        //查询新的新增报告流程信息代办
+        workProjectNotify.setType("99");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> materialDefectRecord = workProjectNotifyService.findList(workProjectNotify);
+        //查询新的归档流程信息代办
+        workProjectNotify.setType("101");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newRecordNotifyList = workProjectNotifyService.findList(workProjectNotify);
+        //添加上报对应编号
+        workProjectNotify.setType("98");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newReportedNotifyList = workProjectNotifyService.findList(workProjectNotify);
+        //查询新的归档流程信息代办
+        workProjectNotify.setType("103");
+        //查询所有需要当前登录人进行处理的项目信息
+        List<WorkProjectNotify> newRecordTwoNotifyList = workProjectNotifyService.findList(workProjectNotify);
+
+
+
         //查询负责人信息
         for (RuralProjectRecords records : recordsList) {
             this.queryContractInfos(records);
@@ -279,6 +327,128 @@ public class RuralProjectMessageService extends CrudService<RuralProjectMessageD
             if(0 != records.getProjectRecordStatus() && 0 == records.getProjectReportRecordStatus()){
                 records.setProjectReportRecordStatus(records.getProjectRecordStatus());
             }
+
+            //新增报告展示
+            for (WorkProjectNotify notify: notifyList) {
+                if(notify.getNotifyId().equals(records.getPrdId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setReportNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setReportAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //线上归档展示
+            for (WorkProjectNotify notify: recordNotifyList) {
+                if(notify.getNotifyId().equals(records.getPrrId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setRecordNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setRecordAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //上报展示
+            for (WorkProjectNotify notify: reportedNotifyList) {
+                if(notify.getNotifyId().equals(records.getId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setReportedNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setReportedAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //新代办修改权限处理
+            for (WorkProjectNotify notify: newReportNotifyList) {
+                if(notify.getNotifyId().equals(records.getPrdId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //新代办流程2修改权限处理
+            for (WorkProjectNotify notify: newReportNotifyListTwo) {
+                if(notify.getNotifyId().equals(records.getPrdtId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //报告归档资料缺失说明修改权限处理
+            for (WorkProjectNotify notify: materialDefectRecord) {
+                if(notify.getNotifyId().equals(records.getPrdtId())){
+                    records.setReportNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+            //新代办修改权限处理
+            for (WorkProjectNotify notify: newRecordNotifyList) {
+                if(notify.getNotifyId().equals(records.getPrrId())){
+                    records.setNewRecordNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewRecordNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewRecordNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+
+            //新代办修改权限处理
+            for (WorkProjectNotify notify: newReportedNotifyList) {
+                if(notify.getNotifyId().equals(records.getId())){
+                    records.setNewRecordNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportedNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewReportedNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+
+            //新代办修改权限处理
+            for (WorkProjectNotify notify: newRecordTwoNotifyList) {
+                if(notify.getNotifyId().equals(records.getPrrId())){
+                    records.setNewRecordNotifyId(notify.getId());
+                    if("重新申请".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewRecordTwoNotifyFlag(1);
+                    }
+                    if("待审批".equals(notify.getRemarks()) && !"1".equals(notify.getStatus())){
+                        records.setNewRecordTwoAuditNotifyFlag(1);
+                    }
+                    break;
+                }
+            }
+
+
         }
         page.setList(recordsList);
         return page;

+ 540 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordTwoService.java

@@ -0,0 +1,540 @@
+package com.jeeplus.modules.ruralprojectrecords.service;
+
+import com.google.common.collect.Lists;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.FreemarkerUtil;
+import com.jeeplus.common.utils.ResponseUtil;
+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.dao.ProjectTemplateDao;
+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.ProjectContentChangeDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportDataDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectReportRecordDao;
+import com.jeeplus.modules.projectcontentinfo.dao.ProjectcontentinfoDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+import com.jeeplus.modules.projectcontentinfo.service.ProjectContentDataService;
+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.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.sys.dao.UserDao;
+import com.jeeplus.modules.sys.dao.WorkattachmentDao;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.sys.service.OfficeService;
+import com.jeeplus.modules.sys.service.UserService;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.utils.SftpClientUtil;
+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.service.WorkClientInfoService;
+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.workreview.service.WorkReviewStandardService;
+import com.jeeplus.modules.workstaff.service.WorkStaffBasicInfoService;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+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 org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * 项目列表Service
+ * @author 徐滕
+ * @create: 2021-07-26 16:09
+ */
+@Service
+@Transactional(readOnly = true)
+public class RuralProjectRecordTwoService  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 ProjectReportDataDao projectReportDataDao;
+    @Autowired
+    private ProjectReportNumService projectReportNumService;
+    @Autowired
+    private ProjectReportDataService 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 ProjectContentChangeDao projectContentChangeDao;
+    @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 ProjectContentDataService projectContentDataService;
+    @Autowired
+    private HistoricalService historicalService;
+    @Autowired
+    private ProjectcontentinfoService projectcontentinfoService;
+    @Autowired
+    private ProjectTemplateService projectTemplateService;
+    @Autowired
+    private SubProjectInfoService subProjectInfoService;
+    @Autowired
+    private ProjectFilingbatchRelationDao filingbatchRelationDao;
+    @Autowired
+    private ProjectFilingBatchDao projectFilingBatchDao;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private WorkStaffBasicInfoService workStaffBasicInfoService;
+    @Autowired
+    private WorkReviewStandardService workReviewStandardService;
+    @Autowired
+    private UserDao userDao;
+    @Autowired
+    private ProjectTemplateDao projectTemplateDao;
+    @Autowired
+    private ProjectReportRecordService projectReportRecordService;
+    @Autowired
+    private ProjectReportRecordDao projectReportRecordDao;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+    @Transactional(readOnly = false)
+    public void saveWorkattachments(ProjectReportRecord projectReportRecord) {
+        List<Workattachment> workattachments = projectReportRecord.getWorkAttachments();
+        if (workattachments!=null && workattachments.size()!=0){
+            for (Workattachment workattachment:workattachments){
+                if (workattachment.getId() == null) {
+                    continue;
+                }
+                if (workattachment.DEL_FLAG_NORMAL.equals(workattachment.getDelFlag())) {
+                    workattachment.setAttachmentId(projectReportRecord.getId());
+                    workattachment.setAttachmentFlag("99");
+                    workattachment.setAttachmentUser(UserUtils.getUser().getId());
+                    if (com.jeeplus.common.utils.StringUtils.isBlank(workattachment.getId()) || "null".equals(workattachment.getId())) {
+                        workattachment.preInsert();
+                        workattachmentDao.insert(workattachment);
+                    } else {
+                        workattachment.preUpdate();
+                        workattachmentDao.update(workattachment);
+                    }
+                } else {
+                    workattachmentDao.delete(workattachment);
+                }
+            }
+        }
+
+    }
+    @Transactional(readOnly = false)
+    public void insert(ProjectReportRecord projectReportRecord) {
+        dao.insertProjectReportRecord(projectReportRecord);
+    }
+
+    @Transactional(readOnly = false)
+    public void save(ProjectReportRecord projectReportRecord) {
+        ProjectReportData projectReportData =projectReportRecord.getReport();
+        projectReportData.setFileStatus("2");
+        //修改归档状态
+        projectReportDataService.updateFileStatus(projectReportData);
+        if (projectReportRecord.getIsNewRecord()){
+            projectReportRecord.preInsert();
+            projectReportRecord.setCreateDate(new Date());
+            dao.insertProjectReportRecord(projectReportRecord);
+        }else{
+            projectReportRecord.preUpdate();
+            //修改归档信息
+            dao.updateProjectReportRecord(projectReportRecord);
+        }
+        saveWorkattachments(projectReportRecord);
+    }
+
+    /**
+     * 提交归档存储
+     * @param projectReportRecord
+     * @param variables
+     */
+    @Transactional(readOnly = false)
+    public String saveProjectReportRecord(ProjectReportRecord projectReportRecord, Map<String, Object> variables, String processInstanceId) {
+
+        User user = UserUtils.getUser();
+        Boolean insert = false;
+        if (com.jeeplus.common.utils.StringUtils.isBlank(projectReportRecord.getId())){
+            projectReportRecord.setCompanyId(user.getComId());
+            projectReportRecord.setOfficeId(user.getOffice().getId());
+            projectReportRecord.preInsert();
+            insert = true;
+        }
+        //将附件插入数据库
+        saveWorkattachments(projectReportRecord);
+        //对数据进行插入数据库
+        if (insert) { //新增操作
+            this.insert(projectReportRecord);
+        }else {//修改操作
+            this.save(projectReportRecord);
+        }
+        //判断如果是暂存,则跳过流程操作
+        if("1".equals(projectReportRecord.getFlag())){
+            return "true";
+        }
+        //获取项目信息
+        RuralProjectRecords record = ruralProjectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+        //查询项目新增报告信息
+        ProjectReportData reportData = projectReportDataService.get(record.getPrdId());
+        //启动流程操作
+        String title = "报告号:"+reportData.getNumber()+"。项目【"+ record.getProjectName()+"】归档待审批";
+        String str = "报告号:"+reportData.getNumber()+"。项目【"+ record.getProjectName()+"】归档待审批";
+        // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+        identityService.setAuthenticatedUserId(user.getId());
+        // 启动流程
+        String businessKey = projectReportRecord.getId().toString();
+        Office office = UserUtils.getSelectOffice();
+        WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("5864872f45b84acd893010e66a3db2c8", office);
+
+        String processType = workActivityMenu.getProcessType();
+        StringBuffer buffer = new StringBuffer();
+        Activity activity = new Activity();
+        WorkProjectNotify workProjectNotify = UtilNotify
+                .saveNotify(projectReportRecord.getId(),
+                        null,
+                        projectReportRecord.getCompanyId(),
+                        title,
+                        str,
+                        "103",
+                        "0",
+                        "待审批",
+                        ""
+                );
+        List<User> users = new ArrayList<>();
+        List<User> bggdglys = UserUtils.getByRoleActivityEnname("bggdgly",3,office.getId(),"10",projectReportRecord.getCreateBy());
+        //查询总审人员信息(新增报告选择得总审人员)
+        List<User> zsUserList= Lists.newArrayList();
+        //查询总审人员Id
+        String bzshbUserId = userDao.getAuditUserListByBzshbUserId(reportData.getBzshbUserId());
+        User zsUser = null;
+        if(StringUtils.isNotBlank(bzshbUserId)){
+            zsUser = UserUtils.get(bzshbUserId);
+        }
+        if(null == zsUser){
+            return "流程审批总审人员下无用户,请联系管理员!";
+        }
+        zsUserList.add(zsUser);
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(workActivityMenu.getId())) {
+            workProjectNotify.setNotifyRole("");
+            workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+            List<Activity> activities = workActivityMenu.getActivities();
+            for (Activity a : activities) {
+                String encount = a.getEncount();
+                String enlist = a.getEnlist();
+                if (a.getRole()!=null && com.jeeplus.common.utils.StringUtils.isNotBlank(a.getRole().getEnname())){
+                    List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"10",projectReportRecord.getCreateBy());
+                    if (enusers.size()==0){
+                        projectReportRecord.setStatus("1");
+                        return "报告归档流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+                    }
+                    variables.put(enlist, enusers);
+                    variables.put(encount, enusers.size());
+                }
+                if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+                    activity = a;
+                }
+            }
+            buffer.append(activity.getRole().getEnname());
+            if (activity != null && com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getId())) {
+                //角色审批
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getRole().getEnname())) {
+                    users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"10",projectReportRecord.getCreateBy());
+                }
+                //人员审批
+                if (com.jeeplus.common.utils.StringUtils.isNotBlank(activity.getUser().getId())) {
+                    users.add(activity.getUser());
+                }
+            }
+            workProjectNotify.setId("");
+        } else {
+            variables.put("bzshbList", zsUserList);
+            if (zsUserList.size()==0){
+                projectReportRecord.setStatus("1");
+                this.save(projectReportRecord);
+                return "流程审批人不能为空,总审下无用户,请联系管理员!";
+            }
+            variables.put("bzshbcount",zsUserList.size());
+            processType = "newReportRecordTwo";
+            users.addAll(zsUserList);
+        }
+        for (User u : users){
+            workProjectNotify.setUser(u);
+            workProjectNotify.setId("");
+            workProjectNotify.setNotifyRole("档案管理员审批");
+            workProjectNotifyService
+                    .save(workProjectNotify);
+            Map<String,Object> extras = new HashMap<>();
+            extras.put("type","7001");
+            extras.put("id",workProjectNotify.getId());
+            extras.put("procDefKey","103");
+            UserUtils.pushInfoToApp(title,str,extras,u.getId());
+            UserUtils.pushIm(u.getId(),str);
+        }
+        variables.put("type", processType);
+        variables.put("busId", businessKey);
+        variables.put("passLv",true);
+        variables.put("title", "报告归档编号:" + projectReportRecord.getRecordNum());//设置标题;
+
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+
+        projectReportRecord.setProcessInstance(processInstance);
+        if (com.jeeplus.common.utils.StringUtils.isNotBlank(processInstanceId)) {
+            workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+            workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+            workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+        }
+        ProjectReportData projectReportData =projectReportRecord.getReport();
+        projectReportData.setFileStatus("2");
+        projectReportDataService.updateFileStatus(projectReportData);
+        // 修改更新流程实例ID
+        projectReportRecord.setProcessInstanceId(processInstance.getId());
+        dao.updateProcessInstanceId(projectReportRecord);
+        //通知添加流程实例ID
+        workProjectNotify.setProcessInstanceId(processInstance.getId());
+        workProjectNotifyService.save(workProjectNotify);
+        List<Activity> list = workActivityMenu.getActivities();
+        if (list != null && list.size() != 0) {
+            workActivityProcessService.saveList(list, processInstance.getId());
+        } else {
+            WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+            workActivityProcess.setCount(1);
+            workActivityProcess.setProcessKey(processType);
+            workActivityProcess.setProcessInstanceId(processInstance.getId());
+            workActivityProcess.setIsApproval("0");
+            workActivityProcessService.insert(workActivityProcess);
+            workActivityProcess.setCount(2);
+            workActivityProcessService.insert(workActivityProcess);
+            workActivityProcessService.insertAuditsByType(zsUserList,processInstance.getId(),1,1);
+            workActivityProcessService.insertAuditsByType(bggdglys,processInstance.getId(),2,0);
+        }
+
+        //查询其他资料对应附件结构信息
+        ProjectTemplateInfo templateInfo = projectTemplateDao.getProjectTemplateInfoByName("其他资料");
+
+        //生成文件目录
+        //获取上传阿里云盘文件地址
+        String uploadCatalogueFilePath = downloadCatalogue(record.getId());
+        ProjectReportRecord newProjectReportRecord = projectReportRecordService.get(projectReportRecord.getId());
+        if(StringUtils.isNotBlank(uploadCatalogueFilePath)){
+            //将备考表添加到附件中
+            Workattachment workattachment = new Workattachment();
+            workattachment.setAttachmentId(templateInfo.getId());
+            workattachment.setProjectId(record.getId());
+            workattachment.setUrl(uploadCatalogueFilePath);
+            workattachment.setType("doc");
+            workattachment.setAttachmentFlag("100");
+            workattachment.setAttachmentName("文件目录.doc");
+            workattachment.setAttachmentUser(UserUtils.getUser().getId());
+            workattachment.setCompanyId(UserUtils.getSelectCompany().getId());
+            workattachmentService.insertOnWorkAttachment(workattachment);
+            //添加目录附件id
+            projectReportRecord.setCatalogueAttachmentId(workattachment.getId());
+
+            if (StringUtils.isNotBlank(newProjectReportRecord.getCatalogueAttachmentId()) && StringUtils.isNotBlank(projectReportRecord.getCatalogueAttachmentId())) {
+                if(!newProjectReportRecord.getCatalogueAttachmentId().equals(projectReportRecord.getCatalogueAttachmentId())){
+                    workattachmentService.deleteById(newProjectReportRecord.getCatalogueAttachmentId());
+                }
+            }
+            projectReportRecordDao.updateRuralProjectReportRecord(projectReportRecord);
+        }
+
+        return "true";
+    }
+
+    //生成目录
+    public String downloadCatalogue(String projectId)  {
+        Map data = catalogueData(projectId);
+        //模板对象
+        Template template=null;
+        //freemaker模板路径
+        File path = new File(this.getClass().getResource("/").getPath()+"/freemarker");
+        Configuration cfg = new Configuration();
+        try {
+            cfg.setDirectoryForTemplateLoading(path);
+            //选择对应的ftl文件
+            template = cfg.getTemplate("catalogue.ftl","UTF-8");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        //获取当前时间戳
+        long time = new Date().getTime();
+        File docFile = new File(time + "文件目录.doc");
+        FreemarkerUtil.generateFile(data,template,docFile);
+        String filePath = ResponseUtil.returnViewResponse(time + "文件目录.doc", docFile);
+
+        //本地备考表信息生成file文件
+        File file = new File(filePath);
+        //File转MultipartFile文件
+        SftpClientUtil sftpClientUtil = new SftpClientUtil();
+        MultipartFile mFile = sftpClientUtil.transformFile(docFile);
+        //文件上传oss
+        String uploadPath = null;
+        try {
+            uploadPath = ResponseUtil.uploadOss(mFile, "reportRecord");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            //删除本地文件
+            if (!file.isDirectory()) {
+                file.delete();
+            }
+        }
+        return uploadPath;
+    }
+
+    //获取数据
+    private Map<String,Object> catalogueData(String projectId){
+        //获取数据
+        RuralProjectRecords projectRecords = ruralProjectRecordsService.getQueryProjectUsers(projectId);
+        //文件信息获取
+        RuralProjectcontentinfo ruralProjectcontentinfo = ruralProjectRecordsService.formAccessory(projectRecords);
+        //目录
+        List<Map<String,String>> list=new LinkedList<>();
+        //序号
+        int count=1;
+        //成果文件
+        if (ruralProjectcontentinfo.getFileAttachmentList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileAttachmentList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","成果文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //依据性文件
+        if (ruralProjectcontentinfo.getFileGistdataList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileGistdataList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","依据文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //其它文件
+        if (ruralProjectcontentinfo.getFileGistdataList().size()>0){
+            List<ProjectTemplateInfo> infos=ruralProjectcontentinfo.getFileOtherList();
+            for (int i=0;i<infos.size();i++){
+                if (infos.get(i).getWorkAttachments().size()>0){
+                    for (WorkClientAttachment attachment:infos.get(i).getWorkAttachments()){
+                        Map<String,String> map=new HashMap<>();
+                        map.put("count",count+"");
+                        map.put("type","其它文件");
+                        map.put("content",infos.get(i).getAttachName());
+                        map.put("fileName",attachment.getAttachmentName());
+                        map.put("remarks","");
+                        count++;
+                        list.add(map);
+                    }
+                }
+            }
+        }
+        //freemarker参数值准备
+        Map<String,Object> data  = new LinkedHashMap<>();
+        //获取报告
+        ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(projectRecords.getId());
+        if (null!=projectReportData){
+            if(com.jeeplus.common.utils.StringUtils.isNotBlank(projectReportData.getNumber())){
+                data.put("number",projectReportData.getNumber());
+            }else{
+                data.put("number","");
+            }
+        }else{
+            //文号
+            data.put("number","");
+        }
+        data.put("list",list);
+        return data;
+    }
+}

+ 2 - 1
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java

@@ -1688,7 +1688,8 @@ public class RuralCostProjectMessageController extends BaseController {
     @RequestMapping(value = "getReportRecordProcessOne")
     public String getReportRecordProcessOne(ProjectReportRecord projectReportRecord,Model model) {
         model.addAttribute("processInstanceId", projectReportRecord.getProcessInstanceId());
-        return "modules/workreimbursement/workReimbursementTrack";
+        model.addAttribute("recordId", projectReportRecord.getId());
+        return "modules/workreimbursement/projectRecordTwoTrack";
     }
 
     //报告流程审批

+ 484 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageNewTwoController.java

@@ -0,0 +1,484 @@
+package com.jeeplus.modules.ruralprojectrecords.web;
+
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.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.ProjectReportDataDao;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportData;
+import com.jeeplus.modules.projectcontentinfo.entity.ProjectReportRecord;
+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.service.RuralProjectMessageNewService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordTwoService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
+import com.jeeplus.modules.sys.dao.UserDao;
+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.workcontractinfo.entity.WorkContractInfo;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 造价审核项目列表Controller
+ * @author 徐滕
+ * @create: 2021-07-26 16:02
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/ruralProject/ruralCostProjectMessageNewTwo")
+public class RuralCostProjectMessageNewTwoController extends BaseController {
+    @Autowired
+    private RuralProjectRecordsService projectRecordsService;
+    @Autowired
+    private ProjectRecordsService projectRecordsServices;
+    @Autowired
+    private RuralProjectMessageNewService ruralProjectMessageService;
+    @Autowired
+    private ProjectReportDataService projectReportDataService;
+    @Autowired
+    private ProjectContentDataService projectContentDataService;
+    @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 ProjectEngineeringService engineeringService;
+    @Autowired
+    private ProjectReportRecordService projectReportRecordService;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageS;
+    @Autowired
+    private ProjectReportDataDao projectReportDataDao;
+    @Autowired
+    private UserDao userDao;
+    @Autowired
+    private RuralProjectRecordTwoService ruralProjectRecordTwoService;
+
+    private static byte[] SYN_BYTE = new byte[0];
+
+    /**
+     * 根据信息获取归档信息并调转页面
+     */
+    @RequestMapping(value = "formRecord")
+    public String form(ProjectReportRecord projectReportRecord, Model model) throws Exception {
+        //查询“配农网”工程类型id
+        String engineeringId = engineeringService.getEngineeringId("202");
+        if (StringUtils.isBlank(projectReportRecord.getView()) || !projectReportRecord.getView().equals("view")){
+            if(StringUtils.isBlank(projectReportRecord.getId())){
+                projectReportRecord.setCreateDate(new Date());
+                projectReportRecord.setCreateBy(UserUtils.getUser());
+            }
+        }
+        ProjectReportData projectReportData = new ProjectReportData();
+        ProjectRecords projectRecords = new ProjectRecords();
+        projectReportData.setFileStatus("1");
+        ProjectReportData reportData = ruralProjectMessageService.getProjectReportDateByProjectId(projectReportRecord.getReportId());
+        if(null != reportData){
+            if (StringUtils.isBlank(projectReportRecord.getView()) || !projectReportRecord.getView().equals("view")){
+                synchronized (SYN_BYTE) {
+                    int count = projectReportRecordService.getNumber(reportData.getId());
+                    projectReportRecord.setRecordNum(count>9?reportData.getNumber()+"-"+count+"":reportData.getNumber()+"-"+"0"+count);
+                }
+            }else{
+                ProjectReportRecord projectReportRecordInfo =ruralProjectMessageService.getProjectReportRecord(reportData.getId());
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecordInfo, projectReportRecord);
+            }
+        }
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReportId());
+        MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords, projectRecords);
+        //获取合同信息
+        WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(projectRecords.getWorkContractInfo().getId());
+        projectRecords.setWorkContractInfo(projectContractInfo);
+        reportData.setProject(projectRecords);
+        projectReportRecord.setReport(reportData);
+        projectReportRecord.setUploadMode(uploadMode);
+        model.addAttribute("projectReportRecord", projectReportRecord);
+        model.addAttribute("project", projectReportRecord.getReport().getProject());
+
+        ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+        //添加项目类型
+        relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+        relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
+        //判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+        String money=ruralProjectRecords.getSubmitMoney();
+        Integer approvalMoney=null;
+        if(StringUtils.isBlank(money)){
+            approvalMoney=1;
+        }else{
+            approvalMoney=Integer.parseInt(money);
+        }
+        switch (approvalMoney){
+            case 0:
+                //金额为0
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+                break;
+            case 1:
+                //500w以下金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("1");
+                break;
+            case 2:
+                //500w以上金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("2");
+                break;
+        }
+
+        //添加报告类型
+        relateInfo.setRequiredStage(2);
+        relateInfo.setId(ruralProjectRecords.getId());
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        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");
+                                }
+                            }
+                        }
+                    }
+                    projectReportRecord.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");
+                                }
+                            }
+                        }
+                    }
+                    projectReportRecord.setFileGistdataList(projectTemplateList);
+                    break;
+                case "13":
+                    projectReportRecord.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+            }
+
+        }
+
+        if(null != projectContractInfo){
+            if(projectContractInfo.getWorkClientInfoList().size()>0){
+                model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
+            }
+        }
+        if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("view")){
+            return "modules/ruralprojectrecords/cost/projectReportRecord/projectReportRecordView";
+        }else if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modiftApply")){
+            ProcessInstance processInstance = actTaskService.getProcIns(projectReportRecord.getProcessInstanceId());
+            if (processInstance!=null) {
+                Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+                Act act = new Act();
+                act.setTaskId(taskInfok.getId());
+                act.setTaskName(taskInfok.getName());
+                act.setProcDefId(taskInfok.getProcessDefinitionId());
+                act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+                act.setProcInsId(taskInfok.getProcessInstanceId());
+                act.setTask(taskInfok);
+                projectReportRecord.setAct(act);
+            }
+            return "modules/projectcontentinfo/projectReportRecordModiftApply";
+        }
+        return "modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordForm";
+    }
+
+    /**
+     * 暂存报告归档
+     * @param projectReportRecord
+     * @param model
+     * @param redirectAttributes
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "holdSaveRecord")
+    public String holdSaveRecord(ProjectReportRecord projectReportRecord, Model model, RedirectAttributes redirectAttributes) throws Exception{
+        if (!beanValidator(model, projectReportRecord)){
+            return form(projectReportRecord, model);
+        }
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+        try {
+            //获取创建者信息
+            User user = projectReportRecord.getCreateBy();
+            String sta = projectReportRecord.getStatus();
+            if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+                addMessage(redirectAttributes, "您不是申请人,无法修改");
+                return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+            }
+            //添加暂存判定
+            projectReportRecord.setFlag("1");
+            //将状态改为暂存状态
+            projectReportRecord.setStatus("1");
+            String processInstanceId ="";
+            if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(sta) && "3".equals(sta)){
+                processInstanceId = projectReportRecordService.get(projectReportRecord.getId()).getProcessInstanceId();
+            }
+            Map<String, Object> variables = new HashMap<>();
+            if(!projectReportRecord.getIsNewRecord()){//编辑表单保存
+                ProjectReportRecord t = projectReportRecordService.get(projectReportRecord.getId());//从数据库取出记录的值
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecord,t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modify")){
+                    projectReportRecord.setStatus("1");
+                }
+                ruralProjectMessageService.saveProjectReportRecord(t,variables,processInstanceId);//保存
+            }else {//新增表单保存
+                ProjectReportRecord reportRecord = projectReportRecordService.getprojectReportRecord(projectReportRecord.getReport().getId());//从数据库取出记录的值
+                if(null != reportRecord){
+                    addMessage(redirectAttributes, "报告归档已存在,请勿重复提交");
+                    return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                }
+                ruralProjectMessageService.saveProjectReportRecord(projectReportRecord,variables,processInstanceId);//保存
+            }
+            addMessage(redirectAttributes, "保存报告归档暂存成功");
+        }catch (Exception e){
+            addMessage(redirectAttributes, "保存报告归档暂存失败");
+            logger.error("保存报告归档暂存失败",e);
+        }
+        if("1".equals(ruralProjectRecords.getProjectType())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+        }else if("2".equals(ruralProjectRecords.getProjectType())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+    }
+
+    /**
+     * 查看,增加,编辑报告归档表单页面
+     */
+    @RequestMapping(value = "formRecordModify")
+    public String formRecordModify(ProjectReportRecord projectReportRecord, Model model) {
+        //查询“配农网”工程类型id
+        String engineeringId = engineeringService.getEngineeringId("202");
+        projectReportRecord = projectReportRecordService.get(projectReportRecord.getId());
+        if(StringUtils.isBlank(projectReportRecord.getId())){
+            projectReportRecord.setCreateDate(new Date());
+            projectReportRecord.setCreateBy(UserUtils.getUser());
+        }
+
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+        ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+        //添加项目类型
+        relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+        relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
+        //判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+        String money=ruralProjectRecords.getSubmitMoney();
+        Integer approvalMoney=null;
+        if(StringUtils.isBlank(money)){
+            approvalMoney=1;
+        }else{
+            approvalMoney=Integer.parseInt(money);
+        }
+        switch (approvalMoney){
+            case 0:
+                //金额为0
+                relateInfo.setAttachmentProjectApprovalMoney(null);
+                break;
+            case 1:
+                //500w以下金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("1");
+                break;
+            case 2:
+                //500w以上金额状态
+                relateInfo.setAttachmentProjectApprovalMoney("2");
+                break;
+        }
+
+        //添加报告类型
+        relateInfo.setRequiredStage(2);
+        relateInfo.setId(ruralProjectRecords.getId());
+        //查询报告文件、依据性文件、其他文件必填列表以及数据
+        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");
+                                }
+                            }
+                        }
+                    }
+                    projectReportRecord.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");
+                                }
+                            }
+                        }
+                    }
+                    projectReportRecord.setFileGistdataList(projectTemplateList);
+                    break;
+                case "13":
+                    projectReportRecord.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
+                    break;
+            }
+
+        }
+        ProjectRecords projectRecords = new ProjectRecords();
+        try {
+            MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords, projectRecords);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //获取合同信息
+        WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(ruralProjectRecords.getWorkContractInfo().getId());
+        projectRecords.setWorkContractInfo(projectContractInfo);
+        projectReportRecord.getReport().setProject(projectRecords);
+        projectReportRecord.setView("modify");
+        model.addAttribute("projectReportRecord", projectReportRecord);
+        model.addAttribute("workClientInfoName", projectReportRecord.getClientName());
+        model.addAttribute("project", projectReportRecord.getReport().getProject());
+
+        if(StringUtils.isNotBlank(projectReportRecord.getProcessInstanceId())){
+            ProcessInstance processInstance = actTaskService.getProcIns(projectReportRecord.getProcessInstanceId());
+            if (processInstance!=null) {
+                Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+                Act act = new Act();
+                act.setTaskId(taskInfok.getId());
+                act.setTaskName(taskInfok.getName());
+                act.setProcDefId(taskInfok.getProcessDefinitionId());
+                act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+                act.setProcInsId(taskInfok.getProcessInstanceId());
+                act.setTask(taskInfok);
+                projectReportRecord.setAct(act);
+            }
+        }
+
+        if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("view")){
+            return "modules/ruralprojectrecords/projectReportRecord/projectReportRecordView";
+        }else if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modiftApply")){
+            return "modules/projectcontentinfo/projectReportRecordModiftApply";
+        }
+        if("1".equals(projectReportRecord.getStatus()) || "3".equals(projectReportRecord.getStatus())){
+            return "modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordForm";
+        }
+        return "modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModify";
+    }
+
+    /**
+     * 保存报告归档
+     */
+    @RequestMapping(value = "saveRecord")
+    public String save(ProjectReportRecord projectReportRecord, Model model, RedirectAttributes redirectAttributes, Integer saveAuditFlag) throws Exception{
+        if (!beanValidator(model, projectReportRecord)){
+            return form(projectReportRecord, model);
+        }
+        //获取项目信息
+        RuralProjectRecords ruralProjectRecords = projectRecordsService.get(projectReportRecord.getReport().getProject().getId());
+        try {
+
+            //获取创建者信息
+            User user = projectReportRecord.getCreateBy();
+            String sta = projectReportRecord.getStatus();
+            if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+                addMessage(redirectAttributes, "您不是申请人,无法修改");
+                return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+            }
+            //状态设置为审核中
+            projectReportRecord.setStatus("2");
+            String processInstanceId ="";
+            if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(sta) && "3".equals(sta)){
+                processInstanceId = projectReportRecordService.get(projectReportRecord.getId()).getProcessInstanceId();
+            }
+            Map<String, Object> variables = new HashMap<>();
+            if(!projectReportRecord.getIsNewRecord()){//编辑表单保存
+                ProjectReportRecord t = projectReportRecordService.get(projectReportRecord.getId());//从数据库取出记录的值
+                if(null != saveAuditFlag){
+                    if(1 == saveAuditFlag && t.getStatus().equals("2")){
+                        addMessage(redirectAttributes, "报告归档已送审,请勿重复送审");
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                    }
+                    if(t.getStatus().equals("5")){
+                        addMessage(redirectAttributes, "报告归档已登记完成,无法再次送审");
+                        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+                    }
+                }
+                MyBeanUtils.copyBeanNotNull2Bean(projectReportRecord,t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+                if (StringUtils.isNotBlank(projectReportRecord.getView()) && projectReportRecord.getView().equals("modify")){
+                    projectReportRecord.setStatus("2");
+                }
+                ruralProjectRecordTwoService.saveProjectReportRecord(t,variables,processInstanceId);//保存
+            }else {//新增表单保存
+                ProjectReportRecord reportRecord = projectReportRecordService.getprojectReportRecord(projectReportRecord.getReport().getId());//从数据库取出记录的值
+                if(null !=reportRecord){
+                    projectReportRecord.setId(reportRecord.getId());
+                }
+                ruralProjectRecordTwoService.saveProjectReportRecord(projectReportRecord,variables,processInstanceId);//保存
+            }
+            addMessage(redirectAttributes, "保存报告归档成功");
+        }catch (Exception e){
+            addMessage(redirectAttributes, "保存报告归档失败");
+            logger.error("保存报告归档失败",e);
+        }
+        if("1".equals(ruralProjectRecords.getProjectType())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralProjectMessage/?repage";
+        }else if("2".equals(ruralProjectRecords.getProjectType())){
+            return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+        }
+        return "redirect:" + Global.getAdminPath() + "/ruralProject/ruralCostProjectMessage/?repage";
+    }
+}

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

@@ -1679,7 +1679,8 @@ public class RuralProjectMessageController extends BaseController {
     @RequestMapping(value = "getReportRecordProcessOne")
     public String getReportRecordProcessOne(ProjectReportRecord projectReportRecord,Model model) {
         model.addAttribute("processInstanceId", projectReportRecord.getProcessInstanceId());
-        return "modules/workreimbursement/workReimbursementTrack";
+        model.addAttribute("recordId", projectReportRecord.getId());
+        return "modules/workreimbursement/projectRecordTwoTrack";
     }
 
     //报告归档流程审批

+ 175 - 0
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -3806,6 +3806,181 @@ public class WorkProjectNotifyController extends BaseController {
 						return "modules/ruralprojectrecords/view/projectReportRecordView";
 
 					}
+				} else if (workProjectNotify.getType().equals("103")) {    //工作内容报告归档Two
+					//查询“配农网”工程类型id
+					String engineeringId = engineeringService.getEngineeringId("202");
+					ProjectReportRecord projectReportRecord = projectReportRecordService.get(workProjectNotify.getNotifyId());
+					//判断是否未全过程归档项目信息
+					if("3".equals(projectReportRecord.getReport().getProject().getProjectType())){
+						Act act = getByAct(projectReportRecord.getProcessInstanceId());
+						projectReportRecord.setAct(act);
+						projectReportRecord.setHome("home");
+						model.addAttribute("projectReportRecord", projectReportRecord);
+						if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+							return "modules/processProjectReportRecord/projectReportRecordView";
+						}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+							return "modules/processProjectReportRecord/projectReportRecordAudit";
+						} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+							return "modules/processProjectReportRecord/projectReportRecordModifyApply";
+						} else {
+							return "modules/processProjectReportRecord/projectReportRecordView";
+						}
+					}
+					ProjectReportData projectReportData = projectReportDataService.getOnRural(projectReportRecord.getReport().getId());
+					projectReportRecord.setProjectReportData(projectReportData);
+					Projectcontentinfo projectcontentinfo = projectcontentinfoService.getByInfoId(projectReportData.getId());
+					projectcontentinfo.setProjectReportData(projectReportData);
+					//获取项目信息
+					RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.getQueryProjectUsers(projectReportRecord.getReport().getProject().getId());
+					//获取子项目列表信息
+					List<SubProjectInfo> subProjectInfos=this.queryReportDetails(ruralProjectRecords.getId());
+					//获取合同信息
+					WorkContractInfo workContractInfo=this.queryWorkContract(ruralProjectRecords.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]);
+							}
+							projectReportRecord.setChargeCriterionList(chargeCriterionList);
+						}
+					}
+
+					Act act = getByAct(projectReportRecord.getProcessInstanceId());
+					projectReportRecord.setAct(act);
+
+					if(StringUtils.isNotBlank(workProjectNotify.getHome())){
+						projectReportRecord.setHome(workProjectNotify.getHome());
+					}else{
+						projectReportRecord.setHome("home");
+					}
+
+
+					WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(ruralProjectRecords.getWorkContractInfo().getId());
+					ruralProjectRecords.setWorkContractInfo(projectContractInfo);
+					MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords,projectReportRecord.getReport().getProject());//将编辑表单中的非NULL值覆盖数据库记录中的值
+					if(null != projectContractInfo){
+						if(projectContractInfo.getWorkClientInfoList().size()>0){
+							model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
+						}
+					}
+
+						ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+						//添加项目类型
+						relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+						relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
+						//判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
+						String money=ruralProjectRecords.getSubmitMoney();
+						Integer approvalMoney=null;
+						if(StringUtils.isBlank(money)){
+							approvalMoney=1;
+						}else{
+							approvalMoney=Integer.parseInt(money);
+						}
+						switch (approvalMoney){
+							case 0:
+								//金额为0
+								relateInfo.setAttachmentProjectApprovalMoney(null);
+								break;
+							case 1:
+								//500w以下金额状态
+								relateInfo.setAttachmentProjectApprovalMoney("1");
+								break;
+							case 2:
+								//500w以上金额状态
+								relateInfo.setAttachmentProjectApprovalMoney("2");
+								break;
+						}
+
+						//添加报告类型
+						//relateInfo.setRequiredStage(2);
+						List<Integer> requiredStageList = Lists.newArrayList();
+						requiredStageList.add(1);
+						requiredStageList.add(2);
+						relateInfo.setRequiredStageList(requiredStageList);
+						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.getProjectTemplateListByArchive(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");
+												}
+											}
+										}
+									}
+									projectReportRecord.setFileAttachmentList(fileAttachmentList);
+									break;
+								case "12":
+									List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateListByArchive(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");
+												}
+											}
+										}
+									}
+									projectReportRecord.setFileGistdataList(projectTemplateList);
+									break;
+								case "13":
+									projectReportRecord.setFileOtherList(projectTemplateService.getProjectTemplateListByArchive(relateInfo));
+									break;
+							}
+
+						}
+					projectReportRecord.setUploadMode(uploadMode);
+					model.addAttribute("projectcontentinfo", projectcontentinfo);
+					model.addAttribute("projectRecords", ruralProjectRecords);
+					model.addAttribute("projectReportData", projectReportData);
+					model.addAttribute("workContractInfo", workContractInfo);
+					model.addAttribute("projectReportRecord", projectReportRecord);
+					model.addAttribute("project", projectReportRecord.getReport().getProject());
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+						projectReportRecord.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileAttachmentList()));
+						projectReportRecord.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileGistdataList()));
+						projectReportRecord.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileOtherList()));
+						return "modules/ruralprojectrecords/view/projectReportRecordView";
+					}else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						projectReportRecord.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileAttachmentList()));
+						projectReportRecord.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileGistdataList()));
+						projectReportRecord.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileOtherList()));
+						model.addAttribute("identification","projectcontentinfoFile");
+						model.addAttribute("identificationName","归档审核意见");
+						if("bzshb".equals(act.getTaskDefKey())){
+							model.addAttribute("type","1");
+						}else{
+							model.addAttribute("type","0");
+						}
+						return "modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordAudit";
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModifyApply";
+					} else {
+						projectReportRecord.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileAttachmentList()));
+						projectReportRecord.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileGistdataList()));
+						projectReportRecord.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileOtherList()));
+						return "modules/ruralprojectrecords/view/projectReportRecordView";
+
+					}
 				} else if (workProjectNotify.getType().equals("65")) {    //工作内容报告归档
 					ProjectReportRecord projectReportRecord = ruralProjectRecordsDownMessageService.get(workProjectNotify.getNotifyId());
 					//获取项目信息

+ 20 - 1
src/main/resources/mappings/modules/projectcontentinfo/ProjectReportRecordDao.xml

@@ -29,7 +29,8 @@
 		d.number AS "report.number",
 		a.reference_remarks as "referenceRemarks",
 		a.reference_attachment_id as "referenceAttachmentId",
-		a.catalogue_attachment_id as "catalogueAttachmentId"
+		a.catalogue_attachment_id as "catalogueAttachmentId",
+		a.record_audit_type as "recordAuditType"
 	</sql>
 
 	<sql id="projectMaterialDefectRecordColumns">
@@ -339,6 +340,24 @@
 			<if test="null != catalogueAttachmentId and '' != catalogueAttachmentId">
 				,catalogue_attachment_id = #{catalogueAttachmentId}
 			</if>
+			<if test="null != recordAuditType">
+				,record_audit_type = #{recordAuditType}
+			</if>
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateRuralProjectReportRecordOnFileId">
+		UPDATE rural_project_report_record SET
+			update_date = #{updateDate}
+			<if test="null != referenceRemarks and '' != referenceRemarks">
+				,reference_remarks = #{referenceRemarks}
+			</if>
+			<if test="null != referenceAttachmentId and '' != referenceAttachmentId">
+				,reference_attachment_id = #{referenceAttachmentId}
+			</if>
+			<if test="null != catalogueAttachmentId and '' != catalogueAttachmentId">
+				,catalogue_attachment_id = #{catalogueAttachmentId}
+			</if>
 		WHERE id = #{id}
 	</update>
 

+ 17 - 0
src/main/webapp/WEB-INF/tags/act/histoicFlowRecordTwo.tag

@@ -0,0 +1,17 @@
+<%@ tag language="java" pageEncoding="UTF-8"%>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<%@ attribute name="procInsId" type="java.lang.String" required="true" description="流程实例ID"%>
+<%@ attribute name="startAct" type="java.lang.String" required="false" description="开始活动节点名称"%>
+<%@ attribute name="endAct" type="java.lang.String" required="false" description="结束活动节点名称"%>
+<%@ attribute name="recordId" type="java.lang.String" required="false" description="归档id"%>
+<fieldset>
+	<%--<legend>流转信息</legend>--%>
+	<div id="histoicFlowList">
+		正在加载流转信息...
+	</div>
+</fieldset>
+<script type="text/javascript">
+	$.get("${ctx}/act/task/histoicFlowOnRecordTwo?procInsId=${procInsId}&recordId=${recordId}&startAct=${startAct}&endAct=${endAct}&t="+new Date().getTime(), function(data){
+	    $("#histoicFlowList").html(data);
+	});
+</script>

+ 20 - 15
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp

@@ -707,7 +707,7 @@
                 ,{align:'center', title: '电子',  width:70,templet:function(d){
                         var st = getRuralProjectArchiveState(d.projectReportRecordStatus);
                         if(st.action)
-                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportRecordProcessOne?id="+d.prrId+"&processInstanceId=" + d.prrProcessInstanceId + "','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;
@@ -805,24 +805,26 @@
 									if(d.emergencyProject == 1){
 										/*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 || d.projectReportRecordStatus == 6){
-											xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
 										}
 										if(d.projectReportRecordStatus == 1){
-											xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg- layui-bg-green\" > 线上重新归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg- layui-bg-green\" > 线上重新归档</a>";
 										}
 										if(d.projectReportRecordStatus == 2){
 											xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该报告线上归档审批吗?', this.href)\" class=\"layui-btn layui-btn-xs  layui-bg-red\" > 撤回线上归档</a>";
 										}
 										if(d.projectReportRecordStatus == 3){
-											xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
 										}
 										if(d.projectReportRecordStatus == 4){
 											//驳回操作
-											// if(d.newRecordNotifyFlag == 1){
+											if(d.newRecordTwoNotifyFlag == 1){
+												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											}else if(d.newRecordNotifyFlag == 1){
 												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
-											<%--}else{--%>
-											<%--	xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";--%>
-											<%--}--%>
+											}else{
+												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											}
 										}
 									}
 								}
@@ -830,25 +832,27 @@
 								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 || d.projectReportRecordStatus == 6){
-										xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
 									}
 									if(d.projectReportRecordStatus == 1){
-										xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg- layui-bg-green\" > 线上重新归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg- layui-bg-green\" > 线上重新归档</a>";
 
 									}
 									if(d.projectReportRecordStatus == 2){
 										xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该报告线上归档审批吗?', this.href)\" class=\"layui-btn layui-btn-xs  layui-bg-red\" > 撤回线上归档</a>";
 									}
 									if(d.projectReportRecordStatus == 3){
-										xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
 									}
 									if(d.projectReportRecordStatus == 4){
 										//驳回操作
-										// if(d.newRecordNotifyFlag == 1){
+										if(d.newRecordTwoNotifyFlag == 1){
+											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										}else if(d.newRecordNotifyFlag == 1){
 											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
-										<%--}else{--%>
-										<%--	xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";--%>
-										<%--}--%>
+										}else{
+											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										}
 									}
 								}
 							}
@@ -1053,6 +1057,7 @@
 					,"ppfId":"${projectRecords.ppfId}"
 					,"ppfProcessInstanceId":"${projectRecords.ppfProcessInstanceId}"
 					,"submitMoney":"${projectRecords.submitMoney}"
+					,"newRecordTwoNotifyFlag":"${projectRecords.newRecordTwoNotifyFlag}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1730 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordAudit.jsp


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1057 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordForm.jsp


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1118 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModify.jsp


+ 856 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/record/cost/recordTwo/projectReportRecordModifyApply.jsp

@@ -0,0 +1,856 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>合同归档管理</title>
+	<meta name="decorator" content="default"/>
+	<link href="${ctxStatic}/layer-v2.3/layui/tableTree/treetable.css" rel="stylesheet" />
+	<%@include file="/webpage/include/treetable.jsp" %>
+
+	<script type="text/javascript">
+		function listTr(obj){
+			var name=$(obj).attr("id");
+			var tiao="."+name;
+			var span=$(obj).find("td").eq(2);
+			// var ss=$(span).val().split(" ")[4];
+			$(span).toggle(function () {
+				$(tiao).hide();
+				$(span).find("span").eq(0).attr("class","default_shut")
+			},function () {
+				$(tiao).show();
+				$(span).find("span").eq(0).attr("class","default_open")
+			});
+		}
+        var validateForm;
+        function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            if(validateForm.form()){
+				var projectId = '${project.id}';
+				var leng = $("#file_attachment tr").length;
+				var boolFlag = true;
+				for(var i=0; i<leng; i++) {
+					var numberStr = $("#file_attachment tr").eq(i).find("td:first").html();
+					var second = $("#file_attachment tr").eq(i).find("td:eq(1)").html();
+					var name = $("#file_attachment tr").eq(i).find("td:eq(2)").html();
+					var fileFlag = $("#file_attachment tr").eq(i).find("td:last").html();
+					if(second == 1){
+						if(numberStr != undefined && numberStr !=null && numberStr !=''){
+							if (fileFlag==1){
+
+							}else{
+								top.layer.msg("请上传成果文件!", {icon: 0});
+								return false;
+							}
+						}
+					}
+				}
+				if(boolFlag){
+					var gistdata = $("#file_gistdata tr").length;
+					for(var i=0; i<gistdata; i++) {
+						var numberStr = $("#file_gistdata tr").eq(i).find("td:first").html();
+						var second = $("#file_gistdata tr").eq(i).find("td:eq(1)").html();
+						var fileFlag = $("#file_gistdata tr").eq(i).find("td:last").html();
+						if(second == 1){
+							if(numberStr != undefined && numberStr !=null && numberStr !=''){
+								if (fileFlag==1){
+
+								}else{
+									top.layer.msg("请上传依据性文件!", {icon: 0});
+									return false;
+								}
+							}
+						}
+					}
+				}
+				if(boolFlag){
+					var other = $("#file_other tr").length;
+					for(var i=0; i<other; i++) {
+						var numberStr = $("#file_other tr").eq(i).find("td:first").html();
+						var second = $("#file_other tr").eq(i).find("td:eq(1)").html();
+						var fileFlag = $("#file_other tr").eq(i).find("td:last").html();
+
+						if(second == 1){
+							if(numberStr != undefined && numberStr !=null && numberStr !=''){
+								if (fileFlag==1){
+
+								}else{
+									top.layer.msg("请上传其它文件!", {icon: 0});
+									return false;
+								}
+							}
+						}
+					}
+				}
+				if(boolFlag) {
+					$("#inputForm").submit();
+					return true;
+				}
+            }else {
+                parent.layer.msg("信息未填写完整!", {icon: 5});
+            }
+            return false;
+        }
+        $(document).ready(function() {
+			$(".tabMove").mouseover(function(){
+				//tips层-下
+				var td=$(this)
+				var tdval=$(this).find("input").val();
+				layer.tips(tdval, td, {
+					tips: 3
+				});
+			})
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+        function insertTitle(tValue){
+            var list = "${projectReportRecord.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;            for(var i = 0;i<files.length;i++) {                var file = files[i];
+            var attachmentId = "";
+            var attachmentFlag = "99";
+            console.log(file);
+            var timestamp=new Date().getTime();
+
+            var storeAs = "projectRecords";
+            var uploadPath="http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/"+storeAs;/*将这段字符串存到数据库即可*/
+            var divId = "_attachment";
+            $("#addFile"+divId).show();
+            multipartUploadWithSts(storeAs, file,attachmentId,attachmentFlag,uploadPath,divId,size);}
+        }
+
+        function setValuee(obj){
+            $("#reportId").val(obj.id);
+            $("#type").val(obj.type);
+            $("#reportnumber").val(obj.number);
+            $("#reportName").val(obj.name);
+            $("#reportDate").val(obj.reportDate);
+            $("#contractNum").val(obj.contractNum);
+            $("#contractName").val(obj.contractName);
+            $("#clientName").val(obj.clientName);
+            $("#projectName").val(obj.projectName);
+            $("#projectNum").val(obj.projectNum);
+            $.ajax({
+                type:'post',
+                url:'${ctx}/projectcontentinfo/projectReportRecord/getNumber',
+                data:{
+                    "reportId":obj.number
+                },
+                success:function(data){
+                    var numberCount = data.numberCount;
+                    $("#recordNum").val(obj.number+"-"+numberCount);
+                    $("#numberCount").val(numberCount);
+                }
+            })
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="projectReportRecord" action="${ctx}/projectcontentinfo/projectReportRecord/newAuditSaveTwo" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="type"/>
+			<form:hidden path="home"/>
+			<form:hidden path="numberCount"/>
+			<form:hidden id="reportId" path="report.id"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="report.name"/>
+			<form:hidden path="referenceAttachmentId"/>
+			<form:hidden path="catalogueAttachmentId"/>
+
+			<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 with-icon">
+						<sys:gridselectreportrecord url="${ctx}/projectcontentinfo/projectReportData/selectreportData" id="report" name="report.id"  value="${projectReportRecord.report.id}"  title="选择报告" labelName="report.number"
+													labelValue="${projectReportRecord.report.number}" cssClass="form-control layui-input required" fieldLabels="报告" fieldKeys="name" searchLabel="报告名称" searchKey="name" ></sys:gridselectreportrecord>
+
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>报告日期:</label>
+					<div class="layui-input-block">
+						<input id="reportDate" name="report.reportDate"  htmlEscape="false" readonly="true" class="form-control  layui-input required" value="<fmt:formatDate value="${projectReportRecord.report.reportDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同编号:</label>
+					<div class="layui-input-block">
+						<form:input id="contractNum" path="contractNum" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id="contractName" path="contractName" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">委托方:</label>
+					<div class="layui-input-block">
+						<form:input id="clientName" path="clientName" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id="projectNum" path="projectNum" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block">
+						<form:input id="projectName" path="projectName" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>归档申请人:</label>
+					<div class="layui-input-block">
+						<form:input id="cBName" path="createBy.name" htmlEscape="false" readonly="true" class="form-control  layui-input required"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">归档时间:</label>
+					<div class="layui-input-block">
+						<input id="recordDate" name="recordDate"  htmlEscape="false" readonly="true" class="form-control  layui-input" value="<fmt:formatDate value="${projectReportRecord.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12  with-textarea">
+					<label class="layui-form-label">说明:</label>
+					<div class="layui-input-block">
+						<form:textarea placeholder="请输入说明:" path="remarks" htmlEscape="false" rows="4" maxlength="255" class="form-control "/>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>成果文件</h2></div>
+				<div id="addFile_attachment" style="display: none" class="upload-progress">
+					<span id="fileName_attachment" ></span>
+					<span id="_attachment" ></span>
+					<b><span id="baifenbi_attachment" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed tree_table">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th width="30%">文件类型</th>
+							<th width="">文件描述/文件</th>
+							<th width="100px">文件大小(M)</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${projectReportRecord.fileAttachmentList}" var = "fileAttachment" varStatus="status">
+							<tr id="file_attachment_${fileAttachment.id}_tr" onclick="listTr(this)">
+								<td style="display:none">${fileAttachment.id}</td>
+								<td style="display:none">${fileAttachment.mustFlag}</td>
+								<c:choose>
+									<c:when test="${fileAttachment.mustFlag == 1}">
+										<td class="tabMove" style="text-align: left;"><span class='default_open ' style="padding-right: 15px; "></span><span style="color: red">* </span>${fileAttachment.attachName}<input type="hidden" value="${fileAttachment.attachName}"/></td>
+									</c:when>
+									<c:otherwise>
+										<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileAttachment.attachName}<input type="hidden" value="${fileAttachment.attachName}"/></td>
+									</c:otherwise>
+								</c:choose>
+<%--								<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileAttachment.attachName}<input type="hidden" value="${fileAttachment.attachName}"/></td>--%>
+								<td>
+<%--									<div><span class="file_nei">内容:</span><div class="file_neirong">${fileAttachment.attachName}</div></div>--%>
+									<div><span style="font-weight: bold">文件格式及大小:</span>${fileAttachment.attachLength}M;  ${fileAttachment.attachTypes}</div>
+								</td>
+								<td></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileAttachment.id}&projectId=${project.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									</div>
+								</td>
+								<td style="display:none">${fileAttachment.fileFlag}</td>
+							</tr>
+							<c:forEach items="${fileAttachment.workAttachments}" var = "workClientAttachment" varStatus="status">
+								<tr class="file_attachment_${fileAttachment.id}_tr">
+									<td></td>
+									<c:choose>
+										<c:when test="${projectReportRecord.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+<%--									<td>--%>
+<%--										<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workAttachment.url}','90%','90%')">${workAttachment.attachmentName} ; </a>--%>
+<%--									</td>--%>
+									<td class="op-td" style="text-align:center;">
+											${workClientAttachment.fileSize}
+									</td>
+									<td class="op-td">
+										<div class="op-btn-box" >
+												<%--附件下载删除--%>
+											<c:choose>
+												<c:when test="${projectReportRecord.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:when>
+														<c:otherwise>
+															<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+
+												<%--											<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileAttachment.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable',this)" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>--%>
+										</div>
+									</td>
+								</tr>
+							</c:forEach>
+						</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>
+					<span id="_gistdata" ></span>
+					<b><span id="baifenbi_gistdata" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_gistdata" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="gistdata_file" type="file" name="gistdata_file" multiple="multiple" style="display: none;" onChange="if(this.value)gistdataInsertTitle(this.value);"/>
+				<span id="gistdata_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="gistdata_upTable" class="table table-bordered table-condensed tree_table">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th width="30%">文件类型</th>
+							<th width="">文件描述/文件</th>
+							<th width="100px">文件大小(M)</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_gistdata">
+						<c:forEach items="${projectReportRecord.fileGistdataList}" var = "fileGistdata" varStatus="status">
+							<tr  id="file_gistdata_${fileGistdata.id}_tr" onclick="listTr(this)">
+									<%-- <td>${status.index + 1}</td>--%>
+								<td style="display:none">${fileGistdata.id}</td>
+								<td style="display:none">${fileGistdata.mustFlag}</td>
+								<c:choose>
+									<c:when test="${fileGistdata.mustFlag == 1}">
+										<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span><span style="color: red">* </span>${fileGistdata.attachName}<input type="hidden" value="${fileGistdata.attachName}"/></td>
+									</c:when>
+									<c:otherwise>
+										<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileGistdata.attachName}<input type="hidden" value="${fileGistdata.attachName}"/></td>
+									</c:otherwise>
+								</c:choose>
+<%--								<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileGistdata.attachName}<input type="hidden" value="${fileGistdata.attachName}"/></td>--%>
+<%--								<td></td>--%>
+								<td>
+<%--									<div><span class="file_nei">内容:</span><div class="file_neirong">${fileGistdata.attachName}</div></div>--%>
+									<div><span style="font-weight: bold">文件格式及大小:</span>${fileGistdata.attachLength}M;  ${fileGistdata.attachTypes}</div>
+								</td>
+								<td></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileGistdata.id}&projectId=${project.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','gistdata_upTable')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									</div>
+								</td>
+								<td style="display:none">${fileGistdata.fileFlag}</td>
+
+							</tr>
+							<c:forEach items="${fileGistdata.workAttachments}" var = "workClientAttachment" varStatus="status">
+								<tr class="file_gistdata_${fileGistdata.id}_tr">
+									<td></td>
+									<c:choose>
+										<c:when test="${projectReportRecord.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+<%--									<td>--%>
+<%--										<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workAttachment.url}','90%','90%')">${workAttachment.attachmentName} ; </a>--%>
+<%--									</td>--%>
+
+									<td class="op-td" style="text-align:center;">
+											${workClientAttachment.fileSize}
+									</td>
+									<td class="op-td">
+										<div class="op-btn-box" >
+												<%--附件下载删除--%>
+											<c:choose>
+												<c:when test="${projectReportRecord.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:when>
+														<c:otherwise>
+															<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+
+												<%--											<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileAttachment.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable',this)" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>--%>
+										</div>
+									</td>
+								</tr>
+							</c:forEach>
+						</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>
+					<span id="_other" ></span>
+					<b><span id="baifenbi_other" ></span></b>
+					<div class="progress">
+						<div id="jindutiao_other" class="progress-bar" style="width: 0%" aria-valuenow="0">
+						</div>
+					</div>
+				</div>
+				<input id="other_file" type="file" name="other_file" multiple="multiple" style="display: none;" onChange="if(this.value)otherInsertTitle(this.value);"/>
+				<span id="other_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable_other" class="table table-bordered table-condensed tree_table">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th width="30%">文件类型</th>
+							<th width="">文件描述/文件</th>
+							<th width="100px">文件大小(M)</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_other">
+						<c:forEach items="${projectReportRecord.fileOtherList}" var = "fileOther" varStatus="status">
+							<tr id="file_other_${fileOther.id}_tr" onclick="listTr(this)">
+									<%-- <td>${status.index + 1}</td>--%>
+								<td style="display:none">${fileOther.id}</td>
+								<td style="display:none">${fileOther.mustFlag}</td>
+								<c:choose>
+									<c:when test="${fileOther.mustFlag == 1}">
+										<td class="tabMove" style="text-align: left;"><span class='default_open ' style="padding-right: 15px; "></span><span style="color: red">* </span>${fileOther.attachName}<input type="hidden" value="${fileOther.attachName}"/></td>
+									</c:when>
+									<c:otherwise>
+										<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileOther.attachName}<input type="hidden" value="${fileOther.attachName}"/></td>
+									</c:otherwise>
+								</c:choose>
+<%--								<td class="tabMove" style="text-align: left;"><span class='default_open' style="padding-right: 15px; "></span>${fileOther.attachName}<input type="hidden" value="${fileOther.attachName}"/></td>--%>
+								<td>
+<%--									<div><span class="file_nei">内容:</span><div class="file_neirong">${fileOther.attachName}</div></div>--%>
+									<div><span style="font-weight: bold">文件格式及大小:</span>${fileOther.attachLength}M;  ${fileOther.attachTypes}</div>
+								</td>
+								<td></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+										<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileOther.id}&projectId=${project.id}&uploadMode=${projectReportRecord.uploadMode}','70%','80%',false,'inputForm','upTable_other')" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>
+									</div>
+								</td>
+								<td style="display:none">${fileOther.fileFlag}</td>
+
+							</tr>
+							<c:forEach items="${fileOther.workAttachments}" var = "workClientAttachment" varStatus="status">
+								<tr class="file_other_${fileOther.id}_tr">
+									<td></td>
+									<c:choose>
+										<c:when test="${projectReportRecord.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+													<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+																					   or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+																</c:when>
+																<c:otherwise>
+																	<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+																</c:otherwise>
+															</c:choose>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+<%--									<td>--%>
+<%--										<a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workAttachment.url}','90%','90%')">${workAttachment.attachmentName} ; </a>--%>
+<%--									</td>--%>
+
+									<td class="op-td" style="text-align:center;">
+											${workClientAttachment.fileSize}
+									</td>
+									<td class="op-td">
+										<div class="op-btn-box" >
+												<%--附件下载删除--%>
+											<c:choose>
+												<c:when test="${projectReportRecord.uploadMode == 2}">
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:when>
+														<c:otherwise>
+															<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+														</c:otherwise>
+													</c:choose>
+												</c:when>
+												<c:otherwise>
+													<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+
+												<%--											<a href="javascript:void(0)"  onclick="openBill2('编辑附件', '${ctx}/projectAccessory/projectAccessory/workAttachmentForm?attachmentId=${fileAttachment.id}&projectId=${project.id}','70%','80%',false,'inputForm','upTable',this)" class="op-btn op-btn-edit" ><i class="fa fa-edit"></i> 编辑</a>--%>
+										</div>
+									</td>
+								</tr>
+							</c:forEach>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${projectReportRecord.act.procInsId}"/>
+					<act:histoicFlowRecordTwo procInsId="${projectReportRecord.act.procInsId}"  recordId="${projectReportRecord.id}"/>
+				</div>
+			</div>
+
+			<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()){
+			var action = $document.getElementById(inputForm).action;
+			var handleInfo = $($document.getElementById(inputForm)).serialize();
+			$.ajax({
+				type : "POST",
+				url : action,
+				data : handleInfo,
+				//请求成功
+				success:function(data) {
+					var d = data;
+					//输出提示信息
+					if(d.str.length>0){
+						parent.layer.msg(d.str,{icon:1});
+					}
+					$("#"+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>

+ 22 - 17
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp

@@ -705,7 +705,7 @@
                 ,{align:'center', title: '电子',  width:70,templet:function(d){
                         var st = getRuralProjectArchiveState(d.projectReportRecordStatus);
                         if(st.action)
-                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralProjectMessage/getReportRecordProcessOne?processInstanceId=" + d.prrProcessInstanceId + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                            var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralProjectMessage/getReportRecordProcessOne?id="+d.prrId+"&processInstanceId=" + d.prrProcessInstanceId + "','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;
@@ -803,24 +803,26 @@
 									if(d.emergencyProject == 1){
 										/*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 || d.projectReportRecordStatus == 6){
-											xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
 										}
 										if(d.projectReportRecordStatus == 1){
-											xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
 										}
 										if(d.projectReportRecordStatus == 2){
 											xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该线上报告归档审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回线上归档</a>";
 										}
 										if(d.projectReportRecordStatus == 3){
-											xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
+											xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
 										}
 										if(d.projectReportRecordStatus == 4){
 											//驳回操作
-											// if(d.newRecordNotifyFlag == 1){
-												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
-											<%--}else{--%>
-											<%--	xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";--%>
-											<%--}--%>
+											if(d.newRecordTwoNotifyFlag == 1){
+												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											}else if(d.newRecordNotifyFlag == 1){
+												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											}else{
+												xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+											}
 										}
 									}
 								}
@@ -828,24 +830,26 @@
 								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 || d.projectReportRecordStatus == 6){
-										xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('新增归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecord?reportId=" + d.id +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 线上归档</a>";
 									}
 									if(d.projectReportRecordStatus == 1){
-										xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('修改归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId +"','95%', '95%','','送审,暂存,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
 									}
 									if(d.projectReportRecordStatus == 2){
 										xml+="<a href=\"${ctx}/ruralProject/ruralProjectMessage/cancelInvalidate?id=" + d.prrId + "&processInstanceId=" + d.prrProcessInstanceId + "\" onclick=\"return confirmx('确认要撤回该线上报告归档审批吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回线上归档</a>";
 									}
 									if(d.projectReportRecordStatus == 3){
-										xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
+										xml+="<a href=\"#\" onclick=\"openDialogre('撤回调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + " ','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 线上重新归档</a>";
 									}
 									if(d.projectReportRecordStatus == 4){
 										//驳回操作
-										// if(d.newRecordNotifyFlag == 1){
-											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
-										<%--}else{--%>
-										<%--	xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";--%>
-										<%--}--%>
+										if(d.newRecordTwoNotifyFlag == 1){
+											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNewTwo/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										}else if(d.newRecordNotifyFlag == 1){
+											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessageNew/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										}else{
+											xml+="<a href=\"#\" onclick=\"openDialogre('调整归档信息', '${ctx}/ruralProject/ruralCostProjectMessage/formRecordModify?id=" + d.prrId + "&view=modify','95%', '95%','','送审,关闭')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 线上重新归档</a>";
+										}
 									}
 								}
 							}
@@ -1054,6 +1058,7 @@
 					,"ppfId":"${projectRecords.ppfId}"
 					,"ppfProcessInstanceId":"${projectRecords.ppfProcessInstanceId}"
 					,"submitMoney":"${projectRecords.submitMoney}"
+					,"newRecordTwoNotifyFlag":"${projectRecords.newRecordTwoNotifyFlag}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">

+ 16 - 0
src/main/webapp/webpage/modules/workreimbursement/projectRecordTwoTrack.jsp

@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>报销流程</title>
+	<meta name="decorator" content="default"/>
+</head>
+<body class="gray-bg">
+<div class="container form layui-form">
+		<act:flowChart procInsId="${processInstanceId}"/>
+		<act:histoicFlowRecordTwo procInsId="${processInstanceId}" recordId="${recordId}"/>
+</div>
+
+</body>
+</html>
+