private R <string> CheckReturnStepItem(DealStepDTO dto, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; if (string.IsNullOrWhiteSpace(dto.NextStepSeq)) { vResMsg.Msg = "退回时必须指定要退回的步骤"; return(vResMsg); } List <TemplateStepFixstepList> vList = LoadNextStepOptions(AInstanceStep); var vItems = from TemplateStepFixstepList vItem in vList where vItem.IsReturn && vItem.SelectStepSeq.ToString().Equals(dto.NextStepSeq) select vItem; if (!vItems.Any()) { vResMsg.Msg = "指定要退回的步骤与流程要求的步骤不符"; return(vResMsg); } vResMsg.Code = 0; return(vResMsg); }
public R <string> DealFlowStep(DealStepDTO dto) { InstanceStepDTO instanceStepDTO = new InstanceStepDTO(); instanceStepDTO.InstanceFlow = _instanceFlowService.GetById(dto.InstanceID); instanceStepDTO.TemplateFlow = _templateFlowService.GetById(instanceStepDTO.InstanceFlow.FlowId); instanceStepDTO.InstanceStep = _instanceStepService.GetById(dto.InstanceStepID); instanceStepDTO.TemplateStep = _templateStepService.GetById(instanceStepDTO.InstanceStep.Fid); var result = ValidateDealStep(dto, instanceStepDTO); if (result.Code == 0) { return(result); } throw new NotImplementedException(); }
private List <TemplateStepFixstepList> LoadNextStepOptions(InstanceStepDTO AInstanceStep) { List <TemplateStepFixstepList> vList = AInstanceStep.TemplateStep.TemplateStepFixstepLists.ConvertAll <TemplateStepFixstepList>(AItem => AItem.Clone() as TemplateStepFixstepList); //根据退回设置,加入发起步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturnFirst) { TemplateStep vStepModel = AInstanceStep.GerFirstTemplateStep(); if (vStepModel != null) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } //根据退回设置,加入上一个有人员处理的完成步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturn) { TemplateStep vStepModel = AInstanceStep.GetPreviousHasUserDealTemplateStep(); if (vStepModel != null) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } //根据退回设置,加入有人员处理的所有完成步骤,作为退回的可选项 if (AInstanceStep.TemplateStep.IsFormReturnFinish) { //取得所有通过的步骤实例,且要有人处理 List <InstanceStep> vEntityList = (from InstanceStep vEntity in AInstanceStep.InstanceFlow.InstanceSteps where vEntity.Status.Equals(6) && vEntity.InstanceStepUsers.Exists(AItem => (AItem as InstanceStepUser).Status.Equals(1)) select vEntity).ToList(); if (vEntityList.Any()) { //取得步骤实例对应的步骤模板 var vItems = from TemplateStep vModel in AInstanceStep.TemplateFlow.TemplateSteps where vEntityList.Exists(AItem => AItem.StepId.Equals(vModel.Fid)) select vModel; foreach (TemplateStep vStepModel in vItems) { AddReturnOptions(vList, vStepModel, vStepModel.StepName + "(退回)"); } } } return(vList); }
protected R <string> RemoveNextStep(InstanceStepDTO AInstanceStep) { //建立条件 //ModelCondition vCdt = new ModelCondition("INSTANCE_STEP_ID", CompareTypeOptions.Equal, AInstanceStep.InstanceStepEntity.FID.ToString()); //删除指定的下一个步骤 //InstanceStepFixstep vFixStep = new InstanceStepFixstep(); //R<string> vResMsg = vFixStep.Remove(vCdt); var result = _instanceStepFixstepService.DeleteByInstanceStepId(AInstanceStep.InstanceStep.Fid); R <string> vResMsg = new R <string>(); vResMsg.Code = 1; if (result > 0) { vResMsg.Msg = "删除指定的下一个步骤失败"; vResMsg.Code = 0; } return(vResMsg); }
private R <string> ValidateDealStep(DealStepDTO dto, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; InstanceFlow vFlowEntity = AInstanceStep.InstanceFlow; InstanceStep vStepEntity = AInstanceStep.InstanceStep; TemplateFlow vTempFlow = AInstanceStep.TemplateFlow; TemplateStep vTempStep = AInstanceStep.TemplateStep; //检查工作组是否正确 if (!vFlowEntity.GroupId.Equals(dto.GroupID)) { vResMsg.Msg = "流程实例与用户的工作组不匹配!"; return(vResMsg); } //检查流程实例状态是否合适 if (new int[] { 4, 5, 6 }.Contains(vFlowEntity.Status) || new int[] { 4, 5, 6, 7 }.Contains(vStepEntity.Status) || !vStepEntity.Progress.Equals(7)) { vResMsg.Msg = "流程实例的当前状态不适合完成此操作!"; return(vResMsg); } //检查用户是否合法 InstanceStepUser vStepUser = (from InstanceStepUser vItem in vStepEntity.InstanceStepUsers where vItem.UserCode.Equals(dto.UserCode) select vItem).FirstOrDefault(); if (vStepUser == null) { vResMsg.Msg = "当前用户没有操作权限!"; return(vResMsg); } //处理方式与身份是否匹配 if (vStepUser.UserType.Equals(3) && !dto.Status.Equals(5)) { vResMsg.Msg = "当前操作超过了用户的权限!"; return(vResMsg); } //用户是否已提交 if (new int[] { 1, 2, 3, 4 }.Contains(vStepUser.Status)) { vResMsg.Msg = "当前步骤的操作已完成!"; return(vResMsg); } //检查处理意见 if (new int[] { 1, 2, 4 }.Contains(dto.Status) && vTempStep.IsFormSuggestion && string.IsNullOrWhiteSpace(dto.Content)) { vResMsg.Msg = "未接收到流程要求填写的主办或汇签意见!"; return(vResMsg); } //检查退回步骤设置 if (dto.Status.Equals(2)) { vResMsg = CheckReturnStepItem(dto, AInstanceStep); if (vResMsg.Code == 1) { return(vResMsg); } } else if (dto.Status.Equals(1)) { //检查跳转步骤设置 vResMsg = CheckTransferStepItem(dto, vStepEntity, vTempStep); if (vResMsg.Code == 1) { return(vResMsg); } //检查下一步处理人是否填写正确 if (!vResMsg.Data.Equals("HasCheckUser")) { vResMsg = CheckFixNextUser(dto, vStepEntity, vTempStep); if (vResMsg.Code == 1) { return(vResMsg); } } } vResMsg.Code = 0; return(vResMsg); }
protected R <string> RemoveNextUsers(InstanceStepDTO AInstanceStep) { return(null); //UF_INSTANCE_STEP_NEXTSTEP_USER vNextUser = new UF_INSTANCE_STEP_NEXTSTEP_USER(); //return vNextUser.Remove(new ModelCondition("INSTANCE_STEP_ID", CompareTypeOptions.Equal, AInstanceStep.InstanceStepEntity.FID.ToString())); }
protected R <string> SaveNextUsers(DealStepDTO dto, InstanceFlow AInstanceFlow, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; //如果是空,则以正确方式结束 if (dto.NextUserList == null || dto.NextUserList.Count <= 0) { return(vResMsg); } //删除步骤下已存在的下一步处理人信息 vResMsg = RemoveNextUsers(AInstanceStep); if (vResMsg.Code != 0) { return(vResMsg); } //加入下一步处理人信息 foreach (USERINFO vUser in dto.NextUserList) { if (AInstanceStep.InstanceStep.InstanceStepNextstepUsers.Exists(AItem => AItem.UserCode.Equals(vUser.UserCode))) { continue; } InstanceStepNextstepUser vNextStepUser = new InstanceStepNextstepUser(); vNextStepUser.Fid = Guid.NewGuid().ToString(); vNextStepUser.InstanceStepId = AInstanceStep.InstanceStep.Fid; vNextStepUser.UserCode = vUser.UserCode; vNextStepUser.UserType = vUser.UserType; vNextStepUser.Creator = dto.UserCode; vNextStepUser.CreateDate = DateTime.Now; vNextStepUser.Editor = vNextStepUser.Creator; vNextStepUser.EditDate = vNextStepUser.CreateDate; //vNextStepUser.SetMultiple(false); var result = _instanceStepNextstepUserService.Add(vNextStepUser); //vResMsg = vNextStepUser.Insert(); if (result > 1) { AInstanceStep.InstanceStep.InstanceStepNextstepUsers.Add(vNextStepUser); vResMsg.Code = 0; } else { break; } } return(vResMsg); }
protected R <string> SaveNextStep(DealStepDTO dto, InstanceFlow AInstanceFlow, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; //如果是空,则以正确方式结束 if (string.IsNullOrWhiteSpace(dto.NextStepSeq)) { return(vResMsg); } //如果不是(1通过,2退回),则以正确方式结束 if (!new int[] { 1, 2 }.Contains(dto.Status)) { return(vResMsg); } //根据步骤序号取得步骤ID var vList = from TemplateStep vItem in AInstanceFlow.TemplateSteps where vItem.Seq.ToString().Equals(dto.NextStepSeq) select vItem.Fid; if (!vList.Any()) { return(vResMsg); } string vID = vList.FirstOrDefault(); //通过 if (dto.Status == 1) { //检查是否已加入到列表 var vObj = (from InstanceStepFixstep vItem in AInstanceStep.InstanceStep.InstanceStepFixsteps where vItem.SelectStepId.Equals(vID) select vItem).FirstOrDefault(); if (vObj == null) { //删除步骤下已有的指定下一步骤信息 vResMsg = RemoveNextStep(AInstanceStep); if (vResMsg.Code == 1) { return(vResMsg); } InstanceStepFixstep vEntity = new InstanceStepFixstep(); vEntity.Fid = Guid.NewGuid().ToString(); vEntity.InstanceStepId = AInstanceStep.InstanceStep.Fid; vEntity.SelectStepId = vID; vEntity.Creator = dto.UserCode; vEntity.CreateDate = DateTime.Now; vEntity.Editor = vEntity.Creator; vEntity.EditDate = vEntity.CreateDate; // vEntity.SetMultiple(false); //vResMsg = vEntity.Insert(); var result = _instanceStepFixstepService.Add(vEntity); if (result > 0) { vResMsg.Code = 0; AInstanceStep.InstanceStep.InstanceStepFixsteps.Add(vEntity); } else { vResMsg.Msg = string.Format("流程实例步骤:{0}增加出错", vEntity.InstanceStepId); } } } else//退回 { //检查是否已加入到列表 var vObj = (from InstanceStepReturnstep vItem in AInstanceStep.InstanceStep.InstanceStepReturnsteps where vItem.SelectStepId.Equals(vID) select vItem).FirstOrDefault(); if (vObj == null) { //删除步骤下已有的退回步骤信息 vResMsg = RemoveReturnStep(AInstanceStep); if (vResMsg.Code == 1) { return(vResMsg); } InstanceStepReturnstep vEntity = new InstanceStepReturnstep(); vEntity.Fid = Guid.NewGuid().ToString(); vEntity.InstanceStepId = AInstanceStep.InstanceStep.Fid; vEntity.SelectStepId = vID; vEntity.Creator = dto.UserCode; vEntity.CreateDate = DateTime.Now; vEntity.Editor = vEntity.Creator; vEntity.EditDate = vEntity.CreateDate; //vEntity.SetMultiple(false); //vResMsg = vEntity.Insert(); var result = _instanceStepReturnstepService.Add(vEntity); if (result > 0) { vResMsg.Code = 0; AInstanceStep.InstanceStep.InstanceStepReturnsteps.Add(vEntity); } else { vResMsg.Msg = string.Format("流程实例步骤:{0}退回出错", vEntity.InstanceStepId); } } } return(vResMsg); }
protected R <string> SaveUserTask(DealStepDTO dto, InstanceFlow AInstanceFlow, InstanceStepDTO AInstanceStep) { R <string> vResMsg = new R <string>(); vResMsg.Code = 1; InstanceStepUser vStepUser = (from InstanceStepUser vItem in AInstanceStep.InstanceStep.InstanceStepUsers where vItem.UserCode.Equals(dto.UserCode) select vItem).FirstOrDefault(); if (vStepUser == null) { vResMsg.Msg = "没有找到下一步骤人"; return(vResMsg); } InstanceStepUser vTempStepUser = vStepUser.Clone() as InstanceStepUser; vTempStepUser.Status = dto.Status; vTempStepUser.Content = dto.Content; vTempStepUser.FormName = dto.Form_Name; vTempStepUser.Data = dto.Data; vTempStepUser.Editor = dto.UserCode; vTempStepUser.EditDate = DateTime.Now; vResMsg.Code = _instanceStepUserService.Update(vTempStepUser) > 0?0:1; vResMsg.Msg = _instanceStepUserService.Update(vTempStepUser) > 0 ? "跟新步骤用户成功" : "跟新步骤用户出错"; if (vResMsg.Code == 0) { //vTempStepUser.SetMultiple(vStepUser.GetMultiple()); AInstanceStep.InstanceStep.InstanceStepUsers.Remove(vStepUser); AInstanceStep.InstanceStep.InstanceStepUsers.Add(vTempStepUser); } vResMsg.Code = 0; return(vResMsg); }