/// <summary>
 /// 更新实例步骤表{实例步骤表}对象(即:一条记录
 /// </summary>
 public int Update(InstanceStep instanceStep)
 {
     using (var dbContext = UnitOfWork.Get(Unity.ContainerName))
     {
         return(new InstanceStepRepository(dbContext).Update(instanceStep));
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 检查通过情况下一步处理人是否填写
        /// </summary>
        /// <param name="AStepEntity">步骤实例</param>
        /// <param name="ATempStep">模板步骤实例</param>
        /// <returns></returns>
        private R <string> CheckFixNextUser(DealStepDTO dto, InstanceStep AStepEntity, TemplateStep ATempStep)
        {
            R <string> vResMsg = new R <string>();

            vResMsg.Code = 1;


            //要求必须填写,但却未填写
            if (ATempStep.IsFormNextman && ATempStep.IsFormNextmanMust && AStepEntity.InstanceStepNextSelusers.Count > 0)
            {
                if (dto.NextUserList == null || dto.NextUserList.Count <= 0)
                {
                    vResMsg.Msg = "未接收到流程要求选择的下一步处理人!";
                    return(vResMsg);
                }
            }

            //要求非必填,但却填写了的
            if (ATempStep.IsFormNextman &&
                !ATempStep.IsFormNextmanMust &&
                AStepEntity.InstanceStepNextSelusers.Count > 0 &&
                dto.NextUserList != null &&
                dto.NextUserList.Count > 0)
            {
                var vItems = from USERINFO vSupplyUser in dto.NextUserList
                             where !AStepEntity.InstanceStepNextSelusers.Exists(AItem => AItem.UserCode.Equals(vSupplyUser.UserCode))
                             select vSupplyUser.UserCode;

                if (vItems.Any())
                {
                    vResMsg.Msg = string.Format("接收到下一步处理人与流程要求选择的不符(如:{0})!", vItems.FirstOrDefault());
                    return(vResMsg);
                }
            }

            vResMsg.Code = 0;
            return(vResMsg);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <summary>
        /// 检查通过情况下跳转步骤设置
        /// </summary>
        /// <param name="dto">步骤信息</param>
        /// <param name="AStepEntity">步骤实例</param>
        /// <param name="ATempStep">模板步骤实例</param>
        /// <returns></returns>
        private R <string> CheckTransferStepItem(DealStepDTO dto, InstanceStep AStepEntity, TemplateStep ATempStep)
        {
            R <string> vResMsg = new R <string>();

            //不可填写的,但却填写了的
            if ((!ATempStep.IsFormNextstep || ATempStep.IsFormNextstep && ATempStep.TemplateStepFixstepLists.Count <= 0) &&
                !string.IsNullOrWhiteSpace(dto.NextStepSeq))
            {
                vResMsg.Msg = "流程没有要求选择的下一个处理步骤,但此处却填写了!";
                return(vResMsg);
            }

            //要求必须填写的,但却没有填写的
            if (ATempStep.IsFormNextstep && ATempStep.IsFormNextstepMust && ATempStep.TemplateStepFixstepLists.Count > 0)
            {
                if (string.IsNullOrWhiteSpace(dto.NextStepSeq))
                {
                    vResMsg.Msg = "未接收到流程要求选择的下一个处理步骤!";
                    return(vResMsg);
                }
            }

            //填写过的
            if (!string.IsNullOrWhiteSpace(dto.NextStepSeq))
            {
                TemplateStepFixstepList vFindTempFixStep = (from TemplateStepFixstepList vItem in ATempStep.TemplateStepFixstepLists
                                                            where !vItem.IsReturn && vItem.SelectStepSeq.ToString().Equals(dto.NextStepSeq)
                                                            select vItem).FirstOrDefault();
                if (vFindTempFixStep == null)
                {
                    vResMsg.Msg = "接收到的下一个处理步骤与流程要求的跳转步骤不符!";
                    return(vResMsg);
                }

                //检查跳转下的处理人
                var vList = from InstanceStepFixSeluser vFixUser in AStepEntity.InstanceStepFixSelusers
                            where vFixUser.FixstepId.Equals(vFindTempFixStep.Fid)
                            select vFixUser;

                //必须填写处理人但却没有填写的
                if (vFindTempFixStep.IsFormNextman && vFindTempFixStep.IsFormNextmanMust && vList.Any())
                {
                    if (dto.NextUserList == null || dto.NextUserList.Count <= 0)
                    {
                        vResMsg.Msg = "未接收到流程要求选择的下一步处理人!";
                        return(vResMsg);
                    }
                }
                //可以填写处理人,且已填写了处理人的
                if (vFindTempFixStep.IsFormNextman && vList.Any() && dto.NextUserList != null && dto.NextUserList.Count > 0)
                {
                    List <InstanceStepFixSeluser> vNewLsit = vList.ToList();

                    var vItems = from USERINFO vSupplyUser in dto.NextUserList
                                 where !vNewLsit.Exists(AItem => AItem.UserCode.Equals(vSupplyUser.UserCode))
                                 select vSupplyUser.UserCode;

                    if (vItems.Any())
                    {
                        vResMsg.Msg = string.Format("接收到下一步处理人与流程要求选择的不符(如:{0})!", vItems.FirstOrDefault());
                        return(vResMsg);
                    }

                    vResMsg.Data = "HasCheckUser";
                }
            }

            vResMsg.Code = 0;
            return(vResMsg);
        }
Esempio n. 5
0
 /// <summary>
 /// 更新实例步骤表{实例步骤表}对象(即:一条记录
 /// </summary>
 public int Update(InstanceStep instanceStep)
 {
     return(Update <InstanceStep>(instanceStep));
 }
Esempio n. 6
0
 /// <summary>
 /// 添加实例步骤表{实例步骤表}对象(即:一条记录
 /// </summary>
 public long Add(InstanceStep instanceStep)
 {
     return(Add <InstanceStep>(instanceStep));
 }