|  | @@ -0,0 +1,767 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +package com.jeeplus.modules.workfullexecute.service;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import com.google.common.collect.Lists;
 | 
	
		
			
				|  |  | +import com.google.common.collect.Maps;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.oss.OSSClientUtil;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.persistence.Page;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.service.CrudService;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.utils.DateUtils;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.utils.MenuStatusEnum;
 | 
	
		
			
				|  |  | +import com.jeeplus.common.utils.StringUtils;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.act.service.ActTaskService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.act.utils.ActUtils;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.entity.Role;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.entity.User;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.entity.Workattachment;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.service.OfficeService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.service.WorkattachmentService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.sys.utils.UserUtils;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivity.entity.Activity;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivity.service.ActivityService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workfullexecute.dao.WorkFullExecuteDao;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workfullexecute.entity.WorkFullExecute;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workfullmanage.dao.WorkFullManageDao;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workfullmanage.entity.WorkFullManage;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workfullmanage.service.WorkFullManageService;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 | 
	
		
			
				|  |  | +import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
 | 
	
		
			
				|  |  | +import org.activiti.engine.ActivitiObjectNotFoundException;
 | 
	
		
			
				|  |  | +import org.activiti.engine.IdentityService;
 | 
	
		
			
				|  |  | +import org.activiti.engine.RuntimeService;
 | 
	
		
			
				|  |  | +import org.activiti.engine.runtime.ProcessInstance;
 | 
	
		
			
				|  |  | +import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | +import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | +import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | +import org.springframework.web.multipart.MultipartFile;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import javax.servlet.http.HttpServletRequest;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  | +import java.util.concurrent.locks.Lock;
 | 
	
		
			
				|  |  | +import java.util.concurrent.locks.ReentrantLock;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 项目实施Service
 | 
	
		
			
				|  |  | + * @author fgy
 | 
	
		
			
				|  |  | + * @version 2017-10-27
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +@SuppressWarnings("all")
 | 
	
		
			
				|  |  | +@Service
 | 
	
		
			
				|  |  | +@Transactional(readOnly = true)
 | 
	
		
			
				|  |  | +public class WorkFullExecuteService extends CrudService<WorkFullExecuteDao, WorkFullExecute> {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkProjectNotifyService workProjectNotifyService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private ActTaskService actTaskService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkActivityMenuService workActivityMenuService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkActivityProcessService workActivityProcessService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private ActivityService activityService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private RuntimeService runtimeService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private IdentityService identityService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkFullManageService workFullManageService ;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkFullExecuteDao workFullExecuteDao;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkattachmentService workattachmentService;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private WorkFullManageDao workFullManageDao;
 | 
	
		
			
				|  |  | +	@Autowired
 | 
	
		
			
				|  |  | +	private OfficeService officeService;
 | 
	
		
			
				|  |  | +	private Lock lock = new ReentrantLock();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	public WorkFullExecute get(String id) {
 | 
	
		
			
				|  |  | +		WorkFullExecute workFullExecute = super.get(id);
 | 
	
		
			
				|  |  | +		if(workFullExecute != null){
 | 
	
		
			
				|  |  | +			WorkFullManage workFullManage = workFullManageService.get(workFullExecute.getWorkFullManageId());
 | 
	
		
			
				|  |  | +			if(workFullManage != null){
 | 
	
		
			
				|  |  | +				workFullExecute.setWorkFullManage(workFullManage);
 | 
	
		
			
				|  |  | +				workFullExecute.setWorkFullManageId(workFullManage.getId());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			List<Workattachment> executeFileList = workattachmentService.getListByAttachmentIdAndFlag(workFullExecute.getId(),"2");
 | 
	
		
			
				|  |  | +			if(executeFileList!=null && executeFileList.size()>0){
 | 
	
		
			
				|  |  | +				for (int i = 0; i < executeFileList.size(); i++) {
 | 
	
		
			
				|  |  | +					Workattachment executeFile = executeFileList.get(i);
 | 
	
		
			
				|  |  | +					if(executeFile != null){
 | 
	
		
			
				|  |  | +						executeFile.setAttachmentUser(UserUtils.get(executeFile.getAttachmentUser()).getName());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				workFullExecute.setExecuteFile(executeFileList);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			List<Workattachment> manuscriptFileList = workattachmentService.getListByAttachmentIdAndFlag(workFullExecute.getId(),"3");
 | 
	
		
			
				|  |  | +			if(manuscriptFileList!=null && manuscriptFileList.size()>0){
 | 
	
		
			
				|  |  | +				for (int i = 0; i < manuscriptFileList.size(); i++) {
 | 
	
		
			
				|  |  | +					Workattachment manuscriptFile = manuscriptFileList.get(i);
 | 
	
		
			
				|  |  | +					if(manuscriptFile != null){
 | 
	
		
			
				|  |  | +						manuscriptFile.setAttachmentUser(UserUtils.get(manuscriptFile.getAttachmentUser()).getName());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				workFullExecute.setManuscriptFile(manuscriptFileList);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//流程结束state=false,未结束state=true
 | 
	
		
			
				|  |  | +			boolean state = true;
 | 
	
		
			
				|  |  | +			if(StringUtils.isNotBlank(workFullExecute.getProcessInstanceId())){
 | 
	
		
			
				|  |  | +				state = actTaskService.isProcessEnd(workFullExecute.getProcessInstanceId());
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				//如果是项目负责人,不用审核,没有流程实例
 | 
	
		
			
				|  |  | +				state = false;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			workFullExecute.setProcessEnded(state);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return workFullExecute ;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	public List<WorkFullExecute> findList(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		return super.findList(workFullExecute);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	public Page<WorkFullExecute> findPage(Page<WorkFullExecute> page, WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		workFullExecute.setPage(page);
 | 
	
		
			
				|  |  | +		page.setList(findListBelongtoWorkfullmanage(workFullExecute));
 | 
	
		
			
				|  |  | +		return page;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//一个项目有多个项目实施文件
 | 
	
		
			
				|  |  | +	private List<WorkFullExecute> findListBelongtoWorkfullmanage(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		if(StringUtils.isBlank(workFullExecute.getWorkFullManageId())){
 | 
	
		
			
				|  |  | +			return new ArrayList<>();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		List<WorkFullExecute> executeList = workFullExecuteDao.findList(workFullExecute);
 | 
	
		
			
				|  |  | +		if(executeList != null && executeList.size()>0){
 | 
	
		
			
				|  |  | +			for(int i=0 ; i< executeList.size();i++){
 | 
	
		
			
				|  |  | +				WorkFullExecute execute = executeList.get(i);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//流程结束state=false,未结束state=true
 | 
	
		
			
				|  |  | +				boolean state = true;
 | 
	
		
			
				|  |  | +				if(StringUtils.isNotBlank(execute.getProcessInstanceId())){
 | 
	
		
			
				|  |  | +					state = actTaskService.isProcessEnd(execute.getProcessInstanceId());
 | 
	
		
			
				|  |  | +				}else{
 | 
	
		
			
				|  |  | +					//如果是项目负责人,不用审核,没有流程实例
 | 
	
		
			
				|  |  | +					state = false;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				execute.setProcessEnded(state);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				List<Workattachment> attachmentList = workattachmentService.getListByAttachmentIdAndFlag(execute.getId(),"2");
 | 
	
		
			
				|  |  | +				if(attachmentList != null && attachmentList.size()>0){
 | 
	
		
			
				|  |  | +					for (int j = 0; j < attachmentList.size(); j++) {
 | 
	
		
			
				|  |  | +						Workattachment attachment = attachmentList.get(j);
 | 
	
		
			
				|  |  | +						if(StringUtils.isNotBlank(attachment.getAttachmentUser())){
 | 
	
		
			
				|  |  | +							attachment.setAttachmentUser(UserUtils.get(attachment.getAttachmentUser()).getName());
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					// TODO 现在限制一条实施记录里面有多个实施文件,万一保留了多个,就不好不好跟列表对应,暂时取第一个文件;
 | 
	
		
			
				|  |  | +					execute.setExeFile(attachmentList.get(0));
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		return executeList;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public WorkFullExecute save(WorkFullExecute workFullExecute, String workFullManageId , String submit ,HttpServletRequest request) {
 | 
	
		
			
				|  |  | +		//(0暂存,1审核中,2已通过,3未通过、4已撤销)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		String id = workFullExecute.getId();
 | 
	
		
			
				|  |  | +		//提交、重新申请,执行保存,撤销不执行保存
 | 
	
		
			
				|  |  | +		if("submit".equals(submit) ||  "reapply".equals(submit)){
 | 
	
		
			
				|  |  | +			//先保存项目实施信息
 | 
	
		
			
				|  |  | +			if(StringUtils.isBlank(workFullExecute.getId())){
 | 
	
		
			
				|  |  | +				workFullExecute.setStatus("0");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//如果是项目负责人,直接"通过"
 | 
	
		
			
				|  |  | +				if(workFullManageService.get(workFullManageId).getHostMaster().contains(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | +					workFullExecute.setStatus("2");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			workFullExecute.setWorkFullManageId(workFullManageId);
 | 
	
		
			
				|  |  | +			workFullExecute.setCompanyId(UserUtils.getSelectCompany().getId());
 | 
	
		
			
				|  |  | +			workFullExecute.setOfficeId(UserUtils.getSelectOffice().getId());
 | 
	
		
			
				|  |  | +			super.save(workFullExecute);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if(StringUtils.isBlank(id)){
 | 
	
		
			
				|  |  | +				List<Workattachment> workAttachments = workFullExecute.getWorkAttachments();
 | 
	
		
			
				|  |  | +				if(workAttachments!=null && workAttachments.size()>0){
 | 
	
		
			
				|  |  | +					for (int i = 0; i < workAttachments.size(); i++) {
 | 
	
		
			
				|  |  | +						Workattachment w = workAttachments.get(i);
 | 
	
		
			
				|  |  | +						if (StringUtils.isNotBlank(w.getUrl()) && !w.getUrl().equals("null")) {
 | 
	
		
			
				|  |  | +							w.setAttachmentUser(UserUtils.getUser().getId());
 | 
	
		
			
				|  |  | +							w.setAttachmentId(workFullExecute.getId());
 | 
	
		
			
				|  |  | +							w.setCompanyId(workFullExecute.getCompanyId());
 | 
	
		
			
				|  |  | +							w.setId("");
 | 
	
		
			
				|  |  | +							//实施文件只有一个,底稿可以多个
 | 
	
		
			
				|  |  | +							if("2".equals(w.getAttachmentFlag())){
 | 
	
		
			
				|  |  | +								delFile(workFullExecute,w.getAttachmentFlag());
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +							workattachmentService.save(w);
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//			//再上传项目实施文件(2)和底稿(3)
 | 
	
		
			
				|  |  | +//			MultiValueMap<String, MultipartFile> multiFileMap = request.getMultiFileMap();
 | 
	
		
			
				|  |  | +//			List<MultipartFile> execute_file = multiFileMap.get("execute_file");
 | 
	
		
			
				|  |  | +//			if(execute_file!=null&&execute_file.size()>0){
 | 
	
		
			
				|  |  | +//				for(int i=0;i<execute_file.size();i++){
 | 
	
		
			
				|  |  | +//					MultipartFile multipartFile = execute_file.get(0);
 | 
	
		
			
				|  |  | +//					if(multipartFile!=null && !multipartFile.isEmpty()&& multipartFile.getSize()>0){
 | 
	
		
			
				|  |  | +//						uploadFile(multipartFile,workFullExecute,"2");
 | 
	
		
			
				|  |  | +//					}
 | 
	
		
			
				|  |  | +//				}
 | 
	
		
			
				|  |  | +//			}
 | 
	
		
			
				|  |  | +//			List<MultipartFile> manuscript_file = multiFileMap.get("manuscript_file");
 | 
	
		
			
				|  |  | +//			if(manuscript_file!=null&&manuscript_file.size()>0){
 | 
	
		
			
				|  |  | +//				for(int i=0;i<manuscript_file.size();i++){
 | 
	
		
			
				|  |  | +//					MultipartFile multipartFile = manuscript_file.get(0);
 | 
	
		
			
				|  |  | +//					if(multipartFile!=null && !multipartFile.isEmpty()&&multipartFile.getSize()>0){
 | 
	
		
			
				|  |  | +//						uploadFile(multipartFile,workFullExecute,"3");
 | 
	
		
			
				|  |  | +//					}
 | 
	
		
			
				|  |  | +//				}
 | 
	
		
			
				|  |  | +//			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//如果是项目负责人,不用审核
 | 
	
		
			
				|  |  | +			if(workFullManageService.get(workFullManageId).getHostMaster().contains(UserUtils.getUser().getId())){
 | 
	
		
			
				|  |  | +				return workFullExecute;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		///新添加数据:先保存,后启动流程;
 | 
	
		
			
				|  |  | +		//重新申请:先保存数据,后执行审核;撤销:不保存,但是执行审核
 | 
	
		
			
				|  |  | +		if("submit".equals(submit)){
 | 
	
		
			
				|  |  | +			Map<String,Object> variables = new HashMap<String,Object>();
 | 
	
		
			
				|  |  | +			startProcess(workFullExecute,variables);
 | 
	
		
			
				|  |  | +		}else if("reapply".equals(submit) || "repeal".equals(submit)){
 | 
	
		
			
				|  |  | +			auditSave(workFullExecute);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return workFullExecute;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public void startProcess(WorkFullExecute workFullExecute, Map<String, Object> variables) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//用来设置启动流程的人员的id,引擎会自动把人员的id保存到activiti:initiator中
 | 
	
		
			
				|  |  | +		identityService.setAuthenticatedUserId(workFullExecute.getCurrentUser().getId());
 | 
	
		
			
				|  |  | +		WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("190aeda1d370481ab80387a71080f93c",officeService.get(workFullExecute.getOfficeId()));
 | 
	
		
			
				|  |  | +		//启动流程
 | 
	
		
			
				|  |  | +		String businessKey = workFullExecute.getId().toString();
 | 
	
		
			
				|  |  | +		String processType = workActivityMenu.getProcessType();
 | 
	
		
			
				|  |  | +		StringBuffer buffer1 = new StringBuffer();
 | 
	
		
			
				|  |  | +		Activity activity = new Activity();
 | 
	
		
			
				|  |  | +		if(StringUtils.isNotBlank(workActivityMenu.getId())){
 | 
	
		
			
				|  |  | +			workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
 | 
	
		
			
				|  |  | +			List<Activity> activities = workActivityMenu.getActivities();
 | 
	
		
			
				|  |  | +			for (Activity a:activities){
 | 
	
		
			
				|  |  | +				//审批任务的第一个人(角色)
 | 
	
		
			
				|  |  | +				if (a.getDelFlag().equals("0") && a.getCount() == 1){
 | 
	
		
			
				|  |  | +					activity = a;
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			buffer1.append(activity.getRole().getEnname());
 | 
	
		
			
				|  |  | +			variables.put("type", workActivityMenu.getProcessType());
 | 
	
		
			
				|  |  | +		}else{
 | 
	
		
			
				|  |  | +			processType= ActUtils.PD_WORKFULLEXECUTE[0];
 | 
	
		
			
				|  |  | +			variables.put("type", "workFullExecute");
 | 
	
		
			
				|  |  | +			Role role = UserUtils.getSelectRole().get(0);
 | 
	
		
			
				|  |  | +			buffer1 = DateUtils.getByEnnme(role.getEnname());
 | 
	
		
			
				|  |  | +			buffer1.append("bmzr");
 | 
	
		
			
				|  |  | +			variables.put("bmzr", buffer1.toString());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		variables.put("businessId",businessKey);
 | 
	
		
			
				|  |  | +		variables.put("title",workFullExecute.getRemarks());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType,businessKey,variables);
 | 
	
		
			
				|  |  | +		workFullExecute.setProcessInstance(processInstance);
 | 
	
		
			
				|  |  | +		workFullExecute.setProcessInstanceId(processInstance.getId());
 | 
	
		
			
				|  |  | +		workFullExecuteDao.updateProcessInstanceId(workFullExecute);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		workFullExecute.setStatus("1");
 | 
	
		
			
				|  |  | +		updateStatus(workFullExecute);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<Activity> list= workActivityMenu.getActivities();
 | 
	
		
			
				|  |  | +		if (list!=null && list.size()!=0){
 | 
	
		
			
				|  |  | +			workActivityProcessService.saveList(list,processInstance.getId());
 | 
	
		
			
				|  |  | +		}else {
 | 
	
		
			
				|  |  | +			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
 | 
	
		
			
				|  |  | +			workActivityProcess.setProcessKey(processType);
 | 
	
		
			
				|  |  | +			workActivityProcess.setCount(1);
 | 
	
		
			
				|  |  | +			workActivityProcess.setProcessInstanceId(processInstance.getId());
 | 
	
		
			
				|  |  | +			workActivityProcess.setIsApproval("0");
 | 
	
		
			
				|  |  | +			workActivityProcess.setActivity(new Activity("c2fd325dab4d47618fa858e5a5334b86"));
 | 
	
		
			
				|  |  | +			workActivityProcessService.save(workActivityProcess);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//发起通知给审批角色或人员
 | 
	
		
			
				|  |  | +		WorkProjectNotify workProjectNotify = new WorkProjectNotify();
 | 
	
		
			
				|  |  | +		workProjectNotify.setTitle("您有新的项目实施待审批");
 | 
	
		
			
				|  |  | +		workProjectNotify.setNotifyId(workFullExecute.getId());
 | 
	
		
			
				|  |  | +		workProjectNotify.setCompanyId(workFullExecute.getCompanyId());
 | 
	
		
			
				|  |  | +		workProjectNotify.setContent("审批任务-项目实施申请");
 | 
	
		
			
				|  |  | +		workProjectNotify.setRemarks("待审批");
 | 
	
		
			
				|  |  | +		workProjectNotify.setType("7");
 | 
	
		
			
				|  |  | +		workProjectNotify.setStatus("0");
 | 
	
		
			
				|  |  | +		workProjectNotify.setNotifyRole("");
 | 
	
		
			
				|  |  | +		workProjectNotify.setUser(new User(""));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if(workActivityMenu!=null&&StringUtils.isNotBlank(workActivityMenu.getId())&&StringUtils.isNotBlank(activity.getId())){
 | 
	
		
			
				|  |  | +			//角色审批
 | 
	
		
			
				|  |  | +			if(StringUtils.isNotBlank(activity.getRole().getEnname())){
 | 
	
		
			
				|  |  | +				workProjectNotify.setNotifyRole(buffer1.toString());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			//人员审批
 | 
	
		
			
				|  |  | +			if(StringUtils.isNotBlank(activity.getUser().getId())){
 | 
	
		
			
				|  |  | +				workProjectNotify.setUser(new User(activity.getUser().getId()));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}else {
 | 
	
		
			
				|  |  | +			workProjectNotify.setNotifyRole(buffer1.toString());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		workProjectNotifyService.save(workProjectNotify);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	private void updateStatus(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		workFullExecuteDao.updateStatus(workFullExecute);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	private void uploadFile(MultipartFile file, WorkFullExecute workFullExecute,String attachmentFlag) {
 | 
	
		
			
				|  |  | +		if(file!=null && !file.isEmpty() && file.getSize()>0){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//后一次上传前先删除前一次上传的文件
 | 
	
		
			
				|  |  | +			delFile(workFullExecute,attachmentFlag);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			OSSClientUtil ossClientUtil = new OSSClientUtil();
 | 
	
		
			
				|  |  | +			String fileName = file.getOriginalFilename();
 | 
	
		
			
				|  |  | +			String fileType = fileName.substring(fileName.lastIndexOf(".")+1);
 | 
	
		
			
				|  |  | +			String url = ossClientUtil.uploadFile2OSS(file,"workFullExecute");
 | 
	
		
			
				|  |  | +			Workattachment workattachment = new Workattachment();
 | 
	
		
			
				|  |  | +			workattachment.setUrl(url);
 | 
	
		
			
				|  |  | +			workattachment.setType(fileType);
 | 
	
		
			
				|  |  | +			workattachment.setAttachmentName(fileName);
 | 
	
		
			
				|  |  | +			workattachment.setAttachmentUser(UserUtils.getUser().getId());
 | 
	
		
			
				|  |  | +			workattachment.setAttachmentId(workFullExecute.getId());
 | 
	
		
			
				|  |  | +			workattachment.setAttachmentFlag(attachmentFlag);
 | 
	
		
			
				|  |  | +			workattachmentService.save(workattachment);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public void delete(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		delFile(workFullExecute,"2");
 | 
	
		
			
				|  |  | +		delFile(workFullExecute,"3");
 | 
	
		
			
				|  |  | +		super.delete(workFullExecute);
 | 
	
		
			
				|  |  | +		//逻辑删除相关的通知记录
 | 
	
		
			
				|  |  | +		WorkProjectNotify notify = new WorkProjectNotify();
 | 
	
		
			
				|  |  | +		notify.setNotifyId(workFullExecute.getId());
 | 
	
		
			
				|  |  | +		workProjectNotifyService.modifyDelflag(notify);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//查询待实施项目列表
 | 
	
		
			
				|  |  | +    public Page<WorkFullManage> findListOfWorkFullManage(Page<WorkFullManage> page, WorkFullManage workFullManage) {
 | 
	
		
			
				|  |  | +		if (StringUtils.isNotBlank(workFullManage.getTotalFullIds())){
 | 
	
		
			
				|  |  | +			workFullManage.setTotalFullIds(","+workFullManage.getTotalFullIds()+",");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		workFullManage.getSqlMap().put("dsf", dataScopeFilterOR(workFullManage.getCurrentUser(), "o", "u","s", MenuStatusEnum.END.getValue()));
 | 
	
		
			
				|  |  | +		workFullManage.setPage(page);
 | 
	
		
			
				|  |  | +		workFullManage.setIsTotal("1");
 | 
	
		
			
				|  |  | +		List<WorkFullManage> list = Lists.newArrayList();
 | 
	
		
			
				|  |  | +		List<WorkFullManage> totals = getListOfWorkFullManage(workFullManage);
 | 
	
		
			
				|  |  | +		List<WorkFullManage> workFullManages = new ArrayList<>();
 | 
	
		
			
				|  |  | +		for (WorkFullManage fullManage:totals){
 | 
	
		
			
				|  |  | +			WorkFullManage wfm = new WorkFullManage();
 | 
	
		
			
				|  |  | +			wfm.setTotalFullId(fullManage.getId());
 | 
	
		
			
				|  |  | +			List<WorkFullManage> workEngineeringProjectLists = getListOfWorkFullManage(wfm);
 | 
	
		
			
				|  |  | +			if (workEngineeringProjectLists!=null && workEngineeringProjectLists.size()!=0){
 | 
	
		
			
				|  |  | +				workFullManages.addAll(workEngineeringProjectLists);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		workFullManages.addAll(totals);
 | 
	
		
			
				|  |  | +		WorkFullManageService.sortList(list,workFullManages,"0",true);
 | 
	
		
			
				|  |  | +		/*List<WorkFullManage> list = Lists.newArrayList();
 | 
	
		
			
				|  |  | +		WorkFullManageService.sortList(list,getListOfWorkFullManage(workFullManage),"0",true);*/
 | 
	
		
			
				|  |  | +		page.setList(list);
 | 
	
		
			
				|  |  | +		return page ;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	private List<WorkFullManage> getListOfWorkFullManage(WorkFullManage workFullManage) {
 | 
	
		
			
				|  |  | +		List<WorkFullManage> workFullManageList = workFullExecuteDao.getListOfWorkFullManage(workFullManage);
 | 
	
		
			
				|  |  | +		if (workFullManageList != null && workFullManageList.size()>0){
 | 
	
		
			
				|  |  | +			for(WorkFullManage w : workFullManageList){
 | 
	
		
			
				|  |  | +				String hostMasterIds = w.getHostMaster();
 | 
	
		
			
				|  |  | +				StringBuilder hostMasterName = new StringBuilder();
 | 
	
		
			
				|  |  | +				String[] idArray = hostMasterIds.split(",");
 | 
	
		
			
				|  |  | +				if(idArray != null && idArray.length>0){
 | 
	
		
			
				|  |  | +					for(int i =0 ;i<idArray.length;i++){
 | 
	
		
			
				|  |  | +						if(StringUtils.isNotBlank(idArray[i])){
 | 
	
		
			
				|  |  | +							User u = UserUtils.get(idArray[i]);
 | 
	
		
			
				|  |  | +							hostMasterName.append(",").append(u.getName());
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if(hostMasterName.length()>1){
 | 
	
		
			
				|  |  | +					w.setHostMasterName(hostMasterName.substring(1));
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return workFullManageList ;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	//获取流程信息
 | 
	
		
			
				|  |  | +	public WorkFullExecute getByProcessInstanceId(String processInstanceId) {
 | 
	
		
			
				|  |  | +		return workFullExecuteDao.getByProcessInstanceId(processInstanceId);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//执行审核操作(0暂存,1审核中,2通过,3未通过,4撤销)
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public String auditSave(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		try {
 | 
	
		
			
				|  |  | +			String userId = UserUtils.getUser().getId();
 | 
	
		
			
				|  |  | +			actTaskService.claim(workFullExecute.getAct().getTaskId(), userId);
 | 
	
		
			
				|  |  | +			// 设置意见
 | 
	
		
			
				|  |  | +			String comment = "";
 | 
	
		
			
				|  |  | +			if(workFullExecute.getStatus().equals("3")){//如果是被驳回状态
 | 
	
		
			
				|  |  | +				comment = ("yes".equals(workFullExecute.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				comment = ("yes".equals(workFullExecute.getAct().getFlag())?"[同意] ":"[驳回] ")+workFullExecute.getAct().getComment();
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			workFullExecute.getAct().setComment(comment);
 | 
	
		
			
				|  |  | +			workFullExecute.setStatus("1");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			System.err.println("comment======"+workFullExecute.getAct().getComment());
 | 
	
		
			
				|  |  | +			WorkProjectNotify workProjectNotify = new WorkProjectNotify();
 | 
	
		
			
				|  |  | +			workProjectNotify.setNotifyId(workFullExecute.getId());
 | 
	
		
			
				|  |  | +			workProjectNotifyService.readByNotifyId(workProjectNotify);//每执行一步审核操作,都把已发出的通知变更为"已读"
 | 
	
		
			
				|  |  | +			// 对不同环节的业务逻辑进行操作
 | 
	
		
			
				|  |  | +			String taskDefKey = workFullExecute.getAct().getTaskDefKey();
 | 
	
		
			
				|  |  | +			System.err.println("taskDefKey======"+taskDefKey);
 | 
	
		
			
				|  |  | +			//业务逻辑对应的条件表达式
 | 
	
		
			
				|  |  | +			String exp = "";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("190aeda1d370481ab80387a71080f93c", officeService.get(workFullExecute.getOfficeId()));
 | 
	
		
			
				|  |  | +			List<Activity> activitieList = activityService.getByProcessInstanceId(workFullExecute.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 selectedProcess = new WorkActivityProcess();
 | 
	
		
			
				|  |  | +			selectedProcess.setProcessInstanceId(workFullExecute.getProcessInstanceId());
 | 
	
		
			
				|  |  | +			List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectedProcess);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//是自定义流程
 | 
	
		
			
				|  |  | +			boolean isCustomProcess = StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals(ActUtils.PD_WORKFULLEXECUTE[0]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			String taskCount = "";
 | 
	
		
			
				|  |  | +			int key = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			List<Activity> activities = workActivityMenu.getActivities();
 | 
	
		
			
				|  |  | +			if (isCustomProcess) {
 | 
	
		
			
				|  |  | +				key = 1;
 | 
	
		
			
				|  |  | +				for (int i =0;i<workActivityProcesses.size();i++){
 | 
	
		
			
				|  |  | +					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
 | 
	
		
			
				|  |  | +					String count = taskDefKey.replace("task","").replace("audit","");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					//重申|撤销 (audit1,2,3... = yes|no)
 | 
	
		
			
				|  |  | +					if(taskDefKey.contains("audit") && (activityProcess.getCount()+"").contains(count)){
 | 
	
		
			
				|  |  | +						taskCount = count ;
 | 
	
		
			
				|  |  | +						exp = "pass";
 | 
	
		
			
				|  |  | +						workActivityProcess.setId("");
 | 
	
		
			
				|  |  | +						workActivityProcess.setCount(0);
 | 
	
		
			
				|  |  | +						if (!"yes".equals(workFullExecute.getAct().getFlag())) {
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("2");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("4");//撤销
 | 
	
		
			
				|  |  | +						}else {
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("1");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("1");//重申
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("项目实施:重新申请");
 | 
	
		
			
				|  |  | +							workProjectNotify.setRemarks("重新申请");//用于在通知页面做审核操作,这一步必须
 | 
	
		
			
				|  |  | +							//对通知的人(角色)的设定在 提交任务里完成
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//中间审批环节
 | 
	
		
			
				|  |  | +					else if ((activityProcess.getCount()+"").contains(count)){
 | 
	
		
			
				|  |  | +						taskCount = count ;
 | 
	
		
			
				|  |  | +						workActivityProcess = activityProcess;
 | 
	
		
			
				|  |  | +						workActivityProcess.setRemarks(comment);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +						if (!workActivityProcess.getIsApproval().equals("0")){
 | 
	
		
			
				|  |  | +							workActivityProcess.setId("");
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						exp = "pass";
 | 
	
		
			
				|  |  | +						if (!"yes".equals(workFullExecute.getAct().getFlag())) {
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("2");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("3");
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("您的项目实施申请被驳回!");
 | 
	
		
			
				|  |  | +							workProjectNotify.setNotifyRole("");
 | 
	
		
			
				|  |  | +							workProjectNotify.setUser(workFullExecute.getCreateBy());
 | 
	
		
			
				|  |  | +							String returnBack = "-1";
 | 
	
		
			
				|  |  | +							for (Activity activity:activities){
 | 
	
		
			
				|  |  | +								if(activity.getCount()==Integer.parseInt(count)){
 | 
	
		
			
				|  |  | +									returnBack = activity.getReturnBack();
 | 
	
		
			
				|  |  | +									break;
 | 
	
		
			
				|  |  | +								}
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +							if (returnBack.equals("0")) {
 | 
	
		
			
				|  |  | +								workActivityProcess.setId("");
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}else {
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("1");
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("项目实施:待审批");
 | 
	
		
			
				|  |  | +							//对通知的人(角色)的设定在 提交任务里完成
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}else {
 | 
	
		
			
				|  |  | +				workActivityMenu.setId(workActivityProcesses.get(0).getId());
 | 
	
		
			
				|  |  | +				workActivityMenu.setProcessType(ActUtils.PD_WORKFULLEXECUTE[0]);
 | 
	
		
			
				|  |  | +				for (int i = 0; i < workActivityProcesses.size(); i++) {
 | 
	
		
			
				|  |  | +					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
 | 
	
		
			
				|  |  | +					String count = activityProcess.getCount() + "";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					if(! activityProcess.getIsApproval().equals("0")){
 | 
	
		
			
				|  |  | +						workActivityProcess.setId("");
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					taskCount = "1" ; // 默认流程只有一个审批环节
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					// 部门负责人审核
 | 
	
		
			
				|  |  | +					if ("audit".equals(taskDefKey) && count.equals("1")){
 | 
	
		
			
				|  |  | +						workActivityProcess.setCount(1); //默认流程里部门负责人是第一个环节
 | 
	
		
			
				|  |  | +						exp = "pass";
 | 
	
		
			
				|  |  | +						if("yes".equals(workFullExecute.getAct().getFlag())){
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("1");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("2");
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("您的项目实施申请已通过");
 | 
	
		
			
				|  |  | +							workProjectNotify.setRemarks("待通知");
 | 
	
		
			
				|  |  | +							workProjectNotify.setNotifyRole("");
 | 
	
		
			
				|  |  | +							workProjectNotify.setUser(workFullExecute.getCreateBy());
 | 
	
		
			
				|  |  | +						}else{
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("2");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("3");//驳回
 | 
	
		
			
				|  |  | +							//跳转页面的所需,这里只能填"重新申请"
 | 
	
		
			
				|  |  | +							workProjectNotify.setRemarks("重新申请");
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("项目实施申请被驳回!");
 | 
	
		
			
				|  |  | +							workProjectNotify.setNotifyRole("");
 | 
	
		
			
				|  |  | +							workProjectNotify.setUser(workFullExecute.getCreateBy());
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//重申|撤销
 | 
	
		
			
				|  |  | +					else if("reapply".equals(taskDefKey) && count.equals("0")){
 | 
	
		
			
				|  |  | +						workActivityProcess.setId("");
 | 
	
		
			
				|  |  | +						workActivityProcess.setCount(0);
 | 
	
		
			
				|  |  | +						exp="pass";
 | 
	
		
			
				|  |  | +						if("yes".equals(workFullExecute.getAct().getFlag())){//重新申请
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("1");
 | 
	
		
			
				|  |  | +							workProjectNotify.setTitle("项目实施重新申请!");
 | 
	
		
			
				|  |  | +							Role role = UserUtils.getSelectRole().get(0);
 | 
	
		
			
				|  |  | +							StringBuffer buffer = DateUtils.getByEnnme(role.getEnname());
 | 
	
		
			
				|  |  | +							buffer.append("bmzr");
 | 
	
		
			
				|  |  | +							workProjectNotify.setNotifyRole(buffer.toString());//给部门负责人再次发送通知
 | 
	
		
			
				|  |  | +							workProjectNotify.setUser(new User(""));//如果是重新申请,就不给创建人发通知,只给部门负责人发通知
 | 
	
		
			
				|  |  | +							workProjectNotify.setRemarks("待审批");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("1");
 | 
	
		
			
				|  |  | +						}else{
 | 
	
		
			
				|  |  | +							workActivityProcess.setIsApproval("2");
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("4");//撤销
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					// 未知环节
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//更新自定义的流程追踪数据
 | 
	
		
			
				|  |  | +			String defaultReapply = "reapply"; //默认流程中的重新申请任务标识
 | 
	
		
			
				|  |  | +			workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,workFullExecute.getProcessInstanceId(),taskDefKey,defaultReapply,workFullExecute.getAct().getFlag(),comment, activities);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 设置意见
 | 
	
		
			
				|  |  | +			workFullExecute.getAct().setComment(comment);
 | 
	
		
			
				|  |  | +			workFullExecute.preUpdate();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 提交流程任务
 | 
	
		
			
				|  |  | +			Map<String, Object> vars = Maps.newHashMap();
 | 
	
		
			
				|  |  | +			vars.put(exp, "yes".equals(workFullExecute.getAct().getFlag()) ?true : false );
 | 
	
		
			
				|  |  | +			System.out.println("vars======"+vars.toString());
 | 
	
		
			
				|  |  | +			// 提交流程任务
 | 
	
		
			
				|  |  | +			actTaskService.complete(workFullExecute.getAct().getTaskId(), workFullExecute.getAct().getProcInsId(), workFullExecute.getAct().getComment(), vars);
 | 
	
		
			
				|  |  | +			boolean state = actTaskService.isProcessEnd(workFullExecute.getAct().getProcInsId());
 | 
	
		
			
				|  |  | +			//state=false流程结束,state=true流程未结束
 | 
	
		
			
				|  |  | +			if (!state){
 | 
	
		
			
				|  |  | +				//A:对于默认流程,流程结束时,审批状态已经设定
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//B:对于自定义流程,在中间环节,只能确定一个驳回状态=3,通过状态和撤销状态需要在这里设置
 | 
	
		
			
				|  |  | +				//终审结束,①可能是"同意=2",②可能是"驳回=3"(选择了"不可撤销"),③可能是"撤销=4"
 | 
	
		
			
				|  |  | +				if(isCustomProcess){
 | 
	
		
			
				|  |  | +					if("yes".equals(workFullExecute.getAct().getFlag())){
 | 
	
		
			
				|  |  | +						workFullExecute.setStatus("2");
 | 
	
		
			
				|  |  | +					}else{
 | 
	
		
			
				|  |  | +						if(! "3".equals(workFullExecute.getStatus()))
 | 
	
		
			
				|  |  | +							workFullExecute.setStatus("4");
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//终审之后,发送通知给创建人
 | 
	
		
			
				|  |  | +				if("2".equals(workFullExecute.getStatus())){
 | 
	
		
			
				|  |  | +					workProjectNotify.setTitle("您的项目实施申请已通过");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				if("3".equals(workFullExecute.getStatus())){
 | 
	
		
			
				|  |  | +					workProjectNotify.setTitle("您的项目实施申请被驳回");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				workProjectNotify.setRemarks("待通知");//用于在通知页面做查看操作,这一步必须
 | 
	
		
			
				|  |  | +				workProjectNotify.setNotifyRole("");
 | 
	
		
			
				|  |  | +				workProjectNotify.setUser(workFullExecute.getCreateBy());
 | 
	
		
			
				|  |  | +			}else{
 | 
	
		
			
				|  |  | +				//尚未到终审,
 | 
	
		
			
				|  |  | +				//workProjectNotify.setRemarks("待审批");//用于在通知页面做审核操作,这一步必须
 | 
	
		
			
				|  |  | +				//如果是自定义流程,则需要先知道下一步(可能是撤销到某一步)的执行人(角色)是谁
 | 
	
		
			
				|  |  | +				if (isCustomProcess) {
 | 
	
		
			
				|  |  | +					String count = taskDefKey.replace("audit","").replace("task","");
 | 
	
		
			
				|  |  | +					Activity activity = new Activity();
 | 
	
		
			
				|  |  | +					////撤销到某一步
 | 
	
		
			
				|  |  | +					if (taskDefKey.contains("audit")) {
 | 
	
		
			
				|  |  | +						if (activities.size() == 1 || count.equals("1")){
 | 
	
		
			
				|  |  | +							activity = activities.get(0);
 | 
	
		
			
				|  |  | +						}else if (activities.size()==Integer.parseInt(count)){
 | 
	
		
			
				|  |  | +							activity = activities.get(activities.size()-1);
 | 
	
		
			
				|  |  | +							String returnBack = activity.getReturnBack();
 | 
	
		
			
				|  |  | +							if (returnBack.equals("1")){
 | 
	
		
			
				|  |  | +								activity = activities.get(Integer.parseInt(count)-2);
 | 
	
		
			
				|  |  | +							}else if (returnBack.equals("2")){
 | 
	
		
			
				|  |  | +								activity = activities.get(0);
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}else {
 | 
	
		
			
				|  |  | +							activity = activities.get(Integer.parseInt(count)-1);
 | 
	
		
			
				|  |  | +							String returnBack = activity.getReturnBack();
 | 
	
		
			
				|  |  | +							if (returnBack.equals("1")){
 | 
	
		
			
				|  |  | +								activity = activities.get(Integer.parseInt(count)-2);
 | 
	
		
			
				|  |  | +							}else if (returnBack.equals("2")){
 | 
	
		
			
				|  |  | +								activity = activities.get(0);
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//中间步骤驳回
 | 
	
		
			
				|  |  | +					else if(!"yes".equals(workFullExecute.getAct().getFlag())){
 | 
	
		
			
				|  |  | +						//驳回之后,创建人可以发起重申|撤销;将通知消息归类到审批列表,这一步必须
 | 
	
		
			
				|  |  | +						//对通知的人(创建人)的设定在前面已完成
 | 
	
		
			
				|  |  | +						workProjectNotify.setRemarks("重新申请");
 | 
	
		
			
				|  |  | +						activity = new Activity();//驳回后需将id置空
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//中间某步骤同意
 | 
	
		
			
				|  |  | +					else {
 | 
	
		
			
				|  |  | +						//得到下一步要执行的activity
 | 
	
		
			
				|  |  | +						activity = activities.get(Integer.parseInt(count));
 | 
	
		
			
				|  |  | +						workProjectNotify.setRemarks("待审批");
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//发送审批消息给下一步的人(角色)
 | 
	
		
			
				|  |  | +					if(StringUtils.isNotBlank(activity.getId())){//在驳回时不走这一步,判断id为必须
 | 
	
		
			
				|  |  | +						workProjectNotify.setUser(activity.getUser());
 | 
	
		
			
				|  |  | +						workProjectNotify.setNotifyRole(activity.getRole().getEnname());
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				//如果是默认流程,
 | 
	
		
			
				|  |  | +				else{
 | 
	
		
			
				|  |  | +					//下一步的执行人(角色)已在前面设置
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			workProjectNotify.setCompanyId(workFullExecute.getCompanyId());
 | 
	
		
			
				|  |  | +			workProjectNotify.setContent(workFullExecute.getAct().getComment());
 | 
	
		
			
				|  |  | +			workProjectNotify.setType("7");
 | 
	
		
			
				|  |  | +			workProjectNotify.setStatus("0");
 | 
	
		
			
				|  |  | +			//创建人如果做了撤销操作,无需发送通知
 | 
	
		
			
				|  |  | +			if (!workFullExecute.getStatus().equals("4")) {
 | 
	
		
			
				|  |  | +				workProjectNotifyService.save(workProjectNotify);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			//更新审核状态
 | 
	
		
			
				|  |  | +			workFullExecuteDao.updateStatus(workFullExecute);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			System.err.println("项目实施--审核步骤正常");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			return "审核执行成功";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}catch (ActivitiObjectNotFoundException e){
 | 
	
		
			
				|  |  | +			e.printStackTrace();
 | 
	
		
			
				|  |  | +			System.err.println("项目实施--重复审批");
 | 
	
		
			
				|  |  | +			logger.error("ActivitiObjectNotFoundException -- "+e);
 | 
	
		
			
				|  |  | +			return "流程已审批,不能重新审批!";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		catch (Exception e) {
 | 
	
		
			
				|  |  | +			e.printStackTrace();
 | 
	
		
			
				|  |  | +			System.err.println("项目实施--审核步骤异常");
 | 
	
		
			
				|  |  | +			logger.error("Exception e:"+e);
 | 
	
		
			
				|  |  | +			return "审核执行失败!!";
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public int updateWorkFullManageStatus(WorkFullExecute workFullExecute) {
 | 
	
		
			
				|  |  | +		List<WorkFullExecute> workFullExecuteList = findListBelongtoWorkfullmanage(workFullExecute);
 | 
	
		
			
				|  |  | +		int flag = 0 ;
 | 
	
		
			
				|  |  | +		if(workFullExecuteList != null && workFullExecuteList.size()>0){
 | 
	
		
			
				|  |  | +			for(WorkFullExecute w : workFullExecuteList){
 | 
	
		
			
				|  |  | +				if(StringUtils.isNotBlank(w.getProcessInstanceId())){
 | 
	
		
			
				|  |  | +					String processInstanceId = w.getProcessInstanceId();
 | 
	
		
			
				|  |  | +					ProcessInstance processInstance = actTaskService.getProcIns(processInstanceId);
 | 
	
		
			
				|  |  | +					if(processInstance!=null){
 | 
	
		
			
				|  |  | +						flag++;
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if(flag==0){
 | 
	
		
			
				|  |  | +			updateStatusOfWorkFullManage(workFullExecute.getWorkFullManageId());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return flag;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	private void updateStatusOfWorkFullManage(String workFullManageId) {
 | 
	
		
			
				|  |  | +		String updateBy = "";
 | 
	
		
			
				|  |  | +		User user = UserUtils.getUser();
 | 
	
		
			
				|  |  | +		if(StringUtils.isNotBlank(user.getId())){
 | 
	
		
			
				|  |  | +			updateBy = user.getId();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		Date updateDate = new Date();
 | 
	
		
			
				|  |  | +		Map<String,Object> map = new HashMap<>();
 | 
	
		
			
				|  |  | +		map.put("updateBy",updateBy);
 | 
	
		
			
				|  |  | +		map.put("updateDate",updateDate);
 | 
	
		
			
				|  |  | +		map.put("id",workFullManageId);
 | 
	
		
			
				|  |  | +		map.put("fullProjectStatus","4");
 | 
	
		
			
				|  |  | +		workFullExecuteDao.updateStatusOfWorkFullManage(map);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//删除实施文件或底稿
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public void delFile(WorkFullExecute workFullExecute, String attachmentFlag) {
 | 
	
		
			
				|  |  | +		Workattachment workattachment = workattachmentService.get(workFullExecute.getRemarks());
 | 
	
		
			
				|  |  | +		if(workattachment != null){
 | 
	
		
			
				|  |  | +			doDelFile(workattachment);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	@Transactional(readOnly = false)
 | 
	
		
			
				|  |  | +	public void doDelFile(Workattachment workattachment){
 | 
	
		
			
				|  |  | +		workattachmentService.deleteFileFromAliyun(workattachment,workattachment==null?"":workattachment.getUrl());
 | 
	
		
			
				|  |  | +		workattachmentService.delete(workattachment);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |