市长热线演示版

orderhuifu.aspx.cs 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data;
  8. using HySoft.DBUtility;
  9. using HySoft.Workflow.WFEngine;
  10. using WOSBusineSupporter;
  11. using HySoft.Common;
  12. namespace HySoft.BaseCallCenter.Web.workordermanage.workorder
  13. {
  14. public partial class orderhuifu : BasePage
  15. {
  16. SimpleWFEngine engine;
  17. WOSBusineSupporter.WOSBusineSupporter wosBusineSupporter;
  18. string connStr = DBUtility.DbHelperSQL.connectionString;
  19. Model.T_Wo_WorkOrderTask taskobj;
  20. string assOpt = "";
  21. string instanceId = "";
  22. string userId = "0";
  23. int creatUser = 0;
  24. string taskId = "";
  25. string workorderid = "0";
  26. DateTime time = DateTime.Now;
  27. protected void Page_Load(object sender, EventArgs e)
  28. {
  29. workorderid = Request.QueryString["workorderid"];//工单编号
  30. this.GetModelValue(workorderid);
  31. BLL.T_Wo_WorkOrderTask bll_task = new BLL.T_Wo_WorkOrderTask();
  32. LoginUser p_LoginUser = new LoginUser(this.Context);
  33. userId = p_LoginUser.UserID.ToString();
  34. DataSet ds = bll_task.GetList(" F_INSTANCEID='" + instanceId + "'and F_LoseFlag='0'" + " and F_OwnerId='" + userId + "'");
  35. if (ds.Tables[0].Rows.Count > 0)
  36. {
  37. taskId = ds.Tables[0].Rows[0]["F_TASKID"].ToString();
  38. taskobj = GetObj(Convert.ToInt32(taskId));
  39. if (taskobj != null)
  40. {
  41. InitEngine(taskobj.F_OPTBTN);
  42. }
  43. }
  44. #region 初始化工作流
  45. #endregion
  46. AddCancelBtn();
  47. }
  48. #region 初始化任务信息
  49. private Model.T_Wo_WorkOrderTask GetObj(int taskid)
  50. {
  51. Model.T_Wo_WorkOrderTask obj = new Model.T_Wo_WorkOrderTask();
  52. DataTable dt = new DataTable();
  53. try
  54. {
  55. dt = new BLL.T_Wo_WorkOrderTask().GetList("F_TASKID=" + taskid.ToString() + "").Tables[0];
  56. if (dt.Rows.Count > 0)
  57. {
  58. if (dt.Rows[0]["F_AssignParticipator"].ToString() != "null")
  59. {
  60. assOpt = dt.Rows[0]["F_AssignParticipator"].ToString();
  61. }
  62. if (dt.Rows[0]["F_WORKORDERSTATEID"] != null && dt.Rows[0]["F_WORKORDERSTATEID"].ToString() != "")
  63. {
  64. obj.F_WORKORDERSTATEID = int.Parse(dt.Rows[0]["F_WORKORDERSTATEID"].ToString());
  65. txtF_WORKORDERSTATEID.Value = dt.Rows[0]["F_WORKORDERSTATEID"].ToString();
  66. }
  67. if (dt.Rows[0]["F_OPTBTN"] != null)
  68. {
  69. obj.F_OPTBTN = dt.Rows[0]["F_OPTBTN"].ToString();
  70. }
  71. if (dt.Rows[0]["F_TASKFLAG"] != null)
  72. {
  73. obj.F_TASKFLAG = int.Parse(dt.Rows[0]["F_TASKFLAG"].ToString());
  74. }
  75. if (dt.Rows[0]["f_planfinishtime"] != null && dt.Rows[0]["f_planfinishtime"].ToString() != "")
  76. {
  77. time = Convert.ToDateTime(dt.Rows[0]["f_planfinishtime"].ToString());
  78. }
  79. if (dt.Rows[0]["F_OWNERID"] != null && dt.Rows[0]["F_OWNERID"].ToString() != "")
  80. {
  81. obj.F_OWNERID = int.Parse(dt.Rows[0]["F_OWNERID"].ToString());
  82. }
  83. if (dt.Rows[0]["F_INSTANCEID"] != null)
  84. {
  85. obj.F_INSTANCEID = int.Parse(dt.Rows[0]["F_INSTANCEID"].ToString());
  86. txtF_INSTANCEID.Value = dt.Rows[0]["F_INSTANCEID"].ToString();
  87. }
  88. }
  89. }
  90. catch
  91. { }
  92. finally
  93. {
  94. dt.Clear();
  95. dt.Dispose();
  96. }
  97. return obj;
  98. }
  99. #endregion
  100. #region 添加取消按钮
  101. private void AddCancelBtn()
  102. {
  103. System.Web.UI.HtmlControls.HtmlGenericControl btncancel = new System.Web.UI.HtmlControls.HtmlGenericControl("a");
  104. btncancel.ID = "btncancel";
  105. btncancel.Attributes.Add("class", "btnSearch");
  106. btncancel.Attributes.Add("onclick", "parent.CloseThis()");
  107. btncancel.InnerText = "取消";
  108. tdbtn.Controls.Add(btncancel);
  109. }
  110. #endregion
  111. /// <summary>
  112. /// 绑定初始值
  113. /// </summary>
  114. public void GetModelValue(string workorderid)
  115. {
  116. Common.LoginUser user = new Common.LoginUser(this.Context);
  117. F_USERNAME.InnerHtml = user.UserName;
  118. string sql = "select * from V_WorkOrderBase where F_WORKORDERID=" + workorderid + "";
  119. DataTable dt = DbHelperSQL.Query(sql).Tables[0];
  120. System.Collections.Generic.List<Model.T_Wo_WorkOrderBase> baseModel = new BLL.T_Wo_WorkOrderBase().DataTableToList(dt);
  121. if (baseModel.Count > 0)
  122. {
  123. if (baseModel[0].F_CREATEBY != null)
  124. {
  125. creatUser = Convert.ToInt32(baseModel[0].F_CREATEBY);
  126. }
  127. if (baseModel[0].F_INSTANCEID != null)
  128. {
  129. instanceId = baseModel[0].F_INSTANCEID.ToString();
  130. }
  131. if (baseModel[0].F_Name != null)
  132. {
  133. F_Name.InnerHtml = baseModel[0].F_Name.ToString();
  134. }
  135. if (baseModel[0].F_TypeName != null)
  136. {
  137. F_TypeName.InnerHtml = baseModel[0].F_TypeName.ToString();
  138. }
  139. if (baseModel[0].F_UserAccountName != null)
  140. {
  141. F_UserAccountName.InnerHtml = baseModel[0].F_UserAccountName.ToString();
  142. }
  143. }
  144. }
  145. #region 初始化工作流引擎
  146. private void InitEngine(string optbtn)
  147. {
  148. wosBusineSupporter = new WOSBusineSupporter.WOSBusineSupporter();
  149. wosBusineSupporter.ConnectionString = connStr;
  150. /**/
  151. //Oracle数据库存储方式
  152. MSSQLDBWorkflowInstanceFactory instanceFactory = new MSSQLDBWorkflowInstanceFactory();
  153. instanceFactory.ConnectionString = connStr;
  154. MSSQLDBPersistentServer persistenServer = new MSSQLDBPersistentServer();
  155. persistenServer.ConnectionString = connStr;
  156. engine = new SimpleWFEngine(wosBusineSupporter, persistenServer, instanceFactory);
  157. MSSQLDBWorkflowTypeInfoSupporter sup = new MSSQLDBWorkflowTypeInfoSupporter();
  158. sup.ConnectionString = connStr;
  159. #region 顺序操作
  160. if (optbtn != "")
  161. {
  162. optbtn += "#@!";
  163. optbtn = optbtn.Replace(",#@!", "").Replace("#@!", "");
  164. DataTable dt = new DataTable();
  165. try
  166. {
  167. dt = new BLL.T_Wo_WorkOrderButton().GetList(" F_BUTTONID in (" + optbtn + ") ").Tables[0];
  168. if (dt.Rows.Count > 0)
  169. {
  170. int idcount = 0;
  171. foreach (DataRow dr in dt.Rows)
  172. {
  173. LinkButton runSavebtn = new LinkButton();
  174. runSavebtn.ID = "runSavebtn" + idcount.ToString();
  175. runSavebtn.Attributes.Add("class", "btnSearch");
  176. if (dr["F_Name"].ToString().Trim() != "结单" && dr["F_BUTTONID"].ToString() != "12")
  177. {
  178. }
  179. else
  180. {
  181. runSavebtn.OnClientClick = "return Confirm('" + idcount.ToString() + "');";
  182. }
  183. runSavebtn.Text = dr["F_Name"].ToString().Trim();
  184. runSavebtn.CommandArgument = dr["F_ButtonId"].ToString();
  185. runSavebtn.Click += new EventHandler(runSavebtn_Click);
  186. tdbtn.Controls.Add(runSavebtn);
  187. //添加空格间距
  188. System.Web.UI.HtmlControls.HtmlGenericControl spannull = new System.Web.UI.HtmlControls.HtmlGenericControl("span");
  189. spannull.ID = "btnnull" + idcount.ToString();
  190. spannull.InnerHtml = "&nbsp;&nbsp;";
  191. tdbtn.Controls.Add(spannull);
  192. idcount++;
  193. }
  194. }
  195. }
  196. catch
  197. {
  198. }
  199. finally
  200. {
  201. dt.Clear();
  202. dt.Dispose();
  203. }
  204. }
  205. #endregion
  206. }
  207. #endregion
  208. protected void runSavebtn_Click(object sender, EventArgs e)
  209. {
  210. Common.LoginUser user = new Common.LoginUser(this.Context);
  211. LinkButton btn = (LinkButton)sender;
  212. try
  213. {
  214. //保存表单信息
  215. bool rbl = SaveForm();
  216. if (rbl)
  217. {
  218. //顺序操作事件(未能指派)
  219. string errinfo = "";
  220. string dealContent = "";//
  221. WorkflowOprErr bl;
  222. int optOwnerId = taskobj.F_OWNERID;
  223. if (btn.CommandArgument == "12" || btn.Text == "结单")
  224. {
  225. dealContent = "(" + user.UserName + ")执行了" + btn.Text.Trim() + "操作,描述:" + F_CONTENT.Text + "。";
  226. bl = engine.RunOpr(txtF_INSTANCEID.Value, optOwnerId.ToString(), txtF_WORKORDERSTATEID.Value, btn.CommandArgument, null, dealContent, out errinfo);
  227. }
  228. else if (btn.CommandArgument == "13" || btn.Text == "重新指派")
  229. {
  230. dealContent = "(" + user.UserName + ")重新指派,指派描述:" + F_CONTENT.Text;//
  231. bl = engine.RunOpr(txtF_INSTANCEID.Value, optOwnerId.ToString(), txtF_WORKORDERSTATEID.Value, btn.CommandArgument, GetAssignParticipatorListCXZP(), dealContent, out errinfo);
  232. }
  233. else
  234. {
  235. dealContent = "(" + user.UserName + ")回复内容:" + F_CONTENT.Text;
  236. bl = engine.RunOpr(txtF_INSTANCEID.Value, optOwnerId.ToString(), txtF_WORKORDERSTATEID.Value, btn.CommandArgument, null, dealContent, out errinfo);
  237. }
  238. if (bl.ToString() == "OK")
  239. {
  240. SaveHistoryInfo();
  241. InsertOptLogs(0, 0, "操作成功!orderhuifu.aspx页面" + dealContent, 0);
  242. MessageBoxToWindow("保存成功", "保存提示!", "success");
  243. }
  244. else
  245. {
  246. InsertOptLogs(0, 0, "操作失败!orderhuifu.aspx页面" + "(" + user.UserName + ")执行了" + btn.Text.Trim() + "操作,描述:" + F_CONTENT.Text + "。", 1);
  247. MessageBoxToWindow("保存失败", "保存提示!", "error");
  248. }
  249. }
  250. }
  251. catch (Exception e1)
  252. {
  253. InsertOptLogs(0, 0, "操作异常!orderhuifu.aspx页面" + "(" + user.UserName + ")执行了" + btn.Text.Trim() + "操作,描述:" + F_CONTENT.Text + "。异常信息:" + e1.ToString(), 2);
  254. MessageBoxToWindow("保存失败", "保存提示!", "error");
  255. }
  256. }
  257. private AssignParticipator[] GetAssignParticipatorListCXZP()
  258. {
  259. AssignParticipator[] arr = new AssignParticipator[1];
  260. arr[0] = new AssignParticipator();
  261. arr[0].NodeID = "4";
  262. arr[0].NodeName = "待指派";
  263. ParticipatorInfo partinfo = new ParticipatorInfo();
  264. List<Model.T_Sys_UserAccount> list = new List<Model.T_Sys_UserAccount>();
  265. 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)");
  266. if (list.Count == 0)
  267. {
  268. list = (new BLL.T_Sys_UserAccount()).GetModelList(" F_UserId=" + creatUser + " ");
  269. }
  270. UserInfo[] userlist = new UserInfo[list.Count];
  271. for (int i = 0; i < userlist.Length; i++)
  272. {
  273. UserInfo user = new UserInfo();
  274. user.ID = list[i].F_UserId.ToString();
  275. user.Name = list[i].F_UserName;
  276. userlist[i] = user;
  277. }
  278. partinfo.UserList = userlist;
  279. arr[0].ParticipatorInfo = new AssembleWorkFlowTask().AssembleParticipator(partinfo).InnerXml;
  280. return arr;
  281. }
  282. private void SaveHistoryInfo()
  283. {
  284. try
  285. {
  286. Common.LoginUser user = new Common.LoginUser(this.Context);
  287. Model.T_Wo_WorkOrderHistoryInfo modelHistoryInfo = new Model.T_Wo_WorkOrderHistoryInfo();
  288. string sql = "select * from T_Wo_WorkOrderHistory where F_INSTANCEID=" + txtF_INSTANCEID.Value + " and F_OPTUSERID=" + user.UserID + " order by F_HISTORYID desc";
  289. DataTable dt = DbHelperSQL.Query(sql).Tables[0];
  290. if (dt.Rows.Count > 0)
  291. {
  292. modelHistoryInfo.F_HISTORYID = Convert.ToInt32(dt.Rows[0]["F_HISTORYID"]);
  293. }
  294. modelHistoryInfo.F_OPTUSERID = user.UserID;
  295. modelHistoryInfo.F_REMARK = F_CONTENT.Text.Trim();
  296. modelHistoryInfo.F_INSTANCEID = Convert.ToInt32(txtF_INSTANCEID.Value);
  297. modelHistoryInfo.F_OPTDATE = DateTime.Now;
  298. modelHistoryInfo.F_CUSTOMERSCORE = F_CUSTOMERSCORE.Text.Trim();
  299. modelHistoryInfo.F_CUSTOMEROPINION = F_CUSTOMEROPINION.Text.Trim();
  300. modelHistoryInfo.F_VISITTYPE = F_VISITTYPE.Text.Trim();
  301. modelHistoryInfo.F_SOLVE = F_SOLVE.Text.Trim();
  302. BLL.T_Wo_WorkOrderHistoryInfo bll_addHistory = new BLL.T_Wo_WorkOrderHistoryInfo();
  303. bll_addHistory.Add(modelHistoryInfo);
  304. }
  305. catch { }
  306. }
  307. private bool SaveForm()
  308. {
  309. Common.LoginUser user = new Common.LoginUser(this.Context);
  310. bool bl = true;
  311. Model.T_Wo_WorkOrderTaskInfo model = new Model.T_Wo_WorkOrderTaskInfo();
  312. if (taskId != "")
  313. {
  314. model.F_TASKID = Convert.ToInt32(taskId);//任务ID
  315. }
  316. else { model.F_TASKID = 0; }
  317. model.F_WORKORDERID = Convert.ToInt32(workorderid);//工单ID
  318. model.F_OPTBY = user.UserID;//操作人ID
  319. model.F_REPLYINFO = F_CONTENT.Text;
  320. model.F_OPTDATE = DateTime.Now;
  321. BLL.T_Wo_WorkOrderTaskInfo bll_add = new BLL.T_Wo_WorkOrderTaskInfo();
  322. if (bll_add.Add(model) > 0)
  323. { bl = true; }
  324. else { bl = false; }
  325. return bl;
  326. }
  327. #region 弹出对话框
  328. /// <summary>
  329. /// 弹出对话框
  330. /// </summary>
  331. /// <param name="title"></param>
  332. /// <param name="content"></param>
  333. /// <param name="type"></param>
  334. public void MessageBoxToWindow(string title, string content, string type)
  335. {
  336. string script = "";
  337. switch (type)
  338. {
  339. case "error"://失败
  340. type = "error";
  341. script = "<script type='text/javascript'> parent.$.ligerDialog.alert('" + title + "','" + content + "','" + type + "');</script>";
  342. break;
  343. case "success"://成功
  344. type = "info";
  345. script = "<script type='text/javascript'> parent.$.ligerDialog.alert('" + title + "','" + content + "','" + type + "',parent.Close);</script>";
  346. break;
  347. case "catch"://异常
  348. type = "warning";
  349. script = "<script type='text/javascript'> parent.$.ligerDialog.alert('" + title + "','" + content + "','" + type + "');</script>";
  350. break;
  351. default:
  352. type = "question";
  353. break;
  354. }
  355. ClientScript.RegisterClientScriptBlock(this.GetType(), "", script);
  356. }
  357. #endregion
  358. }
  359. }