/// <summary> /// 审批组件任务办理时调用(现在流程中没有判断杜绝多个审批节点执行,所以如果单据已审批就修改审批人、审批时间) /// </summary> /// <param name="ec"></param> public void Approve(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更改状态为:审批中 mst.Data.FApproveStatus = Convert.ToInt32(EnumApproveStatus.Approved).ToString(); mst.Data.FApproveDate = DateTime.Today; mst.Data.FApprover = base.UserID; CurrentRule.Update <Int64>(mst.Data); //用 FlowEnd(), 在流程结束时进行操作(approve 方法 在进行审批节点后就会调用,可能存在多个审批节点) //long phid = Convert.ToInt64(ec.BillInfo.PK1); //var mst = base.Find(phid); ////更新状态为已审批 //if (mst.Data.FApproveStatus != Convert.ToInt32(EnumApproveStatus.Approved).ToString()) //{ // //审批完成时,项目状态为预立项,则项目状态改为立项,审批状态改为未审批 // if (mst.Data.FProjStatus == 1) // { // mst.Data.FApproveStatus = Convert.ToInt32(EnumApproveStatus.ToBeRepored).ToString(); // mst.Data.FProjStatus = 2; // } // else // { // mst.Data.FApproveStatus = Convert.ToInt32(EnumApproveStatus.Approved).ToString(); // } // mst.Data.FApproveDate = DateTime.Now; // mst.Data.FApprover = base.UserID; // CurrentRule.Update<Int64>(mst.Data); //} }
public object Approve(JObject paramJo) { string jsonStr = string.Empty; try { //var bizdata = paramJo["bizdata"].IsNullOrEmpty() == false ? (string)paramJo["bizdata"] : string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); ec.IsMobile = true; if (string.IsNullOrEmpty(ec.Remark)) { ec.Remark = "同意"; } //service.SaveMobileBizData(ec, bizdata); service.ExecuteTaskComplete(ec); return(AppJsonHelper.ConvertResultToJson(true, string.Empty)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public object Transmit(JObject paramJo) { try { string newusercode = !paramJo["transmituser"].IsNullOrEmpty() ? (string)paramJo["transmituser"] : string.Empty; if (string.IsNullOrEmpty(newusercode)) { throw new Exception("未设置转签人员"); } WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); if (string.IsNullOrEmpty(ec.Remark)) { ec.Remark = "转签"; } ec.IsMobile = true; service.ExecuteTaskReassign(ec, newusercode); return(AppJsonHelper.ConvertResultToJson(true, string.Empty)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public object AddTis(JObject paramJo) { try { List <string> userList = new List <string>(); //var bizData = paramJo["bizdata"].IsNullOrEmpty() == false ? (string)paramJo["bizdata"] : string.Empty; var users = paramJo["users"].IsNullOrEmpty() == false ? (string)paramJo["users"] : string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); ec.IsMobile = true; if (string.IsNullOrEmpty(ec.Remark)) { ec.Remark = "加签"; } string[] str = users.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); userList.AddRange(str); //service.SaveMobileBizData(ec, bizData); service.ExecuteAddSubTasks(ec, userList); return(AppJsonHelper.ConvertResultToJson(true, string.Empty)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public object RollBack(JObject paramJo) { try { //var bizData = paramJo["bizdata"].IsNullOrEmpty() == false ? (string)paramJo["bizdata"] : string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); if (string.IsNullOrEmpty(ec.RollBackNodeID)) { throw new Exception("未指定回退节点"); } ec.IsMobile = true; if (string.IsNullOrEmpty(ec.Remark)) { ec.Remark = "不同意"; } //service.SaveMobileBizData(ec, bizData); service.ExecuteRollBack(ec); return(AppJsonHelper.ConvertResultToJson(true, string.Empty)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public object CheckCancelApproveValid() { JObject rst = new JObject(); string taskid = System.Web.HttpContext.Current.Request.Params["taskid"] ?? string.Empty; string piid = System.Web.HttpContext.Current.Request.Params["piid"] ?? string.Empty; try { NG3.WorkFlow.Engine.Models.ProcInstTraceEntity piEntity; try { DbHelper.Open(); piEntity = WorkFlowDac.Instance.GetProcInstTraceEntity(piid); } finally { DbHelper.Close(); } WorkFlowExecutionContext ec = new WorkFlowExecutionContext(piEntity.BillInfo); ec.TaskId = taskid; ec.PiId = piid; ec.IsMobile = true; ApproveValidResult r = service.CheckCancelApproveValid(ec); rst.Add("result", (int)r.ValidResult); rst.Add("msg", r.Msg); rst.Add("success", true); } catch (Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } return(rst); }
public object CheckBizSaveByMobileApp(JObject paramJo) { string jsonStr = string.Empty; try { var bizdata = paramJo["bizdata"].IsNullOrEmpty() == false ? (string)paramJo["bizdata"] : string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); ec.IsMobile = true; var resp = service.CheckBizSaveByMobileApp(ec, bizdata); string status = "ok"; if (resp.ValidResult == ApproveValidType.No) { status = "no"; } else if (resp.ValidResult == ApproveValidType.Clew) { status = "clew"; } JObject data = new JObject(); data.Add("status", status); data.Add("msg", resp.Msg); return(data); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public bool SaveBizDataByMobileApp(WorkFlowExecutionContext ec, Dictionary <string, string> jsonData) { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string tableNameM = "p_form" + eformid + "_m"; string tableNameD = "p_form" + eformid + "_d"; if (jsonData.ContainsKey(tableNameM) && !string.IsNullOrEmpty(jsonData[tableNameM].ToString())) { DataTable dtM = DataConverterHelper.ToDataTable(jsonData[tableNameM].ToString(), string.Format("select * from {0}", tableNameM)); DbHelper.Update(dtM, string.Format("select * from {0}", tableNameM)); } //获取所有明细表dt DataTable detailList = DbHelper.GetDataTable(string.Format("select tname from ctl_tbl where tname like '{0}%'", tableNameD)); if (detailList != null && detailList.Rows.Count > 0) { DataTable[] dtD = new DataTable[detailList.Rows.Count]; for (int i = 0; i < detailList.Rows.Count; i++) { tableNameD = detailList.Rows[i]["tname"].ToString(); if (jsonData.ContainsKey(tableNameD) && !string.IsNullOrEmpty(jsonData[tableNameD].ToString())) { dtD[i] = DataConverterHelper.ToDataTable(jsonData[tableNameD].ToString(), string.Format("select * from {0}", tableNameD)); DbHelper.Update(dtD[i], string.Format("select * from {0}", tableNameD)); } } } return(true); }
public object CreateProcessInstance(JObject paramJo) { JObject rst = new JObject(); try { string flowdesc = paramJo["flowdesc"].IsNullOrEmpty() ? string.Empty : (string)paramJo["flowdesc"]; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); ec.IsMobile = true; string orgId = paramJo["orgId"].IsNullOrEmpty() ? string.Empty : (string)paramJo["orgId"]; if (!string.IsNullOrEmpty(orgId)) { ec.OrgId = orgId; } string piid = service.CreateProcessInstance(ec, 50, flowdesc); rst.Add("success", true); rst.Add("piid", piid); } catch (Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } return(rst); }
/// <summary> /// 流程发起时调用(一般用于修改表单状态为送审中、或是维护表单已挂工作流) /// </summary> /// <param name="ec"></param> public void FlowStart(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更改状态为:审批中 mst.Data.FApprovestatus = Convert.ToInt32(EnumApproveStatus.IsPending).ToString(); mst.Data.FApprovedate = DateTime.Now; //mst.Data.FDateofdeclaration = DateTime.Now; CurrentRule.Update <Int64>(mst.Data); }
//审批 public void Approve(WorkFlowExecutionContext ec) { string phid = ec.BillInfo.PK1; IUserFacade facade = new SpringObject().GetObject <IUserFacade>("DMC3.Rights.Facade.User"); List <UserApproveRightsModel> userApproveRights = new List <UserApproveRightsModel>(); string billno = dac.GetHrRightApplyBillNo(phid); DataTable applicantDt = dac.GetApplicantDt(billno); for (int i = 0; i < applicantDt.Rows.Count; i++) { UserApproveRightsModel model = new UserApproveRightsModel(); model.LoginOrgs = new List <long>(); model.InfoOrgs = new List <long>(); model.UserOrgRoles = new List <UserApproveRightsModel.UserOrgRole>(); model.HrId = long.Parse(applicantDt.Rows[i]["hrid"].ToString()); model.UserId = long.Parse(applicantDt.Rows[i]["userid"].ToString()); model.DeptId = long.Parse(dac.GetApplicantDeptId(model.HrId)); DataTable OrgDt = GetOrgInfo(model.UserId.ToString(), billno); for (int j = 0; j < OrgDt.Rows.Count; j++) { if ((bool)OrgDt.Rows[j]["select"] == true) { long orgid = long.Parse(OrgDt.Rows[j]["orgid"].ToString()); if (OrgDt.Rows[j]["applicantorg"].ToString() == "登录组织/信息组织") { model.LoginOrgs.Add(orgid); model.InfoOrgs.Add(orgid); } else if (OrgDt.Rows[j]["applicantorg"].ToString() == "信息组织") { model.InfoOrgs.Add(orgid); } } } DataTable roleDt = dac.GetRoleDtByBillNoNUserId(billno, model.UserId.ToString()); for (int k = 0; k < roleDt.Rows.Count; k++) { UserApproveRightsModel.UserOrgRole userOrgRole = new UserApproveRightsModel.UserOrgRole(); userOrgRole.OrgId = long.Parse(roleDt.Rows[k]["orgid"].ToString()); userOrgRole.RoleId = long.Parse(roleDt.Rows[k]["roleid"].ToString()); model.UserOrgRoles.Add(userOrgRole); } userApproveRights.Add(model); } facade.SaveUserApproveRights(userApproveRights); dac.UpdateWorkFlowCheckPsnDate(ec.BillInfo.PK1); }
/// <summary> /// 流程被终止时调用 /// </summary> /// <param name="ec"></param> public void FlowAbort(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更新状态为待上报 mst.Data.FApprovestatus = Convert.ToInt32(EnumApproveStatus.ToBeRepored).ToString(); mst.Data.FProjstatus = 1;//项目立项审批驳回-->从预立项从新修改,发起;状态默认预立项; //mst.Data.FDateofdeclaration = new Nullable<DateTime>(); mst.Data.FApprovedate = new Nullable <DateTime>(); CurrentRule.Update <Int64>(mst.Data); }
public void FlowAbort(WorkFlowExecutionContext ec) { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string tableName = "p_form" + eformid + "_m"; string code = ec.BillInfo.PK1; string checkUserID = ec.UserId; //送审人 string sql = string.Format("update " + tableName + " set is_wf=2 where phid={0}", code); int iret = DbHelper.ExecuteNonQuery(string.Format(sql)); }
/// <summary> /// 审批节点回退时调用进行单据取消审批操作 /// </summary> /// <param name="ec"></param> public void CancelApprove(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更新状态为审批中 mst.Data.FApprovestatus = Convert.ToInt32(EnumApproveStatus.IsPending).ToString(); // mst.Data.FDateofdeclaration = new Nullable<DateTime>(); mst.Data.FApprovedate = new Nullable <DateTime>(); CurrentRule.Update <Int64>(mst.Data); //throw new NotImplementedException(); }
/// <summary> /// 流程结束时调用 /// </summary> /// <param name="ec"></param> public void FlowEnd(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更新状态为已审批 if (mst.Data.FApprovestatus != Convert.ToInt32(EnumApproveStatus.Approved).ToString()) { mst.Data.FApprovestatus = Convert.ToInt32(EnumApproveStatus.Approved).ToString(); } mst.Data.FApprovedate = DateTime.Today; mst.Data.FApprover = base.UserID; CurrentRule.Update <Int64>(mst.Data); }
public object SaveBizDataByMobillApp(JObject paramJo) { string jsonStr = string.Empty; try { var bizdata = paramJo["bizdata"].IsNullOrEmpty() == false ? (string)paramJo["bizdata"] : string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.LoadFormJson(paramJo); ec.IsMobile = true; service.SaveMobileBizData(ec, bizdata); return(AppJsonHelper.ConvertResultToJson(true, string.Empty)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
//审批 public void Approve(WorkFlowExecutionContext ec) { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string tableName = "p_form" + eformid + "_m"; string code = ec.BillInfo.PK1; string checkUserID = ec.UserId; //送审人 string pform = "pform" + eformid; if (ec.BizAttachData != null) { new ServerFuncParserRule().FuncParser(pform, JsonConvert.SerializeObject(ec.BizAttachData)); } string sql = string.Format("update " + tableName + " set ischeck=1, checkpsn='{0}', check_dt='{1}' where phid={2}", checkUserID, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), code); int iret = DbHelper.ExecuteNonQuery(sql); }
public BizToPdfEntity GetBizToPdfEntity(WorkFlowExecutionContext ec) { try { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string tableNameM = "p_form" + eformid + "_m"; string tableNameD = "p_form" + eformid + "_d"; string code = ec.BillInfo.PK1; DataSet ds = new DataSet(); DataTable dtM = DbHelper.GetDataTable(string.Format("select * from {0} where phid={1}", tableNameM, code)); dtM.TableName = tableNameM; ds.Tables.Add(dtM); //获取所有明细表dt DataTable detailList = DbHelper.GetDataTable(string.Format("select tname from ctl_tbl where tname like '{0}%'", tableNameD)); if (detailList != null && detailList.Rows.Count > 0) { DataTable[] dtD = new DataTable[detailList.Rows.Count]; for (int i = 0; i < detailList.Rows.Count; i++) { dtD[i] = DbHelper.GetDataTable(string.Format("select * from {0} where m_code={1}", detailList.Rows[i]["tname"].ToString(), code)); dtD[i].TableName = detailList.Rows[i]["tname"].ToString() + "grid"; ds.Tables.Add(dtD[i]); } } BizToPdfEntity btpEntity = new BizToPdfEntity(); btpEntity.DataSource = ds; btpEntity.TemplateId = bizID; return(btpEntity); } catch (Exception e) { string msgStr = "GetBizToPdfEntity:" + e.Message + "\r\n\r\n" + e.StackTrace; Logger.Error(msgStr); //throw new Exception(msgStr); return(null); } }
public object GetDesignateInfo([FromUri] ProcessDefModel paramters) { try { string billtype = paramters.billtype ?? string.Empty; string billcode = paramters.billcode ?? string.Empty; string pdid = paramters.pdid ?? string.Empty; WorkFlowBizInfo biz = new WorkFlowBizInfo(billtype, billcode); WorkFlowExecutionContext ec = new WorkFlowExecutionContext(biz); ec.PdId = pdid; ec.UserId = paramters.userid; ec.IsMobile = true; return(service.GetDynamicInfo(ec, true)); } catch (System.Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public object Drawback() { try { bool temp = false; string piid = System.Web.HttpContext.Current.Request.Params["piid"] ?? string.Empty; WorkFlowExecutionContext ec = new WorkFlowExecutionContext(); ec.PiId = piid; ec.UserId = NG3.AppInfoBase.UserID.ToString(); service.ExecuteTaskRetrieve(ec, ec.UserId); temp = true; return(new JObject() { { "result", temp } }); } catch (Exception ex) { return(DCHelper.ErrorMessage(ex.Message)); } }
public void CancelApprove(WorkFlowExecutionContext ec) { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string tableName = "p_form" + eformid + "_m"; string code = ec.BillInfo.PK1; string pform = "pform" + eformid; if (ec.BizAttachData != null) { string funcname = ec.BizAttachData["funcname"].ToString(); if (funcname == "@@##") { throw new Exception("取消审批"); } new ServerFuncParserRule().FuncParser(pform, JsonConvert.SerializeObject(ec.BizAttachData)); } string sql = string.Format("update " + tableName + " set ischeck=0, checkpsn='', check_dt=null where phid={0}", code); int iret = DbHelper.ExecuteNonQuery(sql); }
/// <summary> /// 流程结束时调用 /// </summary> /// <param name="ec"></param> public void FlowEnd(WorkFlowExecutionContext ec) { long phid = Convert.ToInt64(ec.BillInfo.PK1); var mst = base.Find(phid); //更新状态为已审批 if (mst.Data.FApproveStatus != Convert.ToInt32(EnumApproveStatus.Approved).ToString()) { mst.Data.FApproveStatus = Convert.ToInt32(EnumApproveStatus.Approved).ToString(); mst.Data.FApproveDate = DateTime.Today; mst.Data.FApprover = base.UserID; CurrentRule.Update <Int64>(mst.Data); } //调整单据审批结束将原调整中改为调整完成 if (mst.Data.FType == "tz") { Dictionary <string, object> dicWhere = new Dictionary <string, object>(); new CreateCriteria(dicWhere) .Add(ORMRestrictions <string> .Eq("FDeclarationDept", mst.Data.FDeclarationDept)) .Add(ORMRestrictions <string> .Eq("FProjAttr", mst.Data.FProjAttr)) .Add(ORMRestrictions <string> .Eq("FApproveStatus", "6")); IList <GHSubjectModel> models = GHSubjectRule.Find(dicWhere); if (models.Count > 0) { foreach (GHSubjectModel a in models) { a.FApproveStatus = "7"; //a.PersistentState = PersistentState.Modified; CurrentRule.Update <Int64>(a); } //GHSubjectRule.Save(models, ""); //CurrentRule.Update<Int64>(models); } } //throw new NotImplementedException(); }
public ApproveValidResult CheckCancelApproveValid(WorkFlowExecutionContext ec) { return(ApproveValidResult.Create(ApproveValidType.Yes, string.Empty)); }
public ApproveValidResult CheckBizSaveByMobileApp(WorkFlowExecutionContext executionContext, Dictionary <string, string> jsonData) { return(ApproveValidResult.DefaultValue); }
public List <BizAttachment> GetBizAttachment(WorkFlowExecutionContext ec) { string bizID = ec.BillInfo.BizID; //业务类型EFORM0000000130 string eformid = bizID.Substring(5); string code = ec.BillInfo.PK1; string tableNameM = "p_form" + eformid + "_m"; string tableNameD = "p_form" + eformid + "_d"; List <BizAttachment> lbizatts = new List <BizAttachment>(); //主表附件 DataTable mstattdt = DbHelper.GetDataTable(string.Format(@"select * from attachment_record where asr_attach_table = 'c_pfc_attachment' and asr_table = '{0}' and asr_code = '{1}'", tableNameM, code)); if (mstattdt != null && mstattdt.Rows.Count > 0) { foreach (DataRow row in mstattdt.Rows) { BizAttachment mstbizatt = new BizAttachment(); mstbizatt.AsrAttachTable = "c_pfc_attachment"; mstbizatt.AsrCode = code; mstbizatt.AsrTable = tableNameM; mstbizatt.AttachName = row["asr_name"].ToString(); mstbizatt.AttachSize = Convert.ToSingle(row["asr_size"]); mstbizatt.AttachTime = Convert.ToDateTime(row["asr_filldt"]); lbizatts.Add(mstbizatt); } } //明细表附件 DataTable detailList = DbHelper.GetDataTable(string.Format("select tname from ctl_tbl where tname like '{0}%'", tableNameD)); //获取所有明细表dt if (detailList != null && detailList.Rows.Count > 0) { DataTable[] dtD = new DataTable[detailList.Rows.Count]; //所有明细表数据 DataTable[] detattdt = new DataTable[detailList.Rows.Count]; //每张明细表附件数据 for (int i = 0; i < detailList.Rows.Count; i++) { tableNameD = detailList.Rows[i]["tname"].ToString(); dtD[i] = DbHelper.GetDataTable(string.Format("select phid from {0} where m_code = {1}", tableNameD, code)); if (dtD[i] != null && dtD[i].Rows.Count > 0) { string detasrcodes = string.Empty; foreach (DataRow row in dtD[i].Rows) { detasrcodes += "'" + row["phid"].ToString() + "'" + ","; } detasrcodes = detasrcodes.TrimEnd(','); detattdt[i] = DbHelper.GetDataTable(string.Format(@"select * from attachment_record where asr_attach_table = 'c_pfc_attachment' and asr_table = '{0}' and asr_code in ({1})", tableNameD, detasrcodes)); foreach (DataRow row in detattdt[i].Rows) { BizAttachment detbizatt = new BizAttachment(); detbizatt.AsrAttachTable = "c_pfc_attachment"; detbizatt.AsrCode = row["asr_code"].ToString(); detbizatt.AsrTable = tableNameD; detbizatt.AttachName = row["asr_name"].ToString(); detbizatt.AttachSize = Convert.ToSingle(row["asr_size"]); detbizatt.AttachTime = Convert.ToDateTime(row["asr_filldt"]); lbizatts.Add(detbizatt); } } } } return(lbizatts); }
public void EditUserTaskComplete(string compId, WorkFlowExecutionContext ec) { }
public virtual WorkFlowExecutionResult OnExecuted(WorkFlowExecutionContext context, WorkFlowExecutionResult result) { return(result); }
/// <summary> /// 获取单据附用(用于App端) /// </summary> /// <param name="executionContext"></param> /// <returns></returns> public List <BizAttachment> GetBizAttachment(WorkFlowExecutionContext executionContext) { return(new List <BizAttachment>()); }
/// <summary> /// app端办理时如果修改了单据内容则调用该方法进行单据保存。 /// </summary> /// <param name="executionContext"></param> /// <param name="jsonData"></param> /// <returns></returns> public bool SaveBizDataByMobileApp(WorkFlowExecutionContext executionContext, Dictionary <string, string> jsonData) { return(true); //throw new NotImplementedException(); }
/// <summary> /// 执行工作流 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task <WorkFlowExecutionResult> ExecuteAsync(WorkFlowExecutionContext context) { var result = new WorkFlowExecutionResult(); OnExecuting(context, result); _eventPublisher.Publish(new WorkFlowExecutingEvent { Context = context }); try { _workFlowInstanceService.BeginTransaction(); //更新当前步骤处理状态 _workFlowProcessUpdater.Update(n => n .Set(f => f.StateCode, context.ProcessState) .Set(f => f.HandleTime, DateTime.Now) .Set(f => f.Description, context.Description) .Set(f => f.Attachments, context.Attachments) .Where(f => f.WorkFlowProcessId == context.ProcessInfo.WorkFlowProcessId) ); //上传附件 await _attachmentCreater.CreateManyAsync(context.EntityMetaData.EntityId, context.ProcessInfo.WorkFlowProcessId, context.AttachmentFiles).ConfigureAwait(false); //更新当前步骤其他处理者状态 _workFlowProcessUpdater.Update(n => n .Set(f => f.StateCode, WorkFlowProcessState.Disabled) .Where(f => f.WorkFlowInstanceId == context.ProcessInfo.WorkFlowInstanceId && f.StepOrder == context.ProcessInfo.StepOrder && f.WorkFlowProcessId != context.ProcessInfo.WorkFlowProcessId) ); var nextI = context.ProcessInfo.StepOrder + 1; var nextSteps = _workFlowProcessFinder.Query(n => n.Where(f => f.WorkFlowInstanceId == context.ProcessInfo.WorkFlowInstanceId && f.StepOrder == nextI)); //如果到了最后一个环节 if (nextSteps.IsEmpty()) { //如果同意 if (context.ProcessState == WorkFlowProcessState.Passed) { //更新单据状态为审批通过 //_workFlowProcessUpdater.UpdateObjectProcessState(context.EntityMetaData, context.InstanceInfo.ObjectId, context.ProcessState); //更新本次申请状态为完成 _workFlowInstanceService.Update(n => n .Set(f => f.StateCode, context.ProcessState) .Set(f => f.CompletedOn, DateTime.Now) .Where(f => f.WorkFlowInstanceId == context.InstanceInfo.WorkFlowInstanceId) ); } //如果驳回 else if (context.ProcessState == WorkFlowProcessState.UnPassed) { //var steps = this.Query(n => n.Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId)); ////第一步 //if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.FirstStep) //{ // //重新生成审批步骤 // steps.ForEach((n) => // { // n.WorkFlowProcessId = Guid.NewGuid(); // n.Attachments = 0; // n.Description = string.Empty; // n.CreatedOn = DateTime.Now; // n.HandleTime = null; // n.StartTime = DateTime.Now; // n.StateCode = WorkFlowProcessState.Waiting; // }); // this.CreateMany(steps); //} ////上一步 //else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.PrevStep) //{ // var newSteps = new List<WorkFlowProcess>(); // //重新生成上一步、当前步的审批步骤 // var prevStep = steps.Find(n => n.StepOrder == context.ProcessInfo.StepOrder - 1); // prevStep.WorkFlowProcessId = Guid.NewGuid(); // prevStep.Attachments = 0; // prevStep.Description = string.Empty; // prevStep.CreatedOn = DateTime.Now; // prevStep.HandleTime = null; // prevStep.StartTime = DateTime.Now; // prevStep.StateCode = WorkFlowProcessState.Waiting; // newSteps.Add(prevStep); // var currentStep = new WorkFlowProcess(); // currentStep.WorkFlowProcessId = Guid.NewGuid(); // currentStep.WorkFlowInstanceId = context.RunnerInfo.WorkFlowInstanceId; // currentStep.Attachments = 0; // currentStep.Description = string.Empty; // currentStep.CreatedOn = DateTime.Now; // currentStep.HandleTime = null; // currentStep.StartTime = DateTime.Now; // currentStep.StateCode = WorkFlowProcessState.Waiting; // newSteps.Add(currentStep); // this.CreateMany(newSteps); //} ////某一步 //else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.SpecifyStep) //{ // var newSteps = new List<WorkFlowProcess>(); // //重新生成指定步骤、及后续步骤 // steps.Where(n => n.StepOrder >= context.ProcessInfo.ReturnTo).ToList().ForEach((n) => // { // n.WorkFlowProcessId = Guid.NewGuid(); // n.Attachments = 0; // n.Description = string.Empty; // n.CreatedOn = DateTime.Now; // n.HandleTime = null; // n.StartTime = DateTime.Now; // n.StateCode = WorkFlowProcessState.Waiting; // newSteps.Add(n); // }); // this.CreateMany(newSteps); //} ////重新提交 //else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.ReSubmit) //{ // //更新单据状态为审批不通过 // this.UpdateObjectProcessState(context.RunnerInfo.EntityId, context.RunnerInfo.ObjectId, context.ProcessState, context.EntityMetaData.Name); // //更新当前流程实例状态为完成 // runnerService.Update(n => n // .Set(f => f.StateCode, context.ProcessState) // .Set(f => f.CompletedOn, DateTime.Now) // .Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId) // ); //} //更新单据状态为审批不通过 //_workFlowProcessUpdater.UpdateObjectProcessState(context.EntityMetaData, context.InstanceInfo.ObjectId, context.ProcessState); //更新当前流程实例状态为完成 _workFlowInstanceService.Update(n => n .Set(f => f.StateCode, context.ProcessState) .Set(f => f.CompletedOn, DateTime.Now) .Where(f => f.WorkFlowInstanceId == context.InstanceInfo.WorkFlowInstanceId) ); } } //如果还有下一步 else { //驳回 if (context.ProcessState == WorkFlowProcessState.UnPassed) { // //更新未处理的步骤状态为作废 // this.Update(n => n.Set(f => f.StateCode, WorkFlowProcessState.Disabled).Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId && f.StateCode == WorkFlowProcessState.Waiting)); // //第一步 // if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.FirstStep) // { // var steps = this.Query(n => n.Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId)); // //重新生成审批步骤 // steps.ForEach((n) => // { // n.WorkFlowProcessId = Guid.NewGuid(); // n.Attachments = 0; // n.Description = string.Empty; // n.CreatedOn = DateTime.Now; // n.HandleTime = null; // n.StartTime = DateTime.Now; // n.StateCode = WorkFlowProcessState.Waiting; // }); // this.CreateMany(steps); // } // //上一步 // else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.PrevStep) // { // } // //某一步 // else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.SpecifyStep) // { // } // //重新提交 // else if (context.ProcessInfo.ReturnType == (int)WorkFlowStepReturnType.ReSubmit) // { // //更新单据状态为审批不通过 // this.UpdateObjectProcessState(context.RunnerInfo.EntityId, context.RunnerInfo.ObjectId, context.ProcessState, context.EntityMetaData.Name); // //更新当前流程实例状态为完成 // runnerService.Update(n => n // .Set(f => f.StateCode, context.ProcessState) // .Set(f => f.CompletedOn, DateTime.Now) // .Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId) // ); // //更新未处理的步骤状态为作废 // this.Update(n => n.Set(f => f.StateCode, WorkFlowProcessState.Disabled).Where(f => f.WorkFlowInstanceId == context.RunnerInfo.WorkFlowInstanceId && f.StateCode == WorkFlowProcessState.Waiting)); // } //更新单据状态为审批不通过 //_workFlowProcessUpdater.UpdateObjectProcessState(context.EntityMetaData, context.InstanceInfo.ObjectId, context.ProcessState); //更新当前流程实例状态为完成 _workFlowInstanceService.Update(n => n .Set(f => f.StateCode, context.ProcessState) .Set(f => f.CompletedOn, DateTime.Now) .Where(f => f.WorkFlowInstanceId == context.InstanceInfo.WorkFlowInstanceId) ); //更新未处理的步骤状态为作废 _workFlowProcessUpdater.Update(n => n.Set(f => f.StateCode, WorkFlowProcessState.Disabled).Where(f => f.WorkFlowInstanceId == context.InstanceInfo.WorkFlowInstanceId && f.StateCode == WorkFlowProcessState.Waiting)); } //同意则转交到下一个处理人 else if (context.ProcessState == WorkFlowProcessState.Passed) { //更新下一步骤处理状态为处理中 _workFlowProcessUpdater.Update(n => n.Set(f => f.StateCode, WorkFlowProcessState.Processing).Set(f => f.StartTime, DateTime.Now) .Where(f => f.WorkFlowInstanceId == context.InstanceInfo.WorkFlowInstanceId && f.StepOrder == nextI)); result.NextHandlerId = _workFlowHandlerFinder.GetCurrentHandlerId(context.InstanceInfo, context.ProcessInfo, nextSteps.First().HandlerIdType, nextSteps.First().Handlers); } } _workFlowInstanceService.CompleteTransaction(); result.IsSuccess = true; } catch (Exception e) { _workFlowInstanceService.RollBackTransaction(); result.IsSuccess = false; result.Message = e.Message; _logService.Error(e); } OnExecuted(context, result); _eventPublisher.Publish(new WorkFlowExecutedEvent { Context = context, Result = result }); return(result); }