feat - 前端页面修改

read_card
SoulStar 5 days ago
parent 703e38c2c8
commit 154fd0ebfb

@ -1,131 +0,0 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Config;
using SlnMesnac.Plc;
using SlnMesnac.Plc.Factory;
using System;
using System.Collections.Generic;
using System.Text;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Extensions
* 9bf604b4-3937-476a-adb0-27adc6fbea28
*
* WenJY
* wenjy@mesnac.com
* 2024-04-12 15:25:47
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Extensions
{
/// <summary>
/// PLC工厂
/// </summary>
public static class PlcFactorySetup
{
public static void AddPlcFactorySetup(this IServiceCollection services)
{
services.AddSingleton<List<PlcAbsractFactory>>(x =>
{
AppConfig appConfig = x.GetService<AppConfig>();
List<PlcAbsractFactory> absractFactories = new List<PlcAbsractFactory>();
try
{
do
{
if (!HslCommunication.Authorization.SetAuthorizationCode("1839541f-8fb4-42c4-a13f-733b027fe5af"))
{
Log.Information("HslCommunication激活失败可用时长为24小时");
break;
}
else
{
//Log.Information("HslCommunication激活成功");
}
if (appConfig.plcConfig != null)
{
foreach (var item in appConfig.plcConfig)
{
if (item.isFlage)
{
PlcAbsractFactory _plc = InitPlc(x, item.plcType);
var connectResult = _plc.Connect(item.plcIp, item.plcPort);
if (connectResult)
{
Log.Information($"PLC{item.plcIp}:{item.plcPort};连接成功,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
_plc.ConfigKey = item.plcKey;
if (absractFactories.Contains(_plc))
{
absractFactories.Remove(_plc);
}
absractFactories.Add(_plc);
}
else
{
Log.Information($"PLC{item.plcIp}:{item.plcPort};连接失败,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
}
}
}
}
}while(false);
}
catch (Exception e)
{
Log.Error($"PLC初始化连接异常{e.Message}");
}
return absractFactories;
});
}
private static PlcAbsractFactory InitPlc(IServiceProvider serviceProvider,string plcType)
{
PlcAbsractFactory _plc = null;
var _inovance = serviceProvider.GetRequiredService<InovanceFactory>();
var _melsecBinary = serviceProvider.GetRequiredService<MelsecBinaryFactory>();
var _omronNj = serviceProvider.GetRequiredService<OmronNJFactory>();
var _siemens = serviceProvider.GetRequiredService<SiemensFactory>();
switch (plcType)
{
case "InovancePlc":
_plc = _inovance;
break;
case "MelsecBinaryPlc":
_plc = _melsecBinary;
break;
case "OmronNJPlc":
_plc = _omronNj;
break;
case "SiemensPlc":
_plc = _siemens;
break;
default:
break;
}
return _plc;
}
}
}

@ -1,6 +1,4 @@
using HslCommunication.Enthernet;
using Microsoft.Extensions.DependencyInjection;
using Models;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Common;
using SlnMesnac.Config;
@ -9,7 +7,6 @@ using SlnMesnac.Model.Enum;
using SlnMesnac.Rfid;
using SlnMesnac.Rfid.Enum;
using SlnMesnac.Rfid.Factory;
using SlnMesnac.TouchSocket;
using SqlSugar;
using System;
using System.Collections.Generic;
@ -48,7 +45,6 @@ namespace SlnMesnac.Extensions
// 可扩展更多工厂类型
};
public static TcpServer _TcpServer;
private static StringChange _StringChange;
@ -57,10 +53,8 @@ namespace SlnMesnac.Extensions
{
services.AddSingleton<List<RfidAbsractFactory>>(x =>
{
ISqlSugarClient sqlSugarClient = x.GetRequiredService<ISqlSugarClient>();
AppConfig appConfig = x.GetService<AppConfig>();
_StringChange = x.GetService<StringChange>();
_TcpServer = x.GetService<TcpServer>();
List<DeviceInfoConfig> baseRfidInfos = appConfig.deviceInfoConfig.Where(x => x.Collectid == appConfig.StationCode).ToList();
//sensor_Infos = sqlSugarClient.Queryable<Base_sensor_info>().Where(x => x.Deleteflag == 0).ToList();
@ -131,45 +125,6 @@ namespace SlnMesnac.Extensions
return absractFactories;
});
}
public static void RecvIdentifyData_Instance(string iCombineId, List<TagInfo> tagInfos)
{
try
{
SoftMessagePack pSendMessagePackInfo = new SoftMessagePack();
//iCombineId = "3114";
byte[] dataInfo; string info = "";
byte[] array2 = new byte[0];
if (tagInfos != null && tagInfos.Count > 0)
{
dataInfo = tagInfos[0].EPC;
info = tagInfos[0].EPCstring;
pSendMessagePackInfo.iLen = (ushort)(dataInfo.Length + 4 + 1); //+4为合并编号的长度 +1为长度占的一个字节
pSendMessagePackInfo.pMessage = new byte[pSendMessagePackInfo.iLen];
Array.Copy(dataInfo, 0, pSendMessagePackInfo.pMessage, 5, dataInfo.Length);
pSendMessagePackInfo.pMessage[4] = (byte)dataInfo.Length;
}
else
{
dataInfo = new byte[0];
info = "NoData";
pSendMessagePackInfo.iLen = 0 + 4;
pSendMessagePackInfo.pMessage = new byte[pSendMessagePackInfo.iLen];
}
byte[] u32byte = new byte[4];
pSendMessagePackInfo.iStationId = GetMESCallback(int.Parse(iCombineId));
pSendMessagePackInfo.iMsta = 0XF0 + 1;
pSendMessagePackInfo.iMessageType = (byte)MessageType.AutoReport_Type;
u32byte = BitConverter.GetBytes(uint.Parse(iCombineId));
Array.Copy(u32byte, 0, pSendMessagePackInfo.pMessage, 0, 4); //合并编号
_TcpServer.SendMessage(pSendMessagePackInfo);
}
catch (Exception e)
{
Log.Error($"RecvIdentifyData_Instance异常{e.Message}");
}
}
private static ushort GetMESCallback(int id)
{

@ -12,7 +12,6 @@
<ItemGroup>
<ProjectReference Include="..\SlnMesnac.Config\SlnMesnac.Config.csproj" />
<ProjectReference Include="..\SlnMesnac.Plc\SlnMesnac.Plc.csproj" />
<ProjectReference Include="..\SlnMesnac.Rfid\SlnMesnac.Rfid.csproj" />
<ProjectReference Include="..\SlnMesnac.Serilog\SlnMesnac.Serilog.csproj" />
</ItemGroup>

@ -1,76 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Config;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Extensions
* bbb46406-e99d-4205-8046-ad954cf88315
*
* WenJY
* wenjy@mesnac.com
* 2024-04-12 17:31:43
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Extensions
{
public static class SqlsugarSetup
{
/// <summary>
/// 注册SqlSugar
/// </summary>
/// <param name="services"></param>
public static void AddSqlSugarSetup(this IServiceCollection services)
{
services.AddSingleton<ISqlSugarClient>(x =>
{
var appConfig = x.GetService<AppConfig>();
var connectConfigList = new List<ConnectionConfig>();
if (appConfig.sqlConfig != null)
{
foreach (var item in appConfig.sqlConfig)
{
#region 加载sqlite数据库地址
//if (item.configId == "Local")
//{
// item.connStr = $"Data Source={System.Environment.CurrentDirectory}\\data\\" + item.connStr;
//}
#endregion
var config = new ConnectionConfig()
{
ConfigId = item.configId,
DbType = (DbType)item.dbType,
ConnectionString = item.connStr,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
};
connectConfigList.Add(config);
}
}
SqlSugarScope Db = new SqlSugarScope(connectConfigList, db =>
{
db.Aop.OnLogExecuting = (sql, pars) => { };
});
return Db;
});
}
}
}

@ -38,12 +38,6 @@ namespace SlnMesnac.Ioc
/// <param name="builder">The Autofac container builder.</param>
public static void Configure(ContainerBuilder builder)
{
//注入Repository
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(Repository<>));
RegisterImplementations(builder, Assembly.LoadFrom("SlnMesnac.Repository.dll"));
//注入Plc
RegisterTypeTransient(builder, Assembly.LoadFrom("SlnMesnac.Plc.dll"));
//注入Rfid
RegisterTypeTransient(builder, Assembly.LoadFrom("SlnMesnac.Rfid.dll"));
@ -51,18 +45,11 @@ namespace SlnMesnac.Ioc
//注入通用类
RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Common.dll"));
//注入MQTT
RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Mqtt.dll"));
//注入TouchSocket
builder.RegisterType(typeof(TcpService));
RegisterType(builder, Assembly.LoadFrom("SlnMesnac.TouchSocket.dll"));
//注入业务类
RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Business.dll"));
//注入代码生成
RegisterType(builder, Assembly.LoadFrom("SlnMesnac.Generate.dll"));
}

@ -14,7 +14,6 @@
<ItemGroup>
<ProjectReference Include="..\SlnMesnac.Repository\SlnMesnac.Repository.csproj" />
<ProjectReference Include="..\SlnMesnac.TouchSocket\SlnMesnac.TouchSocket.csproj" />
</ItemGroup>
</Project>

@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 获取当前激活地图信息响应实体类
/// </summary>
public class ResponseActiveMapDataEntity
{
/// <summary>
/// 地图ID
/// </summary>
public string guid { get; set; }
/// <summary>
/// 地图名称
/// </summary>
public string name { get; set; }
}
}

