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("审核单已经通过")); }
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("新增成功")); }
public static wfProcessView EntityMap(this wfProcess model) { return(Mapper.Map <wfProcess, wfProcessView>(model)); }