using System; using System.Data; using System.Drawing; using System.Windows.Forms; using UAS_MES_NEW.DataOperate; using UAS_MES_NEW.Entity; using UAS_MES_NEW.PublicForm; using UAS_MES_NEW.PublicMethod; namespace UAS_MES_NEW.Query { public partial class Query_LoadMan : Form { AutoSizeFormClass asc = new AutoSizeFormClass(); DataHelper dh = SystemInf.dh; DataTable Dbfind; public Query_LoadMan() { InitializeComponent(); } private void Query_LoadMan_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); //线别放大镜 li_code.TableName = "line"; li_code.SelectField = "li_code # 线别编号,li_name # 线别名称"; li_code.FormName = Name; li_code.SetValueField = new string[] { "li_code" }; li_code.Condition = "li_statuscode='AUDITED'"; li_code.DbChange += Li_code_DbChange; //初始提示 OperateResult.AppendText(">>请选择线别,输入人员编号后回车执行" + (UpLoadMan.Checked ? "上线" : "下线") + "\n", Color.Black); LoadGridData(); em_code.Focus(); } private void Query_LoadMan_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void Li_code_DbChange(object sender, EventArgs e) { Dbfind = li_code.ReturnData; BaseUtil.SetFormValue(this.Controls, Dbfind); //切换线别后刷新当前线别的在线人员 LoadGridData(); em_code.Focus(); } /// /// 人员编号输入框,回车后按选中的模式执行上线/下线 /// private void em_code_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Enter) return; string linecode = li_code.Text.Trim(); string emcode = em_code.Text.Trim(); //限制:人员编号不能为空 if (emcode == "") { OperateResult.AppendText("<<人员编号不能为空\n", Color.Red, em_code); return; } if (UpLoadMan.Checked) { //上线:必须选择线别 if (linecode == "") { OperateResult.AppendText("<<请先选择线别\n", Color.Red, li_code); return; } //上线:先校验人员编号存在于 SOPEMPLOYEEDETAIL if (!dh.CheckExist("SOPEMPLOYEEDETAIL", "sed_emcode='" + emcode + "'")) { OperateResult.AppendText("<<" + emcode + "人员编号不存在\n", Color.Red, em_code); em_code.Clear(); em_code.Focus(); return; } //一个人只能同时一条线上线 DataTable dtOn = (DataTable)dh.ExecuteSql("select lm_linecode from loadman where lm_emcode='" + emcode + "' and lm_downtime is null", "select"); if (dtOn.Rows.Count > 0) { OperateResult.AppendText("<<" + emcode + "已在" + dtOn.Rows[0]["lm_linecode"].ToString() + "上线,不允许重复上线\n", Color.Red, em_code); em_code.Clear(); em_code.Focus(); return; } dh.ExecuteSql("insert into loadman(lm_id,lm_linecode,lm_emcode,lm_uptime,lm_inman)" + "values(loadman_seq.nextval,'" + linecode + "','" + emcode + "',sysdate,'" + User.UserName + "')", "insert"); OperateResult.AppendText("<<" + emcode + "在" + linecode + "上线成功\n", Color.Green, em_code); } else { //下线:一个人同一时间只有一条在线记录,直接按人员下线 DataTable dtOn = (DataTable)dh.ExecuteSql("select lm_linecode from loadman where lm_emcode='" + emcode + "' and lm_downtime is null", "select"); if (dtOn.Rows.Count == 0) { OperateResult.AppendText("<<" + emcode + "当前不在任何线上,无法下线\n", Color.Red, em_code); em_code.Clear(); em_code.Focus(); return; } dh.ExecuteSql("update loadman set lm_downtime=sysdate where lm_emcode='" + emcode + "' and lm_downtime is null", "update"); OperateResult.AppendText("<<" + emcode + "已从" + dtOn.Rows[0]["lm_linecode"].ToString() + "下线\n", Color.Green, em_code); } //数据变更后刷新 LoadGridData(); em_code.Clear(); em_code.Focus(); } private void UpLoadMan_CheckedChanged(object sender, EventArgs e) { if (UpLoadMan.Checked) { OperateResult.AppendText(">>已切换到上线模式,输入人员编号回车上线\n", Color.Black); em_code.Focus(); } } private void DownLoadMan_CheckedChanged(object sender, EventArgs e) { if (DownLoadMan.Checked) { OperateResult.AppendText(">>已切换到下线模式,输入人员编号回车下线\n", Color.Black); em_code.Focus(); } } /// /// 刷新DGV:只取未下线的人员,已选线别时只显示当前线别;按 lm_emcode 关联 SOPEMPLOYEEDETAIL 取人员名称 /// (SOPEMPLOYEEDETAIL 同一 sed_emcode 可能有多条,先按其聚合去重再关联;上线时间 to_char 到秒) /// private void LoadGridData() { string sql = "select lm.lm_id,lm.lm_linecode,lm.lm_emcode,se.sed_emname,to_char(lm.lm_uptime,'yyyy-mm-dd hh24:mi:ss') lm_uptime,lm.lm_inman from loadman lm" + " left join (select sed_emcode,max(sed_emname) sed_emname from SOPEMPLOYEEDETAIL group by sed_emcode) se on lm.lm_emcode=se.sed_emcode" + " where lm.lm_downtime is null"; if (li_code.Text != "") sql += " and lm.lm_linecode='" + li_code.Text + "'"; sql += " order by lm.lm_uptime desc"; DataTable dt = (DataTable)dh.ExecuteSql(sql, "select"); BaseUtil.FillDgvWithDataTable(DGV, dt); } } }