You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

491 lines
14 KiB

using EC.AutoWeightServer.IfManager.FingerPrint;
using EC.AutoWeightServer.IfManager.LedZK;
using EC.AutoWeightServer.IfManager.Light;
using EC.AutoWeightServer.IfManager.Pos;
using EC.AutoWeightServer.IfManager.Scales;
using EC.AutoWeightServer.IfManager.YkPos;
using EC.AutoWeightServer.Model.Config;
using EC.AutoWeightServer.Model.State;
using EC.AutoWeightServer.UI;
using EC.AutoWeightServer.UI.UC;
using EC.Entity.Transport;
using EC.Utils;
using System;
using System.Collections.Generic;
using System.Text;
namespace EC.AutoWeightServer.Center
{
public class DeviceCenter
{
private FrmMainServer _mainServer { get; set; }
internal UCLicensePlate PlateManager1 { get; set; }
internal UCLicensePlate PlateManager2 { get; set; }
internal UCLicensePlate PlateManager3 { get; set; }
internal UCLicensePlate PlateManager4 { get; set; }
/// <summary>
/// 称重管理
/// </summary>
internal ScalesManager ScalesManager { get; set; }
/// <summary>
/// 灯光控制
/// </summary>
internal LightManager LightManager { get; set; }
/// <summary>
/// 指纹识别
/// </summary>
internal FingerPrintManager FPManager { get; set; }
/// <summary>
/// Led控制
/// </summary>
internal LedZKManager LedZKManager { get; set; }
internal PosManager PosManager { get; set; }
public DeviceCenter()
{
}
public DeviceCenter(FrmMainServer mainServer)
{
_mainServer = mainServer;
PlateManager1 = mainServer.ucLicensePlate1;
PlateManager2 = mainServer.ucLicensePlate2;
PlateManager3 = mainServer.ucLicensePlate3;
PlateManager4 = mainServer.ucLicensePlate4;
}
#region Gather
public void OpenDevices()
{
OpenCameraServer();
OpenWeightServer();
OpenLightServer();
OpenLedServer();
OpenFingerPrintServer();
//OpenYkPosServer();
OpenPosServer();
}
public void CloseDevices()
{
//CloseCameraServer();
//CloseWeightServer();
//CloseLightServer();
//CloseLedServer();
//CloseFingerPrintServer();
//CloseYkPosServer();
//OpenPosServer();
}
public void CheckDevicesConnect()
{
var msgList = new List<string>();
if (!PlateManager1.IsDeviceConnected())
msgList.Add("1号摄像头未连接");
if (!PlateManager2.IsDeviceConnected())
msgList.Add("2号摄像头未连接");
if (!PlateManager3.IsDeviceConnected())
msgList.Add("3号摄像头未连接");
if (!PlateManager4.IsDeviceConnected())
msgList.Add("4号摄像头未连接");
if (ScalesManager == null || !ScalesManager.IsOpen())
msgList.Add("地磅接口未连接");
if (LightManager == null || !LightManager.IsOpen())
msgList.Add("灯光接口未连接");
if (FPManager == null || !FPManager.IsConnected())
msgList.Add("指纹接口未连接");
if (LedZKManager == null || !LedZKManager.IsConnected())
msgList.Add("Led屏未连接");
//if (!YkPosManager.IsConnected())
//{
// msgList.Add("打印接口未连接");
//}
//else
//{
// if (YkPosManager.IsPaperExhaust())
// msgList.Add("打印接口纸尽");
// //if (YkPosManager.IsPaperWillExhaust())
// // msgList.Add("打印接口纸将尽");
//}
if (!PosManager.IsConnected())
{
msgList.Add("打印接口未连接");
}
else
{
if (PosManager.IsPaperExhaust())
msgList.Add("打印接口纸尽");
//if (YkPosManager.IsPaperWillExhaust())
// msgList.Add("打印接口纸将尽");
}
var msg = string.Join("\n", msgList.ToArray());
if (!string.IsNullOrEmpty(msg))
UiExtendCenter.ShowErrorMsgBox(msg);
}
#endregion Gather
#region CameraServer
private void OpenCameraServer()
{
var address1 = ServerConfig.CameraAddress1;
var address2 = ServerConfig.CameraAddress2;
var address3 = ServerConfig.CameraAddress3;
var address4 = ServerConfig.CameraAddress4;
var port = ServerConfig.CameraSocketPort;
var username = ServerConfig.CameraUsername;
var password = ServerConfig.CameraPassword;
try
{
PlateManager1.InitForm(address1, port, username, password);
var enableOpen = PlateManager1.OpenDevice();
if (enableOpen)
FileUnit.Log(address1 + "打开成功 相机1");
else
FileUnit.Log(address1 + "打开失败 相机1");
PlateManager2.InitForm(address2, port, username, password);
enableOpen = PlateManager2.OpenDevice();
if (enableOpen)
FileUnit.Log(address2 + "打开成功 相机2");
else
FileUnit.Log(address2 + "打开失败 相机2");
PlateManager3.InitForm(address3, port, username, password);
enableOpen = PlateManager3.OpenDevice();
if (enableOpen)
FileUnit.Log(address3 + "打开成功 相机3");
else
FileUnit.Log(address3 + "打开失败 相机3");
PlateManager4.InitForm(address4, port, username, password);
enableOpen = PlateManager4.OpenDevice();
if (enableOpen)
FileUnit.Log(address4 + "打开成功 相机4");
else
FileUnit.Log(address4 + "打开失败 相机4");
}
catch (Exception ex)
{
LogUnit.Error(ex.Message);
}
}
private void CloseCameraServer()
{
PlateManager1.CloseForm();
PlateManager2.CloseForm();
PlateManager3.CloseForm();
PlateManager4.CloseForm();
}
/// <summary>
/// 通过2号摄像头(入场后摄像头)拍摄照片,并返回照片路径
/// </summary>
/// <param name="license"></param>
/// <returns></returns>
internal string GetInPicture2(string license)
{
return PlateManager2.GetPlatePic(license);
}
/// <summary>
/// 通过4号摄像头(出场后摄像头)拍摄照片,并返回照片路径
/// </summary>
/// <param name="license"></param>
/// <returns></returns>
internal string GetOutPicture2(string license)
{
return PlateManager4.GetPlatePic(license);
}
#endregion CameraServer
#region ScalesManager
public void OpenWeightServer()
{
var com = ServerConfig.WtCom;
var rate = ServerConfig.WtBaudRate;
var receivedBytesThreshold = ServerConfig.WtReceivedBytesThreshold;
ScalesManager = new ScalesManager(com, rate, receivedBytesThreshold);
ScalesManager.StartServer();
}
public void CloseWeightServer()
{
ScalesManager?.StopServer();
ScalesManager = null;
}
#endregion ScalesManager
#region LightManager
public void OpenLightServer()
{
var com = ServerConfig.LightRelayCom;
var rate = ServerConfig.LightRelayBaudRate;
var name = ServerConfig.LightCodeName;
LightManager = new LightManager(com, rate, name);
LightManager.StartServer();
}
public void CloseLightServer()
{
LightManager?.StopServer();
LightManager = null;
}
#endregion LightManager
#region LedZKManager
public void OpenLedServer()
{
var ip = ServerConfig.LedIp;
var port = (ushort)ServerConfig.LedPort;
LedZKManager = new LedZKManager(ip, port);
LedZKManager.StartServer();
}
public void CloseLedServer()
{
LedZKManager?.StopServer();
LedZKManager = null;
}
#endregion LedZKManager
#region FingerPrintManager
public void OpenFingerPrintServer()
{
FPManager = new FingerPrintManager();
FPManager.StartServer();
FPManager.SetVerBoxAble(true);//设置验证窗体开启
FPManager.SetVerTime(30 * 1000);//设置认证窗口超时时间
}
public void CloseFingerPrintServer()
{
FPManager?.StopServer();
FPManager = null;
}
/// <summary>
/// 获取特征指纹
/// </summary>
/// <returns></returns>
public string GetVerFingerPrint()
{
var fp = string.Empty;
var stat = FPManager.GetVerFingerPrint(ref fp);
return stat ? fp : string.Empty;
}
/// <summary>
/// 比对指纹
/// </summary>
/// <param name="regFp"></param>
/// <param name="verFp"></param>
/// <returns></returns>
public bool MatchFingerPrint(string regFp, string verFp)
{
return FPManager.MatchFingerPrint(regFp, verFp);
}
#endregion FingerPrintManager
#region YkPosManager
public void OpenYkPosServer()
{
YkPosManager.OpenDevice();
}
public void CloseYkPosServer()
{
YkPosManager.CloseDevice();
}
/// <summary>
/// 打印运单
/// </summary>
/// <param name="billEntity"></param>
public void PrintYkPosBill(TransportBillEntity billEntity)
{
if (billEntity == null)
return;
if (!YkPosManager.IsConnected() || YkPosManager.IsPaperExhaust())
{
var msg = "打印接口纸尽,请联系管理人员";
_mainServer?.SetScrollLabelText(msg);
_mainServer?.ShowRecvMessage(msg);
return;
}
YkPosManager.InitPrinter();
var bmpPath = EnvUtil.CombinePath(EnvUtil.GetWorkDirectory(), "data", "image", "logo.bmp");
YkPosManager.SetAlign(1);//居中
YkPosManager.PrintRasterBmp(new StringBuilder(bmpPath));//打印图片
//YkPosManager.InitPrinter();//重置
//YkPosManager.SetAlign(1);//居中
YkPosManager.SetEmphasized(1);//字体加粗
//YkPosManager.SetCharSize(1,1);//字体放大
YkPosManager.PrintStr(new StringBuilder($"{_mainServer.LocalAttrCenter.Company.F_FullName}\n"));//打印公司名
YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(1);//居中
YkPosManager.PrintStr(new StringBuilder("========================================\n"));//打印分隔符
//YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(0);//居左
YkPosManager.SetLeftMargin(8 * 8, 0);//设置左边距
var content = new StringBuilder();
content.Append($"场地:\t{billEntity.SiteName}\n");
content.Append($"运单号:\t{billEntity.SerialNumber}\n");
content.Append($"供应商:\t{billEntity.SupplierName}\n");
content.Append($"运输车:\t{billEntity.LicensePlate}\n");
content.Append($"挂车:\t{billEntity.TrailerPlate}\n");
content.Append($"运输员:\t{billEntity.DriverName}\n");
content.Append($"押运员:\t{billEntity.Driver2Name}\n");
content.Append($"料号:\t{billEntity.MaterialNo}\n");
YkPosManager.PrintStr(content);//打印内容
YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(1);//居中
YkPosManager.PrintStr(new StringBuilder("----------------------------------------\n"));//打印分隔符
//YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(0);//居左
YkPosManager.SetLeftMargin(8 * 8, 0);//设置左边距
content = new StringBuilder();
content.Append($"运单重量:\t{billEntity.BillWeight}吨\n");
content.Append($"入场重量:\t{billEntity.InWeight}吨\n");
content.Append($"出场重量:\t{billEntity.OutWeight}吨\n");
content.Append($"实际重量:\t{billEntity.NetWeight}吨\n");
content.Append($"达标率:\t{billEntity.StandardRate}%\n");
content.Append($"入场时间:\t{billEntity.InStartTime:yyyy/MM/dd HH:mm:ss}\n");
content.Append($"出场时间:\t{billEntity.OutFinishTime:yyyy/MM/dd HH:mm:ss}\n");
content.Append($"运单状态:\t{BillStateExt.GetBillStateDesc(billEntity.State)}\n");
YkPosManager.PrintStr(content);//打印内容
YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(1);//居中
YkPosManager.PrintStr(new StringBuilder("========================================\n"));
//YkPosManager.InitPrinter();//重置
YkPosManager.SetAlign(2);//居右
//YkPosManager.PrintStr(new StringBuilder($"管理员:{user?.F_RealName}\n"));
YkPosManager.PrintStr(new StringBuilder($"出票时间:{DateTime.Now:yyyy/MM/dd HH:mm:ss}\n"));//打印页脚
YkPosManager.FeedPaper();//走纸,留空隙
YkPosManager.CutPaper();//切纸
}
#endregion YkPosManager
#region PosManager
public void OpenPosServer()
{
PosManager = new PosManager();
PosManager.OpenDevice(PosSDK.POS_PT_USB);
}
public void ClosePosServer()
{
PosManager?.CloseDevice();
PosManager = null;
}
public void PrintPosBill(TransportBillEntity billEntity)
{
if (PosManager == null || billEntity == null || !PosManager.IsConnected())
return;
if (PosManager.IsPaperExhaust())
{
var msg = "打印接口纸尽,请联系管理人员";
_mainServer?.SetScrollLabelText(msg);
_mainServer?.ShowRecvMessage(msg);
return;
}
// 初始化
PosManager.InitPrinter();
// 打印票头
string bmpPath2 = EnvUtil.CombinePath(EnvUtil.GetWorkDirectory(), "data", "image", "logom.bmp");
if (!EnvUtil.ExistFile(bmpPath2))
{
string bmpPath1 = EnvUtil.CombinePath(EnvUtil.GetWorkDirectory(), "data", "image", "logo.bmp");
PosManager.Color24_GrayBW(bmpPath1, bmpPath2);
}
PosManager.PrintBmp(bmpPath2);
// 缓冲区
byte[] cmd = new byte[] { 0x1c, 0x26 };
PosManager.PrintData(cmd, 2);
// 打印公司
PosManager.SetAlign(1);
PosManager.PrintStr(0, 1, 0, 0, 0, $"{_mainServer.LocalAttrCenter.Company.F_FullName}\r\n");
// 打印分隔符
PosManager.PrintStr(0, 0, 0, 0, 0, "================================\r\n");
// 打印运单信息
PosManager.SetAlign(0);//居左
var content = new StringBuilder();
content.Append($"场地:\t{billEntity.SiteName}\n");
content.Append($"运单号:\t{billEntity.SerialNumber}\n");
content.Append($"供应商:\t{billEntity.SupplierName}\n");
content.Append($"运输车:\t{billEntity.LicensePlate}\n");
content.Append($"挂车:\t{billEntity.TrailerPlate}\n");
content.Append($"运输员:\t{billEntity.DriverName}\n");
content.Append($"押运员:\t{billEntity.Driver2Name}\n");
content.Append($"料号:\t{billEntity.MaterialNo}\n");
PosManager.PrintStr(0, 0, 0, 0, 0, content.ToString());
// 打印分隔符
PosManager.SetAlign(1);
PosManager.PrintStr(0, 0, 0, 0, 0, "--------------------------------\r\n");
// 打印进出场信息
PosManager.SetAlign(0);
content = new StringBuilder();
content.Append($"运单重量:\t{billEntity.BillWeight}吨\n");
content.Append($"入场重量:\t{billEntity.InWeight}吨\n");
content.Append($"出场重量:\t{billEntity.OutWeight}吨\n");
content.Append($"实际重量:\t{billEntity.NetWeight}吨\n");
content.Append($"达标率:\t{billEntity.StandardRate}%\n");
content.Append($"入场时间:\t{billEntity.InStartTime:yyyy/MM/dd HH:mm:ss}\n");
content.Append($"出场时间:\t{billEntity.OutFinishTime:yyyy/MM/dd HH:mm:ss}\n");
content.Append($"运单状态:\t{BillStateExt.GetBillStateDesc(billEntity.State)}\n");
PosManager.PrintStr(0, 0, 0, 0, 0, content.ToString());
//打印分隔符
PosManager.SetAlign(1);
PosManager.PrintStr(0, 0, 0, 0, 0, "================================\r\n");
//打印票尾
PosManager.SetAlign(2);
//PosManager.PrintStr(0, 0, 0, 0, 0,$"管理员:{user?.F_RealName}\n");
PosManager.PrintStr(0, 0, 0, 0, 0, $"出票时间:{DateTime.Now:yyyy/MM/dd HH:mm:ss}\r\n");
PosManager.InitPrinter();
//切纸
PosManager.CutPaper(1, 3);
}
#endregion PosManager
}
}