فهرست منبع

案例库项目 功能

[user3] 3 سال پیش
والد
کامیت
709a9c6106
22فایلهای تغییر یافته به همراه6750 افزوده شده و 5 حذف شده
  1. 30 0
      src/main/java/com/jeeplus/modules/projectcontentinfo/service/ProjectReportRecordService.java
  2. 12 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsCaseBaseDao.java
  3. 14 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java
  4. 38 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/entity/RuralProjectRecords.java
  5. 344 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsCaseBaseService.java
  6. 605 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java
  7. 72 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java
  8. 190 0
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsCaseBaseController.java
  9. 2 2
      src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java
  10. 359 1
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  11. 18 0
      src/main/resources/mappings/modules/projectcontentinfo/ProjectReportRecordDao.xml
  12. 6 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageAllDao.xml
  13. 6 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml
  14. 544 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsCaseBaseDao.xml
  15. 53 0
      src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml
  16. 100 1
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp
  17. 1466 0
      src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralProjectRecordsCaseBaseList.jsp
  18. 2236 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsCaseAudit.jsp
  19. 496 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsCaseView.jsp
  20. 61 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/all/ruralProjectMessageAllList.jsp
  21. 97 0
      src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp
  22. 1 1
      src/main/webapp/webpage/modules/sys/sysHome.jsp

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

@@ -2056,4 +2056,34 @@ public class ProjectReportRecordService extends CrudService<ProjectReportRecordD
 		return "保存审核意见成功!";
 	}
 
+	//根据项目id查询report信息
+	public ProjectReportRecord getProjectReportRecordByProjectId(String projectId){
+		ProjectReportRecord projectReportRecord= super.get(projectId);
+		if (null == projectReportRecord){
+			ProjectReportData reportData = ruralProjectMessageService.getProjectReportDateByProjectId(projectId);
+			projectReportRecord = dao.getRuralProjectReportRecordByReportId(reportData.getId());
+			projectReportRecord.setReport(reportData);
+			projectReportRecord.setType(2);
+		}else{
+			projectReportRecord.setType(1);
+		}
+		if (projectReportRecord!=null && StringUtils.isNotBlank(projectReportRecord.getId())){
+			Workattachment workattachment = new Workattachment();
+			workattachment.setAttachmentId(projectId);
+			workattachment.setAttachmentFlag("99");
+			projectReportRecord.setWorkAttachments(workattachmentService.findList(workattachment));
+			workattachmentService.attachmentManageOnUrl(projectReportRecord.getWorkAttachments());
+		}
+		if (projectReportRecord.getSignCostOne()!=null && StringUtils.isNotBlank(projectReportRecord.getSignCostOne().getId())){
+			User signCostOne = UserUtils.get(projectReportRecord.getSignCostOne().getId());
+			projectReportRecord.setSignCostOne(signCostOne);
+		}
+		if (projectReportRecord.getSignCostTwo()!=null && StringUtils.isNotBlank(projectReportRecord.getSignCostTwo().getId())){
+			User signCostTwo = UserUtils.get(projectReportRecord.getSignCostTwo().getId());
+			projectReportRecord.setSignCostTwo(signCostTwo);
+		}
+		projectReportRecord.setUploadMode(uploadMode);
+		return projectReportRecord;
+	}
+
 }

+ 12 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsCaseBaseDao.java

@@ -0,0 +1,12 @@
+package com.jeeplus.modules.ruralprojectrecords.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+
+@MyBatisDao
+public interface RuralProjectRecordsCaseBaseDao extends CrudDao<RuralProjectRecords> {
+    Integer queryCount(RuralProjectRecords records);
+    //删除 将case_status改为7
+    void deleteCaseBase(RuralProjectRecords records);
+}

+ 14 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java

@@ -356,4 +356,18 @@ public interface RuralProjectRecordsDao extends CrudDao<RuralProjectRecords> {
     List<RuralProjectRecords> selectDepartmentReportPageOverdue(@Param("ruralProjectRecords") RuralProjectRecords ruralProjectRecords, @Param("statementCompanyComprehensiveInfo")StatementCompanyComprehensiveInfo statementCompanyComprehensiveInfo,@Param("beginDate")String beginDate,@Param("endDate") String endDate);
     //部门级 查询项目超期信息的总条数
     Integer selectDepartmentReportPageOverdueCount(StatementCompanyComprehensiveInfo statementCompanyComprehensiveInfo);
+
+    //案例项目根据项目id更新流程实例id
+    int updateProcessInstanceId(RuralProjectRecords records);
+
+    //查询案例项目
+    List<RuralProjectRecords> findCaseBaseList(RuralProjectRecords records);
+
+    //更新案例项目
+    void updateCaseBase(RuralProjectRecords records);
+
+    //新增案例项目
+    void insertCaseBase(RuralProjectRecords records);
+
+
 }

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

@@ -300,6 +300,12 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	private Integer reportSignatureUrlFlag;		//报告签章url状态
 	private Integer approvalSignatureUrlFlag;		//审定单签章url状态
 
+	private String caseType;      		    //是否为案例项目(0:不是  1:是)
+	private String caseCreateBy;               //案例项目 创建人id
+	private String caseStatus;				//案例项目的状态
+	private String caseProcessId;			//案例项目的流程id
+
+
 
 	private List<String> civilProjectList = Lists.newArrayList();
 	private List<WorkClientAttachment> workAttachments = Lists.newArrayList();
@@ -2176,4 +2182,36 @@ public class RuralProjectRecords extends ActEntity<RuralProjectRecords> {
 	public void setSignatureUrl(String signatureUrl) {
 		this.signatureUrl = signatureUrl;
 	}
+
+	public String getCaseType() {
+		return caseType;
+	}
+
+	public void setCaseType(String caseType) {
+		this.caseType = caseType;
+	}
+
+	public String getCaseCreateBy() {
+		return caseCreateBy;
+	}
+
+	public void setCaseCreateBy(String caseCreateBy) {
+		this.caseCreateBy = caseCreateBy;
+	}
+
+	public String getCaseStatus() {
+		return caseStatus;
+	}
+
+	public void setCaseStatus(String caseStatus) {
+		this.caseStatus = caseStatus;
+	}
+
+	public String getCaseProcessId() {
+		return caseProcessId;
+	}
+
+	public void setCaseProcessId(String caseProcessId) {
+		this.caseProcessId = caseProcessId;
+	}
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 344 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsCaseBaseService.java


+ 605 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java

@@ -77,6 +77,7 @@ 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 org.activiti.engine.ActivitiObjectNotFoundException;
 import org.activiti.engine.HistoryService;
 import org.activiti.engine.IdentityService;
 import org.activiti.engine.RuntimeService;
@@ -3608,4 +3609,608 @@ public class RuralProjectRecordsService extends CrudService<RuralProjectRecordsD
 		page.setList(recordsList);
 		return page;
 	}
