Example #1
0
        public List <RoutineDTO> GetRountineLists(string formInstanceID, string id, [FromBody] PostSubmitTaskDTO taskDto)
        {
            var userAccount = Request.RequestUri.ParseQueryString().Get("UserAccount");

            FormulaHelper.ContextSet("AgentUserLoginName", userAccount);

            string            formdata       = JsonHelper.ToJson(taskDto.FormDic);
            FlowService       flowservice    = new FlowService(this, taskDto.FormDic, "", id);
            List <ButtonInfo> buttonInfoList = new List <ButtonInfo>();

            if (string.IsNullOrEmpty(id))
            {
                buttonInfoList = flowservice.JsonGetFlowButtons("", "");
                var list = new List <RoutineDTO>();
                foreach (var btn in buttonInfoList)
                {
                    if (btn.routingParams != null)
                    {
                        var routine = new RoutineDTO();
                        routine.ID = btn.id;
                        if (btn.routingParams.userIDs == "")
                        {
                            if (btn.routingParams.selectMode == "SelectOneUser")
                            {
                                routine.OwnerType = OwnerType.Single;
                            }
                            else if (btn.routingParams.selectMode == "SelectMultiUser")
                            {
                                routine.OwnerType = OwnerType.Multi;
                            }
                            else if (!string.IsNullOrEmpty(btn.routingParams.userIDsFromField) ||
                                     !string.IsNullOrEmpty(btn.routingParams.orgIDFromField) ||
                                     !string.IsNullOrEmpty(btn.routingParams.roleIDsFromField))
                            {
                                routine.OwnerType = OwnerType.None;
                            }
                            else
                            {
                                routine.OwnerType = OwnerType.None;
                            }
                        }
                        else
                        {
                            if (btn.routingParams.selectMode == "SelectOneUserInScope" || btn.routingParams.selectMode == "SelectOnePrjUser")
                            {
                                routine.OwnerType = OwnerType.Single;
                            }
                            else if (btn.routingParams.selectMode == "SelectMultiUserInScope" || btn.routingParams.selectMode == "SelectMultiPrjUser")
                            {
                                routine.OwnerType = OwnerType.Multi;
                            }
                            else
                            {
                                routine.OwnerType = OwnerType.Special;
                            }

                            if (btn.routingParams.selectAgain)
                            {
                                if (btn.routingParams.selectMode == "SelectOneUserInScope" || btn.routingParams.selectMode == "SelectOnePrjUser" || btn.routingParams.selectMode == "SelectOneUser")
                                {
                                    routine.OwnerType = OwnerType.Single;
                                    if (btn.routingParams.selectMode == "SelectOneUser")
                                    {
                                        routine.OwnerUserIDs = "";
                                    }
                                }
                                else if (btn.routingParams.selectMode == "SelectMultiUserInScope" || btn.routingParams.selectMode == "SelectMultiPrjUser" || btn.routingParams.selectMode == "SelectMultiUser")
                                {
                                    routine.OwnerType = OwnerType.Multi;
                                    if (btn.routingParams.selectMode == "SelectMultiUser")
                                    {
                                        routine.OwnerUserIDs = "";
                                    }
                                }
                            }
                        }
                        routine.OwnerUserIDs     = btn.routingParams.userIDs;
                        routine.RoutineName      = btn.text;
                        routine.MustInputComment = btn.routingParams.mustInputComment;

                        list.Add(routine);
                    }
                }
                return(list);
            }
            else
            {
                buttonInfoList = flowservice.JsonGetFlowButtons(formInstanceID, id, true);
            }


            FormulaHelper.ContextRemoveByKey("AgentUserLoginName");
            List <RoutineDTO> Routines       = new List <RoutineDTO>();
            List <RoutineDTO> staticRoutines = new List <RoutineDTO>();

            for (var i = 0; i < buttonInfoList.Count; i++)
            {
                RoutineDTO routine;
                var        item = buttonInfoList[i];

                if (item.id == "btnDoBack" || item.id == "btnDoBackFirst" || item.id == "btnDoBackFirstReturn")
                {
                    routine = new RoutineDTO
                    {
                        ID          = item.id,
                        RoutineName = item.text,
                    };
                    routine.OwnerType    = OwnerType.None;
                    routine.OwnerUserIDs = "";
                    staticRoutines.Add(routine);
                    continue;
                }
                else if (item.id == "btnDelegate" || item.id == "btnAsk")
                {
                    routine = new RoutineDTO
                    {
                        ID          = item.id,
                        RoutineName = item.text,
                    };
                    routine.OwnerType    = OwnerType.Single;
                    routine.OwnerUserIDs = "";
                    staticRoutines.Add(routine);
                    continue;
                }
                else if (item.id == "btnCirculate")
                {
                    routine = new RoutineDTO
                    {
                        ID          = item.id,
                        RoutineName = item.text,
                    };
                    routine.OwnerType    = OwnerType.Multi;
                    routine.OwnerUserIDs = "";
                    staticRoutines.Add(routine);
                    continue;
                }
                else if (item.id == "btnView" || item.id == "btnReply" || item.id == "btnWithdrawAsk" || item.id == "btnWithdraw" || item.id == "btnDelete")
                {
                    routine = new RoutineDTO
                    {
                        ID          = item.id,
                        RoutineName = item.text,
                    };
                    routine.OwnerType    = OwnerType.None;
                    routine.OwnerUserIDs = "";
                    staticRoutines.Add(routine);
                    continue;
                }
                else if (item.id.StartsWith("btn"))
                {
                    //buttonInfoList.Remove(item);
                    //这句注释掉,否则循环都乱了
                    continue;
                }


                routine = new RoutineDTO
                {
                    ID               = item.id,
                    RoutineName      = item.text,
                    MustInputComment = item.routingParams.mustInputComment,
                    SelectAgain      = item.routingParams.selectAgain,
                    DefaultComment   = item.routingParams.defaultComment
                };
                Routines.Add(routine);
                routine.OwnerType    = OwnerType.None;
                routine.OwnerUserIDs = item.routingParams.userIDs;

                if (item.routingParams.flowComplete == true) //移动端在流程结束时不再选人
                {
                    routine.OwnerType    = OwnerType.None;
                    routine.OwnerUserIDs = "";
                    continue;
                }


                if (item.routingParams.routingID.Contains(','))//分支路由不用选人
                {
                    routine.OwnerType = OwnerType.None;
                    continue;
                }

                if (item.routingParams.userIDs == "")
                {
                    if (item.routingParams.selectMode == "SelectOneUser")
                    {
                        routine.OwnerType = OwnerType.Single;
                    }
                    else if (item.routingParams.selectMode == "SelectMultiUser")
                    {
                        routine.OwnerType = OwnerType.Multi;
                    }
                    else if (!string.IsNullOrEmpty(item.routingParams.userIDsFromField) ||
                             !string.IsNullOrEmpty(item.routingParams.orgIDFromField) ||
                             !string.IsNullOrEmpty(item.routingParams.roleIDsFromField))
                    {
                        routine.OwnerType = OwnerType.None;
                    }
                    else
                    {
                        routine.OwnerType = OwnerType.None;
                    }
                }
                else
                {
                    if (item.routingParams.selectMode == "SelectOneUserInScope" || item.routingParams.selectMode == "SelectOnePrjUser")
                    {
                        routine.OwnerType = OwnerType.Single;
                    }
                    else if (item.routingParams.selectMode == "SelectMultiUserInScope" || item.routingParams.selectMode == "SelectMultiPrjUser")
                    {
                        routine.OwnerType = OwnerType.Multi;
                    }
                    else
                    {
                        routine.OwnerType = OwnerType.Special;
                    }

                    if (item.routingParams.selectAgain)
                    {
                        if (item.routingParams.selectMode == "SelectOneUserInScope" || item.routingParams.selectMode == "SelectOnePrjUser" || item.routingParams.selectMode == "SelectOneUser")
                        {
                            routine.OwnerType = OwnerType.Single;
                            if (item.routingParams.selectMode == "SelectOneUser")
                            {
                                routine.OwnerUserIDs = "";
                            }
                        }
                        else if (item.routingParams.selectMode == "SelectMultiUserInScope" || item.routingParams.selectMode == "SelectMultiPrjUser" || item.routingParams.selectMode == "SelectMultiUser")
                        {
                            routine.OwnerType = OwnerType.Multi;
                            if (item.routingParams.selectMode == "SelectMultiUser")
                            {
                                routine.OwnerUserIDs = "";
                            }
                        }
                    }
                }
            }

            //排序需要与PC端一致,故反过来
            for (int i = 0; i < staticRoutines.Count; i++)
            {
                Routines.Add(staticRoutines[i]);
            }

            return(Routines);
        }
