using com.hnshituo.pur.vo; using Core.Mes.Client.Comm.Control; using Core.Mes.Client.Comm.Tool; using CoreFS.CA06; using Infragistics.Win.UltraWinGrid; using Pur.Entity; using Pur.Entity.configureEntity; using Pur.Entity.pur_planEntity; using Pur.require_plan; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Pur.pur_plan { public partial class frmPopTaskChat : FrmPmsBase { string QstrTaskId = ""; int ChatNum = 0;//保存当前显示的记录条数 public frmPopTaskChat(OpeBase ob,string strTaskId) { InitializeComponent(); this.ob = ob; QstrTaskId = strTaskId; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); ultraGrid7.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.False; } #region 获取任务单基本信息(物料、供应商、报价信息) /// /// 读取任务单 /// private void doQuery() { try { this.Cursor = Cursors.WaitCursor; dataSet1.Clear(); PurTaskMEntity entity = new PurTaskMEntity(); if (txt_taskId.Text.Trim() != "") { entity.TaskId = txt_taskId.Text.Trim(); } if (ck_isAll.Checked == false) { entity.Status = "1";//查询评审中和生成采购纪要 } if (txt_taskName.Text.Trim() != "") { entity.TaskName = txt_taskName.Text.Trim(); } entity.Validflag = "1"; if (ck_ctime.Checked) { if (txt_createTimeStart.Text != "") { entity.CreateTime = Convert.ToDateTime(txt_createTimeStart.Value); } if (txt_createTimeEnd.Text != "") { entity.UpdateTime = Convert.ToDateTime(txt_createTimeEnd.Value); } } entity.DeleteName = "1"; DataTable taskList = this.execute("com.hnshituo.pur.purplan.service.TaskMService", "getTaskList", new object[] { entity }); GridHelper.CopyDataToDatatable(taskList, dataTable1, true); GridHelper.RefreshAndAutoSize(ultraGrid1); comm.doActiveSelRow(ultraGrid1, "taskid", QstrTaskId); } catch (Exception ex) { MessageUtil.ShowTips("初始化加载数据失败:" + ex.Message); } finally { this.Cursor = Cursors.Default; } } /// /// 查询供应商 /// public void GetSupp() { if (QstrTaskId != "") { // 查询供应商 PurTaskSuppsEntity M_PurTaskSupps = new PurTaskSuppsEntity(); M_PurTaskSupps.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString(); M_PurTaskSupps.Validflag = "1"; DataTable dt = this.execute("com.hnshituo.pur.purplan.service.TaskSuppsService", "findisBidSuppsByTaskId", new object[] { ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString() }); GridHelper.CopyDataToDatatable(ref dt, ref dataTable3, true);//绑定供应商(查看供应商个数) } } #endregion #region 发送和读取聊天记录 /// /// 读取聊天信息 /// private void readChatMessage() { timer1.Stop(); //richTextBox2.Clear(); PurTaskChatEntity ReviewBillMEntity = new PurTaskChatEntity(); ReviewBillMEntity.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString(); ReviewBillMEntity.ReceiverType = "2"; //ReviewBillMEntity.ReceiverUserid = UserInfo.GetUserID();//ReceiverUserid属性传采购商代码 if(txt_cmbSupp.Value.ToString()!="全部") { ReviewBillMEntity.SenderUserid = txt_cmbSupp.Value.ToString();// ultraGrid7.ActiveRow.Cells["suppcode"].Value.ToString();//SenderUserid属性传供应商代码 } DataTable dt_ChitChatNew = this.execute("com.hnshituo.pur.purplan.service.TaskChatService", "getChitChatMessege", new object[] { ReviewBillMEntity }); //获取最大时间 if(dt_ChitChatNew.Rows.Count>0) { ReviewBillMEntity.CreateTime=DateTime.Parse(dt_ChitChatNew.Rows[dt_ChitChatNew.Rows.Count-1]["createTime"].ToString()); } //string strMessage = ""; int[,] MassageColor = new int[(dt_ChitChatNew.Rows.Count - ChatNum) * 2, 3];//二位数组,保存聊天记录,字体显示颜色 //判断是否有信息输入,有信息输入则增加,没有信息记录则不增加信息 for (int j = ChatNum; j < dt_ChitChatNew.Rows.Count; j++) { if (dt_ChitChatNew.Rows[j]["SENDERTYPE"].ToString() == "2") { MassageColor[j - ChatNum, 2] = 2; } else { MassageColor[j - ChatNum, 2] = 1; } string str = ""; if (j > 0) { str += "\n"; } //str = dt_ChitChatNew.Rows[j]["SENDERUSERNAME"].ToString() + "(" + dt_ChitChatNew.Rows[j]["SENDERUSERID"].ToString() + ")" + dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n"; if (dt_ChitChatNew.Rows[j]["SENDERTYPE"].ToString() == "2") { str += "您对" + dt_ChitChatNew.Rows[j]["RECEIVERUSERNAME"].ToString()+" "+dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n"; } else { if (dt_ChitChatNew.Rows[j]["TYPE"].ToString() == "2") { str += "(群聊) "; } str += dt_ChitChatNew.Rows[j]["SENDERUSERNAME"].ToString() + " " + dt_ChitChatNew.Rows[j]["CREATETIME"].ToString() + "\n"; } MassageColor[j - ChatNum, 0] = richTextBox2.Text.Length; ;//标记颜色起始位置 //strMessage += str; richTextBox2.AppendText(str); MassageColor[j - ChatNum, 1] = str.Length;//标记颜色结束位置 MassageColor[(j - ChatNum) + 1, 0] = richTextBox2.Text.Length; ;//标记颜色起始位置 //strMessage += " " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n"; richTextBox2.AppendText(" " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n"); MassageColor[(j - ChatNum) + 1, 1] = (" " + dt_ChitChatNew.Rows[j]["MESSAGE"].ToString() + "\n").Length;//标记颜色结束位置 MassageColor[(j - ChatNum) + 1, 2] = 3;//标记发送信息的颜色 //rtb.SelectionStart = rtb.TextLength;//设置滚动条的位置 //rtb.ScrollToCaret();//必须设置滚动起始标记位置 richTextBox2.ScrollToCaret();//必须设置滚动起始标记位置 richTextBox2.SelectionStart = richTextBox2.TextLength; } //richTextBox2.AppendText(strMessage); ChatNum = dt_ChitChatNew.Rows.Count; //Q_ChatcCount[i] = count;//保存当前供应商聊天记录条数 //rtb.SelectionStart = rtb.TextLength;//设置滚动条的位置 //rtb.ScrollToCaret();//必须设置滚动起始标记位置 setChatColor(richTextBox2, MassageColor); if (dt_ChitChatNew.Rows.Count > 0) { int numIsRead = dt_ChitChatNew.Select("isread='0' and SENDERUSERNAME <> '" + this.UserInfo.GetUserName()+"'").Count();//查询未读的计记录 if (numIsRead > 0) { setIsRead(ReviewBillMEntity);//标记已读 } } timer1.Start(); } /// /// 标记已读 /// private void setIsRead(PurTaskChatEntity ReviewBillMEntity) { CoreResult re = this.execute("com.hnshituo.pur.purplan.service.TaskChatService", "setIsRead", new object[] { ReviewBillMEntity }); if (re.Resultcode != 0) { MessageUtil.ShowTips("标记为已读失败 " + re.Resultmsg); return; } GetSupp();//属性供应商 } /// /// 发送信息 /// private void sendMessage() { chk_IsMultiChat.Enabled = false; ultraGrid7.UpdateData(); if (textBox1.Text.Trim() == "") { MessageUtil.ShowTips("发送类容不能为空"); return; } ArrayList al = new ArrayList(); textBox1.Text = textBox1.Text.Replace("\n", "\n "); for (int i = 0; i < ultraGrid7.Rows.Count; i++) { UltraGridRow ugr = ultraGrid7.Rows[i]; if ((bool)ugr.Cells["check"].Value || chk_IsMultiChat.Checked)//群聊或者选中 { PurTaskChatEntity ReviewBillMEntity = new PurTaskChatEntity(); ReviewBillMEntity.Id = Guid.NewGuid().ToString(); ReviewBillMEntity.TaskId = ultraGrid1.ActiveRow.Cells["taskid"].Value.ToString(); ReviewBillMEntity.SenderType = "2"; ReviewBillMEntity.SenderUsername = UserInfo.GetUserName(); ReviewBillMEntity.SenderUserid = UserInfo.GetUserID(); ReviewBillMEntity.ReceiverType = "1"; ReviewBillMEntity.ReceiverUserid = ugr.Cells["suppcode"].Value.ToString(); ReviewBillMEntity.ReceiverUsername = ugr.Cells["suppName"].Value.ToString(); ReviewBillMEntity.CreateName = UserInfo.GetUserName(); ReviewBillMEntity.CreateUserid = UserInfo.GetUserID(); //ReviewBillMEntity.CreateTime = System.DateTime.Now; ReviewBillMEntity.Message = textBox1.Text; ReviewBillMEntity.Isread = "0"; if (chk_IsMultiChat.Checked) { ReviewBillMEntity.Type = "2"; } else { ReviewBillMEntity.Type = "1"; } al.Add(ReviewBillMEntity); } } chk_IsMultiChat.Enabled = true; if (al.Count < 1) { MessageUtil.ShowTips("请选择发送的供应商"); } else { string strTips = "确定发送给以下供应商:" + "\n"; foreach(object obj in al) { strTips += ((PurTaskChatEntity)obj).ReceiverUsername.ToString() + "\n"; } if (!comm.ConfirmOption(strTips)) { return; } Boolean bl = true; CoreResult crt = this.execute("com.hnshituo.pur.purplan.service.TaskChatService", "sendChatMessage", new object[] { al }); if (bl) { timer1.Stop(); //timer2.Stop(); readChatMessage();//刷新聊天信息 timer1.Start(); //timer2.Start(); textBox1.Text = ""; } else { MessageUtil.ShowTips("发送失败,请重新发送"); } if (crt.Resultcode != 0) { MessageUtil.ShowTips("发送失败 " + crt.Resultmsg); return; } } } #endregion /// /// 设置聊天发送人显示颜色 /// /// 改变颜色RichTextBox控件 /// 聊天记录 protected void setChatColor(RichTextBox rtb, int[,] MassageColor) { for (int i = 0; i < MassageColor.GetLength(0); i++) { rtb.SelectionStart = MassageColor[i, 0]; rtb.SelectionLength = MassageColor[i, 1]; if (MassageColor[i, 2] == 1) { rtb.SelectionColor = Color.Red; } else if (MassageColor[i, 2] == 2) { rtb.SelectionColor = Color.Blue; } else { rtb.SelectionColor = Color.Black; } } } /// /// 选择供应商 /// /// /// private void ultraGrid7_AfterRowActivate(object sender, EventArgs e) { //ultraTabControl5.SelectedTab.Text = ultraGrid7.ActiveRow.Cells["suppname"].Value.ToString(); //readChatMessage(); //ultraGrid7.ActiveRow.Cells["check"].Value = (!(bool)ultraGrid7.ActiveRow.Cells["check"].Value) ; } /// /// 发送信息按钮 /// /// /// private void btn_SendMessage_Click(object sender, EventArgs e) { sendMessage(); } /// /// 点击群聊复选框 /// /// /// private void chk_IsMultiChat_CheckedChanged(object sender, EventArgs e) { //ultraGrid7.DisplayLayout.Bands[0].Columns["check"].Hidden = !chk_IsMultiChat.Checked; } /// /// 查询任务单 /// /// /// private void txt_refresh_Click(object sender, EventArgs e) { doQuery(); } /// /// 加载界面 /// /// /// private void frmPopTaskChat_Load(object sender, EventArgs e) { //绑定供应商到下拉列表 doQuery(); comm.FilComboboxAdd(txt_cmbSupp, dataTable3, "suppcode", "suppname", "", true, "全部", "全部"); txt_cmbSupp.SelectedIndex = 0; //ultraGrid7.DisplayLayout.Bands[0].Columns["check"].CellActivation = Activation.ActivateOnly; ultraGrid7.DisplayLayout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.False; ultraExpandableGroupBox3.Expanded = false; } /// /// 选择任务单 /// /// /// private void ultraGrid1_AfterRowActivate(object sender, EventArgs e) { ChatNum = 0; richTextBox2.Clear(); GetSupp(); readChatMessage(); } /// /// 定时器 /// /// /// private void timer1_Tick(object sender, EventArgs e) { readChatMessage(); } private void frmPopTaskChat_FormClosing(object sender, FormClosingEventArgs e) { if (timer1 != null) timer1.Dispose(); } private void timer2_Tick(object sender, EventArgs e) { } /// /// 选择显示聊天信息对象 /// /// /// private void txt_cmbSupp_ValueChanged(object sender, EventArgs e) { ChatNum = 0; richTextBox2.Clear(); readChatMessage(); } } }