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();
}
}
}