@ -1,125 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 下发任务请求实体类
/// </summary>
public class AGVRequestAddTaskEntity
{
/// <summary>
/// 任务单ID-AGVC的任务ID
/// </summary>
public string businessOrderId { get; set; }
/// <summary>
/// 设备类型
/// </summary>
public string RobotType { get; set; }
/// <summary>
/// 优先级 默认值0
/// </summary>
public int priority { get; set; } = 0;
/// <summary>
/// 机器人ID
/// </summary>
public string roborId { get; set; }
/// <summary>
/// 分组ID 默认空
/// </summary>
public string group { get; set; } = string.Empty;
/// <summary>
/// 任务来源,调度系统名称 默认值Mesnac
/// </summary>
public string taskSource { get; set; } = "Mesnac";
/// <summary>
/// 任务类型 0)none 默认值3
/// </summary>
public int taskType { get; set; } = 3;
/// <summary>
/// 验证任务 0不验证 1需要验证 传0
/// </summary>
public int verifyStatus { get; set; }
/// <summary>
/// 是否允许分⻋执⾏(默认FALSE)
/// </summary>
public int? enableSplitCar { get; set; }
/// <summary>
/// 任务描述
/// </summary>
public string? desc { get; set; }
/// <summary>
/// 装货点
/// </summary>
public List<LoadsEntity> load { get; set; }
/// <summary>
/// 卸货点
/// </summary>
public List<LoadsEntity> unload { get; set; }
}
/// <summary>
/// 装载/卸载点位
/// </summary>
public class LoadsEntity
{
/// <summary>
/// 任务模板 默认空字符串
/// </summary>
public string jobid { get; set; } = string.Empty;
/// <summary>
/// 地图中的点位 默认空字符串
/// </summary>
public string loaction { get; set; } = string.Empty;
/// <summary>
/// 参数 数据跟location一样
/// </summary>
public List<ParamEntity> param { get; set; }
/// <summary>
/// 默认空字符串
/// </summary>
public string robotPort { get; set; } = string.Empty;
}
/// <summary>
/// 不知道是啥 paramvalue点位跟load一样
/// </summary>
public class ParamEntity
{
/// <summary>
/// 参数名称 默认空字符串
/// </summary>
public string paramname { get; set; } = string.Empty;
/// <summary>
/// 参数值 默认空字符串
/// </summary>
public string paramvalue { get; set; } = string.Empty;
}
/// <summary>
/// 下发任务成功响应数据
/// </summary>
public class ResponseAddTaskDataEntity
{
/// <summary>
/// AGV任务ID
/// </summary>
public string guid { get; set; }
}
}

@ -1,45 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 获取当前地图所有位置点请求实体类get方法
/// </summary>
[Obsolete]
public class AGVRequestMapPositionEntity
{
/// <summary>
/// 地图ID
/// </summary>
public string mapId { get; set; }
}
/// <summary>
/// 当前地图所有位置点响应数据实体类
/// </summary>
public class ResponseMapPositionDataEntity
{
/// <summary>
/// 点位名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 所属地图ID
/// </summary>
public string mapId { get; set; }
/// <summary>
/// 位置点类型 0普通 1⾼精度 2充电桩 3闲置点
/// </summary>
public int type { get; set; }
/// <summary>
/// 点位ID
/// </summary>
public string guid { get; set; }
}
}

@ -1,37 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 取消/终止任务请求实体类
/// </summary>
public class AGVRequestOperationalTaskEntity
{
/// <summary>
/// 任务ID
/// </summary>
public string taskid { get; set; }
/// <summary>
/// 状态0终止 4取消
/// </summary>
public int state { get; set; }
/// <summary>
/// 操作源
/// </summary>
public string operatingSource { get; set; }
/// <summary>
/// 操作用户
/// </summary>
public string operatingUser { get; set; }
/// <summary>
/// 操作说明
/// </summary>
public string remark { get; set; }
}
}

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// AGV返回值 根类型 实体类
/// </summary>
/// <typeparam name="T"></typeparam>
public class AGVResponseEntity<T> where T : class
{
/// <summary>
/// 代码
/// </summary>
public int code { get; set; }
/// <summary>
/// 数据体
/// </summary>
public T? Data { get; set; }
/// <summary>
/// 信息
/// </summary>
public string message { get; set; }
/// <summary>
/// 计数
/// </summary>
public int? count { get; set; }
}
}

@ -1,127 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 获取车辆所有信息响应实体类
/// </summary>
public class ResponseRobotAtrributeDataEntity
{
/// <summary>
/// 机器人ID
/// </summary>
public string Guid { get; set; }
/// <summary>
/// 机器人名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 运动状态
/// 0暂⽆信息 1待机 2执⾏任务 3充电中 4暂停 5急停 6异常 7建图中 8等待 9调度控制
/// ?(文档空缺)任务暂停 51同步 52脱机
/// </summary>
public int AgvMoveStatus { get; set; }
/// <summary>
/// 任务模板ID
/// </summary>
public string jobId { get; set; }
/// <summary>
/// 子任务ID
/// </summary>
public string orderId { get; set; }
/// <summary>
/// 任务ID
/// </summary>
public string TaskID { get; set; }
/// <summary>
/// 当前执行动作
/// </summary>
public CurrentActionEntity currentAction { get; set; }
/// <summary>
/// 错误
/// </summary>
public List<AGVErrorEntity> error { get; set; }
}
/// <summary>
/// 车辆当前执行动作实体类
/// </summary>
public class CurrentActionEntity
{
/// <summary>
/// 动作ID
/// </summary>
public string guid { get; set; }
/// <summary>
/// 任务类型
/// 1移动 2播放声⾳ 3亮灯带 4停留 5检查位置状态 6占地⾯积 7切换地图 8移动⾄预备位置 9停靠
/// 10相对移动 11等待 12if else 13设置plc 14:等待plc 15停⽌⾳效 16停⽌灯带 17:暂停 18loop
/// 23while 29任务模板
/// </summary>
public string actionType { get; set; }
/// <summary>
/// 参数列表
/// </summary>
public List<AGVCurrentActionParamesEntity> Parames { get; set; }
}
/// <summary>
/// 车辆动作参数实体类
/// </summary>
public class AGVCurrentActionParamesEntity
{
/// <summary>
/// 动作参数guid
/// </summary>
public string guid { get; set; }
/// <summary>
/// 参数名称
/// </summary>
public string paramName { get; set; }
/// <summary>
/// 动作类型
/// </summary>
public int type { get; set; }
/// <summary>
/// 参数值
/// </summary>
public string value { get; set; }
}
/// <summary>
/// 车辆错误信息实体类
/// </summary>
public class AGVErrorEntity
{
/// <summary>
/// 错误码
/// </summary>
public int errorCode { get; set; }
/// <summary>
/// 错误模块
/// </summary>
public int errorModule { get; set; }
/// <summary>
/// 错误消息
/// </summary>
public string errorMsg { get; set; }
}
}

@ -1,35 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
public class AGVSingalEntity
{
/// <summary>
/// AGV编号
/// </summary>
public string AGVNo { get; set; }
/// <summary>
/// AGV类型
/// </summary>
public string AGVType { get; set; }
/// <summary>
/// 目的地编号
/// </summary>
public string DestinationNo { get; set; }
/// <summary>
/// 任务编号
/// </summary>
public string TaskNo { get; set; }
/// <summary>
/// 信号发送时间
/// </summary>
public string SignalSendTime { get; set; }
}
}

@ -1,43 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Model.AirportApiEntity
{
/// <summary>
/// 查询任务状态请求实体类
/// </summary>
public class AGVRequestTaskStateDetailEntity
{
/// <summary>
/// 任务ID
/// </summary>
public string taskId { get; set; }
}
/// <summary>
/// 任务状态响应数据
/// </summary>
public class ResponseTaskStateDetailDataEntity
{
/// <summary>
/// 任务ID
/// </summary>
public string taskId { get; set; }
/// <summary>
/// 状态 0已终⽌ 1待执⾏ 2正在执⾏ 3已完成 4已取消 5已暂停 6匹配中 7: 核验中
/// </summary>
public int state { get; set; }
/// <summary>
/// 车辆ID
/// </summary>
public string robotId { get; set; }
/// <summary>
/// 车辆名称
/// </summary>
public string robotName { get; set; }
}
}

@ -6,6 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.134" />
<PackageReference Include="System.Text.Json" Version="10.0.5" />
</ItemGroup>

@ -1,102 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Models
{
/// <summary>
///
///</summary>
[SugarTable("base_device_info")]
public class Base_device_info
{
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deviceid" ,IsPrimaryKey = true) ]
public string Deviceid { get; set; } = null!;
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="name" ) ]
public string? Name { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="connectstr" ) ]
public string? Connectstr { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="connectmode" ) ]
public decimal? Connectmode { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="devicetype" ) ]
public string? Devicetype { get; set; }
/// <summary>
/// 备 注:所属汇集软件ID
/// 默认值:
///</summary>
[SugarColumn(ColumnName="collectid" ) ]
public string? Collectid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="addr" ) ]
public string? Addr { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="mapid" ) ]
public string? Mapid { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="recordtime" ) ]
public DateTime? Recordtime { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deleteflag" ) ]
public int? Deleteflag { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="recordperson" ) ]
public int? Recordperson { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="objid" ,IsIdentity = true) ]
public int Objid { get; set; }
}
}

@ -1,46 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
namespace Models
{
/// <summary>
///
///</summary>
[SugarTable("base_device_state")]
public class Base_device_state
{
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="Id" ,IsPrimaryKey = true,IsIdentity = true) ]
public int Id { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deviceId" ) ]
public int DeviceId { get; set; }
/// <summary>
/// 备 注:设备连接状态 0为未连接 1为连接
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deviceState" ) ]
public int? DeviceState { get; set; }
/// <summary>
/// 备 注:
/// 默认值:
///</summary>
[SugarColumn(ColumnName="deviceTime" ) ]
public DateTime? DeviceTime { get; set; }
}
}

@ -1,10 +0,0 @@
namespace SlnMesnac.Model.domain
{
public class RFIDDeviceInfo
{
public string IPAddress { get; set; }
public string EQUID { get; set; }
public string position { get; set; }
public string ApiPort { get; set; }
}
}