+
+	//启动流程  案例库
+	@Transactional(readOnly = false)
+	public String startProcess(RuralProjectRecords records,String processInstanceId) {
+		Map<String, Object> variables = new HashMap<String, Object>();
+		//各值准备
+		String officeId = UserUtils.getUser().getOffice().getId();
+		Office office = officeService.get(officeId);
+		records.setOffice(office);
+		String str = "";
+		//项目名称获取   先不考虑多项目申请
+//		List<String> projectNameList = getProjectNameList(workInvoice);
+//		String projectNameStr = String.join(",", projectNameList);
+		String title = "项目【"+ records.getProjectName() +"】申请案例项目待审批";//标题
+		str = "项目【"+ records.getProjectName() +"】申请案例项目待审批,项目编号:"+records.getProjectId()+",项目报告号:"+records.getProjectReportNumber();//内容
+
+		// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+		identityService.setAuthenticatedUserId(UserUtils.getUser().getId());
+
+		// 启动流程
+		String businessKey = records.getId().toString();
+		WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c82bdea00005c750905",records.getOffice());//office可能有问题
+		// 启动流程
+		String processType = workActivityMenu.getProcessType();
+		StringBuffer buffer = new StringBuffer();
+		Activity activity = new Activity();
+		WorkProjectNotify workProjectNotify = UtilNotify
+				.saveNotify(records.getId(),
+						null,
+						UserUtils.getSelectCompany().getId(),
+						title,
+						str,
+						"152", //对应之后的判断,xxx
+						"0",
+						"待审批",
+						""  //通知角色
+				);
+		List<User> users = new ArrayList<>();       //↓要改 enname type***         businesstype有什么影响吗 没有影响
+		//enname:流程审批人{就是第一个task的id}       type:2是部门领导,3是公司领导
+		List<User> zjls = UserUtils.getByRoleActivityEnname("zjl",3,office.getId(),"4",records.getCreateBy());  //一样   创建者
+
+		//↓这层判断基本为空,【不用管】
+		if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+			processType = workActivityMenu.getProcessType();
+			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 && StringUtils.isNotBlank(a.getRole().getEnname())){
+					List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"4",records.getCreateBy());
+					if (enusers.size()==0){
+
+						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 && StringUtils.isNotBlank(activity.getId())) {
+				//角色审批
+				if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+					users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"4",records.getCreateBy());
+				}
+				//人员审批
+				if (StringUtils.isNotBlank(activity.getUser().getId())) {
+					users.add(activity.getUser());
+				}
+			}
+			workProjectNotify.setId("");
+		} else {
+			if (zjls==null||zjls.size()==0){
+			//发票有那个暂存的,我需要吗?
+				return "流程审批人不能为空,总经理下无用户,请联系管理员!";
+			}
+			processType = "caseBase";   //流程标识   是当前应用流程图的id
+			variables.put("applyUserId", records.getCreateBy().getId());  //一样  applyuserID:发起人(开始节点)
+			variables.put("zjlCount",zjls.size());    //要对应流程图的对应的基数  注意命名一致
+			variables.put("zjlList",zjls);			//要对应流程图的对应的集合
+			users.addAll(zjls);
+		}
+		//这是发通知的类,要放数据的话直接存到workProjectNotify里
+		for (User user : users){
+			workProjectNotify.setUser(user);
+			workProjectNotify.setId("");
+			workProjectNotify.setNotifyRole("总经理审批");
+			workProjectNotifyService
+					.save(workProjectNotify);
+			Map<String,Object> extras = new HashMap<>();
+			extras.put("type","7002");     //好像不用改
+			extras.put("id",workProjectNotify.getId());
+			extras.put("procDefKey","152");       //对应type
+			UserUtils.pushInfoToApp(title,str,extras,user.getId());   //app不管但得写
+			UserUtils.pushIm(user.getId(),str);
+		}
+		variables.put("type", processType);
+		variables.put("busId", businessKey);
+		variables.put("title", "项目编号:" + records.getProjectId());//设置标题;
+		//推送消息↓?x
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+		//↓不用管?
+		if (com.jeeplus.common.utils.StringUtils.isNotBlank(processInstanceId)) {
+			workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+			workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+			workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+		}
+		// 更新流程实例ID
+		records.setProcessInstanceId(processInstance.getId());
+		dao.updateProcessInstanceId(records);  //根据项目id去更新实例id
+		//通知添加流程实例ID
+		workProjectNotify.setProcessInstanceId(processInstance.getId());
+		workProjectNotifyService.save(workProjectNotify);
+
+		List<Activity> list = workActivityMenu.getActivities();
+		if (list != null && list.size() != 0) {
+			workActivityProcessService.saveList(list, processInstance.getId());
+		} else {
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessKey(processType);  //流程图的id
+			workActivityProcess.setCount(1);
+			workActivityProcess.setProcessInstanceId(processInstance.getId());  //流程实例ID
+			workActivityProcess.setIsApproval("0");   //审核状态:是否审批
+			workActivityProcessService.save(workActivityProcess);
+			workActivityProcessService.insertAuditsByType(zjls,processInstance.getId(),1,1);  //count:环节,type:第一个环节为1其它均为0
+		}
+
+		List<RuralProjectRecords> list1 = dao.findCaseBaseList(records);
+		records.setCaseStatus("2");
+		if(list1.size()!=0){
+			dao.updateCaseBase(records);
+		}else {
+			dao.insertCaseBase(records);
+		}
+		return "";
+	}
+
+	//根据项目id查项目信息
+	public RuralProjectRecords getProjectByProjectId(RuralProjectRecords records){
+		RuralProjectRecords ruralProjectRecords = dao.getProjectByProjectId(records.getProjectId());
+		return ruralProjectRecords;
+	}
+
+	/*
+	 * 审核
+	 * */
+	@Transactional(readOnly = false)
+	public String auditSaveCaseBase(RuralProjectRecords records, List<User> auditUsers){
+		int projectStatus = records.getProjectStatus();
+		String taskDefKey = records.getAct().getTaskDefKey();  //???????????↓
+		//modifyApply 调整        taskDefKey 是节点    是zjl审批就签收,不是就是自己添加flag,因为重新申请没有yes/no
+		if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit") ) {
+			actTaskService.claim(records.getAct().getTaskId(), UserUtils.getUser().getId());  //签收任务
+
+		}else {
+			records.getAct().setFlag("yes");      //审核意见
+			records.setModifyFlag("1");
+			records.setProjectStatus(5);
+//			super.save(records);    //   projectstatus:2              xxxxx
+		}
+
+		//评论,意见
+		String comment = " ";
+		if ( projectStatus == ProjectStatusEnum.REJECTED.getValue()) {          //环节:已驳回  = 4
+			comment = ("yes".equals(records.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+		}else {
+			comment = ("yes".equals(records.getAct().getFlag())?"[同意] ":"[驳回] ");
+		}
+
+		//yes 的时候状态为审核通过 否则为未通过
+		//2 审核中 4 驳回
+		records.setProjectStatus(("yes".equals(records.getAct().getFlag()) ?2:4));
+
+//		User createUser = UserUtils.get(testProjectRecord.getCreateBy().getId());      //id需要
+		User createUser = UserUtils.getUser();
+
+		Map<String, Object> vars = Maps.newHashMap();
+		//业务逻辑对应的条件表达式
+		String notifyRole = "";    //通知角色
+		User user = null;   	//?
+		int key = 0;
+		String  taskCount = "";
+		String enname = "";
+
+		List<Activity> activitieList = activityService.getByProcessInstanceId(records.getProcessInstanceId());  //有的
+		WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+		if (activitieList != null && activitieList.size() != 0) {
+			workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+			workActivityMenu.setActivities(activitieList);
+		}
+
+		WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+		WorkActivityProcess selectProcess = new WorkActivityProcess();
+		selectProcess.setProcessInstanceId(records.getProcessInstanceId());
+		List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+		List<Activity> activities = workActivityMenu.getActivities();
+
+		Office office = UserUtils.getSelectOffice();
+		office = officeService.get(office.getId());
+		records.setOffice(office);
+		String notifyStr = "项目编号:"+records.getProjectId()+",项目名称:"+ records.getProjectName();
+		String str = notifyStr+",创建人:"+records.getCreateBy().getName()+",所属部门:"+records.getOffice().getName();
+		String titleStr = "项目名称:"+ records.getProjectName();
+
+		//if外一层好像是不跑的
+		if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("caseBase")) {   //流程图id
+			key = 1;
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				if (taskDefKey.equals("modifyApply")) {
+					taskCount = "0";
+					workActivityProcess.setId("");
+					workActivityProcess.setCount(0);
+					if (!"yes".equals(records.getAct().getFlag())) {
+						records.setProjectStatus(ProjectStatusEnum.RECALL.getValue());
+						workActivityProcess.setIsApproval("2");
+						vars.put("pass", false);
+					} else {
+						vars.put("pass", true);
+						workActivityProcess.setIsApproval("1");
+					}
+					break;
+				} else {
+					taskCount = activityProcess.getCount()+"";
+					workActivityProcess = activityProcess;
+					if (!workActivityProcess.getIsApproval().equals("0")) {
+						workActivityProcess.setId("");
+					}
+					for (Activity activity : activities) {
+						if (activity.getCount() == activityProcess.getCount()) {
+							notifyRole = activity.getName();
+							break;
+						}
+					}
+					if (!"yes".equals(records.getAct().getFlag())) {
+						notifyRole = "调整项目";
+						records.setProjectStatus(ProjectStatusEnum.REJECTED.getValue());
+						workActivityProcess.setIsApproval("2");
+						String returnBack = "-1";
+						for (Activity activity : activities) {
+							if (activity.getCount() == activityProcess.getCount()) {
+								returnBack = activity.getReturnBack();
+								break;
+							}
+						}
+						if (returnBack.equals("0")) {
+							workActivityProcess.setId("");
+						}
+						vars.put("pass", false);
+					} else {
+						workActivityProcess.setIsApproval("1");
+						vars.put("pass", true);
+					}
+					break;
+				}
+			}
+		}else {
+			workActivityMenu.setProcessType("caseBase");
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				String count = String.valueOf(activityProcess.getCount());   //count是啥来着?
+				workActivityProcess = activityProcess;
+				if (!workActivityProcess.getIsApproval().equals("0")) {
+					workActivityProcess.setId("");
+				}
+				// 审核环节!
+				if ("zjl".equals(taskDefKey) && "1".equals(count)) {
+					taskCount = count;   //=1
+					if ("yes".equals(records.getAct().getFlag())) { //审批人通过
+						workActivityProcess.setIsApproval("1");
+						//提交流程任务
+						vars.put("pass", true);
+						vars.put("passs", true);
+						notifyRole = "审批通过";
+						//赋值存数据库
+						records.setCaseStatus("5"); //状态:已完成
+						records.setCaseType("1");// 为案例项目
+						records.setCaseCreateBy(records.getCreateBy().getId());//项目申请 创建人的id
+					} else {
+						workActivityProcess.setIsApproval("2"); //审批人驳回
+						//提交流程任务
+						vars.put("pass", false);
+						vars.put("passs", false);
+						user = createUser;
+						notifyRole = "调整申请";
+						//赋值存数据库
+						records.setCaseStatus("4"); //状态:已驳回
+						records.setCaseType("0");// 不是案例项目
+						records.setCaseCreateBy(records.getCreateBy().getId());//项目申请 创建人的id
+					}
+					break;
+				} else if ("modifyApply".equals(taskDefKey) && "0".equals(count)) { //申请人重新提交
+					notifyRole = "重新申请";
+					taskCount = "0";
+					enname = "zjl";
+					workActivityProcess.setCount(0);
+					if("yes".equals(records.getAct().getFlag())){//再次审批后通过x
+						workActivityProcess.setIsApproval("1");
+						//提交流程任务
+						vars.put("pass",true);
+						vars.put("passs",true);
+						//赋值存数据库
+						records.setCaseStatus("2"); //状态:审批中
+						records.setCaseType("0");// 为案例项目
+						records.setCaseCreateBy(records.getCreateBy().getId());//项目申请 创建人的id
+					}else{
+						workActivityProcess.setIsApproval("2"); //审批未通过x  撤销吧
+						records.setProjectStatus(ProjectStatusEnum.RECALL.getValue()); //撤回??????????
+						//提交流程任务
+						vars.put("pass",false);
+						vars.put("passs",false);
+						//赋值存数据库
+						records.setCaseStatus("3"); //状态:已驳回
+						records.setCaseType("0");// 不是案例项目
+						records.setCaseCreateBy(records.getCreateBy().getId());//项目申请 创建人的id
+					}
+					break;
+				}
+			}
+		}
+		workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,records.getProcessInstanceId(),taskDefKey,"modifyApply",records.getAct().getFlag(),comment, activities);
+		// 设置意见  comment上已配置
+		records.getAct().setComment(comment);
+		records.preUpdate();
+		//判断是否是审核通过
+		if("yes".equals(records.getAct().getFlag())){
+			actTaskService.complete(records.getAct().getTaskId(), records.getAct().getProcInsId(), records.getAct().getComment(), vars);   //提交任务, 并保存意见
+		}else{
+			//不通过需要查询审核组角色id
+			List<Act> list2 = actTaskService.toMyStartedList(records.getProcessInstanceId());  //获取我的任务列表
+			// 提交流程任务  直接在任务里提交了
+			//如果是驳回,并且审核角色为多个,需要对每个角色的审核流都进行处理
+			for (Act actInfo: list2) {
+				actTaskService.complete(actInfo.getTask().getId(), actInfo.getProcInsId(), records.getAct().getComment(), vars);
+			}
+		}
+		//查询流程状态(判断流程正在执行,还是结束)
+		boolean state = actTaskService.isProcessEnd(records.getAct().getProcInsId());
+		List<User> users = new ArrayList<>();
+		List<User> userList = new ArrayList<>();
+		if(!state) { //已结束
+			users.add(records.getCreateBy());
+			//审核完成提示框
+			String title = "项目【"+records.getProjectName()+"】申请案例项目完成";
+			String content = "项目【"+records.getProjectName()+"】申请案例项目完成,项目编号:"+records.getProjectId()+",项目报告号:"+records.getProjectReportNumber();
+			if ("yes".equals(records.getAct().getFlag())) {
+				records.setProjectStatus(ProjectStatusEnum.SIGNED.getValue());   //已签
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(records.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				users.add(records.getCreateBy());  //修改testProjectRecord.getCreateBy()
+				workProjectNotifyService
+						.save(UtilNotify
+								.saveNotify(records.getId(),
+										records.getCreateBy(),
+										UserUtils.getSelectCompany().getId(),
+										title,
+										content,
+										"152",
+										"0",
+										"待通知",
+										notifyRole));
+				//在外面新建实体类,在这里赋值,最后运行
+
+			} else {//流程结束但没正常结束0.0
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(records.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				users.add(records.getCreateBy());
+				if (records.getProjectStatus()!= ProjectStatusEnum.RECALL.getValue()){   //未撤回 则 为驳回
+					records.setProjectStatus(ProjectStatusEnum.REJECTED.getValue());    //已驳回
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(records.getId(),
+											records.getCreateBy(),
+											UserUtils.getSelectCompany().getId(),
+											titleStr,                        //这是嘎哈?不是已经结束了?????
+											notifyStr,
+											"152",
+											"0",
+											"待通知",
+											notifyRole));
+				}
+			}
+			workActivityProcessService.deleteProcessIdAuditUsers(records.getProcessInstanceId());   //会有问题
+
+		}else{
+			//还在流程里
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("caseBase")) {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(records.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				WorkProjectNotify workProjectNotify = UtilNotify
+						.saveNotify(records.getId(),
+								new User(),
+								UserUtils.getSelectCompany().getId(),
+								titleStr,
+								str,
+								"152",
+								"0",
+								"待审批",
+								notifyRole);
+				String count = taskDefKey.replace("audit","").replace("task","");
+				List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+						activities,
+						workProjectNotify,
+						taskDefKey,
+						records.getAct().getFlag(),
+						count,
+						records.getCreateBy(),
+						records.getOffice().getId(),
+						"4");
+				for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+					users.add(workProjectNotify1.getUser());
+					workProjectNotify1.setId("");
+					workProjectNotify1.setIsNewRecord(false);
+					workProjectNotifyService.save(workProjectNotify1);
+				}
+			}else {
+				if (!"yes".equals(records.getAct().getFlag())) {//驳回待办提醒
+					str = "项目【"+ records.getProjectName()+"】申请案例项目被驳回,请选择重新申请或作废";
+					titleStr = "项目【"+ records.getProjectName()+"】申请案例项目被驳回";
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(records.getId());
+					userList = workProjectNotifyService.readByNotifyId(notify);
+					users.add(records.getCreateBy());
+					WorkProjectNotify workProjectNotify = UtilNotify
+							.saveNotify(records.getId(),
+									records.getCreateBy(),
+									UserUtils.getSelectCompany().getId(),
+									titleStr,
+									str,
+									"152",
+									"0",
+									"重新申请",
+									notifyRole);
+					workProjectNotifyService.save(workProjectNotify);
+				} else {
+					if (StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
+						str = "项目【"+ records.getProjectName()+"】重新申请案例项目,待审批,项目编号:"+records.getProjectId()+",项目报告号:"+records.getProjectReportNumber();
+						titleStr = "项目【"+ records.getProjectName()+"】重新申请案例项目,待审批";
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(records.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						users.add(records.getCreateBy());
+						WorkProjectNotify workProjectNotify = UtilNotify
+								.saveNotify(records.getId(),
+										records.getCreateBy(),
+										UserUtils.getSelectCompany().getId(),
+										titleStr,
+										str,
+										"152",
+										"0",
+										"待审批",
+										notifyRole);
+						for (User user1:auditUsers){
+							users.add(user1);
+							workProjectNotify.setUser(user1);
+							workProjectNotify.setId("");
+							workProjectNotify.setIsNewRecord(false);
+							workProjectNotifyService.save(workProjectNotify);
+							Map<String,Object> extras = new HashMap<>();
+							extras.put("type","7003");                         //?????????????????
+							extras.put("procDefKey","152");
+							extras.put("id",workProjectNotify.getId());
+							UserUtils.pushInfoToApp(titleStr,str,extras,user1.getId());
+						}
+					}else {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(records.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						users.add(records.getCreateBy());
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(records.getId(),
+												records.getCreateBy(),
+												UserUtils.getSelectCompany().getId(),
+												titleStr,
+												str,
+												"152",
+												"0",
+												"重新申请",
+												notifyRole));
+					}
+				}
+			}
+		}
+
+		if (users!=null && users.size()!=0) {
+			List<String> userIds = new ArrayList<>(users.size());
+			for (User u : users) {
+				userIds.add(u.getId());
+			}
+			UserUtils.pushIm(userIds,titleStr);
+		}
+		if (userList!=null && userList.size()!=0) {   ////??????????????
+			for (User u : userList) {
+				UserUtils.pushMeIm(u.getId());
+			}
+		}
+
+		//更新流程id和项目状态
+		List<RuralProjectRecords> recordsList = this.findCaseBaseList(records);
+		if(recordsList.size() != 0){
+			dao.updateCaseBase(records);
+		}else {
+			dao.insertCaseBase(records);
+		}
+
+		//放入数据库,为案例项目的,不为不会有影响
+
+
+
+		return "保存审核意见成功";
+	}
+
+	//项目表和案例项目表联查
+	public List<RuralProjectRecords> findCaseBaseList(RuralProjectRecords records){
+		List<RuralProjectRecords> list = dao.findCaseBaseList(records);
+		return list;
+	}
+
+//	//跟新案例项目相关信息
+//	public void updateCaseBase(RuralProjectRecords records){
+//		dao.updateCaseBase(records);
+//	}
+
+	/**
+	 * 强制撤销
+	 * @param
+	 */
+	@Transactional(readOnly = false)
+	public void cancelInvalidate(RuralProjectRecords records) {
+		String invalidateProcessInstanceId = records.getProcessInstanceId();
+		try {
+			//将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+			WorkActivityProcess process = new WorkActivityProcess();
+			process.setProcessInstanceId(records.getProcessInstanceId());
+			process.setIsApproval("0");
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessInstanceId(records.getProcessInstanceId());
+			List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+			WorkProjectNotify notify = new WorkProjectNotify();
+			notify.setNotifyId(records.getId());
+			List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+			if (userList!=null && userList.size()!=0) {
+				for (User u : userList) {
+					User user = UserUtils.get(u.getId());
+					/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+					for (WebSocket toUserConn : toUserConns) {
+						String message = "{\"to\":\""+u.getId()+"\"," +
+								"\"msg\":\"审批信息 归档申请人:"+ user.getName()+",归档编号:"+workContractRecord.getRecordNum()+" 强制撤销!\"," +
+								"\"useType\":\"sys\"}";
+						ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+					}*/
+					UserUtils.pushIm(u.getId(),"案例项目申请人:"+ user.getName()+",项目编号:"+records.getProjectId()+" 强制撤销!");
+
+				}
+			}
+			if(processList!=null && processList.size()>0){
+				for (int i =0;i<processList.size();i++) {
+					WorkActivityProcess p = processList.get(i);
+					if(com.jeeplus.common.utils.StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+						p.setDelFlag("1");
+						p.setIsApproval("-1");
+						workActivityProcessDao.updateDelFlagAndIsApproval(p);
+					}
+				}
+				WorkActivityProcess pro = new WorkActivityProcess();
+				pro.setId("");
+				pro.preInsert();
+				pro.setDelFlag("0");
+				pro.setRemarks("[强制撤销]");
+				pro.setProcessKey(processList.get(0).getProcessKey());
+				pro.setIsApproval("1");
+				pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+				pro.setCount(0);
+				workActivityProcessDao.insert(pro);
+			}
+
+			//结束该流程,设为"撤销"状态
+			actTaskService.endProcessInstance(invalidateProcessInstanceId,"案例项目申请-强制撤销");
+			records.setCaseStatus("3");
+			records.setCaseType("0");
+			records.preUpdate();
+			dao.updateCaseBase(records);
+
+
+		}catch (ActivitiObjectNotFoundException e){
+			logger.error("Exception e:"+e);
+			System.err.println("撤销案例项目申请作废异常,因为这个流程已不存在!");
+			e.printStackTrace();
+		}
+		catch (Exception e) {
+			logger.error("Exception e:"+e);
+			e.printStackTrace();
+		}
+	}
+
+
+
 }

