diff --git a/Admin.Core.Model/Model_New/OffLineInfo.cs b/Admin.Core.Model/Model_New/OffLineInfo.cs index 7b56f500..a7fd8cc1 100644 --- a/Admin.Core.Model/Model_New/OffLineInfo.cs +++ b/Admin.Core.Model/Model_New/OffLineInfo.cs @@ -72,5 +72,12 @@ namespace Admin.Core.Model /// [SugarColumn(ColumnName = "LOGIN_TEAM")] public string LoginTeam { get; set; } + + /// + /// 下传plc放行结果,下传后为1,plc应答后更新为2 + /// + [SugarColumn(ColumnName = "PLC_RESULT")] + public int PlcResult { get; set; } + } } diff --git a/Aucma.Core.CodeBinding/ViewModels/IndexPageViewModel.cs b/Aucma.Core.CodeBinding/ViewModels/IndexPageViewModel.cs index 805635c5..70813ff5 100644 --- a/Aucma.Core.CodeBinding/ViewModels/IndexPageViewModel.cs +++ b/Aucma.Core.CodeBinding/ViewModels/IndexPageViewModel.cs @@ -443,17 +443,21 @@ namespace Aucma.Core.CodeBinding.ViewModels // 页面扫码信息清空 Code1 = code1Str; Code2 = code2Str; + Code1Time = string.Empty ; + Code2Time = string.Empty ; SendPlcStop(); - RefreshAndWriteLog("MES条码NoRead,线体停止"); + RefreshAndWriteLog("MES条码未扫描到,NoRead报警,线体停止,请重新扫描!"); } else if(model.Id == 2) { - RefreshAndWriteLog("SN条码NoRead,线体停止"); + RefreshAndWriteLog("SN条码未扫描到,NoRead报警,线体停止,请重新扫描!"); code1Str = string.Empty; code2Str = string.Empty; // 页面扫码信息清空 Code1 = code1Str; Code2 = code2Str; + Code1Time = string.Empty; + Code2Time = string.Empty; SendPlcStop(); } } @@ -545,11 +549,23 @@ namespace Aucma.Core.CodeBinding.ViewModels { try { + if (code1.Substring(0, 1) != "B") + { + RefreshAndWriteLog("MES码:"+code1+",扫描错误,请重新扫描!"); + SendPlcStop(); + return; + } + if (code2.Length!=20) + { + RefreshAndWriteLog("SN码:" + code2 + ",扫描错误,请重新扫描!"); + SendPlcStop(); + return; + } RefreshAndWriteLog("开始绑定MES条码:" + code1 + " SN条码:" + code2); // 1.数据库查询各个工序质检结果,不合格报警 //// 2.查询条码绑定记录表(内胆箱壳绑定处就应该插入记录),绑定SN码 - CodeBindingRecord record = _codeBindingRecordServices.FirstAsync(x => x.BoxCode == code1).Result; + CodeBindingRecord record = _codeBindingRecordServices.FirstAsync(x => x.BoxCode == code1).Result; if (record == null) { RefreshAndWriteLog("未查询到MES条码记录,集存库未绑定箱壳内胆"); diff --git a/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs b/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs index e71a10b1..48c42cea 100644 --- a/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs +++ b/Aucma.Core.ProductOffLine/Business/offLineBusiness.cs @@ -112,7 +112,7 @@ namespace Aucma.Core.ProductOffLine.Business GunBusiness.RefreshMaterialCodeStrEvent += MaterialBarScan; HandSendPlcWindow.SendPlcPassEvent += DownLoadPassFlag; - // test(); + // test(); } #region 变量定义 /// @@ -127,11 +127,19 @@ namespace Aucma.Core.ProductOffLine.Business Task.Run(() => { + CodeBindingRecord bindingRecord1 = _codeBindingServices.FirstAsync(x => x.ProductCode == "1510080000099E3C0600").Result; - Thread.Sleep(5000); - TempOffLineInfo1.MsgInfo = "条码重复,上传间隔超过五分钟禁止放行,人工处理,上传时间:" + DateTime.Now; - TempOffLineInfo1.MsgAlarmFlag = true; - RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo1); + //OffLineInfo info11 = new OffLineInfo(); + //info11.ProductSNCode = "test11"; + //info11.PlcResult = 1; + //int flag = _offLineInfoServices.AddAsync(info11).Result; + //OffLineInfo info = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == "test11").Result; + //info.PlcResult = 2; + //bool result = _offLineInfoServices.UpdateAsync(info).Result; + //Thread.Sleep(5000); + //TempOffLineInfo1.MsgInfo = "条码重复,上传间隔超过五分钟禁止放行,人工处理,上传时间:" + DateTime.Now; + //TempOffLineInfo1.MsgAlarmFlag = true; + //RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo1); //OffLineInfo info11 = new OffLineInfo(); //info11.ProductSNCode = "test111"; //int flag = _offLineInfoServices.AddAsync(info11).Result; @@ -205,11 +213,10 @@ namespace Aucma.Core.ProductOffLine.Business } // TempOffLineInfo1.ProductRefreshFlag = true; // 2.更新mes数据库 - BackResult = updateMesData(TempOffLineInfo1); + bool MesResult = updateMesData(TempOffLineInfo1); - // BackResult = true; // 测试 // 3.plc放行 - if (BackResult) + if (MesResult) { try { @@ -221,20 +228,21 @@ namespace Aucma.Core.ProductOffLine.Business log.Error("刷新统计图表出错:" + ex.Message.ToString()); } bool plcResult = SendAndWaitSignal(ScannerNo, materialType); - //if (plcResult) - //{ - // // TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行成功"; - - // //界面刷新 - // // TempOffLineInfo1.ProductRefreshFlag = true; - //} - //else - //{ - // TempOffLineInfo1.MsgInfo = TempOffLineInfo1.MsgInfo + "plc放行异常"; - // TempOffLineInfo1.MsgAlarmFlag = true; - // //界面刷新 - // TempOffLineInfo1.ProductRefreshFlag = true; - //} + if (plcResult) + { + // 更新数据库状态 + OffLineInfo info = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == code).Result; + if (info != null) + { + info.PlcResult = 2; + bool plcFlag = _offLineInfoServices.UpdateAsync(info).Result; + if (!plcFlag) + { + log.Info("更新mes数据库应答字为2失败"); + } + } + + } log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo1.ProductOrderNo, TempOffLineInfo1.OrderQty)); } @@ -258,13 +266,13 @@ namespace Aucma.Core.ProductOffLine.Business log.Info("条码:" + TempOffLineInfo1.ProductSNCode + "对接条码系统处理失败,禁止放行,流程结束"); return; } - // TempOffLineInfo2.ProductRefreshFlag = true; + // TempOffLineInfo2.ProductRefreshFlag = true; // 2.更新mes数据库 - BackResult = updateMesData(TempOffLineInfo2); + bool MesResult = updateMesData(TempOffLineInfo2); //BackResult = true; // 3.plc放行 - if (BackResult) + if (MesResult) { try { @@ -277,24 +285,23 @@ namespace Aucma.Core.ProductOffLine.Business } bool plcResult = SendAndWaitSignal(ScannerNo, materialType); - //if (plcResult) - //{ - // TempOffLineInfo2.MsgInfo = TempOffLineInfo2.MsgInfo + "plc放行成功"; - - // //界面刷新 - // TempOffLineInfo2.ProductRefreshFlag = true; - //} - //else - //{ - // TempOffLineInfo2.MsgInfo = TempOffLineInfo2.MsgInfo + "plc放行异常"; - // TempOffLineInfo2.MsgAlarmFlag = true; - // //界面刷新 - // TempOffLineInfo2.ProductRefreshFlag = true; - //} + if (plcResult) + { + // 更新数据库状态 + OffLineInfo info = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == code).Result; + if (info != null) + { + info.PlcResult = 2; + bool plcFlag = _offLineInfoServices.UpdateAsync(info).Result; + if (!plcFlag) + { + log.Info("更新mes数据库应答字为2失败"); + } + } + + } log.Info(String.Format("订单号{0} 订单数量{1}", TempOffLineInfo2.ProductOrderNo, TempOffLineInfo2.OrderQty)); - - - + } else { @@ -335,23 +342,24 @@ namespace Aucma.Core.ProductOffLine.Business /// /// /// - public bool updateMesData(TempInfo TempOffLineInfo) + public bool updateMesData(TempInfo TempOffLineInfo) { try { OffLineInfo info11 = MapperTwo(TempOffLineInfo); - // 添加成品下线表 - CodeBindingRecord bindingRecord1 = _codeBindingServices.FirstAsync(x=>x.ProductCode == info11.ProductCode).Result; + + CodeBindingRecord bindingRecord1 = _codeBindingServices.FirstAsync(x=>x.ProductCode == info11.ProductSNCode).Result; if (bindingRecord1 == null) { - log.Info("mes数据库未查询到条码绑定记录"); + log.Info(info11.ProductCode + "mes数据库未查询到条码绑定记录"); // 条码绑定上位机运行以后打开 //return false; } else { + // log.Info("条码绑定表查到记录:"+JsonHelper.ObjectToJson(bindingRecord1)); info11.BoxCode = bindingRecord1.BoxCode; } @@ -360,6 +368,7 @@ namespace Aucma.Core.ProductOffLine.Business info11.ProductLineCode = "CX_02"; info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo; info11.LoginTeam = appConfig.LoginTeam; + info11.PlcResult = 1; // 查询本地数据库是否有数据 OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result; if(offLineInfo == null) @@ -427,8 +436,9 @@ namespace Aucma.Core.ProductOffLine.Business //} #endregion - + } + return true; } @@ -639,9 +649,7 @@ namespace Aucma.Core.ProductOffLine.Business { return CodeRepeatProcess(TempOffLineInfo); } - TempOffLineInfo.MsgAlarmFlag = true; - //界面刷新 - // TempOffLineInfo.ProductRefreshFlag = true; + RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); return false; } @@ -679,6 +687,10 @@ namespace Aucma.Core.ProductOffLine.Business /// 如果条码重复,比对mes系统记录,在五分钟以内重复,视为短时间内员工重复推箱子或用扫码枪扫描,可以放行 /// 超过五分钟,报警并显示已存在记录时间提示员工, /// 员工判断如果是一码多用,搬下来换新条码重新扫描;如果是同一箱子因为吃饭或停班重复扫描,那么点击屏幕按钮进行放行 + /// + /// -------------------------------------------------------------------------- + /// 20240315与郑总确认,不需要超时5分钟判断,条码重复判断数据库plc下发应答字,如果是1可以再次放行,如果是2说明plc已经应答箱体未走,不可放行 + /// 经武经理输入密码以后手动放行 /// /// public bool CodeRepeatProcess(TempInfo TempOffLineInfo) @@ -688,41 +700,25 @@ namespace Aucma.Core.ProductOffLine.Business // 查询本地数据库是否有数据 OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result; - if (offLineInfo != null) + if (offLineInfo != null && offLineInfo.PlcResult==1) { - if (offLineInfo.ProductScanTime >= DateTime.Now.AddMinutes(-5)) // 五分钟以内 - { - log.Info(TempOffLineInfo.ProductSNCode + "五分钟内重复上传条码系统,本地已存在,放行"); - TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "五分钟内重复上传条码系统,放行"; - //界面刷新 - // TempOffLineInfo.ProductRefreshFlag = true; + + log.Info(TempOffLineInfo.ProductSNCode + "条码重复上传,plc应答字为1,未响应为2可以再次放行"); + TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "条码重复,plc应答字为1可以放行"; + RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); return true; - } - else - { - log.Info(TempOffLineInfo.ProductSNCode + "条码重复,并且距离上次上传超过五分钟,报警并显示已存在记录时间提示员工操作处理"); - TempOffLineInfo.MsgAlarmFlag = true; - - TempOffLineInfo.MsgInfo = "条码重复,上传间隔超过五分钟禁止放行,人工处理,上传时间:" + offLineInfo.ProductScanTime; - //界面刷新 - // TempOffLineInfo.ProductRefreshFlag = true; - RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); - return false; - } + } else { - log.Info(TempOffLineInfo.ProductSNCode + "条码重复,本地不存在"); - OffLineInfo info11 = MapperTwo(TempOffLineInfo); - // 产线 - info11.ProductLineCode = "CX_02"; - info11.ProductOrderNo = "0000" + info11.ProductOrderNo; - info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo; - info11.LoginTeam = appConfig.LoginTeam; - int result = _offLineInfoServices.AddAsync(info11).Result; - Console.WriteLine("条码重复,本地不存在,插入结果:"+result); - return true; + log.Info(TempOffLineInfo.ProductSNCode + "条码重复上传,plc应答字为2,已经下传过不允许再次放行"); + TempOffLineInfo.MsgAlarmFlag = true; + + TempOffLineInfo.MsgInfo = "条码重复,plc应答字2,禁止重复放行,上传时间:" + offLineInfo.ProductScanTime; + + RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); + return false; } } catch (Exception ex) @@ -733,6 +729,62 @@ namespace Aucma.Core.ProductOffLine.Business } } + + #region 条码重复历史处理方法 + //public bool CodeRepeatProcess(TempInfo TempOffLineInfo) + //{ + // try + // { + // // 查询本地数据库是否有数据 + // OffLineInfo offLineInfo = _offLineInfoServices.FirstAsync(x => x.ProductSNCode == TempOffLineInfo.ProductSNCode).Result; + + // if (offLineInfo != null) + // { + // if (offLineInfo.ProductScanTime >= DateTime.Now.AddMinutes(-5)) // 五分钟以内 + // { + // log.Info(TempOffLineInfo.ProductSNCode + "五分钟内重复上传条码系统,本地已存在,放行"); + // TempOffLineInfo.MsgInfo = TempOffLineInfo.MsgInfo + "五分钟内重复上传条码系统,放行"; + // //界面刷新 + // // TempOffLineInfo.ProductRefreshFlag = true; + // RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); + // return true; + // } + // else + // { + // log.Info(TempOffLineInfo.ProductSNCode + "条码重复,并且距离上次上传超过五分钟,报警并显示已存在记录时间提示员工操作处理"); + // TempOffLineInfo.MsgAlarmFlag = true; + + // TempOffLineInfo.MsgInfo = "条码重复,上传间隔超过五分钟禁止放行,人工处理,上传时间:" + offLineInfo.ProductScanTime; + // //界面刷新 + // // TempOffLineInfo.ProductRefreshFlag = true; + // RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo); + // return false; + // } + // } + // else + // { + // log.Info(TempOffLineInfo.ProductSNCode + "条码重复,本地不存在"); + // OffLineInfo info11 = MapperTwo(TempOffLineInfo); + // // 产线 + // info11.ProductLineCode = "CX_02"; + // info11.ProductOrderNo = "0000" + info11.ProductOrderNo; + // info11.SaveRetuenInfo = TempOffLineInfo.MsgInfo; + // info11.LoginTeam = appConfig.LoginTeam; + // int result = _offLineInfoServices.AddAsync(info11).Result; + // Console.WriteLine("条码重复,本地不存在,插入结果:" + result); + // return true; + // } + // } + // catch (Exception ex) + // { + + // log.Error("CodeRepeatProcess()异常" + ex.Message.ToString()); + // return false; + // } + + //} + #endregion + #region plc交互 /// /// 下发plc放行信号,传进来扫码器编号,分垛方向A或者B,返回plc反馈结果