private void OfflineCntLogicTurn() { using (var context = new Model()) { //在产品加工过程表中根据产品出生证 获取元数据 _cProductProcessing = context.C_ProductProcessing.FirstOrDefault(s => s.ProductBornCode == ProductIDTxt.Text.Trim()); //在控制点过程表中 根据产品出生证 工序编号 控制点id 设备编号(需要修改) 查到相关集合 var cBWuECntlLogicPros = context.C_BWuE_CntlLogicPro.Where(s => s.ProductBornCode == ProductIDTxt.Text.Trim() && s.ProcedureCode == _cProductProcessing.ProcedureCode && s.ControlPointID == 3 && s.EquipmentCode == _equipmentCode) .OrderByDescending(s => s.StartTime).ToList(); //判断过程表中有无数据 如果没有(说明已经转档过了) 那就不操作了弟弟 if (cBWuECntlLogicPros.Any()) { cBWuECntlLogicPros[0].State = "2"; cBWuECntlLogicPros[0].FinishTime = context.GetServerDate(); //遍历 添加后删除过程表中所有选中数据 foreach (var cBWuECntlLogicPro in cBWuECntlLogicPros) { var mapperConfiguration = new MapperConfiguration(cfg => cfg.CreateMap <C_BWuE_CntlLogicPro, C_BWuE_CntlLogicDoc>()); var mapper = mapperConfiguration.CreateMapper(); var cBWuECntlLogicDoc = mapper.Map <C_BWuE_CntlLogicDoc>(cBWuECntlLogicPro); context.C_BWuE_CntlLogicDoc.Add(cBWuECntlLogicDoc); context.C_BWuE_CntlLogicPro.Remove(cBWuECntlLogicPro); } context.SaveChanges(); } } }
private bool IsChecked() { using (var context = new Model()) { //在产品加工过程表中根据产品出生证 获取元数据 _cProductProcessing = context.C_ProductProcessing.FirstOrDefault(s => s.ProductBornCode == ProductIDTxt.Text.Trim()); //在工序任务明细表中根据产品出生证/有效性/工序号 获得元数据 var apsProcedureTaskDetail = context.APS_ProcedureTaskDetail.First(s => s.ProductBornCode == _cProductProcessing.ProductBornCode && s.IsAvailable == true && s.ProcedureCode == _cProductProcessing.ProcedureCode); if (apsProcedureTaskDetail.IsChecked == 1) { return(true); } return(false); } }
private void DataFill() { using (var context = new Model()) { //在产品加工过程表中根据产品出生证 获取元数据 _cProductProcessing = context.C_ProductProcessing.FirstOrDefault(s => s.ProductBornCode == _productBornCode); if (_cProductProcessing == null) { FrmDialog.ShowDialog(this, "未检测到上线产品", "警告"); return; } var procedureIdInt16 = Convert.ToInt16(_cProductProcessing.ProcedureID); //在工序自检项配置表中根据工序主键/是否启用/有效性 获得自检项数据 //类型转换问题 数据库设计有误吗??? _aProcedureSelfCheckingConfigs = context.A_ProcedureSelfCheckingConfig.Where(s => s.ProcedureID == procedureIdInt16 && s.IsEnable == true && s.IsAvailable == true).OrderByDescending(s => s.IsRequired).ToList(); //动态加载txt和lbl控件 int tabIndex = 1; int localLblY = 23; int localTextBoxY = 20; foreach (var aProcedureSelfCheckingConfig in _aProcedureSelfCheckingConfigs) { var label = new Label(); if (tabIndex % 3 == 2) { label.Location = new Point(310, localLblY); } else if (tabIndex % 3 == 0) { label.Location = new Point(550, localLblY); } else { label.Location = new Point(80, localLblY); } label.Size = new Size(70, 26); label.Text = aProcedureSelfCheckingConfig.ItemName + ':'; label.ForeColor = Color.Black; label.TabIndex = tabIndex; label.BackColor = Color.Transparent; label.Font = new Font("微软雅黑", 10.8F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(134))); label.Name = aProcedureSelfCheckingConfig.ItemCode + "lbl"; panel3.Controls.Add(label); if (tabIndex % 3 == 0) { localLblY += 60; } // localLblY += 60; var textBox = new TextBox(); if (tabIndex % 3 == 2) { textBox.Location = new Point(390, localTextBoxY); } else if (tabIndex % 3 == 0) { textBox.Location = new Point(620, localTextBoxY); } else { textBox.Location = new Point(160, localTextBoxY); } // textBox.Location = new Point(130, localTextBoxY); textBox.Size = new Size(130, 32); textBox.Name = aProcedureSelfCheckingConfig.ItemCode + "txt"; panel3.Controls.Add(textBox); if (tabIndex % 3 == 0) { localTextBoxY += 60; } // localTextBoxY += 60; _txtNameList.Add(aProcedureSelfCheckingConfig.ItemCode + "txt"); tabIndex++; if (aProcedureSelfCheckingConfig.IsRequired != null && (bool)aProcedureSelfCheckingConfig.IsRequired) { panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "lbl"}"].Text = panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "lbl"}"].Text .Insert(panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "lbl"}"].Text.Length - 1, "*"); panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "lbl"}"].ForeColor = Color.Red; panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "txt"}"].Tag = "*"; _mbNameList.Add(aProcedureSelfCheckingConfig.ItemCode); } //在产品质量数据表中根据 订单号项目号计划好产品号出生证工序号检验类型(自检)及检测项编号 获得特定数据(检测实际值) var cProductQualityData = context.C_ProductQualityData.FirstOrDefault(s => s.OrderID == _cProductProcessing.OrderID && s.ProjectID == _cProductProcessing.ProjectID && s.PlanID == _cProductProcessing.PlanID && s.ProductID == _cProductProcessing.ProductID && s.ProductBornCode == _cProductProcessing.ProductBornCode && s.ProcedureID == _cProductProcessing.ProcedureID && s.CheckType == (decimal?)CheckType.SelfCheck && s.ItemCode == aProcedureSelfCheckingConfig.ItemCode); if (cProductQualityData != null && cProductQualityData.CollectValue != null) { panel3.Controls[$"{aProcedureSelfCheckingConfig.ItemCode + "txt"}"].Text = cProductQualityData.CollectValue.ToString(); } } } }
protected override void DoEnter() { using (var context = new Model()) { //在产品加工过程表中根据产品出生证 获取元数据 _cProductProcessing = context.C_ProductProcessing.Where(s => s.ProductBornCode == _productBornCode) .OrderByDescending(s => s.OnlineTime).FirstOrDefault(); var apsProcedureTaskDetail = context.APS_ProcedureTaskDetail.FirstOrDefault(s => s.IsAvailable == true && s.ProductBornCode == _productBornCode && s.TaskState != (decimal?)ApsProcedureTaskDetailState.Completed && s.ProcedureType == (decimal?)ProcedureType.Tooling); if (apsProcedureTaskDetail != null) { //如果是不良下机则生成过程检验任务 if (comboBox1.Text.Trim().Equals("不良下机")) { GenerateProcessTask((int)CheckReason.Bad); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); } //apsdetail状态修改以及完善apsdetail最后修改时间呀什么的 PerfectApsDetail(); //控制点转档 OfflineCntLogicTurn(); //修改aps工序任务表里的信息,例如修改完成状态,更新执行进度 PerfectApsProcedureTask(); if (comboBox1.Text.Trim().Equals("正常下机")) { //也给工量具档案表转个档好惹 KitProcessingDocTurn(); } //产品加工过程表转档 ProductProcessingDocTurn(); FrmDialog.ShowDialog(this, "产品下线成功", "提示"); ChangeBgColor(); // ClearMainPanelTxt(); RegetProcedureTasksDetails(); HideLabel(); Close(); return; } } var isChecked = IsChecked(); //判断紧前产品是否送检以及送检结果是否生成 if (IsCheckResult()) { //判断是否是机加工工序的末道工序以及生成手动检验任务 if (IsLastProcedureAndGenerateManualTask()) { // 生成除了本工序外其他的所有未检验的机加工工序三坐标任务(除了强制下线之外的) GenerateOtherThreeTasks(); //标识除了本工序外其他的所有未检验的机加工工序 送检(除了强制下线之外的) RemarkOtherInspect(); //如果是不良下机则生成过程检验任务 if (comboBox1.Text.Trim().Equals("不良下机")) { GenerateProcessTask((int)CheckReason.Bad); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); //首件记录转档 FirstTurnDoc(); } if (isChecked) { //生成本出生证本工序的过程检验任务 GenerateProcessTask((int)CheckReason.LastProcedure); //标识本出生证本工序的送检 RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); } if (IsLastProcedureEeceptQc()) { //如果是除了质检外的末道工序 生成产品档案表 师兄,末道工序转到产品档案表里是指的是机加工序的末道工序还是整个产品而言的末道工序??? GenerateProductDoc(); } //如果是调试件但又没有分配抽检 理论上就不应该出现在那个首件记录表里边 这时候要将首件记录过程表中的记录删掉而不是转档 if (!isChecked) { DelFirstRecord(); } } else { //判断产品是否是抽检 只有抽检的情况下才能确定 //我们分开来考虑:① 该工序抽检:1.首件2.达到送检频率3.不良下机4.返修5 上件质检结果为NG 的也要送检 // ②:该工序不抽检:不良下机,返修 //如果是不良下机则生成过程检验任务 if (comboBox1.Text.Trim().Equals("不良下机")) { GenerateProcessTask((int)CheckReason.Bad); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); //首件记录转档 FirstTurnDoc(); } //如果是调试件则生成过程检验任务 else if (isChecked && IsFirstRecord()) { GenerateProcessTask((int)CheckReason.First); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); //首件记录转档 FirstTurnDoc(); } //如果是调试件但又没有分配抽检 理论上就不应该出现在那个首件记录表里边 这时候要将首件记录过程表中的记录删掉而不是转档 else if (!isChecked && IsFirstRecord()) { DelFirstRecord(); } //如果是返修上线则生成过程检验任务 else if (_cProductProcessing.Online_type == (decimal?)ProductProcessingOnlineType.Repair) { //还没测试 GenerateProcessTask((int)CheckReason.Repair); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); } //如果上件产品送检结果为NG则生成过程检验任务 else if (isChecked && IsNotGood()) { GenerateProcessTask((int)CheckReason.LastPieceNotGood); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); } //是否达到抽检频率 else if (isChecked && IsMeetFrequency()) { GenerateProcessTask((int)CheckReason.MeetFrequency); RemarkInspect(); FrmDialog.ShowDialog(this, "请将此 产品送至质检中心,等待进一步检验结果!"); } } //apsdetail状态修改以及完善apsdetail最后修改时间呀什么的 PerfectApsDetail(); //控制点转档 OfflineCntLogicTurn(); //计划产品信息状态修改(不应该出现,应该出现在某道产品末道工序的最后一个产品上 可以用goto语句搞一搞) //理论上这边也要有的,因为我们并不能确定机加工是不是就是末道工序了,所以需要添加一下 // PlanProductInfoStateChange(); //完善产品质量数据表 PerfectProductQD(); //修改aps工序任务表里的信息,例如修改完成状态,更新执行进度 PerfectApsProcedureTask(); //产品加工过程表转档 ProductProcessingDocTurn(); FrmDialog.ShowDialog(this, "产品下线成功", "提示"); ChangeBgColor(); RegetProcedureTasksDetails(); } Close(); }
private bool IsCheckResult() { using (var context = new Model()) { //在产品加工过程表中根据产品出生证 获取元数据 _cProductProcessing = context.C_ProductProcessing.Where(s => s.ProductBornCode == _productBornCode) .OrderByDescending(s => s.OnlineTime).FirstOrDefault(); //在产品加工档案表中 根据设备号/计划号/产品id/工序号/下线时间排序 获取紧前产品 var cProductProcessingDocument = context.C_ProductProcessingDocument.Where(s => s.EquipmentID.ToString() == _equipmentId && s.ProductID == _cProductProcessing.ProductID && s.ProcedureID == _cProductProcessing .ProcedureID && s.PlanID == _cProductProcessing.PlanID ).OrderByDescending(s => s.OfflineTime).FirstOrDefault(); if (cProductProcessingDocument != null) { var apsProcedureTaskDetail = context.APS_ProcedureTaskDetail.First(s => s.ProductBornCode == cProductProcessingDocument.ProductBornCode && s.ProcedureCode == cProductProcessingDocument.ProcedureCode && s.IsAvailable == true && s.EquipmentID == _cProductProcessing.EquipmentID); //如果是送检的话 if (apsProcedureTaskDetail.IsInspect == 1) { //在产品检验档案表中根据出生证/检验类型(三坐标)/工序编号/计划号/设备编号 获取产品检验档案数据 var cCheckProcessingDocument = context.C_CheckProcessingDocument.FirstOrDefault(s => s.ProductBornCode == cProductProcessingDocument.ProductBornCode && s.CheckType == (decimal?)CheckType.ThreeCoordinate && s.ProcedureCode == cProductProcessingDocument.ProcedureCode && s.PlanID == cProductProcessingDocument.PlanID); if (cCheckProcessingDocument.Offline_type == null) { FrmDialog.ShowDialog(this, "紧前产品送检结果未生成", "提示"); return(false); } // //在产品质量数据表中判断是否有结果了(这里要检索的是质检类型为三坐标的质检任务是否有结果了) // var cProductQualityDatas = context.C_ProductQualityData.Where(s => // s.ProductBornCode == cProductProcessingDocument.ProductBornCode && s.ProductID == _cProductProcessing.ProductID // && s.PlanID == _cProductProcessing.PlanID && s.ProcedureID == _cProductProcessing.ProcedureID && s.CheckType == (int?)CheckType.ThreeCoordinate).ToList(); // if (cProductQualityDatas.Any()) // { // foreach (var cProductQualityData in cProductQualityDatas) // { // if (cProductQualityData.CheckResult == null) // { // FrmDialog.ShowDialog(this, "紧前产品送检结果未生成", "提示"); // return false; // } // } // } // else // { // //如果为空 , 就说明该工序的三坐标质检任务没有结果 // FrmDialog.ShowDialog(this, "紧前产品送检结果未生成", "提示"); // return false; // } } // //如果不送检的话 就要判断是否有不良下机 // if (cProductProcessingDocument.Offline_type == 3) // { // //在产品质量数据表中判断是否有结果了 // var cProductQualityData = context.C_ProductQualityData.First(s => // s.ProductBornCode == cProductProcessingDocument.ProductBornCode); // if (cProductQualityData.CheckResult == null) // { // FrmDialog.ShowDialog(this, "紧前产品送检结果未生成", "提示"); // return false; // } // } // // //在检验档案表里 根据紧前产品的工序号/下线时间排序获得检验数据 // var cCheckProcessingDocument = context.C_CheckProcessingDocument.Where(s => // s.ProductBornCode == cProductProcessingDocument.ProductBornCode // && s.ProcedureCode == cProductProcessingDocument.ProcedureCode) // .OrderByDescending(s => s.OfflineTime).FirstOrDefault(); // //如果不送检的话 就要判断是否有返修 // if (cCheckProcessingDocument != null) // { // if (cCheckProcessingDocument.Offline_type == 3) // { // //在产品质量数据表中判断是否有结果了 // var cProductQualityData = context.C_ProductQualityData.First(s => // s.ProductBornCode == cProductProcessingDocument.ProductBornCode); // if (cProductQualityData.CheckResult == null) // { // FrmDialog.ShowDialog(this, "紧前产品送检结果未生成", "提示"); // return false; // } // } // } return(true); } return(true); } }