Jelajahi Sumber

列表删除数据,代办没同步删除/双开页面提交或删除,导致流程异常/双开页面暂存,双提交导致流程异常等问题处理

wy 7 bulan lalu
induk
melakukan
d01352e63e

+ 361 - 357
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmInstRepository.java

@@ -1,357 +1,361 @@
-package com.lc.ibps.bpmn.repository;
-
-import java.util.List;
-
-import com.lc.ibps.api.base.page.Page;
-import com.lc.ibps.api.base.query.QueryFilter;
-import com.lc.ibps.base.framework.repository.IRepository;
-import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
-import com.lc.ibps.bpmn.api.model.define.IBpmProcDefine;
-import com.lc.ibps.bpmn.api.model.define.IBpmProcExtendDefine;
-import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
-import com.lc.ibps.bpmn.domain.BpmInst;
-import com.lc.ibps.bpmn.model.statistics.RunningStatVO;
-import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
-
-/**
- * 流程实例
 仓库接口
- *
- *<pre> 
- * 开发公司:广州流辰信息技术有限公司
- * 开发人员:luodx
- * 邮箱地址:1198506318@qq.com
- * 创建时间:2016-12-13 09:25:42
- *</pre>
- */
-public interface BpmInstRepository extends IRepository<String, BpmInstPo,BpmInst>{
-	
-	/**
-	 * 构建流程定义标题
-	 * @param bpmDefinition
-	 * @param procInstCmd
-	 * @return 
-	 * String
-	 */
-	String getSubject(IBpmProcDefine<IBpmProcExtendDefine> bpmDefinition, ProcInstCmd procInstCmd,BpmInstPo defaultBpmProcessInstance);
-	
-	/**
-	 * 根据BPMN流程实例获取流程实例数据。
-	 * @param bpmnInstId
-	 * @return 
-	 * DefaultBpmProcessInstance
-	 */
-	BpmInstPo getByInstId(String bpmnInstId);
-	
-	/**
-	 * 
-	 * 根据主键Id获取流程实例,如果实例没有就到结束的流程实例查找
-	 *
-	 * @param procInstId
-	 * @return
-	 */
-	BpmInstPo getBpmInstById(String instId);
-	
-	/**
-	 * 
-	 * 根据主键Id获取结束流程实例历史信息
-	 *
-	 * @param procInstId
-	 * @return
-	 */
-	BpmInstPo getHistoryById(String id);
-	
-	/**
-	 * 
-	 * 根据实例Id获取结束流程实例
-	 *
-	 * @param instId 实例ID
-	 * @return
-	 */
-	BpmInstPo getHistoryByInstId(String instId);
-	
-	/**
-	 * 
-	 * 根据用户ID获取相关流程实例信息 
-	 *
-	 * @param userId 用户ID
-	 * @return
-	 */
-	List<BpmInstPo> findByUserId(String userId);
-	
-	/**
-	 * 
-	 * 根据用户ID和分页信息获取相关流程实例信息
-	 *
-	 * @param userId 用户ID
-	 * @param page 分页
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserId(String userId,Page page);
-	
-	/**
-	 * 
-	 * 根据用户ID和过滤查询条件获取相关流程实例信息
-	 *
-	 * @param userId 用户Id
-	 * @param queryFiler 过滤查询条件
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserId(String userId, QueryFilter queryFiler);
-	
-	/**
-	 * 按用户Id及组列表查找实例
-	 * @param userId
-	 * @param groupList
-	 * @return
-	 */
-	List<BpmInstPo> findByUserIdGroupList(String userId,List<String> groupList);
-	
-	/**
-	 * 按用户Id及组列表查找实例并且分页
-	 * @param userId
-	 * @param groupList
-	 * @param page
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,Page page);
-	
-	/**
-	 * 按用户Id及组列表查找实例并且分页
-	 * @param userId
-	 * @param groupList
-	 * @param page
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,QueryFilter queryFilter);
-	
-	/**
-	 * 按人员查找其参与的流程实例
-	 * @param usreId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByAttendUserId(String usreId);
-	
-	/**
-	 * 按人员查找其参与的流程实例并分页返回结果
-	 * @param usreId
-	 * @param page
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryByAttendUserId(String usreId,Page page);
-	
-	/**
-	 * 根据人员查询并返回查询结果。
-	 * @param usreId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryByAttendUserId(String usreId,QueryFilter queryFilter);
-	
-	/**
-	 * 根据流程定义获取流程实例列表。
-	 * @param bpmnDefId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByBpmnDefKey(String defKey);
-	
-	/**
-	 *  获取我的请求。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryRequest(String userId, QueryFilter queryFilter);
-	
-	Integer queryRequestCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的办结。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	Integer queryCompletedCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的办结。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryCompleted(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我发起的草稿。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryDrafts(String userId,QueryFilter queryFilter);
-	
-	Integer queryDraftsCount(String userId,QueryFilter queryFilter);
-	
-	/**
-	 *  获取已办事宜。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryHandled(String userId, QueryFilter queryFilter);
-	
-	/**
-	 * 根据父ID获取所有的实例子列表。 
-	 * @param parentId	父ID。
-	 * @param includeSelf	是否包括当前实例数据。
-	 * @return 
-	 * List&lt;String>
-	 */
-	List<BpmInstPo> findByParentId(String parentId, boolean includeSelf);
-	
-	/**
-	 * 根据父ID获取所有的实例子列表。 
-	 * @param parentId	父ID。
-	 * @param includeSelf	是否包括当前实例数据。
-	 * @return 
-	 * List&lt;String>
-	 */
-	List<String> findIdsByParentId(String parentId, boolean includeSelf);
-	
-	/**
-	 * 按用户的授权内容去查询列表
-	 * @param queryFilter
-	 * @return
-	 */
-	List<BpmInstPo> query(QueryFilter queryFilter, String curUserId, boolean isSuper);
-	
-	/**
-	 * 按用户的授权内容去统计列表
-	 *
-	 * @param queryFilter
-	 * @return
-	 */
-	List<RunningStatVO> queryRunningStat(QueryFilter queryFilter, String curUserId, boolean isSuper);
-	
-	String cannotDelete(QueryFilter queryFilter, String curUser, String... ids);
-	
-	/**
-	 * 根据流程实例ID查询顶级的流程实例。
-	 * @param instance	
-	 * @return IBpmProcInst
-	 */
-	IBpmProcInst getTopBpmProcInst(String instId);
-	
-	/**
-	 * 根据流程实例查询顶级的流程实例。
-	 * @param instance
-	 * @return IBpmProcInst
-	 */
-	IBpmProcInst getTopBpmProcInst(IBpmProcInst inst);
-	
-	/**
-	 * 根据流程定义ID获取实例列表。
-	 * @param defId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByDefId(String defId);
-
-	
-	/**
-	 * 根据业务主键获取历史的流程实例
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getHistoryByBizKey(String bizKey);
-	
-	/**
-	 * 根据业务主键获取正在运行的流程实例
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getInfoByBizKey(String bizKey);
-	
-	/**
-	 * 我审批过且已经办结的事务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public Integer queryEndHandledCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 * 我审批过且已经办结的事务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryEndHandled(String userId, QueryFilter queryFilter);
-
-	/**
-	 * 
-	 * 根据流程定义key和业务主键获取相关流程实例
-	 *
-	 * @param defKey
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getByDefKeyBizKey(String defKey, String bizKey);
-	
-	/**
-	 * 获得可撤销的任务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryRevoke(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的全部已办事宜。
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	public Integer queryAllHandledCount(QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的全部已办事宜。
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryAllHandled(QueryFilter queryFilter);
-
-	/**
-	 * 
-	 * 根据流程实例id集合获取act流程实例ID列表
-	 *
-	 * @param instIdList
-	 * @return
-	 */
-	public List<String> findInstIdsByIds(List<String> instIdList);
-
-	/**
-	 * 
-	 * 根据流程键和是否正式获取流程实例。
-	 *
-	 * @param defKey
-	 * @param formalNo
-	 * @return
-	 */
-	public List<BpmInstPo> findByDefKeyFormal(String defKey, String formalNo);
-	
-	/**
-	 * 
-	 * 根据流程定义ID查询数据
-	 *
-	 * @param defKey
-	 * @param formalNo
-	 * @return
-	 */
-	public List<BpmInstPo> findByDefId(List<String> defIds);
-
-}
+package com.lc.ibps.bpmn.repository;
+
+import java.util.List;
+
+import com.lc.ibps.api.base.page.Page;
+import com.lc.ibps.api.base.query.QueryFilter;
+import com.lc.ibps.base.framework.repository.IRepository;
+import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
+import com.lc.ibps.bpmn.api.model.define.IBpmProcDefine;
+import com.lc.ibps.bpmn.api.model.define.IBpmProcExtendDefine;
+import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
+import com.lc.ibps.bpmn.domain.BpmInst;
+import com.lc.ibps.bpmn.model.statistics.RunningStatVO;
+import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
+
+/**
+ * 流程实例
+ 仓库接口
+ *
+ *<pre> 
+ * 开发公司:广州流辰信息技术有限公司
+ * 开发人员:luodx
+ * 邮箱地址:1198506318@qq.com
+ * 创建时间:2016-12-13 09:25:42
+ *</pre>
+ */
+public interface BpmInstRepository extends IRepository<String, BpmInstPo,BpmInst>{
+	
+	/**
+	 * 构建流程定义标题
+	 * @param bpmDefinition
+	 * @param procInstCmd
+	 * @return 
+	 * String
+	 */
+	String getSubject(IBpmProcDefine<IBpmProcExtendDefine> bpmDefinition, ProcInstCmd procInstCmd,BpmInstPo defaultBpmProcessInstance);
+	
+	/**
+	 * 根据BPMN流程实例获取流程实例数据。
+	 * @param bpmnInstId
+	 * @return 
+	 * DefaultBpmProcessInstance
+	 */
+	BpmInstPo getByInstId(String bpmnInstId);
+	
+	/**
+	 * 
+	 * 根据主键Id获取流程实例,如果实例没有就到结束的流程实例查找
+	 *
+	 * @param procInstId
+	 * @return
+	 */
+	BpmInstPo getBpmInstById(String instId);
+	
+	/**
+	 * 
+	 * 根据主键Id获取结束流程实例历史信息
+	 *
+	 * @param procInstId
+	 * @return
+	 */
+	BpmInstPo getHistoryById(String id);
+	
+	/**
+	 * 
+	 * 根据实例Id获取结束流程实例
+	 *
+	 * @param instId 实例ID
+	 * @return
+	 */
+	BpmInstPo getHistoryByInstId(String instId);
+	
+	/**
+	 * 
+	 * 根据用户ID获取相关流程实例信息 
+	 *
+	 * @param userId 用户ID
+	 * @return
+	 */
+	List<BpmInstPo> findByUserId(String userId);
+	
+	/**
+	 * 
+	 * 根据用户ID和分页信息获取相关流程实例信息
+	 *
+	 * @param userId 用户ID
+	 * @param page 分页
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserId(String userId,Page page);
+	
+	/**
+	 * 
+	 * 根据用户ID和过滤查询条件获取相关流程实例信息
+	 *
+	 * @param userId 用户Id
+	 * @param queryFiler 过滤查询条件
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserId(String userId, QueryFilter queryFiler);
+	
+	/**
+	 * 按用户Id及组列表查找实例
+	 * @param userId
+	 * @param groupList
+	 * @return
+	 */
+	List<BpmInstPo> findByUserIdGroupList(String userId,List<String> groupList);
+	
+	/**
+	 * 按用户Id及组列表查找实例并且分页
+	 * @param userId
+	 * @param groupList
+	 * @param page
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,Page page);
+	
+	/**
+	 * 按用户Id及组列表查找实例并且分页
+	 * @param userId
+	 * @param groupList
+	 * @param page
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,QueryFilter queryFilter);
+	
+	/**
+	 * 按人员查找其参与的流程实例
+	 * @param usreId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByAttendUserId(String usreId);
+	
+	/**
+	 * 按人员查找其参与的流程实例并分页返回结果
+	 * @param usreId
+	 * @param page
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryByAttendUserId(String usreId,Page page);
+	
+	/**
+	 * 根据人员查询并返回查询结果。
+	 * @param usreId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryByAttendUserId(String usreId,QueryFilter queryFilter);
+	
+	/**
+	 * 根据流程定义获取流程实例列表。
+	 * @param bpmnDefId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByBpmnDefKey(String defKey);
+	
+	/**
+	 *  获取我的请求。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryRequest(String userId, QueryFilter queryFilter);
+	
+	Integer queryRequestCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的办结。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	Integer queryCompletedCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的办结。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryCompleted(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我发起的草稿。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryDrafts(String userId,QueryFilter queryFilter);
+	
+	Integer queryDraftsCount(String userId,QueryFilter queryFilter);
+	
+	/**
+	 *  获取已办事宜。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryHandled(String userId, QueryFilter queryFilter);
+	
+	/**
+	 * 根据父ID获取所有的实例子列表。 
+	 * @param parentId	父ID。
+	 * @param includeSelf	是否包括当前实例数据。
+	 * @return 
+	 * List&lt;String>
+	 */
+	List<BpmInstPo> findByParentId(String parentId, boolean includeSelf);
+	
+	/**
+	 * 根据父ID获取所有的实例子列表。 
+	 * @param parentId	父ID。
+	 * @param includeSelf	是否包括当前实例数据。
+	 * @return 
+	 * List&lt;String>
+	 */
+	List<String> findIdsByParentId(String parentId, boolean includeSelf);
+	
+	/**
+	 * 按用户的授权内容去查询列表
+	 * @param queryFilter
+	 * @return
+	 */
+	List<BpmInstPo> query(QueryFilter queryFilter, String curUserId, boolean isSuper);
+	
+	/**
+	 * 按用户的授权内容去统计列表
+	 *
+	 * @param queryFilter
+	 * @return
+	 */
+	List<RunningStatVO> queryRunningStat(QueryFilter queryFilter, String curUserId, boolean isSuper);
+	
+	String cannotDelete(QueryFilter queryFilter, String curUser, String... ids);
+	
+	/**
+	 * 根据流程实例ID查询顶级的流程实例。
+	 * @param instance	
+	 * @return IBpmProcInst
+	 */
+	IBpmProcInst getTopBpmProcInst(String instId);
+	
+	/**
+	 * 根据流程实例查询顶级的流程实例。
+	 * @param instance
+	 * @return IBpmProcInst
+	 */
+	IBpmProcInst getTopBpmProcInst(IBpmProcInst inst);
+	
+	/**
+	 * 根据流程定义ID获取实例列表。
+	 * @param defId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByDefId(String defId);
+
+	
+	/**
+	 * 根据业务主键获取历史的流程实例
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getHistoryByBizKey(String bizKey);
+	
+	/**
+	 * 根据业务主键获取正在运行的流程实例
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getInfoByBizKey(String bizKey);
+	
+	/**
+	 * 我审批过且已经办结的事务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public Integer queryEndHandledCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 * 我审批过且已经办结的事务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryEndHandled(String userId, QueryFilter queryFilter);
+
+	/**
+	 * 
+	 * 根据流程定义key和业务主键获取相关流程实例
+	 *
+	 * @param defKey
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getByDefKeyBizKey(String defKey, String bizKey);
+	
+	/**
+	 * 获得可撤销的任务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryRevoke(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的全部已办事宜。
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	public Integer queryAllHandledCount(QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的全部已办事宜。
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryAllHandled(QueryFilter queryFilter);
+
+	/**
+	 * 
+	 * 根据流程实例id集合获取act流程实例ID列表
+	 *
+	 * @param instIdList
+	 * @return
+	 */
+	public List<String> findInstIdsByIds(List<String> instIdList);
+
+	/**
+	 * 
+	 * 根据流程键和是否正式获取流程实例。
+	 *
+	 * @param defKey
+	 * @param formalNo
+	 * @return
+	 */
+	public List<BpmInstPo> findByDefKeyFormal(String defKey, String formalNo);
+	
+	/**
+	 * 
+	 * 根据流程定义ID查询数据
+	 *
+	 * @param defKey
+	 * @param formalNo
+	 * @return
+	 */
+	public List<BpmInstPo> findByDefId(List<String> defIds);
+
+
+	public BpmInstPo getById(String id);
+
+}