@ -1,6 +1,7 @@
using System;
using System.Linq;
using System.Text;
using SQLite;
using SqlSugar;
namespace SlnMesnac.Repository
@ -8,91 +9,82 @@ namespace SlnMesnac.Repository
///<summary>
///
///</summary>
[SugarTable("real_readdata")]
public partial class real_readdata
{
public real_readdata(){
public real_readdata()
{
}
/// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(IsPrimaryKey=true,IsIdentity=true,ColumnName="objid")]
public int objid {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="orderno")]
public string orderno {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="lineno")]
public string lineno {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="producttype")]
public string producttype {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="rfidepc")]
public string rfidepc {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="rfidascii")]
public string rfidascii {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="readtime")]
public DateTime? readtime {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="writetime")]
public DateTime? writetime {get;set;}
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="writestatus")]
public string writestatus {get;set;}
}
/// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[PrimaryKey]
public int objid { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string orderno { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string lineno { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string producttype { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string rfidepc { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string rfidascii { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public DateTime? readtime { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public DateTime? writetime { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
public string writestatus { get; set; }
/// <summary>
/// Desc:
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName = "serialno")]
public string serialno { get; set; }
}
}

@ -1,42 +0,0 @@
using SqlSugar;
using System;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Repository
* 496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* WenJY
* wenjy@mesnac.com
* 2024-03-27 21:58:35
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository
{
public class Repository<T> : SimpleClient<T> where T : class, new()
{
public ITenant itenant = null;//多租户事务、GetConnection、IsAnyConnection等功能
public Repository(ISqlSugarClient db)
{
itenant = db.AsTenant();//用来处理事务
base.Context = db.AsTenant().GetConnectionScopeWithAttr<T>();//获取子Db
//如果不想通过注入多个仓储
//用到ChangeRepository或者Db.GetMyRepository需要看标题4写法
}
}
}

@ -26,7 +26,7 @@ namespace Sln.Iot.Repository
// }
//}
private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "rfid_db.sqlite");
private readonly string _databasePath = Path.Combine(Environment.CurrentDirectory, "rfiddb.db");
private readonly SQLiteConnection _connection; // SQLite连接对象
/// <summary>
@ -69,16 +69,6 @@ namespace Sln.Iot.Repository
return _connection.Delete<T>(id);
}
/// <summary>
/// 根据托盘码批量删除记录
/// </summary>
/// <param name="trayCode"></param>
/// <returns></returns>
public int DeleteTrayRange(string trayCode)
{
return _connection.Execute($"DELETE FROM {typeof(T).Name} WHERE TrayCode = '{trayCode}'");
}
/// <summary>
/// sql直接执行
/// </summary>

@ -5,6 +5,12 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="service\Impl\**" />
<EmbeddedResource Remove="service\Impl\**" />
<None Remove="service\Impl\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
@ -18,8 +24,4 @@
<ProjectReference Include="..\SlnMesnac.Model\SlnMesnac.Model.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="service\Impl\" />
</ItemGroup>
</Project>

@ -0,0 +1,22 @@
using Sln.Iot.Repository;
using System;
using System.Collections.Generic;
using System.Text;
namespace SlnMesnac.Repository.service
{
public class RealReadDataService
{
private static readonly Lazy<RealReadDataService> lazy = new Lazy<RealReadDataService>(() => new RealReadDataService());
public static RealReadDataService Instance
{
get
{
return lazy.Value;
}
}
public SQLiteHelper<real_readdata> Helper = new SQLiteHelper<real_readdata>();
}
}

@ -1,359 +0,0 @@
using Microsoft.Extensions.Logging;
using SlnMesnac.Repository.service.@base;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Repository.service.Impl
* 70cc8c3a-2c3b-4034-894b-f1a4f04aa21e
*
* WenJY
* wenjy@mesnac.com
* 2024-04-08 09:49:07
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository.service.@base
{
public class BaseServiceImpl<T> : IBaseService<T> where T : class, new()
{
public readonly Repository<T> _rep;
public BaseServiceImpl(Repository<T> rep)
{
_rep = rep;
}
/// <summary>
/// 添加实体信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="InvalidOperationException"></exception>
public bool Insert(T model)
{
if (model == null)
{
throw new ArgumentNullException($"添加实体信息异常:实体参数为空");
}
try
{
return _rep.Insert(model);
}
catch (Exception ex)
{
throw new InvalidOperationException($"添加实体信息异常:{ex.Message}");
}
}
/// <summary>
/// 批量添加实体集合
/// </summary>
/// <param name="lisT"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="InvalidOperationException"></exception>
public bool Insert(List<T> lisT)
{
if (lisT == null)
{
throw new ArgumentNullException($"批量添加实体集合异常:实体集合参数为空");
}
try
{
_rep.AsTenant().BeginTran();
var info = _rep.InsertRange(lisT);
_rep.AsTenant().CommitTran();
return true;
}
catch (Exception ex)
{
_rep.AsTenant().RollbackTran();
throw new InvalidOperationException($"批量添加实体集合异常:{ex.Message}");
}
}
/// <summary>
/// 根据id 删除信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool DeleteById(object id)
{
if (id == null)
{
throw new ArgumentNullException($"根据id删除信息异常:Id参数为空");
}
try
{
return _rep.DeleteById(id);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据id删除信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据实体删除信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="InvalidOperationException"></exception>
public bool Delete(T model)
{
if (model == null)
{
throw new ArgumentNullException($"根据实体删除信息异常:实体参数为空");
}
try
{
return _rep.DeleteById(model);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据实体删除信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据实体集合批量删除信息
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool Deletes(List<T> entitys)
{
if (entitys == null)
{
throw new ArgumentNullException($"根据实体集合批量删除信息异常:实体集合参数为空");
}
try
{
return _rep.Delete(entitys);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据实体集合批量删除信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据实体更新信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool Update(T model)
{
if (model == null)
{
throw new ArgumentNullException($"根据实体更新信息异常:实体参数为空");
}
try
{
return _rep.Update(model);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据实体更新信息异常:{ex.Message}");
}
}
/// <summary>
/// 批量更新实体集合信息
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public bool Update(List<T> entitys)
{
if (entitys == null)
{
throw new ArgumentNullException($"批量更新实体集合信息异常:实体集合参数为空");
}
try
{
return _rep.UpdateRange(entitys);
}
catch (Exception ex)
{
throw new InvalidOperationException($"批量更新实体集合信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据Where条件更新实体信息
/// </summary>
/// <param name="entity"></param>
/// <param name="strWhere"></param>
/// <returns></returns>
public bool Update(T entity, string strWhere)
{
if (entity == null)
{
throw new ArgumentNullException($"根据Where条件更新实体信息异常:实体参数为空");
}
if (string.IsNullOrEmpty(strWhere))
{
throw new ArgumentNullException($"根据Where条件更新实体信息异常:Where参数为空");
}
try
{
return _rep.AsUpdateable(entity).Where(strWhere).ExecuteCommandHasChange();
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据Where条件更新实体信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据实体更新指定列
/// </summary>
/// <param name="entity"></param>
/// <param name="lstColumns"></param>
/// <param name="lstIgnoreColumns"></param>
/// <param name="strWhere"></param>
/// <returns></returns>
public bool Update(T entity, List<string> lstColumns = null, List<string> lstIgnoreColumns = null, string strWhere = "")
{
try
{
IUpdateable<T> up = _rep.AsUpdateable(entity);
if (lstIgnoreColumns != null && lstIgnoreColumns.Count > 0)
{
up = up.IgnoreColumns(lstIgnoreColumns.ToArray());
}
if (lstColumns != null && lstColumns.Count > 0)
{
up = up.UpdateColumns(lstColumns.ToArray());
}
if (!string.IsNullOrEmpty(strWhere))
{
up = up.Where(strWhere);
}
return up.ExecuteCommandHasChange();
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据实体更新指定列异常:{ex.Message}");
}
}
/// <summary>
/// 查询所有信息
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<T> Query()
{
try
{
return _rep.GetList();
}
catch (Exception ex)
{
throw new InvalidOperationException($"查询所有信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据Id查询实体
/// </summary>
/// <param name="objId"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public T Query(object objId)
{
if (objId == null)
{
throw new ArgumentNullException($"根据Id查询实体信息异常:Id参数为空");
}
try
{
return _rep.GetById(objId);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据Id查询实体信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据表达式查询
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<T> Query(Expression<Func<T, bool>> whereExpression)
{
if (whereExpression == null)
{
throw new ArgumentNullException($"根据表达式查询实体信息异常:表达式参数为空");
}
try
{
return _rep.GetList(whereExpression);
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据表达式查询实体信息异常:{ex.Message}");
}
}
/// <summary>
/// 根据表达式排序查询
/// </summary>
/// <param name="whereExpression"></param>
/// <param name="orderByExpression"></param>
/// <param name="isAsc"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public List<T> Query(Expression<Func<T, bool>> whereExpression, Expression<Func<T, object>> orderByExpression, bool isAsc = true)
{
if (whereExpression == null)
{
throw new ArgumentNullException($"根据表达式排序查询信息异常:条件表达式参数为空");
}
if (orderByExpression == null)
{
throw new ArgumentNullException($"根据表达式排序查询信息异常:排序表达式参数为空");
}
try
{
return _rep.AsQueryable().OrderByIF(orderByExpression != null, orderByExpression, isAsc ? OrderByType.Asc : OrderByType.Desc).WhereIF(whereExpression != null, whereExpression).ToList();
}
catch (Exception ex)
{
throw new InvalidOperationException($"根据表达式排序查询信息异常:{ex.Message}");
}
}
}
}

@ -1,106 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
namespace SlnMesnac.Repository.service.@base
{
public interface IBaseService<T> where T : class
{
/// <summary>
/// 添加实体信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Insert(T model);
/// <summary>
/// 批量添加实体集合
/// </summary>
/// <param name="lisT"></param>
/// <returns></returns>
bool Insert(List<T> lisT);
/// <summary>
/// 根据id 删除信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
bool DeleteById(object id);
/// <summary>
/// 根据实体删除信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Delete(T model);
/// <summary>
/// 根据实体集合批量删除信息
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
bool Deletes(List<T> entitys);
/// <summary>
/// 根据实体更新信息
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
bool Update(T model);
/// <summary>
/// 批量更新实体集合信息
/// </summary>
/// <param name="entitys"></param>
/// <returns></returns>
bool Update(List<T> entitys);
/// <summary>
/// 根据Where条件更新实体信息
/// </summary>
/// <param name="entity"></param>
/// <param name="strWhere"></param>
/// <returns></returns>
bool Update(T entity, string strWhere);
/// <summary>
/// 根据实体更新指定列
/// </summary>
/// <param name="entity"></param>
/// <param name="lstColumns"></param>
/// <param name="lstIgnoreColumns"></param>
/// <param name="strWhere"></param>
/// <returns></returns>
bool Update(T entity, List<string> lstColumns = null, List<string> lstIgnoreColumns = null, string strWhere = "");
/// <summary>
/// 查询所有信息
/// </summary>
/// <returns></returns>
List<T> Query();
/// <summary>
/// 根据Id查询实体
/// </summary>
/// <param name="objId"></param>
/// <returns></returns>
T Query(object objId);
/// <summary>
/// 根据表达式查询
/// </summary>
/// <param name="whereExpression"></param>
/// <returns></returns>
List<T> Query(Expression<Func<T, bool>> whereExpression);
/// <summary>
/// 根据表达式排序查询
/// </summary>
/// <param name="whereExpression">查询条件</param>
/// <param name="orderByExpression">排序条件</param>
/// <param name="isAsc">是否正序</param>
/// <returns></returns>
List<T> Query(Expression<Func<T, bool>> whereExpression, Expression<Func<T, object>> orderByExpression, bool isAsc = true);
}
}

@ -6,7 +6,6 @@ using SlnMesnac.Rfid.Enum;
using SlnMesnac.Rfid.NewRFIDConnect;
using SlnMesnac.Rfid.NewRFIDConnect.entity;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using System;
using System.Collections;
using System.Collections.Generic;

@ -1,17 +1,14 @@
using Dm.filter.log;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Models;
using Serilog;
using SlnMesnac.Common;
using SlnMesnac.Model.dto;
using SlnMesnac.Repository.service;
using SlnMesnac.Rfid.Dto;
using SlnMesnac.Rfid.Enum;
using SlnMesnac.Rfid.NewRFIDConnect;
using SlnMesnac.Rfid.NewRFIDConnect.entity;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SqlSugar;
using System;
using System.Collections;

@ -16,7 +16,7 @@
<ProjectReference Include="..\SlnMesnac.Common\SlnMesnac.Common.csproj" />
<ProjectReference Include="..\SlnMesnac.Model\SlnMesnac.Model.csproj" />
<ProjectReference Include="..\SlnMesnac.Repository\SlnMesnac.Repository.csproj" />
<ProjectReference Include="..\SlnMesnac.TouchSocket\SlnMesnac.TouchSocket.csproj" />
<ProjectReference Include="..\SlnMesnac.Serilog\SlnMesnac.Serilog.csproj" />
</ItemGroup>
</Project>

@ -1,52 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.AspNetCore.Builder;
using TouchSocket.Sockets;
using TouchSocket.WebApi;
using SlnMesnac.Config;
using System.Threading.Tasks;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.TouchSocket
* 496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* WenJY
* wenjy@mesnac.com
* 2024-03-27 21:58:35
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.TouchSocket
{
/// <summary>
/// 注册服务
/// </summary>
public static class TouchSocketSetup
{
public static async Task UseTouchSocketExtensions(this IServiceProvider service)
{
var _server = service.GetService<TcpServer>();
_server.Init(5656);
var _appSetting = service.GetService<AppConfig>();
//_server.Init(6001);
//await _httpclient.CreateWebApiClientAsync("127.0.0.1:9881");
//_httpclient.CreateWebApiClient("127.0.0.1:9880");
}
}
}

@ -7,7 +7,6 @@ using SlnMesnac.Config;
using SlnMesnac.Extensions;
using SlnMesnac.Rfid;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using System;
@ -88,7 +87,6 @@ namespace SlnMesnac.WPF
// 创建ServiceProvider
ServiceProvider = services.BuildServiceProvider();
ServiceProvider.UseTouchSocketExtensions();
@ -367,12 +365,8 @@ namespace SlnMesnac.WPF
// 加载程序集
Assembly[] assemblies = {
Assembly.LoadFrom("SlnMesnac.Repository.dll"),
Assembly.LoadFrom("SlnMesnac.Plc.dll"),
Assembly.LoadFrom("SlnMesnac.Rfid.dll"),
Assembly.LoadFrom("SlnMesnac.Common.dll"),
Assembly.LoadFrom("SlnMesnac.TouchSocket.dll"),
Assembly.LoadFrom("SlnMesnac.Business.dll"),
Assembly.LoadFrom("SlnMesnac.Generate.dll")
};
// 扫描并注册程序集中的服务
@ -407,8 +401,7 @@ namespace SlnMesnac.WPF
// .AsSelf()
// .WithTransientLifetime());
// 注册ORM
services.AddSqlSugarSetup();
services.AddRfidFactorySetup();
}

@ -5,64 +5,16 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF"
mc:Ignorable="d"
Title="汇集软件" WindowStartupLocation="CenterScreen" WindowState="Maximized" Height="1020" Width="1420" Topmost="False" Loaded="Window_Loaded" Closing="Window_Closing" Icon="/Highway.ico">
<!--<Window.Background>
<ImageBrush ImageSource="/Templates/image/background.jpg" />
</Window.Background>-->
Title="汇集软件" WindowStartupLocation="CenterScreen" WindowState="Normal" Height="768" Width="1024" Topmost="False" Loaded="Window_Loaded" Closing="Window_Closing" Icon="/Highway.ico">
<Border Margin="5" Background="Transparent" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="Gray" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>
</Border.Effect>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*"/>
<RowDefinition Height="0.7*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="Red" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="2,2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<!--<StackPanel Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center">
<TextBlock Text="数据采集控制系统" FontSize="50" Foreground="White" FontWeight="Bold"/>
</StackPanel>-->
</Grid>
</Border>
<Border Grid.Row="0" BorderBrush="Red" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="2,5,2,2">
<ContentControl Content="{Binding UserContent}"/>
</Border>
<Border Grid.Row="1" BorderBrush="#1254AB" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="6,2,6,7">
<Border.Effect>
<DropShadowEffect Color="#1254AB" Direction="270" BlurRadius="10" ShadowDepth="5" Opacity="0.5"/>
</Border.Effect>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Left" Orientation="Horizontal">
<Button Content="首 页" x:Name="Index" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=Index}" Style="{StaticResource BUTTON_AGREE}" Width="150" Height="50" Background="#009999" BorderBrush="#FF36B5C1" Margin="10,0,30,0" FontSize="27"/>
<!--<Button Content="键 盘" Visibility="Hidden" Command="{Binding OpenSystemKeyboardCommand}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="最小化" Visibility="Hidden" x:Name="Minimized" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Minimized}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF9900" Margin="0,0,10,0"/>
<Button Content="退 出" Visibility="Hidden" x:Name="Exit" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Exit}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF0033" BorderBrush="#FF0033" Margin="0,0,10,0"/>-->
<Button Content="订单导入" x:Name="ChangeType" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=ChangeType}" Style="{StaticResource BUTTON_AGREE}" Width="150" Height="50" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,30,0" FontSize="27"/>
<Button Content="数据查询" x:Name="HistorySearch" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=HistorySearch}" Style="{StaticResource BUTTON_AGREE}" Width="150" Height="50" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,30,0" FontSize="27"/>
<Button Content="报警记录" Visibility="Hidden" x:Name="AlarmRecord" Command="{Binding ControlOnClickCommand}" CommandParameter="{Binding Name,ElementName=AlarmRecord}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#FF9900" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
<Button Content="代码生成" Visibility="Hidden" x:Name="Generate" Command="{Binding FormControlCommand}" CommandParameter="{Binding Name,ElementName=Generate}" Style="{StaticResource BUTTON_AGREE}" Width="100" Height="30" Background="#009999" BorderBrush="#FF36B5C1" Margin="0,0,10,0"/>
</StackPanel>
</Grid>
</Border>
</Grid>
<Border Grid.Row="0" BorderBrush="Red" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="2,5,2,2">
<ContentControl Content="{Binding UserContent}"/>
</Border>
</Border>
</Window>

@ -1,8 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using SlnMesnac.Model.AirportApiEntity;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel;
using System;

@ -1,56 +0,0 @@
<UserControl x:Class="SlnMesnac.WPF.Page.Generate.GenerateControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.Generate"
xmlns:local1="clr-namespace:SlnMesnac.WPF.Converter.Generate"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" Background="Transparent">
<Control.Resources>
<local1:RowToIndexConverter x:Key="RowToIndexConverter" />
</Control.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="8*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="Green" BorderThickness="2" CornerRadius="5" Margin="0,0,0,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
<TextBlock Text="数据库连接:" FontSize="20" Foreground="White" VerticalAlignment="Center" Margin="10,0,10,0"/>
<ComboBox Width="200" Height="35" FontSize="18" VerticalAlignment="Center" Name="comboBox1" ItemsSource="{Binding Options}" SelectedItem="{Binding SelectedOption, Mode=TwoWay}" DisplayMemberPath="."/>
<TextBlock Text="表名:" FontSize="20" Foreground="White" VerticalAlignment="Center" Margin="30,0,10,0"/>
<TextBox x:Name="queryParam" Foreground="White" FontSize="18" Width="200" Height="35"/>
<Button Content="查 询" FontSize="16" Style="{StaticResource BUTTON_AGREE}" Width="120" Height="35" Background="#007DFA" BorderBrush="#007DFA" Margin="20,0,10,0" Command="{Binding QuerySearchCommand}" CommandParameter="{Binding Text, ElementName=queryParam}" />
</StackPanel>
</Border>
<Border Grid.Row="1" BorderBrush="Green" BorderThickness="2" CornerRadius="5" Margin="0,0,0,10">
<DataGrid x:Name="datagrid" Grid.Row="0" ItemsSource="{Binding TablesDataGrid}" Background="Transparent"
FontSize="15" ColumnHeaderHeight="35"
RowHeight="31" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Hidden" BorderThickness="0" CanUserAddRows="False" HorizontalAlignment="Center"
Foreground="#FFFFFF" >
<!--resourceStyle 399行修改选中字体颜色-->
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="表名" Width="3*" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding Description}" Header="说明" Width="3*" IsReadOnly="True"/>
<DataGridTemplateColumn Header="操作" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="生成代码" CommandParameter="{Binding Name}" Background="#009999" Foreground="White" Margin="10,0,0,0" Height="25" BorderBrush="#009999" BorderThickness="0" Width="100" Command="{Binding DataContext.CreateCodeCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid }}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</UserControl>

@ -1,30 +0,0 @@
using SlnMesnac.WPF.ViewModel.Generate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Page.Generate
{
/// <summary>
/// GenerateControl.xaml 的交互逻辑
/// </summary>
public partial class GenerateControl : UserControl
{
public GenerateControl()
{
InitializeComponent();
this.DataContext = new GenerateControlViewModel();
}
}
}

@ -1,175 +0,0 @@
<UserControl x:Class="SlnMesnac.WPF.Page.IndexPage.ChangeType"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page.IndexPage"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
d:DesignHeight="900" d:DesignWidth="1620" Background="Transparent">
<UserControl.Resources>
<!--<converters:IsCheckedConverter x:Key="IsCheckedConverter"/>-->
<Style x:Key="CustomDatePicker" TargetType="DatePicker">
<!-- 设置背景颜色 -->
<Setter Property="Background" Value="LightBlue"></Setter>
<!-- 设置边框颜色 -->
<Setter Property="BorderBrush" Value="DarkBlue"></Setter>
<!-- 设置字体样式 -->
<Setter Property="FontSize" Value="14"></Setter>
<!-- 设置前景色(文本颜色) -->
<Setter Property="Foreground" Value="Black"></Setter>
</Style>
<Style x:Key="DataGridTextColumnCenterSytle" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="18"/>
</Style>
<Style TargetType="DataGrid">
<!--网格线颜色-->
<Setter Property="CanUserResizeColumns" Value="false"/>
<Setter Property="Background" Value="#1152AC" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="HorizontalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#4285DE"/>
</Setter.Value>
</Setter>
<Setter Property="VerticalGridLinesBrush">
<Setter.Value>
<SolidColorBrush Color="#1152AC"/>
</Setter.Value>
</Setter>
</Style>
<!--列头标题栏样式-->
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="BorderBrush" Value="#dddddd" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="18"/>
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="White"/>
</Style>
<!--单元格样式-->
<Style TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="BorderBrush" Value="#4285DE" />
<Setter Property="Height" Value="40"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}" >
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#4285DE"/>
<Setter Property="Foreground" Value="#dddddd"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<Border Grid.Row="1" Grid.Column="1" BorderBrush="#0288d1" BorderThickness="2" CornerRadius="5" Background="Transparent" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="#0288d1" BorderThickness="0,0,0,1" CornerRadius="0" Background="#1157b9" Margin="1,1,5,5" >
<TextBlock Text="生产订单获取" FontSize="25" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<Border Grid.Row="1" BorderBrush="Green" BorderThickness="0" CornerRadius="5" Background="Transparent" Margin="1,1,5,5">
<Grid Margin="10,5">
<Grid.RowDefinitions>
<RowDefinition Height="70"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="horizontal" Grid.Row="0" HorizontalAlignment="Left" VerticalAlignment="Center">
<!--<Label Content="产线编号:" FontSize="20" Foreground="Black"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="250" FontSize="20" Foreground="Black" Margin="0 0 30 0" />-->
<!--<Label Content="RFID数量:" FontSize="20" Foreground="Black"/>
<ComboBox ItemsSource="{Binding Items}" Width="200" >
</ComboBox>-->
<Label Content="产线名称:" FontSize="20" Foreground="Black"/>
<ComboBox ItemsSource="{Binding Items}" Width="200" Height="30" FontSize="20" SelectedItem="{Binding QueryIsCheck,Mode=TwoWay}" Margin="10,0,30,0" Foreground="Black">
<!--<ComboBoxItem Content="2#硫化线" Background="White" Foreground="#4285DE"/>
<ComboBoxItem Content="3#硫化线" Foreground="#4285DE"/>
<ComboBoxItem Content="6#硫化线上" Foreground="#4285DE"/>
<ComboBoxItem Content="6#硫化线下" Foreground="#4285DE"/>
<ComboBoxItem Content="7#硫化线" Foreground="#4285DE"/>
<ComboBoxItem Content="" Foreground="#4285DE"/>-->
</ComboBox>
<TextBlock Text="开始时间" Margin="10 0" Foreground="Black" FontSize="20" VerticalAlignment="Center"/>
<DatePicker Style="{StaticResource CustomDatePicker}"
x:Name="BeginTime" FontSize="20"
Width="170" Height="30" Margin="10 0" BorderBrush="Black">
<!--materialDesign:CalendarAssist.IsHeaderVisible="False">-->
<DatePicker.SelectedDate >
<Binding
Path="BeginDate"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
</Binding.ValidationRules>
</Binding>
</DatePicker.SelectedDate>
</DatePicker>
<Button
Content="从MES获取订单信息" Width="200" Height="50" FontSize="20" Command="{Binding GetOrderInfoCommand}" CommandParameter="{Binding Name, ElementName=Search}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}"/>
<Button
Content="暂停盘点" Width="200" Height="50" FontSize="20" Margin="10,0,0,0" Command="{Binding StopReadCommand}" CommandParameter="{Binding Name, ElementName=Search}"
Background="#009999" Style="{StaticResource BUTTON_AGREE}"/>
</StackPanel>
<UniformGrid Grid.Row="1">
<DataGrid x:Name="listDataGrid" Grid.Row="0" ItemsSource="{Binding ChangeTypePanel}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="20"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True"
Foreground="Black" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderNo}" Header="订单编号" Width="0.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>
<DataGridTextColumn Binding="{Binding ProductCode}" Header="物料编号" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<!--<DataGridTextColumn Binding="{Binding ProductName}" Header="物料名称" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTextColumn Binding="{Binding ProductType}" Header="物料类型" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding PlanQty}" Header="计划数量" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding NextProductNo}" Header="带号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="1.5*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="开始生产" Height="40" Width="100" Command="{Binding DataContext.UpdateCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</UniformGrid>
</Grid>
</Border>
</Grid>
</Border>
</UserControl>

@ -1,35 +0,0 @@
using SlnMesnac.Repository;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel.IndexPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SlnMesnac.WPF.Page.IndexPage
{
/// <summary>
/// ChangeType.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class ChangeType : UserControl
{
ChangeTypeViewModel ChangeTypeView;
public ChangeType()
{
InitializeComponent();
ChangeTypeView = new ChangeTypeViewModel();
this.DataContext = ChangeTypeView;
}
}
}

@ -6,7 +6,7 @@
xmlns:local="clr-namespace:SlnMesnac.WPF.ViewModel.IndexPage" xmlns:local1="clr-namespace:SlnMesnac.WPF.Converter.Generate"
mc:Ignorable="d"
d:DesignHeight="500" d:DesignWidth="900">
d:DesignHeight="768" d:DesignWidth="1024">
<UserControl.Resources>
@ -92,7 +92,7 @@
</DataTrigger>
</Style.Triggers>
</Style>
<!-- RFID连接状态样式 -->
<Style x:Key="RFIDCounnectStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="#00C851"/>
@ -129,8 +129,7 @@
<!-- 标题栏 -->
<Border Grid.Row="0"
Background="{StaticResource PrimaryGradientBrush}"
Padding="20,12"
>
Padding="20,12">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
@ -182,563 +181,115 @@ Content="查询" Width="200" Visibility="Hidden" FontSize="20" Command="{Binding
<!-- 主要内容区域 -->
<!--<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="20">-->
<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 系统概览 -->
<!-- 上半部分:订单信息 + RFID实时信息 -->
<TabControl ItemsSource="{Binding Deviceinfo}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<!-- 切换标签时保留Content不销毁重建 -->
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
</Style>
</TabControl.ItemContainerStyle>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding LineName}" Padding="5 2"/>
</DataTemplate>
</TabControl.ItemTemplate>
<!-- 6号线标签页 -->
<TabControl.ContentTemplate>
<DataTemplate>
<Grid Margin="10">
<!-- 网格布局分为左右两列分别放订单信息和RFID信息 -->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 当前生产订单信息面板 -->
<Border Grid.Column="0" BorderThickness="1" BorderBrush="#E0E0E0"
CornerRadius="4" Margin="0,0,5,0">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<!--<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>-->
</Grid.RowDefinitions>
<!-- 面板标题 -->
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock Text="当前生产订单信息" FontWeight="Bold" FontSize="15"/>
</StackPanel>
<!-- 订单编号 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="订单编号:" FontSize="15"/>
<TextBlock Text="{Binding OrderNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产线名称 -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线名称:" FontSize="15"/>
<TextBlock Text="{Binding LineName,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产线编号 -->
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线编号:" FontSize="15"/>
<TextBlock Text="{Binding LineNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产品类型 -->
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产品类型:" FontSize="15"/>
<TextBlock Text="{Binding ProductType,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- RFID总数量 -->
<!--<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="7*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="生产数量" Grid.ColumnSpan="1" FontSize="15"/>
<TextBlock Text="{Binding RfidCount,Mode=TwoWay}" FontSize="15" Grid.Column="1" Grid.ColumnSpan="2"/>
</Grid>-->
<!-- 已写入数量 -->
<!--<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="已写入数量:" FontSize="15"/>
<TextBlock Text="{Binding WriteCount,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>-->
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="下一序列号:" FontSize="15"/>
<TextBlock Text="{Binding SerialNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 产品类型 -->
<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="带号:" FontSize="15"/>
<TextBlock Text="{Binding NextProductNo,Mode=TwoWay}" Grid.Column="1" FontSize="15"/>
</Grid>
<!-- 生产状态 -->
<!--<Grid Grid.Row="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="生产状态:" FontSize="15"/>
<TextBlock Text="{Binding ProductStatus,Mode=TwoWay}" FontSize="15" Style="{StaticResource ProducingTextStyle}" Grid.Column="1"/>
</Grid>-->
</Grid>
</Border>
<!-- 实时RFID读写信息面板 -->
<Border Grid.Column="1" BorderThickness="1" BorderBrush="#E0E0E0"
CornerRadius="4" Margin="5,0,0,0">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<!-- 面板标题 -->
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10" Grid.ColumnSpan="2">
<TextBlock Text="实时RFID读写信息" FontWeight="Bold" FontSize="15"/>
</StackPanel>
<!-- 设备状态 -->
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="设备状态:" FontSize="15"/>
<TextBlock Text="{Binding IsOnline,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- RFID编码 -->
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID编码:" FontSize="15"/>
<TextBlock Text="{Binding RfidASCII,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 原始EPC -->
<Grid Grid.Row="3" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="原始EPC:" FontSize="15"/>
<TextBlock Text="{Binding RfidEPC,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 读取时间 -->
<Grid Grid.Row="4" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="读取时间:" FontSize="15"/>
<TextBlock Text="{Binding ReadTime,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 写入时间 -->
<Grid Grid.Row="5" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入时间:" FontSize="15"/>
<TextBlock Text="{Binding WriteTime,Mode=TwoWay}" FontSize="15" Grid.Column="1"/>
</Grid>
<!-- 写入状态 -->
<Grid Grid.Row="6" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入状态:" FontSize="15"/>
<TextBlock Text="{Binding WriteStatus,Mode=TwoWay}" FontSize="15" Style="{StaticResource SuccessTextStyle}" Grid.Column="1"/>
</Grid>
</Grid>
</Border>
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
<!-- 7号线标签页 -->
<!--<TabItem Header="7号线">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
-->
<!-- 当前生产订单信息面板 -->
<!--
<Border Grid.Column="0" BorderThickness="1" BorderBrush="#E0E0E0"
CornerRadius="4" Margin="0,0,5,0">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
-->
<!-- 面板标题 -->
<!--
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock Text="当前生产订单信息" FontWeight="Bold" FontSize="15"/>
</StackPanel>
-->
<!-- 订单编号 -->
<!--
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="订单编号:" />
<TextBlock Text="S260402000112832604106" Grid.Column="1"/>
</Grid>
-->
<!-- 产线编号 -->
<!--
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产线编号:" />
<TextBlock Text="7号线" Grid.Column="1"/>
</Grid>
-->
<!-- 产品类型 -->
<!--
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="产品类型:" />
<TextBlock Text="整芯带" Grid.Column="1"/>
</Grid>
-->
<!-- RFID总数量 -->
<!--
<Grid Grid.Row="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID总数量:" Grid.ColumnSpan="1" />
<TextBlock Text="20" Grid.Column="1" Grid.ColumnSpan="2"/>
</Grid>
-->
<!-- 已写入数量 -->
<!--
<Grid Grid.Row="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="已写入数量:" />
<TextBlock Text="8" Grid.Column="1"/>
</Grid>
-->
<!-- 生产状态 -->
<!--
<Grid Grid.Row="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="生产状态:" />
<TextBlock Text="生产中" Style="{StaticResource ProducingTextStyle}" Grid.Column="1"/>
</Grid>
</Grid>
</Border>
-->
<!-- 实时RFID读写信息面板 -->
<!--
<Border Grid.Column="1" BorderThickness="1" BorderBrush="#E0E0E0"
CornerRadius="4" Margin="5,0,0,0">
<Grid Margin="10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="305*"/>
<ColumnDefinition Width="48*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
-->
<!-- 面板标题 -->
<!--
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10" Grid.ColumnSpan="2">
<TextBlock Text="实时RFID读写信息" FontWeight="Bold" FontSize="15"/>
</StackPanel>
-->
<!-- RFID编码 -->
<!--
<Grid Grid.Row="1" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="RFID编码:" />
<TextBlock Text="S260402000112832604106 08" Grid.Column="1"/>
</Grid>
-->
<!-- 原始EPC -->
<!--
<Grid Grid.Row="2" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="原始EPC:" />
<TextBlock Text="303032313B312D34567890ABCD" Grid.Column="1"/>
</Grid>
-->
<!-- 读取时间 -->
<!--
<Grid Grid.Row="3" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="读取时间:" />
<TextBlock Text="2026-04-02 15:30:22" Grid.Column="1"/>
</Grid>
-->
<!-- 写入时间 -->
<!--
<Grid Grid.Row="4" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入时间:" />
<TextBlock Text="2026-04-02 15:30:23" Grid.Column="1"/>
</Grid>
-->
<!-- 写入状态 -->
<!--
<Grid Grid.Row="5" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="写入状态:" />
<TextBlock Text="写入成功" Style="{StaticResource SuccessTextStyle}" Grid.Column="1"/>
</Grid>
</Grid>
</Border>
</Grid>
</TabItem>-->
</TabControl>
<!-- 下半部分最近10条RFID读写记录 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" Padding="0">
<Border BorderThickness="1" BorderBrush="#E0E0E0"
CornerRadius="4" Margin="0,10,0,0">
<!-- 左半部分:准备写入的标签 -->
<Grid Grid.Column="0">
<Border BorderThickness="1" BorderBrush="#E0E0E0" CornerRadius="4" Margin="0,10,0,0">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="30px"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- 面板标题 -->
<TextBlock Grid.Row="0" Text="最近10条RFID读写记录" FontSize="15"
VerticalAlignment="Center" Margin="10,0,0,0"/>
<Grid Grid.Row="0" >
<WrapPanel Orientation="Horizontal" ItemHeight="50">
<TextBlock Text="RFID写入列表" FontSize="15" VerticalAlignment="Center" Margin="10,0,0,0"/>
<Label Content="订单号:" FontSize="15" Foreground="Black" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="100" Height="30" FontSize="15" Foreground="Black" Margin="0,0,0,0" />
<Label Content="产线号:" FontSize="15" Foreground="Black" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="100" Height="30" FontSize="15" Foreground="Black" Margin="0,0,0,0" />
<Label Content="带号:" FontSize="15" Foreground="Black" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="100" Height="30" FontSize="15" Foreground="Black" Margin="0,0,0,0" />
<Label Content="写入数量:" FontSize="15" Foreground="Black" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBox IsReadOnly="False" IsEnabled="True" Text="{Binding MesOrderNo,Mode=TwoWay}" Width="100" Height="30" FontSize="15" Foreground="Black" Margin="0,0,0,0" />
<Button Content="生成编码" Width="100" Height="30" FontSize="15" Command="{Binding GenerateCodeCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
<Button Content="清除数据" Width="100" Height="30" FontSize="15" Command="{Binding ListClearCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
</WrapPanel>
</Grid>
<!-- 数据表格绑定ViewModel中的历史记录 -->
<Grid Grid.Row="1">
<DataGrid x:Name="senorlistDataGrid" Grid.Row="0" ItemsSource="{Binding RFIDHistoryRecords}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="15"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" VerticalScrollBarVisibility="Auto"
Foreground="Black" >
<DataGrid.Columns>
<!--<DataGridTextColumn Binding="{Binding SerialNumber}" Header="编号" Width="0.1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}"/>-->
<DataGridTextColumn Binding="{Binding OrderNumber}" Header="订单号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding LineNumber}" Header="产线号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ProductType}" Header="产品类型" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding OriginalEPC}" Header="原始EPC" Width="2*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding RFIDCode}" Header="RFID编码" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding ReadTime}" Header="读取时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding WriteTime}" Header="写入时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<!--<DataGridTextColumn Binding="{Binding WriteStatus}" Header="写入状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />-->
<DataGridTemplateColumn Header="写入状态" Width="1*">
<DataGridTemplateColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<Border Background="{TemplateBinding Background}"
BorderThickness="0"
Padding="5">
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- 成功:绿色文字 -->
<DataTrigger Binding="{Binding WriteStatus}" Value="成功">
<Setter Property="Foreground" Value="#FF008000"/>
</DataTrigger>
<!-- 失败:红色文字 -->
<DataTrigger Binding="{Binding WriteStatus}" Value="失败">
<Setter Property="Foreground" Value="#FFFF0000"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding WriteStatus}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="0">
<DataGrid x:Name="PrePareWriteDataGrid" Grid.Row="0" ItemsSource="{Binding RFIDHistoryRecords}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="15"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" VerticalScrollBarVisibility="Auto"
Foreground="Black">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Background" Value="Transparent"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding LineNumber}" Header="编号" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding RFIDCode}" Header="RFID编码" Width="6*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding IsWrite}" Header="状态" Width="1*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTemplateColumn Header="操作" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="写入" Height="40" Width="100" Command="{Binding DataContext.UpdateCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
</Grid>
</Border>
</ScrollViewer>
</Grid>
<!--</ScrollViewer>-->
<!-- 状态栏 -->
<!--<Border Grid.Row="2"
Background="#2C3E50"
Padding="20,8">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
-->
<!-- 系统状态 -->
<!--
<StackPanel Grid.Column="0" Orientation="Horizontal">
<Border Width="10"
Height="10"
CornerRadius="5"
Background="#4CAF50"
Margin="0,0,8,0"/>
<TextBlock Text="系统运行正常"
Foreground="White"
FontSize="12"/>
<TextBlock Text=" | "
Foreground="#BDC3C7"
Margin="8,0"/>
<TextBlock Text="数据更新时间:"
Foreground="#BDC3C7"
FontSize="12"/>
<TextBlock x:Name="UpdateTimeText"
Text="::"
Foreground="White"
FontSize="12"
FontWeight="Bold"/>
</StackPanel>
-->
<!-- 版本信息 -->
<!--
<StackPanel Grid.Column="1" Orientation="Horizontal">
<TextBlock Text="版本v1.0.0"
Foreground="#BDC3C7"
FontSize="12"/>
</StackPanel>
</Grid>
</Border>-->
<!-- 右半部分最近10条RFID读写记录 -->
<Grid Grid.Column="1">
<Border BorderThickness="1" BorderBrush="#E0E0E0" CornerRadius="4" Margin="0,10,0,0">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="50px"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- 面板标题 -->
<Grid Grid.Row="0" >
<WrapPanel Orientation="Horizontal" ItemHeight="50">
<TextBlock Text="RFID写入记录" FontSize="15" VerticalAlignment="Center" Margin="10,0,0,0"/>
<Button Content="清除列表" Width="100" Height="30" FontSize="15" Command="{Binding HistoryClearCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
<Button Content="查看历史" Width="100" Height="30" FontSize="15" Command="{Binding HistoryPageCommand}" Background="#009999" Style="{StaticResource BUTTON_AGREE}" Margin="10,0,0,0"/>
</WrapPanel>
</Grid>
<!-- 数据表格绑定ViewModel中的历史记录 -->
<Grid Grid.Row="1">
<ScrollViewer VerticalScrollBarVisibility="Auto" Padding="0">
<DataGrid x:Name="senorlistDataGrid" Grid.Row="0" ItemsSource="{Binding RFIDHistoryRecords}" Background="#00000000"
ColumnHeaderHeight="35" Height="{Binding Path=ActualHeight, ElementName=ScanPanel}"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0" FontSize="15"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0" CanUserAddRows="False" SelectionMode="Single" IsReadOnly="True" VerticalScrollBarVisibility="Auto"
Foreground="Black">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="Background" Value="Transparent"/>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding LineNumber}" Header="产线号" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding OriginalEPC}" Header="原始EPC" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding RFIDCode}" Header="RFID编码" Width="3*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
<DataGridTextColumn Binding="{Binding WriteTime}" Header="写入时间" Width="1.5*" ElementStyle="{StaticResource DataGridTextColumnCenterSytle}" />
</DataGrid.Columns>
</DataGrid>
</ScrollViewer>
</Grid>
</Grid>
</Border>
</Grid>
</Grid>
</Grid>
</UserControl>

@ -35,15 +35,11 @@
<ProjectReference Include="..\SlnMesnac.Common\SlnMesnac.Common.csproj" />
<ProjectReference Include="..\SlnMesnac.Config\SlnMesnac.Config.csproj" />
<ProjectReference Include="..\SlnMesnac.Extensions\SlnMesnac.Extensions.csproj" />
<ProjectReference Include="..\SlnMesnac.Generate\SlnMesnac.Generate.csproj" />
<ProjectReference Include="..\SlnMesnac.Ioc\SlnMesnac.Ioc.csproj" />
<ProjectReference Include="..\SlnMesnac.Model\SlnMesnac.Model.csproj" />
<ProjectReference Include="..\SlnMesnac.Mqtt\SlnMesnac.Mqtt.csproj" />
<ProjectReference Include="..\SlnMesnac.Plc\SlnMesnac.Plc.csproj" />
<ProjectReference Include="..\SlnMesnac.Repository\SlnMesnac.Repository.csproj" />
<ProjectReference Include="..\SlnMesnac.Rfid\SlnMesnac.Rfid.csproj" />
<ProjectReference Include="..\SlnMesnac.Serilog\SlnMesnac.Serilog.csproj" />
<ProjectReference Include="..\SlnMesnac.TouchSocket\SlnMesnac.TouchSocket.csproj" />
</ItemGroup>
<ItemGroup>
@ -63,10 +59,4 @@
<Resource Include="Templates\image\background.jpg" />
</ItemGroup>
<ItemGroup>
<None Update="data\rfid_db.sqlite">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

@ -10,9 +10,7 @@ using Autofac;
using Microsoft.Extensions.Configuration;
using SlnMesnac.Rfid;
using SlnMesnac.Ioc;
using SlnMesnac.Plc;
using SlnMesnac.Extensions;
using SlnMesnac.TouchSocket;
namespace SlnMesnac.WPF
{

@ -134,7 +134,7 @@
<Border Name="bdr" CornerRadius="3" Opacity="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1">
<!--可使用ContentPresenter代替-->
<!--Foreground的值White可以替换为{TemplateBinding Foreground}-->
<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Foreground="White" Content="{TemplateBinding Content}"/>
<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Foreground="White" Content="{TemplateBinding Content}" Padding="0"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">

@ -1,172 +0,0 @@
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HslCommunication.LogNet;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.WindowsAPICodePack.Dialogs;
using SlnMesnac.Config;
using SlnMesnac.Generate;
using SlnMesnac.WPF.Attribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Windows;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.WPF.ViewModel.Generate
* 7f1ddac5-3ff3-4974-ac90-d6eb684167c8
*
* WenJY
* wenjy@mesnac.com
* 2024-04-11 09:31:46
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.WPF.ViewModel.Generate
{
[RegisterAsSingletonAttribute]
internal class GenerateControlViewModel : ViewModelBase
{
private readonly AppConfig _appConfig;
private readonly GenerateCode _generateCode;
public GenerateControlViewModel()
{
_appConfig = App.ServiceProvider.GetService<AppConfig>();
_generateCode = App.ServiceProvider.GetService<GenerateCode>();
var configIds = _appConfig.sqlConfig.Select(x=>x.configId).ToList();
// 初始化选项列表
Options = new ObservableCollection<string>();
foreach(var configId in configIds)
{
Options.Add(configId);
}
QuerySearchCommand = new RelayCommand<string>(Query);
CreateCodeCommand = new RelayCommand<string>(CreateCode);
}
#region 参数定义
private ObservableCollection<string> _options;
public ObservableCollection<string> Options
{
get { return _options; }
set
{
_options = value;
RaisePropertyChanged(nameof(Options));
}
}
private string _selectedOption;
public string SelectedOption
{
get { return _selectedOption; }
set
{
_selectedOption = value;
RaisePropertyChanged(nameof(SelectedOption));
}
}
private ObservableCollection<DbTableInfo> tablesDataGrid;
public ObservableCollection<DbTableInfo> TablesDataGrid
{
get { return tablesDataGrid; }
set { tablesDataGrid = value; RaisePropertyChanged(() => TablesDataGrid); }
}
#endregion
#region 事件定义
public RelayCommand<string> QuerySearchCommand { get; set; }
public RelayCommand<string> CreateCodeCommand { get;set; }
#endregion
/// <summary>
/// 查询事件
/// </summary>
/// <param name="search"></param>
private void Query(string search)
{
var configId = _selectedOption;
if (!string.IsNullOrEmpty(configId))
{
var db = App.ServiceProvider.GetService<ISqlSugarClient>();
var scope = db.AsTenant().GetConnectionScope(configId);
List<DbTableInfo> tables;
if (!string.IsNullOrEmpty(search))
{
tables = scope.DbMaintenance.GetTableInfoList(false).FindAll(x=>x.Name == search);
}
else
{
tables = scope.DbMaintenance.GetTableInfoList(false);
}
if (tables != null)
{
TablesDataGrid = new ObservableCollection<DbTableInfo>();
tables.ForEach(t => { TablesDataGrid.Add(t); });
}
}
}
private void CreateCode(string tableName)
{
var info = tableName;
var configId = _selectedOption;
string nameSpace = "SlnMesnac.Repository";
try
{
using (CommonOpenFileDialog dialog = new CommonOpenFileDialog())
{
dialog.IsFolderPicker = true; // 设置为选择文件夹
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
string selectedPath = dialog.FileName;
var res = _generateCode.CreateCode(configId, tableName, selectedPath, nameSpace);
if (res)
{
MessageBox.Show($"{tableName}代码生成成功");
}
}
}
}catch(Exception ex)
{
MessageBox.Show($"{tableName}代码生成失败:{ex.Message}");
}
}
}
}

@ -3,7 +3,6 @@ using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Models;
using OfficeOpenXml;
using SlnMesnac.Common;
using SlnMesnac.Config;
@ -34,12 +33,12 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
private AppsettingsConfig _appSettings = new AppsettingsConfig();
public Action<Real_DataInfo> Action;
public delegate void RefreshDataInfo(Real_DataInfo real_Data);
private ISqlSugarClient? sqlSugarClient;
private RealReadDataService dataService = RealReadDataService.Instance;
public event RefreshDataInfo? RefreshDataInfoEvent;
public HistorySearchViewModel()
{
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
GetOrderInfoCommand = new RelayCommand<object>(t=> RefreshData(t));
ExportCommand = new RelayCommand<object>(t=> ExportData(t));
BeginDate = DateTime.Now.Date; // 当天的 0:00:00
@ -93,8 +92,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
//查询记录
List<real_readdata> real_readdataInfos = sqlSugarClient.Queryable<real_readdata>().Where(exp
).ToList();
List<real_readdata> real_readdataInfos = dataService.Helper.Query(exp);
if (real_readdataInfos.Count > 0)
{
App.Current.Dispatcher.Invoke(() =>

@ -1,9 +1,7 @@
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using GalaSoft.MvvmLight;
using HslCommunication.Enthernet;
using Microsoft.Extensions.DependencyInjection;
using Models;
using Serilog;
using SlnMesnac.Common;
using SlnMesnac.Config;
@ -15,7 +13,6 @@ using SlnMesnac.Repository.service;
using SlnMesnac.Rfid;
using SlnMesnac.Rfid.Enum;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Model;
using SqlSugar;
@ -31,6 +28,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Threading;
using TouchSocket.Core;
using TouchSocket.Sockets;
using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System;
using Task = System.Threading.Tasks.Task;
@ -43,13 +41,26 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
private static StringChange _StringChange;
private String SerialNo = "";
private SerilogHelper _logger;
private ISqlSugarClient? sqlSugarClient;
//容器里面的读写器集合
public List<RfidAbsractFactory> rfidList;
private AppConfig appConfig;
public TcpServer _TcpServer;
private DispatcherTimer _timer;
private ObservableCollection<RFIDRecord> _rfidHistoryRecords = new ObservableCollection<RFIDRecord>();
private RealReadDataService dataService = RealReadDataService.Instance;
#region 关联属性
private ObservableCollection<Real_DataInfo> _Deviceinfo = new ObservableCollection<Real_DataInfo>();
public ObservableCollection<Real_DataInfo> Deviceinfo
{
get { return _Deviceinfo; }
set
{
_Deviceinfo = value;
RaisePropertyChanged(() => Deviceinfo);
}
}
public ObservableCollection<RFIDRecord> RFIDHistoryRecords
{
get { return _rfidHistoryRecords; }
@ -59,7 +70,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RaisePropertyChanged(() => RFIDHistoryRecords);
}
}
ChangeTypeViewModel ChangeTypeView;
/// <summary>
/// 日期时间
/// </summary>
@ -111,17 +122,18 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
}
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
#endregion
public ProductionLineViewModel()
{
GetOrderInfoCommand = new RelayCommand<object>(t => RefreshData(t));
ChangeTypeView = App.ServiceProvider.GetService<ChangeTypeViewModel>();
// 构造函数里注册
WeakReferenceMessenger.Default.Register<Real_DataInfo>(this, RefreshOrderNo);
_StringChange = App.ServiceProvider.GetService<StringChange>();
_logger = App.ServiceProvider.GetService<SerilogHelper>();
appConfig = App.ServiceProvider.GetService<AppConfig>();
sqlSugarClient = App.ServiceProvider.GetService<ISqlSugarClient>();
_TcpServer = App.ServiceProvider.GetRequiredService<TcpServer>();
rfidList = App.ServiceProvider.GetRequiredService<List<RfidAbsractFactory>>();
rfidList.ForEach(rfid =>
@ -166,13 +178,12 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
RecvIdentifyData_Instance("10001", tagInfos);
}
public RelayCommand<object> GetOrderInfoCommand { get; set; }
private void RefreshOrderNo(object recipient, Real_DataInfo real_Data)
{
//查询当前订单产线最大序列号
List<real_readdata> real_Readdatas = sqlSugarClient.Queryable<real_readdata>().Where(expression: x => x.orderno == real_Data.OrderNo && x.lineno == real_Data.LineNo).ToList();
List<real_readdata> real_Readdatas = dataService.Helper.Query(x => x.orderno == real_Data.OrderNo && x.lineno == real_Data.LineNo);
string SNo = "";
if (real_Readdatas.Count > 0)
{
@ -222,45 +233,6 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
real_DataInfos.Add(real_DataInfo);
}
//Real_DataInfo real_DataInfo = new Real_DataInfo()
//{
// Name = "1",
// Deviceid = "10001",
// Connectstr = "192.168.0.1:20108",
// LineNo = "6#",
// OrderNo = "123456",
// ProductType = "整芯带",
// WriteCount = "0",
// RfidCount = "20",
// IsOnline = "未连接",
// RfidASCII = "0",
// RfidEPC = "0",
// ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
// WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
// ProductStatus = "生产中",
// WriteStatus = "写入成功",
//};
//Real_DataInfo real_DataInfo2 = new Real_DataInfo()
//{
// Name = "2",
// Deviceid = "10002",
// Connectstr = "127.0.0.1:20108",
// LineNo = "7#",
// OrderNo = "123456",
// ProductType = "整芯带",
// WriteCount = "0",
// RfidCount = "20",
// IsOnline = "未连接",
// RfidASCII = "0",
// RfidEPC = "0",
// ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
// WriteTime = DateTime.Now.AddSeconds(10).ToString("yyyy-MM-dd HH:mm:ss"),
// ProductStatus = "生产中",
// WriteStatus = "写入成功",
//};
//real_DataInfos.Add(real_DataInfo);
//real_DataInfos.Add(real_DataInfo2);
App.Current.Dispatcher.Invoke(() =>
{
Deviceinfo.Clear();
@ -312,7 +284,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
bool iflag = false;
string epcascii = Encoding.ASCII.GetString(tagInfos[0].EPC);
epcascii = epcascii.Replace("\0", "");
List<real_readdata> real_Readdatas = sqlSugarClient.Queryable<real_readdata>().Where(expression: x => x.rfidascii == epcascii).ToList();
List<real_readdata> real_Readdatas = dataService.Helper.Query(x => x.rfidascii == epcascii);
//如果不存在则写入
if (real_Readdatas.Count <= 0)
@ -368,7 +340,7 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
writestatus = Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).WriteStatus
};
var a = sqlSugarClient.Ado.Context.CopyNew().Insertable<real_readdata>(real_Readdata).ExecuteCommand();
var a = dataService.Helper.Insert(real_Readdata);
//刷新界面
//Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).RfidASCII = Encoding.ASCII.GetString(tagInfos[0].EPC);
//Deviceinfo.FirstOrDefault(x => x.Deviceid == iCombineId).ReadTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
@ -432,17 +404,8 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
});
}
#region 心跳检测
private ObservableCollection<Real_DataInfo> _Deviceinfo = new ObservableCollection<Real_DataInfo>();
public ObservableCollection<Real_DataInfo> Deviceinfo
{
get { return _Deviceinfo; }
set
{
_Deviceinfo = value;
RaisePropertyChanged(() => Deviceinfo);
}
}
private void StartCheckStatus()
{
Task.Run(async () =>
@ -545,5 +508,6 @@ namespace SlnMesnac.WPF.ViewModel.IndexPage
while (!res);
}
#endregion
}
}

