frmPopTaskChat.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. using com.hnshituo.pur.vo;
  2. using Core.Mes.Client.Comm.Control;
  3. using Core.Mes.Client.Comm.Tool;
  4. using CoreFS.CA06;
  5. using Infragistics.Win.UltraWinGrid;
  6. using Pur.Entity;
  7. using Pur.Entity.configureEntity;
  8. using Pur.Entity.pur_planEntity;
  9. using Pur.require_plan;
  10. using System;
  11. using System.Collections;
  12. using System.Collections.Generic;
  13. using System.ComponentModel;
  14. using System.Data;
  15. using System.Drawing;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Windows.Forms;
  19. namespace Pur.pur_plan
  20. {
  21. public partial class frmPopTaskChat : FrmPmsBase
  22. {
  23. string QstrTaskId = "";
  24. int ChatNum = 0;//保存当前显示的记录条数
  25. public frmPopTaskChat(OpeBase ob,string strTaskId)
  26. {
  27. InitializeComponent();
  28. this.ob = ob;
  29. QstrTaskId = strTaskId;
  30. }
  31. protected override void OnLoad(EventArgs e)
  32. {
  33. base.OnLoad(e);
  34. ultraGrid7.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.False;
  35. }
  36. #region 获取任务单基本信息(物料、供应商、报价信息)
  37. /// <summary>
  38. /// 读取任务单
  39. /// </summary>
  40. private void doQuery()
  41. {
  42. try
  43. {
  44. this.Cursor = Cursors.WaitCursor;
  45. dataSet1.Clear();
  46. PurTaskMEntity entity = new PurTaskMEntity();
  47. if (txt_taskId.Text.Trim() != "")
  48. {
  49. entity.TaskId = txt_taskId.Text.Trim();
  50. }
  51. if (ck_isAll.Checked == false)
  52. {
  53. entity.Status = "1";//查询评审中和生成采购纪要
  54. }
  55. if (txt_taskName.Text.Trim() != "")
  56. {
  57. entity.TaskName = txt_taskName.Text.Trim();
  58. }
  59. entity.Validflag = "1";
  60. if (ck_ctime.Checked)
  61. {
  62. if (txt_createTimeStart.Text != "")
  63. {
  64. entity.CreateTime = Convert.ToDateTime(txt_createTimeStart.Value);
  65. }
  66. if (txt_createTimeEnd.Text != "")
  67. {
  68. entity.UpdateTime = Convert.ToDateTime(txt_createTimeEnd.Value);
  69. }
  70. }
  71. entity.DeleteName = "1";
  72. DataTable taskList = this.execute<DataTable>("com.hnshituo.pur.purplan.service.TaskMService", "getTaskList", new object[] { entity });
  73. GridHelper.CopyDataToDatatable(taskList, dataTable1, true);
  74. GridHelper.RefreshAndAutoSize(ultraGrid1);
  75. comm.doActiveSelRow(ultraGrid1, "taskid", QstrTaskId);
  76. }
  77. catch (Exception ex)
  78. {
  79. MessageUtil.ShowTips("初始化加载数据失败:" + ex.Message);
  80. }
  81. finally
  82. {
  83. this.Cursor = Cursors.Default;
  84. }
  85. }
  86. /// <summary>
  87. /// 查询供应商
  88. /// </summary>
  89. public void GetSupp()
  90. {
  91. if (QstrTaskId != "")
  92. {
  93. // 查询供应商
  94. PurTaskSuppsEntity M_PurTaskSupps = new PurTaskSuppsEntity();
  95. M_PurTaskSupps.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString();
  96. M_PurTaskSupps.Validflag = "1";
  97. DataTable dt = this.execute<DataTable>("com.hnshituo.pur.purplan.service.TaskSuppsService", "findisBidSuppsByTaskId", new object[] { ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString() });
  98. GridHelper.CopyDataToDatatable(ref dt, ref dataTable3, true);//绑定供应商(查看供应商个数)
  99. }
  100. }
  101. #endregion
  102. #region 发送和读取聊天记录
  103. /// <summary>
  104. /// 读取聊天信息
  105. /// </summary>
  106. private void readChatMessage()
  107. {
  108. timer1.Stop();
  109. //richTextBox2.Clear();
  110. PurTaskChatEntity ReviewBillMEntity = new PurTaskChatEntity();
  111. ReviewBillMEntity.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString();
  112. ReviewBillMEntity.ReceiverType = "2";
  113. //ReviewBillMEntity.ReceiverUserid = UserInfo.GetUserID();//ReceiverUserid属性传采购商代码
  114. if(txt_cmbSupp.Value.ToString()!="全部")
  115. {
  116. ReviewBillMEntity.SenderUserid = txt_cmbSupp.Value.ToString();// ultraGrid7.ActiveRow.Cells["suppcode"].Value.ToString();//SenderUserid属性传供应商代码
  117. }
  118. DataTable dt_ChitChatNew = this.execute<DataTable>("com.hnshituo.pur.purplan.service.TaskChatService", "getChitChatMessege", new object[] { ReviewBillMEntity });
  119. //获取最大时间
  120. if(dt_ChitChatNew.Rows.Count>0)
  121. {
  122. ReviewBillMEntity.CreateTime=DateTime.Parse(dt_ChitChatNew.Rows[dt_ChitChatNew.Rows.Count-1]["createTime"].ToString());
  123. }
  124. //string strMessage = "";
  125. int[,] MassageColor = new int[(dt_ChitChatNew.Rows.Count - ChatNum) * 2, 3];//二位数组,保存聊天记录,字体显示颜色
  126. //判断是否有信息输入,有信息输入则增加,没有信息记录则不增加信息
  127. for (int j = ChatNum; j < dt_ChitChatNew.Rows.Count; j++)
  128. {
  129. if (dt_ChitChatNew.Rows[j]["SENDERTYPE"].ToString() == "2")
  130. {
  131. MassageColor[j - ChatNum, 2] = 2;
  132. }
  133. else
  134. {
  135. MassageColor[j - ChatNum, 2] = 1;
  136. }
  137. string str = "";
  138. if (j > 0)
  139. {
  140. str += "\n";
  141. }
  142. //str = dt_ChitChatNew.Rows[j]["SENDERUSERNAME"].ToString() + "(" + dt_ChitChatNew.Rows[j]["SENDERUSERID"].ToString() + ")" + dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n";
  143. if (dt_ChitChatNew.Rows[j]["SENDERTYPE"].ToString() == "2")
  144. {
  145. str += "您对" + dt_ChitChatNew.Rows[j]["RECEIVERUSERNAME"].ToString()+" "+dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n";
  146. }
  147. else
  148. {
  149. if (dt_ChitChatNew.Rows[j]["TYPE"].ToString() == "2")
  150. { str += "(群聊) "; }
  151. str += dt_ChitChatNew.Rows[j]["SENDERUSERNAME"].ToString() + " " + dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n";
  152. }
  153. MassageColor[j - ChatNum, 0] = richTextBox2.Text.Length; ;//标记颜色起始位置
  154. //strMessage += str;
  155. richTextBox2.AppendText(str);
  156. MassageColor[j - ChatNum, 1] = str.Length;//标记颜色结束位置
  157. MassageColor[(j - ChatNum) + 1, 0] = richTextBox2.Text.Length; ;//标记颜色起始位置
  158. //strMessage += " " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n";
  159. richTextBox2.AppendText(" " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n");
  160. MassageColor[(j - ChatNum) + 1, 1] = (" " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n").Length;//标记颜色结束位置
  161. MassageColor[(j - ChatNum) + 1, 2] = 3;//标记发送信息的颜色
  162. //rtb.SelectionStart = rtb.TextLength;//设置滚动条的位置
  163. //rtb.ScrollToCaret();//必须设置滚动起始标记位置
  164. richTextBox2.ScrollToCaret();//必须设置滚动起始标记位置
  165. richTextBox2.SelectionStart = richTextBox2.TextLength;
  166. }
  167. //richTextBox2.AppendText(strMessage);
  168. ChatNum = dt_ChitChatNew.Rows.Count;
  169. //Q_ChatcCount[i] = count;//保存当前供应商聊天记录条数
  170. //rtb.SelectionStart = rtb.TextLength;//设置滚动条的位置
  171. //rtb.ScrollToCaret();//必须设置滚动起始标记位置
  172. setChatColor(richTextBox2, MassageColor);
  173. if (dt_ChitChatNew.Rows.Count > 0)
  174. {
  175. int numIsRead = dt_ChitChatNew.Select("isread='0' and SENDERUSERNAME <> '" + this.UserInfo.GetUserName()+"'").Count();//查询未读的计记录
  176. if (numIsRead > 0)
  177. {
  178. setIsRead(ReviewBillMEntity);//标记已读
  179. }
  180. }
  181. timer1.Start();
  182. }
  183. /// <summary>
  184. /// 标记已读
  185. /// </summary>
  186. private void setIsRead(PurTaskChatEntity ReviewBillMEntity)
  187. {
  188. CoreResult re = this.execute<CoreResult>("com.hnshituo.pur.purplan.service.TaskChatService", "setIsRead", new object[] { ReviewBillMEntity });
  189. if (re.Resultcode != 0)
  190. {
  191. MessageUtil.ShowTips("标记为已读失败 " + re.Resultmsg);
  192. return;
  193. }
  194. GetSupp();//属性供应商
  195. }
  196. /// <summary>
  197. /// 发送信息
  198. /// </summary>
  199. private void sendMessage()
  200. {
  201. chk_IsMultiChat.Enabled = false;
  202. ultraGrid7.UpdateData();
  203. if (textBox1.Text.Trim() == "")
  204. {
  205. MessageUtil.ShowTips("发送类容不能为空");
  206. return;
  207. }
  208. ArrayList al = new ArrayList();
  209. textBox1.Text = textBox1.Text.Replace("\n", "\n ");
  210. for (int i = 0; i < ultraGrid7.Rows.Count; i++)
  211. {
  212. UltraGridRow ugr = ultraGrid7.Rows[i];
  213. if ((bool)ugr.Cells["check"].Value || chk_IsMultiChat.Checked)//群聊或者选中
  214. {
  215. PurTaskChatEntity ReviewBillMEntity = new PurTaskChatEntity();
  216. ReviewBillMEntity.Id = Guid.NewGuid().ToString();
  217. ReviewBillMEntity.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString();
  218. ReviewBillMEntity.SenderType = "2";
  219. ReviewBillMEntity.SenderUsername = UserInfo.GetUserName();
  220. ReviewBillMEntity.SenderUserid = UserInfo.GetUserID();
  221. ReviewBillMEntity.ReceiverType = "1";
  222. ReviewBillMEntity.ReceiverUserid = ugr.Cells["suppcode"].Value.ToString();
  223. ReviewBillMEntity.ReceiverUsername = ugr.Cells["suppName"].Value.ToString();
  224. ReviewBillMEntity.CreateName = UserInfo.GetUserName();
  225. ReviewBillMEntity.CreateUserid = UserInfo.GetUserID();
  226. //ReviewBillMEntity.CreateTime = System.DateTime.Now;
  227. ReviewBillMEntity.Message = textBox1.Text;
  228. ReviewBillMEntity.Isread = "0";
  229. if (chk_IsMultiChat.Checked)
  230. {
  231. ReviewBillMEntity.Type = "2";
  232. }
  233. else
  234. { ReviewBillMEntity.Type = "1"; }
  235. al.Add(ReviewBillMEntity);
  236. }
  237. }
  238. chk_IsMultiChat.Enabled = true;
  239. if (al.Count < 1)
  240. {
  241. MessageUtil.ShowTips("请选择发送的供应商");
  242. }
  243. else
  244. {
  245. string strTips = "确定发送给以下供应商:" + "\n";
  246. foreach(object obj in al)
  247. {
  248. strTips += ((PurTaskChatEntity)obj).ReceiverUsername.ToString() + "\n";
  249. }
  250. if (!comm.ConfirmOption(strTips))
  251. { return; }
  252. Boolean bl = true;
  253. CoreResult crt = this.execute<CoreResult>("com.hnshituo.pur.purplan.service.TaskChatService", "sendChatMessage", new object[] { al });
  254. if (bl)
  255. {
  256. timer1.Stop();
  257. //timer2.Stop();
  258. readChatMessage();//刷新聊天信息
  259. timer1.Start();
  260. //timer2.Start();
  261. textBox1.Text = "";
  262. }
  263. else
  264. {
  265. MessageUtil.ShowTips("发送失败,请重新发送");
  266. }
  267. if (crt.Resultcode != 0)
  268. {
  269. MessageUtil.ShowTips("发送失败 " + crt.Resultmsg);
  270. return;
  271. }
  272. }
  273. }
  274. #endregion
  275. /// <summary>
  276. /// 设置聊天发送人显示颜色
  277. /// </summary>
  278. /// <param name="rtb">改变颜色RichTextBox控件</param>
  279. /// <param name="rows">聊天记录</param>
  280. protected void setChatColor(RichTextBox rtb, int[,] MassageColor)
  281. {
  282. for (int i = 0; i < MassageColor.GetLength(0); i++)
  283. {
  284. rtb.SelectionStart = MassageColor[i, 0];
  285. rtb.SelectionLength = MassageColor[i, 1];
  286. if (MassageColor[i, 2] == 1)
  287. {
  288. rtb.SelectionColor = Color.Red;
  289. }
  290. else if (MassageColor[i, 2] == 2)
  291. {
  292. rtb.SelectionColor = Color.Blue;
  293. }
  294. else
  295. {
  296. rtb.SelectionColor = Color.Black;
  297. }
  298. }
  299. }
  300. /// <summary>
  301. /// 选择供应商
  302. /// </summary>
  303. /// <param name="sender"></param>
  304. /// <param name="e"></param>
  305. private void ultraGrid7_AfterRowActivate(object sender, EventArgs e)
  306. {
  307. //ultraTabControl5.SelectedTab.Text = ultraGrid7.ActiveRow.Cells["suppname"].Value.ToString();
  308. //readChatMessage();
  309. //ultraGrid7.ActiveRow.Cells["check"].Value = (!(bool)ultraGrid7.ActiveRow.Cells["check"].Value) ;
  310. }
  311. /// <summary>
  312. /// 发送信息按钮
  313. /// </summary>
  314. /// <param name="sender"></param>
  315. /// <param name="e"></param>
  316. private void btn_SendMessage_Click(object sender, EventArgs e)
  317. {
  318. sendMessage();
  319. }
  320. /// <summary>
  321. /// 点击群聊复选框
  322. /// </summary>
  323. /// <param name="sender"></param>
  324. /// <param name="e"></param>
  325. private void chk_IsMultiChat_CheckedChanged(object sender, EventArgs e)
  326. {
  327. //ultraGrid7.DisplayLayout.Bands[0].Columns["check"].Hidden = !chk_IsMultiChat.Checked;
  328. }
  329. /// <summary>
  330. /// 查询任务单
  331. /// </summary>
  332. /// <param name="sender"></param>
  333. /// <param name="e"></param>
  334. private void txt_refresh_Click(object sender, EventArgs e)
  335. {
  336. doQuery();
  337. }
  338. /// <summary>
  339. /// 加载界面
  340. /// </summary>
  341. /// <param name="sender"></param>
  342. /// <param name="e"></param>
  343. private void frmPopTaskChat_Load(object sender, EventArgs e)
  344. {
  345. //绑定供应商到下拉列表
  346. doQuery();
  347. comm.FilComboboxAdd(txt_cmbSupp, dataTable3, "suppcode", "suppname", "", true, "全部", "全部");
  348. txt_cmbSupp.SelectedIndex = 0;
  349. //ultraGrid7.DisplayLayout.Bands[0].Columns["check"].CellActivation = Activation.ActivateOnly;
  350. ultraGrid7.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.False;
  351. ultraExpandableGroupBox3.Expanded = false;
  352. }
  353. /// <summary>
  354. /// 选择任务单
  355. /// </summary>
  356. /// <param name="sender"></param>
  357. /// <param name="e"></param>
  358. private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
  359. {
  360. ChatNum = 0;
  361. richTextBox2.Clear();
  362. GetSupp();
  363. readChatMessage();
  364. }
  365. /// <summary>
  366. /// 定时器
  367. /// </summary>
  368. /// <param name="sender"></param>
  369. /// <param name="e"></param>
  370. private void timer1_Tick(object sender, EventArgs e)
  371. {
  372. readChatMessage();
  373. }
  374. private void frmPopTaskChat_FormClosing(object sender, FormClosingEventArgs e)
  375. {
  376. if (timer1 != null)
  377. timer1.Dispose();
  378. }
  379. private void timer2_Tick(object sender, EventArgs e)
  380. {
  381. }
  382. /// <summary>
  383. /// 选择显示聊天信息对象
  384. /// </summary>
  385. /// <param name="sender"></param>
  386. /// <param name="e"></param>
  387. private void txt_cmbSupp_ValueChanged(object sender, EventArgs e)
  388. {
  389. ChatNum = 0;
  390. richTextBox2.Clear();
  391. readChatMessage();
  392. }
  393. }
  394. }