+ 3 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmTaskRepository.java

@@ -263,5 +263,8 @@ public interface BpmTaskRepository extends IRepository<String, BpmTaskPo,BpmTask
 	 * @since 3.2.4
 	 */
 	public Integer queryByShiftCount(QueryFilter queryFilter);
+
+
+	public void removeById(String ids);
 	
 }

+ 6 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmInstRepositoryImpl.java

@@ -801,4 +801,10 @@ public class BpmInstRepositoryImpl extends AbstractRepository<String, BpmInstPo,
 		return findByKey("findIdsByDefId", "findIdsByDefId", b().a("defIds", defIds).p());
 	}
 
+	@Override
+	public BpmInstPo  getById(String id) {
+		BpmInstPo po = new BpmInstPo();
+		List<BpmInstPo> poList = findByKey("getById", "getById", b().a("id", id).p());
+		return poList.size() > 0 ? poList.get(0):po;
+	}
 }

+ 5 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmTaskRepositoryImpl.java

@@ -515,4 +515,9 @@ public class BpmTaskRepositoryImpl extends AbstractRepository<String, BpmTaskPo,
 		return bpmTaskQueryDao().countByKey(countSqlKey, queryFilter.getParams());
 	}
 
+	@Override
+	public void removeById(String ids) {
+		findByKey("removeById", "removeById",
+				b().a("ids", ids).p());
+	}
 }

