using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Windows.Forms; using com.steering.mes.mcp.entity; using Core.Mes.Client.Comm.Format; using Core.Mes.Client.Comm.Server; using Core.Mes.Client.Comm.Tool; using Core.StlMes.Client.Mcp.Control; using Core.StlMes.Client.Mcp.Control.Common; using Core.StlMes.Client.Mcp.Control.Entity; using Core.StlMes.Client.Mcp.Mch.MchResult; using CoreFS.CA06; using Infragistics.Win; using Infragistics.Win.UltraWinGrid; namespace Core.StlMes.Client.Mcp.Mch { public partial class FrmCrackDetectResult :FrmMchBase { public FrmCrackDetectResult() { InitializeComponent(); mchControlBase1 = new MchCrackControl(); commonCrackDetection1.SetWorkUnit = true; /* { Dock = DockStyle.Fill }; plnEdit.Controls.Add(mchControlBase1);*/ } protected override UltraGridRow ActitveResultRow { get { return CrackDetectGrid.ActiveRow; } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); EntityHelper.ShowGridCaption(CrackDetectGrid.DisplayLayout.Bands[0]); base.ultraGrid1.DisplayLayout.Bands[0].Columns["ActCount"].Hidden = true; base.ultraGrid1.DisplayLayout.Bands[0].Columns["ActWeight"].Hidden = true; base.ultraGrid1.DisplayLayout.Bands[0].Columns["BatchGroudNo"].Hidden = true; CrackDetectGrid.DisplayLayout.Override.AllowRowFiltering = DefaultableBoolean.False; CrackDetectGrid.DisplayLayout.Override.HeaderClickAction = HeaderClickAction.Default; ultraOptionSet2.Visible = false; commonCrackDetection1.Init(ob, GetMatNo); commonCrackDetection1.ChangeData += ChangeData; } private void ChangeData(HttCrackDetectionEtEntity data) { if (ActiveRow == null) return; //需要经过探伤的支数 int NeedTest = mchControlBase1.OkPort.Count; String Typr = commonCrackDetection1.ReportType; List ProductionList = mchCrackDetectionEntityBindingSource.DataSource as List; //已经录过当前探伤种类的支数 int TestedNum = (int)ProductionList.Where(p => p.ReportNo == Typr && p.MachineNo == data.MachineNo).Sum(p => p.TestingNum); //不属于该种类的废品( 该种类的废品已经包含在TestedNum) int WasteNum = (int)ProductionList.Sum(p => (p.EwasteNum??0) + (p.RejectNum??0) + (p.EwasteNumEt??0) ) ; data.TestingNum = NeedTest - TestedNum - WasteNum; if (data.TestingNum < 0) { int OffNum = GetReturnNum(); data.TestingNum = NeedTest - TestedNum - WasteNum+ data.TestingNum + OffNum; if (data.TestingNum < 0) { data.TestingNum = 0; } } commonCrackDetection1.ChangeValue(data); } public List GetMatNo() { return EntityHelper.GetData( "com.steering.mes.mcp.common.PlanService.getQueryJGPortVrphot", new object[] { ActiveRow.HeatPlanNo, ActiveRow.BatchNo }, ob); } protected override void DoAdd() { if (ActiveRow != null) { if (MessageUtil.ShowYesNoAndQuestion("是否增加探伤实绩?") == DialogResult.No) return; string Message = ""; if (!commonCrackDetection1.CheckNull(out Message)) { MessageBox.Show(Message); return; } HttCrackDetectionEtEntity data = commonCrackDetection1.GetValue(); data.TestingWt = GetWeight(portMchBatchControl1.Data, Gx, int.Parse(data.TestingNum.ToString3()), int.Parse(ActiveRow.ProCount.ToString3())); var para = commonCrackDetection1.GetPara(); try { string sortcode = ""; bool supervisor = false; var dt1 = ServerHelper.GetData( "com.steering.mes.mcp.collarMaterial.ComBaseInfo.getBaseInfo", new object[] { "704101" }, ob); if (dt1 != null && dt1.Rows.Count > 0) { foreach (DataRow row in dt1.Rows) { if (row["BASENAME"].ToString() == para.ReportNo.ToString()) { sortcode = row["BASECODE"].ToString(); break; } } } var dt2 = ServerHelper.GetData( "com.steering.mes.mcp.collarMaterial.ComBaseInfo.getBaseInfo", new object[] { sortcode }, ob); if (dt2 != null && dt2.Rows.Count > 0) { foreach (DataRow row in dt2.Rows) { if ((row["BASENAME"].ToString().Trim().ToUpper()) == data.PlineCode.ToString().Trim().ToUpper()) { supervisor = true; break; } } } if (supervisor) { string type = para.ReportNo.ToString().Trim(); if (type== "0"|| type == "15"||type == "10"||type == "1") { #region 探伤监督者管控 if (!(para.SignatoryLevel.Trim() == "UT-2" || para.SignatoryLevel.Trim() == "UT-3")) { MessageBox.Show("签发等级只能为UT-2,UT-3!"); return; } if (!(para.OperatorLevel.Trim() == "UT-2" || para.OperatorLevel.Trim() == "UT-1")) { MessageBox.Show("操作者等级只能是UT-2,UT-1!"); return; } if (!(para.SupervisorLevel.Trim() == "UT-2" || para.SupervisorLevel.Trim().Length == 0 || para.SupervisorLevel.Trim() == "UT-3" || para.SupervisorLevel.Trim() == "/")) { MessageBox.Show("监督者等级只能是UT-2,UT-3!"); return; } if (para.SignatoryLevel.Trim() == "UT-1") { MessageBox.Show("签发等级不能为UT-1"); return; } if (para.Signatory.Trim() == "") { MessageBox.Show("签发者不能为空"); return; } if (para.OperatorLevel == "UT-1") { if (!(para.SupervisorLevel.Trim() == "UT-2")) { MessageBox.Show("操作者等级为UT-1, 监督者等级必须为UT-2"); return; } if (para.Supervisor.Trim() == "") { MessageBox.Show("操作者等级为UT-1,监督者不能为空"); return; } } if (para.OperatorLevel == "UT-2") { if ((para.SupervisorLevel.Trim() != "" || para.Supervisor.Trim() != "")) { MessageBox.Show("操作者等级为UT-2,监督者和监督者等级必须为空"); return; } } #endregion } if (type == "12" || type == "11") //MT 和UT 可以用Replace替换,合成一个方法, { # region 磁粉监督者管控 if (!(para.SignatoryLevel.Trim() == "MT-2" || para.SignatoryLevel.Trim() == "MT-3")) { MessageBox.Show("签发等级只能为MT-2,MT-3!"); return; } if (!(para.OperatorLevel.Trim() == "MT-2" || para.OperatorLevel.Trim() == "MT-1")) { MessageBox.Show("操作者等级只能是MT-2,MT-1!"); return; } if (!(para.SupervisorLevel.Trim() == "MT-2" || para.SupervisorLevel.Trim().Length == 0 || para.SupervisorLevel.Trim() == "MT-3" || para.SupervisorLevel.Trim() == "/")) { MessageBox.Show("监督者等级只能是MT-2,MT-3!"); return; } if (para.SignatoryLevel.Trim() == "MT-1") { MessageBox.Show("签发等级不能为MT-1"); return; } if (para.Signatory.Trim() == "") { MessageBox.Show("签发者不能为空"); return; } if (para.OperatorLevel == "MT-1") { if (!(para.SupervisorLevel.Trim() == "MT-2")) { MessageBox.Show("操作者等级为UT-1, 监督者等级必须为MT-2"); return; } if (para.Supervisor.Trim() == "") { MessageBox.Show("操作者等级为MT-1,监督者不能为空"); return; } } if (para.OperatorLevel == "MT-2") { if ((para.SupervisorLevel.Trim() != "" || para.Supervisor.Trim() != "")) { MessageBox.Show("操作者等级为MT-2,监督者和监督者等级必须为空"); return; } } #endregion } } } catch { } List stand = commonCrackDetection1.GetStand(); var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.mes.mcp.Mch.FrmCrackDetectResult"; ccp.MethodName = "DoAdd"; ccp.ServerParams = new object[] { JSONFormat.Format(data), commonCrackDetection1.GetScrapList().Select(JSONFormat.Format).ToList(), commonCrackDetection1.GetSuspiciousList().Select(JSONFormat.Format).ToList(), commonCrackDetection1.GetUnPassList().Select(JSONFormat.Format).ToList(), JSONFormat.Format(commonCrackDetection1.GetPara()), commonCrackDetection1.GetProbe().Select(JSONFormat.Format).ToList(), stand.Select(JSONFormat.Format).ToList(), Gx }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Equals("新增探伤成功!")) { Query(); } } } } protected override void DoDelete() { { if (ActiveRow != null && ActitveResultRow != null) { if (MessageUtil.ShowYesNoAndQuestion("是否删除探伤实绩?") == DialogResult.No) return; var ccp = new CoreClientParam(); ccp.ServerName = "com.steering.mes.mcp.Mch.FrmCrackDetectResult"; ccp.MethodName = "DoDelete"; ccp.ServerParams = new object[] { JSONFormat.Format(ActitveResultRow.ListObject), Gx }; ccp = ExecuteNonQuery(ccp, CoreInvokeType.Internal); if (ccp.ReturnCode != -1) { MessageUtil.ShowTips(ccp.ReturnInfo); if (ccp.ReturnInfo.Equals("删除成功!")) { if (!string.IsNullOrEmpty(ActitveResultRow.Cells["Report"].Value.ToString2())) { try { FileHelper.Delete(ActitveResultRow.Cells["Report"].Value.ToString2()); } catch (Exception) { MessageUtil.ShowTips("报告删除失败!"); } } Query(); } } } } } protected override void GetResultData() { base.GetResultData(); GetData(); var MchCrackControl = mchControlBase1 as MchCrackControl; if (MchCrackControl == null) return; var result = new HttCrackDetectionEtEntity() { HeatPlanNo = ActiveRow.HeatPlanNo, JudgeStoveNo = ActiveRow.JudgeStoveNo, BatchNo = ActiveRow.BatchNo, PlineCode = ActiveRow.PlineCode, PlineName = ActiveRow.PlineName, ColShift = UserInfo.GetUserOrder(), ColGroup = UserInfo.GetUserGroup(), ColUser = UserInfo.GetUserName(), ColTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ColEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), TestingNum = MchCrackControl.OkPort.Count > (ActiveRow.OperateCount ?? 0) ? MchCrackControl.OkPort.Count - (ActiveRow.OperateCount ?? 0) : 0, MachineNo = ActiveRow.PlineCode=="C091" || ActiveRow.PlineCode =="C092"?"2": "1", ProcessCode = "G" }; DataTable Stand = ServerHelper.GetData("com.steering.mes.mcp.heatTreatment.FrmHttCrackDetectResult.getCrackStand", new object[] { ActiveRow.OrdLnDlyPk, ActiveRow.CraftSeq.ToString2(), ActiveRow.Dic, ActiveRow.Sic, ActiveRow.IndexSeq, "G" }, ob); commonCrackDetection1.DefaultCraftInfo(Stand); ChangeData(result); } private void GetData() { List list = EntityHelper.GetData( "com.steering.mes.mcp.Mch.FrmCrackDetectResult.getQueryExpandResult", new object[] {ActiveRow.HeatPlanNo, ActiveRow.BatchNo}, ob); mchCrackDetectionEntityBindingSource.DataSource = list; commHelper.RefreshAndAutoSizeExceptColumns(CrackDetectGrid, "Report"); #region 标记委外加工探伤实绩有数据的为红色 var dt = ServerHelper.GetData( "com.steering.mes.mcp.Mch.FrmJgxReport.getHttEntrustInfo", new object[] { }, ob); List lst = new List(); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString().Length > 6) { if (dt.Rows[i][0].ToString().Contains("-")) { string[] sArray = dt.Rows[i][0].ToString().Split('-'); lst.Add(sArray[0]); } } else { // string[] sArray = s.Split('a') lst.Add(dt.Rows[i][0].ToString()); } } if ((lst != null) && lst.Any()) foreach ( var ultraGridRow in CrackDetectGrid.Rows.Where( p => lst.Any(q => q == p.Cells["judgeStoveNo"].Value.ToString2()))) ultraGridRow.Appearance.BackColor = Color.Red; #endregion } private void utUpLoad1_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e) { var entity = CrackDetectGrid.ActiveRow.ListObject as HttCrackDetectionEtEntity; if (entity.ReportNo == "c") { MessageBox.Show("通用探伤回报无法查看或上传报告"); return; } var ReportInfo = EntityHelper.GetData( "com.steering.mes.mcp.Mch.FrmCrackDetectResult.GetReportCptName", new object[] { entity.PlineCode, entity.ReportNo, entity.MachineNo }, ob); if (ReportInfo == null || ReportInfo.Count != 1) { MessageBox.Show("未维护报表编号信息"); return; } if (string.IsNullOrEmpty(ReportInfo[0].ReportCpt)) { MessageBox.Show("找不到报表模板信息"); return; } if (entity == null) return; if (!entity.PlineName.Contains("天淮")) { if (CheckCraft(ReportInfo[0].ReportType, entity.ResultNo) == 0)//添加判断是否有工艺信息 return; } var strurl = ""; if (e.Button.Key == "VIEW") { strurl = "http://172.54.10.42:8080/webroot/decision/view/report?viewlet=" + ReportInfo[0].ReportCpt + "&op=view&resultNo=" + entity.ResultNo + "&machineNo=" + entity.MachineNo; var fre = new FrmRepExcel(ob, strurl); fre.AutoSize = true; fre.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); fre.WindowState = FormWindowState.Maximized; fre.Show(); } else if (e.Button.Key == "UPLOAD") { strurl = "http://172.54.10.42:8080/webroot/decision/view/report?viewlet=" + ReportInfo[0].ReportCpt + "&format=pdf&resultNo=" + entity.ResultNo; var webClient = new WebClient(); var listPdf = new List(); var date = DateTime.Now.ToString("yyyyMMdd"); var filePathNew = ""; //报告目录 var reportNo = ""; //报告编号 filePathNew = "Mch/CrackDetect/" + ActiveRow.JudgeStoveNo + "/" + entity.BatchNo + "/" + entity.HeatPlanNo + "/"; reportNo = entity.ResultNo; var pdf = webClient.DownloadData(strurl); var fileBean = new FileBean(); fileBean.setFile(pdf); fileBean.setFileName(reportNo + ".pdf"); fileBean.setPathName(filePathNew); listPdf.Add(fileBean); webClient.Dispose(); var a = FileHelper.Upload(listPdf); if (a) { ServerHelper.SetData("com.steering.mes.mcp.Mch.FrmCrackDetectResult.UpdatePath", new object[] { filePathNew + reportNo + ".pdf", entity.ResultNo }, ob); MessageUtil.ShowTips("上传报告成功!"); GetData(); } } else { MessageUtil.ShowError("系统生成PDF失败,请稍后再试!"); } } private void CrackDetectGrid_InitializeRow(object sender, InitializeRowEventArgs e) { var HttCrackDetectionEtEntity = e.Row.ListObject as HttCrackDetectionEtEntity; e.Row.Cells["Report"].Appearance.BackColor = string.IsNullOrEmpty(HttCrackDetectionEtEntity.Report) ? Color.Red : Color.LightGreen; e.Row.Cells["Report"].EditorComponent = utUpLoad1; } protected override void DecisionRed(UltraGrid DataGrid ) { #region 标记委外加工探伤实绩有数据的为红色 var dt = ServerHelper.GetData( "com.steering.mes.mcp.Mch.FrmJgxReport.getHttEntrustInfo", new object[] { }, ob); List lst = new List(); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString().Length > 6) { if (dt.Rows[i][0].ToString().Contains("-")) { string[] sArray = dt.Rows[i][0].ToString().Split('-'); lst.Add(sArray[0]); } } else { // string[] sArray = s.Split('a') lst.Add(dt.Rows[i][0].ToString()); } } if ((lst != null) && lst.Any()) foreach ( var ultraGridRow in DataGrid.Rows.Where( p => lst.Any(q => q == p.Cells["JudgeStoveNo"].Value.ToString2()))) ultraGridRow.Appearance.BackColor = Color.Red; #endregion } public static decimal GetWeight(List PortData, string gx, int NUM, int Count1) { if (PortData == null || !PortData.Any()) return 0; List OkList = PortData.Where( p => (p.MatStatus == "00" || p.MatStatus == "合格") || String.CompareOrdinal(p.OpProcess, gx) >= 0).ToList(); if (!OkList.Any()) return 0; decimal AllWeight = (decimal)OkList.Sum(p => p.ActWeight); decimal Weight1 = (decimal)(NUM % OkList.Count > (OkList.Count - Count1 % OkList.Count) ? (OkList.Skip(Count1 % OkList.Count).Take(OkList.Count - Count1 % OkList.Count).Sum(p => p.ActWeight) + OkList.Take(NUM % OkList.Count - (OkList.Count - Count1 % OkList.Count)) .Sum(p => p.ActWeight)) : OkList.Skip(Count1 % OkList.Count).Take(NUM % OkList.Count).Sum(p => p.ActWeight)); return AllWeight * (NUM / OkList.Count) + Weight1; } private int CheckCraft(string type, string result)//这个是验证是否有工艺信息的 { if (type == "1")//1管端手探 { var dt = ServerHelper.GetData( "com.steering.mes.mcp.Mch.FrmCrackDetectResult.CheckCraftJGX1", new object[] { result }, ob); if (dt.Rows.Count < 1) { MessageBox.Show("找不到有效工艺信息,请获取工艺信息!"); return 0; } } if (type == "10")//10管端机探 { var dt = ServerHelper.GetData( "com.steering.mes.mcp.Mch.FrmCrackDetectResult.CheckCraftJGX10", new object[] { result }, ob); if (dt.Rows.Count < 1) { MessageBox.Show("找不到有效工艺信息,请获取工艺信息!"); return 0; } } return 1; } } }