Procházet zdrojové kódy

[bug-4466]体系运行记录盒:人员考核模块的完成时间改成编制时间

gaozl před 11 měsíci
rodič
revize
593d692a72

+ 570 - 528
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/domain/BpmInst.java

@@ -1,528 +1,570 @@
-package com.lc.ibps.bpmn.domain;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.lc.ibps.api.base.constants.CacheKeyConstants;
-import com.lc.ibps.base.core.util.AppUtil;
-import com.lc.ibps.base.core.util.BeanUtils;
-import com.lc.ibps.base.core.util.string.StringUtil;
-import com.lc.ibps.base.framework.domain.AbstractDomain;
-import com.lc.ibps.base.framework.persistence.dao.IDao;
-import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
-import com.lc.ibps.bpmn.api.constant.BpmOperTypeEnum;
-import com.lc.ibps.bpmn.api.constant.ProcInstStatus;
-import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
-import com.lc.ibps.bpmn.builder.BpmOperLogBuilder;
-import com.lc.ibps.bpmn.persistence.dao.BpmInstDao;
-import com.lc.ibps.bpmn.persistence.dao.BpmInstQueryDao;
-import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
-import com.lc.ibps.bpmn.persistence.entity.BpmOperLogPo;
-import com.lc.ibps.bpmn.repository.BpmInstRepository;
-import com.lc.ibps.bpmn.repository.BpmTaskChangeRepository;
-import com.lc.ibps.bpmn.utils.BpmUtil;
-
-/**
- * 流程实例
 领域对象实体
- *
- *<pre> 
- * 开发公司:广州流辰信息技术有限公司
- * 开发人员:luodx
- * 邮箱地址:1198506318@qq.com
- * 创建时间:2016-12-13 09:25:42
- *</pre>
- */
-@SuppressWarnings("serial")
-@Transactional
-@Scope("prototype")
-public class BpmInst extends AbstractDomain<String, BpmInstPo> {
-	
-	private BpmInstDao bpmInstDao;
-	private BpmInstQueryDao bpmInstQueryDao;
-	private BpmInstRepository bpmInstRepository;
-	private BpmTaskChangeRepository bpmTaskChangeRepository;
-	private ActExecution actExecutionDomain;
-	private BpmApprove bpmApproveDomain;
-	private BpmTaskAssign bpmTaskAssignDomain;
-	private BpmTask bpmTaskDomain;
-	private BpmTaskSign bpmTaskSignDomain;
-	
-	private BpmInstDao bpmInstDao() {
-		if(bpmInstDao==null) {
-			bpmInstDao = AppUtil.getBean(BpmInstDao.class);
-		}
-		return bpmInstDao;
-	}
-
-	private BpmInstQueryDao bpmInstQueryDao() {
-		if(bpmInstQueryDao==null) {
-			bpmInstQueryDao = AppUtil.getBean(BpmInstQueryDao.class);
-		}
-		return bpmInstQueryDao;
-	}
-
-	private BpmInstRepository bpmInstRepository() {
-		if(bpmInstRepository==null) {
-			bpmInstRepository = AppUtil.getBean(BpmInstRepository.class);
-		}
-		return bpmInstRepository;
-	}
-
-	private BpmTaskChangeRepository bpmTaskChangeRepository() {
-		if(bpmTaskChangeRepository==null) {
-			bpmTaskChangeRepository = AppUtil.getBean(BpmTaskChangeRepository.class);
-		}
-		return bpmTaskChangeRepository;
-	}
-
-	private ActExecution actExecutionDomain() {
-		if(actExecutionDomain==null) {
-			actExecutionDomain = AppUtil.getBean(ActExecution.class);
-		}
-		return actExecutionDomain;
-	}
-
-	private BpmApprove bpmApproveDomain() {
-		if(bpmApproveDomain==null) {
-			bpmApproveDomain = AppUtil.getBean(BpmApprove.class);
-		}
-		return bpmApproveDomain;
-	}
-
-	private BpmTaskAssign bpmTaskAssignDomain() {
-		if(bpmTaskAssignDomain==null) {
-			bpmTaskAssignDomain = AppUtil.getBean(BpmTaskAssign.class);
-		}
-		return bpmTaskAssignDomain;
-	}
-
-	private BpmTask bpmTaskDomain() {
-		if(bpmTaskDomain==null) {
-			bpmTaskDomain = AppUtil.getBean(BpmTask.class);
-		}
-		return bpmTaskDomain;
-	}
-
-	private BpmTaskSign bpmTaskSignDomain() {
-		if(bpmTaskSignDomain==null) {
-			bpmTaskSignDomain = AppUtil.getBean(BpmTaskSign.class);
-		}
-		return bpmTaskSignDomain;
-	}
-
-	@Override
-	protected void init() {
-	}
-	
-	@Override
-	protected IDao<String, BpmInstPo> getInternalDao() {
-		return bpmInstDao();
-	}
-	
-	@Override
-	protected IQueryDao<String, BpmInstPo> getInternalQueryDao() {
-		return bpmInstQueryDao();
-	}
-	
-	@Override
-	public String getInternalCacheName() {
-		return CacheKeyConstants.Region.REGION_IBPS_BPM_RUNNING;
-	}
-	
-	public void remove() {
-		String processInstId = getId();
-		remove(processInstId);
-	}
-
-	/**
-	 * 根据实例id删除实例数据,包含任务、act(变量、任务、人员等)、人员指派
-	 *
-	 * @param processInstId 
-	 */
-	public void remove(String processInstId) {
-		BpmInstPo inst = bpmInstRepository().get(processInstId);
-		// 草稿
-		if (ProcInstStatus.STATUS_DRAFT.getKey().equals(inst.getStatus())) {
-			super.delete(processInstId);
-		}
-		else {
-			/*
-			 * 父级
-			 * 当前
-			 * 子集
-			 */
-			IBpmProcInst topInstance = bpmInstRepository().getTopBpmProcInst(processInstId);
-			String topInstId = topInstance.getId();
-			List<String> instIdList = bpmInstRepository().findIdsByParentId(topInstId, true);
-			
-			List<String> bpmnInstList = bpmInstQueryDao().findInstIdsByIds(instIdList);
-			if(BeanUtils.isEmpty(bpmnInstList)){
-				throw new RuntimeException("流程实例数据查找数据失败!数据=" + Arrays.toString(instIdList.toArray()));
-			}
-		
-			// 删除
-			removeCascade(instIdList);
-			
-			// 删除流程数据。
-			actExecutionDomain().delByInstList(bpmnInstList);
-			
-			// 删除关联的实例。
-			String topBpmnInstId = topInstance.getBpmnInstId();
-			actExecutionDomain().delete(topBpmnInstId);
-		}
-	}
-	
-	/**
-	 * 删除任务数据 删除任务人员数据 删除实例数据 删除抄送数据 状态数据 TASK_READ BPM_TASK_SIGNDATA
-	 * BPM_TASK_TURN
-	 * 
-	 * @param instList
-	 *            void
-	 * @throws Exception 
-	 */
-	private void removeCascade(List<String> instList) {
-		// 删除意见数据
-		bpmApproveDomain().delByInstList(instList);
-		// 删除候选人数据
-		bpmTaskAssignDomain().delByInst(instList);
-		// 删除任务
-		bpmTaskDomain().delByInst(instList);
-		// 删除会签数据
-		bpmTaskSignDomain().delByInst(instList);
-		// 删除转办代理信息
-		BpmTaskChange bpmTaskChangeDomain = bpmTaskChangeRepository().newInstance();
-		bpmTaskChangeDomain.delByInst(instList);
-		//TODO 删除执行信息
-
-		for (String id : instList) {
-			super.delete(id);
-		}
-	}
-	
-	/**
-	 * 更新时如果状态为结束或者手工结束,则删除运行实例数据,更新历史数据。
-	 */
-	@Override
-	protected void updateInternal() {
-		BpmInstPo entity = getData();
-		String status = entity.getStatus();
-		// 流程结束时,删除当前实例数据并归档。
-		if (ProcInstStatus.STATUS_END.getKey().equals(status)
-				|| ProcInstStatus.STATUS_MANUAL_END.getKey().equals(status)) {
-			super.updateInternal();
-		} else {
-			super.updateInternal();
-		}
-	}
-	
-	/**
-	 * 根据实例id修改实例状态
-	 *
-	 * @param procInstId
-	 * @param status 
-	 */
-	public void updateStatusByBpmnInstanceId(String procInstId, String status, String currUserId, String cause) {
-		BpmInstPo po = bpmInstRepository().getByInstId(procInstId);
-		if(BeanUtils.isEmpty(po)) {
-			return;
-		}
-		update("updateStatusByInstanceId", po.getId(), b().a("bpmnInstId",procInstId).a("status",status).p());
-		saveLog(status, currUserId, cause, procInstId);
-	}
-
-	/**
-	 * 修改实例状态,instid使用newInstance注入
-	 *
-	 * @param status 
-	 */
-	public void updateStatusByInstanceId(String status, String currUserId, String cause) {
-		String processInstanceId = getId();
-		updateStatusById(processInstanceId, status);
-		saveLog(status, currUserId, cause, processInstanceId);
-	}
-	
-	private void updateStatusById(String id, String status) {
-		BpmInstPo po = bpmInstRepository().get(id);
-		if(BeanUtils.isEmpty(po)) {
-			return;
-		}
-		update("updateStatusById", id, b().a("id", id).a("status", status).p());
-	}
-	
-	/**
-	 * 修改实例状态
-	 *
-	 * @param status 
-	 * @since 2.8.1
-	 */
-	public void updateStatusByInstanceIds(List<String> instList, String status, String currUserId, String cause) {
-		if(BeanUtils.isEmpty(instList)) {
-			return;
-		}
-		
-		for(String processInstanceId : instList) {
-			updateStatusById(processInstanceId, status);
-			
-			saveLog(status, currUserId, cause, processInstanceId);
-		}
-	}
-
-	private void saveLog(String status, String currUserId, String cause, String processInstanceId) {
-		BpmOperTypeEnum operType = null;
-		if(ProcInstStatus.STATUS_SUSPEND.getKey().equals(status)) 
-		{
-			operType = BpmOperTypeEnum.SUSPEND;
-		}
-		else if(ProcInstStatus.STATUS_RUNNING.getKey().equals(status)) 
-		{
-			operType = BpmOperTypeEnum.RECOVER;
-		}
-		
-		if(null != operType)
-		{
-			saveInstanceLog(processInstanceId, operType, currUserId, cause);
-		}
-	}
-	
-	private void saveInstanceLog(String bpmnInstanceId, BpmOperTypeEnum operType, String curUser, String cause){
-		BpmInstPo instance = bpmInstRepository().getByInstId(bpmnInstanceId);
-		// 流程操作日志
-		BpmOperLogPo po = BpmOperLogBuilder.build(instance, operType, curUser);
-		if(StringUtil.isNotBlank(cause))
-		{
-			po.setContent(po.getContent()+"(" + cause + ")");
-		}
-		
-		BpmUtil.createBpmOperLog(po);
-	}
-	
-	private List<String> getIds(List<BpmInstPo> list){
-		List<String> ids = new ArrayList<String>();
-		for (BpmInstPo po : list) {
-			ids.add(po.getId());
-		}
-		return ids;
-	}
-	
-	/**
-	 * 根据流程定义key修改实例禁止状态
-	 *
-	 * @param defKey
-	 * @param isForbidden 
-	 */
-	public void updForbiddenByDefKey(String defKey, Integer isForbidden) {
-		List<BpmInstPo> list = bpmInstRepository().findByBpmnDefKey(defKey);
-		update("updForbiddenByDefKey", getIds(list), b().a("isForbidden",isForbidden).a("defKey",defKey).p());
-	}
-
-	/**
-	 * 修改实例禁止状态,instid使用newIntance注入
-	 *
-	 * @param isForbidden 
-	 */
-	public void updForbiddenByInstId(Integer isForbidden) {
-		String instId = getId();
-		update("updForbiddenByInstId", instId, b().a("isForbidden",isForbidden).a("id",instId).p());
-	}
-
-	/**
-	 * 清除测试数据
-	 *
-	 * @param defKey 
-	 */
-	public void removeTestInstByDefKey(String defKey) {
-		List<BpmInstPo> list = bpmInstRepository().findByDefKeyFormal(defKey, IBpmProcInst.FORMAL_NO);
-		for (BpmInstPo instance : list) {
-			remove(instance.getId());
-		}
-	}
-	
-//	/**
-//	 * 从追回节点取得后续任务节点对应的任务。
-//	 * 
-//	 * <pre>
-//	 * 1.根据流程实例获取相关的所有任务。
-//	 * 2.取得从追回节点之后的任务节点。
-//	 * 3.遍历后续的任务节点,取得这些节点对应的任务。
-//	 * 4.构建一个Map,map中键为节点ID,值为节点任务列表。
-//	 * 5.如果map为空表示后续没有任务了,不可以追回。
-//	 * 6.如果一个节点对应多个任务,表示这个是一个多实例任务。
-//	 * </pre>
-//	 * 
-//	 * @param bpmTasks
-//	 * @param bpmNodeDef
-//	 * @return ResultMessage
-//	 */
-//	@SuppressWarnings("unused")
-//	private ResultMessage isNextTask(List<DefaultBpmTaskPo> bpmTasks, BpmNodeDef bpmNodeDef) {
-//		ResultMessage message = ResultMessage.getSuccess();
-//		// 取得当前节点后的任务节点。
-//		List<BpmNodeDef> nodeDefs = bpmNodeDef.getInnerOutcomeTaskNodes(true);
-//
-//		// List<DefaultBpmTask> list=new ArrayList<DefaultBpmTask>();
-//		Map<String, List<DefaultBpmTaskPo>> taskMap = new HashMap<String, List<DefaultBpmTaskPo>>();
-//
-//		for (BpmNodeDef nodeDef : nodeDefs) {
-//
-//			for (DefaultBpmTaskPo bpmTask : bpmTasks) {
-//				String nodeId = bpmTask.getNodeId();
-//
-//				if (!nodeDef.getNodeId().equals(nodeId)) {
-//					continue;
-//				}
-//
-//				if (taskMap.containsKey(nodeId)) {
-//					List<DefaultBpmTaskPo> list = taskMap.get(nodeId);
-//					list.add(bpmTask);
-//				} else {
-//					List<DefaultBpmTaskPo> list = new ArrayList<DefaultBpmTaskPo>();
-//					list.add(bpmTask);
-//					taskMap.put(nodeId, list);
-//				}
-//				break;
-//			}
-//		}
-//		if (taskMap.size() == 0) {
-//			message.setResult(ResultMessage.ERROR);
-//			message.setMessage("下一步任务已经完成不能撤销");
-//			return message;
-//		}
-//
-//		message.addVariable("taskMap", taskMap);
-//
-//		return message;
-//	}
-//
-//	@SuppressWarnings("unused")
-//	private ResultMessage checkInstance(IBpmProcInst processInstance) {
-//		ResultMessage message = ResultMessage.getSuccess();
-//		String status = processInstance.getStatus();
-//		if (ProcInstStatus.STATUS_RUNNING.getKey().equals(status)) {
-//			return message;
-//		}
-//		message.setResult(ResultMessage.ERROR);
-//		String msg = "";
-//		if (ProcInstStatus.STATUS_REJECT.getKey().equals(status)) {
-//			msg = "流程被驳回";
-//		} else if (ProcInstStatus.STATUS_REJECT_TOSTART.getKey().equals(status)) {
-//			msg = "流程被驳回到发起人";
-//		} else if (ProcInstStatus.STATUS_END.getKey().equals(status)) {
-//			msg = "流程实例已结束";
-//		} else if (ProcInstStatus.STATUS_END.getKey().equals(status)) {
-//			msg = "流程实例被人工终止";
-//		} else if (ProcInstStatus.STATUS_DRAFT.getKey().equals(status)) {
-//			msg = "流程实例为草稿状态";
-//		} else if (ProcInstStatus.STATUS_REVOKE.getKey().equals(status)) {
-//			msg = "流程实例为撤销状态";
-//		} else if (ProcInstStatus.STATUS_REVOKE_TOSTART.getKey().equals(status)) {
-//			msg = "流程实例为撤销状态";
-//		}
-//		message.setMessage(msg);
-//		return message;
-//	}
-//	
-//	/**1=请先设置当前执行人!
-//	 * 2=发起节点后有多个节点!
-//	 * 3=流程已处于第一个节点!
-//	 * 4=当前执行人和流程发起人不是同一个人!
-//	 * 5=任务已在发起节点,不能再撤销!
-//	 * 0=驳回成功!
-//	 * @param instanceId
-//	 * @param currentUser
-//	 * @return
-//	 */
-//	public Integer canRevokeToStart(String instanceId, User currentUser) {
-//		IBpmProcInst instance = bpmInstRepository.get(instanceId);
-//		String defId = instance.getProcDefId();
-//		List<BpmNodeDef> nodeDefs = bpmDefinitionAccessor.getStartNodes(defId);
-//
-//		if (currentUser == null) {
-//			return 1;
-//		}
-//
-//		if (nodeDefs.size() > 1) {
-//			return 2;
-//		}
-//
-//		String status = instance.getStatus();
-//		// 流程状态。
-//		if (ProcessInstanceStatus.STATUS_REVOKE_TOSTART.getKey().equals(status)
-//				|| ProcessInstanceStatus.STATUS_BACK_TOSTART.getKey().equals(status)) {
-//			return 3;
-//		}
-//
-//		if (!currentUser.getUserId().equals(instance.getCreateBy())) {
-//			return 4;
-//		}
-//		// 验证任务是否已经在发起节点。
-//		boolean rtn = validTask(instance.getBpmnInstId(), nodeDefs.get(0));
-//		if (!rtn) {
-//			return 5;
-//		}
-//
-//		return 0;
-//	}
-//	
-//	private boolean validTask(String bpmnInstId, BpmNodeDef nodeDef) {
-//		String nodeId = nodeDef.getNodeId();
-//		List<ActTaskPo> list = actTaskQueryDao.getByInstId(bpmnInstId);
-//
-//		for (ActTaskPo task : list) {
-//			if (nodeId.equals(task.getTaskDefKey())) {
-//				return false;
-//			}
-//		}
-//		return true;
-//	}
-	
-	/**
-	 * 
-	 * 批量删除流程实例
-	 *
-	 * @param ids
-	 */
-	public void removeByIds(String[] ids){
-		if(BeanUtils.isNotEmpty(ids)){
-			for(String id : ids){
-				IBpmProcInst topInstance = bpmInstRepository().getTopBpmProcInst(id);
-				String topInstId = topInstance.getId();
-				List<String> instIdList = bpmInstRepository().findIdsByParentId(topInstId, true);
-				// 删除流程数据
-				List<String> bpmnInstList = bpmInstRepository().findInstIdsByIds(instIdList);
-				actExecutionDomain().delByInstList(bpmnInstList);
-				// 删除关联的实例
-				String topBpmnInstId = topInstance.getBpmnInstId();
-				actExecutionDomain().delete(topBpmnInstId);
-				// 删除
-				removeCascade(instIdList);
-			}
-		}
-	}
-
-	/**
-	 * 流程实例归档
-	 *
-	 * @param procInstId 
-	 */
-	public void createHistory(String procInstId) {
-		BpmInstPo po = bpmInstRepository().get(procInstId);
-		if(BeanUtils.isNotEmpty(po)) {
-			bpmInstDao().createHistory(po);
-		}
-	}	
-	
-	public void update(BpmInstPo po){
-		setData(po);
-		update();
-	}
-	
-	public void updateTypeIdByDefId(String typeId, List<String> defIds) {
-		List<BpmInstPo> list = bpmInstRepository().findByDefId(defIds);
-		List<String> ids = getIds(list);
-		update("updateTypeIdByDefId", ids, b().a("typeId",typeId).a("defIds",defIds).p());
-	}
-}
+package com.lc.ibps.bpmn.domain;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import com.lc.ibps.base.bo.persistence.entity.BoDefPo;
+import com.lc.ibps.base.bo.persistence.entity.BoTablePo;
+import com.lc.ibps.base.db.mybatis.CommonDao;
+import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.form.form.persistence.entity.FormBoPo;
+import com.lc.ibps.form.form.persistence.entity.FormDefPo;
+import org.springframework.context.annotation.Scope;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.lc.ibps.api.base.constants.CacheKeyConstants;
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.core.util.string.StringUtil;
+import com.lc.ibps.base.framework.domain.AbstractDomain;
+import com.lc.ibps.base.framework.persistence.dao.IDao;
+import com.lc.ibps.base.framework.persistence.dao.IQueryDao;
+import com.lc.ibps.bpmn.api.constant.BpmOperTypeEnum;
+import com.lc.ibps.bpmn.api.constant.ProcInstStatus;
+import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
+import com.lc.ibps.bpmn.builder.BpmOperLogBuilder;
+import com.lc.ibps.bpmn.persistence.dao.BpmInstDao;
+import com.lc.ibps.bpmn.persistence.dao.BpmInstQueryDao;
+import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
+import com.lc.ibps.bpmn.persistence.entity.BpmOperLogPo;
+import com.lc.ibps.bpmn.repository.BpmInstRepository;
+import com.lc.ibps.bpmn.repository.BpmTaskChangeRepository;
+import com.lc.ibps.bpmn.utils.BpmUtil;
+
+import javax.annotation.Resource;
+
+/**
+ * 流程实例
+ 领域对象实体
+ *
+ *<pre> 
+ * 开发公司:广州流辰信息技术有限公司
+ * 开发人员:luodx
+ * 邮箱地址:1198506318@qq.com
+ * 创建时间:2016-12-13 09:25:42
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@Transactional
+@Scope("prototype")
+public class BpmInst extends AbstractDomain<String, BpmInstPo> {
+	
+	private BpmInstDao bpmInstDao;
+	private BpmInstQueryDao bpmInstQueryDao;
+	private BpmInstRepository bpmInstRepository;
+	private BpmTaskChangeRepository bpmTaskChangeRepository;
+	private ActExecution actExecutionDomain;
+	private BpmApprove bpmApproveDomain;
+	private BpmTaskAssign bpmTaskAssignDomain;
+	private BpmTask bpmTaskDomain;
+	private BpmTaskSign bpmTaskSignDomain;
+
+
+	private ICommonDao commonDao;
+
+	private ICommonDao commonDao(){
+		if(commonDao == null){
+			commonDao = AppUtil.getBean(ICommonDao.class);
+		}
+		return commonDao;
+	}
+	
+	private BpmInstDao bpmInstDao() {
+		if(bpmInstDao==null) {
+			bpmInstDao = AppUtil.getBean(BpmInstDao.class);
+		}
+		return bpmInstDao;
+	}
+
+	private BpmInstQueryDao bpmInstQueryDao() {
+		if(bpmInstQueryDao==null) {
+			bpmInstQueryDao = AppUtil.getBean(BpmInstQueryDao.class);
+		}
+		return bpmInstQueryDao;
+	}
+
+	private BpmInstRepository bpmInstRepository() {
+		if(bpmInstRepository==null) {
+			bpmInstRepository = AppUtil.getBean(BpmInstRepository.class);
+		}
+		return bpmInstRepository;
+	}
+
+	private BpmTaskChangeRepository bpmTaskChangeRepository() {
+		if(bpmTaskChangeRepository==null) {
+			bpmTaskChangeRepository = AppUtil.getBean(BpmTaskChangeRepository.class);
+		}
+		return bpmTaskChangeRepository;
+	}
+
+	private ActExecution actExecutionDomain() {
+		if(actExecutionDomain==null) {
+			actExecutionDomain = AppUtil.getBean(ActExecution.class);
+		}
+		return actExecutionDomain;
+	}
+
+	private BpmApprove bpmApproveDomain() {
+		if(bpmApproveDomain==null) {
+			bpmApproveDomain = AppUtil.getBean(BpmApprove.class);
+		}
+		return bpmApproveDomain;
+	}
+
+	private BpmTaskAssign bpmTaskAssignDomain() {
+		if(bpmTaskAssignDomain==null) {
+			bpmTaskAssignDomain = AppUtil.getBean(BpmTaskAssign.class);
+		}
+		return bpmTaskAssignDomain;
+	}
+
+	private BpmTask bpmTaskDomain() {
+		if(bpmTaskDomain==null) {
+			bpmTaskDomain = AppUtil.getBean(BpmTask.class);
+		}
+		return bpmTaskDomain;
+	}
+
+	private BpmTaskSign bpmTaskSignDomain() {
+		if(bpmTaskSignDomain==null) {
+			bpmTaskSignDomain = AppUtil.getBean(BpmTaskSign.class);
+		}
+		return bpmTaskSignDomain;
+	}
+
+	@Override
+	protected void init() {
+	}
+	
+	@Override
+	protected IDao<String, BpmInstPo> getInternalDao() {
+		return bpmInstDao();
+	}
+	
+	@Override
+	protected IQueryDao<String, BpmInstPo> getInternalQueryDao() {
+		return bpmInstQueryDao();
+	}
+	
+	@Override
+	public String getInternalCacheName() {
+		return CacheKeyConstants.Region.REGION_IBPS_BPM_RUNNING;
+	}
+	
+	public void remove() {
+		String processInstId = getId();
+		remove(processInstId);
+	}
+
+	/**
+	 * 根据实例id删除实例数据,包含任务、act(变量、任务、人员等)、人员指派
+	 *
+	 * @param processInstId 
+	 */
+	public void remove(String processInstId) {
+		BpmInstPo inst = bpmInstRepository().get(processInstId);
+		// 草稿
+		if (ProcInstStatus.STATUS_DRAFT.getKey().equals(inst.getStatus())) {
+			super.delete(processInstId);
+		}
+		else {
+			/*
+			 * 父级
+			 * 当前
+			 * 子集
+			 */
+			IBpmProcInst topInstance = bpmInstRepository().getTopBpmProcInst(processInstId);
+			String topInstId = topInstance.getId();
+			List<String> instIdList = bpmInstRepository().findIdsByParentId(topInstId, true);
+			
+			List<String> bpmnInstList = bpmInstQueryDao().findInstIdsByIds(instIdList);
+			if(BeanUtils.isEmpty(bpmnInstList)){
+				throw new RuntimeException("流程实例数据查找数据失败!数据=" + Arrays.toString(instIdList.toArray()));
+			}
+		
+			// 删除
+			removeCascade(instIdList);
+			
+			// 删除流程数据。
+			actExecutionDomain().delByInstList(bpmnInstList);
+			
+			// 删除关联的实例。
+			String topBpmnInstId = topInstance.getBpmnInstId();
+			actExecutionDomain().delete(topBpmnInstId);
+		}
+	}
+	
+	/**
+	 * 删除任务数据 删除任务人员数据 删除实例数据 删除抄送数据 状态数据 TASK_READ BPM_TASK_SIGNDATA
+	 * BPM_TASK_TURN
+	 * 
+	 * @param instList
+	 *            void
+	 * @throws Exception 
+	 */
+	private void removeCascade(List<String> instList) {
+		// 删除意见数据
+		bpmApproveDomain().delByInstList(instList);
+		// 删除候选人数据
+		bpmTaskAssignDomain().delByInst(instList);
+		// 删除任务
+		bpmTaskDomain().delByInst(instList);
+		// 删除会签数据
+		bpmTaskSignDomain().delByInst(instList);
+		// 删除转办代理信息
+		BpmTaskChange bpmTaskChangeDomain = bpmTaskChangeRepository().newInstance();
+		bpmTaskChangeDomain.delByInst(instList);
+		//TODO 删除执行信息
+
+		for (String id : instList) {
+			super.delete(id);
+		}
+	}
+	
+	/**
+	 * 更新时如果状态为结束或者手工结束,则删除运行实例数据,更新历史数据。
+	 */
+	@Override
+	protected void updateInternal() {
+		BpmInstPo entity = getData();
+		String status = entity.getStatus();
+		// 流程结束时,删除当前实例数据并归档。
+		if (ProcInstStatus.STATUS_END.getKey().equals(status)
+				|| ProcInstStatus.STATUS_MANUAL_END.getKey().equals(status)) {
+			super.updateInternal();
+		} else {
+			super.updateInternal();
+		}
+	}
+	
+	/**
+	 * 根据实例id修改实例状态
+	 *
+	 * @param procInstId
+	 * @param status 
+	 */
+	public void updateStatusByBpmnInstanceId(String procInstId, String status, String currUserId, String cause) {
+		BpmInstPo po = bpmInstRepository().getByInstId(procInstId);
+		if(BeanUtils.isEmpty(po)) {
+			return;
+		}
+		update("updateStatusByInstanceId", po.getId(), b().a("bpmnInstId",procInstId).a("status",status).p());
+		saveLog(status, currUserId, cause, procInstId);
+	}
+
+	/**
+	 * 修改实例状态,instid使用newInstance注入
+	 *
+	 * @param status 
+	 */
+	public void updateStatusByInstanceId(String status, String currUserId, String cause) {
+		String processInstanceId = getId();
+		updateStatusById(processInstanceId, status);
+		saveLog(status, currUserId, cause, processInstanceId);
+	}
+	
+	private void updateStatusById(String id, String status) {
+		BpmInstPo po = bpmInstRepository().get(id);
+		if(BeanUtils.isEmpty(po)) {
+			return;
+		}
+		update("updateStatusById", id, b().a("id", id).a("status", status).p());
+	}
+	
+	/**
+	 * 修改实例状态
+	 *
+	 * @param status 
+	 * @since 2.8.1
+	 */
+	public void updateStatusByInstanceIds(List<String> instList, String status, String currUserId, String cause) {
+		if(BeanUtils.isEmpty(instList)) {
+			return;
+		}
+		
+		for(String processInstanceId : instList) {
+			updateStatusById(processInstanceId, status);
+			
+			saveLog(status, currUserId, cause, processInstanceId);
+		}
+	}
+
+	private void saveLog(String status, String currUserId, String cause, String processInstanceId) {
+		BpmOperTypeEnum operType = null;
+		if(ProcInstStatus.STATUS_SUSPEND.getKey().equals(status)) 
+		{
+			operType = BpmOperTypeEnum.SUSPEND;
+		}
+		else if(ProcInstStatus.STATUS_RUNNING.getKey().equals(status)) 
+		{
+			operType = BpmOperTypeEnum.RECOVER;
+		}
+		
+		if(null != operType)
+		{
+			saveInstanceLog(processInstanceId, operType, currUserId, cause);
+		}
+	}
+	
+	private void saveInstanceLog(String bpmnInstanceId, BpmOperTypeEnum operType, String curUser, String cause){
+		BpmInstPo instance = bpmInstRepository().getByInstId(bpmnInstanceId);
+		// 流程操作日志
+		BpmOperLogPo po = BpmOperLogBuilder.build(instance, operType, curUser);
+		if(StringUtil.isNotBlank(cause))
+		{
+			po.setContent(po.getContent()+"(" + cause + ")");
+		}
+		
+		BpmUtil.createBpmOperLog(po);
+	}
+	
+	private List<String> getIds(List<BpmInstPo> list){
+		List<String> ids = new ArrayList<String>();
+		for (BpmInstPo po : list) {
+			ids.add(po.getId());
+		}
+		return ids;
+	}
+	
+	/**
+	 * 根据流程定义key修改实例禁止状态
+	 *
+	 * @param defKey
+	 * @param isForbidden 
+	 */
+	public void updForbiddenByDefKey(String defKey, Integer isForbidden) {
+		List<BpmInstPo> list = bpmInstRepository().findByBpmnDefKey(defKey);
+		update("updForbiddenByDefKey", getIds(list), b().a("isForbidden",isForbidden).a("defKey",defKey).p());
+	}
+
+	/**
+	 * 修改实例禁止状态,instid使用newIntance注入
+	 *
+	 * @param isForbidden 
+	 */
+	public void updForbiddenByInstId(Integer isForbidden) {
+		String instId = getId();
+		update("updForbiddenByInstId", instId, b().a("isForbidden",isForbidden).a("id",instId).p());
+	}
+
+	/**
+	 * 清除测试数据
+	 *
+	 * @param defKey 
+	 */
+	public void removeTestInstByDefKey(String defKey) {
+		List<BpmInstPo> list = bpmInstRepository().findByDefKeyFormal(defKey, IBpmProcInst.FORMAL_NO);
+		for (BpmInstPo instance : list) {
+			remove(instance.getId());
+		}
+	}
+	
+//	/**
+//	 * 从追回节点取得后续任务节点对应的任务。
+//	 * 
+//	 * <pre>
+//	 * 1.根据流程实例获取相关的所有任务。
+//	 * 2.取得从追回节点之后的任务节点。
+//	 * 3.遍历后续的任务节点,取得这些节点对应的任务。
+//	 * 4.构建一个Map,map中键为节点ID,值为节点任务列表。
+//	 * 5.如果map为空表示后续没有任务了,不可以追回。
+//	 * 6.如果一个节点对应多个任务,表示这个是一个多实例任务。
+//	 * </pre>
+//	 * 
+//	 * @param bpmTasks
+//	 * @param bpmNodeDef
+//	 * @return ResultMessage
+//	 */
+//	@SuppressWarnings("unused")
+//	private ResultMessage isNextTask(List<DefaultBpmTaskPo> bpmTasks, BpmNodeDef bpmNodeDef) {
+//		ResultMessage message = ResultMessage.getSuccess();
+//		// 取得当前节点后的任务节点。
+//		List<BpmNodeDef> nodeDefs = bpmNodeDef.getInnerOutcomeTaskNodes(true);
+//
+//		// List<DefaultBpmTask> list=new ArrayList<DefaultBpmTask>();
+//		Map<String, List<DefaultBpmTaskPo>> taskMap = new HashMap<String, List<DefaultBpmTaskPo>>();
+//
+//		for (BpmNodeDef nodeDef : nodeDefs) {
+//
+//			for (DefaultBpmTaskPo bpmTask : bpmTasks) {
+//				String nodeId = bpmTask.getNodeId();
+//
+//				if (!nodeDef.getNodeId().equals(nodeId)) {
+//					continue;
+//				}
+//
+//				if (taskMap.containsKey(nodeId)) {
+//					List<DefaultBpmTaskPo> list = taskMap.get(nodeId);
+//					list.add(bpmTask);
+//				} else {
+//					List<DefaultBpmTaskPo> list = new ArrayList<DefaultBpmTaskPo>();
+//					list.add(bpmTask);
+//					taskMap.put(nodeId, list);
+//				}
+//				break;
+//			}
+//		}
+//		if (taskMap.size() == 0) {
+//			message.setResult(ResultMessage.ERROR);
+//			message.setMessage("下一步任务已经完成不能撤销");
+//			return message;
+//		}
+//
+//		message.addVariable("taskMap", taskMap);
+//
+//		return message;
+//	}
+//
+//	@SuppressWarnings("unused")
+//	private ResultMessage checkInstance(IBpmProcInst processInstance) {
+//		ResultMessage message = ResultMessage.getSuccess();
+//		String status = processInstance.getStatus();
+//		if (ProcInstStatus.STATUS_RUNNING.getKey().equals(status)) {
+//			return message;
+//		}
+//		message.setResult(ResultMessage.ERROR);
+//		String msg = "";
+//		if (ProcInstStatus.STATUS_REJECT.getKey().equals(status)) {
+//			msg = "流程被驳回";
+//		} else if (ProcInstStatus.STATUS_REJECT_TOSTART.getKey().equals(status)) {
+//			msg = "流程被驳回到发起人";
+//		} else if (ProcInstStatus.STATUS_END.getKey().equals(status)) {
+//			msg = "流程实例已结束";
+//		} else if (ProcInstStatus.STATUS_END.getKey().equals(status)) {
+//			msg = "流程实例被人工终止";
+//		} else if (ProcInstStatus.STATUS_DRAFT.getKey().equals(status)) {
+//			msg = "流程实例为草稿状态";
+//		} else if (ProcInstStatus.STATUS_REVOKE.getKey().equals(status)) {
+//			msg = "流程实例为撤销状态";
+//		} else if (ProcInstStatus.STATUS_REVOKE_TOSTART.getKey().equals(status)) {
+//			msg = "流程实例为撤销状态";
+//		}
+//		message.setMessage(msg);
+//		return message;
+//	}
+//	
+//	/**1=请先设置当前执行人!
+//	 * 2=发起节点后有多个节点!
+//	 * 3=流程已处于第一个节点!
+//	 * 4=当前执行人和流程发起人不是同一个人!
+//	 * 5=任务已在发起节点,不能再撤销!
+//	 * 0=驳回成功!
+//	 * @param instanceId
+//	 * @param currentUser
+//	 * @return
+//	 */
+//	public Integer canRevokeToStart(String instanceId, User currentUser) {
+//		IBpmProcInst instance = bpmInstRepository.get(instanceId);
+//		String defId = instance.getProcDefId();
+//		List<BpmNodeDef> nodeDefs = bpmDefinitionAccessor.getStartNodes(defId);
+//
+//		if (currentUser == null) {
+//			return 1;
+//		}
+//
+//		if (nodeDefs.size() > 1) {
+//			return 2;
+//		}
+//
+//		String status = instance.getStatus();
+//		// 流程状态。
+//		if (ProcessInstanceStatus.STATUS_REVOKE_TOSTART.getKey().equals(status)
+//				|| ProcessInstanceStatus.STATUS_BACK_TOSTART.getKey().equals(status)) {
+//			return 3;
+//		}
+//
+//		if (!currentUser.getUserId().equals(instance.getCreateBy())) {
+//			return 4;
+//		}
+//		// 验证任务是否已经在发起节点。
+//		boolean rtn = validTask(instance.getBpmnInstId(), nodeDefs.get(0));
+//		if (!rtn) {
+//			return 5;
+//		}
+//
+//		return 0;
+//	}
+//	
+//	private boolean validTask(String bpmnInstId, BpmNodeDef nodeDef) {
+//		String nodeId = nodeDef.getNodeId();
+//		List<ActTaskPo> list = actTaskQueryDao.getByInstId(bpmnInstId);
+//
+//		for (ActTaskPo task : list) {
+//			if (nodeId.equals(task.getTaskDefKey())) {
+//				return false;
+//			}
+//		}
+//		return true;
+//	}
+	
+	/**
+	 * 
+	 * 批量删除流程实例
+	 *
+	 * @param ids
+	 */
+	public void removeByIds(String[] ids){
+		if(BeanUtils.isNotEmpty(ids)){
+			for(String id : ids){
+				IBpmProcInst topInstance = bpmInstRepository().getTopBpmProcInst(id);
+				String topInstId = topInstance.getId();
+				List<String> instIdList = bpmInstRepository().findIdsByParentId(topInstId, true);
+				// 删除流程数据
+				List<String> bpmnInstList = bpmInstRepository().findInstIdsByIds(instIdList);
+				actExecutionDomain().delByInstList(bpmnInstList);
+				// 删除关联的实例
+				String topBpmnInstId = topInstance.getBpmnInstId();
+				actExecutionDomain().delete(topBpmnInstId);
+				// 删除
+				removeCascade(instIdList);
+			}
+		}
+	}
+
+	/**
+	 * 流程实例归档
+	 *
+	 * @param procInstId 
+	 */
+	public void createHistory(String procInstId) {
+		BpmInstPo po = bpmInstRepository().get(procInstId);
+		if(BeanUtils.isNotEmpty(po)) {
+			try{
+				if (BeanUtils.isNotEmpty(po.getBpmnDefId())){
+					Map<String, Object> defMap = commonDao().queryOne("select BO_CODE_ from ibps_bpm_def where BPMN_DEF_ID_ = '" + po.getBpmnDefId() + "' ");
+					if (BeanUtils.isNotEmpty(defMap) && BeanUtils.isNotEmpty(defMap.get("BO_CODE_"))) {
+						String sql = "select bian_zhi_shi_jian,bian_zhi_bu_men_,di_dian_ from t_" + defMap.get("BO_CODE_") + " where id_ ='"+po.getBizKey()+"'";
+						Map<String,Object> boDataMap = commonDao().queryOne(sql);
+						if (BeanUtils.isNotEmpty(boDataMap)){
+							if (BeanUtils.isNotEmpty(boDataMap.get("bian_zhi_shi_jian"))){
+								po.setCompileTime(boDataMap.get("bian_zhi_shi_jian").toString());
+							}
+							if (BeanUtils.isNotEmpty(boDataMap.get("bian_zhi_bu_men_"))){
+								po.setCompileDept(boDataMap.get("bian_zhi_bu_men_").toString());
+							}
+							if (BeanUtils.isNotEmpty(boDataMap.get("di_dian_"))){
+								po.setLocation(boDataMap.get("di_dian_").toString());
+							}
+						}
+					}
+				}
+			}catch (Exception e){
+				LOGGER.warn("createHistory exception", e);
+			}
+			bpmInstDao().createHistory(po);
+		}
+	}
+	
+	public void update(BpmInstPo po){
+		setData(po);
+		update();
+	}
+	
+	public void updateTypeIdByDefId(String typeId, List<String> defIds) {
+		List<BpmInstPo> list = bpmInstRepository().findByDefId(defIds);
+		List<String> ids = getIds(list);
+		update("updateTypeIdByDefId", ids, b().a("typeId",typeId).a("defIds",defIds).p());
+	}
+}

