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反馈结果