change-成品下线页面刷新方式由定时器监测刷新标志改为需要时委托刷新

dev
liuwf 11 months ago
parent 814016ae41
commit 541e8af993

@ -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,6 +25,15 @@ 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>
@ -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);
@ -232,7 +261,10 @@ namespace Aucma.Core.ProductOffLine.Business
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>
/// 判断字符编码

Loading…
Cancel
Save