public ActionResult reject(int id)
        {
            int wfpid = id;

            //2.0 修改id对应的数据 中的 处理状态为 拒绝 处理理由,ext1字段为当前登录用户的uid
            string msg = Request.Form["msg"];

            if (msg.IsEmpty())
            {
                return(WriteError("处理理由非空"));
            }

            var process = processSer.QueryWhere(c => c.wfPID == wfpid).FirstOrDefault();

            if (process.wfRFStatus != (int)Enums.ERequestFormStatus.Processing)
            {
                return(WriteError("此单已经被您处理,请勿重复处理"));
            }

            //2.0 对实体进行更新操作
            process.wfRFStatus     = (int)Enums.ERequestFormStatus.Reject;
            process.wfPDescription = msg;
            process.wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString();

            var endNode = process.wfWorkNodes.wfWork.wfWorkNodes.OrderBy(c => c.wfnOrderNo).LastOrDefault();

            //3.0 增加一条结束数据
            wfProcess endProcess = new wfProcess()
            {
                fUpdateTime    = DateTime.Now,
                fCreateTime    = DateTime.Now,
                fCreatorID     = UserMgr.GetCurrentUserInfo().uID,
                wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString(),
                wfPDescription = "申请单已经结束",
                wfRFStatus     = (int)Enums.ERequestFormStatus.Pass,
                wfRFID         = process.wfRFID,
                wfnID          = endNode.wfnID
            };

            //新增一条结束明细数据
            processSer.Add(endProcess);

            //4.0 将当前提交单的状态修改拒绝状态
            wfRequestForm rfmodel = new wfRequestForm()
            {
                wfRFID     = process.wfRFID,
                wfRFStatus = (int)Enums.ERequestFormStatus.Reject
            };

            requestformSer.Edit(rfmodel, new string[] { "wfRFStatus" });

            using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope())
            {
                processSer.SaveChanges();

                scop.Complete();
            }

            return(WriteSuccess("申请单已经拒绝"));
        }
        public ActionResult back(int id)
        {
            //驳回理由
            string msg = Request.Form["msg"];

            if (msg.IsEmpty())
            {
                return(WriteError("处理理由非空"));
            }

            //1.0 将id所在的wfprocess表中的数据状态修改成驳回状态同时将理由更新
            var currentProcess = processSer.QueryWhere(c => c.wfPID == id).FirstOrDefault();

            currentProcess.wfRFStatus     = (int)Enums.ERequestFormStatus.Back;
            currentProcess.wfPDescription = msg;
            currentProcess.wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString();

            //2.0 将审核单提交给我的下级
            int preWfpid   = currentProcess.wfPExt2.Value;
            var preProcess = processSer.QueryWhere(c => c.wfPID == preWfpid).FirstOrDefault();

            //new新的审核明细实体
            wfProcess nextProcess = new wfProcess()
            {
                wfRFStatus     = (int)Enums.ERequestFormStatus.Processing,
                wfPDescription = null,
                fCreateTime    = DateTime.Now,
                fUpdateTime    = DateTime.Now,
                fCreatorID     = UserMgr.GetCurrentUserInfo().uID,
                wfnID          = preProcess.wfnID,
                wfPExt2        = preProcess.wfPID,
                wfProcessor    = preProcess.wfProcessor,
                wfRFID         = preProcess.wfRFID
            };

            processSer.Add(nextProcess);

            //开启事物操作
            using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope())
            {
                processSer.SaveChanges();

                scop.Complete();
            }

            return(WriteSuccess("驳回操作成功"));
        }
        public ActionResult pass(int id)
        {
            //通过理由
            string msg = Request.Form["msg"];

            if (msg.IsEmpty())
            {
                return(WriteError("处理理由非空"));
            }

            //1.0 更新数据表wfprocess中的状态数据
            var currentProcess = processSer.QueryWhere(c => c.wfPID == id).FirstOrDefault();

            currentProcess.wfRFStatus     = (int)Enums.ERequestFormStatus.Pass;
            currentProcess.wfPDescription = msg;
            currentProcess.wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString();

            //2.0 往wfprocess表中插入一条下一个节点的处理数据
            //2.0.1 判断下一个节点具体是结束节点还是执行节点(逻辑:去当前处理节点数据中获取bizMethod方法利用
            //反射动态执行,获取结果true/false 去wfWorkBranch 查找具体的下一个节点id )
            //获取当前处理节点的逻辑判断结果
            string  bizMethod = currentProcess.wfWorkNodes.wfnBizMethod; //Gt
            decimal maxNum    = currentProcess.wfWorkNodes.wfnMaxNum;
            decimal targetNum = currentProcess.wfRequestForm.wfRFNum;

            //利用反射动态执行bizMethod方法
            //获取在web.config配置的程序集名称:格式 名称1;名称2
            string assNamStr = System.Configuration.ConfigurationManager.AppSettings["bizMethodAssembly"];

            string[] assNames = assNamStr.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            if (assNames.Length == 0)
            {
                return(WriteError("程序集配置文件有误,请联系管理员"));
            }

            object boolobj = null;

            foreach (var assName in assNames)
            {
                Assembly ass   = Assembly.Load(assName);
                Type[]   types = ass.GetTypes();
                foreach (Type type in types)
                {
                    MethodInfo minfo = type.GetMethod(bizMethod);
                    if (minfo != null)
                    {
                        //根据type创建类的对象实例
                        object instance = Activator.CreateInstance(type);

                        //开始调用方法
                        boolobj = minfo.Invoke(instance, new object[] { targetNum, maxNum });
                        break;
                    }
                }
            }

            string resToken = boolobj == null ? "" : boolobj.ToString(); //true /false
            //获取当前节点的id
            int currentNodeId = currentProcess.wfWorkNodes.wfnID;

            //2.0.2 获取下一个节点的对象
            var branModel = workbranchSer.QueryWhere(c => c.wfnToken == resToken && c.wfnID == currentNodeId).FirstOrDefault();
            var nextNode  = branModel.wfWorkNodes1;

            wfProcess nextProcess = new wfProcess()
            {
                fCreateTime = DateTime.Now,
                fUpdateTime = DateTime.Now,
                fCreatorID  = UserMgr.GetCurrentUserInfo().uID,
                //wfPDescription = null //暂时还不能确定
                //,
                //wfRFStatus = 42//暂时还不能确定

                //wfnID = 1 ////暂时还不能确定

                wfProcessor = 1////暂时还不能确定
                ,
                wfRFID = currentProcess.wfRFID

                         // wfPExt1 = null  //代表当前审核人的id
                ,
                wfPExt2 = currentProcess.wfPID //表示此条数据是当前处理明细数据流转过来的,方便做驳回上级操作
            };

            if (nextNode == null)
            {
                return(WriteError("下一个节点获取到,基础数据异常,联系管理员"));
            }

            nextProcess.wfnID = nextNode.wfnID;

            //进行下一个节点判断,如果是结束节点则赋值成通过
            if (nextNode.wfNodeType == (int)Enums.ENodeType.EndNode)
            {
                nextProcess.wfRFStatus     = (int)Enums.ERequestFormStatus.Pass;
                nextProcess.wfPDescription = "审批已结束";
                nextProcess.wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString();

                //将申请单的状态修改成通过状态
                var requestFormModel = currentProcess.wfRequestForm;
                requestFormModel.wfRFStatus = (int)Enums.ERequestFormStatus.Pass;
            }
            else
            {
                nextProcess.wfRFStatus     = (int)Enums.ERequestFormStatus.Processing;
                nextProcess.wfPDescription = null;
                nextProcess.wfPExt1        = null;
            }

            //确定下一条明细数据中的审批角色id
            int wkgID = UserMgr.GetCurrentUserInfo().uWorkGroupID.Value; //可空类型
            int rid   = roleSer.QueryWhere(c => c.eDepID == wkgID && c.RoleType == nextNode.wfnRoleType).FirstOrDefault().rID;

            nextProcess.wfProcessor = rid;

            //将下一个处理明细数据增加到数据库中
            processSer.Add(nextProcess);

            //带事物执行
            using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope())
            {
                processSer.SaveChanges();
                scop.Complete();
            }

            return(WriteSuccess("审核单已经通过"));
        }
