Parcourir la source

首页暂存事宜双页面提交保存问题调整

wy il y a 6 mois
Parent
commit
dfe8feaa68

+ 1 - 0
ibps-api-root/modules/api-base/src/main/java/com/lc/ibps/api/base/constants/StateEnum.java

@@ -138,6 +138,7 @@ public enum StateEnum /*implements BaseEnum*/ {
 
 	, ERROR_BPMN_TASK(6050300, "流程任务异常")
 	, ERROR_BPMN_NO_TASK(6050301, "流程任务不存在或已被办理")
+	, ERROR_BPMN_DEALT_WITH(6000001, "流程任务不存在或已被办理")
 	, ERROR_BPMN_LOCKED_TASK(6050302, "流程任务被锁定")
 	, ERROR_BPMN_SUSPEND_TASK(6050303, "流程实例被挂起")
 	, ERROR_BPMN_PERMISSION_TASK(6050304, "流程任务无权限")

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

@@ -358,4 +358,7 @@ public interface BpmInstRepository extends IRepository<String, BpmInstPo,BpmInst
 
 	public BpmInstPo getById(String id);
 
+
+	public BpmInstPo getByIdAndBiz(String id,String biz);
+
 }

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

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

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

@@ -942,5 +942,11 @@
 		FROM IBPS_BPM_INST
 		WHERE ID_ = #{id,jdbcType=VARCHAR}
 	</select>
+
+	<select id="getByIdAndBiz" resultMap="BpmInstPo">
+		SELECT <include refid="columns"/>
+		FROM IBPS_BPM_INST
+		WHERE ID_ = #{id} AND BIZ_KEY_ = #{biz} AND STATUS_ = 'running'
+	</select>
 	
 </mapper>

+ 27 - 1
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/bpmn/provider/BpmInstProvider.java

@@ -10,7 +10,11 @@ import javax.annotation.Resource;
 
 import com.lc.ibps.api.base.model.DefaultNoneUser;
 import com.lc.ibps.form.data.exception.DataException;
+import com.lc.ibps.office.provider.BpmInitiatedProvider;
 import org.activiti.engine.ActivitiException;
+import org.codehaus.jackson.map.ObjectMapper;
+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;
@@ -132,7 +136,9 @@ import net.sf.json.JSONObject;
 @Api(tags = "流程实例", value = "流程实例控制类")
 @Service
 public class BpmInstProvider extends GenericProvider implements IBpmInstService, IBpmInstMgrService {
-	
+
+	private static final Logger logger = LoggerFactory.getLogger(BpmInstProvider.class);
+
 	@Resource
 	private BpmInstRepository bpmInstRepository;
 	@Resource
@@ -278,6 +284,26 @@ public class BpmInstProvider extends GenericProvider implements IBpmInstService,
 		APIResult<Void> result = new APIResult<>();
 		try {
 			IbpsProcInstCmd cmd = this.getStartCmd(request);
+			String instId = cmd.getInstId(); //流程实例id
+			String id = "";
+			String businessKey = cmd.getBusData();
+			try {
+				ObjectMapper objectMapper = new ObjectMapper();
+				Map map = objectMapper.readValue(businessKey, Map.class);
+				id = map.get("id").toString();
+			}catch (Exception e){
+				logger.warn("流程实例数据转map失败");
+			}
+			if(BeanUtils.isNotEmpty(instId) && BeanUtils.isNotEmpty(id) ){ //流程实例id和boid均不为空则进行判断
+				BpmInstPo byIdAndBiz = bpmInstRepository.getByIdAndBiz(instId, id);
+				if(BeanUtils.isNotEmpty(byIdAndBiz) && instId.equals(byIdAndBiz.getId()) && id.equals(byIdAndBiz.getBizKey())){
+					//相同即表示同一条数据
+					logger.warn("当前选择数据已经提交,请确认后操作");
+					result.setMessage("当前选择数据中有已提交的数据,请刷新后在操作");
+					result.setState( StateEnum.WARN.getCode());
+					return result;
+				}
+			}
 			IBpmProcInst procInst = bpmProcInstService.saveDraft(cmd);
 			result.setMessage(I18nUtil.getMessage("com.lc.ibps.bpmn.provider.BpmInstProvider.saveDraft"));
 			result.addVariable("proInstId", procInst.getId());

+ 3 - 0
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/bpmn/provider/BpmTaskProvider.java

@@ -2812,6 +2812,9 @@ public class BpmTaskProvider extends GenericProvider implements IBpmTaskService,
 		catch (HandlingTaskException e) {
 			setExceptionResult(result, StateEnum.ERROR_BPMN_HANDLING_TASK.getCode(), I18nUtil.getMessage(StateEnum.ERROR_BPMN_HANDLING_TASK.getCode()+""), e);
 		}
+		catch (RuntimeException e) { //提示信息更全
+			setExceptionResult(result, StateEnum.ERROR_BPMN_DEALT_WITH.getCode(), I18nUtil.getMessage(StateEnum.ERROR_BPMN_HANDLING_TASK.getCode()+""), e);
+		}
 		catch (Exception e) {
 			setExceptionResult(result, StateEnum.ERROR_BPMN_TASK.getCode(), I18nUtil.getMessage(StateEnum.ERROR_BPMN_TASK.getCode()+""), e);
 		}