+ 371 - 340
ibps-bpmnbase-root/modules/bpmn-model/src/main/java/com/lc/ibps/bpmn/persistence/entity/BpmInstHisTbl.java

@@ -1,341 +1,372 @@
-package com.lc.ibps.bpmn.persistence.entity;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.lc.ibps.base.core.constants.StringPool;
-import com.lc.ibps.base.framework.persistence.entity.AbstractPo;
-import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-/**
- * 流程实例历史表对象
- *
- *<pre> 
- * 开发公司:广州流辰信息技术有限公司
- * 开发人员:huangchunyan
- * 邮箱地址:370653110@qq.com
- * 创建时间:2017-01-19 15:56:36
- *</pre>
- */
-@SuppressWarnings("serial")
-@ApiModel(value = "流程实例历史对象")
-public class BpmInstHisTbl extends AbstractPo<String> implements IBpmProcInst{
-	
-	@ApiModelProperty(value = "流程实例ID")
-	protected String  id; 		/*流程实例ID*/
-	@ApiModelProperty(value = "流程实例标题")
-	protected String  subject; 		/*流程实例标题*/
-	@ApiModelProperty(value = "流程定义ID")
-	protected String  procDefId; 		/*流程定义ID*/
-	@ApiModelProperty(value = "PMN流程定义ID")
-	protected String  bpmnDefId; 		/*BPMN流程定义ID*/
-	@ApiModelProperty(value = "流程定义Key")
-	protected String  procDefKey; 		/*流程定义Key*/
-	@ApiModelProperty(value = "流程名称")
-	protected String  procDefName; 		/*流程名称*/
-	@ApiModelProperty(value = "关联数据业务主键")
-	protected String  bizKey; 		/*关联数据业务主键*/
-	@ApiModelProperty(value = "绑定的表单类型")
-	protected String  formType; 	/*绑定的表单类型*/
-	@ApiModelProperty(value = "绑定的表单主键")
-	protected String  formKey; 		/*绑定的表单主键*/
-	@ApiModelProperty(value = "实例状态")
-	protected String  status; 		/*实例状态*/
-	@ApiModelProperty(value = "实例结束时间")
-	@JsonFormat(pattern = StringPool.DATE_FORMAT_DATETIME, timezone = "GMT+8")
-	protected java.util.Date  endTime; 		/*实例结束时间*/
-	@ApiModelProperty(value = "持续时间")
-	protected Long  duration; 		/*持续时间*/
-	@ApiModelProperty(value = "所属分类ID")
-	protected String  typeId; 		/*所属分类ID*/
-	@ApiModelProperty(value = "流程结束后的最终审批结果,agree=同意;refuse=拒绝")
-	protected String  resultType; 		/*流程结束后的最终审批结果,agree=同意;refuse=拒绝*/
-	@ApiModelProperty(value = "BPMN流程实例ID")
-	protected String  bpmnInstId; 		/*BPMN流程实例ID*/
-	@ApiModelProperty(value = "是否正式数据 0非正式,1正式")
-	protected String  isFormmal; 		/*是否正式数据 0非正式,1正式*/
-	@ApiModelProperty(value = "父实例Id")
-	protected String  parentInstId; 		/*父实例Id*/
-	@ApiModelProperty(value = "是否禁止")
-	protected Short  isForbidden; 		/*是否禁止*/
-	@ApiModelProperty(value = "数据保存模式")
-	protected String  dataMode; 		/*数据保存模式*/
-
-	public void setId(String id) 
-	{
-		this.id = id;
-	}
-	/**
-	 * 返回 流程实例ID
-	 * @return
-	 */
-	public String getId() 
-	{
-		return this.id;
-	}
-	public void setSubject(String subject) 
-	{
-		this.subject = subject;
-	}
-	/**
-	 * 返回 流程实例标题
-	 * @return
-	 */
-	public String getSubject() 
-	{
-		return this.subject;
-	}
-	public void setProcDefId(String procDefId) 
-	{
-		this.procDefId = procDefId;
-	}
-	/**
-	 * 返回 流程定义ID
-	 * @return
-	 */
-	public String getProcDefId() 
-	{
-		return this.procDefId;
-	}
-	public void setBpmnDefId(String bpmnDefId) 
-	{
-		this.bpmnDefId = bpmnDefId;
-	}
-	/**
-	 * 返回 BPMN流程定义ID
-	 * @return
-	 */
-	public String getBpmnDefId() 
-	{
-		return this.bpmnDefId;
-	}
-	public void setProcDefKey(String procDefKey) 
-	{
-		this.procDefKey = procDefKey;
-	}
-	/**
-	 * 返回 流程定义Key
-	 * @return
-	 */
-	public String getProcDefKey() 
-	{
-		return this.procDefKey;
-	}
-	public void setProcDefName(String procDefName) 
-	{
-		this.procDefName = procDefName;
-	}
-	/**
-	 * 返回 流程名称
-	 * @return
-	 */
-	public String getProcDefName() 
-	{
-		return this.procDefName;
-	}
-	public void setBizKey(String bizKey) 
-	{
-		this.bizKey = bizKey;
-	}
-	/**
-	 * 返回 关联数据业务主键
-	 * @return
-	 */
-	public String getBizKey() 
-	{
-		return this.bizKey;
-	}
-	public void setFormType(String formType) 
-	{
-		this.formType = formType;
-	}
-	/**
-	 * 返回 绑定的表单主键
-	 * @return
-	 */
-	public String getFormType() 
-	{
-		return this.formType;
-	}
-	public void setFormKey(String formKey) 
-	{
-		this.formKey = formKey;
-	}
-	/**
-	 * 返回 绑定的表单主键
-	 * @return
-	 */
-	public String getFormKey() 
-	{
-		return this.formKey;
-	}
-	public void setStatus(String status) 
-	{
-		this.status = status;
-	}
-	/**
-	 * 返回 实例状态
-	 * @return
-	 */
-	public String getStatus() 
-	{
-		return this.status;
-	}
-	public void setEndTime(java.util.Date endTime) 
-	{
-		this.endTime = endTime;
-	}
-	/**
-	 * 返回 实例结束时间
-	 * @return
-	 */
-	public java.util.Date getEndTime() 
-	{
-		return this.endTime;
-	}
-	public void setDuration(Long duration) 
-	{
-		this.duration = duration;
-	}
-	/**
-	 * 返回 持续时间
-	 * @return
-	 */
-	public Long getDuration() 
-	{
-		return this.duration;
-	}
-	public void setTypeId(String typeId) 
-	{
-		this.typeId = typeId;
-	}
-	/**
-	 * 返回 所属分类ID
-	 * @return
-	 */
-	public String getTypeId() 
-	{
-		return this.typeId;
-	}
-	public void setResultType(String resultType) 
-	{
-		this.resultType = resultType;
-	}
-	/**
-	 * 返回 流程结束后的最终审批结果,agree=同意;refuse=拒绝

-	 * @return
-	 */
-	public String getResultType() 
-	{
-		return this.resultType;
-	}
-	public void setBpmnInstId(String bpmnInstId) 
-	{
-		this.bpmnInstId = bpmnInstId;
-	}
-	/**
-	 * 返回 BPMN流程实例ID
-	 * @return
-	 */
-	public String getBpmnInstId() 
-	{
-		return this.bpmnInstId;
-	}
-	public void setCreateBy(String createBy) 
-	{
-		this.createBy = createBy;
-	}
-	/**
-	 * 返回 创建人ID
-	 * @return
-	 */
-	public String getCreateBy() 
-	{
-		return this.createBy;
-	}
-	public void setCreateTime(java.util.Date createTime) 
-	{
-		this.createTime = createTime;
-	}
-	/**
-	 * 返回 创建时间
-	 * @return
-	 */
-	public java.util.Date getCreateTime() 
-	{
-		return this.createTime;
-	}
-	public void setUpdateBy(String updateBy) 
-	{
-		this.updateBy = updateBy;
-	}
-	/**
-	 * 返回 更新人ID
-	 * @return
-	 */
-	public String getUpdateBy() 
-	{
-		return this.updateBy;
-	}
-	public void setUpdateTime(java.util.Date updateTime) 
-	{
-		this.updateTime = updateTime;
-	}
-	/**
-	 * 返回 更新时间
-	 * @return
-	 */
-	public java.util.Date getUpdateTime() 
-	{
-		return this.updateTime;
-	}
-	public void setIsFormmal(String isFormmal) 
-	{
-		this.isFormmal = isFormmal;
-	}
-	/**
-	 * 返回 是否正式数据 0非正式,1正式
-	 * @return
-	 */
-	public String getIsFormmal() 
-	{
-		return this.isFormmal;
-	}
-	public void setParentInstId(String parentInstId) 
-	{
-		this.parentInstId = parentInstId;
-	}
-	/**
-	 * 返回 父实例Id
-	 * @return
-	 */
-	public String getParentInstId() 
-	{
-		return this.parentInstId;
-	}
-	public void setIsForbidden(Short isForbidden) 
-	{
-		this.isForbidden = isForbidden;
-	}
-	/**
-	 * 返回 是否禁止
-	 * @return
-	 */
-	public Short getIsForbidden() 
-	{
-		return this.isForbidden;
-	}
-	public void setDataMode(String dataMode) 
-	{
-		this.dataMode = dataMode;
-	}
-	/**
-	 * 返回 数据保存模式
-	 * @return
-	 */
-	public String getDataMode() 
-	{
-		return this.dataMode;
-	}
+package com.lc.ibps.bpmn.persistence.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.lc.ibps.base.core.constants.StringPool;
+import com.lc.ibps.base.framework.persistence.entity.AbstractPo;
+import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 流程实例历史表对象
+ *
+ *<pre> 
+ * 开发公司:广州流辰信息技术有限公司
+ * 开发人员:huangchunyan
+ * 邮箱地址:370653110@qq.com
+ * 创建时间:2017-01-19 15:56:36
+ *</pre>
+ */
+@SuppressWarnings("serial")
+@ApiModel(value = "流程实例历史对象")
+public class BpmInstHisTbl extends AbstractPo<String> implements IBpmProcInst{
+	
+	@ApiModelProperty(value = "流程实例ID")
+	protected String  id; 		/*流程实例ID*/
+	@ApiModelProperty(value = "流程实例标题")
+	protected String  subject; 		/*流程实例标题*/
+	@ApiModelProperty(value = "流程定义ID")
+	protected String  procDefId; 		/*流程定义ID*/
+	@ApiModelProperty(value = "PMN流程定义ID")
+	protected String  bpmnDefId; 		/*BPMN流程定义ID*/
+	@ApiModelProperty(value = "流程定义Key")
+	protected String  procDefKey; 		/*流程定义Key*/
+	@ApiModelProperty(value = "流程名称")
+	protected String  procDefName; 		/*流程名称*/
+	@ApiModelProperty(value = "关联数据业务主键")
+	protected String  bizKey; 		/*关联数据业务主键*/
+	@ApiModelProperty(value = "绑定的表单类型")
+	protected String  formType; 	/*绑定的表单类型*/
+	@ApiModelProperty(value = "绑定的表单主键")
+	protected String  formKey; 		/*绑定的表单主键*/
+	@ApiModelProperty(value = "实例状态")
+	protected String  status; 		/*实例状态*/
+	@ApiModelProperty(value = "实例结束时间")
+	@JsonFormat(pattern = StringPool.DATE_FORMAT_DATETIME, timezone = "GMT+8")
+	protected java.util.Date  endTime; 		/*实例结束时间*/
+	@ApiModelProperty(value = "持续时间")
+	protected Long  duration; 		/*持续时间*/
+	@ApiModelProperty(value = "所属分类ID")
+	protected String  typeId; 		/*所属分类ID*/
+	@ApiModelProperty(value = "流程结束后的最终审批结果,agree=同意;refuse=拒绝")
+	protected String  resultType; 		/*流程结束后的最终审批结果,agree=同意;refuse=拒绝*/
+	@ApiModelProperty(value = "BPMN流程实例ID")
+	protected String  bpmnInstId; 		/*BPMN流程实例ID*/
+	@ApiModelProperty(value = "是否正式数据 0非正式,1正式")
+	protected String  isFormmal; 		/*是否正式数据 0非正式,1正式*/
+	@ApiModelProperty(value = "父实例Id")
+	protected String  parentInstId; 		/*父实例Id*/
+	@ApiModelProperty(value = "是否禁止")
+	protected Short  isForbidden; 		/*是否禁止*/
+	@ApiModelProperty(value = "数据保存模式")
+	protected String  dataMode; 		/*数据保存模式*/
+	@ApiModelProperty(value = "编制时间")
+	private String compileTime;/* 编制时间 */
+	@ApiModelProperty(value = "编制部门")
+	private String compileDept;/* 编制部门 */
+	@ApiModelProperty(value = "地点")
+	private String location;/* 地点 */
+
+	public String getCompileTime() {
+		return compileTime;
+	}
+
+	public void setCompileTime(String compileTime) {
+		this.compileTime = compileTime;
+	}
+
+	public String getCompileDept() {
+		return compileDept;
+	}
+
+	public void setCompileDept(String compileDept) {
+		this.compileDept = compileDept;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public void setId(String id)
+	{
+		this.id = id;
+	}
+	/**
+	 * 返回 流程实例ID
+	 * @return
+	 */
+	public String getId() 
+	{
+		return this.id;
+	}
+	public void setSubject(String subject) 
+	{
+		this.subject = subject;
+	}
+	/**
+	 * 返回 流程实例标题
+	 * @return
+	 */
+	public String getSubject() 
+	{
+		return this.subject;
+	}
+	public void setProcDefId(String procDefId) 
+	{
+		this.procDefId = procDefId;
+	}
+	/**
+	 * 返回 流程定义ID
+	 * @return
+	 */
+	public String getProcDefId() 
+	{
+		return this.procDefId;
+	}
+	public void setBpmnDefId(String bpmnDefId) 
+	{
+		this.bpmnDefId = bpmnDefId;
+	}
+	/**
+	 * 返回 BPMN流程定义ID
+	 * @return
+	 */
+	public String getBpmnDefId() 
+	{
+		return this.bpmnDefId;
+	}
+	public void setProcDefKey(String procDefKey) 
+	{
+		this.procDefKey = procDefKey;
+	}
+	/**
+	 * 返回 流程定义Key
+	 * @return
+	 */
+	public String getProcDefKey() 
+	{
+		return this.procDefKey;
+	}
+	public void setProcDefName(String procDefName) 
+	{
+		this.procDefName = procDefName;
+	}
+	/**
+	 * 返回 流程名称
+	 * @return
+	 */
+	public String getProcDefName() 
+	{
+		return this.procDefName;
+	}
+	public void setBizKey(String bizKey) 
+	{
+		this.bizKey = bizKey;
+	}
+	/**
+	 * 返回 关联数据业务主键
+	 * @return
+	 */
+	public String getBizKey() 
+	{
+		return this.bizKey;
+	}
+	public void setFormType(String formType) 
+	{
+		this.formType = formType;
+	}
+	/**
+	 * 返回 绑定的表单主键
+	 * @return
+	 */
+	public String getFormType() 
+	{
+		return this.formType;
+	}
+	public void setFormKey(String formKey) 
+	{
+		this.formKey = formKey;
+	}
+	/**
+	 * 返回 绑定的表单主键
+	 * @return
+	 */
+	public String getFormKey() 
+	{
+		return this.formKey;
+	}
+	public void setStatus(String status) 
+	{
+		this.status = status;
+	}
+	/**
+	 * 返回 实例状态
+	 * @return
+	 */
+	public String getStatus() 
+	{
+		return this.status;
+	}
+	public void setEndTime(java.util.Date endTime) 
+	{
+		this.endTime = endTime;
+	}
+	/**
+	 * 返回 实例结束时间
+	 * @return
+	 */
+	public java.util.Date getEndTime() 
+	{
+		return this.endTime;
+	}
+	public void setDuration(Long duration) 
+	{
+		this.duration = duration;
+	}
+	/**
+	 * 返回 持续时间
+	 * @return
+	 */
+	public Long getDuration() 
+	{
+		return this.duration;
+	}
+	public void setTypeId(String typeId) 
+	{
+		this.typeId = typeId;
+	}
+	/**
+	 * 返回 所属分类ID
+	 * @return
+	 */
+	public String getTypeId() 
+	{
+		return this.typeId;
+	}
+	public void setResultType(String resultType) 
+	{
+		this.resultType = resultType;
+	}
+	/**
+	 * 返回 流程结束后的最终审批结果,agree=同意;refuse=拒绝
+
+	 * @return
+	 */
+	public String getResultType() 
+	{
+		return this.resultType;
+	}
+	public void setBpmnInstId(String bpmnInstId) 
+	{
+		this.bpmnInstId = bpmnInstId;
+	}
+	/**
+	 * 返回 BPMN流程实例ID
+	 * @return
+	 */
+	public String getBpmnInstId() 
+	{
+		return this.bpmnInstId;
+	}
+	public void setCreateBy(String createBy) 
+	{
+		this.createBy = createBy;
+	}
+	/**
+	 * 返回 创建人ID
+	 * @return
+	 */
+	public String getCreateBy() 
+	{
+		return this.createBy;
+	}
+	public void setCreateTime(java.util.Date createTime) 
+	{
+		this.createTime = createTime;
+	}
+	/**
+	 * 返回 创建时间
+	 * @return
+	 */
+	public java.util.Date getCreateTime() 
+	{
+		return this.createTime;
+	}
+	public void setUpdateBy(String updateBy) 
+	{
+		this.updateBy = updateBy;
+	}
+	/**
+	 * 返回 更新人ID
+	 * @return
+	 */
+	public String getUpdateBy() 
+	{
+		return this.updateBy;
+	}
+	public void setUpdateTime(java.util.Date updateTime) 
+	{
+		this.updateTime = updateTime;
+	}
+	/**
+	 * 返回 更新时间
+	 * @return
+	 */
+	public java.util.Date getUpdateTime() 
+	{
+		return this.updateTime;
+	}
+	public void setIsFormmal(String isFormmal) 
+	{
+		this.isFormmal = isFormmal;
+	}
+	/**
+	 * 返回 是否正式数据 0非正式,1正式
+	 * @return
+	 */
+	public String getIsFormmal() 
+	{
+		return this.isFormmal;
+	}
+	public void setParentInstId(String parentInstId) 
+	{
+		this.parentInstId = parentInstId;
+	}
+	/**
+	 * 返回 父实例Id
+	 * @return
+	 */
+	public String getParentInstId() 
+	{
+		return this.parentInstId;
+	}
+	public void setIsForbidden(Short isForbidden) 
+	{
+		this.isForbidden = isForbidden;
+	}
+	/**
+	 * 返回 是否禁止
+	 * @return
+	 */
+	public Short getIsForbidden() 
+	{
+		return this.isForbidden;
+	}
+	public void setDataMode(String dataMode) 
+	{
+		this.dataMode = dataMode;
+	}
+	/**
+	 * 返回 数据保存模式
+	 * @return
+	 */
+	public String getDataMode() 
+	{
+		return this.dataMode;
+	}
 }

+ 35 - 1
ibps-bpmnbase-root/modules/bpmn-model/src/main/java/com/lc/ibps/bpmn/persistence/entity/BpmInstPo.java

@@ -40,7 +40,41 @@ public class BpmInstPo extends BpmInstTbl {
 	private String execId;/*我审批的流程任务节点执行ID*/
 	private String nodeType;/*我审批的流程任务节点类型*/
 	private String curNode;/*当前审批的流程任务节点名称*/
-	
+
+	/**
+	 * 流程结束添加流程历史用
+	 */
+	@ApiModelProperty(value = "编制时间")
+	private String compileTime;/* 编制时间 */
+	@ApiModelProperty(value = "编制部门")
+	private String compileDept;/* 编制部门 */
+	@ApiModelProperty(value = "地点")
+	private String location;/* 地点 */
+
+	public String getCompileTime() {
+		return compileTime;
+	}
+
+	public void setCompileTime(String compileTime) {
+		this.compileTime = compileTime;
+	}
+
+	public String getCompileDept() {
+		return compileDept;
+	}
+
+	public void setCompileDept(String compileDept) {
+		this.compileDept = compileDept;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
 	public AuthorizeRightVo getAuthorizeRight() {
 		return authorizeRight;
 	}

+ 17 - 9
ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmInst.map.xml

@@ -34,6 +34,11 @@
 		<result property="myNode" column="MYNODE" jdbcType="VARCHAR"/>
 		<result property="curNode" column="CURNODE" jdbcType="VARCHAR"/>
 		<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR"/>
+
+		<result property="compileTime" column="COMPILE_TIME" jdbcType="VARCHAR"/>
+		<result property="compileDept" column="COMPILE_DEPT" jdbcType="VARCHAR"/>
+		<result property="location" column="LOCATION_" jdbcType="VARCHAR"/>
+
 	</resultMap>
 	
 	<resultMap type="com.lc.ibps.bpmn.model.statistics.RunningStatVO" id="RunningStatVO">
@@ -232,14 +237,14 @@
 	
 	<insert id="createHistory" parameterType="com.lc.ibps.bpmn.persistence.entity.BpmInstPo">
 		INSERT INTO IBPS_BPM_INST_HIS
-		(ID_,SUBJECT_,PROC_DEF_ID_,BPMN_DEF_ID_,PROC_DEF_KEY_,PROC_DEF_NAME_,BIZ_KEY_,FORM_TYPE_,FORM_KEY_,STATUS_,END_TIME_,DURATION_,TYPE_ID_,RESULT_TYPE_,BPMN_INST_ID_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,IS_FORMMAL_,PARENT_INST_ID_,IS_FORBIDDEN_,DATA_MODE_)
-		VALUES 
-		(#{id,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR}, #{procDefId,jdbcType=VARCHAR}, #{bpmnDefId,jdbcType=VARCHAR}, #{procDefKey,jdbcType=VARCHAR}, #{procDefName,jdbcType=VARCHAR}, 
-		#{bizKey,jdbcType=VARCHAR}, #{formType,jdbcType=VARCHAR}, #{formKey,jdbcType=VARCHAR},  #{status,jdbcType=VARCHAR}, #{endTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=NUMERIC}, #{typeId,jdbcType=VARCHAR}, 
-		#{resultType,jdbcType=VARCHAR}, #{bpmnInstId,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
-		#{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{isFormmal,jdbcType=VARCHAR}, #{parentInstId,jdbcType=VARCHAR},
-		#{isForbidden,jdbcType=NUMERIC},
-		#{dataMode,jdbcType=VARCHAR} )
+		(ID_,SUBJECT_,PROC_DEF_ID_,BPMN_DEF_ID_,PROC_DEF_KEY_,PROC_DEF_NAME_,BIZ_KEY_,FORM_TYPE_,FORM_KEY_,STATUS_,END_TIME_,DURATION_,TYPE_ID_,RESULT_TYPE_,BPMN_INST_ID_,
+		 CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,IS_FORMMAL_,PARENT_INST_ID_,IS_FORBIDDEN_,DATA_MODE_,TENANT_ID_,COMPILE_TIME,COMPILE_DEPT,LOCATION_)
+		VALUES
+			(#{id,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR}, #{procDefId,jdbcType=VARCHAR}, #{bpmnDefId,jdbcType=VARCHAR}, #{procDefKey,jdbcType=VARCHAR}, #{procDefName,jdbcType=VARCHAR},
+			 #{bizKey,jdbcType=VARCHAR}, #{formType,jdbcType=VARCHAR}, #{formKey,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{endTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=NUMERIC},
+			 #{typeId,jdbcType=VARCHAR}, #{resultType,jdbcType=VARCHAR}, #{bpmnInstId,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR},
+			 #{updateTime,jdbcType=TIMESTAMP}, #{isFormmal,jdbcType=VARCHAR}, #{parentInstId,jdbcType=VARCHAR}, #{isForbidden,jdbcType=NUMERIC}, #{dataMode,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR},
+			 #{compileTime,jdbcType=VARCHAR},#{compileDept,jdbcType=VARCHAR},#{location,jdbcType=VARCHAR})
 	</insert>
 	
 	<update id="updateHistory" parameterType="com.lc.ibps.bpmn.persistence.entity.BpmInstPo">
@@ -265,7 +270,10 @@
 		IS_FORMMAL_=#{isFormmal,jdbcType=VARCHAR},
 		PARENT_INST_ID_=#{parentInstId,jdbcType=VARCHAR},
 		IS_FORBIDDEN_=#{isForbidden,jdbcType=NUMERIC},
-		DATA_MODE_=#{dataMode,jdbcType=VARCHAR}
+		DATA_MODE_=#{dataMode,jdbcType=VARCHAR},
+		COMPILE_TIME=#{compileTime,jdbcType=VARCHAR},
+		COMPILE_DEPT=#{compileDept,jdbcType=VARCHAR},
+		LOCATION_=#{location,jdbcType=VARCHAR}
 		WHERE ID_=#{id}
 	</update>
 	

+ 14 - 3
ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmInstHis.map.xml

@@ -27,17 +27,25 @@
 		<result property="isForbidden" column="IS_FORBIDDEN_" jdbcType="NUMERIC"/>
 		<result property="dataMode" column="DATA_MODE_" jdbcType="VARCHAR"/>
 		<result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR"/>
+		<result property="compileTime" column="COMPILE_TIME" jdbcType="VARCHAR"/>
+		<result property="compileDept" column="COMPILE_DEPT" jdbcType="VARCHAR"/>
+		<result property="location" column="LOCATION_" jdbcType="VARCHAR"/>
 	</resultMap>
 	
 	<sql id="columns">
-		ID_,SUBJECT_,PROC_DEF_ID_,BPMN_DEF_ID_,PROC_DEF_KEY_,PROC_DEF_NAME_,BIZ_KEY_,FORM_TYPE_,FORM_KEY_,STATUS_,END_TIME_,DURATION_,TYPE_ID_,RESULT_TYPE_,BPMN_INST_ID_,CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,IS_FORMMAL_,PARENT_INST_ID_,IS_FORBIDDEN_,DATA_MODE_,TENANT_ID_
+		ID_,SUBJECT_,PROC_DEF_ID_,BPMN_DEF_ID_,PROC_DEF_KEY_,PROC_DEF_NAME_,BIZ_KEY_,FORM_TYPE_,FORM_KEY_,STATUS_,END_TIME_,DURATION_,TYPE_ID_,RESULT_TYPE_,BPMN_INST_ID_,
+		CREATE_BY_,CREATE_TIME_,UPDATE_BY_,UPDATE_TIME_,IS_FORMMAL_,PARENT_INST_ID_,IS_FORBIDDEN_,DATA_MODE_,TENANT_ID_,COMPILE_TIME,COMPILE_DEPT,LOCATION_
 	</sql>
 	
 	<insert id="create" parameterType="com.lc.ibps.bpmn.persistence.entity.BpmInstHisPo">
 		INSERT INTO IBPS_BPM_INST_HIS
 		(<include refid="columns"/>)
 		VALUES 
-		(#{id,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR}, #{procDefId,jdbcType=VARCHAR}, #{bpmnDefId,jdbcType=VARCHAR}, #{procDefKey,jdbcType=VARCHAR}, #{procDefName,jdbcType=VARCHAR}, #{bizKey,jdbcType=VARCHAR}, #{formType,jdbcType=VARCHAR}, #{formKey,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{endTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=NUMERIC}, #{typeId,jdbcType=VARCHAR}, #{resultType,jdbcType=VARCHAR}, #{bpmnInstId,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{isFormmal,jdbcType=VARCHAR}, #{parentInstId,jdbcType=VARCHAR}, #{isForbidden,jdbcType=NUMERIC}, #{dataMode,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR})
+		(#{id,jdbcType=VARCHAR}, #{subject,jdbcType=VARCHAR}, #{procDefId,jdbcType=VARCHAR}, #{bpmnDefId,jdbcType=VARCHAR}, #{procDefKey,jdbcType=VARCHAR}, #{procDefName,jdbcType=VARCHAR},
+		#{bizKey,jdbcType=VARCHAR}, #{formType,jdbcType=VARCHAR}, #{formKey,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{endTime,jdbcType=TIMESTAMP}, #{duration,jdbcType=NUMERIC},
+		#{typeId,jdbcType=VARCHAR}, #{resultType,jdbcType=VARCHAR}, #{bpmnInstId,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR},
+		#{updateTime,jdbcType=TIMESTAMP}, #{isFormmal,jdbcType=VARCHAR}, #{parentInstId,jdbcType=VARCHAR}, #{isForbidden,jdbcType=NUMERIC}, #{dataMode,jdbcType=VARCHAR}, #{tenantId,jdbcType=VARCHAR},
+		#{compileTime,jdbcType=VARCHAR},#{compileDept,jdbcType=VARCHAR},#{location,jdbcType=VARCHAR})
 	</insert>
 	
 	<select id="get"   parameterType="java.lang.String" resultMap="BpmInstHisPo">
@@ -156,7 +164,10 @@
 		IS_FORMMAL_=#{isFormmal,jdbcType=VARCHAR},
 		PARENT_INST_ID_=#{parentInstId,jdbcType=VARCHAR},
 		IS_FORBIDDEN_=#{isForbidden,jdbcType=NUMERIC},
-		DATA_MODE_=#{dataMode,jdbcType=VARCHAR}
+		DATA_MODE_=#{dataMode,jdbcType=VARCHAR},
+		COMPILE_TIME=#{compileTime,jdbcType=VARCHAR},
+		COMPILE_DEPT=#{compileDept,jdbcType=VARCHAR},
+		LOCATION_=#{location,jdbcType=VARCHAR}
 		WHERE
 		ID_=#{id}
 	</update>

+ 16 - 0
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/bpmn/provider/BpmInstHisProvider.java

@@ -9,9 +9,17 @@ import java.util.Map;
 
 import javax.annotation.Resource;
 
+import com.lc.ibps.base.bo.persistence.entity.BoDefPo;
+import com.lc.ibps.base.bo.persistence.entity.BoTablePo;
+import com.lc.ibps.base.bo.repository.BoDefRepository;
+import com.lc.ibps.base.bo.repository.BoTableRepository;
 import com.lc.ibps.base.core.constants.StringPool;
+import com.lc.ibps.base.framework.table.ICommonDao;
 import com.lc.ibps.base.web.util.AppFileUtil;
 import com.lc.ibps.common.msg.persistence.entity.InnerMessagePo;
+import com.lc.ibps.form.form.persistence.entity.FormBoPo;
+import com.lc.ibps.form.form.persistence.entity.FormDefPo;
+import com.lc.ibps.form.form.repository.FormDefRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -67,6 +75,14 @@ public class BpmInstHisProvider extends GenericProvider implements IBpmInstHisSe
 	private BpmInstHisRepository bpmInstHisRepository;
 	@Autowired
 	private IPartyUserService partyUserService;
+	@Resource
+	private FormDefRepository formDefRepository;
+	@Resource
+	private BoDefRepository boDefRepository;
+	@Resource
+	private BoTableRepository boTableRepository;
+	@Resource
+	private ICommonDao commonDao;
 
 	/**
 	 * 【流程实例历史】列表(分页条件查询)数据

+ 38 - 1
ibps-provider-root/modules/provider-form/src/main/java/com/lc/ibps/form/provider/DataTemplateProvider.java

@@ -14,7 +14,8 @@ import java.util.Map;
 
 import javax.annotation.Resource;
 
-import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
+import cn.hutool.json.JSONUtil;
+import com.lc.ibps.base.framework.table.ICommonDao;
 import com.lc.ibps.bpmn.api.define.IBpmDefineReader;
 import com.lc.ibps.bpmn.api.model.define.IBpmProcDefine;
 import com.lc.ibps.bpmn.api.model.define.IBpmProcExtendDefine;
@@ -31,6 +32,7 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.slf4j.event.Level;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -159,6 +161,9 @@ public class DataTemplateProvider extends GenericProvider implements IDataTempla
 	@Resource
 	private IBpmDefineReader bpmDefineReader;
 
+	@Autowired
+	private ICommonDao<?> commonDao;
+
 	@ApiOperation(value = "数据模版列表(分页条件查询)数据", notes = "数据模版列表(分页条件查询)数据")
 	@Override
 	public APIResult<APIPageList<DataTemplatePo>> query(
@@ -1558,6 +1563,38 @@ public class DataTemplateProvider extends GenericProvider implements IDataTempla
 				String subject = bpmInstRepository.getSubject(processDef,procInstCmd,null);
 				BpmInstHis instHis = bpmInstHisRepository.newInstance();
 				bpmInstHisPo.setSubject(subject);
+
+				try{
+					if (BeanUtils.isNotEmpty(dataTemplateRequestVo.getData())){
+						cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(dataTemplateRequestVo.getData());
+						if (BeanUtils.isNotEmpty(jsonObject.get("bianZhiShiJian"))){
+							bpmInstHisPo.setCompileTime(jsonObject.get("bianZhiShiJian").toString());
+						}
+						if (BeanUtils.isNotEmpty(jsonObject.get("bianZhiBuMen"))){
+							bpmInstHisPo.setCompileDept(jsonObject.get("bianZhiBuMen").toString());
+						}
+						if (BeanUtils.isNotEmpty(jsonObject.get("diDian"))){
+							bpmInstHisPo.setLocation(jsonObject.get("diDian").toString());
+						}
+					}
+//					if (BeanUtils.isNotEmpty(dataTemplateRequestVo.getBoCode()) && BeanUtils.isNotEmpty(dataTemplateRequestVo.getPk())){
+//						String sql = "select bian_zhi_shi_jian,bian_zhi_bu_men_,di_dian_ from t_" + dataTemplateRequestVo.getBoCode() + " where id_ ='"+dataTemplateRequestVo.getPk()+"'";
+//						Map<String,Object> boDataMap = commonDao.queryOne(sql);
+//						if (BeanUtils.isNotEmpty(boDataMap)){
+//							if (BeanUtils.isNotEmpty(boDataMap.get("bian_zhi_shi_jian"))){
+//								bpmInstHisPo.setCompileTime(boDataMap.get("bian_zhi_shi_jian").toString());
+//							}
+//							if (BeanUtils.isNotEmpty(boDataMap.get("bian_zhi_bu_men_"))){
+//								bpmInstHisPo.setCompileDept(boDataMap.get("bian_zhi_bu_men_").toString());
+//							}
+//							if (BeanUtils.isNotEmpty(boDataMap.get("di_dian_"))){
+//								bpmInstHisPo.setLocation(boDataMap.get("di_dian_").toString());
+//							}
+//						}
+//					}
+				}catch (Exception e){
+					logger.warn("update bpmnInstHis exception", e);
+				}
 				instHis.save(bpmInstHisPo);
 			}