@ -62,14 +62,14 @@ namespace Aucma.Core.ProductOffLine.Business
/// 扫码器2扫到条码的临时数据
/// </summary>
public static TempInfo TempOffLineInfo2 = new TempInfo ( ) ;
// 河南工厂编码
private static string Werks = "1301" ;
# endregion
#region 接口引用
private AppConfig appConfig = AppConfig . Instance ;
private static readonly log4net . ILog log = LogManager . GetLogger ( typeof ( OffLineBusiness ) ) ;
private readonly IExceptionRecordServices ? exceptionRecordServices = App . ServiceProvider . GetService < IExceptionRecordServices > ( ) ;
private readonly IBaseOrderInfoServices _baseOrderInfoServices = App . ServiceProvider . GetService < IBaseOrderInfoServices > ( ) ;
private readonly IPrintBarCodeServices ? _printBarCodeServices = App . ServiceProvider . GetService < IPrintBarCodeServices > ( ) ;
@ -115,7 +115,7 @@ namespace Aucma.Core.ProductOffLine.Business
GunBusiness . RefreshMaterialCodeStrEvent + = MaterialBarScan ;
HandSendPlcWindow . SendPlcPassEvent + = DownLoadPassFlag ;
// test();
// test();
}
#region 变量定义
/// <summary>
@ -129,15 +129,7 @@ namespace Aucma.Core.ProductOffLine.Business
{
#region 成品条码与69码校验
//BaseMaterialInfo materialInfo = _baseMaterialInfoServices.FirstAsync(x => x.ProductCode == "6933973114570").Result;
//if (materialInfo == null)
//{
// Console.WriteLine();
//}
//if (!"BCD-212CFT".Contains(materialInfo.ProductName))
//{
// Console.WriteLine();
//}
MaterialBarScan ( "15147X0CD0099E3W03410" , "12344" , "10.10.92.141" ) ;
# endregion
}
@ -168,7 +160,7 @@ namespace Aucma.Core.ProductOffLine.Business
if ( ScannerNo = = 1 ) //内侧
{
//1.扫描的SN条码去条码系统校验
BackResult = HandleMaterialBarCode ( code , code69 , TempOffLineInfo1 ); //扫码器1
BackResult = HandleMaterialBarCode ( code , code69 , TempOffLineInfo1 ,out CodeBindingRecord bindingRecord1 ); //扫码器1
materialType = TempOffLineInfo1 . ProductCode ;
if ( ! BackResult )
{
@ -178,7 +170,7 @@ namespace Aucma.Core.ProductOffLine.Business
}
// TempOffLineInfo1.ProductRefreshFlag = true;
// 2.更新mes数据库
bool MesResult = updateMesData ( TempOffLineInfo1 );
bool MesResult = updateMesData ( TempOffLineInfo1 , bindingRecord1 );
// 3.plc放行
if ( MesResult )
@ -224,7 +216,7 @@ namespace Aucma.Core.ProductOffLine.Business
// 扫码器2
else if ( ScannerNo = = 2 ) // 外侧
{
BackResult = HandleMaterialBarCode ( code , code69 , TempOffLineInfo2 ); //扫码器2
BackResult = HandleMaterialBarCode ( code , code69 , TempOffLineInfo2 , out CodeBindingRecord bindingRecord1 ); //扫码器2
materialType = TempOffLineInfo2 . ProductCode ;
if ( ! BackResult )
{
@ -233,7 +225,7 @@ namespace Aucma.Core.ProductOffLine.Business
}
// TempOffLineInfo2.ProductRefreshFlag = true;
// 2.更新mes数据库
bool MesResult = updateMesData ( TempOffLineInfo2 );
bool MesResult = updateMesData ( TempOffLineInfo2 , bindingRecord1 );
//BackResult = true;
// 3.plc放行
@ -285,6 +277,30 @@ namespace Aucma.Core.ProductOffLine.Business
}
}
/// <summary>
/// 往mes数据库添加异常记录
/// </summary>
/// <param name="SNCode"></param>
/// <param name="Msg"></param>
public async void AddExceptionRecord ( string SNCode , string Msg )
{
try
{
ExceptionRecord record = new ExceptionRecord ( ) ;
record . ProductSnCode = SNCode ;
record . ProductScanTime = DateTime . Now ;
record . ProductLineCode = appConfig . ProductlineCode ;
record . ExceptionMsg = Msg ;
await exceptionRecordServices . AddAsync ( record ) ;
}
catch ( Exception ex )
{
log . Info ( "添加异常记录方法AddExceptionRecord异常:" + ex . Message . ToString ( ) ) ;
}
}
/// <summary>
/// 下发plc放行并等待反馈信号
/// </summary>
@ -307,30 +323,20 @@ namespace Aucma.Core.ProductOffLine.Business
/// </summary>
/// <param name="BarCode"></param>
/// <returns></returns>
public bool updateMesData ( TempInfo TempOffLineInfo )
public bool updateMesData ( TempInfo TempOffLineInfo ,CodeBindingRecord bindingRecord1 )
{
try
{
OffLineInfo info11 = MapperTwo ( TempOffLineInfo ) ;
CodeBindingRecord bindingRecord1 = _codeBindingServices . FirstAsync ( x = > x . ProductCode = = info11 . ProductSNCode ) . Result ;
if ( bindingRecord1 = = null )
{
log . Info ( info11 . ProductCode + "mes数据库未查询到条码绑定记录" ) ;
// 条码绑定上位机运行以后打开
//return false;
}
else
{
// log.Info("条码绑定表查到记录:"+JsonHelper.ObjectToJson(bindingRecord1));
info11 . BoxCode = bindingRecord1 . BoxCode ;
}
info11 . BoxCode = bindingRecord1 . BoxCode ;
// 产线
info11 . ProductLineCode = "CX_02" ;
info11 . ProductLineCode = appConfig . ProductlineCode . ToString ( ) ;
info11 . SaveRetuenInfo = TempOffLineInfo . MsgInfo ;
info11 . LoginTeam = appConfig . LoginTeam ;
info11 . PlcResult = 1 ;
@ -347,6 +353,7 @@ namespace Aucma.Core.ProductOffLine.Business
TempOffLineInfo . MsgAlarmFlag = true ;
//界面刷新
RefreshScanMateriaCodeEvent ( TempOffLineInfo ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
return false ;
}
@ -361,6 +368,7 @@ namespace Aucma.Core.ProductOffLine.Business
log . Info ( "条码:" + TempOffLineInfo . ProductBarNo + " 订单号:" + TempOffLineInfo . ProductOrderNo + " 查询mes订单失败" ) ;
TempOffLineInfo . MsgInfo = TempOffLineInfo . MsgInfo + "查询mes订单失败" ;
TempOffLineInfo . MsgAlarmFlag = true ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . ProductSNCode + TempOffLineInfo . MsgInfo ) ;
//界面刷新
RefreshScanMateriaCodeEvent ( TempOffLineInfo ) ;
return false ;
@ -378,6 +386,7 @@ namespace Aucma.Core.ProductOffLine.Business
log . Info ( "条码:" + TempOffLineInfo . ProductBarNo + " 订单号:" + TempOffLineInfo . ProductOrderNo + " 更新mes订单完成数失败" ) ;
TempOffLineInfo . MsgInfo = TempOffLineInfo . MsgInfo + "更新mes订单完成数失败" ;
TempOffLineInfo . MsgAlarmFlag = true ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . ProductSNCode + "更新mes订单完成数失败" ) ;
//界面刷新
RefreshScanMateriaCodeEvent ( TempOffLineInfo ) ;
return false ;
@ -396,7 +405,7 @@ namespace Aucma.Core.ProductOffLine.Business
completion . MaterialName = print . MaterialName ;
completion . StationName = "1009" ;
completion . CompleteDate = DateTime . Now ;
completion . ProductLineCode = "CX_02" ;
completion . ProductLineCode = appConfig . ProductlineCode ;
completion . isDownLine = 1 ;
completion . ProductionCode = TempOffLineInfo . ProductSNCode ;
_ = _iMaterialCompletionServices . AddAsync ( completion ) . Result ;
@ -426,29 +435,42 @@ namespace Aucma.Core.ProductOffLine.Business
/// <param name="code69"> 69码</param>
/// <param name="TempOffLineInfo"></param>
/// <returns></returns>
public bool HandleMaterialBarCode ( string BarCode , string code69 , TempInfo TempOffLineInfo )
public bool HandleMaterialBarCode ( string BarCode , string code69 , TempInfo TempOffLineInfo ,out CodeBindingRecord bindingRecord1 )
{
try
{
#region 1.质检--暂未启用
// List<ReportQualityInsPection> qualityList = _reportQualityInspectionServices.JudgeIsQualified(BarCode);
// if (qualityList != null)
//{
// TempOffLineInfo.QualityResult = "失败";
// TempOffLineInfo.ProductSNCode = BarCode.Trim(); //产品SN条码*1
// TempOffLineInfo.ProductScanTime = System.DateTime.Now; // 扫码时间*2
// TempOffLineInfo.MsgInfo = "条码质检失败:";
// foreach(ReportQualityInsPection item in qualityList)
// {
// TempOffLineInfo.MsgInfo += item.QualityDefectName;
// }
// TempOffLineInfo.MsgAlarmFlag = true;
// //界面刷新
// // TempOffLineInfo.ProductRefreshFlag = true;
// RefreshScanMateriaCodeEvent?.Invoke(TempOffLineInfo);
// return false;
//}
bindingRecord1 = _codeBindingServices . FirstAsync ( x = > x . ProductCode = = BarCode ) . Result ;
if ( bindingRecord1 = = null )
{
TempOffLineInfo . MsgInfo = BarCode + ":条码绑定工位未查询到条码绑定记录,请拆掉包装重新绑定" ;
TempOffLineInfo . MsgAlarmFlag = true ;
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
log . Info ( TempOffLineInfo . ProductSNCode + "条码绑定工位未查询到条码绑定记录,请拆掉包装重新绑定" ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
return false ;
}
#region 1.质检-未查到终检合格记录即为质检不合格
ReportQualityInsPection qualityList = _reportQualityInspectionServices . JudgeIsQualified ( bindingRecord1 . BoxCode ) ;
if ( qualityList = = null )
{
TempOffLineInfo . QualityResult = "失败" ;
TempOffLineInfo . ProductSNCode = BarCode . Trim ( ) ; //产品SN条码*1
TempOffLineInfo . ProductScanTime = System . DateTime . Now ; // 扫码时间*2
TempOffLineInfo . MsgInfo = TempOffLineInfo . ProductSNCode + ":条码终检失败或未终检,请回到终检工位重新检查!" ;
TempOffLineInfo . MsgAlarmFlag = true ;
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
return false ;
}
# endregion
@ -508,7 +530,7 @@ namespace Aucma.Core.ProductOffLine.Business
{
TempOffLineInfo . MsgInfo = "69码校验失败:" + code69 + "未维护69码信息!" ;
TempOffLineInfo . MsgAlarmFlag = true ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . ProductSNCode + TempOffLineInfo . MsgInfo ) ;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
log . Info ( "69码校验失败:" + code69 + "未维护69码信息!" ) ;
return false ; // 因为没有录69码校验失败暂不处理, 允许下线, 等69码录全就禁止下线
@ -522,6 +544,7 @@ namespace Aucma.Core.ProductOffLine.Business
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
log . Info ( "69码校验失败,69码:" + code69 + ";69码名称:" + materialInfo . ProductName + ";成品码名称:" + TempOffLineInfo . ProductName ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . ProductSNCode + TempOffLineInfo . MsgInfo ) ;
return false ;
}
else
@ -550,7 +573,7 @@ namespace Aucma.Core.ProductOffLine.Business
else
{
log . Info ( BarCode + "失败返回验证信息:" + FArrayList [ 1 ] ) ;
#region 实体赋值
TempOffLineInfo . MsgAlarmFlag = true ;
TempOffLineInfo . MsgInfo = "条码系统获取信息失败. " + BarCode + " 返回值:" + FArrayList [ 0 ] . ToString ( ) ;
@ -578,6 +601,8 @@ namespace Aucma.Core.ProductOffLine.Business
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
return false ;
}
@ -590,6 +615,7 @@ namespace Aucma.Core.ProductOffLine.Business
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
log . Info ( BarCode + "条码验证异常:" + ex . Message . ToString ( ) ) ;
bindingRecord1 = null ;
return false ;
}
}
@ -624,6 +650,8 @@ namespace Aucma.Core.ProductOffLine.Business
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
return false ;
}
@ -654,6 +682,8 @@ namespace Aucma.Core.ProductOffLine.Business
return CodeRepeatProcess ( TempOffLineInfo ) ;
}
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
return false ;
}
@ -663,6 +693,7 @@ namespace Aucma.Core.ProductOffLine.Business
{
TempOffLineInfo . MsgInfo = TempOffLineInfo . MsgInfo + ",条码系统保存接口异常" ;
TempOffLineInfo . MsgAlarmFlag = true ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
@ -673,6 +704,7 @@ namespace Aucma.Core.ProductOffLine.Business
{
TempOffLineInfo . MsgInfo = TempOffLineInfo . MsgInfo + ",生产单号异常" ;
TempOffLineInfo . MsgAlarmFlag = true ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
//界面刷新
// TempOffLineInfo.ProductRefreshFlag = true;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
@ -721,6 +753,8 @@ namespace Aucma.Core.ProductOffLine.Business
TempOffLineInfo . MsgInfo = "条码重复,plc应答字2,禁止重复放行,上传时间:" + offLineInfo . ProductScanTime ;
AddExceptionRecord ( TempOffLineInfo . ProductSNCode , TempOffLineInfo . MsgInfo ) ;
RefreshScanMateriaCodeEvent ? . Invoke ( TempOffLineInfo ) ;
return false ;
}