// Terminate public static FlowActionRequest PostFlowActionTerminate( string clientRequestGuid, string bizDocumentGuid, string bizDocumentTypeCode, DateTime bizTimeStamp, string userMemo, string bizDataPayloadJson, string optionalFlowActionDataJson, int userId, // 执行人员 string userGuid, int flowInstanceId, string flowInstanceGuid, string code, string currentActivityGuid, // 当前所处的活动状态 string nextActivityGuid, // 接办人选择的目标活动 int?delegateeUserId, string delegateeUserGuid ) { // 未通过合法性检查直接返回 if (!preValidate(clientRequestGuid)) { return(null); } var incomingReq = new FlowActionTerminate( clientRequestGuid, bizDocumentGuid, bizDocumentTypeCode, bizTimeStamp, userMemo, bizDataPayloadJson, optionalFlowActionDataJson, userId, userGuid, flowInstanceId, flowInstanceGuid, code, currentActivityGuid, nextActivityGuid, delegateeUserId, delegateeUserGuid); return(saveToDB(incomingReq)); }
public FlowActionTerminateResult // teminate processActionRequest(FlowActionTerminate req) { var concreteMetaObj = req.concreteMetaObj; using (var db = new EnouFlowInstanceContext()) { var flowInst = getFlowInstance(db, req.flowInstanceId, req.bizDocumentGuid); var reqInDb = getReqInDB(req.flowActionRequestId, db); string failReason; DateTime bizTimeStampToUse = DateTime.Now; var flowDefHelper = new FlowTemplateDefHelper( flowInst.flowTemplateJson); var toActivity = flowDefHelper.getNodeFromGuid(req.nextActivityGuid); var currentActivity = flowDefHelper.getNodeFromGuid(req.currentActivityGuid); #region update instance switch (toActivity.type) { case ActivityTypeString.standard_End: flowInst.lifeState = EnumFlowInstanceLifeState.terminated; break; default: throw new EnouFlowInstanceLib.DataLogicException( $"不能终止到非停止状态的活动类型: {toActivity.type}"); } var originBizTimeStamp = flowInst.bizTimeStamp; flowInst.bizTimeStamp = bizTimeStampToUse; flowInst.currentActivityGuid = toActivity.guid; flowInst.currentActivityName = toActivity.name; flowInst.previousActivityGuid = currentActivity.guid; flowInst.previousActivityName = currentActivity.name; #endregion #region update tasks for user status like taskState,finishTime updateTaskForUserStatesAfterAction(db, (int)concreteMetaObj.userId, originBizTimeStamp, bizTimeStampToUse, flowInst.previousActivityGuid, flowInst, reqInDb); #endregion #region write 3 type logs: FlowInstanceFriendlyLog & FlowInstanceTechLog addFlowInstanceFriendlyLog( flowInst, reqInDb.flowActionRequestId, flowInst.previousActivityName, reqInDb.userId.Value, reqInDb.delegateeUserId, "终止/Terminate", req.userMemo, db); #warning TODO: another 2 type logs #endregion #region update request updateRequestToSuccess(reqInDb, flowInst); #endregion #region save all to db db.SaveChanges(); #endregion return(new FlowActionTerminateResult(req.flowActionRequestId, req.clientRequestGuid, flowInst)); } }