+ 72 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralCostProjectMessageController.java

@@ -38,12 +38,16 @@ import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageServic
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.entity.Area;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
+import com.jeeplus.modules.sys.entity.Office;
 import com.jeeplus.modules.sys.entity.User;
 import com.jeeplus.modules.sys.service.UserService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
 import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import com.jeeplus.modules.workcontractrecord.entity.WorkContractRecord;
 import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
 import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
 import com.jeeplus.modules.workstaff.service.WorkStaffBasicInfoService;
@@ -2284,4 +2288,72 @@ public class RuralCostProjectMessageController extends BaseController {
         projectRecordsService.projectUpgrade(projectRecords);
         return "升级成功";
     }
+
+    // 启动案例库流程  返回值为Map,方便前端提示框显示
+    @RequestMapping(value = "caseBase")
+    @ResponseBody
+    public Map saveCaseBase(RuralProjectRecords records){
+        Map map = new HashMap();
+        try {
+            records = projectRecordsService.getProjectByProjectId(records);
+            String processInstanceId = "";
+            projectRecordsService.startProcess(records,processInstanceId);
+            if(!records.getProcessInstanceId().equals(processInstanceId)){
+                map.put("result",1);
+                map.put("msg","提交申请成功");
+            }
+        }catch (Exception e){
+            map.put("result",0);
+            map.put("msg","提交申请失败");
+        }
+        return map;
+    }
+
+    //审核
+    @RequestMapping("saveAudit")
+    public String saveAudit(RuralProjectRecords records,RedirectAttributes redirectAttributes,Act act,String projectId)  {
+        String home = "home";
+        try {
+            records.setAct(act); // 任务定义Key(任务环节标识)
+
+            List<User> users = UserUtils.getByProssType(records.getProcessInstanceId(),1);
+            String flag = records.getAct().getFlag();
+            if ("yes".equals(flag) && (users==null || users.size()==0)){
+                addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+            }else {
+                String str = projectRecordsService.auditSaveCaseBase(records,users);
+                addMessage(redirectAttributes, str);
+            }
+        }catch (Exception e){
+            addMessage(redirectAttributes, "项目申请案例项目 流程审批失败");
+        }
+
+        return "redirect:" + Global.getAdminPath() + "/home/?repage";
+
+    }
+
+    /**
+     * 强制撤销
+     */
+    @RequestMapping(value = "cancelInvalidateCaseBase")
+    @ResponseBody
+    public Map cancelInvalidateCaseBase(RuralProjectRecords ruralProjectRecords){
+        Map map = new HashMap();
+        RuralProjectRecords records = projectRecordsService.get(ruralProjectRecords.getProjectId());
+        List<RuralProjectRecords> list = projectRecordsService.findCaseBaseList(records);
+        records.setProjectStatus(Integer.parseInt(list.get(0).getCaseStatus()));
+        records.setProcessInstanceId(list.get(0).getCaseProcessId());
+        if(list.get(0).getCaseStatus().equals("2")){
+            projectRecordsService.cancelInvalidate(records);
+            map.put("result",1);
+            map.put("msg","撤回成功");
+        }else{
+            map.put("result",0);
+            map.put("msg","该申请不在审核状态,撤回失败");
+        }
+        return map;
+    }
+
+
+
 }

+ 190 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectRecordsCaseBaseController.java

@@ -0,0 +1,190 @@
+package com.jeeplus.modules.ruralprojectrecords.web;
+
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectRecordsDao;
+import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectMessageService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsCaseBaseService;
+import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientLinkman;
+import com.jeeplus.modules.workclientinfo.service.WorkClientInfoService;
+import com.jeeplus.modules.workcontractinfo.entity.WorkContractInfo;
+import jersey.repackaged.com.google.common.collect.Lists;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+@Controller
+@RequestMapping(value = "${adminPath}/ruralProject/RuralProjectRecordsCaseBase")
+public class RuralProjectRecordsCaseBaseController extends BaseController {
+
+    @Autowired
+    private RuralProjectRecordsCaseBaseService service;
+    @Autowired
+    private RuralProjectRecordsService projectRecordsService;
+    @Autowired
+    private RuralProjectMessageService ruralProjectMessageService;
+    @Autowired
+    private RuralProjectRecordsDao ruralProjectRecordsDao;
+
+
+    @ModelAttribute
+    public RuralProjectRecords get(@RequestParam(required=false) String id) {
+        RuralProjectRecords entity = null;
+        if (StringUtils.isNotBlank(id)){
+            entity = projectRecordsService.get(id);
+        }
+        if (entity == null){
+            entity = new RuralProjectRecords();
+        }
+        return entity;
+    }
+
+    /**
+     * 项目列表页面
+     */
+    @RequiresPermissions("ruralProject:RuralProjectRecordsCaseBase:list")
+    @RequestMapping(value = {"list", ""})
+    public String list(RuralProjectRecords projectRecords, HttpServletRequest request, HttpServletResponse response, Model model) {
+        if(UserUtils.isManager()){
+            model.addAttribute("flag","1");
+        }
+        String oldSubmitMoney = "";
+        //判断是否选择紧急项目
+        /*if(StringUtils.isNotBlank(projectRecords.getSubmitMoney())){
+            switch (projectRecords.getSubmitMoney()){
+                case "3":
+                    oldSubmitMoney = projectRecords.getSubmitMoney();
+                    projectRecords.setSubmitMoney("1");
+                    projectRecords.setEmergencyProject("1");
+                    break;
+                case "1":
+                    projectRecords.setEmergencyProject("0");
+                    break;
+            }
+        }*/
+        //进行查询之后进行任何操作,返回还是查询之后的数据页面
+        if (StringUtils.isNotBlank(projectRecords.getToflag())){
+            if (projectRecords.getToflag().equals("1")){
+                request.getSession().removeAttribute("searchprojectRecordsList");
+                RuralProjectRecords search=projectRecords;
+                request.getSession().setAttribute("searchprojectRecordsList",search);
+            }
+        }else{
+            if (request.getSession().getAttribute("searchprojectRecordsList")!=null){
+                projectRecords= (RuralProjectRecords) request.getSession().getAttribute("searchprojectRecordsList");
+                model.addAttribute("ruralProjectRecords", projectRecords);
+            }
+        }
+        //添加查询类型(造价审核)    1是工程咨询
+        //添加查询类型(工程咨询)
+        List<String> typeList = Lists.newArrayList();
+        String oldProjectSort = null;
+        if (StringUtils.isBlank(projectRecords.getAttachmentProjectSort())){
+            typeList.add("1");
+            typeList.add("2");
+        }else {
+            oldProjectSort=projectRecords.getAttachmentProjectSort();
+            String attachmentProjectSort=projectRecords.getAttachmentProjectSort();
+            typeList.add(attachmentProjectSort.split("-")[0]);
+            projectRecords.setAttachmentProjectSort(attachmentProjectSort.split("-")[1]);
+        }
+
+        Page<RuralProjectRecords> page = service.findPage(new Page<RuralProjectRecords>(request, response), projectRecords);
+        model.addAttribute("page", page);
+        if(null != projectRecords.getWorkContractInfo()){
+            model.addAttribute("workContractInfoName", projectRecords.getWorkContractInfo().getName());
+            if(null != projectRecords.getWorkContractInfo().getClient()){
+                model.addAttribute("workContractInfoClientName", projectRecords.getWorkContractInfo().getClient().getName());
+            }
+        }
+        //无合同状态下,获取委托方的名称
+        List<RuralProjectRecords> list = page.getList();
+        for (int i = 0; i < list.size(); i++) {
+            RuralProjectRecords records1 = list.get(i);
+            if (records1.getWorkContractInfo() == null) {
+                projectRecordsService.queryLinkmanInfos(records1);
+                if (records1.getWorkClientLinkmanList() != null && records1.getWorkClientLinkmanList().size() > 0) {
+                    WorkClientLinkman linkman = records1.getWorkClientLinkmanList().get(0);
+                    WorkContractInfo contractInfo = new WorkContractInfo();
+                    contractInfo.setClient(linkman.getClientId());
+                    records1.setWorkContractInfo(contractInfo);
+                    records1.getWorkContractInfo().setClientName(records1.getWorkContractInfo().getClient().getName());
+                }
+            }
+        }
+        if(StringUtils.isNotBlank(oldSubmitMoney)){
+            projectRecords.setSubmitMoney(oldSubmitMoney);
+        }
+
+        //查询是否是案例项目
+//        projectRecordsService.findCaseBaseList();
+
+        model.addAttribute("beginDate", projectRecords.getBeginDate());
+        model.addAttribute("endDate", projectRecords.getEndDate());
+        model.addAttribute("reportSwitch", BaseController.REPORTSWITCH);
+        return "modules/ruralprojectrecords/cost/ruralProjectRecordsCaseBaseList";
+    }
+
+    //选定按钮
+    @RequiresPermissions("ruralProject:RuralProjectRecordsCaseBase:selectCaseBase")
+    @Transactional(readOnly = false)
+    @RequestMapping("selectCaseBase")
+    @ResponseBody
+    public Map selectCaseBase(RuralProjectRecords records){
+        Map map = new HashMap();
+        records.setId(records.getProjectId());
+        List<RuralProjectRecords> list = projectRecordsService.findCaseBaseList(records);
+        //选定为案例项目
+        records.setCaseType("1");
+        records.setCaseStatus("5");
+        records.setCaseCreateBy(UserUtils.getUser().getId());
+        if(list.size()!=0){
+            ruralProjectRecordsDao.updateCaseBase(records);
+        }else {
+            ruralProjectRecordsDao.insertCaseBase(records);
+        }
+        map.put("result",1);
+        map.put("msg","选定为案例项目成功");
+        return map;
+    }
+
+    //取消案例项目按钮
+    @RequiresPermissions("ruralProject:RuralProjectRecordsCaseBase:canceCaseBase")
+    @Transactional(readOnly = false)
+    @RequestMapping("canceCaseBase")
+    @ResponseBody
+    public Map canceCaseBase(RuralProjectRecords records){
+        Map map = new HashMap();
+        records.setId(records.getProjectId());
+        List<RuralProjectRecords> list = projectRecordsService.findCaseBaseList(records);
+        //选定为案例项目
+        records.setCaseType("0");
+        records.setCaseCreateBy(UserUtils.getUser().getId());
+        if(list.size()!=0){
+            ruralProjectRecordsDao.updateCaseBase(records);
+        }else {
+            ruralProjectRecordsDao.insertCaseBase(records);
+        }
+        map.put("result",1);
+        map.put("msg","选定案例项目取消成功");
+        return map;
+    }
+
+}

+ 2 - 2
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java

@@ -665,10 +665,10 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 							workInvoice.getCompanyId(),
 							title,
 							str,
-							"21",
+							"21", //对应之后的判断
 							"0",
 							"待审批",
-							""
+							""  //通知角色
 					);
 		long s6=System.currentTimeMillis();
 			List<User> users = new ArrayList<>();

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

