using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using HySoft.DBUtility; using HySoft.Workflow.WFEngine; using WOSBusineSupporter; using HySoft.Common; using System.Web.Services; namespace HySoft.BaseCallCenter.Web.workordermanage.workorder { public partial class orderreply : BasePage { SimpleWFEngine engine; WOSBusineSupporter.WOSBusineSupporter wosBusineSupporter; string connStr = DBUtility.DbHelperSQL.connectionString; Model.T_Wo_WorkOrderTask taskobj; string assOpt = ""; string instanceId = ""; string userId = "0"; int creatUser = 0; string taskId = ""; string workorderid = "0"; DateTime time = DateTime.Now; protected void Page_Load(object sender, EventArgs e) { workorderid = Request.QueryString["workorderid"];//工单编号 HdWorkOrderId.Value = workorderid; this.GetModelValue(workorderid); BLL.T_Wo_WorkOrderTask bll_task = new BLL.T_Wo_WorkOrderTask(); LoginUser p_LoginUser = new LoginUser(this.Context); userId = p_LoginUser.UserID.ToString(); HFJueSe.Value = p_LoginUser.RoleId.ToString(); DataSet ds = bll_task.GetList(" F_INSTANCEID='" + instanceId + "'and F_LoseFlag='0'" + " and F_OwnerId='" + userId + "'"); if (ds.Tables[0].Rows.Count > 0) { taskId = ds.Tables[0].Rows[0]["F_TASKID"].ToString(); taskobj = GetObj(Convert.ToInt32(taskId)); if (taskobj != null) { InitEngine(taskobj.F_OPTBTN); } } #region 初始化工作流 #endregion AddCancelBtn(); } #region 初始化任务信息 private Model.T_Wo_WorkOrderTask GetObj(int taskid) { Model.T_Wo_WorkOrderTask obj = new Model.T_Wo_WorkOrderTask(); DataTable dt = new DataTable(); try { dt = new BLL.T_Wo_WorkOrderTask().GetList("F_TASKID=" + taskid.ToString() + "").Tables[0]; if (dt.Rows.Count > 0) { if (dt.Rows[0]["F_AssignParticipator"].ToString() != "null") { assOpt = dt.Rows[0]["F_AssignParticipator"].ToString(); } if (dt.Rows[0]["F_WORKORDERSTATEID"] != null && dt.Rows[0]["F_WORKORDERSTATEID"].ToString() != "") { obj.F_WORKORDERSTATEID = int.Parse(dt.Rows[0]["F_WORKORDERSTATEID"].ToString()); txtF_WORKORDERSTATEID.Value = dt.Rows[0]["F_WORKORDERSTATEID"].ToString(); } if (dt.Rows[0]["F_OPTBTN"] != null) { obj.F_OPTBTN = dt.Rows[0]["F_OPTBTN"].ToString(); } if (dt.Rows[0]["F_TASKFLAG"] != null) { obj.F_TASKFLAG = int.Parse(dt.Rows[0]["F_TASKFLAG"].ToString()); } if (dt.Rows[0]["f_planfinishtime"] != null && dt.Rows[0]["f_planfinishtime"].ToString() != "") { time = Convert.ToDateTime(dt.Rows[0]["f_planfinishtime"].ToString()); } if (dt.Rows[0]["F_OWNERID"] != null && dt.Rows[0]["F_OWNERID"].ToString() != "") { obj.F_OWNERID = int.Parse(dt.Rows[0]["F_OWNERID"].ToString()); } if (dt.Rows[0]["F_INSTANCEID"] != null) { obj.F_INSTANCEID = int.Parse(dt.Rows[0]["F_INSTANCEID"].ToString()); txtF_INSTANCEID.Value = dt.Rows[0]["F_INSTANCEID"].ToString(); } } } catch { } finally { dt.Clear(); dt.Dispose(); } return obj; } #endregion #region 添加取消按钮 private void AddCancelBtn() { System.Web.UI.HtmlControls.HtmlGenericControl btncancel = new System.Web.UI.HtmlControls.HtmlGenericControl("a"); btncancel.ID = "btncancel"; btncancel.Attributes.Add("class", "btnSearch"); btncancel.Attributes.Add("onclick", "parent.CloseThis()"); btncancel.InnerText = "取消"; tdbtn.Controls.Add(btncancel); } #endregion /// /// 绑定初始值 /// public void GetModelValue(string workorderid) { Common.LoginUser user = new Common.LoginUser(this.Context); F_USERNAME.InnerHtml = user.UserName; string sql = "select * from V_WorkOrderBase where F_WORKORDERID=" + workorderid + ""; DataTable dt = DbHelperSQL.Query(sql).Tables[0]; System.Collections.Generic.List baseModel = new BLL.T_Wo_WorkOrderBase().DataTableToList(dt); if (baseModel.Count > 0) { if (baseModel[0].F_CREATEBY != null) { creatUser = Convert.ToInt32(baseModel[0].F_CREATEBY); } if (baseModel[0].F_INSTANCEID != null) { instanceId = baseModel[0].F_INSTANCEID.ToString(); } if (baseModel[0].F_Name != null) { F_Name.InnerHtml = baseModel[0].F_Name.ToString(); } if (baseModel[0].F_TypeName != null) { F_TypeName.InnerHtml = baseModel[0].F_TypeName.ToString(); } if (baseModel[0].F_UserAccountName != null) { F_UserAccountName.InnerHtml = baseModel[0].F_UserAccountName.ToString(); } } string sql1 = "select * from T_Wo_WorkOrderHistoryInfo where F_INSTANCEID=" + instanceId + " and F_KNOWLEDGE is not null order by ID desc"; DataTable dt1 = DbHelperSQL.Query(sql1).Tables[0]; System.Collections.Generic.List Model = new BLL.T_Wo_WorkOrderHistoryInfo().DataTableToList(dt1); if (Model.Count > 0) { if (Model[0].F_ESTIMATED != null) { F_ESTIMATED.InnerHtml = Model[0].F_ESTIMATED.ToString(); } if (Model[0].F_KNOWLEDGE != null) { if (Model[0].F_KNOWLEDGE.ToString() == "0") { F_KNOWLEDGE.InnerHtml = "是"; } else { F_KNOWLEDGE.InnerHtml = "否"; } } } } #region 初始化工作流引擎 private void InitEngine(string optbtn) { wosBusineSupporter = new WOSBusineSupporter.WOSBusineSupporter(); wosBusineSupporter.ConnectionString = connStr; /**/ //Oracle数据库存储方式 MSSQLDBWorkflowInstanceFactory instanceFactory = new MSSQLDBWorkflowInstanceFactory(); instanceFactory.ConnectionString = connStr; MSSQLDBPersistentServer persistenServer = new MSSQLDBPersistentServer(); persistenServer.ConnectionString = connStr; engine = new SimpleWFEngine(wosBusineSupporter, persistenServer, instanceFactory); MSSQLDBWorkflowTypeInfoSupporter sup = new MSSQLDBWorkflowTypeInfoSupporter(); sup.ConnectionString = connStr; #region 顺序操作 if (optbtn != "") { optbtn += "#@!"; optbtn = optbtn.Replace(",#@!", "").Replace("#@!", ""); DataTable dt = new DataTable(); try { dt = new BLL.T_Wo_WorkOrderButton().GetList(" F_BUTTONID in (" + optbtn + ") ").Tables[0]; if (dt.Rows.Count > 0) { int idcount = 0; foreach (DataRow dr in dt.Rows) { LinkButton runSavebtn = new LinkButton(); runSavebtn.ID = "runSavebtn" + idcount.ToString(); runSavebtn.Attributes.Add("class", "btnSearch"); if (dr["F_Name"].ToString().Trim() != "重新指派" && dr["F_BUTTONID"].ToString() != "13") { } else { //runSavebtn.OnClientClick = "return checkUserDataAddOther();"; } runSavebtn.Text = dr["F_Name"].ToString().Trim(); runSavebtn.CommandArgument = dr["F_ButtonId"].ToString(); runSavebtn.Click += new EventHandler(runSavebtn_Click); //if (runSavebtn.Text == "接单") //{ // runSavebtn.Enabled = false; //} tdbtn.Controls.Add(runSavebtn); //添加空格间距 System.Web.UI.HtmlControls.HtmlGenericControl spannull = new System.Web.UI.HtmlControls.HtmlGenericControl("span"); spannull.ID = "btnnull" + idcount.ToString(); spannull.InnerHtml = "  "; tdbtn.Controls.Add(spannull); idcount++; } } } catch { } finally { dt.Clear(); dt.Dispose(); } } #endregion } #endregion protected void runSavebtn_Click(object sender, EventArgs e) { if (HFPanDuan.Value == "false") { MessageBoxToWindow("接单之前必须先与客户通话!", "保存提示!", "error"); return; } Common.LoginUser user = new Common.LoginUser(this.Context); LinkButton btn = (LinkButton)sender; try { //保存表单信息 bool rbl = SaveForm(); if (rbl) { //顺序操作事件(未能指派) string errinfo = ""; string dealContent = "";// WorkflowOprErr bl; int optOwnerId = taskobj.F_OWNERID; if (btn.CommandArgument == "13" || btn.Text == "重新指派") { dealContent = "(" + user.UserName + ")重新指派,指派描述:" + F_CONTENT.Text;// bl = engine.RunOpr(txtF_INSTANCEID.Value, optOwnerId.ToString(), txtF_WORKORDERSTATEID.Value, btn.CommandArgument, GetAssignParticipatorListCXZP(), dealContent, out errinfo); } else { dealContent = "(" + user.UserName + ")回复内容:" + F_CONTENT.Text; bl = engine.RunOpr(txtF_INSTANCEID.Value, optOwnerId.ToString(), txtF_WORKORDERSTATEID.Value, btn.CommandArgument, GetAssignParticipatorList(), dealContent, out errinfo); } if (bl.ToString() == "OK") { InsertOptLogs(0, 0, "操作成功!orderreply.aspx页面" + dealContent, 0); MessageBoxToWindow("保存成功", "保存提示!", "success"); } else { InsertOptLogs(0, 0, "操作失败!orderreply.aspx页面" + "(" + user.UserName + ")执行了" + btn.Text.Trim() + "操作,描述:" + F_CONTENT.Text + "。", 1); MessageBoxToWindow("保存失败", "保存提示!", "error"); } } } catch (Exception e1) { InsertOptLogs(0, 0, "操作异常!orderreply.aspx页面" + "(" + user.UserName + ")执行了" + btn.Text.Trim() + "操作,描述:" + F_CONTENT.Text + "。异常信息:" + e1.ToString(), 2); MessageBoxToWindow("保存失败", "保存提示!", "error"); } } private AssignParticipator[] GetAssignParticipatorListCXZP() { AssignParticipator[] arr = new AssignParticipator[1]; arr[0] = new AssignParticipator(); arr[0].NodeID = "4"; arr[0].NodeName = "待指派"; ParticipatorInfo partinfo = new ParticipatorInfo(); List list = new List(); list = (new BLL.T_Sys_UserAccount()).GetModelList(" F_UserId=(SELECT top 1 F_OPTUSERID FROM T_Wo_WorkOrderHistory where F_WORKORDERSTATEID in(13,4) and F_INSTANCEID=" + txtF_INSTANCEID.Value + " order by F_HISTORYID desc)"); if (list.Count == 0) { list = (new BLL.T_Sys_UserAccount()).GetModelList(" F_UserId="+creatUser+" "); } UserInfo[] userlist = new UserInfo[list.Count]; for (int i = 0; i < userlist.Length; i++) { UserInfo user = new UserInfo(); user.ID = list[i].F_UserId.ToString(); user.Name = list[i].F_UserName; userlist[i] = user; } partinfo.UserList = userlist; arr[0].ParticipatorInfo = new AssembleWorkFlowTask().AssembleParticipator(partinfo).InnerXml; return arr; } private AssignParticipator[] GetAssignParticipatorList() { AssignParticipator[] arr = new AssignParticipator[1]; arr[0] = new AssignParticipator(); arr[0].NodeID = "7"; arr[0].NodeName = "待处理"; ParticipatorInfo partinfo = new ParticipatorInfo(); List list = new List(); list = (new BLL.T_Sys_UserAccount()).GetModelList(" F_UserId in(select F_USERID from T_Wo_WorkOrderConstructor where F_WORKORDERID=" + workorderid + ")"); UserInfo[] userlist = new UserInfo[list.Count]; for (int i = 0; i < userlist.Length; i++) { UserInfo user = new UserInfo(); user.ID = list[i].F_UserId.ToString(); user.Name = list[i].F_UserName; userlist[i] = user; } partinfo.UserList = userlist; arr[0].ParticipatorInfo = new AssembleWorkFlowTask().AssembleParticipator(partinfo).InnerXml; return arr; //if (assOpt != "") //{ // AssignParticipator[] asslist = new Web.tools.ParseWorkFlowTask().ParseAssignParticipatorOpr(assOpt); // foreach (AssignParticipator ass in asslist) // { // ParticipatorInfo partinfo = new ParticipatorInfo(); // List list = new List(); // list = (new BLL.T_Sys_UserAccount()).GetModelList(" F_UserId in(select F_USERID from T_Wo_WorkOrderConstructor where F_WORKORDERID=" + workorderid + ")"); // UserInfo[] userlist = new UserInfo[list.Count]; // for (int i = 0; i < userlist.Length; i++) // { // UserInfo user = new UserInfo(); // user.ID = list[i].F_UserId.ToString(); // user.Name = list[i].F_UserName; // userlist[i] = user; // } // partinfo.UserList = userlist; // ass.ParticipatorInfo = new AssembleWorkFlowTask().AssembleParticipator(partinfo).InnerXml; // } // return asslist; //} //else //{ // return null; //} } private bool SaveForm() { Common.LoginUser user = new Common.LoginUser(this.Context); bool bl = true; Model.T_Wo_WorkOrderTaskInfo model = new Model.T_Wo_WorkOrderTaskInfo(); if (taskId != "") { model.F_TASKID = Convert.ToInt32(taskId);//任务ID } else { model.F_TASKID = 0; } model.F_WORKORDERID = Convert.ToInt32(workorderid);//工单ID model.F_OPTBY = user.UserID;//操作人ID model.F_ARRASSIGNUSER = hfSQDX.Value;//指派人员 model.F_ASSIGNTYPE = 1;//指派类型 model.F_ASSIGNDES = F_CONTENT.Text;//指派描述 model.F_OPTDATE = DateTime.Now; BLL.T_Wo_WorkOrderTaskInfo bll_add = new BLL.T_Wo_WorkOrderTaskInfo(); if (bll_add.Add(model) > 0) { bl = true; } else { bl = false; } return bl; } #region 弹出对话框 /// /// 弹出对话框 /// /// /// /// public void MessageBoxToWindow(string title, string content, string type) { string script = ""; switch (type) { case "error"://失败 type = "error"; script = ""; break; case "success"://成功 type = "info"; script = ""; break; case "catch"://异常 type = "warning"; script = ""; break; default: type = "question"; break; } ClientScript.RegisterClientScriptBlock(this.GetType(), "", script); } #endregion [WebMethod] public static string Get(string id) { string panduan = "0"; try { System.Data.DataTable dt = DBUtility.DbHelperSQL.Query("SELECT SUM( datediff(s,TalkStartTime,TalkEndTime)) as counts FROM T_Call_CallRecords where CallId in(select CallId from T_Call_WorkOrder where F_WORKORDERID=" + id + " and F_WORKORDERSTATEID=6)").Tables[0]; if (dt.Rows.Count > 0) { if (dt.Rows[0]["counts"] != null && Convert.ToInt32(dt.Rows[0]["counts"])>4) { panduan = "1"; } } } catch { return panduan; } return panduan; } } }