+ 11 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/service/impl/BpmProcInstServiceImpl.java

@@ -75,6 +75,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 
 /**
  * 流程实例服务类
@@ -122,6 +123,11 @@ public class BpmProcInstServiceImpl implements BpmProcInstService {
 			throw new RuntimeException("流程实例命令对象为空!");
 		}
 
+		BpmInstPo instPo = bpmInstRepository.getById(procInstCmd.getInstId());
+		if(BeanUtils.isNotEmpty(instPo) && "running".equals(instPo.getStatus())){
+			logger.warn("当前数据已提交流程审批,无需重复提交,ID:" + instPo.getId());
+			throw new RuntimeException("当前数据已有对应的流程数据,无需重复提交");
+		}
 		String step = "startProcInst";
 		String stepId = UniqueIdUtil.getId();
 		// 主键从cmd中获取
@@ -785,6 +791,11 @@ public class BpmProcInstServiceImpl implements BpmProcInstService {
 					logger.info(String.format("deleted process instance history with id %s",hisPo.getId()));
 				}
 			}
+				List<String> taskList = new ArrayList<>();
+				taskList.add(bizKey);
+				//执行删除task的数据
+				List<BpmTaskPo> taskPoList = bpmTaskRepository.findByInst(taskList);
+				bpmTaskRepository.removeById(taskPoList.stream().map(BpmTaskPo::getId).collect(Collectors.joining(",")));
 		}
 
 	}

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

@@ -936,5 +936,11 @@
         	#{defId} 
     	</foreach>
 	</select>
+
+	<select id="getById" parameterType="java.util.Map" resultMap="BpmInstPo">
+		SELECT <include refid="columns"/>
+		FROM IBPS_BPM_INST
+		WHERE ID_ = #{id,jdbcType=VARCHAR}
+	</select>
 	
 </mapper>

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

@@ -106,6 +106,15 @@
 			${limitSql}
 		</if> -->
 	</delete>
+
+	<delete id="removeById" parameterType="java.lang.String">
+		DELETE FROM IBPS_BPM_TASKS
+		WHERE
+		<if test="@o.Ognl@isNotEmpty(ids)">
+			FIND_IN_SET(ID_, #{ids,jdbcType=VARCHAR})
+		</if>
+	</delete>
+
 	
 	<sql id="querySql">
 		SELECT <include refid="queryColumns"/> FROM IBPS_BPM_TASKS 

+ 17 - 0
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/office/provider/BpmInitiatedProvider.java

@@ -11,6 +11,9 @@ import javax.annotation.Resource;
 
 import com.lc.ibps.base.core.util.Collections;
 import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.bpmn.service.impl.BpmProcInstServiceImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.slf4j.event.Level;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -90,6 +93,8 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 	private ITypeService typeService;
 	@Autowired
 	private IBpmReceivedService bpmReceivedService;
+
+	private static final Logger logger = LoggerFactory.getLogger(BpmInitiatedProvider.class);
 	
 	@ApiOperation(value = "流程仪表盘", notes = "流程仪表盘")
 	@Override
@@ -1427,6 +1432,18 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 		try {
 			//构造领域对象和删除数据
 			BpmInst bpmInst = bpmInstRepository.newInstance();
+			for (String item:ids) {
+				BpmInstPo instPo = bpmInstRepository.getById(item);
+				if(BeanUtils.isNotEmpty(instPo) && "draft".equals(instPo.getStatus())){ //首页删除暂存时先判断当前数据是否已经在其他窗口提交了,防止多流程对应同主键
+					logger.warn("当前暂存数据可以进行删除,ID:" + instPo.getId());
+				}else{
+					result.setMessage("当前选择数据中有已提交的数据,请刷新后在操作");
+					logger.warn("当前暂存数据不可以进行删除,ID:" + instPo.getId());
+					result.setState( StateEnum.WARN.getCode());
+					return result;
+					//throw new Exception("当前选择数据中有已提交的数据,请刷新后在操作");
+				}
+			}
 			bpmInst.deleteByIds(ids);
 			result.setMessage(I18nUtil.getMessage("com.lc.ibps.office.provider.BpmInitiatedProvider.removeDraft"));
 		} catch (Exception e) {