Example #2
0
        public string _SubmitForm(string id, [FromBody] PostSubmitTaskDTO taskDto)
        {
            try
            {
                string routingIDs      = id;
                string formInstanceID  = Request.RequestUri.ParseQueryString().Get("FormInstanceID");
                string taskExecID      = Request.RequestUri.ParseQueryString().Get("TaskExecID");
                string nextExecUserIDs = Request.RequestUri.ParseQueryString().Get("NextExecUserIDs");
                string execComment     = Request.RequestUri.ParseQueryString().Get("Comment");
                string execUserID      = Request.RequestUri.ParseQueryString().Get("ExecUserID");

                string userAccount = Request.RequestUri.ParseQueryString().Get("UserAccount");
                //FormulaHelper.ContextSet("AgentUserLoginName", userAccount);

                //新版表单定义会传递表单数据 2016-11-16
                string formData = taskDto.FormDic;
                string FlowCode = taskDto.FlowCode;

                var       url      = "";
                var       entities = FormulaHelper.GetEntities <WorkflowEntities>();
                Hashtable pars     = new Hashtable();

                if (taskExecID != "0") //提交任务时
                {
                    var taskExec = entities.S_WF_InsTaskExec.SingleOrDefault(c => c.ID == taskExecID);
                    url = taskExec.S_WF_InsFlow.S_WF_InsDefFlow.FormUrl;
                    pars.Add("TaskExecID", taskExecID);
                }
                else //首次提交表单时
                {
                    var flowDef = entities.S_WF_DefFlow.SingleOrDefault(c => c.Code == FlowCode);
                    url = flowDef.FormUrl;
                }

                string search = "";
                string action = "";
                if (url.Contains('?'))
                {
                    int index = url.IndexOf('?');
                    search = url.Substring(index);
                    url    = url.Remove(index);
                }
                url = url.Remove(url.LastIndexOf('/'));


                if (string.IsNullOrEmpty(formData))
                {
                    pars.Add("FormData", "{\"ID\":\"" + formInstanceID + "\"}");
                }
                else
                {
                    pars.Add("FormData", formData);
                }
                if (!string.IsNullOrEmpty(FlowCode))
                {
                    pars.Add("FlowCode", FlowCode);
                }

                if (routingIDs == "btnDoBack")
                {
                    action = "DoBack";
                    pars.Add("RoutingID", routingIDs);
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnDoBackFirst")
                {
                    action = "DoBackFirst";
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnDoBackFirstReturn")
                {
                    action = "DoBackFirstReturn";
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnDelegate")
                {
                    action = "DelegateTask";
                    pars.Add("NextExecUserIDs", nextExecUserIDs);
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnAsk")
                {
                    action = "AskTask";
                    pars.Add("NextExecUserIDs", nextExecUserIDs);
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnCirculate")
                {
                    action = "CirculateTask";
                    pars.Add("NextExecUserIDs", nextExecUserIDs);
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnView" || routingIDs == "btnReply")
                {
                    action = "ViewTask";
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnWithdrawAsk")
                {
                    action = "WithdrawAskTask";
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnWithdraw")
                {
                    action = "DeleteFlow";
                    pars.Add("ExecComment", execComment);
                }
                else if (routingIDs == "btnDelete")
                {
                    action = "Delete";
                    pars.Add("ExecComment", execComment);
                }
                else
                {
                    action = "Submit";
                    pars.Add("ID", formInstanceID);
                    pars.Add("RoutingID", routingIDs);
                    pars.Add("NextExecUserIDs", nextExecUserIDs);
                    pars.Add("NextExecUserIDsGroup", "");
                    pars.Add("nextExecRoleIDs", "");
                    pars.Add("nextExecOrgIDs", "");
                    pars.Add("ExecComment", execComment);
                    pars.Add("AutoPass", "False");

                    //解决移动通组单人通过,没有传递NextExecUserIDsGroup问题(移动通没人改了,后台解决)
                    var routing = entities.Set <S_WF_InsDefRouting>().SingleOrDefault(c => c.ID == routingIDs);
                    if (routing != null && !string.IsNullOrEmpty(routing.UserIDsGroupFromField))
                    {
                        var formDic = JsonHelper.ToObject(formData);
                        pars["NextExecUserIDsGroup"] = formDic[routing.UserIDsGroupFromField].ToString();
                    }
                }

                //增加参数IsMobileRequest
                string IsMobileRequest = Request.RequestUri.ParseQueryString().Get("IsMobileRequest");
                if (string.IsNullOrEmpty(IsMobileRequest))
                {
                    pars.Add("IsMobileRequest", "0");
                }
                else
                {
                    pars.Add("IsMobileRequest", IsMobileRequest);
                }


                HttpHelper httpHelper = new HttpHelper();

                string host       = GetHostUrl();
                string requestUri = host + "/Workflow/FlowTask/GetAuthCookie?userCode=" + HttpUtility.UrlEncode(userAccount);
                string result     = httpHelper.GetHtml(requestUri, pars, true);//模拟登录
                if (result.Trim('\"', ' ') == "ok")
                {
                    url    = url + "/" + action + search;
                    result = httpHelper.GetHtml(host + url, pars, true);
                    if (result == "error")
                    {
                        return("调用api报错,url: " + host + url);
                    }
                    else if (result == "")//委托加签传阅,不需要自动通过
                    {
                        return(null);
                    }
                    else
                    {
                        Dictionary <string, string> dic;
                        try
                        {
                            if (HttpContext.Current.Response.StatusCode == 500)
                            {
                                dic = JsonHelper.ToObject <Dictionary <string, string> >(result);
                                return(dic["errmsg"]);
                            }
                            //移动端的自动通过功能
                            dic = JsonHelper.ToObject <Dictionary <string, string> >(result);
                        }
                        catch
                        {
                            LogWriter.Error("调用api报错,url:" + host + url + ",报错信息为:" + result);
                            return(result);
                        }

                        while (dic.ContainsKey("NextTaskExecID"))
                        {
                            pars["TaskExecID"]      = dic["NextTaskExecID"];
                            pars["RoutingID"]       = dic["NextRoutingID"];
                            pars["NextExecUserIDs"] = dic["NextExecUserIDs"];

                            result = httpHelper.GetHtml(host + url, pars, true);

                            if (result == "error")
                            {
                                break;
                            }
                            else
                            {
                                dic = JsonHelper.ToObject <Dictionary <string, string> >(result);
                            }
                        }

                        return(null);
                    }
                }
                else
                {
                    return("调用api报错,url: " + host + url);
                }
            }
            catch (Exception exp)
            {
                LogWriter.Error(exp);
                return(exp.Message);
            }
        }