This commit is contained in:
2025-11-20 15:13:29 +08:00
parent b48e0b79dd
commit 979afae645
28 changed files with 1299 additions and 345 deletions

View File

@@ -115,20 +115,36 @@ namespace FATrace.WPLApp.Services
{
public RawProUserCsvDtoMap()
{
Map(x => x.RawCode).Index(0).Name(nameof(RawProUserCsvDto.RawCode));
Map(x => x.RawName).Index(1).Name(nameof(RawProUserCsvDto.RawName));
Map(x => x.InBagCode).Index(2).Name(nameof(RawProUserCsvDto.InBagCode));
Map(x => x.BoxCode).Index(3).Name(nameof(RawProUserCsvDto.BoxCode));
Map(x => x.Batch).Index(4).Name(nameof(RawProUserCsvDto.Batch));
Map(x => x.ShelfLife).Index(5).Name(nameof(RawProUserCsvDto.ShelfLife));
Map(x => x.Weight).Index(6).Name(nameof(RawProUserCsvDto.Weight));
Map(x => x.DeliveryDate).Index(7).Name(nameof(RawProUserCsvDto.DeliveryDate));
Map(x => x.RemainWeight).Index(8).Name(nameof(RawProUserCsvDto.RemainWeight));
Map(x => x.StockWeight).Index(9).Name(nameof(RawProUserCsvDto.StockWeight));
Map(x => x.WeightTime).Index(10).Name(nameof(RawProUserCsvDto.WeightTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
Map(x => x.OpUser).Index(11).Name(nameof(RawProUserCsvDto.OpUser));
Map(x => x.CheckUser).Index(12).Name(nameof(RawProUserCsvDto.CheckUser));
Map(x => x.OutTime).Index(13).Name(nameof(RawProUserCsvDto.OutTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
//Map(x => x.RawCode).Index(0).Name(nameof(RawProUserCsvDto.RawCode));
//Map(x => x.RawName).Index(1).Name(nameof(RawProUserCsvDto.RawName));
//Map(x => x.InBagCode).Index(2).Name(nameof(RawProUserCsvDto.InBagCode));
//Map(x => x.BoxCode).Index(3).Name(nameof(RawProUserCsvDto.BoxCode));
//Map(x => x.Batch).Index(4).Name(nameof(RawProUserCsvDto.Batch));
//Map(x => x.ShelfLife).Index(5).Name(nameof(RawProUserCsvDto.ShelfLife));
//Map(x => x.Weight).Index(6).Name(nameof(RawProUserCsvDto.Weight));
//Map(x => x.DeliveryDate).Index(7).Name(nameof(RawProUserCsvDto.DeliveryDate));
//Map(x => x.RemainWeight).Index(8).Name(nameof(RawProUserCsvDto.RemainWeight));
//Map(x => x.StockWeight).Index(9).Name(nameof(RawProUserCsvDto.StockWeight));
//Map(x => x.WeightTime).Index(10).Name(nameof(RawProUserCsvDto.WeightTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
//Map(x => x.OpUser).Index(11).Name(nameof(RawProUserCsvDto.OpUser));
//Map(x => x.CheckUser).Index(12).Name(nameof(RawProUserCsvDto.CheckUser));
//Map(x => x.OutTime).Index(13).Name(nameof(RawProUserCsvDto.OutTime)).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
Map(x => x.RawCode).Index(0).Name("原料编号");
Map(x => x.RawName).Index(1).Name("原料名称");
Map(x => x.InBagCode).Index(2).Name("内袋二维码");
Map(x => x.BoxCode).Index(3).Name("外箱二维码");
Map(x => x.Batch).Index(4).Name("批号");
Map(x => x.ShelfLife).Index(5).Name("保质期");
Map(x => x.Weight).Index(6).Name("称重重量(g)");
Map(x => x.DeliveryDate).Index(7).Name("配料日期");
Map(x => x.RemainWeight).Index(8).Name("剩余重量(Kg)");
Map(x => x.StockWeight).Index(9).Name("入库总重量(Kg)");
Map(x => x.WeightTime).Index(10).Name("称重时间").TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
Map(x => x.OpUser).Index(11).Name("操作者");
Map(x => x.CheckUser).Index(12).Name("确认者");
Map(x => x.OutTime).Index(13).Name("出库时间").TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss");
}
}
}

View File

@@ -6,6 +6,8 @@ using Prism.Mvvm;
using System.Collections.Concurrent;
using System.Windows;
using ComConfigHelper = FATrace.Com.ConfigHelper;
using Prism.Events;
using FATrace.WPLApp.Events;
namespace FATrace.WPLApp.Services
{
@@ -15,10 +17,12 @@ namespace FATrace.WPLApp.Services
/// </summary>
public class DataServices : BindableBase, IDisposable
{
public DataServices(ILogService logService, IFreeSql freeSql)
public DataServices(ILogService logService, IFreeSql freeSql, IEventAggregator eventAggregator, SysRunService sysRunService)
{
LogService = logService;
FreeSql = freeSql;
EventAggregator = eventAggregator;
SysRunService = sysRunService;
LineSglModel = new LineSglModel();
LineSglModel.WeightScanCodeHandle += LineSglModel_WeightScanCodeHandle;
@@ -116,7 +120,7 @@ namespace FATrace.WPLApp.Services
var Result = FreeSql.Update<RawProUse>()
.Set(p => p.OutTime, DateTime.Now)
.Where(p => p.BoxCode == BoxScanCode+",A")//外箱二维码就是外箱扫描码
.Where(p => p.BoxCode == BoxScanCode + ",A")//外箱二维码就是外箱扫描码
.ExecuteAffrows();
if (Result > 0)
{
@@ -151,7 +155,7 @@ namespace FATrace.WPLApp.Services
KeyencePlcMcNet.Write("D1250", new Int16[30]);
});
try { EventAggregator?.GetEvent<DashboardRefreshEvent>()?.Publish(true); } catch { }
}
/// <summary>
@@ -227,8 +231,19 @@ namespace FATrace.WPLApp.Services
public ILogService LogService { get; }
public IFreeSql FreeSql { get; }
public IEventAggregator EventAggregator { get; }
public SysRunService SysRunService { get; }
//通信组件
private bool _plcConnected;
public bool PlcConnected
{
get { return _plcConnected; }
private set { _plcConnected = value; RaisePropertyChanged(); }
}
/// <summary>
/// 基恩士通信组件
/// </summary>
private KeyenceMcNet KeyencePlcMcNet { get; set; } = null;
private string _WeightScanCode;
@@ -304,6 +319,7 @@ namespace FATrace.WPLApp.Services
// 读取 PLC 配置(大小写敏感,采用公共 ConfigHelper 并提供默认值)
string PLCIP = ComConfigHelper.GetStringOrDefault("PLCIP", "192.0.1.10");
int Port = ComConfigHelper.GetIntOrDefault("PLCPort", 5000);
try { SysRunService.PlcIp = PLCIP; SysRunService.PlcPort = Port; } catch { }
//PLC通信的连接
KeyencePlcMcNet = new KeyenceMcNet();
@@ -317,16 +333,22 @@ namespace FATrace.WPLApp.Services
if (connect.IsSuccess)//初始连接状态的显示判断
{
Console.WriteLine($"PLC-连接 OK");
PlcConnected = true;
try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { }
}
else
{
MessageBox.Show(connect.Message + Environment.NewLine + "ErrorCode: " + connect.ErrorCode);
PlcConnected = false;
try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "连接失败"; } catch { }
}
}
catch (Exception ex)
{
LogService.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString()));
//insertLogToDBDelegate.BeginInvoke(1, "UpdateUIMethod异常", ex.Message.ToString() + ex.StackTrace.Substring(ex.StackTrace.Length - 40, 40), null, null);
PlcConnected = false;
try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { }
}
}
@@ -446,6 +468,14 @@ namespace FATrace.WPLApp.Services
if (OperateResultBoxScanSgl.IsSuccess)
{
LineSglModel.BoxScanCodeEnable = OperateResultBoxScanSgl.Content;
PlcConnected = true;
try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { }
}
else
{
PlcConnected = false;
try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "连接失败"; } catch { }
}
}
@@ -488,11 +518,16 @@ namespace FATrace.WPLApp.Services
if (!ret.IsSuccess)
{
LogService.Warn($"PLC重连失败: {ret.Message} (Code: {ret.ErrorCode})");
PlcConnected = false;
try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { }
}
else { PlcConnected = true; try { SysRunService.PlcLinkState = true; SysRunService.SysRunState.ComState = 1; SysRunService.SysRunState.ComMsg = "正常"; } catch { } }
}
catch (Exception ex)
{
LogService.Error($"PLC重连异常: {ex.Message}");
PlcConnected = false;
try { SysRunService.PlcLinkState = false; SysRunService.SysRunState.ComState = 2; SysRunService.SysRunState.ComMsg = "异常"; } catch { }
}
}

View File

@@ -23,6 +23,41 @@ namespace FATrace.WPLApp.Services
}
private string _PlcIp;
/// <summary>
/// PLC IP
/// </summary>
public string PlcIp
{
get => _PlcIp;
set { _PlcIp = value; RaisePropertyChanged(); UpdatePlcEndPoint(); }
}
private int _PlcPort;
/// <summary>
/// PLC 端口
/// </summary>
public int PlcPort
{
get => _PlcPort;
set { _PlcPort = value; RaisePropertyChanged(); UpdatePlcEndPoint(); }
}
private string _PlcEndPoint;
/// <summary>
/// PLC 终端显示IP:Port
/// </summary>
public string PlcEndPoint
{
get => _PlcEndPoint;
private set { _PlcEndPoint = value; RaisePropertyChanged(); }
}
private void UpdatePlcEndPoint()
{
PlcEndPoint = string.IsNullOrWhiteSpace(PlcIp) ? string.Empty : $"{PlcIp}:{PlcPort}";
}
private bool _PlcLinkState = false;
/// <summary>
/// PLC连接状态