@@ -26,27 +26,27 @@ namespace HKCardOUT.Logic.Service | |||||
if (!DataBus.IsTest) | if (!DataBus.IsTest) | ||||
if (!Main.GetInstance.GetIsSwipe(input.Location.AsInt())) return false; | if (!Main.GetInstance.GetIsSwipe(input.Location.AsInt())) return false; | ||||
var Old = DbContext.Context.Queryable<SaleLog>().Where(t => t.CardNo == input.CardNo).Where(t => t.CreateTime.Day == DateTime.Now.Day).ToList(); | var Old = DbContext.Context.Queryable<SaleLog>().Where(t => t.CardNo == input.CardNo).Where(t => t.CreateTime.Day == DateTime.Now.Day).ToList(); | ||||
if (Old.Count > 3) return false; | |||||
//if (Old.Count > 3) return false; | |||||
var AM = DataBus.AM.Split(",").Select(t => t.AsInt()).ToList(); | |||||
var PM = DataBus.PM.Split(",").Select(t => t.AsInt()).ToList(); | |||||
var AT = DataBus.AT.Split(",").Select(t => t.AsInt()).ToList(); | |||||
//var AM = DataBus.AM.Split(",").Select(t => t.AsInt()).ToList(); | |||||
//var PM = DataBus.PM.Split(",").Select(t => t.AsInt()).ToList(); | |||||
//var AT = DataBus.AT.Split(",").Select(t => t.AsInt()).ToList(); | |||||
var condition1 = (DateTime.Now.Hour >= AM[0] && DateTime.Now.Hour < AM[1]); | |||||
var condition2 = (DateTime.Now.Hour >= PM[0] && DateTime.Now.Hour < PM[1]); | |||||
var condition3 = (DateTime.Now.Hour >= AT[0] && DateTime.Now.Hour < AT[1]); | |||||
HKLog.HKLogImport.WriteInfo($"当前刷卡时间_条件1:{condition1}_条件2:{condition2}_条件3:{condition3}"); | |||||
if (condition1 || condition2 || condition3) | |||||
//var condition1 = (DateTime.Now.Hour >= AM[0] && DateTime.Now.Hour < AM[1]); | |||||
//var condition2 = (DateTime.Now.Hour >= PM[0] && DateTime.Now.Hour < PM[1]); | |||||
//var condition3 = (DateTime.Now.Hour >= AT[0] && DateTime.Now.Hour < AT[1]); | |||||
//HKLog.HKLogImport.WriteInfo($"当前刷卡时间_条件1:{condition1}_条件2:{condition2}_条件3:{condition3}"); | |||||
if (true) | |||||
{ | { | ||||
var AMDay = Old.Where(t => t.CreateTime.Hour >= AM[0] && t.CreateTime.Hour < AM[1]).Count(); | |||||
HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}上午消费次数:{AMDay}"); | |||||
if (AMDay > 0) return false; | |||||
var PMDay = Old.Where(t => t.CreateTime.Hour >= PM[0] && t.CreateTime.Hour < PM[1]).Count(); | |||||
HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}中午消费次数:{AMDay}"); | |||||
if (PMDay > 0) return false; | |||||
var ATDay = Old.Where(t => t.CreateTime.Hour >= AT[0] && t.CreateTime.Hour < AT[1]).Count(); | |||||
HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}下午消费次数:{AMDay}"); | |||||
if (ATDay > 0) return false; | |||||
//var AMDay = Old.Where(t => t.CreateTime.Hour >= AM[0] && t.CreateTime.Hour < AM[1]).Count(); | |||||
//HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}上午消费次数:{AMDay}"); | |||||
//if (AMDay > 0) return false; | |||||
//var PMDay = Old.Where(t => t.CreateTime.Hour >= PM[0] && t.CreateTime.Hour < PM[1]).Count(); | |||||
//HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}中午消费次数:{AMDay}"); | |||||
//if (PMDay > 0) return false; | |||||
//var ATDay = Old.Where(t => t.CreateTime.Hour >= AT[0] && t.CreateTime.Hour < AT[1]).Count(); | |||||
//HKLog.HKLogImport.WriteInfo($"卡号{input.CardNo}下午消费次数:{AMDay}"); | |||||
//if (ATDay > 0) return false; | |||||
var entity = DbContext.Context.Insertable(input).CallEntityMethod(t => t.Create()).ExecuteReturnEntity(); | var entity = DbContext.Context.Insertable(input).CallEntityMethod(t => t.Create()).ExecuteReturnEntity(); | ||||
@@ -12,6 +12,7 @@ using StyletIoC; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||
using System.Diagnostics; | |||||
using System.Drawing; | using System.Drawing; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Text.RegularExpressions; | using System.Text.RegularExpressions; | ||||
@@ -32,6 +33,8 @@ namespace HKCardOUT.ViewModels | |||||
public event ReadCardFunc ReadFunc; | public event ReadCardFunc ReadFunc; | ||||
private readonly object locker = new object(); | private readonly object locker = new object(); | ||||
private IContainer Container; | private IContainer Container; | ||||
private Thread thread1; | |||||
readonly System.Timers.Timer timer1 = new(); | |||||
public RootViewModel(IContainer Container) | public RootViewModel(IContainer Container) | ||||
{ | { | ||||
this.Container = Container; | this.Container = Container; | ||||
@@ -49,13 +52,15 @@ namespace HKCardOUT.ViewModels | |||||
/// <param name="e"></param> | /// <param name="e"></param> | ||||
private void RootViewModel_Closed(object sender, CloseEventArgs e) | private void RootViewModel_Closed(object sender, CloseEventArgs e) | ||||
{ | { | ||||
ti.Stop(); | |||||
ti.Dispose(); | |||||
if (timer1!=null) | |||||
{ | |||||
timer1.Stop(); | |||||
timer1.Dispose(); | |||||
} | |||||
UHF_RS485_Helper.GetInstance().Close(); | UHF_RS485_Helper.GetInstance().Close(); | ||||
} | } | ||||
System.Timers.Timer ti = new(); | |||||
private void RootViewModel_Activated(object sender, ActivationEventArgs e) | private void RootViewModel_Activated(object sender, ActivationEventArgs e) | ||||
{ | { | ||||
ReadFunc -= ReadCard; | ReadFunc -= ReadCard; | ||||
@@ -72,35 +77,46 @@ namespace HKCardOUT.ViewModels | |||||
HandyControl.Controls.Growl.InfoGlobal("串口打开失败"); | HandyControl.Controls.Growl.InfoGlobal("串口打开失败"); | ||||
} | } | ||||
//开启循环监听数据 | |||||
ti.Interval = 500; | |||||
ti.Elapsed += Ti_Elapsed; | |||||
ti.Start(); | |||||
thread1 = new(new ThreadStart(GetData)) | |||||
{ | |||||
IsBackground = true | |||||
}; | |||||
thread1.Start(); | |||||
} | } | ||||
private void Ti_Elapsed(object sender, System.Timers.ElapsedEventArgs e) | |||||
/// <summary> | |||||
/// 读取信息 | |||||
/// </summary> | |||||
public void GetData() | |||||
{ | { | ||||
DataBus.StoreInfo.Devices.ForEach(item => | |||||
//开启循环监听数据 | |||||
timer1.Interval = 500; | |||||
timer1.Elapsed += (o, a) => | |||||
{ | { | ||||
if (!UHF_RS485_Helper.GetInstance().GetSerialPortState()) | if (!UHF_RS485_Helper.GetInstance().GetSerialPortState()) | ||||
{ | { | ||||
HandyControl.Controls.Growl.InfoGlobal("串口打开失败"); | HandyControl.Controls.Growl.InfoGlobal("串口打开失败"); | ||||
ti.Stop(); | |||||
timer1.Stop(); | |||||
return; | return; | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
var res = UHF_RS485_Helper.GetInstance().ReadCard(item.Address.AsInt()).Result; | |||||
if (res != null) | |||||
DataBus.StoreInfo.Devices.ForEach(item => | |||||
{ | |||||
//var stopwatch = Stopwatch.StartNew(); | |||||
//stopwatch.Restart(); | |||||
var res = UHF_RS485_Helper.GetInstance().ReadCard(item.Address.AsInt()); | |||||
if (res != null) | |||||
{ | { | ||||
if (!res.ResData.IsMatch(new Regex("0{20}"))) | if (!res.ResData.IsMatch(new Regex("0{20}"))) | ||||
ReadFunc?.Invoke(res); | |||||
ReadFunc?.Invoke(res); | |||||
} | } | ||||
//Debug.WriteLine("打印时间:"+ item.Address.AsInt() + "_"+stopwatch.ElapsedMilliseconds); | |||||
}); | |||||
} | } | ||||
}); | |||||
}; | |||||
timer1.Start(); | |||||
} | } | ||||
protected override void OnViewLoaded() | protected override void OnViewLoaded() | ||||
{ | { | ||||
//广告初始化 | //广告初始化 | ||||
@@ -67,12 +67,12 @@ | |||||
ElementStyle="{StaticResource CenterAlignmentStyle}" | ElementStyle="{StaticResource CenterAlignmentStyle}" | ||||
Header="卡号" | Header="卡号" | ||||
HeaderStyle="{StaticResource SaleLogHeader}" /> | HeaderStyle="{StaticResource SaleLogHeader}" /> | ||||
<DataGridTextColumn | |||||
<!--<DataGridTextColumn | |||||
Width="200" | Width="200" | ||||
Binding="{Binding Money}" | Binding="{Binding Money}" | ||||
ElementStyle="{StaticResource CenterAlignmentStyle}" | ElementStyle="{StaticResource CenterAlignmentStyle}" | ||||
Header="金额" | Header="金额" | ||||
HeaderStyle="{StaticResource SaleLogHeader}" /> | |||||
HeaderStyle="{StaticResource SaleLogHeader}" />--> | |||||
<DataGridTextColumn | <DataGridTextColumn | ||||
Width="200" | Width="200" | ||||
Binding="{Binding Location}" | Binding="{Binding Location}" | ||||
@@ -56,16 +56,21 @@ namespace UHFHelper | |||||
_serialPort.Dispose(); | _serialPort.Dispose(); | ||||
_serialPort = null; | _serialPort = null; | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 读卡方法,返回读卡器数据 | /// 读卡方法,返回读卡器数据 | ||||
/// </summary> | /// </summary> | ||||
/// <param name="adr">设备读取地址</param> | /// <param name="adr">设备读取地址</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<DKoutput?> ReadCard(int adr) | |||||
public DKoutput? ReadCard(int adr) | |||||
{ | { | ||||
if (_serialPort == null) return null; | |||||
DKoutput dKoutput = new(); | DKoutput dKoutput = new(); | ||||
var readByte = ReadByte(adr); | var readByte = ReadByte(adr); | ||||
var result = await SendMessageAsync(readByte, TimeSpan.FromSeconds(2), 18); | |||||
_serialPort.Write(readByte, 0, readByte.Length); | |||||
var result = SendMessage(readByte, 2000, 18); | |||||
if (result == null) | if (result == null) | ||||
{ | { | ||||
return null; | return null; | ||||
@@ -124,12 +129,10 @@ namespace UHFHelper | |||||
/// <param name="timeout">超时时间</param> | /// <param name="timeout">超时时间</param> | ||||
/// <param name="count">串口回复字节数</param> | /// <param name="count">串口回复字节数</param> | ||||
/// <returns></returns> | /// <returns></returns> | ||||
public byte[]? SendMessage(byte[] msg, TimeSpan timeout, int count) | |||||
public byte[]? SendMessage(byte[] msg, long timeout, int count) | |||||
{ | { | ||||
if (_serialPort == null) return null; | if (_serialPort == null) return null; | ||||
var stopwatch = Stopwatch.StartNew(); | var stopwatch = Stopwatch.StartNew(); | ||||
var originalWriteTimeout = _serialPort.WriteTimeout; | |||||
var originalReadTimeout = _serialPort.ReadTimeout; | |||||
try | try | ||||
{ | { | ||||
_serialPort.DiscardInBuffer(); | _serialPort.DiscardInBuffer(); | ||||
@@ -139,18 +142,20 @@ namespace UHFHelper | |||||
int offset = 0; | int offset = 0; | ||||
while (tmpCount > 0) | while (tmpCount > 0) | ||||
{ | { | ||||
var readCount = _serialPort.Read(buffer, offset, tmpCount); | |||||
if (readCount==6) | |||||
if (stopwatch.ElapsedMilliseconds >= timeout) | |||||
{ | { | ||||
tmpCount = 0; | |||||
continue; | |||||
return null; | |||||
} | } | ||||
offset += readCount; | |||||
tmpCount -= readCount; | |||||
if (stopwatch.ElapsedMilliseconds>=2000) | |||||
int res = _serialPort.BytesToRead; | |||||
if (res > 0) | |||||
{ | { | ||||
return null; | |||||
var readCount = _serialPort.Read(buffer, offset, tmpCount); | |||||
if (buffer.Skip(0).Take(1).ToArray().ByteArrayToHexString() == "05") | |||||
{ | |||||
return null; | |||||
} | |||||
offset += readCount; | |||||
tmpCount -= readCount; | |||||
} | } | ||||
} | } | ||||
return buffer; | return buffer; | ||||
@@ -158,46 +163,87 @@ namespace UHFHelper | |||||
{ | { | ||||
return null; | return null; | ||||
} | } | ||||
finally | |||||
{ | |||||
_serialPort.ReadTimeout = originalReadTimeout; | |||||
_serialPort.WriteTimeout = originalWriteTimeout; | |||||
} | |||||
} | } | ||||
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) | |||||
/// <summary> | |||||
/// 发送数据 | |||||
/// </summary> | |||||
public void SendMessage(int adr) | |||||
{ | { | ||||
throw new NotImplementedException(); | |||||
var readByte = ReadByte(adr); | |||||
if (_serialPort == null) return; | |||||
_serialPort.Write(readByte, 0, readByte.Length); | |||||
} | } | ||||
/// <summary> | /// <summary> | ||||
/// 发送数据 | |||||
/// 读取数据 | |||||
/// </summary> | /// </summary> | ||||
/// <param name="msg">数据</param> | |||||
/// <param name="timeout">超时时间</param> | |||||
/// <param name="count">串口回复字节数</param> | |||||
/// <returns></returns> | /// <returns></returns> | ||||
public async Task<byte[]?> SendMessageAsync(byte[] msg, TimeSpan timeout, int count) | |||||
public byte[]? GetMessage(int count,long timeout) | |||||
{ | { | ||||
var sendTask = Task.Run(() => SendMessage(msg, timeout, count)); | |||||
if (_serialPort == null) return null; | |||||
var stopwatch = Stopwatch.StartNew(); | |||||
try | try | ||||
{ | { | ||||
await Task.WhenAny(sendTask, Task.Delay(timeout)); | |||||
_serialPort.DiscardInBuffer(); | |||||
var tmpCount = count; | |||||
byte[] buffer = new byte[tmpCount]; | |||||
int offset = 0; | |||||
while (tmpCount > 0) | |||||
{ | |||||
var readCount = _serialPort.Read(buffer, offset, tmpCount); | |||||
if (readCount == 6) | |||||
{ | |||||
tmpCount = 0; | |||||
continue; | |||||
} | |||||
offset += readCount; | |||||
tmpCount -= readCount; | |||||
if (stopwatch.ElapsedMilliseconds >= timeout) | |||||
{ | |||||
return null; | |||||
} | |||||
} | |||||
return buffer; | |||||
} | } | ||||
catch (TaskCanceledException) | |||||
catch (Exception ex) | |||||
{ | { | ||||
return null; | return null; | ||||
} | } | ||||
return await sendTask; | |||||
} | } | ||||
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
///// <summary> | |||||
///// 发送数据 | |||||
///// </summary> | |||||
///// <param name="msg">数据</param> | |||||
///// <param name="timeout">超时时间</param> | |||||
///// <param name="count">串口回复字节数</param> | |||||
///// <returns></returns> | |||||
//public async Task<byte[]?> SendMessageAsync(byte[] msg, TimeSpan timeout, int count) | |||||
//{ | |||||
// var sendTask = Task.Run(() => SendMessage(msg, timeout, count)); | |||||
// //try | |||||
// //{ | |||||
// // await Task.WhenAny(sendTask, Task.Delay(timeout)); | |||||
// //} | |||||
// //catch (TaskCanceledException) | |||||
// //{ | |||||
// // return null; | |||||
// //} | |||||
// return await sendTask; | |||||
//} | |||||
/// <summary> | /// <summary> | ||||
/// 发出蜂鸣声音3次,代表扣款成功! | /// 发出蜂鸣声音3次,代表扣款成功! | ||||
/// </summary> | /// </summary> | ||||
public async void OpenBeep(int addr) | |||||
public void OpenBeep(int addr) | |||||
{ | { | ||||
byte[] sendData = new byte[]{ 0x07, (byte)addr, 0x33, 0x08, 0x02, 0x03, 0x33,0xB1 }; | byte[] sendData = new byte[]{ 0x07, (byte)addr, 0x33, 0x08, 0x02, 0x03, 0x33,0xB1 }; | ||||
await SendMessageAsync(sendData, TimeSpan.FromSeconds(1), 6); | |||||
} | } | ||||
} | } | ||||
@@ -66,7 +66,7 @@ namespace test | |||||
// ³õʼ»¯ | // ³õʼ»¯ | ||||
UHF_RS485_Helper.GetInstance().Open(new SerialParam | UHF_RS485_Helper.GetInstance().Open(new SerialParam | ||||
{ | { | ||||
PortName = "COM5", | |||||
PortName = "COM8", | |||||
BaudRate = 57600, | BaudRate = 57600, | ||||
DataBits = 8 | DataBits = 8 | ||||
}); | }); | ||||
@@ -76,11 +76,11 @@ namespace test | |||||
} | } | ||||
} | } | ||||
private async void button6_Click(object sender, EventArgs e) | |||||
private void button6_Click(object sender, EventArgs e) | |||||
{ | { | ||||
if (UHF_RS485_Helper.GetInstance().GetSerialPortState()) | if (UHF_RS485_Helper.GetInstance().GetSerialPortState()) | ||||
{ | { | ||||
var oldss = await UHF_RS485_Helper.GetInstance().ReadCard(01); | |||||
var oldss = UHF_RS485_Helper.GetInstance().ReadCard(01); | |||||
var sss = oldss?.ResData; | var sss = oldss?.ResData; | ||||
textBox4.Text = sss; | textBox4.Text = sss; | ||||
label2.Text = sss; | label2.Text = sss; | ||||
@@ -104,7 +104,7 @@ namespace test | |||||
{ | { | ||||
foreach (var item in add) | foreach (var item in add) | ||||
{ | { | ||||
var oldss = UHF_RS485_Helper.GetInstance().ReadCard(item).Result; | |||||
var oldss = UHF_RS485_Helper.GetInstance().ReadCard(item); | |||||
if (oldss != null) | if (oldss != null) | ||||
{ | { | ||||
//lvi.SubItems.Add(oldss.ResData ?? "ÎÞ"); | //lvi.SubItems.Add(oldss.ResData ?? "ÎÞ"); | ||||