市长热线演示版

orderreply.aspx.cs 19KB

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