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); }
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); } }