@@ -511,6 +511,8 @@ public class WorkProjectNotifyController extends BaseController {
 	private ProjectReportedImportService projectReportedImportService;
 	@Autowired
 	private StatementCompanyComprehensiveService statementCompanyComprehensiveService;
+	@Autowired
+	private RuralProjectRecordsCaseBaseService caseBaseService;
 
 	@ModelAttribute
 	public WorkProjectNotify get(@RequestParam(required=false) String id) {
@@ -6434,7 +6436,11 @@ public class WorkProjectNotifyController extends BaseController {
 					} else {
 						return "modules/processProjectReportRecord/projectReportRecordView";
 					}
-				} else if ("52".equals(workProjectNotify.getType())) {    //收入结算
+				}else if(workProjectNotify.getType().equals("152")){     //案例项目申请
+
+					return this.caseBase(workProjectNotify,model);
+
+				}else if ("52".equals(workProjectNotify.getType())) {    //收入结算
 					WorkReceiptsSettle workReceiptsSettle = workReceiptsSettleService.get(workProjectNotify.getNotifyId());
 					Act act = getByAct(workReceiptsSettle.getProcessInstanceId());
 					workReceiptsSettle.setAct(act);
@@ -7980,6 +7986,22 @@ public class WorkProjectNotifyController extends BaseController {
 				map.put("code",0);
 				map.put("msg","合同信息作废失败,只有“暂存”、“驳回”、“撤回”状态的合同信息才能作废");
 			}
+		}else if (workProjectNotify.getType().equals("152")) {    //案例项目 作废
+			RuralProjectRecords record = new RuralProjectRecords();
+			record.setId(workProjectNotify.getNotifyId());
+			RuralProjectRecords records = caseBaseService.get(record);
+			int status = Integer.parseInt(records.getCaseStatus());
+			if(status== ProjectStatusEnum.TSTORE.getValue()||status== ProjectStatusEnum.REJECTED.getValue()||status== ProjectStatusEnum.RECALL.getValue()){
+				//作废案例项目信息
+				caseBaseService.deleteCaseBase(records);
+				//删除流程待办信息
+				workProjectNotifyService.deleteByNotifyId(workProjectNotify);
+				map.put("code",1);
+				map.put("msg","案例项目信息作废成功");
+			}else{
+				map.put("code",0);
+				map.put("msg","案例项目信息作废失败,只有“暂存”、“驳回”、“撤回”状态的案例项目信息才能作废");
+			}
 		}
 		return map;
 	}
@@ -8429,4 +8451,340 @@ public class WorkProjectNotifyController extends BaseController {
 		return consultantinfo;
 	}
 
+	private String caseBase(WorkProjectNotify workProjectNotify,Model model) {
+		try {
+			//查询“配农网”工程类型id
+			String engineeringId = engineeringService.getEngineeringId("202");
+			ProjectReportRecord projectReportRecord = projectReportRecordService.getProjectReportRecordByProjectId(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";
+				}
+			}
+
+			long l1 = System.currentTimeMillis();
+			ProjectReportData projectReportData = projectReportDataService.getOnRural(projectReportRecord.getReport().getId());
+			projectReportRecord.setProjectReportData(projectReportData);
+			projectReportRecord.setReport(projectReportData);
+			Projectcontentinfo projectcontentinfo = projectcontentinfoService.getByInfoId(projectReportData.getId());
+			projectcontentinfo.setProjectReportData(projectReportData);
+			long l2 = System.currentTimeMillis();
+			System.out.println("==========第一个断点:" + (l2 - l1));
+			//获取项目信息
+			l1 = System.currentTimeMillis();
+			RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.getNotifyQueryProjectUsers(projectReportRecord.getReport().getProject().getId());
+
+			l2 = System.currentTimeMillis();
+			System.out.println("==========获取项目信息:" + (l2 - l1));
+			//获取复核标准
+			String reviewId = "";
+			if ("2".equals(ruralProjectRecords.getSubmitMoney())) {
+				reviewId = "1";
+			} else {
+				if (StringUtils.isBlank(ruralProjectRecords.getEmergencyProject()) || "0".equals(ruralProjectRecords.getEmergencyProject())) {
+					reviewId = "2";
+				} else if ("1".equals(ruralProjectRecords.getEmergencyProject())) {
+					reviewId = "3";
+				}
+			}
+			l1 = System.currentTimeMillis();
+			List<WorkReviewAudit> workReviewAudits = projectContentDataService.findListReview(reviewId, "紧急项目");
+			model.addAttribute("list", workReviewAudits);
+
+			l2 = System.currentTimeMillis();
+			System.out.println("==========获取复核标准:" + (l2 - l1));
+			l1 = System.currentTimeMillis();
+			//获取子项目列表信息
+			List<SubProjectInfo> subProjectInfos = this.queryReportDetails(ruralProjectRecords.getId());
+			l2 = System.currentTimeMillis();
+			System.out.println("==========获取子项目列表信息:" + (l2 - l1));
+
+			l1 = System.currentTimeMillis();
+			//获取合同信息
+			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);
+				}
+			}
+			l2 = System.currentTimeMillis();
+			System.out.println("==========获取合同信息:" + (l2 - l1));
+
+			Act act = getByAct(projectReportRecord.getProcessInstanceId());
+			projectReportRecord.setAct(act);
+
+			if (StringUtils.isNotBlank(workProjectNotify.getHome())) {
+				projectReportRecord.setHome(workProjectNotify.getHome());
+			} else {
+				projectReportRecord.setHome("home");
+			}
+
+
+			l1 = System.currentTimeMillis();
+			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;
+				}
+
+			}
+			l2 = System.currentTimeMillis();
+			System.out.println("==========获取附件信息:" + (l2 - l1));
+			projectReportRecord.setUploadMode(uploadMode);
+			//获取项目基础信息
+			ruralProjectRecordsService.queryNotifyProjectDetail(ruralProjectRecords);
+			//工程咨询
+			List<MainDictDetail> mainDictList = Lists.newArrayList();
+			if ("1".equals(ruralProjectRecords.getProjectType())) {
+				mainDictList = DictUtils.getMainDictList("attachment_project_sort");
+				//造价审核
+			} else if ("2".equals(ruralProjectRecords.getProjectType())) {
+				mainDictList = DictUtils.getMainDictList("attachment_project_sort_cost");
+			}
+			if (StringUtils.isNotBlank(ruralProjectRecords.getAttachmentProjectSort())) {
+				//处理项目类别
+				for (MainDictDetail info : mainDictList) {
+					if (ruralProjectRecords.getAttachmentProjectSort().equals(info.getValue())) {
+						ruralProjectRecords.setAttachmentProjectSort(info.getLabel());
+						break;
+					}
+				}
+			}
+
+			//如果为驳回这种,则联查案例项目表获得流程id
+			if (StringUtils.isBlank(workProjectNotify.getProcessInstanceId())) {
+				List<RuralProjectRecords> recordss = ruralProjectRecordsService.findCaseBaseList(ruralProjectRecords);
+				ruralProjectRecords.setProcessInstanceId(recordss.get(0).getCaseProcessId());
+				ruralProjectRecords.setProjectStatus(Integer.parseInt(recordss.get(0).getCaseStatus()));
+			}
+
+			//这行数据显示用
+			//下两句非常重要,标识!!!
+			if (StringUtils.isNotBlank(workProjectNotify.getProcessInstanceId())) {
+				ruralProjectRecords.setProcessInstanceId(workProjectNotify.getProcessInstanceId());
+			}
+			ruralProjectRecords.setAct(getByAct(ruralProjectRecords.getProcessInstanceId()));
+
+			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());
+			//tap页
+			//查询所有的工程类型
+			List<ProjectEngineeringInfo> projectEngineeringInfo = engineeringService.findList(new ProjectEngineeringInfo());
+			model.addAttribute("projectEngineeringInfo", projectEngineeringInfo);
+			//项目计划
+			RuralProjectRecords projectRecordPlans = this.planView(ruralProjectRecords.getId());
+			model.addAttribute("projectRecordPlans", projectRecordPlans);
+			//获取质量复核项目组成员
+			List<RuralReportConsultant> consultantinfo = this.qualityView(ruralProjectRecords, projectReportData);
+			model.addAttribute("consultantinfo", consultantinfo);
+			//获取总审人员
+			User user = UserUtils.get(projectReportData.getBzshbUserId());
+			model.addAttribute("bzshbUserName", user.getName());
+			//质量复核标准展示
+			String review = "";
+			if ("2".equals(ruralProjectRecords.getSubmitMoney())) {
+				review = "1";
+			}
+			;
+			List<WorkReviewAudit> workReviewAuditList = projectContentDataService.findListReview(review, "质量复核");
+			WorkReviewAudit revAudit = new WorkReviewAudit();
+			String type = "4";
+			revAudit.setCompanyId(UserUtils.getSelectCompany().getId());
+			revAudit.setType(type);
+			revAudit.setReportId(projectReportData.getId());
+			List<WorkReviewAudit> reaudits = workReviewStandardService.findAuditList(revAudit);
+			for (WorkReviewAudit reAudit : workReviewAuditList) {
+				for (WorkReviewAudit audit : reaudits) {
+					if (reAudit.getId().equals(audit.getStandardId())) {
+						reAudit.setDeductOption(audit.getDeductOption());
+						break;
+					}
+				}
+			}
+			model.addAttribute("datalist", workReviewAuditList);
+
+			//拆线呢报告签发评分展示项
+			List<WorkReviewAudit> reviewAuditList = projectContentDataService.findListIssue(reviewId, "报告签发");
+			//查询报告签发评分评论数据
+			WorkReviewAudit workReviewAuditTwo = new WorkReviewAudit();
+			type = "4";
+			workReviewAuditTwo.setCompanyId(UserUtils.getSelectCompany().getId());
+			workReviewAuditTwo.setType(type);
+			workReviewAuditTwo.setReportId(projectReportData.getId());
+			List<WorkReviewAudit> rreviewAuditList = workReviewStandardService.findAuditList(workReviewAuditTwo);
+			for (WorkReviewAudit reAudit : reviewAuditList) {
+				for (WorkReviewAudit audit : rreviewAuditList) {
+					if (reAudit.getId().equals(audit.getStandardId())) {
+						reAudit.setDeductOption(audit.getDeductOption());
+						break;
+					}
+				}
+			}
+			model.addAttribute("datalistTwo", reviewAuditList);
+
+			if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+				//展示
+				WorkReviewAudit workReviewAudit = new WorkReviewAudit();
+				workReviewAudit.setCompanyId(UserUtils.getSelectCompany().getId());
+				workReviewAudit.setType(type);
+				workReviewAudit.setReportId(projectReportData.getId());
+				List<WorkReviewAudit> audits = workReviewStandardService.findAuditList(workReviewAudit);
+				for (WorkReviewAudit reviewAudit : workReviewAudits) {
+					for (WorkReviewAudit audit : audits) {
+						if (reviewAudit.getId().equals(audit.getStandardId())) {
+							reviewAudit.setDeductOption(audit.getDeductOption());
+							break;
+						}
+					}
+				}
+				model.addAttribute("list", workReviewAudits);
+				projectReportRecord.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileAttachmentList()));
+				projectReportRecord.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileGistdataList()));
+				projectReportRecord.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileOtherList()));
+				return "modules/ruralprojectrecords/ruralProjectRecordsCaseView";
+			} 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/ruralProjectRecordsCaseAudit";
+			} 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/ruralProjectRecordsCaseAudit";
+			} else {
+				projectReportRecord.setFileAttachmentList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileAttachmentList()));
+				projectReportRecord.setFileGistdataList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileGistdataList()));
+				projectReportRecord.setFileOtherList(ruralProjectRecordsService.disposeDataAttachment(projectReportRecord.getFileOtherList()));
+				return "modules/ruralprojectrecords/view/projectReportRecordView";
+
+			}
+		}catch (Exception e) {
+			workProjectNotify.setStatus("1");
+			workProjectNotify.preUpdate();
+			workProjectNotifyService.save(workProjectNotify);
+			model.addAttribute("errorMsg","关联记录已经被删除!!!");
+		}
+		model.addAttribute("workProjectNotify", workProjectNotify);
+		return "modules/workprojectnotify/workProjectNotifyForm";
+	}
+
 }

+ 18 - 0
src/main/resources/mappings/modules/projectcontentinfo/ProjectReportRecordDao.xml

@@ -116,6 +116,24 @@
 		WHERE a.id = #{id}
 	</select>
 
+	<select id="getRuralProjectReportRecordByReportId" resultType="ProjectReportRecord" >
+		SELECT
+		<include refid="projectReportRecordColumns"/>,
+		wci.contract_num AS "contractNum",
+		wci.name AS "contractName",
+		wct.name AS "clientName",
+		d.report_date AS "report.reportDate",
+		r.project_name AS "projectName",
+		r.project_id AS "projectNum"
+		FROM rural_project_report_record a
+		<include refid="projectReportRecordJoins"/>
+		LEFT JOIN rural_project_records r ON r.id = d.project_id
+		LEFT JOIN work_contract_info wci on r.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		WHERE a.report_id = #{reportId}
+	</select>
+
+
 	<select id="getProjectMaterialDefectRecord"
 			resultType="com.jeeplus.modules.projectcontentinfo.entity.ProjectMaterialDefectRecord">
 		SELECT

+ 6 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageAllDao.xml

@@ -390,7 +390,12 @@ END) as projectScale*/
 		,a.report_signature_url as "reportSignatureUrl"
 		,a.report_signature_contract_id as "reportSignatureContractId"
 		,prsi.id as "prsiId"
+		,cb.case_process_id as "caseProcessId"
+		,cb.case_type as "caseType"
+		,cb.case_create_by as "caseCreateBy"
+		,if(case_status > 0 ,case_status,"0") as "caseStatus"
 		FROM rural_project_records a
+		left join case_base cb on a.id = cb.project_id
 		LEFT JOIN sys_area area ON area.id = a.area_id
 		left join rural_project_records_reported rprr on rprr.id = a.id
 		LEFT JOIN project_flingbatch_relation pfp on pfp.project_id=a.id
@@ -637,6 +642,7 @@ END) as projectScale*/
     <select id="queryCount" resultType="int" >
 		SELECT count(DISTINCT a.id)
 		FROM rural_project_records a
+		left join case_base cb on a.id = cb.project_id
 
 		<if test="leaderNameStr !=null and leaderNameStr !=''">
 			LEFT JOIN work_project_user w on a.id = w.project_id

+ 6 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectMessageDao.xml

@@ -376,9 +376,14 @@
 		,pfb.process_instance_id AS "filingProcessinstanceId"
 		,ifnull(pfp.status,0) as "filingProjectStatus"
 		,prd.audit_pass_date as "prdAuditDate"
