|
|
|
@ -112,7 +112,7 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
GunBusiness.RefreshMaterialCodeStrEvent += MaterialBarScan;
|
|
|
|
|
HandSendPlcWindow.SendPlcPassEvent += DownLoadPassFlag;
|
|
|
|
|
|
|
|
|
|
// test();
|
|
|
|
|
// test();
|
|
|
|
|
}
|
|
|
|
|
#region 变量定义
|
|
|
|
|
/// <summary>
|
|
|
|
@ -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
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="BarCode"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
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已经应答箱体未走,不可放行
|
|
|
|
|
/// 经武经理输入密码以后手动放行
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
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交互
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 下发plc放行信号,传进来扫码器编号,分垛方向A或者B,返回plc反馈结果
|
|
|
|
|