using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Windows.Forms; using QMAPP.Entity; using QMAPP.FJC.BLL.FwMark; using QMAPP.FJC.Entity; using QMAPP.FJC.Entity.Andon; using QMAPP.FJC.Entity.Basic; using QMAPP.MD.Entity; using QMAPP.ServicesAgent; using QMAPP.WinForm.Common; using QMAPP.WinForm.Forms.Andon.Enum; using QMAPP.WinForm.Forms.Operation; namespace QMAPP.WinForm.Forms.Andon { /// /// 作 用:Andon呼叫管理 /// 作 者:周晓东 /// 编写日期:2017年11月01日 /// public partial class CallManageForm : Form { #region 变量 private int interval = 1000; private ServiceAgent _agent; //呼叫类型 private string _callType = ""; //选择的呼叫类型 //private string _selectCallType = ""; private string _selectCallTypeCode = ""; //选中的原因 private string _selectReason = ""; //呼叫原因 private string _callReason = ""; //呼叫时间 private string _callTime = ""; //工厂编码 private string _factoryCode = ""; //工位编码 private string _worklocCode = ""; //工位编码 private string _worklocCodeV = ""; //工序编码 private string _workcellCode = ""; //工作中心 private string _workcenterCode = ""; //工作中心 private string _workcenterCodeV = ""; //设备编码 private string _machineCode = ""; //配置表类型 private string _mainTypeCode = "CALL_TYPE"; //处理人 //private string _handler = ""; //班次编码 //private string _shiftCode = ""; //班组编码 //private string _teamCode = ""; //负责人 //private string _keeper = ""; //语言类型 //private string _language = ""; //消息模版 //private string _template = ""; //呼叫等级 //private int _callLevel; //pid private string _pid = ""; //呼叫状态 private string _callState = ""; //解锁文件路径 private string _filepath = ""; //当前页面列表 private List _callLogList; public MainForm mainForm = null; string workCenter_code = ""; string workcell_code = ""; #endregion #region 私有方法 /// /// 获得工位,工厂,班次等信息 /// public void Init() { //根据配置文件获得工位,工序 string locationfile = System.Configuration.ConfigurationManager.AppSettings["loactionfile"]; if (System.IO.File.Exists(locationfile)) { _machineCode = System.IO.File.ReadAllText(locationfile); if (!string.IsNullOrEmpty(_machineCode)) { //设置ip MachineInfo machoneInofModel = new MachineInfo { MACHINECODDE = _machineCode }; var list = _agent.InvokeServiceFunction>("MachineInfoBLL_GetAllList", machoneInofModel); if (list.Count > 0) { _worklocCode = list[0].WORKLOC_CODE; _workcellCode = list[0].WORKCELL_CODE; //根据工序获得工作中心 WorkCell workCellModel = new WorkCell {WORKCELL_CODE = _workcellCode}; var resultWorkCell = _agent.InvokeServiceFunction>("WorkCellBLL_Get", workCellModel); if (resultWorkCell != null) { _workcenterCode = resultWorkCell.Result.WORKCENTER_CODE; //根据工作中心获得工厂编码 var workCenterModel = new MD.Entity.WorkCenter {WORKCENTER_CODE = _workcenterCode}; var resultWorkCenter = _agent.InvokeServiceFunction>("WorkCenterBLL_Get", workCenterModel); if (resultWorkCenter != null) { _factoryCode = resultWorkCenter.Result.FACTORY_CODE; } } } } } } /// /// 获取列表呼叫记录的数据并生成CallLogList /// /// /// public void GetCallLogList(string factoryCode, string worklocCode) { CallLogEntity model = new CallLogEntity { FACTORY_CODE = factoryCode, WORKLOC_CODE = worklocCode, }; _callLogList = _agent.InvokeServiceFunction>("AndonCallBLL_GetCallLogList", model); //只显示列表字段 DGView.AutoGenerateColumns = false; DGView.DataSource = _callLogList; } /// /// 获取工作中心下是否还有0125状态下的呼叫记录 /// /// public bool GetWorkcenterCode(string workcenterCode) { CallLogEntity model = new CallLogEntity { WORKCENTER_CODE = workcenterCode, }; _callLogList = _agent.InvokeServiceFunction>("AndonCallBLL_GetCallLogList", model); if (_callLogList != null && _callLogList.Count>0) { return false; } return true; } /// /// 获取呼叫原因List数据 /// /// /// public List GetCallReasonList(string PID) { //CallReasonEntity model = new CallReasonEntity //{ // CALL_TYPE = callType //}; //List callReasonList = _agent.InvokeServiceFunction>("AndonCallBLL_GetCallReasonList", model); List callReasonList = _agent.InvokeServiceFunction>("ConfigDetailBLL_GetSecondList", _mainTypeCode, PID); //是否带空项填充返回值 //callReasonList.Insert(0, new CallReasonEntity()); return callReasonList; } /// /// 获取维护班组成员的数据 /// /// /// public List GetTeamMemberList(string callType) { TeamMemberEntity model = new TeamMemberEntity { WORKCELL_CODE = comWorkCenter.SelectedValue + "", TEAMTYPE = callType }; List teamMemberList = _agent.InvokeServiceFunction>("TeamMemberBLL_GetAllTeamMember", model); //pid查询 //var v = _agent.InvokeServiceFunction>("TeamMemberBLL_Get", model).Result; //是否带空项填充返回值 //callReasonList.Insert(0, new CallReasonEntity()); return teamMemberList; } /// /// 初始化label /// public void PanelInit() { panelHandler.Visible = false; labCallTime.Text = AndonEnum.labCallTime; labCallReason.Text = AndonEnum.labCallReason; labWaitTime.Text = AndonEnum.labWaitTime; labAnswerTime.Text = AndonEnum.labAnswerTime; labHandleTime.Text = AndonEnum.labHandleTime; ButtenInit(); } /// /// 初始化butten /// public void ButtenInit() { butConfirm.Enabled = false; butCancel.Enabled = false; butEnd.Enabled = false; } /// /// 根据呼叫状态初始化按钮显示状态 /// /// public void StateInit(string callState) { //buttenInit(); switch (callState) { case "0": //正在呼叫 butConfirm.Enabled = true; butCancel.Enabled = true; butEnd.Enabled = false; break; case "1": //已应答 butConfirm.Enabled = false; butCancel.Enabled = false; butEnd.Enabled = false; break; case "2": //开始处理 butConfirm.Enabled = false; butCancel.Enabled = false; butEnd.Enabled = true; break; case "5": //呼叫升级 //正在呼叫 butConfirm.Enabled = true; butCancel.Enabled = true; butEnd.Enabled = false; break; } } #endregion /// /// 由菜单调用呼叫功能 /// public CallManageForm() { InitializeComponent(); butReturn.Visible = false; } /// /// 由加工工位调用安东呼叫界面 /// /// 工作中心 /// 工位号 /// 设备编号 public CallManageForm(string workCenter_code, string workLoc_code, string machineCode) { InitializeComponent(); this._workcenterCode = workCenter_code; this._worklocCode = workLoc_code; this._machineCode = machineCode; butReturn.Visible = true; } private void CallManageForm_Load(object sender, EventArgs e) { _callLogList = new List(); //初始化 _agent = ClientContext.GetServiceAgent(); //获取变量值 //Init(); //初始化控件 PanelInit(); //当工作中心为空时表示由菜单调用的呼叫界面 if (string.IsNullOrEmpty(_workcenterCode)) { //读取当前界面的配置信息 _filepath = ConfigurationManager.AppSettings["SaveFilePath"]; _filepath = string.Format("{0}AndonViewSetting.txt", _filepath); if (System.IO.File.Exists(_filepath)) { // 打开文件准备读取数据 StreamReader rd = File.OpenText(_filepath); this._workcenterCode = rd.ReadLine(); this._worklocCode = rd.ReadLine(); rd.Close(); } } //获得呼叫类型 #region 绑定下拉列表 BasicData basicData = new BasicData(); //返修类别 var callTypeList = basicData.GetConfigDetailComboxSource(_mainTypeCode, false); listBox1.DataSource = callTypeList; listBox1.DisplayMember = "DetailTypeName"; listBox1.ValueMember = "DetailTypeCode"; //工作中心 var workCenterList = basicData.GetFactoryWorkCenterComboxSource(_factoryCode); comWorkCenter.DataSource = workCenterList; comWorkCenter.DisplayMember = "WORKCENTER_NAME"; comWorkCenter.ValueMember = "WORKCENTER_CODE"; comWorkCenter.SelectedValue = this._workcenterCode; comWorkLoc.DisplayMember = "WORKLOC_NAME"; comWorkLoc.ValueMember = "WORKLOC_CODE"; ddlMachine.DisplayMember = "MACHINENAME"; ddlMachine.ValueMember = "MACHINECODDE"; if (string.IsNullOrEmpty(this._workcenterCode) == false) { comWorkLoc.DataSource = basicData.GetWorkLocComboxSource(_workcenterCode); comWorkLoc.SelectedValue = _worklocCode; comWorkLoc.Enabled = false; comWorkCenter.Enabled = false; } //工位不为空的情况下 if (string.IsNullOrEmpty(this._worklocCode) == false) { //获取设备信息 List machinelist = _agent.InvokeServiceFunction>("MachineInfoBLL_GetAllList", new MachineInfo()) .ToList().Where(o => o.WORKLOC_CODE == _worklocCode).ToList(); machinelist.Insert(0, new MachineInfo() { MACHINENAME = "", MACHINECODDE = "" }); ddlMachine.DataSource = machinelist; ddlMachine.SelectedValue = _machineCode; if (string.IsNullOrEmpty(_machineCode) == false) { ddlMachine.Enabled = false; } } #endregion //启动轮训 timer1.Interval = interval; timer1.Enabled = true; //判断配置文件是否存在--是否解锁下拉框 //if (string.IsNullOrEmpty(workcell_code) == false) //{ // comWorkCenter.SelectedValue = workCenter_code; // comWorkCenter.Enabled = false; // comWorkLoc.SelectedValue = workcell_code; // comWorkLoc.Enabled = false; //} //else //{ // butReturn.Visible = false; //} if (string.IsNullOrEmpty(_workcenterCode) == false && string.IsNullOrEmpty(_worklocCode) == false) { GetCallLogList(_factoryCode, _worklocCode); } } private void listBox1_SelectedValueChanged(object sender, EventArgs e) { listBox2.DataSource = null; if (listBox1.SelectedValue != null) { var configDetail = listBox1.SelectedItem as ConfigDetail; //加载下拉列表 _callType = configDetail.DetailTypeCode; listBox2.DataSource = GetCallReasonList(configDetail.PID); listBox2.DisplayMember = "DetailTypeName"; listBox2.ValueMember = "DetailTypeCode"; } } private void listBox2_SelectedValueChanged(object sender, EventArgs e) { comboBox2.DataSource = null; if (listBox2.SelectedItem!=null) { var configDetail = listBox2.SelectedItem as ConfigDetail; //赋值 _selectReason = configDetail.DetailTypeName; //加载下拉列表 comboBox2.DataSource = GetCallReasonList(configDetail.PID); comboBox2.DisplayMember = "DetailTypeName"; comboBox2.ValueMember = "DetailTypeCode"; } } /// /// 呼叫操作 /// /// /// private void btnCall_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(_selectReason)) { MessageBox.Show(@"请选择呼叫原因!"); return; } if (string.IsNullOrEmpty(comWorkLoc.Text.ToString())) { MessageBox.Show(@"请选择工位信息!"); return; } if (string.IsNullOrEmpty(ddlMachine.Text.ToString())) { MessageBox.Show(@"请选择设备编号!"); return; } if (MessageBox.Show(@"呼叫原因:" + _selectReason, @"确认呼叫", MessageBoxButtons.OKCancel) != DialogResult.OK) return; //注塑机赋值 if (string.IsNullOrEmpty(_workcenterCode)) { if (!string.IsNullOrEmpty(_workcenterCodeV)) { _workcenterCode = _workcenterCodeV; } } if (string.IsNullOrEmpty(_worklocCode)) { if (!string.IsNullOrEmpty(_worklocCodeV)) { _worklocCode = _worklocCodeV; } } var model = new CallLogEntity { PID = Guid.NewGuid().ToString(), CALL_TYPE = _callType, CALL_REASION = _selectReason, FACTORY_CODE = _factoryCode, WORKLOC_CODE = comWorkLoc.SelectedValue.ToString(), WORKCENTER_CODE = comWorkCenter.SelectedValue.ToString(), CALL_TIME = DateTime.Now, CALL_STATE = "0", CALL_LEVEL = 1, //初始化是1级 MACHINECODDE = ddlMachine.SelectedValue.ToString() }; DataResult result = _agent.InvokeServiceFunction>("AndonCallBLL_InsertCallLogAndMessageQueue", model); if (result.IsSuccess) { //创建是否显示的配置文件 if (!string.IsNullOrEmpty(comWorkCenter.SelectedValue.ToString()) && !string.IsNullOrEmpty(comWorkLoc.SelectedValue.ToString()) && comWorkCenter.Enabled == true && comWorkLoc.Enabled == true) { FileStream fs1 = new FileStream(_filepath, FileMode.Create, FileAccess.Write);//创建写入文件 StreamWriter sw = new StreamWriter(fs1); sw.WriteLine(comWorkCenter.SelectedValue.ToString());//开始写入值 sw.WriteLine(comWorkLoc.SelectedValue.ToString());//开始写入值 sw.Close(); fs1.Close(); } //Action act = new Action(() => //{ // try // { // //点亮报警灯 // _agent.InvokeServiceFunction("AndonCallBLL_ADSendtoLight", _workcenterCode); // //重新查询 // } // catch // { // } //}); //act.BeginInvoke(null, null); GetCallLogList(_factoryCode, comWorkLoc.SelectedValue.ToString()); if (comWorkCenter.Enabled == true) { comWorkCenter.Enabled = false; comWorkLoc.Enabled = false; } } } private void DGView_CellClick(object sender, DataGridViewCellEventArgs e) { } //确认 private void butConfirm_Click(object sender, EventArgs e) { var memberlist = GetTeamMemberList(_selectCallTypeCode); if (memberlist != null) { comboBox1.DataSource = memberlist.OrderBy(p => p.MEMBER_NAME).ToList(); comboBox1.DisplayMember = "MEMBER_NAME"; comboBox1.ValueMember = "MEMBER_CODE"; } panelHandler.Visible = true; } private void butCancel_Click(object sender, EventArgs e) { CallLogEntity model = _callLogList.FirstOrDefault(x => x.PID == _pid); //MessageBox.Show(model.CALL_REASION); //更新状态 if (model != null) { //呼叫取消 model.CALL_STATE = "4"; DataResult result = _agent.InvokeServiceFunction>("AndonCallBLL_UpdateCallLog", model); if (result.IsSuccess) { //if (GetWorkcenterCode(model.WORKCENTER_CODE)) //{ // //关闭报警灯 // var dl = _agent.InvokeServiceFunction("AndonCallBLL_ADCloseLight", model.WORKCENTER_CODE); //} //重新查询 GetCallLogList(_factoryCode, comWorkLoc.SelectedValue.ToString()); } } } //取消应答直接开始处理 private void butStart_Click(object sender, EventArgs e) { //CallLogEntity model = _callLogList.FirstOrDefault(x => x.PID == _pid); //MessageBox.Show(model.CALL_REASION); //更新状态 //if (model != null) //{ // //开始处理 // model.CALL_STATE = "2"; // model.START_TIME = DateTime.Now; // DataResult result = _agent.InvokeServiceFunction>("AndonCallBLL_UpdateCallLog", // model); // if (result.IsSuccess) // { // //重新查询 // GetCallLogList(_factoryCode, _worklocCode); // } //} } private void butEnd_Click(object sender, EventArgs e) { CallLogEntity model = _callLogList.FirstOrDefault(x => x.PID == _pid); //MessageBox.Show(model.CALL_REASION); //更新状态 if (model != null) { //处理完成 model.CALL_STATE = "3"; model.COMPLETE_TIME = DateTime.Now; DataResult result = _agent.InvokeServiceFunction>("AndonCallBLL_UpdateCallLog", model); //if (result.IsSuccess) //{ //if (GetWorkcenterCode(model.WORKCENTER_CODE)) //{ // //关闭报警灯 // var dl = _agent.InvokeServiceFunction("AndonCallBLL_ADCloseLight", model.WORKCENTER_CODE); //} //重新查询 GetCallLogList(_factoryCode, comWorkLoc.SelectedValue.ToString()); //} } } private void timer1_Tick(object sender, EventArgs e) { //timer1.Enabled = false; var item = _callLogList.FirstOrDefault(p=>p.PID==_pid); if (item!=null) { TimeSpan span=new TimeSpan(); //计算等待时间 if (item.ANSWER_TIME.HasValue) { span = item.ANSWER_TIME.Value.Subtract(item.CALL_TIME); } else { span = DateTime.Now.Subtract(item.CALL_TIME); } labWaitTime.Text = AndonEnum.labWaitTime + string.Format(span.Days > 0 ? "{0:d\\.hh\\:mm\\:ss}" : "{0:hh\\:mm\\:ss}", span); //计算处理时间 if (item.ANSWER_TIME.HasValue) { if (item.COMPLETE_TIME.HasValue) { span = item.COMPLETE_TIME.Value.Subtract(item.ANSWER_TIME.Value); } else { span = DateTime.Now.Subtract(item.ANSWER_TIME.Value); } labHandleTime.Text = AndonEnum.labHandleTime + string.Format(span.Days > 0 ? "{0:d\\.hh\\:mm\\:ss}" : "{0:hh\\:mm\\:ss}", span); } else { labHandleTime.Text = AndonEnum.labHandleTime; } } //timer1.Enabled = true; } private void CallManageForm_FormClosed(object sender, FormClosedEventArgs e) { timer1.Enabled = false; } /// /// 处理确认 /// /// /// private void button4_Click(object sender, EventArgs e) { if (comboBox1.SelectedValue == null) { MessageBox.Show("请选择处理人."); return; } CallLogEntity model = _callLogList.FirstOrDefault(x => x.PID == _pid); //MessageBox.Show(model.CALL_REASION); //更新状态 if (model != null) { //已应答--改为开始处理。20180523 model.HANDLER = comboBox1.SelectedValue.ToString(); model.CALL_PROBLEM = comboBox2.Text; model.CALL_STATE = "2"; //应答时间 model.ANSWER_TIME = DateTime.Now; //开始时间 model.START_TIME = DateTime.Now; DataResult result = _agent.InvokeServiceFunction>("AndonCallBLL_UpdateCallLog", model); //if (result.IsSuccess) //{ //重新查询 GetCallLogList(_factoryCode, comWorkLoc.SelectedValue.ToString()); panelHandler.Visible = false; //} } } private void button3_Click(object sender, EventArgs e) { panelHandler.Visible = false; } private void DGView_SelectionChanged(object sender, EventArgs e) { if (DGView.SelectedRows.Count > 0) { _pid = DGView.SelectedRows[0].Cells["pid"].Value.ToString(); _callState = DGView.SelectedRows[0].Cells["callStates"].Value.ToString(); //_callLevel = (int)DGView.SelectedRows[0].Cells["callLEVEL"].Value; _callReason = DGView.SelectedRows[0].Cells["callReason"].Value.ToString(); //_selectCallType = DGView.SelectedRows[0].Cells["CallType"].Value.ToString(); _selectCallTypeCode = DGView.SelectedRows[0].Cells["callTypeCode"].Value.ToString(); _callTime = DGView.SelectedRows[0].Cells["callTIME"].Value.ToString(); labCallReason.Text = AndonEnum.labCallReason + _callReason; labCallTime.Text = AndonEnum.labCallTime + _callTime; labAnswerTime.Text = AndonEnum.labAnswerTime + DGView.SelectedRows[0].Cells["answerTIME"].Value; labHandleTime.Text = AndonEnum.labHandleTime;// +DGView.SelectedRows[0].Cells["startTime"].Value; StateInit(_callState); } else { PanelInit(); } } private void butReturn_Click(object sender, EventArgs e) { Form f = Application.OpenForms["OperationForm"]; //查找是否打开过Form1窗体 if (f == null) //没打开过 { OperationForm form = new OperationForm(); //new KeyEvent().SetKeyToTxt(form); //ClientContext.SetUserAuth(form); form.MdiParent = this.MdiParent; form.Show(); //重新new一个Show出来 } else { f.WindowState = FormWindowState.Normal; f.Focus(); //打开过就让其获得焦点 } } private void comWorkCenter_SelectedIndexChanged(object sender, EventArgs e) { comWorkLoc.DataSource = new List(); ddlMachine.DataSource = new List(); ddlMachine.Text = ""; if (comWorkCenter.SelectedValue != null) { //加载下拉列表 var workCenter = comWorkCenter.SelectedItem as WorkCenter; string selectVC = workCenter.WORKCENTER_CODE; BasicData basicData = new BasicData(); List locList = basicData.GetWorkLocComboxSource(selectVC); locList.Insert(0, new WorkLoc() { WORKLOC_CODE = "", WORKLOC_NAME = "" }); comWorkLoc.DataSource = locList; } } private void comWorkLoc_SelectedIndexChanged(object sender, EventArgs e) { ddlMachine.DataSource = new List(); if (comWorkLoc.SelectedValue != null && string.IsNullOrEmpty(comWorkLoc.SelectedValue.ToString()) == false) { //加载下拉列表 var workLoc = comWorkLoc.SelectedItem as WorkLoc; string selectLoc = workLoc.WORKLOC_CODE; //获取设备信息 List machinelist = _agent.InvokeServiceFunction>("MachineInfoBLL_GetAllList", new MachineInfo()) .ToList().Where(o => o.WORKLOC_CODE == selectLoc).ToList(); machinelist.Insert(0, new MachineInfo() { MACHINENAME = "", MACHINECODDE = "" }); ddlMachine.DataSource = machinelist; } } private void chkINJECT_CheckedChanged(object sender, EventArgs e) { //panINJECT.Visible = chkINJECT.Checked; } private void label3_Click(object sender, EventArgs e) { } } }