@ -1,17 +1,12 @@
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HslCommunication.Enthernet;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using SlnMesnac.Config;
using SlnMesnac.Extensions;
using SlnMesnac.Plc;
using SlnMesnac.Repository.service;
using SlnMesnac.Serilog;
using SlnMesnac.TouchSocket;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Page.Generate;
using SlnMesnac.WPF.Page.IndexPage;
using System;
using System.Windows;
@ -22,51 +17,11 @@ namespace SlnMesnac.WPF.ViewModel
public class MainWindowViewModel: ViewModelBase
{
private readonly SerilogHelper _logger;
//private readonly ILogger<BaseTaskInfoBusiness> _BaseTaskInfoBusinesslogger;
//private IAirportTaskService _Taskservice;
//private IAGVStateService _AGVStateService;
//private TcpServer _tcpServer;
//代码生成
private readonly GenerateControl generateControl = new GenerateControl();
private readonly ChangeType changeType = new ChangeType();
private readonly HistorySearch historySearch = new HistorySearch();
//private MiddleWare indexContent = new MiddleWare();
private ProductionLineUserControl indexContent = new ProductionLineUserControl();
//private ChangeType changeType = new ChangeType();
private AppConfig _appConfig;
public static Action ReturnHomeAction;
#region 参数定义
/// <summary>
/// PLC设备状态
/// </summary>
private int _PlcStatus = 0;
public int PlcStatus
{
get { return _PlcStatus; }
set { _PlcStatus = value; RaisePropertyChanged(nameof(PlcStatus)); }
}
/// <summary>
/// 箱壳扫码器状态
/// </summary>
private int _ShellScannerStatus = 0;
public int ShellScannerStatus
{
get { return _ShellScannerStatus; }
set { _ShellScannerStatus = value; RaisePropertyChanged(nameof(ShellScannerStatus)); }
}
/// <summary>
/// 内胆扫码器状态
/// </summary>
private int _BoldScannerStatus = 0;
public int BoldScannerStatus
{
get { return _BoldScannerStatus; }
set { _BoldScannerStatus = value; RaisePropertyChanged(nameof(BoldScannerStatus)); }
}
public System.Windows.Controls.UserControl _content;
public System.Windows.Controls.UserControl UserContent
@ -79,7 +34,6 @@ namespace SlnMesnac.WPF.ViewModel
RaisePropertyChanged(nameof(UserContent));
}
}
#endregion
#region 事件定义
/// <summary>
@ -87,124 +41,18 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
public RelayCommand<object> ControlOnClickCommand { get; set; }
/// <summary>
/// 打开系统键盘
/// </summary>
public RelayCommand OpenSystemKeyboardCommand { get; set; }
/// <summary>
/// 窗体控制
/// </summary>
public RelayCommand<object> FormControlCommand { get; set; }
#endregion
/// <summary>
/// PLC状态刷新
/// </summary>
//public void RefreshStatus(object sender, System.Timers.ElapsedEventArgs e)
//{
// PlcAbsractFactory plc = plcPool.GetPlcByKey("plc");
// if (plc != null && plc.IsConnected)
// {
// PlcStatus = 1;
// }
// else
// {
// PlcStatus = 2;
// }
//}
public MainWindowViewModel()
{
_appConfig = App.ServiceProvider.GetService<AppConfig>();
_logger = App.ServiceProvider.GetRequiredService<SerilogHelper>();
//_Taskservice = App.ServiceProvider.GetService<IAirportTaskService>();
//_AGVStateService = App.ServiceProvider.GetService<IAGVStateService>();
//_BaseTaskInfoBusinesslogger = App.ServiceProvider.GetService<ILogger<BaseTaskInfoBusiness>>();
//_tcpServer = App.ServiceProvider.GetService<TcpServer>();
//_airPorthttpClient = App.ServiceProvider.GetService<MeshttpClient>();
//BaseTaskInfoBusiness.GetInstance(_BaseTaskInfoBusinesslogger, _Taskservice, _AGVStateService, _tcpServer, _airPorthttpClient);
ControlOnClickCommand = new RelayCommand<object>(obj => ControlOnClick(obj));
FormControlCommand = new RelayCommand<object>(x => FormControl(x));
UserContent = indexContent;
ReturnHomeAction = () => UserContent = indexContent;
}
/// <summary>
/// 窗体控制
/// </summary>
/// <param name="obj"></param>
private void FormControl(object obj)
{
try
{
string controlType = obj as string;
switch (controlType)
{
// 关闭当前窗口
case "Exit":
//Environment.Exit(0);
Application.Current.Shutdown();
break;
case "Generate":
UserContent = generateControl;
break;
//case "ChangeType":
// UserContent = changeType;
// break;
// 还原 或者 最大化当前窗口
case "Normal":
if (Application.Current.MainWindow.WindowState == WindowState.Normal)
{
Application.Current.MainWindow.WindowState = WindowState.Maximized;
break;
}
if (Application.Current.MainWindow.WindowState == WindowState.Maximized)
{
Application.Current.MainWindow.WindowState = WindowState.Normal;
break;
}
break;
// 最小化当前窗口
case "Minimized":
Application.Current.MainWindow.WindowState = WindowState.Minimized;
break;
default:
break;
}
}
catch (Exception ex)
{
Log.Information("窗体控制逻辑异常", ex);
}
}
/// <summary>
/// 界面跳转
/// </summary>
private void ControlOnClick(object obj)
{
try
{
string info = obj as string;
switch (info)
{
case "Index":
UserContent = indexContent;
break;
case "ChangeType":
UserContent = changeType;
break;
case "HistorySearch":
UserContent = historySearch;
break;
default: break;
}
}
catch (Exception ex)
{
Log.Information("界面跳转逻辑异常", ex);
}
}
}
}