+		,cb.case_process_id as "caseProcessId"
+		,cb.case_type as "caseType"
+		,cb.case_create_by as "caseCreateBy"
+		,if(case_status > 0 ,case_status,"0") as "caseStatus"
 		FROM rural_project_records a
 		LEFT JOIN sys_area area ON area.id = a.area_id
 		left join rural_project_records_reported rprr on rprr.id = a.id
+		left join case_base cb on a.id = cb.project_id
 		/*LEFT JOIN project_flingbatch_relation pfp on pfp.project_id=a.id*/
 		left join
 		(select id,status,project_id,filing_batch from
@@ -584,6 +589,7 @@
     <select id="queryCount" resultType="int" >
         SELECT count(DISTINCT a.id)
         FROM rural_project_records a
+		left join case_base cb on a.id = cb.project_id
 
         <if test="leaderNameStr !=null and leaderNameStr !=''">
             LEFT JOIN work_project_user w on a.id = w.project_id

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

@@ -0,0 +1,544 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.ruralprojectrecords.dao.RuralProjectRecordsCaseBaseDao">
+	<sql id="projectRecordsJoins">
+		LEFT JOIN sys_area area ON area.id = a.area_id
+	</sql>
+	<sql id="projectRecordsColumns">
+		distinct(a.id) AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		(select name from sys_user user where user.id=a.create_by) AS "createBy.name",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.del_flag AS "delFlag",
+		a.contract_id AS "workContractInfo.id",
+		a.project_id AS "projectId",
+		a.project_name AS "projectName",
+		a.scale_type AS "scaleType",
+		a.scale_unit AS "scaleUnit",
+		a.scale_quantity AS "scaleQuantity",
+		a.area_id AS "area.id",
+		a.project_site AS "projectSite",
+		a.project_desc AS "projectDesc",
+		a.remarks AS "remarks",
+		a.status AS "projectStatus",
+		a.process_instance_id AS "processInstanceId",
+		a.company_id AS "company.id",
+		a.office_id AS "office.id",
+		a.alter_process_id AS "alterProcessId",
+		area.name AS "area.name",
+		a.province,
+		a.city,
+		a.area_name AS "county",
+		a.project_structure AS "projectStructure",
+		a.on_ground_num AS "onGroundNum",
+		a.under_ground_num AS "underGroundNum",
+		a.building_scale AS "buildingScale",
+		a.measuring_unit AS "measuringUnit",
+		a.project_use AS "projectUse",
+		a.install_fees AS "installFees",
+		a.building_fees AS "buildingFees",
+		a.building_percent AS "buildingPercent",
+		a.install_percent AS "installPercent",
+		a.unit_fees AS "unitFees",
+		a.building_unit_fees AS "buildingUnitFees",
+		a.install_unit_fees AS "installUnitFees",
+		a.total_fees AS "totalFees",
+		ifnull(a.reported_state,0) as "reportedState",
+		a.over_due_status as "overDueStatus",
+		ifnull(a.record_state,0) as "projectRecordStatus",
+		a.over_record_status as "overRecordStatus",
+		a.emergency_project as "emergencyProject",
+		a.attachment_project_sort as "attachmentProjectSort",
+		a.report_signature_flag as "reportSignatureFlag",
+		a.report_signature_document_id as "reportSignatureDocumentId",
+		a.report_signature_contract_id as "reportSignatureContractId",
+		a.report_signature_invalid_document_id as "reportSignatureInvalidDocumentId",
+		a.report_signature_file_name as "reportSignatureFileName",
+		a.report_signature_upload_file_user as "reportSignatureUploadFileUser.id",
+		a.report_signature_upload_date as "reportSignatureUploadDate",
+		a.quality_signature_flag as "qualitySignatureFlag",
+		a.quality_signature_document_id as "qualitySignatureDocumentId",
+		a.quality_signature_contract_id as "qualitySignatureContractId",
+		a.quality_signature_invalid_document_id as "qualitySignatureInvalidDocumentId",
+		a.quality_signature_file_name as "qualitySignatureFileName",
+		a.quality_signature_upload_file_user as "qualitySignatureUploadFileUser.id",
+		a.quality_signature_upload_date as "qualitySignatureUploadDate",
+		a.belonging_department as "belongingDepartment"
+	</sql>
+
+
+
+	<select id="queryCount" resultType="int" >
+		SELECT count(DISTINCT a.id)
+		FROM case_base cb
+		left join rural_project_records a on a.id = cb.project_id
+
+		<if test="leaderNameStr !=null and leaderNameStr !=''">
+			LEFT JOIN work_project_user w on a.id = w.project_id
+			LEFT JOIN sys_user su on w.user_id = su.id
+		</if>
+		LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		<if test="workContractInfo !=null">
+			LEFT JOIN work_contract_info wci on a.contract_id = wci.id
+		</if>
+		<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+			LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		</if>
+		left join project_report_data prd on prd.project_id = a.id
+		left join project_report_data_two prdt on prdt.project_id = a.id
+		left join rural_project_report_record prr on prr.report_id = prd.id
+		LEFT JOIN project_material_defect_record pmdr on prd.id = pmdr.report_id
+		left join rural_project_report_record_down prrd on prrd.report_id = prd.id
+		LEFT JOIN project_flingbatch_relation pfp on pfp.project_id= a.id
+		LEFT JOIN sys_user sua on a.create_by = sua.id
+		left join project_paper_filing ppf on ppf.project_id = a.id
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		<where>
+			a.status = 5
+			and cb.case_type = 1
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id like concat('%',#{projectId},'%')
+			</if>
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+			<if test="scaleType != null and scaleType != ''">
+				AND a.scale_type = #{scaleType}
+			</if>
+			<if test="scaleUnit != null and scaleUnit != ''">
+				AND a.scale_unit = #{scaleUnit}
+			</if>
+			<if test="scaleQuantity != null and scaleQuantity != ''">
+				AND a.scale_quantity = #{scaleQuantity}
+			</if>
+			<if test="projectSite != null and projectSite != ''">
+				AND a.project_site LIKE concat('%',#{projectSite},'%')
+			</if>
+			<if test="remarks != null and remarks != ''">
+				AND a.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="projectDesc != null and projectDesc != ''">
+				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
+			</if>
+			<if test="area != null and area.id != null and area.id != ''">
+				AND a.area_id = #{area.id}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
+				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
+				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
+				AND wci.contract_price = #{workContractInfo.contractPrice}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
+				AND wci.contract_type = #{workContractInfo.contractType}
+			</if>
+			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
+			</if>
+			<!--<if test="leaderNameStr !=null and leaderNameStr !=''">
+                AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
+            </if>-->
+			<if test="(leaderNameStr != null and leaderNameStr != '') or (leaderId != null and leaderId != '')">
+				AND ((w.user_id = #{leaderId}) or su.name like concat('%',#{leaderNameStr},'%')) AND w.is_master = '1' AND w.del_flag='0'
+			</if>
+			<if test="projectStatus !=null">
+				AND a.status = #{projectStatus}
+			</if>
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt; #{endDate}
+			</if>
+			<if test="emergencyProject !=null and emergencyProject != ''">
+				<choose>
+					<when test="emergencyProject == 0">
+						AND (a.emergency_project = #{emergencyProject} or a.emergency_project is null)
+					</when>
+					<otherwise>
+						AND a.emergency_project = #{emergencyProject}
+					</otherwise>
+				</choose>
+			</if>
+			<!--<if test="createBy != null and createBy.id !=null and createBy.id !=''">
+				AND a.create_by = #{createBy.id}
+			</if>-->
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or sua.name like concat('%',#{createBy.name},'%'))
+			</if>
+
+			<choose>
+				<when test="downProjectReportRecordStatus == 0">
+					AND( pfp.status is null or ppf.status is null )
+				</when>
+				<otherwise>
+					<if test="downProjectReportRecordStatus!=null and downProjectReportRecordStatus !=''">
+						AND (pfp.status = #{downProjectReportRecordStatus} or ppf.status = #{downProjectReportRecordStatus})
+					</if>
+				</otherwise>
+			</choose>
+			<if test="reportData!=null and reportData.number !=null and reportData.number !=''">
+				and prd.number like concat('%',#{reportData.number},'%')
+			</if>
+			<!--<if test="office!=null and office.id!=null and office.id!=''">
+				and  a.office_id = #{office.id}
+			</if>-->
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  o.name like concat('%',#{office.name},'%')
+			</if>
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+			<if test="projectReportStatus != null and projectReportStatus != ''">
+				AND prd.status = #{projectReportStatus}
+			</if>
+			<if test="reportedState !=null and reportedState !=''">
+				<choose>
+					<when test="reportedState == 0">
+						AND a.reported_state is null
+					</when>
+					<otherwise>
+						AND a.reported_state = #{reportedState}
+					</otherwise>
+				</choose>
+			</if>
+			<if test="submitMoney != null and submitMoney != ''">
+				AND a.submit_money = #{submitMoney}
+			</if>
+			<choose>
+				<when test="projectReportRecordStatus != null and projectReportRecordStatus != '' and projectReportRecordStatus != 0">
+					<choose>
+						<when test="projectReportRecordStatus == 6 or projectReportRecordStatus == 7">
+							<choose>
+								<when test="projectReportRecordStatus == 6">
+									AND a.record_state= #{projectReportRecordStatus} and prr.status is null
+								</when>
+								<otherwise>
+									AND prr.status = #{projectReportRecordStatus}
+								</otherwise>
+							</choose>
+						</when>
+						<otherwise>
+							AND prr.status = #{projectReportRecordStatus}
+						</otherwise>
+					</choose>
+				</when>
+				<otherwise>
+					<choose>
+						<when test="projectReportRecordStatus == 0">
+							AND prr.status is null
+						</when>
+					</choose>
+				</otherwise>
+			</choose>
+			<choose>
+				<when test="projectReportStatusTwo == 0">
+					AND prdt.status is null
+				</when>
+				<otherwise>
+					<if test="projectReportStatusTwo!=null and projectReportStatusTwo !=''">
+						AND prdt.status = #{projectReportStatusTwo}
+					</if>
+				</otherwise>
+			</choose>
+			<if test="projectType != null and projectType != ''">
+				AND a.project_type = #{projectType}
+			</if>
+			AND  a.status != 7 AND a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id})${sqlMap.dsf} )
+			</if>
+		</where>
+	</select>
+
+
+	<select id="findList" resultType="RuralProjectRecords" >
+		SELECT
+		<include refid="projectRecordsColumns"/>
+		,a.submit_money as "submitMoney"
+		,a.project_type as projectType,
+		wci.name AS "workContractInfo.name",
+		wct.id AS "workContractInfo.client.id",
+		wct.name AS "workContractInfo.client.name",
+		o.top_company AS "office.name",
+		ifnull(prd.number ,"") as "projectReportNumber"
+		,ifnull(prd.status,0) as "projectReportStatus"
+		,ifnull(prd.name,"") as "projectReportName"
+		,ifnull(prr.status,0) as "projectReportRecordStatus"
+		,ifnull(prrd.status,0) as "downProjectReportRecordStatus",
+		prrd.file_num as recodeNum,
+		prr.process_instance_id as prrProcessInstanceId,
+		prrd.process_instance_id as prrdProcessInstanceId
+		,prd.id as prdId
+		,prr.id as prrId
+		,prrd.id as prrdId
+		,prd.audit_pass_date as auditPassDate
+		,if(date_add(prd.audit_pass_date,interval #{endingCount} day) >now(),"0","1") as reportedType
+		,ifnull(rprr.report_status,0) as "reportStatus"
+		,ifnull(rprr.sync_status,0) as "syncStatus"
+		,rprr.process_instance_id as "reportedProcessInstanceId"
+		,ifnull(prdt.status,0) as "projectReportStatusTwo"
+		,prdt.id as prdtId
+		,prdt.process_instance_id as prdtProcessinstanceId
+		,ifnull(pmdr.status,0) as "defectRecordStatus"
+		,pmdr.process_instance_id as "pmdrProcessInstanceId"
+		,pmdr.id as pmdrId
+		,ifnull(ppf.status,0) as "paperFilingStatus"
+		,ppf.process_instance_id as "ppfProcessInstanceId"
+		,ppf.id as "ppfId"
+		,pfb.process_instance_id AS "filingProcessinstanceId"
+		,ifnull(pfp.status,0) as "filingProjectStatus"
+		,prd.audit_pass_date as "prdAuditDate"
+		,cb.case_process_id as "caseProcessId"
+		,cb.case_type as "caseType"
+		,cb.case_create_by as "caseCreateBy"
+		,if(case_status > 0 ,case_status,"0") as "caseStatus"
+		FROM rural_project_records a
+		LEFT JOIN sys_area area ON area.id = a.area_id
+		left join rural_project_records_reported rprr on rprr.id = a.id
+		left join case_base cb on a.id = cb.project_id
+		/*LEFT JOIN project_flingbatch_relation pfp on pfp.project_id=a.id*/
+		left join
+		(select id,status,project_id,filing_batch from
+		(
+		select id,create_date,status,project_id,filing_batch
+		from project_flingbatch_relation order by create_date desc
+		)z
+		group by z.project_id desc
+		) pfp ON pfp.project_id = a.id
+
+		LEFT JOIN project_filingbatch pfb on pfb.id=pfp.filing_batch
+		LEFT JOIN sys_user sua on a.create_by = sua.id
+		<if test="leaderNameStr !=null and leaderNameStr !=''">
+			LEFT JOIN work_project_user w on a.id = w.project_id
+			LEFT JOIN sys_user su on w.user_id = su.id
+		</if>
+		LEFT JOIN work_project_user w1 on a.id = w1.project_id
+		LEFT JOIN work_contract_info wci on a.contract_id = wci.id
+		LEFT JOIN work_client_info wct on wci.client_id = wct.id
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		left join project_report_data prd on prd.project_id = a.id
+		left join project_report_data_two prdt on prdt.project_id = a.id
+		left join rural_project_report_record prr on prr.report_id = prd.id
+		LEFT JOIN project_material_defect_record pmdr on prd.id = pmdr.report_id
+		left join rural_project_report_record_down prrd on prrd.report_id = prd.id
+		left join project_paper_filing ppf on ppf.project_id = a.id
+		<where>
+			a.status = 5
+		    and cb.case_type = 1
+			<if test="projectId != null and projectId != ''">
+				AND a.project_id like concat('%',#{projectId},'%')
+			</if>
+			<if test="projectName != null and projectName != ''">
+				AND a.project_name like concat(concat('%',#{projectName}),'%')
+			</if>
+			<if test="scaleType != null and scaleType != ''">
+				AND a.scale_type = #{scaleType}
+			</if>
+			<if test="scaleUnit != null and scaleUnit != ''">
+				AND a.scale_unit = #{scaleUnit}
+			</if>
+			<if test="scaleQuantity != null and scaleQuantity != ''">
+				AND a.scale_quantity = #{scaleQuantity}
+			</if>
+			<if test="projectSite != null and projectSite != ''">
+				AND a.project_site LIKE concat('%',#{projectSite},'%')
+			</if>
+			<if test="remarks != null and remarks != ''">
+				AND a.remarks LIKE concat('%',#{remarks},'%')
+			</if>
+			<if test="projectDesc != null and projectDesc != ''">
+				AND a.project_desc LIKE concat('%',#{projectDesc},'%')
+			</if>
+			<if test="area != null and area.id != null and area.id != ''">
+				AND a.area_id = #{area.id}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.name !=null and workContractInfo.name !=''">
+				AND wci.name like concat(concat('%',#{workContractInfo.name}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractNum !=null and workContractInfo.contractNum !=''">
+				AND wci.contract_num like concat(concat('%',#{workContractInfo.contractNum}),'%')
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractPrice !=null and workContractInfo.contractPrice !=''">
+				AND wci.contract_price = #{workContractInfo.contractPrice}
+			</if>
+			<if test="workContractInfo !=null and workContractInfo.contractType !=null and workContractInfo.contractType !=''">
+				AND wci.contract_type = #{workContractInfo.contractType}
+			</if>
+			<if test="workContractInfo!=null and workContractInfo.client !=null and workContractInfo.client.name !=null and workContractInfo.client.name !=''">
+				AND wct.name like concat(concat('%',#{workContractInfo.client.name}),'%')
+			</if>
+			<!--<if test="leaderNameStr !=null and leaderNameStr !=''">
+                AND su.name like concat(concat('%',#{leaderNameStr}),'%') AND w.is_master = '1' AND w.del_flag='0'
+            </if>-->
+			<if test="(leaderNameStr != null and leaderNameStr != '') or (leaderId != null and leaderId != '')">
+				AND ((w.user_id = #{leaderId}) or su.name like concat('%',#{leaderNameStr},'%')) AND w.is_master = '1' AND w.del_flag='0'
+			</if>
+			<if test="projectStatus !=null">
+				AND a.status = #{projectStatus}
+			</if>
+			<if test="beginDate !=null">
+				AND a.create_date >= #{beginDate}
+			</if>
+			<if test="endDate !=null">
+				AND a.create_date &lt; #{endDate}
+			</if>
+			<if test="emergencyProject !=null and emergencyProject != ''">
+				<choose>
+					<when test="emergencyProject == 0">
+						AND (a.emergency_project = #{emergencyProject} or a.emergency_project is null)
+					</when>
+					<otherwise>
+						AND a.emergency_project = #{emergencyProject}
+					</otherwise>
+				</choose>
+			</if>
+			<!--<if test="createBy != null and createBy.id !=null and createBy.id !=''">
+				AND a.create_by = #{createBy.id}
+ 			</if>-->
+			<if test="createBy != null and((createBy.id != null and createBy.id != '') or (createBy.name != null and createBy.name != ''))">
+				AND (a.create_by = #{createBy.id} or sua.name like concat('%',#{createBy.name},'%'))
+			</if>
+			<choose>
+				<when test="downProjectReportRecordStatus == 0">
+					AND( pfp.status is null or ppf.status is null )
+				</when>
+				<otherwise>
+					<if test="downProjectReportRecordStatus!=null and downProjectReportRecordStatus !=''">
+						AND (pfp.status = #{downProjectReportRecordStatus} or ppf.status = #{downProjectReportRecordStatus})
+					</if>
+				</otherwise>
+			</choose>
+			<if test="reportData!=null and reportData.number !=null and reportData.number !=''">
+				and prd.number like concat('%',#{reportData.number},'%')
+			</if>
+			<!--<if test="office!=null and office.id!=null and office.id!=''">
+				and  a.office_id = #{office.id}
+			</if>-->
+			<if test="office!=null and office.id=='' and office.name!=null and office.name!='' ">
+				and  o.name like concat('%',#{office.name},'%')
+			</if>
+
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+
+			<if test="reportedState !=null and reportedState !=''">
+				<choose>
+					<when test="reportedState == 0">
+						AND a.reported_state is null
+					</when>
+					<otherwise>
+						AND a.reported_state = #{reportedState}
+					</otherwise>
+				</choose>
+			</if>
+
+
+			<if test="projectReportStatus != null and projectReportStatus != ''">
+				AND prd.status = #{projectReportStatus}
+			</if>
+			<if test="submitMoney != null and submitMoney != ''">
+				AND a.submit_money = #{submitMoney}
+			</if>
+			<choose>
+				<when test="projectReportRecordStatus != null and projectReportRecordStatus != '' and projectReportRecordStatus != 0">
+					<choose>
+						<when test="projectReportRecordStatus == 6 or projectReportRecordStatus == 7">
+							<choose>
+								<when test="projectReportRecordStatus == 6">
+									AND a.record_state= #{projectReportRecordStatus} and prr.status is null
+								</when>
+								<otherwise>
+									AND prr.status = #{projectReportRecordStatus}
+								</otherwise>
+							</choose>
+						</when>
+						<otherwise>
+							AND prr.status = #{projectReportRecordStatus}
+						</otherwise>
+					</choose>
+				</when>
+				<otherwise>
+					<choose>
+						<when test="projectReportRecordStatus == 0">
+							AND prr.status is null
+						</when>
+					</choose>
+				</otherwise>
+			</choose>
+
+			<if test="projectType != null and projectType != ''">
+				AND a.project_type = #{projectType}
+			</if>
+			<choose>
+				<when test="projectReportStatusTwo == 0">
+					AND prdt.status is null
+				</when>
+				<otherwise>
+					<if test="projectReportStatusTwo!=null and projectReportStatusTwo !=''">
+						AND prdt.status = #{projectReportStatusTwo}
+					</if>
+				</otherwise>
+			</choose>
+
+			AND  a.status != 7 AND a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="sqlMap.dsf !=null and sqlMap.dsf!=''">
+				AND ((w1.user_id = #{currentUser.id} AND w1.del_flag='0' AND a.company_id = #{currentUser.company.id} )${sqlMap.dsf} )
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	<update id="deleteCaseBase">
+		update case_base set case_status = '0'
+		where project_id = #{id}
+	</update>
+
+	<select id="get" resultType="RuralProjectRecords" >
+		SELECT
+		<include refid="projectRecordsColumns"/>
+		,a.file_num AS "fileNum"
+		,a.check_process_instance_id AS "checkProcessInstanceId"
+		,su.name AS "createBy.name"
+		,o.top_company AS "office.name"
+		,prd.number AS "projectReportNumber"
+		,prd.id AS "prdId"
+		,prr.id As "prrid"
+		,a.project_master_id as "projectMasterId"
+		,a.submit_money as "submitMoney"
+		,a.engineering_type as "engineeringType"
+		,supmi.name as "projectMasterName"
+		,cb.case_process_id as "caseProcessId"
+		,cb.case_type as "caseType"
+		,cb.case_create_by as "caseCreateBy"
+		,if(case_status > 0 ,case_status,"0") as "caseStatus"
+		FROM rural_project_records a
+		<include refid="projectRecordsJoins"/>
+		LEFT JOIN sys_user su ON su.id = a.create_by
+		LEFT JOIN sys_user supmi ON supmi.id = a.project_master_id
+		left join project_report_data prd on prd.project_id = a.id
+		LEFT JOIN rural_project_report_record prr on prd.id = prr.report_id
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		left join case_base cb on a.id = cb.project_id
+		WHERE a.id = #{id}
+	</select>
+
+</mapper>

+ 53 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml

@@ -3463,4 +3463,57 @@
 			</if>
 		</where>
 	</select>
+
+	<update id="updateProcessInstanceId">
+		UPDATE case_base SET
+			case_process_id = #{processInstanceId}
+		WHERE project_id = #{projectId}
+	</update>
+
+	<select id="findCaseBaseList" resultType="RuralProjectRecords">
+		select * from rural_project_records rpr LEFT JOIN case_base cb on rpr.id = cb.project_id
+		<where>
+			<if test="#{id} != null and #{id} != ''">
+				cb.project_id = #{id}
+			</if>
+		</where>
+	</select>
+
+	<update id="updateCaseBase">
+		update case_base
+		    <set>
+				<if test="#{processInstanceId} != null and #{processInstanceId} != ''">
+					 case_process_id = #{processInstanceId}
+				</if>
+				<if test="#{caseType} != null and #{caseType} != ''">
+					 ,case_type = #{caseType}
+				</if>
+				<if test="#{caseCreateBy} != null and #{caseCreateBy} != ''">
+					 ,case_create_by = #{caseCreateBy}
+				</if>
+				<if test="#{caseStatus} != null and #{caseStatus} != ''">
+					 ,case_status = #{caseStatus}
+				</if>
+			</set>
+		where project_id = #{id}
+	</update>
+
+	<insert id="insertCaseBase">
+		insert into case_base(
+			project_id,
+			case_process_id,
+			case_type,
+			case_create_by,
+			case_status
+		)
+		values (
+		    #{id},
+			#{processInstanceId},
+			#{caseType},
+			#{caseCreateBy},
+			#{caseStatus}
+			   )
+	</insert>
+
+
 </mapper>

+ 100 - 1
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralCostProjectMessageList.jsp

@@ -6,6 +6,7 @@
 	<meta name="decorator" content="default"/>
 	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
 	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<script src="layer.js"></script>
 	<script type="text/javascript">
 		$(document).ready(function() {
 
@@ -106,6 +107,76 @@
 			});
 		}
 
+		//打开对话框(查看)
+		function deleteFun(url){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			layer.confirm('确定要删除该申请信息吗?', {
+				title: "确定要删除该申请信息吗",
+				btn: ['确定','关闭'] //可以无限个按钮
+			},function(index, layero){
+				$.ajax({
+					type: 'post',
+					url:url,
+					dataType: "json",
+					cache: false,
+					processData: false,
+					contentType: false,
+				}).success(function (result) {
+					if(result.result == "1"){
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 1});
+						window.location.reload();
+					}else{
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 2});
+					}
+				});
+			}, function(index){
+				layer.close(index);
+			});
+		}
+
+		//打开对话框(查看)
+		function openDialogreCaseBase(url){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			layer.confirm('确定要申请案例项目吗?', {
+				title: "确定要申请案例项目吗",
+				btn: ['确定','关闭'] //可以无限个按钮
+			},function(index, layero){
+				$.ajax({
+					type: 'post',
+					url:url,
+					dataType: "json",
+					cache: false,
+					processData: false,
+					contentType: false,
+				}).success(function (result) {
+					if(result.result == "1"){
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 1});
+						window.location.reload();
+					}else{
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 2});
+					}
+				});
+			}, function(index){
+				layer.close(index);
+			});
+		}
+
 		function openDialogre(title,url,width,height,target,buttons) {
 
 			if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
@@ -511,6 +582,16 @@
 					}
 				}
 
+				//案例项目申请按钮
+				if(d.reportedState == 5 && d.projectReportRecordStatus == 5 ){
+					if (d.caseType != 1 && d.caseStatus !=2 && d.caseStatus !=5 && d.caseStatus !=4 ){
+						xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogreCaseBase('${ctx}/ruralProject/ruralCostProjectMessage/caseBase?projectId=" + d.id + " ')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;' > 申请案例项目</a>";
+					}
+					if(d.caseType != 1 && d.caseStatus ==2){
+						xml+="<a href=\"javascript:void(0)\" onclick=\"deleteFun('${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidateCaseBase?projectId=" + d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-red\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;'  > 撤销案例项目申请</a>";
+					}
+				}
+
 				//报告签发操作
 				if(d.projectReportStatus == 5 && d.emergencyProject != 1){
 
@@ -775,6 +856,9 @@
 				xml+="<a href=\"#\" onclick=\"openDialogreReportSwitch('上报管理', '${ctx}/ruralProject/ruralCostProjectMessageNew/submitReportedProvincialStanding?id=" +  d.id + " ','95%', '95%','','上报,关闭')\"  class=\"layui-btn layui-btn-xs layui-bg-green\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;' > 提交省站</a>";
 			}
 			</shiro:hasPermission>
+
+
+
 			xml+="</div>";
 			return[xml].join('');
 		}
@@ -983,7 +1067,7 @@
 		table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
 			var data = obj.data //获得当前行数据
 					, layEvent = obj.event; //获得 lay-event 对应的值
-			if (layEvent === 'more' && (data.falg == 1 || ('0'!=data.projectReportStatus && '1'!=data.projectReportStatus) || data.paperFilingStatus == 5 || data.projectReportStatus == 5 || data.submitMoney==1 || data.reportedState == 5 || data.reportedState == 7)) {
+			if (layEvent === 'more' && (data.falg == 1 || ('0'!=data.projectReportStatus && '1'!=data.projectReportStatus) || data.paperFilingStatus == 5 || data.projectReportStatus == 5 || data.submitMoney==1 || data.reportedState == 5 || data.reportedState == 7) ){
 				//下拉菜单
 				dropdown.render({
 					elem: this //触发事件的 DOM 对象
@@ -1141,6 +1225,17 @@
 							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
 						return xml;
 					}}
+				,{align:'center', title: '案例项目申报',  width:150,templet:function(d){
+						var st = getReportedState(d.caseStatus);
+						if(st.action)
+							var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status+ "</span>";
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+						if (d.caseType == 1){
+							xml+="<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\"  style='margin-left: 5px;' class=\"layui-badge layui-bg-orange\">是</span>";
+						}
+						return xml;
+					}}
 				<%--,{align:'center', title: '纸质',  width:90,templet:function(d){--%>
 				<%--		var st = getRuralProjectArchiveState(d.paperFilingStatus);--%>
 				<%--		if(st.action)--%>
@@ -1202,6 +1297,10 @@
 					,"newRecordTwoNotifyFlag":"${projectRecords.newRecordTwoNotifyFlag}"
 					,"newRecordNotifyFlag":"${projectRecords.newRecordNotifyFlag}"
 					,"prdAuditDate":"${projectRecords.prdAuditDate}"
+					,"caseProcessId":"${projectRecords.caseProcessId}"
+					,"caseType":"${projectRecords.caseType}"
+					,"caseCreateBy":"${projectRecords.caseCreateBy}"
+					,"caseStatus":"${projectRecords.caseStatus}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1466 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/cost/ruralProjectRecordsCaseBaseList.jsp


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2236 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsCaseAudit.jsp


+ 496 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralProjectRecordsCaseView.jsp

@@ -0,0 +1,496 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>项目审批管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<script type="text/javascript" src="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/helloweba_editable-select/jquery.editable-select.min.css"/>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/layuidown.css"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layuidown.js"></script>
+	<script>
+		$(document).ready(function () {
+
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+			var tt = $("#contractNum").val();
+			if (tt == null || tt === "") {
+				$("#divv").hide();
+				$("#divv2").show();
+				$("#divv3").hide();
+				setTimeout(function () {
+					var tt = $("#workClientLinkmanList").find("tr").eq(0).find("td").eq(1).text().trim();
+					$("#clientName").val(tt);
+				},100);
+			}else{
+				$("#divv2").hide();
+				var contractInformation='${projectRecords.workContractInfo.contractInformation}'
+				if(contractInformation == "1"){
+					$("#c2").show();
+					$("#c1").hide();
+				}else{
+					$("#c2").hide();
+					$("#c1").show();
+				}
+			}
+
+			layui.use('form', function () {
+				var form = layui.form;
+				form.render();
+			});
+			//默认打开判断是否时紧急项目
+			<%--var submitMoney="${projectRecords.submitMoney}"--%>
+			<%--if(submitMoney==1){--%>
+			<%--	$("#emergencyProject").parent().parent().parent().show();--%>
+			<%--	var emergencyProject="${projectRecords.emergencyProject}"--%>
+			<%--	if (emergencyProject=="1"){--%>
+			<%--		$("#emergencyProject").prop("checked",true);--%>
+			<%--		layui.form.render();--%>
+			<%--	}else{--%>
+			<%--		$("#emergencyProject").prop("checked",false);--%>
+			<%--		layui.form.render();--%>
+			<%--	}--%>
+			<%--}--%>
+		})
+
+
+		function openSignatureview(contractId){
+			$.ajax({
+				type:"get",
+				url:'${ctx}/ruralProject/signatureCallBack/getViewUrlByReportContractId',
+				data:{
+					"contractId":contractId
+				},
+				dataType:"json",
+				success:function(data){
+					if(data.success) {
+						window.open(data.viewUrl);
+					}else {
+						top.layer.msg("文件预览页打开失败", {icon: 0});
+					}
+				}
+			})
+		}
+
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			if(validateForm.form()){
+				if(obj == 1){
+
+					$('#flag').val('yes');
+				}else{
+					$('#flag').val('no');
+				}
+				$("#inputForm").submit();
+				return true;
+			}else {
+				parent.layer.msg("信息未填写完整!", {icon: 5});
+			}
+
+			return false;
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="tapfixed">
+	<div class="list-form-tab contentShadow shadowLTR" id="tabDiv">
+		<ul class="list-tabs" >
+			<li class="active"><a href="${ctx}/ruralProject/ruralProjectView/view?id=${projectRecords.id}">项目详情</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/list?parentProId=${projectRecords.id}&projectType=${projectRecords.projectType}">子项目列表</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/workContractView?id=${projectRecords.workContractInfo.id}&projectId=${projectRecords.id}">客户合同详情</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/planView?id=${projectRecords.id}">项目计划信息</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/getReportedView?projectId=${projectRecords.id}&id=${reportedId}">上报信息</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/modify?projectId=${projectRecords.id}">质量复核信息</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/reportIssue?projectId=${projectRecords.id}">报告签发信息</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/getAccessoryView?id=${projectRecords.id}">档案信息</a></li>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/formRecordModify?id=${projectRecords.id}">线上归档信息</a></li>
+<%--			<li><a href="${ctx}/ruralProject/ruralProjectView/searchview?id=${projectRecords.id}">选查信息详情</a></li>--%>
+			<li><a href="${ctx}/ruralProject/ruralProjectView/paperView?projectId=${projectRecords.id}">纸质归档信息</a></li>
+		</ul>
+	</div>
+	</div>
+	<div class="container view-form" style="margin-top: 50px;">
+		<form:form id="inputForm" modelAttribute="projectRecords" action="${ctx}/ruralProject/ruralCostProjectMessage/saveAudit" enctype="multipart/form-data" method="post" class="form-horizontal layui-form">
+			<input type="hidden" id="id" name="id" value="${projectRecords.id}"/>
+			<input type="hidden" id="taskId" name="taskId" value="${projectRecords.act.taskId}"/>
+			<input type="hidden" id="taskName" name="taskName" value="${projectRecords.act.taskName}"/>
+			<input type="hidden" id="taskDefKey" name="taskDefKey" name="taskDefKey" value="${projectRecords.act.taskDefKey}" />
+			<input type="hidden" id="procInsId" name="procInsId" value="${projectRecords.act.procInsId}"/>
+			<input type="hidden" id="procDefId" name="procDefId" value="${projectRecords.act.procDefId}"/>
+			<input type="hidden" id="flag" name="flag" value="${projectRecords.act.flag}"/>
+
+			<input type="hidden" id="projectStatus" name="projectStatus" value="${projectRecords.projectStatus}"/>
+			<input type="hidden" id="processInstanceId" name="processInstanceId" value="${projectRecords.processInstanceId}"/>
+
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>项目合同信息</h2></div>
+               <div id="divv">
+				   <div class="layui-item layui-col-sm12 lw6">
+					   <label class="layui-form-label">合同编号:</label>
+					   <div class="layui-input-block">
+						   <input type="text" htmlEscape="false" style="background-color: #f1f1f1" id="contractNum" name="contractNum" readonly="true" class="form-control layui-input" value="${projectRecords.workContractInfo.contractNum}"/>
+					   </div>
+				   </div>
+				   <div class="layui-item layui-col-sm6 lw6">
+					   <label class="layui-form-label">合同名称:</label>
+					   <div class="layui-input-block">
+						   <input type="text" htmlEscape="false" id="name" name="name" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.workContractInfo.name}"/>
+					   </div>
+				   </div>
+				   <div class="layui-item layui-col-sm6 lw6" id="c1">
+					   <label class="layui-form-label double-line">合同金额(元):</label>
+					   <div class="layui-input-block">
+						   <input htmlEscape="false" id="contractPrice" name="contractPrice" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="<fmt:formatNumber value="${projectRecords.workContractInfo.contractPrice}" pattern="#,##0.00#"/>"/>
+					   </div>
+				   </div>
+				   <div class="layui-item layui-col-sm6 lw6" id="c2" style="display: none">
+					   <label class="layui-form-label">费率描述:</label>
+					   <div class="layui-input-block">
+						   <input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" id="otherDetails" name="otherDetails"  class="form-control layui-input" value="${projectRecords.workContractInfo.otherDetails}"/>
+					   </div>
+				   </div>
+				   <div class="layui-item layui-col-sm6 lw6">
+					   <label class="layui-form-label">委托方:</label>
+					   <div class="layui-input-block">
+						   <input htmlEscape="false" style="background-color: #f1f1f1" id="clientName" name="" readonly="true" class="form-control layui-input" value="${projectRecords.workContractInfo.client.name}"/>
+					   </div>
+				   </div>
+			   </div>
+				<div id="divv2">
+					<div class="layui-item layui-col-sm6 lw6">
+						<label class="layui-form-label">无合同</label>
+					</div>
+				</div>
+				<div id="divv3">
+					<div class="layui-item layui-col-sm6 lw6">
+						<label class="layui-form-label">合同类型:</label>
+						<div class="layui-input-block">
+							<input htmlEscape="false"  readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="${projectRecords.workContractInfo.contractType}"/>
+						</div>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>项目基础信息</h2></div>
+                <div class="layui-item layui-col-sm6 lw6">
+                    <label class="layui-form-label">报告号:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false"  readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${flagProjectReportData.number}"/>
+                    </div>
+                </div>
+				<div class="layui-item layui-col-sm6 lw6">
+                    <label class="layui-form-label">项目名称:</label>
+                    <div class="layui-input-block">
+                        <input htmlEscape="false" id="projectName" name="projectName" readonly="true" class="form-control layui-input" style="background-color: #f1f1f1" value="${projectRecords.projectName}"/>
+                    </div>
+                </div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目编号:</label>
+					<div class="layui-input-block">
+                        <div class="input-group">
+                            <input id="projectId" name="projectId" value="${projectRecords.projectId}" htmlEscape="false"  readonly="true" class="form-control layui-input" Style="background-color: #f1f1f1"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty projectRecords.projectStatus}">${fns:getDictLabel(projectRecords.projectStatus, 'rural_project_audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目所在地:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.province}-${projectRecords.city}-${projectRecords.county}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">投资性质:</label>
+					<div class="layui-input-block">
+						<c:if test="${projectRecords.projectProperties==null}">
+							<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input"/>
+						</c:if>
+						<c:forEach  items="${fns:getMainDictList('project_properties')}" var="v">
+							<c:if test="${v.value==projectRecords.projectProperties}">
+								<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${v.label}"/>
+							</c:if>
+						</c:forEach>
+					</div>
+				</div>
+<%--				<div class="layui-item layui-col-sm6 lw6">--%>
+<%--					<label class="layui-form-label">所在省份:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<form:input path="province" cssStyle="background-color: #f1f1f1" htmlEscape="false" id="province" class="form-control layui-input" readonly="true"/>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw6">--%>
+<%--					<label class="layui-form-label">所在地级市:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<form:input path="city" cssStyle="background-color: #f1f1f1" htmlEscape="false" id="city" class="form-control layui-input" readonly="true"/>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm6 lw6">--%>
+<%--					<label class="layui-form-label">所在区县:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<form:input path="county" cssStyle="background-color: #f1f1f1" htmlEscape="false" id="areaName1" class="form-control layui-input" readonly="true"/>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">建设地点:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1"  readonly="true" class="form-control layui-input" value="${projectRecords.projectSite}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">创建人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.createBy.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目责任人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.leaderNameStr}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">所属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" id="officeName" class="form-control layui-input" value="${projectRecords.officeName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label double-line">项目归属部门:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" id="belongingDepartmentName" class="form-control layui-input" value="${belongingDepartmentName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目负责人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="${projectRecords.projectMasterName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">工程类型:</label>
+					<div class="layui-input-block">
+						<select id="engineeringType" name="engineeringType" disabled="true" style="background-color: #f1f1f1"  class="form-control simple-select">
+							<options items="${engineeringInfo}" itemLabel="engineeringName" itemValue="id" htmlEscape="false"/>
+							<%--							<c:forEach items="${engineeringInfo}" varStatus="index" var="info">--%>
+							<%--								<form:option value="${info.id}" <c:if test="${info.id == projectRecords.engineeringType}"> selected</c:if>>${info.engineeringName}</form:option>--%>
+							<%--							</c:forEach>--%>
+						</select>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">项目等级:</label>
+					<div class="layui-input-block">
+						<c:forEach items="${fns:getMainDictListOnProjectAdvent('attachment_project_grade')}" var="v">
+							<input type="radio" disabled name="submitMoney" id="submitMoney" value="${v.value}" title="${v.label}" <c:if test="${projectRecords.submitMoney==v.value}">checked</c:if>>
+						</c:forEach>
+						<p style="color: red;font-size: 12px;">200万以上部队或政府项目及500万以上其它项目为A级,其余为B级</p>
+						<%--<form:select path="submitMoney" disabled="true" style="background-color: #f1f1f1"  class="form-control simple-select">
+							<form:option value=""/>
+							<form:options items="${fns:getMainDictListOnProjectAdvent('attachment_project_approval_money')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+						</form:select>--%>
+					</div>
+				</div>
+<%--				<div class="layui-item layui-col-sm6 lw7" style="display: none">--%>
+<%--					<label class="layui-form-label double-line">是否是紧急项目:</label>--%>
+<%--					<div class="layui-input-block">--%>
+<%--						<div style="margin-right: 30px;">--%>
+<%--							<input type="checkbox" id="emergencyProject" disabled lay-filter="emergencyProject" lay-skin="switch" lay-text="是|否">--%>
+<%--						</div>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label double-line">送审规模(万元):</label>
+					<div class="layui-input-block">
+						<input id="submitScale" name="submitScale" readonly="true" style="background-color: #f1f1f1" id="submitScale" value="${projectRecords.submitScale}" maxlength="12" htmlEscape="false" placeholder="请输入送审规模" class="form-control layui-input number"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label double-line">工作开始日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate form-control layui-input layer-date ash"  style="background-color: #f1f1f1" readonly="true" id="startDate" name="startDate" value="<fmt:formatDate value="${projectRecords.startDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label double-line">工作结束日期:</label>
+					<div class="layui-input-block">
+						<input class="laydate-icondate form-control layui-input layer-date "  style="background-color: #f1f1f1" readonly="true" id="endingDate" name="endingDate" value="<fmt:formatDate value="${projectRecords.endingDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6">
+					<label class="layui-form-label">创建日期:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  style="background-color: #f1f1f1" readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${projectRecords.createDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw7">
+					<label class="layui-form-label">项目类别:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"  style="background-color: #f1f1f1" class="form-control layui-input" value="${projectRecords.attachmentProjectSort}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6 with-textarea">
+					<label class="layui-form-label">工程概况:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true"  style="background-color: #f1f1f1" maxlength="1000" class="form-control" >${projectRecords.projectDesc}</textarea>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 lw6 with-textarea">
+					<label class="layui-form-label">备注:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" rows="4" readonly="true" maxlength="1000"  style="background-color: #f1f1f1" class="form-control" >${projectRecords.remarks}</textarea>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>选查要求</h2></div>
+				<div class="layui-item layui-col-sm12 lw6 with-textarea">
+					<label class="layui-form-label">选查要求:</label>
+					<div class="layui-input-block">
+						<textarea htmlEscape="false" style="background-color: #f1f1f1" rows="4" readonly="true" class="form-control" >${projectRecords.checkRemarks}</textarea>
+					</div>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>委托方联系人信息</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable" class="table table-bordered table-condensed no-bottom-margin details">
+						<thead>
+						<tr>
+							<th class="hide"></th>
+							<th width="25%">委托方</th>
+							<th width="25%">联系人姓名</th>
+							<th width="25%">联系方式1</th>
+							<th width="25%">联系方式2</th>
+						</tr>
+						</thead>
+						<tbody id="workClientLinkmanList">
+						<c:forEach items="${projectRecords.workClientLinkmanList}" var="info" varStatus="index">
+							<tr>
+								<td >
+										${info.clientId.name}
+								</td>
+								<td>
+										${info.name}
+								</td>
+								<td>
+										${info.linkPhone}
+								</td>
+								<td>
+										${info.linkMobile}
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>施工方信息</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<table id="contentTable1" class="table table-bordered table-condensed no-bottom-margin details">
+						<thead>
+						<tr>
+							<th class="hide"></th>
+							<th width="25%">施工方单位名称</th>
+							<th width="25%">联系人姓名</th>
+							<th width="25%">联系方式1</th>
+							<th width="25%">联系方式2</th>
+						</tr>
+						</thead>
+						<tbody id="workConstructionLinkmanList">
+						<c:forEach items="${projectRecords.workConstructionLinkmanList}" var="info" varStatus="index">
+							<tr>
+								<td >
+										${info.clientId.name}
+								</td>
+								<td>
+										${info.name}
+								</td>
+								<td>
+										${info.linkPhone}
+								</td>
+								<td>
+										${info.linkMobile}
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<c:if test="${projectRecords.reportSignatureFlag == 1}">
+				<div class="form-group layui-row">
+					<div class="form-group-label"><h2>报告签章附件表</h2></div>
+					<div class="layui-item layui-col-xs12 form-table-container" >
+						<table id="contentTable" class="table table-bordered table-condensed no-bottom-margin details">
+							<thead>
+							<tr>
+
+								<th>文件</th>
+								<th>上传人</th>
+								<th>上传时间</th>
+								<th width="180px">操作</th>
+							</tr>
+							</thead>
+							<tbody>
+							<c:choose>
+								<c:when test="${projectRecords.reportSignatureFlag == 1}">
+									<tr>
+										<td><a class="attention-info" href="javascript:void(0)" onclick="openSignatureview('${projectRecords.reportSignatureContractId}')">${projectRecords.reportSignatureFileName}.zip</a></td>
+										<td>${projectRecords.reportSignatureUploadFileUser.name}</td>
+										<td><fmt:formatDate value="${projectRecords.reportSignatureUploadDate}" type="both"/></td>
+										<td class="op-td">
+											<a href="javascript:location.href='${ctx}/ruralProject/signatureCallBack/downLoadReportAttach?contractId=${projectRecords.reportSignatureContractId}'" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+										</td>
+									</tr>
+								</c:when>
+								<c:otherwise>
+									<tr>
+										<td colspan="4" align="center">暂无数据</td>
+									</tr>
+								</c:otherwise>
+							</c:choose>
+							</tbody>
+						</table>
+					</div>
+				</div>
+			</c:if>
+			<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="${projectRecords.processInstanceId}"/>
+					<act:histoicFlow procInsId="${projectRecords.processInstanceId}"/>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 61 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/all/ruralProjectMessageAllList.jsp

@@ -500,6 +500,42 @@
 				}
 			});
 		}
+
+		//打开对话框(查看)
+		function openDialogreCaseBase(url){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			layer.confirm('确定要选定为案例项目吗?', {
+				title: "确定要申请案例项目吗",
+				btn: ['确定','关闭'] //可以无限个按钮
+			},function(index, layero){
+				$.ajax({
+					type: 'post',
+					url:url,
+					dataType: "json",
+					cache: false,
+					processData: false,
+					contentType: false,
+				}).success(function (result) {
+					if(result.result == "1"){
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 1});
+						window.location.reload();
+					}else{
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 2});
+					}
+				});
+			}, function(index){
+				layer.close(index);
+			});
+		}
+
 		function notifyDialogre(title,url,width,height,target){
 			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
 				width='auto';
@@ -944,6 +980,17 @@
 							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
 						return xml;
 					}}
+				,{align:'center', title: '案例项目申报',  width:150,templet:function(d){
+						var st = getReportedState(d.caseStatus);
+						if(st.action)
+							var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status+ "</span>";
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+						if (d.caseType == 1){
+							xml+="<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\"  style='margin-left: 5px;' class=\"layui-badge layui-bg-orange\">是</span>";
+						}
+						return xml;
+					}}
                 ,{field:'op',align:'center',title:"操作",width:200,templet:function(d) {
 						////对操作进行初始化
 						var xml = '<div class=\"layui-btn-group\">';
@@ -997,6 +1044,16 @@
 								}
 							}
 						</shiro:hasPermission>
+
+
+						//选定案例项目 按钮  权限
+						<shiro:hasPermission name="ruralProject:RuralProjectRecordsCaseBase:selectCaseBase">
+						if(d.reportedState == 5 && d.projectReportRecordStatus == 5){
+							if (d.caseType != 1 && d.caseStatus !=2 && d.caseStatus !=5 ){
+								xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogreCaseBase('${ctx}/ruralProject/RuralProjectRecordsCaseBase/selectCaseBase?projectId=" + d.id + " ')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" style='height: 32px;margin-top: 5px;margin-bottom: 5px;' > 选定为案例项目</a>";
+							}
+						}
+						</shiro:hasPermission>
 						xml+="</div>";
 						return[xml].join('');
 					}}
@@ -1054,6 +1111,10 @@
 					,"ppfProcessInstanceId":"${projectRecords.ppfProcessInstanceId}"
 					,"submitMoney":"${projectRecords.submitMoney}"
 					,"money":"${projectRecords.money}"
+					,"caseProcessId":"${projectRecords.caseProcessId}"
+					,"caseType":"${projectRecords.caseType}"
+					,"caseCreateBy":"${projectRecords.caseCreateBy}"
+					,"caseStatus":"${projectRecords.caseStatus}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">

+ 97 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/ruralporjectmessage/ruralProjectMessageList.jsp

@@ -440,6 +440,77 @@
 				}
 			});
 		}
+
+		//打开对话框(查看)
+		function deleteFun(url){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			layer.confirm('确定要删除该申请信息吗?', {
+				title: "确定要删除该申请信息吗",
+				btn: ['确定','关闭'] //可以无限个按钮
+			},function(index, layero){
+				$.ajax({
+					type: 'post',
+					url:url,
+					dataType: "json",
+					cache: false,
+					processData: false,
+					contentType: false,
+				}).success(function (result) {
+					if(result.result == "1"){
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 1});
+						window.location.reload();
+					}else{
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 2});
+					}
+				});
+			}, function(index){
+				layer.close(index);
+			});
+		}
+
+		//打开对话框(查看)
+		function openDialogreCaseBase(url){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			layer.confirm('确定要申请案例项目吗?', {
+				title: "确定要申请案例项目吗",
+				btn: ['确定','关闭'] //可以无限个按钮
+			},function(index, layero){
+				$.ajax({
+					type: 'post',
+					url:url,
+					dataType: "json",
+					cache: false,
+					processData: false,
+					contentType: false,
+				}).success(function (result) {
+					if(result.result == "1"){
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 1});
+						window.location.reload();
+					}else{
+						layer.close(index);
+						top.layer.msg(result.msg, {icon: 2});
+					}
+				});
+			}, function(index){
+				layer.close(index);
+			});
+		}
+
 		function projectUpgrade(id,projectReportRecordStatus,filingProjectStatus,projectReportStatus,projectReportStatusTwo) {
 			if (projectReportRecordStatus == '2' || projectReportRecordStatus == '4'){
 				top.layer.msg("电子归档流程正在运行当中,请撤回流程!", {icon: 0});
@@ -789,6 +860,17 @@
                             var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
+				,{align:'center', title: '案例项目申报',  width:150,templet:function(d){
+						var st = getReportedState(d.caseStatus);
+						if(st.action)
+							var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status+ "</span>";
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"new-status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+						if (d.caseType == 1){
+							xml+="<span onclick=\"openDialogView('流程追踪', '${ctx}/ruralProject/ruralCostProjectMessage/getReportedProcess?processInstanceId=" + d.caseProcessId + "','95%','95%')\"  style='margin-left: 5px;' class=\"layui-badge layui-bg-orange\">是</span>";
+						}
+						return xml;
+					}}
 				<%--,{align:'center', title: '纸质',  width:90,templet:function(d){--%>
 				<%--		var st = getRuralProjectArchiveState(d.paperFilingStatus);--%>
 				<%--		if(st.action)--%>
@@ -827,6 +909,15 @@
 
 								<%--xml+="<a href=\"${ctx}/ruralProject/ruralCostProjectMessage/deleteReport?projectId=" + d.id + "\" onclick=\"return confirmx('确认要删除该项目报告质量复核吗?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 删除报告</a>";--%>
 							}
+							//案例项目申请按钮
+							if(d.reportedState == 5 && d.projectReportRecordStatus == 5){
+								if (d.caseType != 1 && d.caseStatus !=2 && d.caseStatus !=5 && d.caseStatus != 4 ){
+									xml+="<a href=\"javascript:void(0)\" onclick=\"openDialogreCaseBase('${ctx}/ruralProject/ruralCostProjectMessage/caseBase?projectId=" + d.id + " ')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 申请案例项目</a>";
+								}
+								if(d.caseType != 1 && d.caseStatus ==2){
+									xml+="<a href=\"javascript:void(0)\" onclick=\"deleteFun('${ctx}/ruralProject/ruralCostProjectMessage/cancelInvalidateCaseBase?projectId=" + d.id + "')\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤销案例项目申请</a>";
+								}
+							}
 							//报告签发操作
 							if(d.projectReportStatus == 5 && d.emergencyProject != 1){
 
@@ -1085,6 +1176,8 @@
 							xml+="<a href=\"#\" onclick=\"openDialogreReportSwitch('上报管理', '${ctx}/ruralProject/ruralCostProjectMessageNew/submitReportedProvincialStanding?id=" +  d.id + " ','95%', '95%','','上报,关闭')\" style='background-color: #1E9FFF' class=\"layui-btn layui-btn-xs layui-bg-green\" > 提交省站</a>";
 						}
 						</shiro:hasPermission>
+
+
 						xml+="</div>";
 						return[xml].join('');
 					}}
@@ -1136,6 +1229,10 @@
 					,"newRecordTwoNotifyFlag":"${projectRecords.newRecordTwoNotifyFlag}"
 					,"newRecordNotifyFlag":"${projectRecords.newRecordNotifyFlag}"
 					,"prdAuditDate":"${projectRecords.prdAuditDate}"
+					,"caseProcessId":"${projectRecords.caseProcessId}"
+					,"caseType":"${projectRecords.caseType}"
+					,"caseCreateBy":"${projectRecords.caseCreateBy}"
+					,"caseStatus":"${projectRecords.caseStatus}"
 					,"falg":
 					<c:choose>
 						<c:when test="${fns:getUser().id == projectRecords.leaderIds || fns:getUser().id eq projectRecords.createBy.id}">

+ 1 - 1
src/main/webapp/webpage/modules/sys/sysHome.jsp

@@ -944,7 +944,7 @@
                         <c:when test="${workProjectNotify.type eq 39 && (workProjectNotify.projectType eq 1 || workProjectNotify.projectType eq 2)}">
                             xml = "<a  href=\"javascript:void(0)\" onclick=\"projectDialogres('重新申请', '${ctx}/workprojectnotify/workProjectNotify/form?id=${workProjectNotify.id}','${ctx}/workprojectnotify/workProjectNotify/cancellationNotify?id=${workProjectNotify.id}','95%','95%')\">";
                         </c:when>
-                        <c:when test="${workProjectNotify.type eq 16}">
+                        <c:when test="${workProjectNotify.type eq 16 || workProjectNotify.type eq 152}">
                             xml = "<a  href=\"javascript:void(0)\" onclick=\"projectDialogres('重新申请', '${ctx}/workprojectnotify/workProjectNotify/form?id=${workProjectNotify.id}','${ctx}/workprojectnotify/workProjectNotify/cancellationNotify?id=${workProjectNotify.id}','95%','95%')\">";
                         </c:when>
                         <%--删除--%>