Exemple #4
0
 public static wfProcessView EntityMap(this wfProcess model)
 {
     //2.0 将一个实体转换成另外一个实体
     return(Mapper.Map <wfProcess, wfProcessView>(model));
 }
        public ActionResult add(wfRequestFormView model)
        {
            if (ModelState.IsValid == false)
            {
                return(WriteError("实体属性验证失败"));
            }

            int uid = UserMgr.GetCurrentUserInfo().uID;

            //补全数据
            model.fCreateTime = DateTime.Now;
            model.fUpdateTime = DateTime.Now;
            model.fCreatorID  = UserMgr.GetCurrentUserInfo().uID;
            model.wfRFStatus  = (int)Enums.ERequestFormStatus.Processing;

            //2.0 将实体追加到EF容器
            wfRequestForm entity = model.EntityMap();

            requestformSer.Add(entity);

            using (System.Transactions.TransactionScope scop = new System.Transactions.TransactionScope())
            {
                requestformSer.SaveChanges();

                //获取当前新增的申请单的最新主键值
                int wfRFID = entity.wfRFID;

                //2.0.1 根据wfid获取工作流下面的第1,2个节点数据
                var nodes = workSer.QueryWhere(c => c.wfID == model.wfID).FirstOrDefault().wfWorkNodes
                            .OrderBy(c => c.wfnOrderNo).ToList();

                //判断nodes是否有值
                if (nodes == null || nodes.Count() < 2)
                {
                    return(WriteError("您所选的工作流中不存在节点数据,请联系管理"));
                }

                //2.0.2 获取当前登录用户所在的角色
                var role = userinfoRoleSer.QueryWhere(c => c.uID == uid).FirstOrDefault();

                //3.0 向wfProcess表中插入数据
                //3.0.1 向wfProcess表中插入数据一条申请成功的数据
                wfProcess process = new wfProcess()
                {
                    fCreateTime    = DateTime.Now,
                    fCreatorID     = UserMgr.GetCurrentUserInfo().uID,
                    fUpdateTime    = DateTime.Now,
                    wfnID          = nodes[0].wfnID,
                    wfPDescription = "申请单已经提交",
                    wfProcessor    = role.rID,
                    wfRFID         = wfRFID,
                    wfPExt1        = UserMgr.GetCurrentUserInfo().uID.ToString(),
                    wfRFStatus     = (int)Enums.ERequestFormStatus.Pass //通过
                };
                //追加到EF容器
                processSer.Add(process);

                //3.0.2 向wfProcess表中插入数据一条审批节点的审批数据
                int secWfnid = nodes[1].wfnID;
                int roleType = nodes[1].wfnRoleType;                            //次节点的审批角色类型
                int eDeptID  = UserMgr.GetCurrentUserInfo().uWorkGroupID.Value; //获取当前申请人所在的部门

                //获取当前节点的审批角色id
                int processRoleid = roleSer.QueryWhere(c => c.eDepID == eDeptID && c.RoleType == roleType).FirstOrDefault().rID;

                wfProcess process1 = new wfProcess()
                {
                    fCreateTime    = DateTime.Now,
                    fCreatorID     = UserMgr.GetCurrentUserInfo().uID,
                    fUpdateTime    = DateTime.Now,
                    wfnID          = secWfnid,
                    wfPDescription = "",
                    wfProcessor    = processRoleid,
                    wfRFID         = wfRFID,
                    wfRFStatus     = (int)Enums.ERequestFormStatus.Processing //处理中
                };

                //追加到EF容器
                processSer.Add(process1);

                processSer.SaveChanges();

                scop.Complete();
            }
            return(WriteSuccess("新增成功"));
        }
Exemple #6
0
 public static wfProcessView EntityMap(this wfProcess model)
 {
     return(Mapper.Map <wfProcess, wfProcessView>(model));
 }