|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
using Admin.Core.Common;
|
|
|
|
|
using Aucma.Core.Scanner;
|
|
|
|
|
using log4net;
|
|
|
|
|
using MvCodeReaderSDKNet;
|
|
|
|
|
using StackExchange.Profiling;
|
|
|
|
|
using System;
|
|
|
|
@ -8,6 +9,7 @@ using System.Linq;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using UAParser;
|
|
|
|
|
|
|
|
|
|
namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
{
|
|
|
|
@ -23,8 +25,17 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
// 箱壳扫码器ip
|
|
|
|
|
private static string ShellScannerIp = allScanners.First(x => x.Name == "外侧扫码器2").Ip;
|
|
|
|
|
|
|
|
|
|
private static readonly log4net.ILog log = LogManager.GetLogger(typeof(OffLineBusiness));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 全局变量定义
|
|
|
|
|
public static MvCodeReader ShellDevice = null;
|
|
|
|
|
public static MvCodeReader LinerDevice = null;
|
|
|
|
|
public static DateTime ShellLiveTime = DateTime.Now;
|
|
|
|
|
public static DateTime LinerLiveTime = DateTime.Now;
|
|
|
|
|
#endregion
|
|
|
|
|
#region 委托事件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 成品下线委托
|
|
|
|
|
/// </summary>
|
|
|
|
@ -38,7 +49,7 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="materialCodeStr"></param>
|
|
|
|
|
/// <param name="ip"></param>
|
|
|
|
|
public delegate void RefreshState(string ip);
|
|
|
|
|
public delegate void RefreshState(string ip,bool flag);
|
|
|
|
|
public static event RefreshState RefreshStateEvent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -59,7 +70,10 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
|
|
|
|
|
if (stBcrResult.nCodeNum == 0)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("外侧--->No Read 处理");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":外侧--->No Read 处理");
|
|
|
|
|
log.Info(DateTime.Now + ":外侧--->No Read 处理");
|
|
|
|
|
//更新扫码器存活时间
|
|
|
|
|
ShellLiveTime = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
|
|
|
|
|
{
|
|
|
|
@ -67,21 +81,26 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
if (bIsValidUTF8)
|
|
|
|
|
{
|
|
|
|
|
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
|
|
|
|
|
Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
|
|
|
|
|
Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":外侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
log.Info(DateTime.Now + ":外侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
// RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
|
|
|
|
|
if (strCode.Trim().TrimEnd('\0').Length == 20)
|
|
|
|
|
{
|
|
|
|
|
//更新扫码器存活时间
|
|
|
|
|
ShellLiveTime = DateTime.Now;
|
|
|
|
|
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), ShellScannerIp);
|
|
|
|
|
// 业务处理
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("外侧--->No Read 处理");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
|
|
|
|
|
log.Info(DateTime.Now + ":外侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -106,7 +125,10 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
// Console.WriteLine("CodeNum[" + Convert.ToString(stBcrResult.nCodeNum) + "]");
|
|
|
|
|
if (stBcrResult.nCodeNum == 0)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("内侧--->No Read 处理");
|
|
|
|
|
Console.WriteLine(DateTime.Now+":内侧--->No Read 处理");
|
|
|
|
|
log.Info(DateTime.Now + ":内侧--->No Read 处理");
|
|
|
|
|
// 更新存活时间
|
|
|
|
|
LinerLiveTime = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
for (Int32 i = 0; i < stBcrResult.nCodeNum; i++)
|
|
|
|
|
{
|
|
|
|
@ -114,24 +136,27 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
if (bIsValidUTF8)
|
|
|
|
|
{
|
|
|
|
|
string strCode = Encoding.UTF8.GetString(stBcrResult.stBcrInfoEx2[i].chCode);
|
|
|
|
|
Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string strCode = Encoding.GetEncoding("GB2312").GetString(stBcrResult.stBcrInfoEx2[i].chCode);
|
|
|
|
|
Console.WriteLine("Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
Console.WriteLine(DateTime.Now + ":内侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
log.Info(DateTime.Now + ":内侧扫码器==>Get CodeNum: " + "CodeNum[" + i.ToString() + "], CodeString[" + strCode.Trim().TrimEnd('\0') + "]");
|
|
|
|
|
// RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), LinerScannerIp);
|
|
|
|
|
if (strCode.Trim().TrimEnd('\0').Length == 20)
|
|
|
|
|
{
|
|
|
|
|
// 更新存活时间
|
|
|
|
|
LinerLiveTime = DateTime.Now;
|
|
|
|
|
// 业务处理
|
|
|
|
|
RefreshMaterialCodeStrEvent?.Invoke(strCode.Trim().TrimEnd('\0'), LinerScannerIp);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("内侧--->No Read 处理");
|
|
|
|
|
Console.WriteLine(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
|
|
|
|
|
log.Info(DateTime.Now + "内侧扫码器==>条码:" + strCode.Trim().TrimEnd('\0') + "长度不为20,当做No Read 处理");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -208,13 +233,17 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
|
|
|
|
|
// ch:打开设备 | en:Open device
|
|
|
|
|
nRet = device.MV_CODEREADER_OpenDevice_NET();
|
|
|
|
|
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Open device failed:{0:x8}", nRet);
|
|
|
|
|
// 刷新扫码器状态
|
|
|
|
|
RefreshStateEvent?.Invoke("外侧", false);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 刷新扫码器状态
|
|
|
|
|
RefreshStateEvent?.Invoke("外侧");
|
|
|
|
|
RefreshStateEvent?.Invoke("外侧",true);
|
|
|
|
|
// ch:注册回调函数 | en:Register image callback
|
|
|
|
|
ImageCallback = new MvCodeReader.cbOutputEx2delegate(ShellImageCallbackFunc);
|
|
|
|
|
nRet = device.MV_CODEREADER_RegisterImageCallBackEx2_NET(ImageCallback, IntPtr.Zero);
|
|
|
|
@ -231,8 +260,11 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 关闭使用
|
|
|
|
|
ShellDevice = device;
|
|
|
|
|
Console.WriteLine("Press enter to exit");
|
|
|
|
|
Console.WriteLine(DateTime.Now.ToString());
|
|
|
|
|
Console.ReadLine();
|
|
|
|
|
|
|
|
|
|
// ch:停止抓图 | en:Stop grabbing
|
|
|
|
@ -339,10 +371,12 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Open device failed:{0:x8}", nRet);
|
|
|
|
|
// 刷新扫码器状态
|
|
|
|
|
RefreshStateEvent?.Invoke("外侧", false);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 刷新扫码器状态
|
|
|
|
|
RefreshStateEvent?.Invoke("内侧");
|
|
|
|
|
RefreshStateEvent?.Invoke("内侧", true);
|
|
|
|
|
|
|
|
|
|
// ch:注册回调函数 | en:Register image callback
|
|
|
|
|
ImageCallback = new MvCodeReader.cbOutputEx2delegate(LinerImageCallbackFunc);
|
|
|
|
@ -360,8 +394,11 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
Console.WriteLine("Start grabbing failed:{0:x8}", nRet);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// 关闭使用
|
|
|
|
|
ShellDevice = device;
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Press enter to exit");
|
|
|
|
|
Console.WriteLine(DateTime.Now.ToString());
|
|
|
|
|
Console.ReadLine();
|
|
|
|
|
|
|
|
|
|
// ch:停止抓图 | en:Stop grabbing
|
|
|
|
@ -401,6 +438,114 @@ namespace Aucma.Core.ProductOffLine.Business
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 关闭内胆扫码器
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void CloseLiner()
|
|
|
|
|
{
|
|
|
|
|
int nRet = MvCodeReader.MV_CODEREADER_OK;
|
|
|
|
|
MvCodeReader device = LinerDevice;
|
|
|
|
|
// ch:停止抓图 | en:Stop grabbing
|
|
|
|
|
nRet = device.MV_CODEREADER_StopGrabbing_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ch:关闭设备 | en:Close device
|
|
|
|
|
nRet = device.MV_CODEREADER_CloseDevice_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Close device failed{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ch:销毁设备 | en:Destroy device
|
|
|
|
|
nRet = device.MV_CODEREADER_DestroyHandle_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Destroy device failed:{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Console.WriteLine("关闭内胆扫码器成功");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 关闭箱壳扫码器
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void CloseShell()
|
|
|
|
|
{
|
|
|
|
|
int nRet = MvCodeReader.MV_CODEREADER_OK;
|
|
|
|
|
MvCodeReader device = ShellDevice;
|
|
|
|
|
// ch:停止抓图 | en:Stop grabbing
|
|
|
|
|
nRet = device.MV_CODEREADER_StopGrabbing_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Stop grabbing failed{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ch:关闭设备 | en:Close device
|
|
|
|
|
nRet = device.MV_CODEREADER_CloseDevice_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Close device failed{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ch:销毁设备 | en:Destroy device
|
|
|
|
|
nRet = device.MV_CODEREADER_DestroyHandle_NET();
|
|
|
|
|
if (MvCodeReader.MV_CODEREADER_OK != nRet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Destroy device failed:{0:x8}", nRet);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
Console.WriteLine("关闭箱壳扫码器成功");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 监测扫码器15分钟以内是否有触发操作,如果超时未触发,关闭再重连扫码器
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void JudgeShellIsConnectedAndReConnect()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
DateTime dateTime = DateTime.Now;
|
|
|
|
|
TimeSpan timeSpan = dateTime.Subtract(ShellLiveTime);
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
if (timeSpan.TotalMinutes >= 1)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("箱壳扫码器超时,重连");
|
|
|
|
|
ShellLiveTime = dateTime;
|
|
|
|
|
CloseShell();
|
|
|
|
|
Shell();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
TimeSpan timeSpan2 = dateTime.Subtract(LinerLiveTime);
|
|
|
|
|
if (timeSpan2.TotalMinutes >= 1)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("内胆扫码器超时,重连");
|
|
|
|
|
LinerLiveTime = dateTime;
|
|
|
|
|
CloseLiner();
|
|
|
|
|
Liner();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
log.Error("JudgeShellIsConnectedAndReConnect判断扫码器重连方法异常:"+ex.Message.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region 判断字符编码
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 判断字符编码
|
|
|
|
|