using DevExpress.Utils.DirectXPaint; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Columns; using Gs.DevApp.DevFrm.QC; using Gs.DevApp.DevFrm.Rpt; using Gs.DevApp.Entity; using Gs.DevApp.ToolBox; using Gs.DevApp.UserControl; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Gs.DevApp.DevFrm.JJGZ { public partial class Frm_MesAttanCon : DevExpress.XtraEditors.XtraForm { string _webServiceName = "MesAttanCon/"; List _filterList = new List(); string date; string lineNo; // 用于跟踪原始值的字典 private Dictionary> _originalValues = new Dictionary>(); public Frm_MesAttanCon() { InitializeComponent(); //this.toolBarMenu1.btnAddClick += ToolBarMenu1_btnAddClick; this.toolBarMenu1.btnEdtClick += ToolBarMenu1_btnEdtClick; this.toolBarMenu1.btnSaveClick += ToolBarMenu1_btnSaveClick; this.toolBarMenu1.btnLoadClick += ToolBarMenu1_btnLoadClick; //this.toolBarMenu1.btnDelClick += ToolBarMenu1_btnDelClick1; this.toolBarMenu1.btnEscClick += ToolBarMenu1_btnEscClick; this.toolBarMenu1.btnQueryClick += ToolBarMenu1_btnQueryClick; this.toolBarMenu1.btnGongZiClick += ToolBarMenu1_btnGongZiClick; this.toolBarMenu1.btnLianBanClick += ToolBarMenu1_btnLianBanClick; toolBarMenu1.btnChkClick += ToolBarMenu1_btnChkClick; toolBarMenu1.btnFChkClick += ToolBarMenu1_btnFChkClick; this.toolBarMenu1.getXmlConfig(); Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameter(gridView1, picCheckBox, this, "checkStatus", "", (value) => { Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 0); }, tips); //getPageList(1); //_setIno(); } /// /// 查询事件 /// /// /// private void ToolBarMenu1_btnQueryClick(object sender, EventArgs e) { var frm = new KQCX(lineNo, date); //赋值给明细表 frm.UpdateParent += (ss, ee) => { var lst = new List(); lst = ee.StringList; lineNo = string.IsNullOrEmpty(lst[0]) ? "0" : lst[0]; date = string.IsNullOrEmpty(lst[1]) ? DateTime.Now.AddMonths(-1).ToString() : lst[1]; getPageList(); }; frm.ShowDialog(); } /// /// 刷新事件 /// /// /// private void ToolBarMenu1_btnLoadClick(object sender, EventArgs e) { //getPageList(1); getPageList(); } /// /// 连班设置 /// /// /// private void ToolBarMenu1_btnLianBanClick(object sender, EventArgs e) { var frm = new SetLB(); //赋值给明细表 frm.UpdateParent += (ss, ee) => { var lst = new List(); lst = ee.StringList; var time = string.IsNullOrEmpty(lst[0]) ? "0" : lst[0]; SetLB(time); }; frm.ShowDialog(); } /// /// /// 第几页 /// 每页几条 private void getPageList() { var _obj = new { date = date, lineNo = lineNo }; // gcMain1.DataSource = null; var _sbSqlWhere = UtilityHelper.GetSearchWhere(_filterList); try { var strReturn = UtilityHelper.HttpPost("", _webServiceName + "GetListPage", JsonConvert.SerializeObject(_obj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strReturn); if (_rtn.rtnCode > 0) { dynamic dy = _rtn.rtnData; JObject _job = JObject.Parse(strReturn); JArray array = new JArray(); foreach (var a in _job["rtnData"]["list"]) { array.Add(a); } DataTable dt = JsonConvert.DeserializeObject(array.ToString()); if (dt.Rows.Count > 0) { gridControl1.BindingContext = new BindingContext(); gridControl1.DataSource = dt; gridControl1.ForceInitialize(); gridView1.BestFitColumns(); Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView1); } else { Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gridControl1, gridView1); } JArray array1 = new JArray(); foreach (var a in _job["rtnData"]["list1"]) { array1.Add(a); } DataTable dt1 = JsonConvert.DeserializeObject(array1.ToString()); if (dt1.Rows.Count > 0) { gridControl2.BindingContext = new BindingContext(); gridControl2.DataSource = dt1; gridControl2.ForceInitialize(); gridView2.BestFitColumns(); Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView2); // 保存原始值 SaveOriginalValues(); SetGridView2EditState(false); } else { Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gridControl2, gridView2); _originalValues.Clear(); SetGridView2EditState(false); } JArray array2 = new JArray(); foreach (var a in _job["rtnData"]["list2"]) { array2.Add(a); } DataTable dt2 = JsonConvert.DeserializeObject(array2.ToString()); if (dt2.Rows.Count > 0) { gridControl3.BindingContext = new BindingContext(); gridControl3.DataSource = dt2; gridControl3.ForceInitialize(); gridView3.BestFitColumns(); Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView3); } else { Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gridControl3, gridView3); } JArray array3 = new JArray(); foreach (var a in _job["rtnData"]["list3"]) { array3.Add(a); } DataTable dt3 = JsonConvert.DeserializeObject(array3.ToString()); if (dt3.Rows.Count > 0) { gridControl4.BindingContext = new BindingContext(); gridControl4.DataSource = dt3; gridControl4.ForceInitialize(); gridView4.BestFitColumns(); Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView4); } else { Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gridControl4, gridView4); } } else ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg); } catch (Exception ex) { MsgHelper.Warning("提示:" + ex.Message); } } /// /// 取消事件 /// /// /// private void ToolBarMenu1_btnEscClick(object sender, EventArgs e) { // Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 1); SetGridView2EditState(false); } /// /// 计算工资 /// /// /// private void ToolBarMenu1_btnGongZiClick(object sender, EventArgs e) { var _obj = new { date = date, lineNo = lineNo }; try { string strJson = UtilityHelper.HttpPost("", _webServiceName + "CountModel", JsonConvert.SerializeObject(_obj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode > 0) { ToolBox.MsgHelper.ShowInformation("提示:" + _rtn.rtnMsg); getPageList(); } else ToolBox.MsgHelper.ShowError("提示:" + _rtn.rtnMsg); } catch (Exception ex) { ToolBox.MsgHelper.ShowError("提示:" + ex.Message); } } /// /// 设置连班 /// /// /// private void SetLB(string time) { // 验证参数 if (string.IsNullOrEmpty(time) || !decimal.TryParse(time, out decimal addTime)) { ToolBox.MsgHelper.ShowError("连班时长格式不正确!"); return; } // 获取当前 gridControl2 的数据 DataTable dt = gridControl2.DataSource as DataTable; if (dt == null || dt.Rows.Count == 0) { ToolBox.MsgHelper.ShowError("没有可设置连班的数据!"); return; } var list = new List(); // 遍历所有行,设置连班 foreach (DataRow row in dt.Rows) { if (row["GUID"] != null) { string guid = row["GUID"].ToString(); // 获取原始的 Hour 值并加上连班时长 decimal originalHour = 0; if (row["Hour"] != null && decimal.TryParse(row["Hour"].ToString(), out originalHour)) { decimal newHour = originalHour + addTime; list.Add(new { GUID = guid, Hour = newHour, Reason = "连班" }); } } } if (list.Count == 0) { ToolBox.MsgHelper.ShowError("没有有效的数据可以设置连班!"); return; } var postObj = new { lineNo = lineNo, date = date, list = list }; try { string strJson = UtilityHelper.HttpPost("", _webServiceName + "EditModel", JsonConvert.SerializeObject(postObj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode > 0) { ToolBox.MsgHelper.ShowInformation($"连班设置成功!共设置 {list.Count} 条记录,每条增加 {addTime} 小时。"); getPageList(); } else ToolBox.MsgHelper.ShowError("连班设置失败:" + _rtn.rtnMsg); } catch (Exception ex) { ToolBox.MsgHelper.ShowError("连班设置异常:" + ex.Message); } } /// /// 保存原始值 /// private void SaveOriginalValues() { _originalValues.Clear(); DataTable dt = gridControl2.DataSource as DataTable; if (dt == null) return; foreach (DataRow row in dt.Rows) { if (row["GUID"] != null) { string guid = row["GUID"].ToString(); _originalValues[guid] = new Dictionary { ["Hour"] = row["Hour"] }; } } } /// /// 修改 /// /// /// private void ToolBarMenu1_btnEdtClick(object sender, EventArgs e) { // 其它需要的UI状态切换 //Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 3); SetGridView2EditState(true); } private void SetGridView2EditState(bool editable) { // 在岗 var colHour = gridView2.Columns["hour"]; if (colHour != null) colHour.OptionsColumn.AllowEdit = editable; // 修改原因 var colReason = gridView2.Columns["reason"]; if (colReason != null) colReason.OptionsColumn.AllowEdit = editable; } /// /// 保存 /// /// /// private void ToolBarMenu1_btnSaveClick(object sender, EventArgs e) { // 结束编辑,确保数据已提交到DataTable gridView2.CloseEditor(); gridView2.UpdateCurrentRow(); gridView2.PostEditor(); BindingContext[gridControl2.DataSource].EndCurrentEdit(); DataTable dt = gridControl2.DataSource as DataTable; if (dt == null) return; var list = new List(); foreach (DataRow row in dt.Rows) { if (row["GUID"] != null) { string guid = row["GUID"].ToString(); // 检查是否有原始值记录 if (_originalValues.ContainsKey(guid)) { var originalRow = _originalValues[guid]; object currentHour = row["Hour"]; object originalHour = originalRow["Hour"]; // 只比较 Hour 字段的当前值与原始值 bool hourChanged = !Equals(currentHour, originalHour); if (hourChanged) { list.Add(new { GUID = guid, Hour = currentHour, Reason = row["Reason"] }); } } } } if (list.Count == 0) { ToolBox.MsgHelper.ShowInformation("没有需要保存的更改。"); return; } var postObj = new { lineNo = lineNo, date = date, list = list }; try { string strJson = UtilityHelper.HttpPost("", _webServiceName + "EditModel", JsonConvert.SerializeObject(postObj)); ReturnModel _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode > 0) { ToolBox.MsgHelper.ShowInformation("保存成功!"); getPageList(); toolBarMenu1.isSetBtn = true; SetGridView2EditState(false); } else { ToolBox.MsgHelper.ShowError("保存失败:" + _rtn.rtnMsg); } } catch (Exception ex) { ToolBox.MsgHelper.ShowError("异常:" + ex.Message); } } /// /// 审核事件 /// /// /// private void ToolBarMenu1_btnChkClick(object sender, EventArgs e) { _toolCk(1); } /// /// 反审核 /// /// /// /// private void ToolBarMenu1_btnFChkClick(object sender, EventArgs e) { _toolCk(0); } private void _toolCk(int _inFieldValue) { string strMsg = ""; switch (_inFieldValue) { case 1: strMsg = "审核"; break; case 0: strMsg = "反审核"; break; } if (_inFieldValue == 1) { string confirmMsg = $"是否审核 产线号:{lineNo},日期:{date}?"; if (MessageBox.Show(confirmMsg, "审核确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } } else { string confirmMsg = $"是否反审核 产线号:{lineNo},日期:{date}?"; if (MessageBox.Show(confirmMsg, "审核确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } } toolBarMenu1.guidKey = ""; var _obj = new { lineNo = lineNo, attenDate = date, inFieldValue = _inFieldValue }; try { var strJson = UtilityHelper.HttpPost("", _webServiceName + "EditModelSubmit", JsonConvert.SerializeObject(_obj)); var _rtn = UtilityHelper.ReturnToDynamic(strJson); if (_rtn.rtnCode > 0) { MsgHelper.ShowInformation(_rtn.rtnData.outMsg.ToString()); UtilityHelper.SetCheckIco(gridView1, "checkStatus", "checkBy", "checkDate", picCheckBox, this, _inFieldValue.ToString()); } else MsgHelper.ShowError(_rtn.rtnData.outMsg.ToString()); } catch (Exception ex) { MsgHelper.ShowError("提示:" + ex.Message); } } } }