Binary file not shown.

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.5.11716.220 stable
VisualStudioVersion = 18.5.11716.220
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Common", "SlnMesnac.Common\SlnMesnac.Common.csproj", "{BB71F26A-7007-423E-83E9-7A3BAC25E934}"
EndProject
@ -13,24 +13,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Repository", "Sln
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Serilog", "SlnMesnac.Serilog\SlnMesnac.Serilog.csproj", "{DEE2F305-733C-47C8-891C-502121ABAD00}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Plc", "SlnMesnac.Plc\SlnMesnac.Plc.csproj", "{D17E9024-9D25-4CE4-8E98-8A6C859CE436}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.WPF", "SlnMesnac.WPF\SlnMesnac.WPF.csproj", "{B986555B-86D1-457A-95F5-B9135B9FBC55}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.TouchSocket", "SlnMesnac.TouchSocket\SlnMesnac.TouchSocket.csproj", "{3700E2BB-09C4-43C0-A9DC-C18137B76591}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Mqtt", "SlnMesnac.Mqtt\SlnMesnac.Mqtt.csproj", "{7D908FF5-88AE-42AB-A193-F2896EF44AB1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Rfid", "SlnMesnac.Rfid\SlnMesnac.Rfid.csproj", "{40D23A4B-8372-4145-936C-08AE63C6D1F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Ioc", "SlnMesnac.Ioc\SlnMesnac.Ioc.csproj", "{30A3F86B-774E-4153-9A00-FD3173C710EB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Generate", "SlnMesnac.Generate\SlnMesnac.Generate.csproj", "{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Extensions", "SlnMesnac.Extensions\SlnMesnac.Extensions.csproj", "{6D929802-24AA-42A7-92C5-303C3D59A990}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlnMesnac.Redis", "SlnMesnac.Redis\SlnMesnac.Redis.csproj", "{0E041719-E755-43CD-8A0E-DF62E0B2E463}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -57,22 +47,10 @@ Global
{DEE2F305-733C-47C8-891C-502121ABAD00}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEE2F305-733C-47C8-891C-502121ABAD00}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEE2F305-733C-47C8-891C-502121ABAD00}.Release|Any CPU.Build.0 = Release|Any CPU
{D17E9024-9D25-4CE4-8E98-8A6C859CE436}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D17E9024-9D25-4CE4-8E98-8A6C859CE436}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D17E9024-9D25-4CE4-8E98-8A6C859CE436}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D17E9024-9D25-4CE4-8E98-8A6C859CE436}.Release|Any CPU.Build.0 = Release|Any CPU
{B986555B-86D1-457A-95F5-B9135B9FBC55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B986555B-86D1-457A-95F5-B9135B9FBC55}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B986555B-86D1-457A-95F5-B9135B9FBC55}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B986555B-86D1-457A-95F5-B9135B9FBC55}.Release|Any CPU.Build.0 = Release|Any CPU
{3700E2BB-09C4-43C0-A9DC-C18137B76591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3700E2BB-09C4-43C0-A9DC-C18137B76591}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3700E2BB-09C4-43C0-A9DC-C18137B76591}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3700E2BB-09C4-43C0-A9DC-C18137B76591}.Release|Any CPU.Build.0 = Release|Any CPU
{7D908FF5-88AE-42AB-A193-F2896EF44AB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D908FF5-88AE-42AB-A193-F2896EF44AB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D908FF5-88AE-42AB-A193-F2896EF44AB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D908FF5-88AE-42AB-A193-F2896EF44AB1}.Release|Any CPU.Build.0 = Release|Any CPU
{40D23A4B-8372-4145-936C-08AE63C6D1F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40D23A4B-8372-4145-936C-08AE63C6D1F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40D23A4B-8372-4145-936C-08AE63C6D1F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -81,18 +59,10 @@ Global
{30A3F86B-774E-4153-9A00-FD3173C710EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{30A3F86B-774E-4153-9A00-FD3173C710EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{30A3F86B-774E-4153-9A00-FD3173C710EB}.Release|Any CPU.Build.0 = Release|Any CPU
{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00FC9358-2381-4C1B-BD45-6D31DD1DB7D3}.Release|Any CPU.Build.0 = Release|Any CPU
{6D929802-24AA-42A7-92C5-303C3D59A990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D929802-24AA-42A7-92C5-303C3D59A990}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D929802-24AA-42A7-92C5-303C3D59A990}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D929802-24AA-42A7-92C5-303C3D59A990}.Release|Any CPU.Build.0 = Release|Any CPU
{0E041719-E755-43CD-8A0E-DF62E0B2E463}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E041719-E755-43CD-8A0E-DF62E0B2E463}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0E041719-E755-43CD-8A0E-DF62E0B2E463}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E041719-E755-43CD-8A0E-DF62E0B2E463}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Loading…
Cancel
Save