Compare commits
9 Commits
煤科院货架液晶显示屏
...
develop
Author | SHA1 | Date | |
---|---|---|---|
ddc0b13813 | |||
05a66dc2d3 | |||
dfe65e806d | |||
9e16a001c0 | |||
963ffc4ad2 | |||
15ccafbd5e | |||
9f5fdc24e9 | |||
6fbc90dac3 | |||
40024b339d |
@ -1,16 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Encode
|
||||
{
|
||||
public static class Encode
|
||||
{
|
||||
public static byte[] GetGb2312(string message)
|
||||
{
|
||||
return Encoding.GetEncoding("gb2312").GetBytes(message);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{F344121D-856D-4E5C-8519-6EADDE98616E}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Encode</RootNamespace>
|
||||
<AssemblyName>Encode</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Encode.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
@ -1,33 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("Encode")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Encode")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// 将 ComVisible 设置为 false 会使此程序集中的类型
|
||||
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("f344121d-856d-4e5c-8519-6eadde98616e")]
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
@ -41,11 +41,6 @@ namespace WCS.BLL.Config
|
||||
public bool IsResetDBOrTable { get; set; }
|
||||
|
||||
public int InstoreTimeOut { get; set; } = 5000;
|
||||
|
||||
|
||||
//是否是钻探分院
|
||||
public bool IsZuantan { get; set; }
|
||||
|
||||
#region 盟讯公司后台配置
|
||||
public bool IsMx { get; set; }
|
||||
/// <summary>
|
||||
|
@ -12,7 +12,5 @@ namespace WCS.BLL.Config
|
||||
/// 0x02绿色 0x04蓝色
|
||||
/// </summary>
|
||||
public static byte CurrentOutStoreColor = 0x02;
|
||||
|
||||
public static string WMSToken = string.Empty;
|
||||
}
|
||||
}
|
||||
|
@ -4,9 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using TaskModeEnum = WCS.BLL.DbModels.Task.TaskModeEnum;
|
||||
|
||||
namespace WCS.DAL.DbModels
|
||||
{
|
||||
@ -91,7 +89,7 @@ namespace WCS.DAL.DbModels
|
||||
public bool IsEnable { get; set; } = true;
|
||||
|
||||
[SugarColumn(ColumnName = "current_mode", IsNullable = true, ColumnDescription = "串联后大货架编码;大货架编码:未串联时是与货架编码是一对一的关系;串联后与货架编码是一对多的关系")]
|
||||
public TaskModeEnum CurrentMode { get; set; } = TaskModeEnum.待机模式;
|
||||
public Mode CurrentMode { get; set; } = Mode.待机模式;
|
||||
|
||||
/// <summary>
|
||||
/// 序号
|
||||
|
@ -21,7 +21,7 @@ namespace WCS.DAL.DbModels
|
||||
/// <summary>
|
||||
/// 货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 64, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -33,14 +33,14 @@ namespace WCS.DAL.DbModels
|
||||
/// <summary>
|
||||
/// 货架类型名称
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_type_name", Length = 64, IsNullable = false, ColumnDescription = "货架类型名称")]
|
||||
[SugarColumn(ColumnName = "shelf_type_name", Length = 50, IsNullable = false, ColumnDescription = "货架类型名称")]
|
||||
public string ShelfTypeName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架当前状态
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "current_mode", IsNullable = false, ColumnDescription = "货架当前状态")]
|
||||
public WCS.BLL.DbModels.Task.TaskModeEnum CurrentMode { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架设置当前模式的时间
|
||||
@ -49,18 +49,17 @@ namespace WCS.DAL.DbModels
|
||||
public DateTime SetCurrentModeTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架行数 对应单灯的第几行
|
||||
/// 货架行数
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "row_counts", IsNullable = false, ColumnDescription = "货架行数")]
|
||||
public int Rowcounts { get; set; }
|
||||
public int Rowcounts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架列数 对应一行有几个
|
||||
/// 货架列数
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "column_counts", IsNullable = false, ColumnDescription = "货架列数")]
|
||||
public int Columncounts { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 货架对应警示灯的Id
|
||||
/// </summary>
|
||||
@ -91,24 +90,31 @@ namespace WCS.DAL.DbModels
|
||||
[SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
|
||||
public string GroupName { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 模块是不是
|
||||
/// 是否串联绑定
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "is_bind", IsNullable = false, ColumnDescription = "是否串联绑定")]
|
||||
public bool IsBind { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架的模块是不是服务端
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "is_service", IsNullable = true, ColumnDescription = "货架的模块是不是服务端")]
|
||||
public bool IsService { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 串联绑定后的大货架编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
|
||||
public string? BigShelfCode { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 每块板子的灯数量
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "light_count", IsNullable = true, ColumnDescription = "每块板子的灯数量")]
|
||||
public int LightCount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 每块板子的灯数量
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "first_board_id", IsNullable = true, ColumnDescription = "左上角的板子id")]
|
||||
public int FirtstBoardId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 序号
|
||||
/// </summary>
|
||||
|
@ -119,31 +119,6 @@ namespace WCS.DAL.DbModels
|
||||
[SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
|
||||
public string GroupName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 区域
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "area", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的区域 用于煤科院按区域灭灯")]
|
||||
public string Area { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单灯每个库位灯的个数
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "single_light_number", IsNullable = false, DefaultValue = "1", ColumnDescription = "单灯货架灯的个数,用于煤科院大库位灯")]
|
||||
public int SingleLightNumber { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 灯当前模式
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "light_mode", IsNullable = true, ColumnDescription = "亮灯模式")]
|
||||
public int LightMode { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 灯当前颜色
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "color_mode", IsNullable = true, ColumnDescription = "灯当前颜色")]
|
||||
public int ColorMode { get; set; }= 0;
|
||||
|
||||
/// <summary>
|
||||
/// 序号
|
||||
/// </summary>
|
||||
|
141
WCS.BLL/DbModels/StoreInfoHistoryVoltage.cs
Normal file
141
WCS.BLL/DbModels/StoreInfoHistoryVoltage.cs
Normal file
@ -0,0 +1,141 @@
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace WCS.DAL.DbModels
|
||||
{
|
||||
[SugarTable("wcs_store_info_history_voltage")]
|
||||
public partial class StoreInfoHistoryVoltage
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "store_id")]
|
||||
public int StoreId { get; set; }
|
||||
/// <summary>
|
||||
/// 入库的库位编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")]
|
||||
public string StoreCode { get; set; }
|
||||
/// <summary>
|
||||
/// 货架类型Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_type_id", IsNullable = false, DefaultValue = "0", ColumnDescription = "货架类型Id")]
|
||||
public int ShelfTypeId { get; set; }
|
||||
/// <summary>
|
||||
/// 模组Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_id", IsNullable = false, ColumnDescription = "模组Id")]
|
||||
public int ModuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组编号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_code", Length = 50, IsNullable = false, ColumnDescription = "模组编码")]
|
||||
public string ModuleCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架Id")]
|
||||
public int ShelfId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 板子的Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "board_id", IsNullable = false, ColumnDescription = "模组pcb板id")]
|
||||
public int BoardId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 板子上第几个灯
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "light_number", IsNullable = true, ColumnDescription = "板子上第几个灯")]
|
||||
public int LightNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 优先级;为钢网柜推荐库位预留
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "priority", IsNullable = true, ColumnDescription = "板子上第几个灯")]
|
||||
public int Priority { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 记录一下查询时的历史是否有物料
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "current_mat_sn", Length = 200, IsNullable = true, ColumnDescription = "当前物料")]
|
||||
public string CurrentMatSn { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前电压;当前电压,调试排查问题用
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "current_voltage", IsNullable = true, ColumnDescription = "当前电压值")]
|
||||
public decimal CurrentVoltage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 标准电压;标准电压,调试排查问题用
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "standard_voltage", IsNullable = true, ColumnDescription = "标准电压值")]
|
||||
public decimal StandardVoltage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 偏差电压;偏差电压,调试排查问题用
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "offset_voltage", IsNullable = true, ColumnDescription = "电压偏移值")]
|
||||
public decimal OffsetVoltage { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 串联绑定后的大货架编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
|
||||
public string? BigShelfCode { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// Row 行
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "R", Length = 10, IsNullable = true, ColumnDescription = "库位 行")]
|
||||
public string R { get; set; }
|
||||
/// <summary>
|
||||
/// Column 列
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "C", Length = 10, IsNullable = true, ColumnDescription = "库位 列")]
|
||||
public string C { get; set; }
|
||||
/// <summary>
|
||||
/// Column 位
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "Wei", Length = 10, IsNullable = true, ColumnDescription = "库位 位 第几个库位灯")]
|
||||
public string Wei { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
|
||||
public string GroupName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "create_time", IsNullable = false, ColumnDescription = "创建时间")]
|
||||
public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 序号
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public int RowNumber { get; set; }
|
||||
/// <summary>
|
||||
/// 是否已经选择
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public bool IsSelected { get; set; }
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 当前正在进行中的任务
|
||||
/// </summary>
|
||||
[SugarTable("wcs_task_current")]
|
||||
[SugarTable("wcs_current_task")]
|
||||
public class CurrentTask
|
||||
{
|
||||
/// <summary>
|
||||
@ -22,42 +22,20 @@ namespace WCS.BLL.DbModels
|
||||
public int Id { get; set; }
|
||||
|
||||
#region 库位属性
|
||||
/// <summary>
|
||||
/// 货架Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架Id")]
|
||||
public int ShelfId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_id", IsNullable = false, ColumnDescription = "模组Id")]
|
||||
public int ModuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组编号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_code", Length = 50, IsNullable = false, ColumnDescription = "模组编码")]
|
||||
public string ModuleCode { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 入库的库位表ID
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")]
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")]
|
||||
public int StoreId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库的库位编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")]
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")]
|
||||
public string StoreCode { get; set; }
|
||||
|
||||
[Navigate(NavigateType.OneToOne, nameof(StoreId))]
|
||||
public StoreInfo StoreInfo { get; set; }
|
||||
#endregion
|
||||
|
||||
#region 任务属性
|
||||
@ -67,10 +45,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")]
|
||||
public int TaskID { get; set; } = 0;
|
||||
|
||||
///真主键
|
||||
[SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string ItemNo { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Guid
|
||||
/// </summary>
|
||||
@ -78,7 +52,7 @@ namespace WCS.BLL.DbModels
|
||||
public Guid Guid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务模式:入库模式 = 1, 出库模式 = 2, 盘点模式 = 3
|
||||
/// 任务模式:入库模式 = 0, 出库模式 = 1, 盘点模式 = 2
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "task_mode", IsNullable = false, ColumnDescription = "任务模式:入库模式 = 0, 出库模式 = 1, 盘点模式 = 2")]
|
||||
public TaskModeEnum TaskMode { get; set; }
|
||||
@ -86,7 +60,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 出库单据号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
[SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string OrderNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -119,12 +93,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "mat_batch", Length = 150, IsNullable = true, ColumnDescription = "物料批次")]
|
||||
public string MatBatch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料SN 物料唯一码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "mat_sn", Length = 150, IsNullable = true, ColumnDescription = "物料SN物料唯一码")]
|
||||
public string MatSN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料数量
|
||||
/// </summary>
|
||||
@ -143,12 +111,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "is_suspended", IsNullable = false, ColumnDescription = "任务是否被挂起 用于入库时取消入库,还没切换库位时 认为任务被挂起")]
|
||||
public bool IsSuspended { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 任务是否被取消
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "is_cancel", IsNullable = false, ColumnDescription = "任务是否被取消")]
|
||||
public bool IsCancel { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 任务是否已发送至标签
|
||||
/// </summary>
|
||||
|
@ -12,7 +12,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 已完成未提交的任务
|
||||
/// </summary>
|
||||
[SugarTable("wcs_task_finished")]
|
||||
[SugarTable("wcs_finished_task")]
|
||||
public class FinishedTask
|
||||
{
|
||||
/// <summary>
|
||||
@ -23,39 +23,19 @@ namespace WCS.BLL.DbModels
|
||||
|
||||
#region 库位属性
|
||||
/// <summary>
|
||||
/// 货架Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架Id")]
|
||||
public int ShelfId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_id", IsNullable = false, ColumnDescription = "模组Id")]
|
||||
public int ModuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组编号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_code", Length = 50, IsNullable = false, ColumnDescription = "模组编码")]
|
||||
public string ModuleCode { get; set; }
|
||||
/// <summary>
|
||||
/// 入库的库位表ID
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")]
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")]
|
||||
public int StoreId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库的库位编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")]
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")]
|
||||
public string StoreCode { get; set; }
|
||||
|
||||
[Navigate(NavigateType.OneToOne, nameof(StoreId))]
|
||||
public StoreInfo StoreInfo { get; set; }
|
||||
#endregion
|
||||
|
||||
#region 任务属性
|
||||
@ -65,10 +45,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")]
|
||||
public int TaskID { get; set; }
|
||||
|
||||
///真主键
|
||||
[SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string ItemNo { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Guid
|
||||
/// </summary>
|
||||
@ -84,7 +60,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 出库单据号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
[SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string OrderNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -116,12 +92,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "mat_batch", Length = 150, IsNullable = true, ColumnDescription = "物料批次")]
|
||||
public string MatBatch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料SN 物料唯一码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "mat_sn", Length = 150, IsNullable = true, ColumnDescription = "物料SN物料唯一码")]
|
||||
public string MatSN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料数量
|
||||
/// </summary>
|
||||
@ -134,6 +104,11 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "create_time", IsNullable = false, ColumnDescription = "创建时间")]
|
||||
public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "create_user", Length = 100, IsNullable = true, ColumnDescription = "创建人")]
|
||||
public string CreateUser { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 完成时物料数量
|
||||
|
@ -12,7 +12,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 已完成已提交的历史任务
|
||||
/// </summary>
|
||||
[SugarTable("wcs_task_uploaded")]
|
||||
[SugarTable("wcs_uploaded_task")]
|
||||
public class UploadededTask
|
||||
{
|
||||
/// <summary>
|
||||
@ -22,41 +22,20 @@ namespace WCS.BLL.DbModels
|
||||
public int Id { get; set; }
|
||||
|
||||
#region 库位属性
|
||||
/// <summary>
|
||||
/// 货架Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_id", IsNullable = false, ColumnDescription = "货架Id")]
|
||||
public int ShelfId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "shelf_code", Length = 50, IsNullable = false, ColumnDescription = "货架编码;货架一般按照报警灯来区分 一个报警灯指示的是一个货架")]
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组Id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_id", IsNullable = false, ColumnDescription = "模组Id")]
|
||||
public int ModuleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 模组编号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "module_code", Length = 50, IsNullable = false, ColumnDescription = "模组编码")]
|
||||
public string ModuleCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库的库位表ID
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = true, ColumnDescription = "库位ID")]
|
||||
[SugarColumn(ColumnName = "store_id", IsNullable = false, ColumnDescription = "库位ID")]
|
||||
public int StoreId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 入库的库位编码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = true, ColumnDescription = "库位编码")]
|
||||
[SugarColumn(ColumnName = "store_code", Length = 50, IsNullable = false, ColumnDescription = "库位编码")]
|
||||
public string StoreCode { get; set; }
|
||||
|
||||
[Navigate(NavigateType.OneToOne, nameof(StoreId))]
|
||||
public StoreInfo StoreInfo { get; set; }
|
||||
#endregion
|
||||
|
||||
#region 任务属性
|
||||
@ -66,10 +45,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "task_id", IsNullable = false, ColumnDescription = "任务Id,同一个库位只支持1-7")]
|
||||
public int TaskID { get; set; }
|
||||
|
||||
///真主键
|
||||
[SugarColumn(ColumnName = "item_no", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string ItemNo { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Guid
|
||||
/// </summary>
|
||||
@ -85,7 +60,7 @@ namespace WCS.BLL.DbModels
|
||||
/// <summary>
|
||||
/// 出库单据号
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "order_number", Length = 128, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
[SugarColumn(ColumnName = "order_number", Length = 50, IsNullable = false, ColumnDescription = "出库单据号")]
|
||||
public string OrderNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
@ -117,12 +92,6 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "mat_batch", Length = 150, IsNullable = true, ColumnDescription = "物料批次")]
|
||||
public string MatBatch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料SN 物料唯一码
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "mat_sn", Length = 150, IsNullable = true, ColumnDescription = "物料SN物料唯一码")]
|
||||
public string MatSN { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料数量
|
||||
/// </summary>
|
||||
@ -135,6 +104,11 @@ namespace WCS.BLL.DbModels
|
||||
[SugarColumn(ColumnName = "create_time", IsNullable = false, ColumnDescription = "创建时间")]
|
||||
public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建人
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "create_user", Length = 100, IsNullable = true, ColumnDescription = "创建人")]
|
||||
public string CreateUser { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 完成时物料数量
|
||||
@ -146,12 +120,6 @@ namespace WCS.BLL.DbModels
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "finish_time", IsNullable = false, ColumnDescription = "完成时间")]
|
||||
public DateTime FinishTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 完成时间
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "upload_time", IsNullable = false, ColumnDescription = "上传时间")]
|
||||
public DateTime UploadTime { get; set; } = DateTime.Now;
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ namespace WCS.BLL.HardWare
|
||||
/// <summary>
|
||||
/// 当前模式
|
||||
/// </summary>
|
||||
WCS.BLL.DbModels.Task.TaskModeEnum CurrentMode { get; set; }
|
||||
Mode CurrentMode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 设置当前模式
|
||||
|
@ -4,7 +4,6 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.Model;
|
||||
using static WCS.BLL.HardWare.WarningLight;
|
||||
|
||||
@ -19,11 +18,6 @@ namespace WCS.BLL.HardWare
|
||||
/// 货架是否处于报警中
|
||||
/// </summary>
|
||||
public bool IsWarning { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货架类型名称
|
||||
/// </summary>
|
||||
public string ShelfTypeName { get; set; }
|
||||
/// <summary>
|
||||
/// 货架ID 数据库中那个
|
||||
/// </summary>
|
||||
@ -48,12 +42,11 @@ namespace WCS.BLL.HardWare
|
||||
public LightColorEnum LightColor { get; set; }
|
||||
public List<int> ModuleIds { get; set; }
|
||||
public List<SmartShelfModule> Modules { get; set; }
|
||||
public List<MXL4ShelfModule> MXL4Modules { get; set; }
|
||||
public string ClientIp { get; set; }
|
||||
/// <summary>
|
||||
/// 货架当前模式
|
||||
/// </summary>
|
||||
public WCS.BLL.DbModels.Task.TaskModeEnum CurrentMode { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
/// <summary>
|
||||
/// 设置到当前模式的时间
|
||||
/// </summary>
|
||||
@ -83,7 +76,7 @@ namespace WCS.BLL.HardWare
|
||||
/// <summary>
|
||||
/// 设置货架模式
|
||||
/// </summary>
|
||||
public void SetCurrentMode(TaskModeEnum mode);
|
||||
public void SetCurrentMode(Mode mode);
|
||||
|
||||
/// <summary>
|
||||
/// 货架进入入库模式
|
||||
@ -136,4 +129,12 @@ namespace WCS.BLL.HardWare
|
||||
/// </summary>
|
||||
public void ShelfCheck();
|
||||
}
|
||||
|
||||
public enum Mode
|
||||
{
|
||||
待机模式 = 0,
|
||||
入库模式 = 1,
|
||||
出库模式 = 2,
|
||||
盘点模式 = 3
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,240 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Core;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
|
||||
namespace WCS.BLL.HardWare
|
||||
{
|
||||
public class MXL4ShelfModule
|
||||
{
|
||||
#region 协议
|
||||
/// <summary>
|
||||
/// 复位命令
|
||||
/// </summary>
|
||||
public byte[] ResetData = { 0xBE, 0x52, 0x54, 0x41, 0x52, 0x54, 0x0A, 0xED };
|
||||
|
||||
/// <summary>
|
||||
/// 发送任务ID 0x01改为实际发送的任务ID
|
||||
/// </summary>
|
||||
public byte[] SendTaskIdData = { 0xAA, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 发送料号信息
|
||||
/// </summary>
|
||||
public byte[] SendMatCodeData = { 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 发送名称信息
|
||||
/// </summary>
|
||||
public byte[] SendMatNameData = { 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 发送规格信息
|
||||
/// </summary>
|
||||
public byte[] SendMatSpecData = { 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 发送批次信息
|
||||
/// </summary>
|
||||
public byte[] SendMatBatchData = { 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 发送数量信息
|
||||
/// </summary>
|
||||
public byte[] SendMatQtyData = { 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 进入入库模式
|
||||
/// </summary>
|
||||
public byte[] GoInInstoreModeData = { 0xA1, 0x01, 0x04, 0x02, 0x40, 0x00, 0x00, 0x00 };
|
||||
/// <summary>
|
||||
/// 退出入库模式
|
||||
/// </summary>
|
||||
public byte[] GoOutInstoreModeData = { 0xA1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 进入出库模式
|
||||
/// </summary>
|
||||
public byte[] GoInOutstoreModeData = { 0xA2, 0x01, 0x04, 0x02, 0x40, 0x00, 0x00, 0x00 };
|
||||
/// <summary>
|
||||
/// 退出出库模式
|
||||
/// </summary>
|
||||
public byte[] GoOutOutstoreModeData = { 0xA2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 进入盘点模式
|
||||
/// </summary>
|
||||
public byte[] GoInStocktakingModeData = { 0xA3, 0x01, 0x04, 0x02, 0x40, 0x00, 0x00, 0x00 };
|
||||
/// <summary>
|
||||
/// 进入盘点模式
|
||||
/// </summary>
|
||||
public byte[] GoOutStocktakingModeData = { 0xA3, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 待机模式 无库存显示信息
|
||||
/// </summary>
|
||||
public byte[] StandbyNoInfoDisplayData = { 0xA4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
/// <summary>
|
||||
/// 发送库位编码
|
||||
/// </summary>
|
||||
public byte[] SendStoreCodeData = { 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
#endregion
|
||||
public int ModuleId { get; set; }
|
||||
public string ModuleCode { get; set; }
|
||||
public int BoardId { get; set; }
|
||||
public bool IsEnable { get; set; }
|
||||
public TaskModeEnum CurrentMode { get; set; } = TaskModeEnum.待机模式;
|
||||
|
||||
public bool IsNeedRefresh { get; set; } = true;
|
||||
|
||||
public void SetCurrentMode(TaskModeEnum currentMode)
|
||||
{
|
||||
CurrentMode = currentMode;
|
||||
}
|
||||
|
||||
|
||||
#region 液晶标签存在的协议
|
||||
/// <summary>
|
||||
/// 复位
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void Reset(TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.Send(tcpClient.GenerateMessage(BoardId, ResetData));
|
||||
|
||||
Task.Run(() => {
|
||||
if (!IsNeedRefresh)
|
||||
{
|
||||
Thread.Sleep(2000);
|
||||
IsNeedRefresh = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void StandbyNoInfoDisplay(TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, StandbyNoInfoDisplayData));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入入库模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoInInstoreMode(TCPClient tcpClient,ButtonColorEnum buttonColor)
|
||||
{
|
||||
GoInInstoreModeData[2] = (byte)buttonColor;
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoInInstoreModeData));
|
||||
//SetCurrentMode(TaskModeEnum.入库模式);
|
||||
}
|
||||
/// <summary>
|
||||
/// 退出入库模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoOutInstoreMode(TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoOutInstoreModeData));
|
||||
//SetCurrentMode(TaskModeEnum.入库模式);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入出库模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoInOutstoreMode(TCPClient tcpClient, ButtonColorEnum buttonColor)
|
||||
{
|
||||
GoInOutstoreModeData[2] = (byte)buttonColor;
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoInOutstoreModeData));
|
||||
//SetCurrentMode(TaskModeEnum.出库模式);
|
||||
}
|
||||
/// <summary>
|
||||
/// 退出出库模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoOutOutstoreMode(TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoOutInstoreModeData));
|
||||
//SetCurrentMode(TaskModeEnum.出库模式);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入盘点模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoInStocktakingMode(TCPClient tcpClient, ButtonColorEnum buttonColor)
|
||||
{
|
||||
GoInStocktakingModeData[2] = (byte)buttonColor;
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoInStocktakingModeData));
|
||||
//SetCurrentMode(TaskModeEnum.盘点模式);
|
||||
}
|
||||
/// <summary>
|
||||
/// 退出盘点模式
|
||||
/// </summary>
|
||||
/// <param name="tcpClient"></param>
|
||||
public void GoOutStocktakingMode(TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, GoOutStocktakingModeData));
|
||||
//SetCurrentMode(TaskModeEnum.盘点模式);
|
||||
}
|
||||
|
||||
//发送任务ID
|
||||
public void SendTaskId(int taskID, TCPClient tcpClient)
|
||||
{
|
||||
var taskIDData = Convert.ToByte(taskID);
|
||||
SendTaskIdData[1] = taskIDData;
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, SendTaskIdData));
|
||||
}
|
||||
//发送料号
|
||||
public void SendMatCode(string matCode, TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturnList(tcpClient.GenerateMessageList(BoardId, SendMatCodeData, matCode));
|
||||
}
|
||||
//发送名称
|
||||
public void SendMatName(string matName, TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturnList(tcpClient.GenerateMessageList(BoardId, SendMatNameData, matName));
|
||||
}
|
||||
//发送规格
|
||||
public void SendMatSpec(string matSpec, TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturnList(tcpClient.GenerateMessageList(BoardId, SendMatSpecData, matSpec));
|
||||
}
|
||||
//发送批次
|
||||
public void SendMatBatch(string matBatch, TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendThenReturnList(tcpClient.GenerateMessageList(BoardId, SendMatBatchData, matBatch));
|
||||
}
|
||||
//发送数量
|
||||
public void SendMatQty(int matQty, TCPClient tcpClient)
|
||||
{
|
||||
var boardIdData = BitConverter.GetBytes(unchecked((short)matQty));
|
||||
// 检查是否需要交换字节
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
// 如果是小端序系统,则交换字节
|
||||
byte temp = boardIdData[0];
|
||||
boardIdData[0] = boardIdData[1];
|
||||
boardIdData[1] = temp;
|
||||
}
|
||||
SendMatQtyData[1] = boardIdData[0];
|
||||
SendMatQtyData[2] = boardIdData[1];
|
||||
tcpClient.SendThenReturn(tcpClient.GenerateMessage(BoardId, SendMatQtyData));
|
||||
}
|
||||
|
||||
//发送库位编码
|
||||
public void SendStoreCode(string storeCode, TCPClient tcpClient)
|
||||
{
|
||||
tcpClient.SendList(tcpClient.GenerateMessageList(BoardId, SendStoreCodeData, storeCode));
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -1,289 +1,35 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Sockets;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Tool;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
using WCS.Model;
|
||||
using WCS.Model.ApiModel.MKYBackgroundThread;
|
||||
using WCS.Model.ApiModel.SingleLight;
|
||||
using static WCS.BLL.HardWare.WarningLight;
|
||||
using static WCS.BLL.Tool.Helper;
|
||||
|
||||
namespace WCS.BLL.HardWare
|
||||
{
|
||||
public class SingleLightShelf : IShelfBase
|
||||
{
|
||||
public SingleLightShelf(ShelfInfo shelfInfo)
|
||||
public SingleLightShelf(ShelfInfo shelfInfo)
|
||||
{
|
||||
ShelfId = shelfInfo.Id;
|
||||
ShelfCode = shelfInfo.ShelfCode;
|
||||
RowCounts = shelfInfo.Rowcounts;
|
||||
ColumnCounts = shelfInfo.Columncounts;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
ClientIp = shelfInfo.ClientIp;
|
||||
LightId = shelfInfo.LightId;
|
||||
IsService = shelfInfo.IsService;
|
||||
ClientIp = shelfInfo.ClientIp;
|
||||
|
||||
if (ClientIp.Contains("127"))
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
ShelfTypeName = shelfInfo.ShelfTypeName;
|
||||
|
||||
//初始化Module
|
||||
Logs.Write($"[初始化单灯货架]初始化模组{ShelfCode}");
|
||||
var task = Task.Run(() =>
|
||||
{
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == ShelfId).ToList();
|
||||
foreach (var module in modules)
|
||||
{
|
||||
MXL4Modules.Add(new MXL4ShelfModule()
|
||||
{
|
||||
ModuleId = module.Id,
|
||||
ModuleCode = module.ModuleCode,
|
||||
BoardId = module.BoardId,
|
||||
IsEnable = module.IsEnable,
|
||||
CurrentMode = TaskModeEnum.待机模式,
|
||||
|
||||
IsNeedRefresh = false,
|
||||
});
|
||||
}
|
||||
ModulesStr = string.Join(";", MXL4Modules.Select(t => t.ModuleCode));
|
||||
|
||||
ModuleIds = MXL4Modules.Select(t => t.BoardId).ToList();
|
||||
});
|
||||
|
||||
Logs.Write($"[初始化单灯货架]初始化单灯线程{ShelfCode}");
|
||||
//初始化单灯线程
|
||||
//一个货架存在一个线程去刷新数据
|
||||
Task.Run(async () =>
|
||||
{
|
||||
//等待模组加载完毕再开始发送数据进行刷新
|
||||
Task.WaitAll(task);
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(200);
|
||||
//未完成首次连接时 暂不发送
|
||||
if (IsService)
|
||||
{
|
||||
if (TcpCleint == null)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ClientIp.Contains("127"))
|
||||
{
|
||||
;
|
||||
}
|
||||
var tcpClient = TCPClientManager.Service.GetClients().Where(t => t.IP + ":" + t.Port.ToString() == ClientIp).FirstOrDefault();
|
||||
if (tcpClient == null)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
//查询属于本货架的任务
|
||||
var currentShelfTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ShelfId == this.ShelfId)
|
||||
.Where(t => t.IsSended == false || t.IsCancel == true)
|
||||
.OrderBy(t => t.CreateTime)
|
||||
.ToList();
|
||||
|
||||
//获取因为任务需要刷新的module
|
||||
var haveTaskModules = currentShelfTasks.Where(t => t.IsCancel == true || t.IsSended == false)
|
||||
.Select(t => t.ModuleId)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
MXL4Modules.ForEach(t =>
|
||||
{
|
||||
if (haveTaskModules.Contains(t.ModuleId))
|
||||
{
|
||||
t.IsNeedRefresh = true;
|
||||
}
|
||||
});
|
||||
|
||||
//查询是否有需要刷新的
|
||||
var needRefreshModules = MXL4Modules.Where(t => t.IsNeedRefresh)
|
||||
.ToList();
|
||||
foreach (var module in needRefreshModules)
|
||||
{
|
||||
Logs.Write($"[初始化单灯货架]存在需要刷新的{ShelfCode}");
|
||||
try
|
||||
{
|
||||
//查询当前是否有任务
|
||||
var currentTasks = currentShelfTasks.Where(t => t.ModuleId == module.ModuleId)
|
||||
.OrderBy(t => t.CreateTime)
|
||||
.ToList();
|
||||
#region 取消任务的逻辑 存在取消的任务 先删除任务
|
||||
var cancelTasks = currentTasks.Where(t => t.IsCancel == true)
|
||||
.ToList();
|
||||
if (cancelTasks != null && cancelTasks.Count > 0)
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]当前有任务需要取消!");
|
||||
//获取该库位还有无任务
|
||||
var currentModuleTask = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ShelfId == this.ShelfId)
|
||||
.Where(t => t.ModuleId == module.ModuleId)
|
||||
.Where(t => t.IsSended == true && t.IsCancel == false)
|
||||
.ToList();
|
||||
//当前库位无任务 关闭库位灯
|
||||
if (!currentModuleTask.Any())
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]当前库位{module.ModuleCode},无任务,关闭库位灯!");
|
||||
|
||||
var storeCodes = new List<string>();
|
||||
storeCodes.Add(module.ModuleCode);
|
||||
var shelfModel = new SingleLightShelfModel();
|
||||
//先不操作报警灯
|
||||
shelfModel.WarningLightMode = -1;
|
||||
shelfModel.WarningLightColor = 0;
|
||||
shelfModel.WarningBoardId = 0;
|
||||
|
||||
shelfModel.ClientIp = ClientIp;
|
||||
shelfModel.StoreList = new List<SingleLightStoreModel>();
|
||||
shelfModel.StoreList.Add(new SingleLightStoreModel()
|
||||
{
|
||||
BoardId = module.BoardId,
|
||||
LightColor = 0,
|
||||
LightMode = 0,
|
||||
});
|
||||
var response = SingleLightControl(shelfModel, storeCodes);
|
||||
if (response != null && response.Code == 200)
|
||||
{
|
||||
//删除取消的这个任务
|
||||
DbHelp.db.Deleteable(cancelTasks).ExecuteCommand();
|
||||
//删除被取消的任务
|
||||
await Task.Delay(20);
|
||||
module.IsNeedRefresh = false;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]当前库位{module.ModuleCode},还存在任务,不关闭库位灯!");
|
||||
|
||||
module.IsNeedRefresh = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//刷新报警灯
|
||||
if (needRefreshModules != null && needRefreshModules.Count > 0)
|
||||
{
|
||||
var currentTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ShelfId == this.ShelfId)
|
||||
.ToList();
|
||||
if (currentTasks != null && currentTasks.Count > 0)
|
||||
{
|
||||
var firstCurrentTask = currentTasks[0];
|
||||
//开报警灯 开大灯
|
||||
var moduleCodes = currentTasks.Select(t => t.ModuleCode)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var shelfModel = new SingleLightShelfModel();
|
||||
//报警灯长亮
|
||||
shelfModel.WarningLightMode = 1;
|
||||
shelfModel.WarningLightColor = (int)firstCurrentTask.ButtonColor;
|
||||
shelfModel.WarningBoardId = shelfInfo.LightId;
|
||||
shelfModel.ClientIp = ClientIp;
|
||||
shelfModel.StoreList = new List<SingleLightStoreModel>();
|
||||
|
||||
Logs.Write($"[单灯后台刷新线程]亮灯任务数量{currentTasks.Count}!");
|
||||
currentTasks.ForEach(task =>
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]亮灯任务{task.ModuleCode}!");
|
||||
var module = MXL4Modules.Where(t => t.ModuleCode == task.ModuleCode).First();
|
||||
if (module != null)
|
||||
{
|
||||
shelfModel.StoreList.Add(new SingleLightStoreModel()
|
||||
{
|
||||
BoardId = module.BoardId,
|
||||
LightColor = (int)task.ButtonColor,
|
||||
LightMode = 1,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var response = SingleLightControl(shelfModel, moduleCodes);
|
||||
//亮了灯的更新为已发送
|
||||
if (response != null && response.Code == 200)
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]当前灯继续亮!");
|
||||
|
||||
MXL4Modules.ForEach(t => t.IsNeedRefresh = false);
|
||||
currentTasks.ForEach(t => t.IsSended = true);
|
||||
DbHelp.db.Updateable(currentTasks).UpdateColumns(ct => new { ct.IsSended }).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//关报警灯 小灯也全关
|
||||
var shelfModel = new SingleLightShelfModel();
|
||||
//报警灯关闭
|
||||
shelfModel.WarningLightMode = 0;
|
||||
shelfModel.WarningLightColor = 0;
|
||||
shelfModel.WarningBoardId = shelfInfo.LightId;
|
||||
shelfModel.ClientIp = ClientIp;
|
||||
shelfModel.StoreList = new List<SingleLightStoreModel>();
|
||||
var response = SingleLightControl(shelfModel, new List<string>());
|
||||
if (response != null && response.Code == 200)
|
||||
{
|
||||
Logs.Write($"[单灯后台刷新线程]当前灯不继续亮!");
|
||||
MXL4Modules.ForEach(t => t.IsNeedRefresh = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}");
|
||||
}
|
||||
await Task.Delay(1500);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public bool IsService { get; set; }
|
||||
|
||||
public string ShelfTypeName { get; set; }
|
||||
public int ShelfId { get; set; }
|
||||
public string ShelfCode { get; set; }
|
||||
public int RowCounts { get; set; }
|
||||
public int ColumnCounts { get; set; }
|
||||
public TaskModeEnum CurrentMode { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
public string ModulesStr { get; set; }
|
||||
public string GroupName { get; set; }
|
||||
public MatInfoResponse InStoreData { get; set; }
|
||||
@ -302,9 +48,6 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
public TCPClient TcpCleint { get { return TCPClientManager.GetTCPClientByIPHost(ClientIp); } }
|
||||
|
||||
public List<MXL4ShelfModule> MXL4Modules { get; set; } = new List<MXL4ShelfModule>();
|
||||
|
||||
|
||||
public bool ConfirmStocktakingSingle(int BoardId, int LightNumber)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
@ -318,33 +61,33 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
public void GoInOutstore(List<OutOrderMatDetail> MatDetails, OutOrder outOrder, string OperateUser)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void GoInStocktaking()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void GoInStocktaking(List<StockTakingOrderMatDetail> MatDetails, StockTakingOrder outOrder)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void GoOutInstore()
|
||||
{
|
||||
//找到已亮灯的 灭灯
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void GoOutOutstore()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void GoOutStocktaking()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
@ -352,142 +95,19 @@ namespace WCS.BLL.HardWare
|
||||
return;
|
||||
}
|
||||
|
||||
public void SetCurrentMode(TaskModeEnum mode)
|
||||
public void SetCurrentMode(Mode mode)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void ShelfCheck()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Warning()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
public ResponseCommon<object> SingleLightControl(SingleLightShelfModel request, List<string> storeCodes)
|
||||
{
|
||||
try
|
||||
{
|
||||
var shelf = DbHelp.db.Queryable<ShelfInfo>().Where(t => t.Id == ShelfId)
|
||||
.First();
|
||||
var client = new
|
||||
{
|
||||
ClientIp = shelf.ClientIp,
|
||||
IsService = shelf.IsService,
|
||||
};
|
||||
|
||||
List<SingleLightShelfModel> singleLightShelfModels = new List<SingleLightShelfModel>();
|
||||
singleLightShelfModels.Add(request);
|
||||
|
||||
var sendData = Helper.SingleLightControl(singleLightShelfModels);
|
||||
if (client.IsService)
|
||||
{
|
||||
TCPClient tcpClient = TCPClientManager.GetTCPClientByIPHost(client.ClientIp);
|
||||
if (tcpClient != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData);
|
||||
Logs.Write("【单灯单独控制】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tcpClient = TCPClientManager.Service.GetClients().Where(t => t.IP + ":" + t.Port.ToString() == ClientIp).FirstOrDefault();
|
||||
if (tcpClient != null)
|
||||
{
|
||||
lock (tcpClient)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData, 0, sendData.Length);
|
||||
Logs.Write("【单灯单独控制】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"【单灯单独控制】{client}指令发送中遇到异常{ex.Message}",
|
||||
};
|
||||
}
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"【单灯单独控制】{client}未连接,以下指令未能成功发送",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => storeCodes.Contains(t.StoreCode))
|
||||
.ToList();
|
||||
//更新数据库灯的状态
|
||||
stores.ForEach(t =>
|
||||
{
|
||||
t.LightMode = request.WarningLightMode == -1 ? 0 : request.WarningLightMode;
|
||||
t.ColorMode = request.WarningLightColor;
|
||||
});
|
||||
DbHelp.db.Updateable(stores)
|
||||
.UpdateColumns(t => new { t.LightMode, t.ColorMode })
|
||||
.ExecuteCommand();
|
||||
|
||||
//返回成功
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
//操作失败
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"操作失败:{ex.Message}",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public string ExtractUntilSecondDashCorrect(string input)
|
||||
{
|
||||
int firstDashIndex = input.IndexOf('-');
|
||||
if (firstDashIndex == -1)
|
||||
{
|
||||
return string.Empty; // 如果没有找到第一个'-',则返回空字符串
|
||||
}
|
||||
|
||||
int secondDashIndex = input.IndexOf('-', firstDashIndex + 1);
|
||||
if (secondDashIndex == -1)
|
||||
{
|
||||
return input;
|
||||
}
|
||||
else
|
||||
{
|
||||
return input.Substring(0, secondDashIndex);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
@ -24,31 +23,30 @@ namespace WCS.BLL.HardWare
|
||||
ShelfCode = shelfInfo.ShelfCode;
|
||||
RowCounts = shelfInfo.Rowcounts;
|
||||
ColumnCounts = shelfInfo.Columncounts;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
ClientIp = shelfInfo.ClientIp;
|
||||
LightId = shelfInfo.LightId;
|
||||
WarningLight = new WarningLight() { LightId = shelfInfo.LightId };
|
||||
ShelfTypeName = shelfInfo.ShelfTypeName;
|
||||
|
||||
//初始化Module
|
||||
Task.Run(() =>
|
||||
{
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == ShelfId).ToList();
|
||||
foreach (var module in modules)
|
||||
{
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == ShelfId).ToList();
|
||||
foreach (var module in modules)
|
||||
Modules.Add(new SmartShelfModule()
|
||||
{
|
||||
Modules.Add(new SmartShelfModule()
|
||||
{
|
||||
ModuleId = module.Id,
|
||||
ModuleCode = module.ModuleCode,
|
||||
BoardId = module.BoardId,
|
||||
IsEnable = module.IsEnable,
|
||||
CurrentMode = module.CurrentMode
|
||||
});
|
||||
}
|
||||
ModulesStr = string.Join(";", Modules.Select(t => t.ModuleCode));
|
||||
ModuleId = module.Id,
|
||||
ModuleCode = module.ModuleCode,
|
||||
BoardId = module.BoardId,
|
||||
IsEnable = module.IsEnable,
|
||||
CurrentMode = module.CurrentMode
|
||||
});
|
||||
}
|
||||
ModulesStr = string.Join(";", Modules.Select(t => t.ModuleCode));
|
||||
|
||||
ModuleIds = Modules.Select(t => t.BoardId).ToList();
|
||||
});
|
||||
ModuleIds = Modules.Select(t => t.BoardId).ToList();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -56,7 +54,7 @@ namespace WCS.BLL.HardWare
|
||||
public string ShelfCode { get; set; }
|
||||
public int RowCounts { get; set; }
|
||||
public int ColumnCounts { get; set; }
|
||||
public TaskModeEnum CurrentMode { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
|
||||
public DateTime SetCurrentModeTime { get; set; }
|
||||
public string ModulesStr { get; set; }//当前货架所有模组的Str
|
||||
@ -71,15 +69,15 @@ namespace WCS.BLL.HardWare
|
||||
public WarningLight WarningLight { get; set; }
|
||||
public void ClearWarning()
|
||||
{
|
||||
if (this.CurrentMode == TaskModeEnum.入库模式)
|
||||
if (this.CurrentMode == Mode.入库模式)
|
||||
{
|
||||
WarningLight.BlueLight(TcpCleint);
|
||||
}
|
||||
else if (this.CurrentMode == TaskModeEnum.出库模式)
|
||||
else if (this.CurrentMode == Mode.出库模式)
|
||||
{
|
||||
WarningLight.GreenLight(TcpCleint);
|
||||
}
|
||||
else if (this.CurrentMode == TaskModeEnum.盘点模式)
|
||||
else if (this.CurrentMode == Mode.盘点模式)
|
||||
{
|
||||
WarningLight.GreenLight(TcpCleint);
|
||||
}
|
||||
@ -115,29 +113,26 @@ namespace WCS.BLL.HardWare
|
||||
public string WebSocketIpAddress { get; set; } = "127.0.0.2";
|
||||
|
||||
public string OutOperateUser { get; set; } = string.Empty;
|
||||
public List<MXL4ShelfModule> MXL4Modules { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||
public string ShelfTypeName { get; set; }
|
||||
|
||||
#region 协议处理
|
||||
public void GoInInstore(string? IPAddress)
|
||||
{
|
||||
try
|
||||
{
|
||||
Logs.Write($"[GoInInstore IPAddress]{IPAddress}", LogsType.Instore);
|
||||
if (this.CurrentMode == TaskModeEnum.入库模式)
|
||||
if (this.CurrentMode == Mode.入库模式)
|
||||
{
|
||||
CurrentCom = IPAddress;
|
||||
return;
|
||||
}
|
||||
//判断当前模式是否为待机模式
|
||||
else if (this.CurrentMode != TaskModeEnum.待机模式)
|
||||
else if (this.CurrentMode != Mode.待机模式)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//this.CurrentMode = TaskModeEnum.入库模式;
|
||||
SetCurrentMode(TaskModeEnum.入库模式);
|
||||
//this.CurrentMode = Mode.入库模式;
|
||||
SetCurrentMode(Mode.入库模式);
|
||||
}
|
||||
//清空错误
|
||||
ExceptionMessages.Clear();
|
||||
@ -162,7 +157,7 @@ namespace WCS.BLL.HardWare
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功进入入库模式 表示进入入库模式成功,跳出循环
|
||||
var isExistsNotInstore = Modules.Where(t => t.CurrentMode != TaskModeEnum.入库模式)
|
||||
var isExistsNotInstore = Modules.Where(t => t.CurrentMode != Mode.入库模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsNotInstore)
|
||||
@ -185,7 +180,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
|
||||
//循环结束后判断当前板子状态
|
||||
var notInstoreList = Modules.Where(t => t.CurrentMode != TaskModeEnum.入库模式)
|
||||
var notInstoreList = Modules.Where(t => t.CurrentMode != Mode.入库模式)
|
||||
.Where(t => t.IsEnable).ToList();
|
||||
|
||||
if (notInstoreList.Count > 0)
|
||||
@ -236,14 +231,14 @@ namespace WCS.BLL.HardWare
|
||||
public void GoOutInstore()
|
||||
{
|
||||
//当前货架是否为入库模式
|
||||
if (CurrentMode != TaskModeEnum.入库模式)
|
||||
if (CurrentMode != Mode.入库模式)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//this.CurrentMode = TaskModeEnum.待机模式;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
//this.CurrentMode = Mode.待机模式;
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
}
|
||||
|
||||
//清空错误
|
||||
@ -252,7 +247,7 @@ namespace WCS.BLL.HardWare
|
||||
foreach (var module in Modules.Where(t => t.IsEnable)
|
||||
.ToList())
|
||||
{
|
||||
if (module.CurrentMode == TaskModeEnum.入库模式)
|
||||
if (module.CurrentMode == Mode.入库模式)
|
||||
module.GoOutInstoreMode(TcpCleint);
|
||||
}
|
||||
|
||||
@ -263,7 +258,7 @@ namespace WCS.BLL.HardWare
|
||||
{
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
//所有板子是否成功退出入库模式
|
||||
var isExistsInstore = Modules.Where(t => t.CurrentMode != TaskModeEnum.待机模式)
|
||||
var isExistsInstore = Modules.Where(t => t.CurrentMode != Mode.待机模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsInstore)
|
||||
@ -275,13 +270,13 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
|
||||
//循环结束后判断当前板子状态
|
||||
var list = Modules.Where(t => t.CurrentMode != TaskModeEnum.待机模式)
|
||||
var list = Modules.Where(t => t.CurrentMode != Mode.待机模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.ToList();
|
||||
if (list.Count > 0)
|
||||
{
|
||||
//CurrentMode = TaskModeEnum.待机模式;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
//CurrentMode = Mode.待机模式;
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
foreach (var item in list)
|
||||
{
|
||||
ExceptionMessages.Add($"模组{item.ModuleCode}未成功退出入库模式!");
|
||||
@ -373,7 +368,7 @@ namespace WCS.BLL.HardWare
|
||||
//查一下是否是当前发料单最后一个货架(在出库模式 同一个发料单下)
|
||||
var isLastShelf = ShelfManager.Shelves
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Any();
|
||||
if (!isLastShelf)
|
||||
{
|
||||
@ -422,7 +417,7 @@ namespace WCS.BLL.HardWare
|
||||
.ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList();
|
||||
|
||||
var otherModeShelfs = shelfs.Where(t => t.CurrentMode != TaskModeEnum.待机模式).ToList();
|
||||
var otherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.待机模式).ToList();
|
||||
if (otherModeShelfs != null && otherModeShelfs.Count > 0)
|
||||
{
|
||||
otherModeShelfs.ForEach(t =>
|
||||
@ -455,7 +450,7 @@ namespace WCS.BLL.HardWare
|
||||
Task.Run(() =>
|
||||
{
|
||||
//判断是否是当前订单最后一个出库货架
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber)
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber)
|
||||
.Any();
|
||||
//WebSocket通知前台以更新左侧出库单列表的状态
|
||||
if (!isOuting)
|
||||
@ -484,7 +479,7 @@ namespace WCS.BLL.HardWare
|
||||
Logs.Write($"发料单{OrderNumber},非最后一个出库货架!", LogsType.Outstore);
|
||||
var otherShelfs = ShelfManager.Shelves
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
|
||||
otherShelfs.ForEach(shelf =>
|
||||
@ -517,7 +512,7 @@ namespace WCS.BLL.HardWare
|
||||
Task.Run(() =>
|
||||
{
|
||||
//判断是否是当前订单最后一个出库货架
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber)
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber)
|
||||
.Any();
|
||||
//WebSocket通知前台以更新左侧出库单列表的状态
|
||||
if (!isOuting)
|
||||
@ -561,14 +556,14 @@ namespace WCS.BLL.HardWare
|
||||
try
|
||||
{
|
||||
//第一步:设置货架当前模式
|
||||
if (CurrentMode != TaskModeEnum.待机模式)
|
||||
if (CurrentMode != Mode.待机模式)
|
||||
{
|
||||
Modules.ForEach(t => { t.Reset(TcpCleint); });
|
||||
//复位需要点时间间隔才能响应指令
|
||||
Thread.Sleep(1500);
|
||||
}
|
||||
//CurrentMode = TaskModeEnum.出库模式;
|
||||
SetCurrentMode(TaskModeEnum.出库模式);
|
||||
//CurrentMode = Mode.出库模式;
|
||||
SetCurrentMode(Mode.出库模式);
|
||||
//设置当前操作人
|
||||
OutOperateUser = OperateUser;
|
||||
|
||||
@ -610,7 +605,7 @@ namespace WCS.BLL.HardWare
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功进入出库模式 表示进入出库模式成功,跳出循环
|
||||
var isExistsNotInstore = outModules.Where(t => t.CurrentMode != TaskModeEnum.出库模式)
|
||||
var isExistsNotInstore = outModules.Where(t => t.CurrentMode != Mode.出库模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsNotInstore)
|
||||
@ -620,7 +615,7 @@ namespace WCS.BLL.HardWare
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = outModules.Where(t => t.IsEnable && t.CurrentMode != TaskModeEnum.出库模式).ToList();
|
||||
var list = outModules.Where(t => t.IsEnable && t.CurrentMode != Mode.出库模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未进入出库模式!").ToList();
|
||||
@ -654,7 +649,7 @@ namespace WCS.BLL.HardWare
|
||||
{
|
||||
Logs.Write($"货架【{ShelfCode}】,开始退出出库", LogsType.Outstore);
|
||||
//找到在出库中的模组
|
||||
var outingModules = Modules.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
var outingModules = Modules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
foreach (var module in outingModules)
|
||||
{
|
||||
@ -669,7 +664,7 @@ namespace WCS.BLL.HardWare
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功退出出库模式 表示退出出库模式成功,跳出循环
|
||||
var isExistsOutstore = outingModules.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
var isExistsOutstore = outingModules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsOutstore)
|
||||
@ -679,7 +674,7 @@ namespace WCS.BLL.HardWare
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = outingModules.Where(t => t.IsEnable && t.CurrentMode == TaskModeEnum.出库模式).ToList();
|
||||
var list = outingModules.Where(t => t.IsEnable && t.CurrentMode == Mode.出库模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未退出出库模式!").ToList();
|
||||
@ -701,13 +696,13 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
CurrentOutStoreMatSNs.Clear();
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
Logs.Write($"货架【{ShelfCode}】,结束退出出库", LogsType.Outstore);
|
||||
|
||||
//Task.Run(() =>
|
||||
//{
|
||||
// //判断是否是当前订单最后一个出库货架
|
||||
// var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber)
|
||||
// var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber)
|
||||
// .Any();
|
||||
// //WebSocket通知前台以更新左侧出库单列表的状态
|
||||
// if (!isOuting)
|
||||
@ -735,19 +730,19 @@ namespace WCS.BLL.HardWare
|
||||
try
|
||||
{
|
||||
//第一步:设置货架当前模式
|
||||
if (CurrentMode != TaskModeEnum.待机模式)
|
||||
if (CurrentMode != Mode.待机模式)
|
||||
{
|
||||
Modules.ForEach(t =>
|
||||
{
|
||||
if (CurrentMode != TaskModeEnum.待机模式)
|
||||
if (CurrentMode != Mode.待机模式)
|
||||
t.Reset(TcpCleint);
|
||||
});
|
||||
//复位需要点时间间隔才能响应指令
|
||||
Thread.Sleep(1500);
|
||||
}
|
||||
|
||||
//CurrentMode = TaskModeEnum.盘点模式;
|
||||
SetCurrentMode(TaskModeEnum.盘点模式);
|
||||
//CurrentMode = Mode.盘点模式;
|
||||
SetCurrentMode(Mode.盘点模式);
|
||||
|
||||
//第二步:货架添加 盘点单号 记录当前盘点的发料单
|
||||
CurrentStockTakingOrder = stockTakingOrder;
|
||||
@ -788,7 +783,7 @@ namespace WCS.BLL.HardWare
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功进入盘点模式 表示进入盘点模式成功,跳出循环
|
||||
var isExistsNotInstore = outModules.Where(t => t.CurrentMode != TaskModeEnum.盘点模式)
|
||||
var isExistsNotInstore = outModules.Where(t => t.CurrentMode != Mode.盘点模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsNotInstore)
|
||||
@ -798,7 +793,7 @@ namespace WCS.BLL.HardWare
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = outModules.Where(t => t.IsEnable && t.CurrentMode != TaskModeEnum.盘点模式).ToList();
|
||||
var list = outModules.Where(t => t.IsEnable && t.CurrentMode != Mode.盘点模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未进入盘点模式!").ToList();
|
||||
@ -848,7 +843,7 @@ namespace WCS.BLL.HardWare
|
||||
public void GoOutStocktaking()
|
||||
{
|
||||
//找到在盘点中的模组
|
||||
var stockTakingModules = Modules.Where(t => t.CurrentMode == TaskModeEnum.盘点模式)
|
||||
var stockTakingModules = Modules.Where(t => t.CurrentMode == Mode.盘点模式)
|
||||
.ToList();
|
||||
foreach (var module in stockTakingModules)
|
||||
{
|
||||
@ -865,7 +860,7 @@ namespace WCS.BLL.HardWare
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功退出盘点模式 表示退出盘点模式成功,跳出循环
|
||||
var isExistsNotInstore = stockTakingModules.Where(t => t.CurrentMode == TaskModeEnum.盘点模式)
|
||||
var isExistsNotInstore = stockTakingModules.Where(t => t.CurrentMode == Mode.盘点模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsNotInstore)
|
||||
@ -875,7 +870,7 @@ namespace WCS.BLL.HardWare
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = stockTakingModules.Where(t => t.IsEnable && t.CurrentMode == TaskModeEnum.盘点模式).ToList();
|
||||
var list = stockTakingModules.Where(t => t.IsEnable && t.CurrentMode == Mode.盘点模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未退出盘点模式!").ToList();
|
||||
@ -897,8 +892,8 @@ namespace WCS.BLL.HardWare
|
||||
});
|
||||
CurrentOutStoreMatSNs.Clear();
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
//this.CurrentMode = TaskModeEnum.待机模式;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
//this.CurrentMode = Mode.待机模式;
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
@ -912,8 +907,8 @@ namespace WCS.BLL.HardWare
|
||||
});
|
||||
}
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
//this.CurrentMode = TaskModeEnum.待机模式;
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
//this.CurrentMode = Mode.待机模式;
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
}
|
||||
|
||||
public void QueryVoltage(int moduleId)
|
||||
@ -934,7 +929,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCurrentMode(TaskModeEnum mode)
|
||||
public void SetCurrentMode(Mode mode)
|
||||
{
|
||||
this.CurrentMode = mode;
|
||||
this.SetCurrentModeTime = DateTime.Now;
|
||||
@ -959,7 +954,7 @@ namespace WCS.BLL.HardWare
|
||||
{
|
||||
try
|
||||
{
|
||||
if (CurrentMode == TaskModeEnum.待机模式)
|
||||
if (CurrentMode == Mode.待机模式)
|
||||
OrderNumber = "自检中...";
|
||||
foreach (var module in Modules.Where(t => t.IsEnable).ToList())
|
||||
{
|
||||
@ -1022,7 +1017,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (CurrentMode == TaskModeEnum.待机模式)
|
||||
if (CurrentMode == Mode.待机模式)
|
||||
OrderNumber = string.Empty;
|
||||
}
|
||||
}
|
||||
@ -1135,7 +1130,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.入库模式;
|
||||
module.CurrentMode = Mode.入库模式;
|
||||
}
|
||||
}
|
||||
//库存物料与实际情况不匹配
|
||||
@ -1148,7 +1143,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.入库模式;
|
||||
module.CurrentMode = Mode.入库模式;
|
||||
}
|
||||
//获取当前板所有库位
|
||||
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
|
||||
@ -1263,14 +1258,14 @@ namespace WCS.BLL.HardWare
|
||||
/// <param name="data"></param>
|
||||
public void GoOutInstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == TaskModeEnum.入库模式).FirstOrDefault();
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == Mode.入库模式).FirstOrDefault();
|
||||
if (module == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.待机模式;
|
||||
module.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1472,7 +1467,11 @@ namespace WCS.BLL.HardWare
|
||||
SolvedGuids = warnings.Select(t => t.Guid).ToList(),
|
||||
};
|
||||
WarningManager.SendWarning(warningModel);
|
||||
|
||||
//自动消除本地缓存的报警
|
||||
warnings.ForEach(warning =>
|
||||
{
|
||||
WarningManager.ClearWarning(warning, SolveTypeEnum.忽略);
|
||||
});
|
||||
|
||||
ProcessingExceptions.RemoveAll(t => t.BoardId == boardId);
|
||||
}
|
||||
@ -1556,7 +1555,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.出库模式;
|
||||
module.CurrentMode = Mode.出库模式;
|
||||
}
|
||||
}
|
||||
//库存物料与实际情况不匹配
|
||||
@ -1570,7 +1569,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.出库模式;
|
||||
module.CurrentMode = Mode.出库模式;
|
||||
}
|
||||
//获取当前板所有库位
|
||||
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
|
||||
@ -1676,7 +1675,7 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
public void OutstoreReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
if (CurrentMode != TaskModeEnum.出库模式)
|
||||
if (CurrentMode != Mode.出库模式)
|
||||
{
|
||||
Logs.Write($"出库错误:{ShelfCode}该货架模式不是出库模式或盘点模式!", LogsType.Outstore);
|
||||
return;
|
||||
@ -1699,10 +1698,51 @@ namespace WCS.BLL.HardWare
|
||||
//当前库位未记录MatSn
|
||||
if (string.IsNullOrEmpty(storeInfo.CurrentMatSn))
|
||||
{
|
||||
//该库位是需要出库的库位,物料被多次取出or给了多个正常出库信号
|
||||
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}", LogsType.Outstore);
|
||||
//暂不进行处理
|
||||
return;
|
||||
if (data[TcpCleint.PreFixLength + 6] == 0x0D &&
|
||||
data[TcpCleint.PreFixLength + 7] == 0x0D &&
|
||||
data[TcpCleint.PreFixLength + 8] == 0x0D &&
|
||||
data[TcpCleint.PreFixLength + 9] == 0x0D)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
var historyVoltage = new StoreInfoHistoryVoltage()
|
||||
{
|
||||
StoreId = storeInfo.Id,
|
||||
StoreCode = storeInfo.StoreCode,
|
||||
ShelfTypeId = storeInfo.ShelfTypeId,
|
||||
ModuleId = storeInfo.ModuleId,
|
||||
ModuleCode = storeInfo.ModuleCode,
|
||||
ShelfId = storeInfo.ShelfId,
|
||||
ShelfCode = storeInfo.ShelfCode,
|
||||
BoardId = storeInfo.BoardId,
|
||||
LightNumber = storeInfo.LightNumber,
|
||||
Priority = storeInfo.Priority,
|
||||
CurrentMatSn = storeInfo.CurrentMatSn,
|
||||
CurrentVoltage = storeInfo.CurrentVoltage,
|
||||
StandardVoltage = storeInfo.StandardVoltage,
|
||||
OffsetVoltage = storeInfo.OffsetVoltage,
|
||||
BigShelfCode = storeInfo.BigShelfCode,
|
||||
R = storeInfo.R,
|
||||
C = storeInfo.C,
|
||||
Wei = storeInfo.Wei,
|
||||
GroupName = "出库自动标定记录历史电压",
|
||||
CreateTime = DateTime.Now,
|
||||
};
|
||||
//自动保存最新的电压值
|
||||
storeInfo.CurrentVoltage = (data[TcpCleint.PreFixLength + 4] << 8) + data[TcpCleint.PreFixLength + 5];
|
||||
DbHelp.db.Insertable(historyVoltage).ExecuteCommand();
|
||||
DbHelp.db.Updateable(storeInfo).ExecuteCommand();
|
||||
});
|
||||
Thread.Sleep(10);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//该库位是需要出库的库位,物料被多次取出or给了多个正常出库信号
|
||||
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}", LogsType.Outstore);
|
||||
//暂不进行处理
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//不是本次出库需要出的物料
|
||||
@ -1808,7 +1848,7 @@ namespace WCS.BLL.HardWare
|
||||
//更新时间 避免超时被自动退出
|
||||
Task.Run(() =>
|
||||
{
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber).ToList();
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber).ToList();
|
||||
foreach (var shelf in shelves)
|
||||
{
|
||||
shelf.SetCurrentModeTime = DateTime.Now;
|
||||
@ -1863,7 +1903,7 @@ namespace WCS.BLL.HardWare
|
||||
//查一下是否是当前发料单最后一个货架(在出库模式 同一个发料单下)
|
||||
var isLastShelf = ShelfManager.Shelves
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Any();
|
||||
if (!isLastShelf)
|
||||
{
|
||||
@ -1912,7 +1952,7 @@ namespace WCS.BLL.HardWare
|
||||
.ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList();
|
||||
|
||||
var otherModeShelfs = shelfs.Where(t => t.CurrentMode != TaskModeEnum.待机模式).ToList();
|
||||
var otherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.待机模式).ToList();
|
||||
if (otherModeShelfs != null && otherModeShelfs.Count > 0)
|
||||
{
|
||||
otherModeShelfs.ForEach(t =>
|
||||
@ -1944,7 +1984,7 @@ namespace WCS.BLL.HardWare
|
||||
Task.Run(() =>
|
||||
{
|
||||
//判断是否是当前订单最后一个出库货架
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber)
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber)
|
||||
.Any();
|
||||
//WebSocket通知前台以更新左侧出库单列表的状态
|
||||
if (!isOuting)
|
||||
@ -1972,7 +2012,7 @@ namespace WCS.BLL.HardWare
|
||||
Logs.Write($"发料单{OrderNumber},非最后一个出库货架!", LogsType.Outstore);
|
||||
var otherShelfs = ShelfManager.Shelves
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
|
||||
otherShelfs.ForEach(shelf =>
|
||||
@ -2003,7 +2043,7 @@ namespace WCS.BLL.HardWare
|
||||
Task.Run(() =>
|
||||
{
|
||||
//判断是否是当前订单最后一个出库货架
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.OrderNumber == OrderNumber)
|
||||
var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber)
|
||||
.Any();
|
||||
//WebSocket通知前台以更新左侧出库单列表的状态
|
||||
if (!isOuting)
|
||||
@ -2088,14 +2128,14 @@ namespace WCS.BLL.HardWare
|
||||
/// <param name="data"></param>
|
||||
public void GoOutOutstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == TaskModeEnum.出库模式).FirstOrDefault();
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == Mode.出库模式).FirstOrDefault();
|
||||
if (module == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.待机模式;
|
||||
module.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2141,6 +2181,12 @@ namespace WCS.BLL.HardWare
|
||||
SolvedGuids = warnings.Select(t => t.Guid).ToList(),
|
||||
};
|
||||
WarningManager.SendWarning(warningModel);
|
||||
//自动消除本地缓存的报警
|
||||
warnings.ForEach(warning =>
|
||||
{
|
||||
Logs.Write($"ClearWarning,{warning.Guid}", LogsType.Outstore);
|
||||
WarningManager.ClearWarning(warning, SolveTypeEnum.忽略);
|
||||
});
|
||||
ProcessingExceptions.RemoveAll(t => t.BoardId == boardId);
|
||||
}
|
||||
break;
|
||||
@ -2216,20 +2262,20 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.盘点模式;
|
||||
module.CurrentMode = Mode.盘点模式;
|
||||
}
|
||||
}
|
||||
|
||||
public void GoOutStockTakingReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == TaskModeEnum.盘点模式).FirstOrDefault();
|
||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == Mode.盘点模式).FirstOrDefault();
|
||||
if (module == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.待机模式;
|
||||
module.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2244,7 +2290,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
module.CurrentMode = TaskModeEnum.待机模式;
|
||||
module.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,7 +6,6 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Core;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
|
||||
@ -98,7 +97,7 @@ namespace WCS.BLL.HardWare
|
||||
public string ModuleCode { get; set; }
|
||||
public int BoardId { get; set; }
|
||||
public bool IsEnable { get; set; }
|
||||
public TaskModeEnum CurrentMode { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
/// <summary>
|
||||
/// 是否已发送自检命令
|
||||
/// </summary>
|
||||
@ -113,7 +112,7 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
public void GoInInstoreMode(TCPClient tcpClient)
|
||||
{
|
||||
if (CurrentMode != TaskModeEnum.待机模式)
|
||||
if (CurrentMode != Mode.待机模式)
|
||||
{
|
||||
//TO DO 退出对应的模式 然后再发送进入入库模式
|
||||
}
|
||||
@ -169,7 +168,7 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
public void GoOutInstoreMode(TCPClient tcpClient)
|
||||
{
|
||||
if (CurrentMode == TaskModeEnum.入库模式)
|
||||
if (CurrentMode == Mode.入库模式)
|
||||
{
|
||||
tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoOutInstoreData));
|
||||
}
|
||||
@ -195,7 +194,7 @@ namespace WCS.BLL.HardWare
|
||||
/// <param name="tcpClient"></param>
|
||||
public void ShelfCheck(TCPClient tcpClient)
|
||||
{
|
||||
if (CurrentMode != TaskModeEnum.待机模式)
|
||||
if (CurrentMode != Mode.待机模式)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ namespace WCS.BLL.Manager
|
||||
}
|
||||
//手动修改后台配置后再进行CodeFirst 数据库的生成、表的生成
|
||||
//如果不配置此参数 每次启动都会持续几十秒才能成功启动后端
|
||||
if (true)
|
||||
if (LocalFile.Config.IsResetDBOrTable)
|
||||
{
|
||||
#region 建库建表 只在表有变动时运行
|
||||
DbHelp.db.DbMaintenance.CreateDatabase();
|
||||
@ -70,17 +70,14 @@ namespace WCS.BLL.Manager
|
||||
DbHelp.dbLog.DbMaintenance.CreateDatabase();
|
||||
Logs.Write("【初始化数据库】创建数据库", LogsType.StartBoot);
|
||||
|
||||
DbHelp.db.CodeFirst.InitTables(typeof(ModuleInfo), typeof(ShelfInfo), typeof(StoreInfo)
|
||||
DbHelp.db.CodeFirst.InitTables(typeof(ModuleInfo), typeof(ShelfInfo), typeof(StoreInfo),typeof(StoreInfoHistoryVoltage)
|
||||
, typeof(InventoryDetail), typeof(OutOrder), typeof(OutOrderDetail), typeof(OutOrderMatDetail)
|
||||
, typeof(ShelfTypeInfo), typeof(MatBaseInfo), typeof(MatInfo)
|
||||
, typeof(StockTakingOrder), typeof(StockTakingOrderMatDetail), typeof(InOutRecord)
|
||||
, typeof(DocumentSerialNumber), typeof(OrderLight), typeof(MatInfoLog)
|
||||
, typeof(AppVersion)
|
||||
,typeof(CurrentTask),typeof(FinishedTask), typeof(UploadededTask)
|
||||
);
|
||||
|
||||
//DbHelp.db.CodeFirst.InitTables(typeof(ShelfInfo));
|
||||
|
||||
Logs.Write("【初始化数据库】db(业务数据库)建表", LogsType.StartBoot);
|
||||
DbHelp.dbLog.CodeFirst.InitTables(typeof(SystemApiLogRecord));
|
||||
Logs.Write("【初始化数据库】dblog(日志数据库)建表", LogsType.StartBoot);
|
||||
|
@ -1,233 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.DAL.Db.AuthDb;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL;
|
||||
using WCS.Model.ApiModel.InOutRecord;
|
||||
using WCS.Model.ApiModel.MXBackgroundThread;
|
||||
using WCS.Model;
|
||||
using WCS.BLL.Tool;
|
||||
using SqlSugar;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.Model.ApiModel.MKYBackgroundThread;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace WCS.BLL.Manager
|
||||
{
|
||||
public static class MKYBackgroundThread
|
||||
{
|
||||
public static void InitBackgroundThread()
|
||||
{
|
||||
#region 调用WMS接口获取具体的库存列表并展示在液晶标签上
|
||||
#endregion
|
||||
|
||||
#region 定时任务:回传数据至WMS系统
|
||||
Task.Run(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
//回传数据的时间间隔
|
||||
Thread.Sleep(2000);
|
||||
//先判断是否需要获取token
|
||||
if (string.IsNullOrEmpty(LocalStatic.WMSToken))
|
||||
{
|
||||
try
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】token为空 开始获取token", LogsType.Info);
|
||||
#region 登录获取token
|
||||
var request = new LoginRequest()
|
||||
{
|
||||
userName = "cmeimZtwcs",
|
||||
password = "Cmeim@ztwcs2024!@#"
|
||||
};
|
||||
var result = ApiHelp.GetDataFromHttpShortTime<LoginResponse>(@"http://10.41.235.10:8989/login", request, "POST", true);
|
||||
if (result != null && (result.code == 200))
|
||||
{
|
||||
//获取到最新的token
|
||||
LocalStatic.WMSToken = result.data;
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】调用接口获取token成功!token为{result.data}", LogsType.Info);
|
||||
}
|
||||
else if (result != null && (result.code == 500) && result.message.Contains("未查询到条码信息【"))
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】调用接口获取token失败", LogsType.Info);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】获取token异常" + ex.Message, LogsType.Info);
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】获取token异常" + ex.StackTrace, LogsType.Info);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
//获取已完成未提交的任务
|
||||
var finsishedTaks = DbHelp.db.Queryable<FinishedTask>()
|
||||
.Where(t => t.FinishTime > DateTime.Now.AddDays(-1))//只上传1天内的 后续调整
|
||||
.OrderBy(t => t.FinishTime)
|
||||
.ToList();
|
||||
//循环进行上传
|
||||
for (int i = 0; i < finsishedTaks.Count; i++)
|
||||
{
|
||||
var finishedTask = finsishedTaks[i];
|
||||
try
|
||||
{
|
||||
//上传单据
|
||||
#region 上传单据
|
||||
var request = new SysOrderRequest()
|
||||
{
|
||||
guid = finishedTask.Guid.ToString(),
|
||||
itemNo = finishedTask.ItemNo,
|
||||
matCode = finishedTask.MatCode,
|
||||
matBatch = finishedTask.MatBatch,
|
||||
matSN = finishedTask.MatSN,
|
||||
orderNumber = finishedTask.OrderNumber,
|
||||
orderType = (int)finishedTask.TaskMode,
|
||||
storeCode = finishedTask.ModuleCode,
|
||||
qty = finishedTask.FinishQty
|
||||
};
|
||||
var result = ApiHelp.GetDataFromHttp<SysOrderResponse>(@"http://10.41.235.10:8989/ztwcs/stockBillBack", request, "POST", true);
|
||||
if (result != null && (result.code == 200))
|
||||
{
|
||||
//上传成功
|
||||
var uploadedTask = new UploadededTask()
|
||||
{
|
||||
ShelfId = finishedTask.ShelfId,
|
||||
ShelfCode = finishedTask.ShelfCode,
|
||||
ModuleId = finishedTask.ModuleId,
|
||||
ModuleCode = finishedTask.ModuleCode,
|
||||
StoreId = finishedTask.StoreId,
|
||||
StoreCode = finishedTask.StoreCode,
|
||||
TaskID = finishedTask.TaskID,
|
||||
ItemNo = finishedTask.ItemNo,
|
||||
Guid = finishedTask.Guid,
|
||||
TaskMode = finishedTask.TaskMode,
|
||||
OrderNumber = finishedTask.OrderNumber,
|
||||
ButtonColor = finishedTask.ButtonColor,
|
||||
MatCode = finishedTask.MatCode,
|
||||
MatName = finishedTask.MatName,
|
||||
MatSpec = finishedTask.MatSpec,
|
||||
MatBatch = finishedTask.MatBatch,
|
||||
MatSN = finishedTask.MatSN,
|
||||
Qty = finishedTask.Qty,
|
||||
CreateTime = finishedTask.CreateTime,
|
||||
FinishQty = finishedTask.FinishQty,
|
||||
FinishTime = finishedTask.FinishTime,
|
||||
UploadTime = DateTime.Now,
|
||||
};
|
||||
DbHelp.db.Insertable(uploadedTask).ExecuteCommand();
|
||||
DbHelp.db.Deleteable(finishedTask).ExecuteCommand();
|
||||
}
|
||||
//上传成功 但是此物料已经被删除!!!
|
||||
else if (result != null && (result.code == 500) && result.message.Contains("未查询到条码信息【"))
|
||||
{
|
||||
//上传成功
|
||||
var uploadedTask = new UploadededTask()
|
||||
{
|
||||
ShelfId = finishedTask.ShelfId,
|
||||
ShelfCode = finishedTask.ShelfCode,
|
||||
ModuleId = finishedTask.ModuleId,
|
||||
ModuleCode = finishedTask.ModuleCode,
|
||||
StoreId = finishedTask.StoreId,
|
||||
StoreCode = finishedTask.StoreCode,
|
||||
TaskID = finishedTask.TaskID,
|
||||
ItemNo = finishedTask.ItemNo,
|
||||
Guid = finishedTask.Guid,
|
||||
TaskMode = finishedTask.TaskMode,
|
||||
OrderNumber = finishedTask.OrderNumber,
|
||||
ButtonColor = finishedTask.ButtonColor,
|
||||
MatCode = finishedTask.MatCode,
|
||||
MatName = finishedTask.MatName,
|
||||
MatSpec = finishedTask.MatSpec,
|
||||
MatBatch = finishedTask.MatBatch,
|
||||
MatSN = finishedTask.MatSN + "(已删除)",
|
||||
Qty = finishedTask.Qty,
|
||||
CreateTime = finishedTask.CreateTime,
|
||||
FinishQty = finishedTask.FinishQty,
|
||||
FinishTime = finishedTask.FinishTime,
|
||||
UploadTime = DateTime.Now,
|
||||
};
|
||||
DbHelp.db.Insertable(uploadedTask).ExecuteCommand();
|
||||
DbHelp.db.Deleteable(finishedTask).ExecuteCommand();
|
||||
}
|
||||
else if (result != null && (result.code == 10000) &&
|
||||
(result.message.Contains("token") || result.message.Contains("请重新登录") || result.message.Contains("无token") || result.message.Contains("无效token") || result.message.Contains("token校验失败"))
|
||||
)
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】根据wms接口返回 token已过期或者错误,清空token。", LogsType.Info);
|
||||
LocalStatic.WMSToken = string.Empty;
|
||||
break;
|
||||
}
|
||||
else if (result != null && (result.code == 500) &&
|
||||
(result.message.Contains("token") || result.message.Contains("请重新登录") || result.message.Contains("无token") || result.message.Contains("无效token") || result.message.Contains("token校验失败"))
|
||||
)
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】根据wms接口返回 token已过期或者错误,清空token。", LogsType.Info);
|
||||
LocalStatic.WMSToken = string.Empty;
|
||||
break;
|
||||
}
|
||||
#endregion
|
||||
|
||||
//为了调试
|
||||
//Random random = new Random();
|
||||
//int number = random.Next(1 , 100);
|
||||
//if (number <= 30)
|
||||
//{
|
||||
// //上传成功
|
||||
// var uploadedTask = new UploadededTask()
|
||||
// {
|
||||
// ShelfId = finishedTask.ShelfId,
|
||||
// ShelfCode = finishedTask.ShelfCode,
|
||||
// ModuleId = finishedTask.ModuleId,
|
||||
// ModuleCode = finishedTask.ModuleCode,
|
||||
// StoreId = finishedTask.StoreId,
|
||||
// StoreCode = finishedTask.StoreCode,
|
||||
// TaskID = finishedTask.TaskID,
|
||||
// ItemNo = finishedTask.ItemNo,
|
||||
// Guid = finishedTask.Guid,
|
||||
// TaskMode = finishedTask.TaskMode,
|
||||
// OrderNumber = finishedTask.OrderNumber,
|
||||
// ButtonColor = finishedTask.ButtonColor,
|
||||
// MatCode = finishedTask.MatCode,
|
||||
// MatName = finishedTask.MatName,
|
||||
// MatSpec = finishedTask.MatSpec,
|
||||
// MatBatch = finishedTask.MatBatch,
|
||||
// MatSN = finishedTask.MatSN,
|
||||
// Qty = finishedTask.Qty,
|
||||
// CreateTime = finishedTask.CreateTime,
|
||||
// FinishQty = finishedTask.FinishQty,
|
||||
// FinishTime = finishedTask.FinishTime,
|
||||
// UploadTime = DateTime.Now,
|
||||
// };
|
||||
// DbHelp.db.Insertable(uploadedTask).ExecuteCommand();
|
||||
// DbHelp.db.Deleteable(finishedTask).ExecuteCommand();
|
||||
//}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常," + ex.Message, LogsType.Info);
|
||||
Logs.Write($"【定时任务:回传数据至WMS系统】{finishedTask.ItemNo}发生异常" + ex.StackTrace, LogsType.Info);
|
||||
}
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.Message, LogsType.Info);
|
||||
Logs.Write("【定时任务:回传数据至WMS系统】发生异常" + e.StackTrace, LogsType.Info);
|
||||
}
|
||||
}
|
||||
});
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
using SqlSugar;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.BLL.Tool;
|
||||
using WCS.DAL;
|
||||
@ -129,7 +128,7 @@ namespace WCS.BLL.Manager
|
||||
try
|
||||
{
|
||||
#region 入库模式
|
||||
var inStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.入库模式)
|
||||
var inStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.入库模式)
|
||||
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(3))
|
||||
.ToList();
|
||||
foreach (var shelf in inStoreShelf)
|
||||
@ -141,7 +140,7 @@ namespace WCS.BLL.Manager
|
||||
|
||||
#region 出库模式
|
||||
//出库超过n分钟自动进入待机模式
|
||||
var outStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
var outStoreShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(5))
|
||||
.ToList();
|
||||
foreach (var shelf in outStoreShelf)
|
||||
@ -152,7 +151,7 @@ namespace WCS.BLL.Manager
|
||||
#endregion
|
||||
|
||||
#region 盘点模式
|
||||
var stockTakingShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.盘点模式)
|
||||
var stockTakingShelf = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.盘点模式)
|
||||
.Where(t => DateTime.Now - t.SetCurrentModeTime >= TimeSpan.FromMinutes(5))
|
||||
.ToList();
|
||||
foreach (var shelf in stockTakingShelf)
|
||||
@ -273,7 +272,7 @@ namespace WCS.BLL.Manager
|
||||
try
|
||||
{
|
||||
//待机模式未关灯
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.待机模式 && t.LightColor != WarningLight.LightColorEnum.关闭)
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.待机模式 && t.LightColor != WarningLight.LightColorEnum.关闭)
|
||||
.Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5))
|
||||
.ToList();
|
||||
foreach (var shelf in shelves)
|
||||
@ -297,7 +296,7 @@ namespace WCS.BLL.Manager
|
||||
}
|
||||
|
||||
//出库模式未亮灯
|
||||
var outShelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.出库模式 && t.LightColor == WarningLight.LightColorEnum.关闭)
|
||||
var outShelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.LightColor == WarningLight.LightColorEnum.关闭)
|
||||
.Where(t => t.SetCurrentModeTime < DateTime.Now.AddSeconds(-5))
|
||||
.ToList();
|
||||
foreach (var shelf in outShelves)
|
||||
|
@ -54,7 +54,7 @@ namespace WCS.BLL.Manager
|
||||
GroupName = shelfInDb.GroupName,
|
||||
};
|
||||
case 3:
|
||||
return new MXL4Shelf(shelfInDb)
|
||||
return new SmartShelf(shelfInDb)
|
||||
{
|
||||
ShelfId = shelfInDb.Id,
|
||||
ShelfCode = shelfInDb.ShelfCode,
|
||||
|
@ -23,15 +23,12 @@ namespace WCS.BLL.Manager
|
||||
/// </summary>
|
||||
public static List<TCPClient> TCPClients = new List<TCPClient>();
|
||||
|
||||
public static TcpService Service { get; set; }
|
||||
|
||||
public static void InitTcpClient()
|
||||
{
|
||||
#region 模块是Service的逻辑
|
||||
Logs.Write("【InitTcpClient】开始", LogsType.StartBoot);
|
||||
var moduleServices = DbHelp.db.Queryable<ShelfInfo>()
|
||||
|
||||
var clientsInDB = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
|
||||
.Where(t => t.IsService)
|
||||
.Select(t => new
|
||||
{
|
||||
IP = t.ClientIp,
|
||||
@ -40,195 +37,154 @@ namespace WCS.BLL.Manager
|
||||
})
|
||||
.Distinct()
|
||||
.ToList();
|
||||
if (moduleServices != null && moduleServices.Count > 0)
|
||||
Logs.Write($"【InitTcpClient】需要连接的服务端地址如下:\r\n{string.Join(";", clientsInDB)}", LogsType.StartBoot);
|
||||
foreach (var cleientInDB in clientsInDB)
|
||||
{
|
||||
Logs.Write($"【InitTcpClient】需要连接的服务端地址如下:\r\n{string.Join(";", moduleServices)}", LogsType.StartBoot);
|
||||
foreach (var cleientInDB in moduleServices)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
var tcpCleint = new TCPClient(cleientInDB.IP, cleientInDB.Port, cleientInDB.ShelfTypeName);
|
||||
tcpCleint.tcpReceiveClient.Received += (client, e) =>
|
||||
{
|
||||
var clientIpHost = client.IP + ":" + client.Port;
|
||||
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
|
||||
if (TcpCleint == null)
|
||||
{
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
|
||||
|
||||
|
||||
Logs.Write($"【接收{clientIpHost}】{BitConverter.ToString(data)}", LogsType.Instructions);
|
||||
|
||||
e.ByteBlock.Clear();
|
||||
var len = data.Length;
|
||||
|
||||
if (tcpCleint.ShelfTypeName == "液晶标签货架")
|
||||
{
|
||||
for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++)
|
||||
{
|
||||
//协议拆包 通过前缀校验是否为完整数据包
|
||||
var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength);
|
||||
var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix);
|
||||
if (isEqual)
|
||||
{
|
||||
var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray();
|
||||
if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度
|
||||
{
|
||||
continue;
|
||||
}
|
||||
Logs.Write($"【处理单条指令 开始】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
|
||||
//每次循环index会+1 所以这里-1
|
||||
index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);
|
||||
//获取板子ID
|
||||
var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1];
|
||||
//报警灯 返回来就修改对应的灯的颜色
|
||||
if (dataTemp[TcpCleint.PreFixLength + 2] == 0x20)
|
||||
{
|
||||
var shelf = ShelfManager.Shelves.Where(t => t.ClientIp == clientIpHost)
|
||||
.Where(t => t.LightId == boardId)
|
||||
.FirstOrDefault();
|
||||
var mxl4Shelf = shelf as MXL4Shelf;
|
||||
mxl4Shelf?.WarningLightProcess(dataTemp, boardId);
|
||||
}
|
||||
//!= 0x20 货架类型协议返回
|
||||
else
|
||||
{
|
||||
var shelf = ShelfManager.Shelves
|
||||
.Where(t => t.ClientIp == clientIpHost)
|
||||
.Where(t => t.ModuleIds != null && t.ModuleIds.Contains(boardId))
|
||||
.FirstOrDefault();
|
||||
var mxl4Shelf = shelf as MXL4Shelf;
|
||||
mxl4Shelf?.ProtocolProcess(dataTemp, boardId);
|
||||
}
|
||||
Logs.Write($"【处理单条指令 结束】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
|
||||
}
|
||||
}
|
||||
}
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
//配置首次连接后复位操作
|
||||
tcpCleint.tcpSendClient.Connected += (client, e) =>
|
||||
{
|
||||
Logs.Write($"【TcpClient】{client.IP}完成连接,端口号{client.Port}", LogsType.StartBoot);
|
||||
var clientIpHost = client.IP + ":" + client.Port;
|
||||
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
|
||||
if (TcpCleint == null)
|
||||
{
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
////首次连接
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
Logs.Write($"【InitTcpClient】{clientIpHost}完成首次连接", LogsType.StartBoot);
|
||||
|
||||
|
||||
|
||||
Console.WriteLine($"【InitTcpClient】{clientIpHost}完成首次连接");
|
||||
//InitStatus(TcpCleint);
|
||||
TcpCleint.IsFirstConnected = true;
|
||||
//获取剩余未完成连接的tcp
|
||||
var noFirstConnectedTcps = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
|
||||
.Select(t => t.RemoteIPHost)
|
||||
.ToList();
|
||||
Logs.Write($"【InitTcpClient】剩余未完成连接的TCP为{string.Join(";", noFirstConnectedTcps)}", LogsType.StartBoot);
|
||||
}
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
lock (TCPClients)//避免添加失败的情况
|
||||
{
|
||||
TCPClients.Add(tcpCleint);
|
||||
}
|
||||
|
||||
tcpCleint.Connect();
|
||||
});
|
||||
}
|
||||
|
||||
//启动线程监听所有TCP是否已经完成首次连接
|
||||
Task.Run(() =>
|
||||
{
|
||||
while (true)
|
||||
var tcpCleint = new TCPClient(cleientInDB.IP, cleientInDB.Port, cleientInDB.ShelfTypeName);
|
||||
tcpCleint.tcpClient.Received += (client, e) =>
|
||||
{
|
||||
try
|
||||
var clientIpHost = client.IP + ":" + client.Port;
|
||||
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
|
||||
if (TcpCleint == null)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
var noFirstConnectedClients = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
|
||||
.ToList();
|
||||
if (noFirstConnectedClients.Count == 0)
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
|
||||
|
||||
|
||||
Logs.Write($"【接收{clientIpHost}】{BitConverter.ToString(data)}", LogsType.Instructions);
|
||||
|
||||
e.ByteBlock.Clear();
|
||||
var len = data.Length;
|
||||
|
||||
if (tcpCleint.ShelfTypeName == "信息化货架")
|
||||
{
|
||||
Logs.Write($"【信息化货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
|
||||
Helper.ReturnDataProcess(TcpCleint, data);
|
||||
Logs.Write($"【信息化货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
if (tcpCleint.ShelfTypeName == "液晶货架")
|
||||
{
|
||||
Logs.Write($"【液晶货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
|
||||
//Helper.ReturnDataProcess(TcpCleint, data);
|
||||
Logs.Write($"【液晶货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess);
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++)
|
||||
{
|
||||
//协议拆包 通过前缀校验是否为完整数据包
|
||||
var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength);
|
||||
var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix);
|
||||
if (isEqual)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"存在tcp未完成首次连接,继续重连!");
|
||||
noFirstConnectedClients.ForEach(t =>
|
||||
var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray();
|
||||
if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度
|
||||
{
|
||||
t.ReConnectAsync();
|
||||
});
|
||||
continue;
|
||||
}
|
||||
Logs.Write($"【处理单条指令 开始】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
|
||||
index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1
|
||||
//获取板子ID
|
||||
var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1];
|
||||
var lightNumber = Convert.ToInt32(dataTemp[TcpCleint.PreFixLength + 3]);
|
||||
//报警灯 返回来就修改对应的灯的颜色
|
||||
if (dataTemp[TcpCleint.PreFixLength + 2] == 0x20)
|
||||
{
|
||||
var shelf = ShelfManager.Shelves.Where(t => t.ClientIp == clientIpHost)
|
||||
.Where(t => t.LightId == boardId)
|
||||
.FirstOrDefault();
|
||||
var smartShelf = shelf as SmartShelf;
|
||||
smartShelf?.WarningLightProcess(dataTemp, boardId, lightNumber);
|
||||
}
|
||||
//!= 0x20 货架类型协议返回
|
||||
else
|
||||
{
|
||||
var shelf = ShelfManager.Shelves
|
||||
.Where(t => t.ClientIp == clientIpHost)
|
||||
.Where(t => t.ModuleIds != null && t.ModuleIds.Contains(boardId))
|
||||
.FirstOrDefault();
|
||||
var smartShelf = shelf as SmartShelf;
|
||||
smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber);
|
||||
}
|
||||
Logs.Write($"【处理单条指令 结束】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
//配置首次连接后复位操作
|
||||
tcpCleint.tcpClient.Connected += (client, e) =>
|
||||
{
|
||||
Logs.Write($"【TcpClient】{client.IP}完成连接,端口号{client.Port}", LogsType.StartBoot);
|
||||
var clientIpHost = client.IP + ":" + client.Port;
|
||||
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
|
||||
if (TcpCleint == null)
|
||||
{
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
//首次连接
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
Logs.Write($"【InitTcpClient】{clientIpHost}完成首次连接", LogsType.StartBoot);
|
||||
|
||||
|
||||
|
||||
Console.WriteLine($"【InitTcpClient】{clientIpHost}完成首次连接");
|
||||
InitStatus(TcpCleint);
|
||||
TcpCleint.IsFirstConnected = true;
|
||||
//获取剩余未完成连接的tcp
|
||||
var noFirstConnectedTcps = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
|
||||
.Select(t => t.RemoteIPHost)
|
||||
.ToList();
|
||||
Logs.Write($"【InitTcpClient】剩余未完成连接的TCP为{string.Join(";", noFirstConnectedTcps)}", LogsType.StartBoot);
|
||||
}
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
lock (TCPClients)//避免添加失败的情况
|
||||
{
|
||||
TCPClients.Add(tcpCleint);
|
||||
}
|
||||
|
||||
tcpCleint.Connect();
|
||||
});
|
||||
}
|
||||
|
||||
//启动线程监听所有TCP是否已经完成首次连接
|
||||
Task.Run(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
var noFirstConnectedClients = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
|
||||
.ToList();
|
||||
if (noFirstConnectedClients.Count == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"存在tcp未完成首次连接,继续重连!");
|
||||
noFirstConnectedClients.ForEach(t =>
|
||||
{
|
||||
t.ReConnectAsync();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
Logs.Write("【InitTcpClient】完成 后台继续连接", LogsType.StartBoot);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 模块是Client的逻辑
|
||||
var moduleClients = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
|
||||
.Where(t => t.IsService == false)
|
||||
.Select(t => new
|
||||
{
|
||||
IP = t.ClientIp,
|
||||
ShelfTypeName = t.ShelfTypeName,
|
||||
Port = t.Port,
|
||||
})
|
||||
.Distinct()
|
||||
.ToList();
|
||||
//有客户端作客户端时才需要初始化一个服务端
|
||||
if (moduleClients != null && moduleClients.Count > 0)
|
||||
{
|
||||
Service = new TcpService();
|
||||
Service.Connecting = (client, e) =>
|
||||
{
|
||||
return EasyTask.CompletedTask;
|
||||
};//有客户端正在连接
|
||||
Service.Connected = (client, e) => { return EasyTask.CompletedTask; };//有客户端成功连接
|
||||
Service.Disconnecting = (client, e) => { return EasyTask.CompletedTask; };//有客户端正在断开连接,只有当主动断开时才有效。
|
||||
Service.Disconnected = (client, e) => { return EasyTask.CompletedTask; };//有客户端断开连接
|
||||
Service.Received = (client, e) =>
|
||||
{
|
||||
//从客户端收到信息
|
||||
var mes = Encoding.UTF8.GetString(e.ByteBlock.Buffer, 0, e.ByteBlock.Len);//注意:数据长度是byteBlock.Len
|
||||
client.Logger.Info($"已从{client.Id}接收到信息:{mes}");
|
||||
|
||||
//client.Send(mes);//将收到的信息直接返回给发送方
|
||||
|
||||
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
Service.Setup(new TouchSocketConfig()//载入配置
|
||||
.SetListenIPHosts("tcp://0.0.0.0:9999", 7790)//同时监听两个地址
|
||||
.ConfigureContainer(a =>//容器的配置顺序应该在最前面
|
||||
catch (Exception ex)
|
||||
{
|
||||
a.AddConsoleLogger();//添加一个控制台日志注入(注意:在maui中控制台日志不可用)
|
||||
})
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//a.Add();//此处可以添加插件
|
||||
}));
|
||||
|
||||
Service.Start();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
});
|
||||
Logs.Write("【InitTcpClient】完成 后台继续连接", LogsType.StartBoot);
|
||||
}
|
||||
|
||||
//后台启动时给所有板子、警示灯发送复位操作 保持状态一致
|
||||
|
@ -7,7 +7,6 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
@ -137,6 +136,14 @@ namespace WCS.BLL.Manager
|
||||
}
|
||||
}
|
||||
|
||||
if (warning.WarningType == WarningTypeEnum.入库中未扫描上架 ||
|
||||
warning.WarningType == WarningTypeEnum.入库中异常取出 ||
|
||||
warning.WarningType == WarningTypeEnum.出库中丢失 ||
|
||||
warning.WarningType == WarningTypeEnum.出库中未扫描上架)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#region 重新发指令进入对应模式
|
||||
Logs.Write($"GoInRightMode", LogsType.WebSocket);
|
||||
GoInRightMode(warning);
|
||||
@ -364,15 +371,15 @@ namespace WCS.BLL.Manager
|
||||
{
|
||||
switch (smartShelf.CurrentMode)
|
||||
{
|
||||
case TaskModeEnum.入库模式:
|
||||
case Mode.入库模式:
|
||||
module.GoInInstoreMode(smartShelf.TcpCleint);
|
||||
smartShelf.WarningLight.BlueLight(smartShelf.TcpCleint);
|
||||
break;
|
||||
case TaskModeEnum.出库模式:
|
||||
case Mode.出库模式:
|
||||
Logs.Write("smartShelf.GoInOutstoreByWebSocket", LogsType.WebSocket);
|
||||
smartShelf.GoInOutstoreByWebSocket(module.ModuleId);
|
||||
break;
|
||||
case TaskModeEnum.待机模式:
|
||||
case Mode.待机模式:
|
||||
module.Reset(smartShelf.TcpCleint);
|
||||
smartShelf.WarningLight.CloseLight(smartShelf.TcpCleint);
|
||||
break;
|
||||
|
@ -16,16 +16,5 @@ namespace WCS.BLL.Services.IService
|
||||
public interface IMXL4Service
|
||||
{
|
||||
public Task<ResponseCommon<object>> sysOrderMXL4(SysOrderMXL4Request request);
|
||||
|
||||
public Task<ResponseCommon<object>> cancelOrderMXL4(CancelRequest request);
|
||||
|
||||
public Task<ResponseCommon<object>> cancelOrderByCode(CancelOrderByCodeRequest request);
|
||||
|
||||
public Task<ResponseCommon> refreshInventoryRequest(RefreshInventoryRequest request);
|
||||
|
||||
#region 调试用的APi
|
||||
public Task<ResponseCommon> reSetAll();
|
||||
public Task<ResponseCommon> defaultDisplay();
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -15,11 +15,5 @@ namespace WCS.BLL.Services.IService
|
||||
public interface ISingleLightService
|
||||
{
|
||||
public Task<ResponseCommon<object>> SingleLightControl(SingleLightControlRequest request);
|
||||
/// <summary>
|
||||
/// 按区域一键灭灯
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public Task<ResponseCommon<object>> TurnoffLightByArea(TurnoffLightByAreaRequest request);
|
||||
}
|
||||
}
|
||||
|
@ -52,6 +52,13 @@ namespace WCS.BLL.Services.IService
|
||||
/// <returns></returns>
|
||||
public Task<ResponseCommon> queryModuleVoltage(QueryModuleVoltageRequest request);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询库位历史电压值-非硬件查询 仅查询软件记录的历史电压
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public Task<ResponseCommon> queryStoreInfoHistoryVoltage(QueryStoreInfoHistoryVoltageRequest request);
|
||||
/// <summary>
|
||||
/// 标定+设置偏移量
|
||||
/// </summary>
|
||||
|
@ -5,7 +5,6 @@ using System.Runtime.InteropServices;
|
||||
using System.Text.RegularExpressions;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
@ -17,7 +16,6 @@ using WCS.Model;
|
||||
using WCS.Model.ApiModel.InOutRecord;
|
||||
using WCS.Model.ApiModel.InStore;
|
||||
using WCS.Model.ApiModel.MXBackgroundThread;
|
||||
using static Dm.net.buffer.ByteArrayBuffer;
|
||||
|
||||
namespace WCS.BLL.Services.Service
|
||||
{
|
||||
@ -70,7 +68,7 @@ namespace WCS.BLL.Services.Service
|
||||
//已找到模组对应货架
|
||||
shelf.GoInInstore(request.IpAdress);
|
||||
|
||||
if (shelf.CurrentMode == TaskModeEnum.入库模式)
|
||||
if (shelf.CurrentMode == Mode.入库模式)
|
||||
//成功进入入库模式
|
||||
return new ShelfGoInInstoreResponse()
|
||||
{
|
||||
@ -159,7 +157,7 @@ namespace WCS.BLL.Services.Service
|
||||
};
|
||||
}
|
||||
//判断当前是否是入库模式
|
||||
if (shelf.CurrentMode != TaskModeEnum.入库模式)
|
||||
if (shelf.CurrentMode != Mode.入库模式)
|
||||
{
|
||||
return new ResponseCommon<MatInfo>()
|
||||
{
|
||||
@ -383,7 +381,7 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
|
||||
//判断当前是否是入库模式
|
||||
if (shelf.CurrentMode != TaskModeEnum.入库模式)
|
||||
if (shelf.CurrentMode != Mode.入库模式)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
|
@ -2,16 +2,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Security.Policy;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Xsl;
|
||||
using TouchSocket.Core;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.BLL.Tool;
|
||||
@ -40,19 +36,19 @@ namespace WCS.BLL.Services.Service
|
||||
var storeCodeList = request.List.Select(t => t.StoreCode)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var moduleInfo = DbHelp.db.Queryable<ModuleInfo>()
|
||||
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||
.LeftJoin<ShelfTypeInfo>((si, sti) => si.ShelfTypeId == sti.Id)
|
||||
.Where((si, sti) => sti.ShelfTypeName == "液晶标签货架" || sti.ShelfTypeName == "信息化货架")
|
||||
.Where((si, sti) => storeCodeList.Contains(si.ModuleCode))
|
||||
.Select((si, sti) => si)
|
||||
.Where((si, sti) => sti.ShelfTypeName == "液晶货架")
|
||||
.Where((si, sti) => storeCodeList.Contains(si.StoreCode))
|
||||
.Select((st, sti) => st)
|
||||
.ToList();
|
||||
if (moduleInfo.Count < storeCodeList.Count)
|
||||
if (stores.Count < storeCodeList.Count)
|
||||
{
|
||||
var storeCodesInDB = moduleInfo.Select(t => t.ModuleCode).ToList();
|
||||
var storeCodesInDB = stores.Select(t => t.StoreCode).ToList();
|
||||
storeCodeList.RemoveAll(t => storeCodesInDB.Contains(t));
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Code = 200,
|
||||
Message = $"操作失败:库位【{string.Join(",", storeCodeList)}】不存在!",
|
||||
};
|
||||
}
|
||||
@ -68,96 +64,29 @@ namespace WCS.BLL.Services.Service
|
||||
var task = currenTasksNotThisMode.First();
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Code = 200,
|
||||
Message = $"操作失败:库位【{task.StoreCode}】当前在{task.TaskMode}!",
|
||||
};
|
||||
}
|
||||
|
||||
//获取taskId
|
||||
var list = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };
|
||||
//已存在的taskID
|
||||
var exsitIds = currenTasks.Select(t => t.TaskID)
|
||||
.ToList();
|
||||
exsitIds.ForEach(t =>
|
||||
{
|
||||
list.RemoveAll(l => l == t);
|
||||
});
|
||||
|
||||
var buttonColor = ButtonColorEnum.绿色;
|
||||
//转换颜色
|
||||
switch (request.Corlor)
|
||||
{
|
||||
case "红":
|
||||
buttonColor = ButtonColorEnum.红色;
|
||||
break;
|
||||
case "绿":
|
||||
buttonColor = ButtonColorEnum.绿色;
|
||||
break;
|
||||
case "黄":
|
||||
buttonColor = ButtonColorEnum.黄色;
|
||||
break;
|
||||
case "蓝":
|
||||
buttonColor = ButtonColorEnum.蓝色;
|
||||
break;
|
||||
case "紫":
|
||||
buttonColor = ButtonColorEnum.紫色;
|
||||
break;
|
||||
case "青":
|
||||
buttonColor = ButtonColorEnum.青色;
|
||||
break;
|
||||
case "白":
|
||||
buttonColor = ButtonColorEnum.白色;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
var tasks = new List<CurrentTask>();
|
||||
//生成任务数据
|
||||
foreach (var orderDetail in request.List)
|
||||
{
|
||||
list = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
var module = moduleInfo.Where(t => t.ModuleCode == orderDetail.StoreCode).First();
|
||||
|
||||
var currentTaskIds = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleId == module.Id)
|
||||
.Select(t => t.TaskID)
|
||||
.ToList();
|
||||
var tasksIds = tasks.Where(t => t.ModuleId == module.Id).Select(t => t.TaskID).ToList();
|
||||
|
||||
list.RemoveAll(l => currentTaskIds.Contains(l));
|
||||
list.RemoveAll(l => tasksIds.Contains(l));
|
||||
|
||||
if (list == null || list.Count <= 0)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:同一个库位同时只能同时操作八种物料!"
|
||||
};
|
||||
}
|
||||
|
||||
var taskId = list.First();
|
||||
|
||||
var store = stores.Where(t => t.StoreCode == orderDetail.StoreCode).First();
|
||||
var task = new CurrentTask()
|
||||
{
|
||||
ModuleId = module.Id,
|
||||
ModuleCode = module.ModuleCode,
|
||||
ShelfId = module.ShelfId,
|
||||
ShelfCode = module.ShelfCode,
|
||||
StoreId = store.Id,
|
||||
StoreCode = store.StoreCode,
|
||||
|
||||
Guid = orderDetail.Guid,
|
||||
ItemNo = orderDetail.ItemNo,
|
||||
TaskMode = request.OrderType,
|
||||
OrderNumber = request.OrderNumber,
|
||||
TaskID = taskId,
|
||||
ButtonColor = buttonColor,
|
||||
ButtonColor = request.Corlor,
|
||||
MatCode = orderDetail.MatCode,
|
||||
MatName = orderDetail.MatName,
|
||||
MatSpec = string.IsNullOrEmpty(orderDetail.MatSpec) ? "-" : orderDetail.MatSpec,
|
||||
MatSpec = orderDetail.MatSpec,
|
||||
MatBatch = orderDetail.MatBatch,
|
||||
MatSN = orderDetail.MatSN,
|
||||
Qty = (int)orderDetail.Qty
|
||||
Qty = orderDetail.Qty
|
||||
};
|
||||
tasks.Add(task);
|
||||
}
|
||||
@ -176,7 +105,7 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"操作失败:{ex.Message}"
|
||||
};
|
||||
}
|
||||
//发送任务至各个标签 交给后台线程来做
|
||||
//发送任务至各个标签
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 200,
|
||||
@ -186,275 +115,10 @@ namespace WCS.BLL.Services.Service
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消同步的任务
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<ResponseCommon<object>> cancelOrderMXL4(CancelRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (request.matSN == null || request.matSN.Count <= 0)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"未取消需要操作的物料条码!"
|
||||
};
|
||||
}
|
||||
|
||||
var needCancelTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => request.matSN.Contains(t.MatSN))
|
||||
.ToList();
|
||||
needCancelTasks.ForEach(t => t.IsCancel = true);
|
||||
//获取当前
|
||||
try
|
||||
{
|
||||
DbHelp.db.BeginTran();
|
||||
DbHelp.db.Updateable(needCancelTasks).ExecuteCommand();
|
||||
DbHelp.db.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DbHelp.db.RollbackTran();
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"操作失败:{ex.Message}"
|
||||
};
|
||||
}
|
||||
//发送任务至各个标签 交给后台线程来做
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消同步的任务-通过工单和物料编码进行取消任务
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<ResponseCommon<object>> cancelOrderByCode(CancelOrderByCodeRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrEmpty(request.OrderNumber))
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"缺少工单号!"
|
||||
};
|
||||
}
|
||||
|
||||
var needCancelTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => request.OrderNumber == request.OrderNumber)
|
||||
.WhereIF(!string.IsNullOrEmpty(request.MatCode), t => t.ItemNo == request.MatCode)
|
||||
.ToList();
|
||||
needCancelTasks.ForEach(t => t.IsCancel = true);
|
||||
//获取当前
|
||||
try
|
||||
{
|
||||
DbHelp.db.BeginTran();
|
||||
DbHelp.db.Updateable(needCancelTasks).ExecuteCommand();
|
||||
DbHelp.db.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
DbHelp.db.RollbackTran();
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"操作失败:{ex.Message}"
|
||||
};
|
||||
}
|
||||
//发送任务至各个标签 交给后台线程来做
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseCommon> refreshInventoryRequest(RefreshInventoryRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//第一步:校验库位在数据库中是否都存在
|
||||
var storeCodeList = request.StoreCodes.Distinct()
|
||||
.ToList();
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>()
|
||||
.LeftJoin<ShelfTypeInfo>((si, sti) => si.ShelfTypeId == sti.Id)
|
||||
.Where((si, sti) => sti.ShelfTypeName == "液晶标签货架")
|
||||
.Where((si, sti) => storeCodeList.Contains(si.ModuleCode))
|
||||
.Select((si, sti) => si)
|
||||
.ToList();
|
||||
if (modules.Count < storeCodeList.Count)
|
||||
{
|
||||
var storeCodesInDB = modules.Select(t => t.ModuleCode).ToList();
|
||||
storeCodeList.RemoveAll(t => storeCodesInDB.Contains(t));
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:库位【{string.Join(",", storeCodeList)}】不存在!",
|
||||
};
|
||||
}
|
||||
//第二步:获取到对应货架
|
||||
var shelfs = modules.Select(t => new
|
||||
{
|
||||
ShelfId = t.ShelfId,
|
||||
ModuId = t.Id
|
||||
})
|
||||
.GroupBy(t => t.ShelfId)
|
||||
.Select(g => new
|
||||
{
|
||||
ShelfId = g.Key,
|
||||
ModuIds = g.Select(t => t.ModuId).ToList()
|
||||
})
|
||||
.ToList();
|
||||
//标记对应的模组为需要刷新
|
||||
foreach (var shelf in shelfs)
|
||||
{
|
||||
var shelfInMemory = ShelfManager.Shelves.Where(t => t.ShelfTypeName == "液晶标签货架")
|
||||
.Where(t => t.ShelfId == shelf.ShelfId)
|
||||
.FirstOrDefault();
|
||||
if (shelfInMemory == null)
|
||||
{
|
||||
Logs.Write($"[后台APi refreshInventoryRequest]通过{shelf.ShelfId}在内存缓存中查找货架失败!");
|
||||
continue;
|
||||
}
|
||||
//将内存中对应模组置为需要刷新!
|
||||
var modulesInMemory = shelfInMemory.MXL4Modules.Where(t => shelf.ModuIds.Contains(t.ModuleId))
|
||||
.ToList();
|
||||
modulesInMemory.ForEach(t =>
|
||||
{
|
||||
t.IsNeedRefresh = true;
|
||||
});
|
||||
}
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseCommon> reSetAll()
|
||||
{
|
||||
try
|
||||
{
|
||||
//1.获取所有液晶标签货架
|
||||
var shelfs = ShelfManager.Shelves.Where(t => t.ShelfTypeName == "液晶标签货架")
|
||||
.Select(t => t as MXL4Shelf)
|
||||
.ToList();
|
||||
shelfs.ForEach(t =>
|
||||
{
|
||||
t.Reset();
|
||||
});
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseCommon> defaultDisplay()
|
||||
{
|
||||
try
|
||||
{
|
||||
//1.获取所有液晶标签货架
|
||||
var shelfs = ShelfManager.Shelves.Where(t => t.ShelfTypeName == "液晶标签货架")
|
||||
.Select(t => t as MXL4Shelf)
|
||||
.ToList();
|
||||
shelfs.ForEach(t =>
|
||||
{
|
||||
t.MXL4Modules.ForEach(m =>
|
||||
{
|
||||
//发送进入入库模式
|
||||
m.GoInOutstoreMode(t.TcpCleint, DbModels.Task.ButtonColorEnum.红色);
|
||||
//任务ID
|
||||
m.SendTaskId(7, t.TcpCleint);
|
||||
m.SendMatCode("A7100200300", t.TcpCleint);
|
||||
m.SendMatName("A7SESSSSSS", t.TcpCleint);
|
||||
m.SendMatSpec("7GUIGE", t.TcpCleint);
|
||||
m.SendMatBatch("202412097", t.TcpCleint);
|
||||
m.SendMatQty(999, t.TcpCleint);
|
||||
|
||||
m.SendTaskId(6, t.TcpCleint);
|
||||
m.SendMatCode("A6666666", t.TcpCleint);
|
||||
m.SendMatName("ASESSSSSS6", t.TcpCleint);
|
||||
m.SendMatSpec("GUIGE6", t.TcpCleint);
|
||||
m.SendMatBatch("202412096", t.TcpCleint);
|
||||
m.SendMatQty(222, t.TcpCleint);
|
||||
|
||||
m.SendTaskId(3, t.TcpCleint);
|
||||
m.SendMatCode("A33333", t.TcpCleint);
|
||||
m.SendMatName("3ASESSSSS", t.TcpCleint);
|
||||
m.SendMatSpec("3GUIGE3", t.TcpCleint);
|
||||
m.SendMatBatch("202412093", t.TcpCleint);
|
||||
m.SendMatQty(333, t.TcpCleint);
|
||||
});
|
||||
});
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 200,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
using SqlSugar;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.BLL.Tool;
|
||||
@ -488,7 +487,7 @@ namespace WCS.BLL.Services.Service
|
||||
|
||||
//获取后台当前正在进行出库的订单 将出库状态反馈给前端
|
||||
var outingOrderNumbers = ShelfManager.Shelves
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == HardWare.Mode.出库模式)
|
||||
.Select(t => t.OrderNumber)
|
||||
.ToList();
|
||||
foreach (var record in records)
|
||||
@ -754,7 +753,7 @@ namespace WCS.BLL.Services.Service
|
||||
.ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
|
||||
|
||||
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != TaskModeEnum.待机模式).Select(t => t.ShelfCode).ToList();
|
||||
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.待机模式).Select(t => t.ShelfCode).ToList();
|
||||
if (outherModeShelfs != null && outherModeShelfs.Count > 0)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
@ -1201,7 +1200,7 @@ namespace WCS.BLL.Services.Service
|
||||
|
||||
//找到正在出对应出库单的货架
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.OrderNumber == request.OrderNumber)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.出库模式)
|
||||
.Where(t => t.CurrentMode == HardWare.Mode.出库模式)
|
||||
.ToList();
|
||||
|
||||
if (shelves == null || shelves.Count == 0)
|
||||
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.DAL.Db;
|
||||
@ -67,7 +66,7 @@ namespace WCS.BLL.Services.Service
|
||||
foreach (var ip in cleintIps)
|
||||
{
|
||||
var currentIdShelfs = shelfs.Where(t => t.ClientIp == ip)
|
||||
.Where(t => t.CurrentMode == TaskModeEnum.待机模式)
|
||||
.Where(t => t.CurrentMode == HardWare.Mode.待机模式)
|
||||
.ToList();
|
||||
Task.Run(() =>
|
||||
{
|
||||
|
@ -5,7 +5,6 @@ using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using TouchSocket.Core;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.BLL.Tool;
|
||||
@ -25,25 +24,6 @@ namespace WCS.BLL.Services.Service
|
||||
{
|
||||
public class SingleLightService : ISingleLightService
|
||||
{
|
||||
public string ExtractUntilSecondDashCorrect(string input)
|
||||
{
|
||||
int firstDashIndex = input.IndexOf('-');
|
||||
if (firstDashIndex == -1)
|
||||
{
|
||||
return string.Empty; // 如果没有找到第一个'-',则返回空字符串
|
||||
}
|
||||
|
||||
int secondDashIndex = input.IndexOf('-', firstDashIndex + 1);
|
||||
if (secondDashIndex == -1)
|
||||
{
|
||||
return input;
|
||||
}
|
||||
else
|
||||
{
|
||||
return input.Substring(0, secondDashIndex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 单灯 一个库位对应一个硬件
|
||||
/// </summary>
|
||||
@ -54,7 +34,7 @@ namespace WCS.BLL.Services.Service
|
||||
try
|
||||
{
|
||||
//传入数据校验
|
||||
if (request.StoreCodes == null || request.StoreCodes.Count == 0)
|
||||
if (request.StoreList == null || request.StoreList.Count == 0)
|
||||
{
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
@ -62,19 +42,9 @@ namespace WCS.BLL.Services.Service
|
||||
Message = "操作失败:没有需要控制的库位",
|
||||
};
|
||||
}
|
||||
//瓦斯分院库位数与灯不匹配所以进行如下操作
|
||||
//处理传入的库位
|
||||
if(!LocalFile.Config.IsZuantan)
|
||||
{
|
||||
for (int i = 0; i < request.StoreCodes.Count; i++)
|
||||
{
|
||||
request.StoreCodes[i] = ExtractUntilSecondDashCorrect(request.StoreCodes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//库位编码去重
|
||||
var storeCodes = request.StoreCodes.Distinct()
|
||||
var storeCodes = request.StoreList.Select(t => t.StoreCode)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => storeCodes.Contains(t.StoreCode))
|
||||
@ -93,10 +63,38 @@ namespace WCS.BLL.Services.Service
|
||||
var shelfs = DbHelp.db.Queryable<ShelfInfo>().Where(t => shelfIds.Contains(t.Id))
|
||||
.ToList();
|
||||
|
||||
////对应模组信息
|
||||
//var moduleIds = stores.Select(t => t.ModuleId).Distinct().ToList();
|
||||
//var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => moduleIds.Contains(t.Id))
|
||||
// .ToList();
|
||||
//对应模组信息
|
||||
var moduleIds = stores.Select(t => t.ModuleId).Distinct().ToList();
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => moduleIds.Contains(t.Id))
|
||||
.ToList();
|
||||
|
||||
//加载请求参数中的库位灯 板子ID和货架ID
|
||||
foreach (var store in request.StoreList)
|
||||
{
|
||||
var storeInDb = stores.Where(t => t.StoreCode == store.StoreCode).FirstOrDefault();
|
||||
if (storeInDb == null)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:库位{store.StoreCode}不存在(store)!"
|
||||
};
|
||||
}
|
||||
else
|
||||
store.ShelfId = storeInDb.ShelfId;
|
||||
|
||||
var moduleInDb = modules.Where(t => t.Id == storeInDb.ModuleId).FirstOrDefault();
|
||||
if (moduleInDb == null)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:库位{store.StoreCode}不存在(module)!"
|
||||
};
|
||||
}
|
||||
else
|
||||
store.BoardId = moduleInDb.BoardId;
|
||||
}
|
||||
|
||||
//合并:同一个货架的库位合并
|
||||
var shelfModels = new List<SingleLightShelfModel>();
|
||||
@ -104,100 +102,40 @@ namespace WCS.BLL.Services.Service
|
||||
{
|
||||
var shelfModel = new SingleLightShelfModel();
|
||||
//报警灯
|
||||
if (shelf.LightId > 0)
|
||||
{
|
||||
shelfModel.WarningLightMode = request.LightMode;
|
||||
}
|
||||
shelfModel.WarningLightColor = request.ColorMode;
|
||||
shelfModel.WarningLightMode = request.WarningLightMode;
|
||||
shelfModel.WarningBuzzerMode = request.WarningBuzzerMode;
|
||||
shelfModel.WarningLightColor = request.WarningLightColor;
|
||||
shelfModel.WarningBoardId = shelf.LightId;
|
||||
shelfModel.ClientIp = shelf.ClientIp;
|
||||
|
||||
shelfModel.StoreList = stores.Where(t => t.ShelfId == shelf.Id)
|
||||
.Select(t => new SingleLightStoreModel()
|
||||
{
|
||||
BoardId = t.BoardId,
|
||||
LightMode = request.LightMode,
|
||||
LightColor = request.ColorMode,
|
||||
LightNumber = t.SingleLightNumber,
|
||||
}).ToList();
|
||||
|
||||
//库位
|
||||
var storesThisShelf = request.StoreList
|
||||
.Where(t => t.ShelfId == shelf.Id)
|
||||
.ToList();
|
||||
foreach (var storeThisShelf in storesThisShelf)
|
||||
{
|
||||
shelfModel.StoreList.Add(new SingleLightStoreModel()
|
||||
{
|
||||
BoardId = storeThisShelf.BoardId,
|
||||
LightColor = storeThisShelf.LightColor,
|
||||
LightMode = storeThisShelf.LightMode,
|
||||
});
|
||||
}
|
||||
shelfModels.Add(shelfModel);
|
||||
}
|
||||
|
||||
//合并:同一个TCP的货架合并 报警灯和库位灯统一只发送一条指令
|
||||
var clients = shelfs.Select(t => new
|
||||
var clientIpList = shelfs.Select(t => t.ClientIp)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
foreach (var clientIp in clientIpList)
|
||||
{
|
||||
ClientIp = t.ClientIp,
|
||||
IsService = t.IsService,
|
||||
})
|
||||
.Distinct()
|
||||
.ToList();
|
||||
foreach (var client in clients)
|
||||
{
|
||||
var shelfModelsInOneIp = shelfModels.Where(t => t.ClientIp == client.ClientIp).ToList();
|
||||
|
||||
var shelfModelsInOneIp = shelfModels.Where(t => t.ClientIp == clientIp).ToList();
|
||||
var sendData = Helper.SingleLightControl(shelfModelsInOneIp);
|
||||
if (client.IsService)
|
||||
{
|
||||
TCPClient tcpClient = TCPClientManager.GetTCPClientByIPHost(client.ClientIp);
|
||||
if (tcpClient != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData);
|
||||
Logs.Write("【单灯单独控制】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tcpClient = TCPClientManager.Service.GetClients().Where(t => t.IP + ":" + t.Port.ToString() == client.ClientIp).FirstOrDefault();
|
||||
if (tcpClient != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData, 0, sendData.Length);
|
||||
Logs.Write("【单灯单独控制】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"【单灯单独控制】{client}指令发送中遇到异常{ex.Message}",
|
||||
};
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【单灯单独控制】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"【单灯单独控制】{client}未连接,以下指令未能成功发送",
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//更新数据库灯的状态
|
||||
stores.ForEach(t =>
|
||||
{
|
||||
t.LightMode = request.LightMode;
|
||||
t.ColorMode = request.ColorMode;
|
||||
});
|
||||
DbHelp.db.Updateable(stores)
|
||||
.UpdateColumns(t => new { t.LightMode, t.ColorMode })
|
||||
.ExecuteCommand();
|
||||
TCPClient tCPClient = TCPClientManager.GetTCPClientByIPHost(clientIp);
|
||||
tCPClient.Send(sendData);
|
||||
Logs.Write("【单灯单独控制】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
|
||||
//返回成功
|
||||
return new ResponseCommon<object>()
|
||||
@ -208,130 +146,7 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
//操作失败
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = $"操作失败:{ex.Message}",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseCommon<object>> TurnoffLightByArea(TurnoffLightByAreaRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//传入数据校验
|
||||
if (string.IsNullOrEmpty(request.Area))
|
||||
{
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:参数传入错误!Area为空!",
|
||||
};
|
||||
}
|
||||
//库位
|
||||
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => t.Area == request.Area)
|
||||
.ToList();
|
||||
if (stores == null || stores.Count == 0)
|
||||
{
|
||||
return new ResponseCommon<object>
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"操作失败:所选区域不存在库位!"
|
||||
};
|
||||
}
|
||||
|
||||
//对应货架(获取TCP和报警灯ID)
|
||||
var shelfIds = stores.Select(t => t.ShelfId).Distinct().ToList();
|
||||
var shelfs = DbHelp.db.Queryable<ShelfInfo>().Where(t => shelfIds.Contains(t.Id))
|
||||
.ToList();
|
||||
//获取对应货架所有IP
|
||||
var clients = shelfs.Select(t => new
|
||||
{
|
||||
ClientIp = t.ClientIp,
|
||||
IsService = t.IsService,
|
||||
})
|
||||
.Distinct()
|
||||
.ToList();
|
||||
|
||||
//挨个发关灯指令
|
||||
foreach (var client in clients)
|
||||
{
|
||||
//生成关灯指令
|
||||
var sendData = Helper.SingleLightTrunOffAllLight();
|
||||
|
||||
if (client.IsService)
|
||||
{
|
||||
TCPClient tcpClient = TCPClientManager.GetTCPClientByIPHost(client.ClientIp);
|
||||
if (tcpClient != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData);
|
||||
Logs.Write("【熄灯】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【熄灯】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【熄灯】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var tcpClient = TCPClientManager.Service.GetClients().Where(t => t.IP + ":" + t.Port.ToString() == client.ClientIp).FirstOrDefault();
|
||||
if (tcpClient != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpClient.Send(sendData, 0, sendData.Length);
|
||||
Logs.Write("【熄灯】发送指令" + BitConverter.ToString(sendData));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【熄灯】{client}以下指令发送中遇到异常{ex.Message}" + BitConverter.ToString(sendData));
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【熄灯】{client}未连接,以下指令未能成功发送" + BitConverter.ToString(sendData));
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 201,
|
||||
Message = $"【熄灯】{client}未连接,以下指令未能成功发送",
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//更新灯状态为熄灭
|
||||
//var stores = DbHelp.db.Queryable<StoreInfo>().Where(t => t.Area == request.Area).ToList();
|
||||
stores.ForEach(t =>
|
||||
{
|
||||
t.ColorMode = 0;
|
||||
t.LightMode = 0;
|
||||
});
|
||||
DbHelp.db.Updateable(stores)
|
||||
.UpdateColumns(t => new { t.LightMode, t.ColorMode })
|
||||
.ExecuteCommand();
|
||||
|
||||
//返回成功
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
|
||||
//操作失败
|
||||
return new ResponseCommon<object>()
|
||||
{
|
||||
|
@ -6,7 +6,6 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.DAL.Db;
|
||||
@ -567,7 +566,7 @@ namespace WCS.BLL.Services.Service
|
||||
.ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
|
||||
|
||||
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != TaskModeEnum.待机模式).Select(t => t.ShelfCode).ToList();
|
||||
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.待机模式).Select(t => t.ShelfCode).ToList();
|
||||
if (outherModeShelfs != null && outherModeShelfs.Count > 0)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
@ -652,7 +651,7 @@ namespace WCS.BLL.Services.Service
|
||||
#endregion
|
||||
|
||||
#region 查询当前盘点单 已启动的货架
|
||||
var shelfs = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.盘点模式 && t.OrderNumber == order.StocktakingOrderNumber).ToList();
|
||||
var shelfs = ShelfManager.Shelves.Where(t => t.CurrentMode == HardWare.Mode.盘点模式 && t.OrderNumber == order.StocktakingOrderNumber).ToList();
|
||||
shelfs.ForEach(t =>
|
||||
{
|
||||
t.GoOutStocktaking();
|
||||
@ -705,7 +704,7 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"货架{inventoryDetail.ShelfCode}不存在!",
|
||||
};
|
||||
}
|
||||
else if (shelf.CurrentMode != TaskModeEnum.盘点模式)
|
||||
else if (shelf.CurrentMode != HardWare.Mode.盘点模式)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
@ -788,7 +787,7 @@ namespace WCS.BLL.Services.Service
|
||||
Message = $"货架{stockTakingMatDetail.StoreInfo.ShelfCode}不存在!",
|
||||
};
|
||||
}
|
||||
else if (shelf.CurrentMode != TaskModeEnum.盘点模式)
|
||||
else if (shelf.CurrentMode != HardWare.Mode.盘点模式)
|
||||
{
|
||||
DbHelp.db.RollbackTran();
|
||||
return new ResponseCommon()
|
||||
@ -827,7 +826,7 @@ namespace WCS.BLL.Services.Service
|
||||
//更新时间 避免被自动退出
|
||||
Task.Run(() =>
|
||||
{
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == TaskModeEnum.盘点模式 && t.OrderNumber == request.StocktakingOrderNumber)
|
||||
var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == HardWare.Mode.盘点模式 && t.OrderNumber == request.StocktakingOrderNumber)
|
||||
.ToList();
|
||||
foreach (var shelf in shelves)
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
@ -491,6 +492,39 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 发送指令获取模组的电压值
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="NotImplementedException"></exception>
|
||||
public async Task<ResponseCommon> queryStoreInfoHistoryVoltage(QueryStoreInfoHistoryVoltageRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取数据
|
||||
var list = await DbHelp.db.Queryable<StoreInfoHistoryVoltage>()
|
||||
.Where(t => request.StoreIds.Contains(t.StoreId))
|
||||
.OrderByDescending(t => t.Id)
|
||||
.ToListAsync();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "Success",
|
||||
Data = list
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ResponseCommon> calibrationSetOffset(CalibrationSetOffsetRequest request)
|
||||
{
|
||||
try
|
||||
@ -503,22 +537,67 @@ namespace WCS.BLL.Services.Service
|
||||
if (shelf != null && shelf is SmartShelf)
|
||||
{
|
||||
var smartShelf = (SmartShelf)shelf;
|
||||
#region 记录当前模组所有库位的上一次的电压
|
||||
//2024/11/11 程心怡说刘一科长喊加的
|
||||
//需求来源:微信
|
||||
//软件加光衰标定值,观察光衰数据
|
||||
//相当于就是你那边软件要记录一下上一次标定的值
|
||||
//相当于,到时候我们这边板子上完了,我会手动用你的软件标定一次,你那边就记录数据。
|
||||
var time = DateTime.Now;
|
||||
var historyList = new List<StoreInfoHistoryVoltage>();
|
||||
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => t.ModuleId == module.Id)
|
||||
.Where(t => t.BoardId == module.BoardId)
|
||||
.OrderBy(t => t.LightNumber)
|
||||
.ToList();
|
||||
storeInfos.ForEach(t =>
|
||||
{
|
||||
historyList.Add(new StoreInfoHistoryVoltage()
|
||||
{
|
||||
StoreId = t.Id,
|
||||
StoreCode = t.StoreCode,
|
||||
ShelfTypeId = t.ShelfTypeId,
|
||||
ModuleId = module.Id,
|
||||
ModuleCode = t.ModuleCode,
|
||||
ShelfId = t.ShelfId,
|
||||
ShelfCode = t.ShelfCode,
|
||||
BoardId = t.BoardId,
|
||||
LightNumber = t.LightNumber,
|
||||
Priority = t.Priority,
|
||||
CurrentMatSn = t.CurrentMatSn,
|
||||
CurrentVoltage = t.CurrentVoltage,
|
||||
StandardVoltage = t.StandardVoltage,
|
||||
OffsetVoltage = t.OffsetVoltage,
|
||||
BigShelfCode = t.BigShelfCode,
|
||||
R = t.R,
|
||||
C = t.C,
|
||||
Wei = t.Wei,
|
||||
GroupName = t.GroupName,
|
||||
CreateTime = time,
|
||||
});
|
||||
});
|
||||
DbHelp.db.Insertable(historyList).ExecuteCommand();
|
||||
#endregion
|
||||
smartShelf.CalibrationSetOffset(module.Id, request.OffSet);
|
||||
isSend = true;
|
||||
}
|
||||
}
|
||||
if (isSend)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "Success"
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:未找到对应模组"
|
||||
};
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -602,7 +681,7 @@ namespace WCS.BLL.Services.Service
|
||||
var DingDing = string.Empty;
|
||||
MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被屏蔽(库位管理),请及时调查或维保硬件!", new List<string> { "104379", "103595" }, ref DingDing);
|
||||
Logs.Write($"【智能货架】库位{storeInfo.StoreCode}被屏蔽(库位管理),请及时调查或维保硬件!");
|
||||
|
||||
|
||||
#region 计算库位禁用率并发送
|
||||
Task.Run(() =>
|
||||
{
|
||||
@ -769,7 +848,7 @@ namespace WCS.BLL.Services.Service
|
||||
{
|
||||
Code = 200,
|
||||
Message = $"Success",
|
||||
Data = message ,
|
||||
Data = message,
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -783,6 +862,7 @@ namespace WCS.BLL.Services.Service
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,6 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using WCS.BLL;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.Model;
|
||||
|
||||
namespace WCS.BLL.Tool
|
||||
@ -281,7 +280,6 @@ namespace WCS.BLL.Tool
|
||||
if (isSaveLog)
|
||||
Logs.Write($"【{guid}】开始请求调用接口 url:{url} 请求方式:{httpMethod} 数据:{data}", LogsType.Api);
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||
request.Headers.Add("token",LocalStatic.WMSToken);//智能制造要求请求增加token
|
||||
request.Method = httpMethod;
|
||||
request.ContentType = "application/json";
|
||||
request.Timeout = 10000;
|
||||
@ -326,7 +324,7 @@ namespace WCS.BLL.Tool
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||
request.Method = httpMethod;
|
||||
request.ContentType = "application/json";
|
||||
request.Timeout = 5000;
|
||||
request.Timeout = 2000;
|
||||
|
||||
if (!string.IsNullOrEmpty(data))
|
||||
{
|
||||
|
@ -352,19 +352,6 @@ namespace WCS.BLL.Tool
|
||||
var lightCount = 0;
|
||||
foreach (var shelf in shelfs)
|
||||
{
|
||||
//库位灯指令
|
||||
if (shelf.StoreList != null && shelf.StoreList.Count > 0)
|
||||
{
|
||||
foreach (var store in shelf.StoreList)
|
||||
{
|
||||
for (int i = 0; i < store.LightNumber; i++)
|
||||
{
|
||||
var singleLightData = GenerateSingleLightData(store.BoardId + i, store.LightMode, store.LightColor);
|
||||
lightCount++;
|
||||
dataBase = dataBase.Concat(singleLightData).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
//6个报警灯需要发送指令
|
||||
|
||||
if (shelf.WarningLightMode != -1)
|
||||
@ -377,14 +364,23 @@ namespace WCS.BLL.Tool
|
||||
}
|
||||
}
|
||||
//蜂鸣器需要发送指令
|
||||
//if (shelf.WarningLightMode == 3)//单灯短亮一次的情况下 蜂鸣器短鸣一次
|
||||
//{
|
||||
// var singleLightData = GenerateSingleLightData(shelf.WarningBoardId + 6, 3, shelf.WarningLightColor);
|
||||
// lightCount++;
|
||||
// dataBase = dataBase.Concat(singleLightData).ToArray();
|
||||
//}
|
||||
|
||||
if (shelf.WarningBuzzerMode != -1)
|
||||
{
|
||||
var singleLightData = GenerateSingleLightData(shelf.WarningBoardId + 6, shelf.WarningBuzzerMode, shelf.WarningLightColor);
|
||||
lightCount++;
|
||||
dataBase = dataBase.Concat(singleLightData).ToArray();
|
||||
}
|
||||
|
||||
//库位灯指令
|
||||
if (shelf.StoreList != null && shelf.StoreList.Count > 0)
|
||||
{
|
||||
foreach (var store in shelf.StoreList)
|
||||
{
|
||||
var singleLightData = GenerateSingleLightData(store.BoardId, store.LightMode, store.LightColor);
|
||||
lightCount++;
|
||||
dataBase = dataBase.Concat(singleLightData).ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte[] length_base = BitConverter.GetBytes(dataBase.Length + 2);
|
||||
@ -412,7 +408,7 @@ namespace WCS.BLL.Tool
|
||||
{
|
||||
public string ClientIp { get; set; } = string.Empty;
|
||||
public int WarningBoardId { get; set; }
|
||||
public int WarningLightMode { get; set; } = -1;
|
||||
public int WarningLightMode { get; set; }
|
||||
public int WarningBuzzerMode { get; set; }
|
||||
public int WarningLightColor { get; set; }
|
||||
public List<SingleLightStoreModel> StoreList { get; set; } = new List<SingleLightStoreModel>();
|
||||
@ -423,27 +419,6 @@ namespace WCS.BLL.Tool
|
||||
public int BoardId { get; set; }
|
||||
public int LightMode { get; set; }
|
||||
public int LightColor { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 单灯存在大库位灯 每个库位可能不止一个灯 故加此字段
|
||||
/// </summary>
|
||||
public int LightNumber { get; set; } = 1;
|
||||
}
|
||||
|
||||
//单灯货架全部灭灯
|
||||
public static byte[] SingleLightTrunOffAllLight()
|
||||
{
|
||||
byte[] dataBase = new byte[8];
|
||||
dataBase[0] = 0xff;
|
||||
dataBase[1] = 0x01;
|
||||
dataBase[2] = 0x00;
|
||||
dataBase[3] = 0x0A;
|
||||
dataBase[4] = 0xff;
|
||||
dataBase[5] = 0xff;
|
||||
dataBase[6] = 0x00;
|
||||
dataBase[7] = 0x00;
|
||||
byte[] dataWithCRC = Crc16(dataBase, dataBase.Length, true);
|
||||
return dataWithCRC;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.ComponentModel.Design;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using TouchSocket.Core;
|
||||
using TouchSocket.Sockets;
|
||||
using WCS.BLL.Tool;
|
||||
@ -21,8 +19,8 @@ namespace WCS.BLL
|
||||
public string BindIPHost { get; set; } = "127.0.0.1:20003";
|
||||
|
||||
public string ShelfTypeName { get; set; }
|
||||
public bool IsReceivedClientOnline { get; set; } = false;
|
||||
public bool IsSendClientOnline { get; set; } = false;
|
||||
public bool IsOnline { get; set; } = false;
|
||||
|
||||
//第一次连接是否已连接
|
||||
public bool IsFirstConnected { get; set; } = false;
|
||||
|
||||
@ -33,13 +31,9 @@ namespace WCS.BLL
|
||||
//协议数据部分长度
|
||||
public readonly int DataLength = 10;
|
||||
|
||||
public ConcurrentDictionary<int, MessageDto> MessageList { get; set; } = new ConcurrentDictionary<int, MessageDto>();
|
||||
|
||||
public TcpClient tcpSendClient { get; set; }
|
||||
|
||||
//同步发送等待客户端 等待上一条指令发送成功并收到响应之后才发送下一条指令
|
||||
public IWaitingClient<TcpClient> waitClient;
|
||||
|
||||
public TcpClient tcpReceiveClient { get; set; }
|
||||
public TcpClient tcpClient { get; set; }
|
||||
|
||||
public object receivdLockObject = new object();
|
||||
public object sendLockObject = new object();
|
||||
@ -48,8 +42,7 @@ namespace WCS.BLL
|
||||
{
|
||||
try
|
||||
{
|
||||
tcpSendClient.Connect();//调用连接,当连接不成功时,会抛出异常。
|
||||
tcpReceiveClient.Connect();
|
||||
tcpClient.Connect();//调用连接,当连接不成功时,会抛出异常。
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -71,15 +64,14 @@ namespace WCS.BLL
|
||||
BindIPHost = bindIPHost;
|
||||
ShelfTypeName = shelfTypeName;
|
||||
|
||||
tcpSendClient = new TcpClient();
|
||||
tcpReceiveClient = new TcpClient();
|
||||
|
||||
tcpClient = new TcpClient();
|
||||
|
||||
if (string.IsNullOrEmpty(BindIPHost))
|
||||
{
|
||||
//载入配置
|
||||
tcpSendClient.Setup(new TouchSocketConfig()
|
||||
tcpClient.Setup(new TouchSocketConfig()
|
||||
.SetRemoteIPHost(new IPHost(RemoteIPHost))
|
||||
//.SetBindIPHost(BindIPHost)
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//配置断线重连
|
||||
@ -91,39 +83,11 @@ namespace WCS.BLL
|
||||
//添加控制台日志注入
|
||||
a.AddConsoleLogger();
|
||||
}));
|
||||
|
||||
waitClient = tcpSendClient.CreateWaitingClient(new WaitingOptions()
|
||||
{
|
||||
FilterFunc = response => //设置用于筛选的fun委托,当返回为true时,才会响应返回
|
||||
{
|
||||
if (response.Data.Length == 13)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
tcpReceiveClient.Setup(new TouchSocketConfig()
|
||||
.SetRemoteIPHost(new IPHost(RemoteIPHost))
|
||||
//.SetBindIPHost(BindIPHost)
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//配置断线重连
|
||||
a.UseReconnection(-1, true, 1000);
|
||||
a.Add<HeartbeatAndReceivePlugin>();
|
||||
})
|
||||
.ConfigureContainer(a =>
|
||||
{
|
||||
//添加控制台日志注入
|
||||
a.AddConsoleLogger();
|
||||
}));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
//载入配置
|
||||
tcpSendClient.Setup(new TouchSocketConfig()
|
||||
tcpClient.Setup(new TouchSocketConfig()
|
||||
.SetRemoteIPHost(new IPHost(RemoteIPHost))
|
||||
.SetBindIPHost(new IPHost(BindIPHost))
|
||||
.ConfigurePlugins(a =>
|
||||
@ -137,110 +101,124 @@ namespace WCS.BLL
|
||||
//添加控制台日志注入
|
||||
a.AddConsoleLogger();
|
||||
}));
|
||||
|
||||
waitClient = tcpSendClient.CreateWaitingClient(new WaitingOptions()
|
||||
{
|
||||
FilterFunc = response => //设置用于筛选的fun委托,当返回为true时,才会响应返回
|
||||
{
|
||||
if (response.Data.Length == 13)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
tcpReceiveClient.Setup(new TouchSocketConfig()
|
||||
.SetRemoteIPHost(new IPHost(RemoteIPHost))
|
||||
//.SetBindIPHost(BindIPHost)
|
||||
.ConfigurePlugins(a =>
|
||||
{
|
||||
//配置断线重连
|
||||
a.UseReconnection(-1, true, 1000);
|
||||
a.Add<HeartbeatAndReceivePlugin>();
|
||||
})
|
||||
.ConfigureContainer(a =>
|
||||
{
|
||||
//添加控制台日志注入
|
||||
a.AddConsoleLogger();
|
||||
}));
|
||||
}
|
||||
|
||||
//添加接收事件 匹配已发送的指令
|
||||
//tcpReceiveClient.Received += (client, e) =>
|
||||
//{
|
||||
// var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
|
||||
// Task.Run(() =>
|
||||
// {
|
||||
// Logs.Write($"【校验发送接收 开始】{ShelfTypeName}" + BitConverter.ToString(data), LogsType.InstructionResend);
|
||||
// if (ShelfTypeName == "信息化货架")
|
||||
// {
|
||||
// //协议拆包
|
||||
// var len = data.Length;
|
||||
// //灯控制统一返回的是 FF-00-00-0A-00-02-D7-B5
|
||||
// if (len == 8)
|
||||
// {
|
||||
// if (data[4] == 0x00 && data[0] == 0xFF && data[1] == 0x00 && (data[5] == 0x01 || data[5] == 0x02))
|
||||
// {
|
||||
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (ShelfTypeName == "液晶标签货架")
|
||||
// {
|
||||
// Logs.Write($"【液晶标签货架】接收到指令{BitConverter.ToString(data)}", LogsType.InstructionResend);
|
||||
// }
|
||||
// //智能货架
|
||||
// else
|
||||
// {
|
||||
// var len = data.Length;
|
||||
// for (int index = 0; index < data.Length - PreFixLength; index++)
|
||||
// {
|
||||
// //协议拆包 通过前缀校验是否为完整数据包
|
||||
// var prefixInData = data.Skip(index).Take(PreFixLength);
|
||||
// var isEqual = prefixInData.SequenceEqual(Prefix);
|
||||
// if (isEqual)
|
||||
// {
|
||||
// var dataTemp = data.Skip(index).Take(PreFixLength + DataLength).ToArray();
|
||||
// if (dataTemp.Length < PreFixLength + DataLength)//拆包后不满足一条指令的长度
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// //获取返回指令的板子ID
|
||||
// var boardId = (dataTemp[PreFixLength + 0] << 8) + dataTemp[PreFixLength + 1];
|
||||
// index += (PreFixLength + DataLength - 2);//每次循环index会+1 所以这里-1
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Logs.Write($"【校验发送接收 结束】{ShelfTypeName}" + BitConverter.ToString(data), LogsType.InstructionResend);
|
||||
// });
|
||||
// return null;
|
||||
//};
|
||||
|
||||
tcpSendClient.Connected += (client, e) =>
|
||||
tcpClient.Received += (client, e) =>
|
||||
{
|
||||
this.IsSendClientOnline = true;
|
||||
var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
|
||||
Task.Run(() =>
|
||||
{
|
||||
Logs.Write($"【校验发送接收 开始】{ShelfTypeName}" + BitConverter.ToString(data), LogsType.InstructionResend);
|
||||
if (ShelfTypeName == "信息化货架")
|
||||
{
|
||||
//协议拆包
|
||||
var len = data.Length;
|
||||
//灯控制统一返回的是 FF-00-00-0A-00-02-D7-B5
|
||||
if (len == 8)
|
||||
{
|
||||
if (data[4] == 0x00 && data[0] == 0xFF && data[1] == 0x00 && (data[5] == 0x01 || data[5] == 0x02))
|
||||
{
|
||||
//查询当前板子是否有待验证的指令
|
||||
var message = new MessageDto();
|
||||
var firstMessage = MessageList.Select(t => new { Id = t.Key, Value = t.Value })
|
||||
.OrderBy(t => t.Value.CreateTime)
|
||||
.First();
|
||||
if (firstMessage != null)
|
||||
{
|
||||
MessageList.TryRemove(firstMessage.Id, out message);
|
||||
Logs.Write($"【信息化货架】以下指令已不重发:{BitConverter.ToString(firstMessage.Value.Message)}", LogsType.InstructionResend);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (ShelfTypeName == "液晶货架")
|
||||
{
|
||||
Logs.Write($"【液晶货架】接收到指令{BitConverter.ToString(data)}", LogsType.InstructionResend);
|
||||
}
|
||||
//智能货架
|
||||
else
|
||||
{
|
||||
var len = data.Length;
|
||||
for (int index = 0; index < data.Length - PreFixLength; index++)
|
||||
{
|
||||
//协议拆包 通过前缀校验是否为完整数据包
|
||||
var prefixInData = data.Skip(index).Take(PreFixLength);
|
||||
var isEqual = prefixInData.SequenceEqual(Prefix);
|
||||
if (isEqual)
|
||||
{
|
||||
var dataTemp = data.Skip(index).Take(PreFixLength + DataLength).ToArray();
|
||||
if (dataTemp.Length < PreFixLength + DataLength)//拆包后不满足一条指令的长度
|
||||
{
|
||||
continue;
|
||||
}
|
||||
//获取返回指令的板子ID
|
||||
var boardId = (dataTemp[PreFixLength + 0] << 8) + dataTemp[PreFixLength + 1];
|
||||
//查询当前板子是否有待验证的指令
|
||||
var message = new MessageDto();
|
||||
MessageList.TryGetValue(boardId, out message);
|
||||
//功能位校验 功能位相同视为已响应指令 删除对应的指令
|
||||
if (message?.Message[PreFixLength + 2] == dataTemp[PreFixLength + 2])
|
||||
{
|
||||
MessageList.TryRemove(boardId, out message);
|
||||
}
|
||||
index += (PreFixLength + DataLength - 2);//每次循环index会+1 所以这里-1
|
||||
}
|
||||
}
|
||||
}
|
||||
Logs.Write($"【校验发送接收 结束】{ShelfTypeName}" + BitConverter.ToString(data), LogsType.InstructionResend);
|
||||
});
|
||||
return null;
|
||||
};
|
||||
|
||||
tcpClient.Connected += (client, e) =>
|
||||
{
|
||||
this.IsOnline = true;
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
tcpSendClient.Disconnected += (client, e) =>
|
||||
tcpClient.Disconnected += (client, e) =>
|
||||
{
|
||||
this.IsSendClientOnline = false;
|
||||
this.IsOnline = false;
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
|
||||
tcpReceiveClient.Connected += (client, e) =>
|
||||
//配置数据重发机制
|
||||
Task.Run(async () =>
|
||||
{
|
||||
this.IsReceivedClientOnline = true;
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
//TODO如果指令已发两次 则取消重发
|
||||
await Task.Delay(100);
|
||||
if (MessageList.Count > 0)
|
||||
{
|
||||
var failedMessage = MessageList.Where(t => t.Value.LastSendTime < DateTime.Now.AddSeconds(-1))
|
||||
.ToList();
|
||||
foreach (var message in failedMessage)
|
||||
{
|
||||
Logs.Write("【指令重发】" + BitConverter.ToString(message.Value.Message) + "指令超时1s未响应", LogsType.InstructionResend);
|
||||
}
|
||||
MessageList.RemoveWhen(t => t.Value.SendTimes >= 2);
|
||||
foreach (var item in MessageList)
|
||||
{
|
||||
if (item.Value.LastSendTime < DateTime.Now.AddSeconds(-1))
|
||||
{
|
||||
|
||||
tcpReceiveClient.Disconnected += (client, e) =>
|
||||
{
|
||||
this.IsReceivedClientOnline = false;
|
||||
ReConnectAsync();
|
||||
return EasyTask.CompletedTask;
|
||||
};
|
||||
Send(item.Value.Message);
|
||||
item.Value.SendTimes++;
|
||||
item.Value.LastSendTime = DateTime.Now;
|
||||
Logs.Write("【指令重发】" + BitConverter.ToString(item.Value.Message) + "已进行重发", LogsType.InstructionResend);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -249,10 +227,7 @@ namespace WCS.BLL
|
||||
|
||||
public void ReConnectAsync()
|
||||
{
|
||||
if (IsSendClientOnline == false)
|
||||
tcpSendClient.TryConnectAsync();
|
||||
if (IsReceivedClientOnline == false)
|
||||
tcpReceiveClient.TryConnectAsync();
|
||||
tcpClient.TryConnectAsync();
|
||||
}
|
||||
|
||||
|
||||
@ -262,115 +237,34 @@ namespace WCS.BLL
|
||||
{
|
||||
var boardId = (message[3] << 8) + message[4];
|
||||
|
||||
lock (sendLockObject)
|
||||
if (boardId != 2047 && IsReSend == false)
|
||||
{
|
||||
tcpReceiveClient.Send(message);
|
||||
|
||||
var clientIpHost = tcpReceiveClient.IP + ":" + tcpReceiveClient.Port;
|
||||
Logs.Write($"【发送{clientIpHost}】{BitConverter.ToString(message)}", LogsType.Instructions);
|
||||
|
||||
//发送自带10ms间隔
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write("【发送指令时发生异常】" + ex.Message, LogsType.Instructions);
|
||||
//因异常断连时(网线已经被断了) 手动重连一次
|
||||
if (ex is NotConnectedException)
|
||||
{
|
||||
IsReceivedClientOnline = false;
|
||||
Task.Run(() =>
|
||||
MessageList.TryAdd(boardId, new MessageDto()
|
||||
{
|
||||
ReConnectAsync();
|
||||
ID = boardId,
|
||||
Message = message,
|
||||
SendTimes = 1
|
||||
});
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendList(List<byte[]> messages, bool IsReSend = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
lock (sendLockObject)
|
||||
{
|
||||
foreach (var message in messages)
|
||||
{
|
||||
var clientIpHost = tcpSendClient.IP + ":" + tcpSendClient.Port;
|
||||
tcpClient.Send(message);
|
||||
|
||||
var clientIpHost = tcpClient.IP + ":" + tcpClient.Port;
|
||||
Logs.Write($"【发送{clientIpHost}】{BitConverter.ToString(message)}", LogsType.Instructions);
|
||||
tcpReceiveClient.Send(message);
|
||||
Thread.Sleep(3);
|
||||
}
|
||||
|
||||
//发送自带15ms间隔
|
||||
Thread.Sleep(18);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write("【发送指令时发生异常】" + ex.Message, LogsType.Instructions);
|
||||
var clientIpHost = tcpClient.IP + ":" + tcpClient.Port;
|
||||
Logs.Write($"【发送指令时发生异常{clientIpHost}】" + ex.Message, LogsType.Instructions);
|
||||
//因异常断连时(网线已经被断了) 手动重连一次
|
||||
if (ex is NotConnectedException)
|
||||
{
|
||||
IsReceivedClientOnline = false;
|
||||
Task.Run(() =>
|
||||
{
|
||||
ReConnectAsync();
|
||||
});
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendThenReturn(byte[] message, bool IsReSend = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
lock (sendLockObject)
|
||||
{
|
||||
var clientIpHost = tcpSendClient.IP + ":" + tcpSendClient.Port;
|
||||
Logs.Write($"【同步等待发送{clientIpHost}】{BitConverter.ToString(message)}", LogsType.Instructions);
|
||||
|
||||
waitClient.SendThenReturn(message);
|
||||
Thread.Sleep(3);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write("【同步等待发送指令时发生异常】" + ex.Message, LogsType.Instructions);
|
||||
//因异常断连时(网线已经被断了) 手动重连一次
|
||||
if (ex is NotConnectedException)
|
||||
{
|
||||
IsSendClientOnline = false;
|
||||
Task.Run(() =>
|
||||
{
|
||||
ReConnectAsync();
|
||||
});
|
||||
}
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
|
||||
public void SendThenReturnList(List<byte[]> messages, bool IsReSend = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
lock (sendLockObject)
|
||||
{
|
||||
foreach (var message in messages)
|
||||
{
|
||||
var clientIpHost = tcpSendClient.IP + ":" + tcpSendClient.Port;
|
||||
Logs.Write($"【同步等待发送{clientIpHost}】{BitConverter.ToString(message)}", LogsType.Instructions);
|
||||
waitClient.SendThenReturn(message);
|
||||
Thread.Sleep(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write("【同步等待发送指令时发生异常】" + ex.Message, LogsType.Instructions);
|
||||
//因异常断连时(网线已经被断了) 手动重连一次
|
||||
if (ex is NotConnectedException)
|
||||
{
|
||||
IsSendClientOnline = false;
|
||||
Task.Run(() =>
|
||||
{
|
||||
ReConnectAsync();
|
||||
@ -400,97 +294,26 @@ namespace WCS.BLL
|
||||
return message;
|
||||
}
|
||||
|
||||
public List<byte[]> GenerateMessageList(int boardId, byte[] data, string message)
|
||||
{
|
||||
var list = new List<byte[]>();
|
||||
////去除不满足ASCII的数据
|
||||
//message = Regex.Replace(message, @"[^\u0000-\u007F]+", string.Empty);
|
||||
////总共发的数据位数
|
||||
//data[1] = Convert.ToByte(message.Length);
|
||||
////数据发送总帧数
|
||||
//var messageCount = Math.Ceiling((decimal)message.Length / 6);
|
||||
//for (int i = 0; i < messageCount; i++)
|
||||
//{
|
||||
// var tempmessage = string.Empty;
|
||||
// //不是最后一条指令
|
||||
// if (i != messageCount - 1)
|
||||
// {
|
||||
// tempmessage = message.Substring(i * 6, 6);
|
||||
// var charArray = tempmessage.ToCharArray();
|
||||
// for (int index = 0; index < 6; index++)
|
||||
// {
|
||||
// data[2 + index] = Convert.ToByte(charArray[index]);
|
||||
// }
|
||||
// }
|
||||
// //最后一条指令
|
||||
// else
|
||||
// {
|
||||
// tempmessage = message.Substring(i * 6, message.Length % 6 == 0 ? 6 : message.Length % 6);
|
||||
// var charArray = tempmessage.ToCharArray();
|
||||
// //先把所有数据位置为0
|
||||
// for (int index = 0; index < 6; index++)
|
||||
// {
|
||||
// data[2 + index] = 0x00;
|
||||
// }
|
||||
// //有数据的置为对应的数据
|
||||
// for (int index = 0; index < charArray.Length; index++)
|
||||
// {
|
||||
// data[2 + index] = Convert.ToByte(charArray[index]);
|
||||
// }
|
||||
// }
|
||||
// list.Add(GenerateMessage(boardId, data));
|
||||
//}
|
||||
|
||||
//var dataBtyes = Encoding.GetEncoding(936).GetBytes(message);
|
||||
|
||||
var dataBtyes = Encode.Encode.GetGb2312(message);
|
||||
data[1] = Convert.ToByte(dataBtyes.Length);
|
||||
var messageCount = Math.Ceiling((decimal)dataBtyes.Length / 6);
|
||||
for (int i = 0; i < messageCount; i++)
|
||||
{
|
||||
byte[] charArray = dataBtyes.Skip(i * 6).Take(6).ToArray();
|
||||
//不是最后一条指令
|
||||
if (i != messageCount - 1)
|
||||
{
|
||||
for (int index = 0; index < 6; index++)
|
||||
{
|
||||
data[2 + index] = charArray[index];
|
||||
}
|
||||
}
|
||||
//最后一条指令
|
||||
else
|
||||
{
|
||||
//先把所有数据位置为0
|
||||
for (int index = 0; index < 6; index++)
|
||||
{
|
||||
data[2 + index] = 0x00;
|
||||
}
|
||||
//有数据的置为对应的数据
|
||||
for (int index = 0; index < charArray.Length; index++)
|
||||
{
|
||||
data[2 + index] = charArray[index];
|
||||
}
|
||||
}
|
||||
list.Add(GenerateMessage(boardId, data));
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
private string CharToAscii(char chr)
|
||||
{
|
||||
return ((int)chr).ToString("X").PadLeft(2, '0');
|
||||
}
|
||||
|
||||
private byte[] StrToToHexByte(string hexString)
|
||||
{
|
||||
hexString = hexString.Replace(" ", string.Empty);
|
||||
if ((hexString.Length % 2) != 0)
|
||||
hexString = "0" + hexString;
|
||||
byte[] returnBytes = new byte[hexString.Length / 2];
|
||||
for (int i = 0; i < returnBytes.Length; i++)
|
||||
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
|
||||
return returnBytes;
|
||||
}
|
||||
}
|
||||
|
||||
//发送指令的记录
|
||||
public class MessageDto
|
||||
{
|
||||
public int ID { get; set; }
|
||||
/// <summary>
|
||||
/// 最后一次发送时间
|
||||
/// </summary>
|
||||
public DateTime LastSendTime { get; set; } = DateTime.Now;
|
||||
|
||||
public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||
/// <summary>
|
||||
/// 发送内容
|
||||
/// </summary>
|
||||
public byte[] Message { get; set; }
|
||||
/// <summary>
|
||||
/// 发送次数
|
||||
/// </summary>
|
||||
public int SendTimes { get; set; } = 0;//第几次发送
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,14 +7,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.0" />
|
||||
<PackageReference Include="TouchSocket" Version="2.0.11" />
|
||||
<PackageReference Include="TouchSocket.Http" Version="2.0.3" />
|
||||
<PackageReference Include="XLParser" Version="1.7.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Encode\Encode.csproj" />
|
||||
<ProjectReference Include="..\WCS.DAL\WCS.DAL.csproj" />
|
||||
<ProjectReference Include="..\WCS.Model\WCS.Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
@ -10,12 +10,10 @@ namespace WCS.DAL
|
||||
{
|
||||
public static readonly string AppDir = AppDomain.CurrentDomain.BaseDirectory;
|
||||
|
||||
public static readonly string DataPath = Path.Combine(AppDir, "data");
|
||||
public static readonly string LogDbPath = Path.Combine(AppDir, "data\\log.db3");
|
||||
|
||||
public static readonly string LogDbPath = Path.Combine(DataPath, "log.db3");
|
||||
public static readonly string DataDbPath = Path.Combine(AppDir, "data\\data.db3");
|
||||
|
||||
public static readonly string DataDbPath = Path.Combine(DataPath, "data.db3");
|
||||
|
||||
public static readonly string AuthDbPath = Path.Combine(DataPath, "auth.db3");
|
||||
public static readonly string AuthDbPath = Path.Combine(AppDir, "data\\auth.db3");
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.Home
|
||||
{
|
||||
public class SetBoardIdRequest
|
||||
{
|
||||
public string IPPort { get; set; }
|
||||
public int StartId { get; set; }
|
||||
}
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.MKYBackgroundThread
|
||||
{
|
||||
public class StockQueryRequest
|
||||
{
|
||||
public List<string> storeCodes { get; set; } = new List<string>();
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.MKYBackgroundThread
|
||||
{
|
||||
/// <summary>
|
||||
/// 库存查询返回实体
|
||||
/// </summary>
|
||||
public class StockQueryResponse
|
||||
{
|
||||
public int code { get; set; }
|
||||
|
||||
public string data { get; set; }
|
||||
|
||||
public string message { get; set; }
|
||||
}
|
||||
|
||||
public class StockQueryResponseDataItem
|
||||
{
|
||||
public string batch_no { get; set; } = "-";
|
||||
|
||||
public string location_code { get; set; } = "-";
|
||||
|
||||
public decimal qty { get; set; } = 0;
|
||||
|
||||
public string material_name { get; set; } = "-";
|
||||
|
||||
public string material_code { get; set; } = "-";
|
||||
|
||||
/// <summary>
|
||||
/// 物料规格
|
||||
/// </summary>
|
||||
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string material_spec { get; set; } = "-";
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.MKYBackgroundThread
|
||||
{
|
||||
public class SysOrderRequest
|
||||
{
|
||||
public string itemNo { get; set; }
|
||||
|
||||
|
||||
public string guid { get; set; }
|
||||
|
||||
|
||||
public string matCode { get; set; }
|
||||
|
||||
|
||||
public string matBatch { get; set; }
|
||||
|
||||
|
||||
public string matSN { get; set; }
|
||||
|
||||
|
||||
public string orderNumber { get; set; }
|
||||
|
||||
|
||||
public int orderType { get; set; }
|
||||
|
||||
|
||||
public string storeCode { get; set; }
|
||||
|
||||
|
||||
public int qty { get; set; }
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.MKYBackgroundThread
|
||||
{
|
||||
public class SysOrderResponse
|
||||
{
|
||||
public int code { get; set; }
|
||||
public string message { get; set; }
|
||||
public object data { get; set; }
|
||||
}
|
||||
|
||||
public class LoginRequest
|
||||
{
|
||||
public string userName { get; set; } = "cmeimZtwcs";
|
||||
public string password { get; set; } = "Cmeim@ztwcs2024!@#";
|
||||
}
|
||||
|
||||
public class LoginResponse
|
||||
{
|
||||
public int code { get; set; }
|
||||
public string message { get; set; }
|
||||
public string data { get; set; }
|
||||
}
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
|
||||
namespace WCS.Model.ApiModel.MXL4
|
||||
{
|
||||
/// <summary>
|
||||
/// 刷新库位库存显示信息请求实体
|
||||
/// </summary>
|
||||
public class RefreshInventoryRequest : RequestBase
|
||||
{
|
||||
public List<string> StoreCodes { get; set; }
|
||||
}
|
||||
}
|
@ -5,31 +5,13 @@ using WCS.BLL.DbModels.Task;
|
||||
|
||||
namespace WCS.Model.ApiModel.MXL4
|
||||
{
|
||||
public class CancelRequest : RequestBase
|
||||
{
|
||||
public List<string> matSN { get; set; }
|
||||
}
|
||||
|
||||
public class CancelOrderByCodeRequest : RequestBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 单据号
|
||||
/// </summary>
|
||||
public string OrderNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料编码
|
||||
/// </summary>
|
||||
public string MatCode { get; set; }
|
||||
}
|
||||
|
||||
public class SysOrderMXL4Request : RequestBase
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 按钮颜色
|
||||
/// </summary>
|
||||
public string Corlor { get; set; }
|
||||
public ButtonColorEnum Corlor { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务单号
|
||||
@ -54,11 +36,6 @@ namespace WCS.Model.ApiModel.MXL4
|
||||
/// </summary>
|
||||
public Guid Guid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///系统那边的主键
|
||||
/// </summary>
|
||||
public string ItemNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 库位编码
|
||||
/// </summary>
|
||||
@ -67,22 +44,22 @@ namespace WCS.Model.ApiModel.MXL4
|
||||
/// <summary>
|
||||
/// 物料编码
|
||||
/// </summary>
|
||||
public string MatCode { get; set; } = "-";
|
||||
public string MatCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料名称
|
||||
/// </summary>
|
||||
public string MatName { get; set; } = "-";
|
||||
public string MatName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料规格
|
||||
/// </summary>
|
||||
public string MatSpec { get; set; } = "-";
|
||||
public string MatSpec { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料批次
|
||||
/// </summary>
|
||||
public string MatBatch { get; set; } = "-";
|
||||
public string MatBatch { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 物料SN
|
||||
@ -92,6 +69,6 @@ namespace WCS.Model.ApiModel.MXL4
|
||||
/// <summary>
|
||||
/// 数量
|
||||
/// </summary>
|
||||
public decimal Qty { get; set; }
|
||||
public int Qty { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,8 @@ namespace WCS.BLL.DbModels.Task
|
||||
|
||||
public enum TaskModeEnum
|
||||
{
|
||||
入库模式 = 1,
|
||||
出库模式 = 2,
|
||||
盘点模式 = 3,
|
||||
待机模式 = 0
|
||||
入库模式 = 0,
|
||||
出库模式 = 1,
|
||||
盘点模式 = 2
|
||||
}
|
||||
}
|
||||
|
@ -9,11 +9,44 @@ namespace WCS.Model.ApiModel.SingleLight
|
||||
/// <summary>
|
||||
/// 巷道灯颜色 如果不传 默认为-1 不发送对应指令
|
||||
/// </summary>
|
||||
public int ColorMode { get; set; } = -1;
|
||||
public int LightMode { get; set; } = -1;
|
||||
public int WarningLightColor { get; set; } = -1;
|
||||
public int WarningLightMode { get; set; } = -1;
|
||||
/// <summary>
|
||||
/// 巷道灯蜂鸣器模式 如果不传 默认为-1 不发送对应指令
|
||||
/// </summary>
|
||||
public int WarningBuzzerMode { get; set; } = -1;
|
||||
|
||||
/// <summary>
|
||||
/// 库位灯控制
|
||||
/// </summary>
|
||||
public List<string> StoreCodes { get; set; }
|
||||
public List<StoreListItem> StoreList { get; set; }
|
||||
}
|
||||
|
||||
public class StoreListItem
|
||||
{
|
||||
#region
|
||||
/// <summary>
|
||||
/// 库位编码
|
||||
/// </summary>
|
||||
public string StoreCode { get; set; }
|
||||
/// <summary>
|
||||
/// 货架Id
|
||||
/// </summary>
|
||||
public int ShelfId { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// 板子Id
|
||||
/// </summary>
|
||||
public int BoardId { get; set; } = 0;
|
||||
/// <summary>
|
||||
/// 亮灯模式
|
||||
/// </summary>
|
||||
public int LightMode { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 亮灯颜色
|
||||
/// </summary>
|
||||
public int LightColor { get; set; } = 0;
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.SingleLight
|
||||
{
|
||||
public class TurnoffLightByAreaRequest : RequestBase
|
||||
{
|
||||
public string Area { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.StoreInfo
|
||||
{
|
||||
public class QueryStoreInfoHistoryVoltageRequest : RequestBase
|
||||
{
|
||||
public List<int> StoreIds { get; set; }
|
||||
}
|
||||
}
|
44
WCS.Model/ApiModel/StoreInfo/StoreInfoHistoryVoltageModel.cs
Normal file
44
WCS.Model/ApiModel/StoreInfo/StoreInfoHistoryVoltageModel.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace WCS.Model.ApiModel.StoreInfo
|
||||
{
|
||||
public partial class StoreInfoHistoryVoltageModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string StoreCode { get; set; }
|
||||
public int ShelfTypeId { get; set; }
|
||||
public int ModuleId { get; set; }
|
||||
|
||||
public string ModuleCode { get; set; }
|
||||
|
||||
public int ShelfId { get; set; }
|
||||
|
||||
public string ShelfCode { get; set; }
|
||||
|
||||
public int BoardId { get; set; }
|
||||
|
||||
public int LightNumber { get; set; }
|
||||
|
||||
public int Priority { get; set; }
|
||||
|
||||
public string CurrentMatSn { get; set; }
|
||||
|
||||
public decimal CurrentVoltage { get; set; }
|
||||
|
||||
public decimal StandardVoltage { get; set; }
|
||||
|
||||
public decimal OffsetVoltage { get; set; }
|
||||
|
||||
public string BigShelfCode { get; set; }
|
||||
public string R { get; set; }
|
||||
public string C { get; set; }
|
||||
public string Wei { get; set; }
|
||||
public string GroupName { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
public int RowNumber { get; set; }
|
||||
public bool IsSelected { get; set; }
|
||||
}
|
||||
}
|
@ -3,7 +3,4 @@
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
@ -1,17 +1,15 @@
|
||||
using Kdbndp;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using SqlSugar;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.HardWare;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.BLL.Services.Service;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
using WCS.Model;
|
||||
using WCS.Model.ApiModel.Home;
|
||||
using Mode = WCS.BLL.HardWare.Mode;
|
||||
|
||||
namespace WCS.WebApi.Controllers
|
||||
{
|
||||
@ -139,11 +137,10 @@ namespace WCS.WebApi.Controllers
|
||||
var tcpClients = TCPClientManager.TCPClients.Select(t => new
|
||||
{
|
||||
RemoteIPHost = t.RemoteIPHost,
|
||||
IsReceivedClientOnline = t.IsReceivedClientOnline,
|
||||
IsSendClientOnline = t.IsSendClientOnline,
|
||||
IsOnline = t.IsOnline,
|
||||
IsFirstConnected = t.IsFirstConnected,
|
||||
tcpClientIsNull = t.tcpSendClient == null,
|
||||
tcpClientIsOnLine = t.tcpSendClient?.Online,
|
||||
tcpClientIsNull = t.tcpClient == null,
|
||||
tcpClientIsOnLine = t.tcpClient?.Online,
|
||||
|
||||
}).ToList();
|
||||
//直接返回当前内存中缓存的货架和状态
|
||||
@ -214,12 +211,12 @@ namespace WCS.WebApi.Controllers
|
||||
if (request.IsResetAll == false)
|
||||
shelfs = ShelfManager.Shelves
|
||||
.Where(t => request.SelfIds.Contains(t.ShelfId))
|
||||
.Where(t => t.CurrentMode != TaskModeEnum.待机模式)
|
||||
.Where(t => t.CurrentMode != Mode.待机模式)
|
||||
.ToList();
|
||||
else
|
||||
shelfs = ShelfManager.Shelves
|
||||
.Where(t => request.GroupNames.Contains(t.GroupName))
|
||||
.Where(t => t.CurrentMode != TaskModeEnum.待机模式)
|
||||
.Where(t => t.CurrentMode != Mode.待机模式)
|
||||
.ToList();
|
||||
foreach (var shelf in shelfs)
|
||||
{
|
||||
@ -292,550 +289,5 @@ namespace WCS.WebApi.Controllers
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成模组信息
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("generateModuleInfo")]
|
||||
[HttpPost(Name = "generateModuleInfo")]
|
||||
public async Task<ResponseBase> generateModuleInfo(RequestBase request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取液晶的货架
|
||||
var shelfInfos = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.Where(t => t.ShelfTypeName.Contains("液晶") && !t.ShelfCode.Contains("CP"))
|
||||
.ToList();
|
||||
var moduleInfos = new List<ModuleInfo>();
|
||||
|
||||
int boardId = 1;
|
||||
var lastClientCode = string.Empty;
|
||||
|
||||
foreach (var shelfInfo in shelfInfos)
|
||||
{
|
||||
if (lastClientCode != shelfInfo.ClientIp)
|
||||
{
|
||||
lastClientCode = shelfInfo.ClientIp;
|
||||
boardId = 1;
|
||||
}
|
||||
int shelfNumber = 1;
|
||||
int floorNumber = 1;
|
||||
int moduleNumber = 0;
|
||||
while (floorNumber <= 4)
|
||||
{
|
||||
moduleNumber++;
|
||||
if (moduleNumber > 7)
|
||||
{
|
||||
shelfNumber++;
|
||||
moduleNumber = 1;
|
||||
}
|
||||
if (shelfNumber > 4)
|
||||
{
|
||||
floorNumber++;
|
||||
shelfNumber = 1;
|
||||
}
|
||||
|
||||
if (floorNumber == 5)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var moduleCode = $"{shelfInfo.ShelfCode}-{shelfNumber}-L{floorNumber}-{moduleNumber}";
|
||||
var module = new ModuleInfo()
|
||||
{
|
||||
ModuleCode = moduleCode,
|
||||
ShelfTypeId = 3,
|
||||
ShelfId = shelfInfo.Id,
|
||||
ShelfCode = shelfInfo.ShelfCode,
|
||||
BoardId = boardId++,
|
||||
LightCount = 1,
|
||||
CleintIp = shelfInfo.ClientIp,
|
||||
GroupName = shelfInfo.GroupName,
|
||||
R = floorNumber.ToString(),
|
||||
C = moduleNumber.ToString(),
|
||||
IsEnable = true,
|
||||
};
|
||||
moduleInfos.Add(module);
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
DbHelp.db.Insertable(moduleInfos).ExecuteCommand();
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "生成成功!",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "生成失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("generateCPModuleInfo")]
|
||||
[HttpPost(Name = "generateCPModuleInfo")]
|
||||
public async Task<ResponseBase> generateCPModuleInfo(RequestBase request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取液晶的货架
|
||||
var shelfInfos = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.Where(t => t.ShelfTypeName.Contains("液晶") && t.ShelfCode.Contains("CP"))
|
||||
.ToList();
|
||||
var moduleInfos = new List<ModuleInfo>();
|
||||
|
||||
int boardId = 1;
|
||||
var lastClientCode = string.Empty;
|
||||
|
||||
foreach (var shelfInfo in shelfInfos)
|
||||
{
|
||||
if (lastClientCode != shelfInfo.ClientIp)
|
||||
{
|
||||
lastClientCode = shelfInfo.ClientIp;
|
||||
boardId = 1;
|
||||
}
|
||||
|
||||
//先拆分shelfCode
|
||||
var input = shelfInfo.ShelfCode.Split("-")[1];
|
||||
List<int> numbers = new List<int>();
|
||||
for (int i = 0; i < input.Length; i += 2)
|
||||
{
|
||||
// 提取两位字符
|
||||
string numberStr = input.Substring(i, 2);
|
||||
// 转换为整数并添加到列表中
|
||||
int number = int.Parse(numberStr);
|
||||
numbers.Add(number);
|
||||
}
|
||||
// 将列表转换为数组(如果需要)
|
||||
int[] shelfNumbers = numbers.ToArray();
|
||||
foreach (var shelfNumber in shelfNumbers)
|
||||
{
|
||||
int floorNumber = 1;
|
||||
int moduleNumber = 0;
|
||||
while (floorNumber <= 4)
|
||||
{
|
||||
moduleNumber++;
|
||||
if (moduleNumber > 7)
|
||||
{
|
||||
moduleNumber = 1;
|
||||
floorNumber++;
|
||||
}
|
||||
if (floorNumber == 5)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var moduleCode = $"CP-{shelfNumber}-L{floorNumber}-{moduleNumber}";
|
||||
var module = new ModuleInfo()
|
||||
{
|
||||
ModuleCode = moduleCode,
|
||||
ShelfTypeId = 3,
|
||||
ShelfId = shelfInfo.Id,
|
||||
ShelfCode = shelfInfo.ShelfCode,
|
||||
BoardId = boardId++,
|
||||
LightCount = 1,
|
||||
CleintIp = shelfInfo.ClientIp,
|
||||
GroupName = shelfInfo.GroupName,
|
||||
R = floorNumber.ToString(),
|
||||
C = moduleNumber.ToString(),
|
||||
IsEnable = true,
|
||||
};
|
||||
moduleInfos.Add(module);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
DbHelp.db.Insertable(moduleInfos).ExecuteCommand();
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "生成成功!",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "生成失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 进入调试模式
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("goInDebugMode")]
|
||||
[HttpPost(Name = "goInDebugMode")]
|
||||
public async Task<ResponseBase> goInDebugMode(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
//进入调试模式
|
||||
byte[] data = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xDB, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
client.Send(data);
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("goOutDebugMode")]
|
||||
[HttpPost(Name = "goOutDebugMode")]
|
||||
public async Task<ResponseBase> goOutDebugMode(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
//退出调试模式
|
||||
byte[] data = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xDB, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
client.Send(data);
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("setId")]
|
||||
[HttpPost(Name = "setId")]
|
||||
public async Task<ResponseBase> setId(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
//退出调试模式
|
||||
byte[] data = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xDB, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
client.Send(data);
|
||||
|
||||
var boardId = request.StartId;
|
||||
var boardIdData = BitConverter.GetBytes(unchecked((short)boardId));
|
||||
// 检查是否需要交换字节
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
// 如果是小端序系统,则交换字节
|
||||
byte temp = boardIdData[0];
|
||||
boardIdData[0] = boardIdData[1];
|
||||
boardIdData[1] = temp;
|
||||
}
|
||||
|
||||
Thread.Sleep(3000);
|
||||
byte[] data1 = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
data1[6] = boardIdData[0];
|
||||
data1[7] = boardIdData[1];
|
||||
|
||||
client.Send(data1);
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("setLight")]
|
||||
[HttpPost(Name = "setLight")]
|
||||
public async Task<ResponseBase> setLight(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
|
||||
var boardId = request.StartId;
|
||||
var boardIdData = BitConverter.GetBytes(unchecked((short)boardId));
|
||||
// 检查是否需要交换字节
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
// 如果是小端序系统,则交换字节
|
||||
byte temp = boardIdData[0];
|
||||
boardIdData[0] = boardIdData[1];
|
||||
boardIdData[1] = temp;
|
||||
}
|
||||
byte[] data1 = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
data1[7] = boardIdData[0];
|
||||
data1[8] = boardIdData[1];
|
||||
|
||||
client.Send(data1);
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[Route("testLight")]
|
||||
[HttpPost(Name = "testLight")]
|
||||
public async Task<ResponseBase> testLight(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
|
||||
var boardId = request.StartId;
|
||||
for (; boardId <= 224; boardId++)
|
||||
{
|
||||
var boardIdData = BitConverter.GetBytes(unchecked((short)boardId));
|
||||
// 检查是否需要交换字节
|
||||
if (BitConverter.IsLittleEndian)
|
||||
{
|
||||
// 如果是小端序系统,则交换字节
|
||||
byte temp = boardIdData[0];
|
||||
boardIdData[0] = boardIdData[1];
|
||||
boardIdData[1] = temp;
|
||||
}
|
||||
|
||||
//发送入库亮灯
|
||||
byte[] data1 = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xA1, 0x01, 0x02, 0x02, 0x0A, 0x00, 0x00, 0x00 };
|
||||
data1[7] = boardIdData[0];
|
||||
data1[8] = boardIdData[1];
|
||||
|
||||
client.Send(data1);
|
||||
Thread.Sleep(490);
|
||||
//发送退出入库
|
||||
byte[] data2 = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xA1, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
data2[7] = boardIdData[0];
|
||||
data2[8] = boardIdData[1];
|
||||
client.Send(data2);
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("resetByTCP")]
|
||||
[HttpPost(Name = "resetByTCP")]
|
||||
public async Task<ResponseBase> resetByTCP(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取TCP
|
||||
var client = TCPClientManager.TCPClients
|
||||
.Where(t => t.RemoteIPHost == request.IPPort)
|
||||
.First();
|
||||
if (client == null)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "未获取到对应连接,请检查地址",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
byte[] data = { 0x08, 0x00, 0x00, 0x07, 0xFF, 0xBE, 0x52, 0x54, 0x41, 0x52, 0x54, 0x0A, 0xED };
|
||||
client.Send(data);
|
||||
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "指令发送成功",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase<object>()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "指令发送失败" + ex.Message,
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 配置库位编码
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("setStoreCode")]
|
||||
[HttpPost(Name = "setStoreCode")]
|
||||
public async Task<ResponseBase> setStoreCode(SetBoardIdRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
var errorList = new List<string>();
|
||||
//1.获取所有液晶标签货架
|
||||
var shelfs = ShelfManager.Shelves.Where(t => t.ShelfTypeName == "液晶标签货架")
|
||||
.WhereIF(!string.IsNullOrEmpty(request.IPPort), t => t.ClientIp == request.IPPort)
|
||||
.Select(t => t as MXL4Shelf)
|
||||
.ToList();
|
||||
shelfs.ForEach(t =>
|
||||
{
|
||||
t.MXL4Modules.ForEach(m =>
|
||||
{
|
||||
try
|
||||
{
|
||||
m.SendStoreCode(m.ModuleCode, t.TcpCleint);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorList.Add($"模组{m.ModuleCode}更新库位ID失败!原因:{ex.Message}");
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
Data = errorList
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,116 +45,5 @@ namespace WCS.WebApi.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
[Route("cancelOrderMXL4")]
|
||||
[HttpPost(Name = "cancelOrderMXL4")]
|
||||
public async Task<ResponseBase> cancelOrderMXL4(CancelRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _mxl4Service.cancelOrderMXL4(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通过工单号(必填)+物料编码(非必填) 进行取消订单
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("cancelOrderByCode")]
|
||||
[HttpPost(Name = "cancelOrderByCode")]
|
||||
public async Task<ResponseBase> cancelOrderByCode(CancelOrderByCodeRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _mxl4Service.cancelOrderByCode(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新库存信息 当上游系统入库后可以调用此接口对硬件显示的库存信息进行刷新
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Route("refreshInventory")]
|
||||
[HttpPost(Name = "refreshInventory")]
|
||||
public async Task<ResponseCommon> refreshInventory(RefreshInventoryRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
//校验传入的参数
|
||||
if (request.StoreCodes == null || request.StoreCodes.Count == 0)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 201,
|
||||
Message = "操作失败:缺少需要刷新的库位!",
|
||||
};
|
||||
}
|
||||
return await _mxl4Service.refreshInventoryRequest(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region 调试用的API
|
||||
[Route("reSetAll")]
|
||||
[HttpPost(Name = "reSetAll")]
|
||||
public async Task<ResponseBase> reSetAll()
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _mxl4Service.reSetAll();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[Route("defaultDisplay")]
|
||||
[HttpPost(Name = "defaultDisplay")]
|
||||
public async Task<ResponseBase> defaultDisplay()
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _mxl4Service.defaultDisplay();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ namespace WCS.WebApi.Controllers
|
||||
{
|
||||
var guid = Guid.NewGuid();
|
||||
//TO DO如何将记日志的 和不记日志的分开 解耦
|
||||
if (!context.Request.Path.ToString().Contains("getInterfaceRecord") && !context.Request.Path.ToString().Contains("getShelfStatus") && !context.Request.Path.ToString().Contains("GetKanBanData"))
|
||||
if (!context.Request.Path.ToString().Contains("getInterfaceRecord") && !context.Request.Path.ToString().Contains("getShelfStatus"))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -1,8 +1,6 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using WCS.BLL.Services.IService;
|
||||
using WCS.BLL.Services.Service;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
using WCS.Model;
|
||||
using WCS.Model.ApiModel;
|
||||
using WCS.Model.ApiModel.SelfCheck;
|
||||
@ -46,210 +44,5 @@ namespace WCS.WebApi.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
[Route("turnoffLightByArea")]
|
||||
[HttpPost(Name = "turnoffLightByArea")]
|
||||
public async Task<ResponseBase> TurnoffLightByArea(TurnoffLightByAreaRequest request)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await _singleLightService.TurnoffLightByArea(request);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[Route("GetKanBanData")]
|
||||
[HttpGet(Name = "GetKanBanData")]
|
||||
public async Task<ResponseBase> GetKanBanData()
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取单灯类型的库位
|
||||
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => t.ShelfTypeId == 2)
|
||||
.OrderBy(t => t.Area)
|
||||
.OrderBy(t => t.StoreCode)
|
||||
.Select(t => new
|
||||
{
|
||||
Area = t.Area,
|
||||
StoreCode = t.StoreCode,
|
||||
LightMode = t.LightMode,
|
||||
ColorMode = t.ColorMode,
|
||||
})
|
||||
.ToList();
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
Data = stores
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Route("GenerateSingleLightStoreInfo")]
|
||||
[HttpGet(Name = "GenerateSingleLightStoreInfo")]
|
||||
public async Task<ResponseBase> GenerateSingleLightStoreInfo()
|
||||
{
|
||||
try
|
||||
{
|
||||
//获取单灯类型的货架
|
||||
var shelfInfo = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.Where(t => t.ShelfTypeName == "信息化货架")
|
||||
.OrderBy(t => t.ShelfCode)
|
||||
.ToList();
|
||||
var storesToSave = new List<StoreInfo>();
|
||||
var modulesToSave = new List<ModuleInfo>();
|
||||
|
||||
foreach (var shelf in shelfInfo)
|
||||
{
|
||||
if (shelf.ShelfCode == "C07-4")
|
||||
;
|
||||
var row = shelf.Rowcounts % 2;
|
||||
//如果是奇数行
|
||||
if (row == 1)
|
||||
{
|
||||
//之前已经占用的id
|
||||
var id = (shelf.Rowcounts - 1) * (shelf.Columncounts + 6);
|
||||
|
||||
//奇数行 灯Id是最后一个灯
|
||||
for (int i = shelf.Columncounts; i > 0; i--)
|
||||
{
|
||||
|
||||
|
||||
var storeInfo = new StoreInfo()
|
||||
{
|
||||
StoreCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfTypeId = shelf.ShelfTypeId,
|
||||
ModuleId = 0,
|
||||
ModuleCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfId = shelf.Id,
|
||||
ShelfCode = shelf.ShelfCode,
|
||||
BoardId = ++id,
|
||||
LightNumber = 1,
|
||||
Priority = 0,
|
||||
R = shelf.Rowcounts.ToString(),
|
||||
C = i.ToString(),
|
||||
Wei = "1",
|
||||
SingleLightNumber = 1,
|
||||
LightMode = 0,
|
||||
ColorMode = 0,
|
||||
GroupName = shelf.GroupName,
|
||||
Area = shelf.ShelfCode.Substring(0, 1),
|
||||
};
|
||||
storesToSave.Add(storeInfo);
|
||||
|
||||
var moduleInfo = new ModuleInfo()
|
||||
{
|
||||
ModuleCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfTypeId = shelf.ShelfTypeId,
|
||||
ShelfId = shelf.Id,
|
||||
ShelfCode = shelf.ShelfCode,
|
||||
BoardId = storeInfo.BoardId,
|
||||
LightCount = 1,
|
||||
CleintIp = shelf.ClientIp,
|
||||
GroupName = shelf.GroupName,
|
||||
R = storeInfo.R,
|
||||
C = storeInfo.C,
|
||||
Bigshelfcode = "",
|
||||
IsEnable = true,
|
||||
CurrentMode = BLL.DbModels.Task.TaskModeEnum.待机模式,
|
||||
};
|
||||
modulesToSave.Add(moduleInfo);
|
||||
}
|
||||
|
||||
shelf.LightId = ++id;
|
||||
}
|
||||
//偶数行
|
||||
else
|
||||
{
|
||||
//之前已经占用的id
|
||||
var id = (shelf.Rowcounts - 1) * (shelf.Columncounts + 6);
|
||||
shelf.LightId = ++id;
|
||||
|
||||
//灯占6个ID
|
||||
id = id + 5;
|
||||
//奇数行 灯Id是最后一个灯
|
||||
for (int i = 1; i <= shelf.Columncounts; i++)
|
||||
{
|
||||
var storeInfo = new StoreInfo()
|
||||
{
|
||||
StoreCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfTypeId = shelf.ShelfTypeId,
|
||||
ModuleId = 0,
|
||||
ModuleCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfId = shelf.Id,
|
||||
ShelfCode = shelf.ShelfCode,
|
||||
BoardId = ++id,
|
||||
LightNumber = 1,
|
||||
Priority = 0,
|
||||
R = shelf.Rowcounts.ToString(),
|
||||
C = i.ToString(),
|
||||
Wei = "1",
|
||||
SingleLightNumber = 1,
|
||||
LightMode = 0,
|
||||
ColorMode = 0,
|
||||
GroupName = shelf.GroupName,
|
||||
Area = shelf.ShelfCode.Substring(0, 1),
|
||||
};
|
||||
storesToSave.Add(storeInfo);
|
||||
|
||||
var moduleInfo = new ModuleInfo()
|
||||
{
|
||||
ModuleCode = shelf.ShelfCode + "-" + i.ToString(),
|
||||
ShelfTypeId = shelf.ShelfTypeId,
|
||||
ShelfId = shelf.Id,
|
||||
ShelfCode = shelf.ShelfCode,
|
||||
BoardId = storeInfo.BoardId,
|
||||
LightCount = 1,
|
||||
CleintIp = shelf.ClientIp,
|
||||
GroupName = shelf.GroupName,
|
||||
R = storeInfo.R,
|
||||
C = storeInfo.C,
|
||||
Bigshelfcode = "",
|
||||
IsEnable = true,
|
||||
CurrentMode = BLL.DbModels.Task.TaskModeEnum.待机模式,
|
||||
};
|
||||
modulesToSave.Add(moduleInfo);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DbHelp.db.Insertable(storesToSave).ExecuteCommand();
|
||||
DbHelp.db.Insertable(modulesToSave).ExecuteCommand();
|
||||
DbHelp.db.Updateable(shelfInfo).ExecuteCommand();
|
||||
|
||||
return new ResponseCommon()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "success",
|
||||
Data = null
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "操作失败:" + ex.Message,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,8 @@ using WCS.Model.ApiModel.StoreInfo;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.Model.ApiModel.MatBaseInfo;
|
||||
using WCS.DAL.DbModels;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.BLL.Config;
|
||||
|
||||
namespace WCS.WebApi.Controllers
|
||||
{
|
||||
@ -44,7 +46,6 @@ namespace WCS.WebApi.Controllers
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region 模组管理
|
||||
[Route("getModules")]
|
||||
[HttpPost(Name = "getModules")]
|
||||
@ -67,6 +68,13 @@ namespace WCS.WebApi.Controllers
|
||||
return await _storeInfoService.queryModuleVoltage(request);
|
||||
}
|
||||
|
||||
[Route("queryStoreInfoHistoryVoltage")]
|
||||
[HttpPost(Name = "queryStoreInfoHistoryVoltage")]
|
||||
public async Task<ResponseBase> queryStoreInfoHistoryVoltage(QueryStoreInfoHistoryVoltageRequest request)
|
||||
{
|
||||
return await _storeInfoService.queryStoreInfoHistoryVoltage(request);
|
||||
}
|
||||
|
||||
[Route("calibrationSetOffset")]
|
||||
[HttpPost(Name = "calibrationSetOffset")]
|
||||
public async Task<ResponseBase> calibrationSetOffset(CalibrationSetOffsetRequest request)
|
||||
@ -96,6 +104,125 @@ namespace WCS.WebApi.Controllers
|
||||
{
|
||||
return await _storeInfoService.getDisablePercent();
|
||||
}
|
||||
|
||||
|
||||
|
||||
[Route("genModuleStoreInfos")]
|
||||
[HttpPost(Name = "genModuleStoreInfos")]
|
||||
public async Task<ResponseBase> genModuleStoreInfos(RequestBase request)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (request.UserName != "aaa")
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = "用户名不对头!无法生成模组库位"
|
||||
};
|
||||
}
|
||||
//获取货架 此组后端管的货架
|
||||
var shelfInfos = DbHelp.db.Queryable<ShelfInfo>()
|
||||
.Where(t => t.GroupName == LocalFile.Config.GroupName)
|
||||
.OrderBy(t => t.BigShelfCode)
|
||||
.OrderBy(t => t.ShelfCode)
|
||||
.ToList();
|
||||
|
||||
var lastBindBigShelfCode = string.Empty;
|
||||
var lastColumnCount = 1;
|
||||
|
||||
List<ModuleInfo> moduleInfos = new List<ModuleInfo>();
|
||||
//生成模组
|
||||
foreach (var shelfInfo in shelfInfos)
|
||||
{
|
||||
var modulePreFix = shelfInfo.IsBind ? shelfInfo.BigShelfCode : shelfInfo.ShelfCode;
|
||||
//不绑定或者绑定换了面 重新从1开始计数
|
||||
if (shelfInfo.BigShelfCode != lastBindBigShelfCode)
|
||||
{
|
||||
lastColumnCount = 1;
|
||||
}
|
||||
lastBindBigShelfCode = shelfInfo.BigShelfCode;
|
||||
for (int rowIndex = 0; rowIndex < shelfInfo.Rowcounts; rowIndex++)
|
||||
{
|
||||
for (int columnIndex = 0; columnIndex < shelfInfo.Columncounts; columnIndex++)
|
||||
{
|
||||
var moduleCode = modulePreFix + "-R" + (rowIndex + 1).ToString() + "C" + (lastColumnCount + columnIndex).ToString();
|
||||
var moduleInfo = new ModuleInfo()
|
||||
{
|
||||
ModuleCode = moduleCode,
|
||||
ShelfTypeId = shelfInfo.ShelfTypeId,
|
||||
ShelfId = shelfInfo.Id,
|
||||
ShelfCode = shelfInfo.ShelfCode,
|
||||
BoardId = shelfInfo.FirtstBoardId++,
|
||||
LightCount = shelfInfo.LightCount,
|
||||
CleintIp = shelfInfo.ClientIp,
|
||||
GroupName = shelfInfo.GroupName,
|
||||
R = (rowIndex + 1).ToString(),
|
||||
C = (lastColumnCount + columnIndex).ToString(),
|
||||
Bigshelfcode = shelfInfo.BigShelfCode,
|
||||
IsEnable = true,
|
||||
CurrentMode = BLL.HardWare.Mode.待机模式,
|
||||
};
|
||||
moduleInfos.Add(moduleInfo);
|
||||
}
|
||||
}
|
||||
lastColumnCount = lastColumnCount + shelfInfo.Columncounts;
|
||||
}
|
||||
DbHelp.db.Insertable(moduleInfos).ExecuteCommand();
|
||||
//生成库位
|
||||
moduleInfos = DbHelp.db.Queryable<ModuleInfo>()
|
||||
.Where(t => t.GroupName == LocalFile.Config.GroupName)
|
||||
.OrderBy(t => t.Id)
|
||||
.ToList();
|
||||
List<StoreInfo> storeInfos = new List<StoreInfo>();
|
||||
|
||||
foreach (var moduleInfo in moduleInfos)
|
||||
{
|
||||
for (int wei = 0; wei < moduleInfo.LightCount; wei++)
|
||||
{
|
||||
var storeCode = moduleInfo.ModuleCode + "-" + (wei + 1).ToString();
|
||||
var stroreInfo = new StoreInfo()
|
||||
{
|
||||
StoreCode = storeCode,
|
||||
ShelfTypeId = moduleInfo.ShelfTypeId,
|
||||
ModuleId = moduleInfo.Id,
|
||||
ModuleCode = moduleInfo.ModuleCode,
|
||||
ShelfId = moduleInfo.ShelfId,
|
||||
ShelfCode = moduleInfo.ShelfCode,
|
||||
BoardId = moduleInfo.BoardId,
|
||||
LightNumber = wei + 1,
|
||||
Priority = 0,
|
||||
CurrentMatSn = string.Empty,
|
||||
CurrentVoltage = 0,
|
||||
StandardVoltage = 0,
|
||||
OffsetVoltage = 0,
|
||||
BigShelfCode = moduleInfo.Bigshelfcode,
|
||||
R = moduleInfo.R,
|
||||
C = moduleInfo.C,
|
||||
Wei = (wei + 1).ToString(),
|
||||
GroupName = moduleInfo.GroupName
|
||||
};
|
||||
storeInfos.Add(stroreInfo);
|
||||
|
||||
}
|
||||
}
|
||||
DbHelp.db.Insertable(storeInfos).ExecuteCommand();
|
||||
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 200,
|
||||
Message = "生成库位成功"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ResponseBase()
|
||||
{
|
||||
Code = 300,
|
||||
Message = ex.Message
|
||||
};
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,6 @@ namespace WebApi
|
||||
{
|
||||
try
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC>websocket
|
||||
WebSoceketManager.InitWebSocket();
|
||||
|
||||
@ -39,8 +37,7 @@ namespace WebApi
|
||||
ShelfManager.InitShelves();
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ط<EFBFBD><D8B7>߳<EFBFBD>
|
||||
//WarningManager.StartWarningMessageThread();
|
||||
MKYBackgroundThread.InitBackgroundThread();
|
||||
WarningManager.StartWarningMessageThread();
|
||||
|
||||
//<2F><>Ѷ<EFBFBD><D1B6>˾<EFBFBD><CBBE>̨<EFBFBD>߳<EFBFBD>
|
||||
if (LocalFile.Config.IsMx)
|
||||
@ -76,6 +73,7 @@ namespace WebApi
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
builder.Services.AddScoped<IInstoreService, InstoreService>();
|
||||
builder.Services.AddScoped<IOutstoreService, OutstoreService>();
|
||||
builder.Services.AddScoped<IHomerService, HomerService>();
|
||||
|
@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>true</DeleteExistingFiles>
|
||||
<DeleteExistingFiles>false</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
@ -15,9 +15,8 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
<_TargetId>Folder</_TargetId>
|
||||
<SiteUrlToLaunchAfterPublish />
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<ProjectGuid>118d453b-1693-4c00-8378-20ecbfcf2700</ProjectGuid>
|
||||
<SelfContained>false</SelfContained>
|
||||
<PublishSingleFile>false</PublishSingleFile>
|
||||
</PropertyGroup>
|
||||
</Project>
|
@ -16,8 +16,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "货架标准上位机", "..
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WCS.Model", "..\WCS.Model\WCS.Model.csproj", "{7CE9AF07-3538-46C3-BBF0-A039BDE15AAF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Encode", "..\Encode\Encode.csproj", "{F344121D-856D-4E5C-8519-6EADDE98616E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -44,10 +42,6 @@ Global
|
||||
{7CE9AF07-3538-46C3-BBF0-A039BDE15AAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7CE9AF07-3538-46C3-BBF0-A039BDE15AAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7CE9AF07-3538-46C3-BBF0-A039BDE15AAF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F344121D-856D-4E5C-8519-6EADDE98616E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F344121D-856D-4E5C-8519-6EADDE98616E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F344121D-856D-4E5C-8519-6EADDE98616E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F344121D-856D-4E5C-8519-6EADDE98616E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
BIN
版本履历表.xlsx
Normal file
BIN
版本履历表.xlsx
Normal file
Binary file not shown.
@ -168,7 +168,7 @@
|
||||
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding OriginalQty}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" MaxWidth="300" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
|
||||
|
@ -90,6 +90,11 @@
|
||||
SelectionChanged="dataGrid_SelectionChanged"
|
||||
RowHeight="39"
|
||||
AutoGenerateColumns="False" FontSize="13">
|
||||
<DataGrid.ContextMenu>
|
||||
<ContextMenu Name="dgmenu1" StaysOpen="true">
|
||||
<MenuItem Header="查询历史电压" Click="MenuItem_Click"/>
|
||||
</ContextMenu>
|
||||
</DataGrid.ContextMenu>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
||||
<DataGridTextColumn IsReadOnly="True" Header="货架编码" Binding="{Binding ShelfCode}"></DataGridTextColumn>
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Ping9719.WpfEx;
|
||||
using HandyControl.Controls;
|
||||
using Ping9719.WpfEx;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
@ -14,7 +15,10 @@ using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
using WCS.Model.ApiModel.StoreInfo;
|
||||
using WCS.Model;
|
||||
using 智能仓储WCS管理系统.ViewModel;
|
||||
using 智能仓储WCS管理系统.Api;
|
||||
|
||||
namespace 智能仓储WCS管理系统
|
||||
{
|
||||
@ -86,5 +90,50 @@ namespace 智能仓储WCS管理系统
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
private void MenuItem_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
//先获取选中的模组
|
||||
var storeInfo = viewModel.SelectedataGridItem;
|
||||
#region 调用接口 发送指令进行查询
|
||||
try
|
||||
{
|
||||
var body = new QueryStoreInfoHistoryVoltageRequest()
|
||||
{
|
||||
StoreIds = new List<int>() { storeInfo.Id },
|
||||
UserName = LocalStatic.CurrentUser,
|
||||
DeviceType = LocalFile.Config.DeviceType,
|
||||
};
|
||||
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<List<StoreInfoHistoryVoltageModel>>>(LocalFile.Config.ApiIpHost + "storeInfo/queryStoreInfoHistoryVoltage", body, "POST");
|
||||
if (Result != null && Result.Code == 200)
|
||||
{
|
||||
if (Result.Data == null || Result.Data.Count == 0)
|
||||
{
|
||||
Growl.Success("查询成功!该库位没有历史电压值数据!");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Growl.Success("查询成功!请查看弹窗内数据!");
|
||||
var window = new StoreInfoHistoryVoltageWindow(Result.Data, storeInfo.StoreCode);
|
||||
window.ShowDialog();
|
||||
}
|
||||
|
||||
}
|
||||
else if (Result != null)
|
||||
{
|
||||
Growl.Success(Result.Message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Growl.Warning("查询失败:" + ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ namespace 智能仓储WCS管理系统
|
||||
Growl.Success("发送标定指令成功!");
|
||||
this.Close();
|
||||
}
|
||||
else if (Result != null)
|
||||
else if (Result1 != null)
|
||||
{
|
||||
Growl.Error(Result1.Message);
|
||||
}
|
||||
|
27
货架标准上位机/Views/Windows/StoreInfoHistoryVoltageWindow.xaml
Normal file
27
货架标准上位机/Views/Windows/StoreInfoHistoryVoltageWindow.xaml
Normal file
@ -0,0 +1,27 @@
|
||||
<Window x:Class="智能仓储WCS管理系统.StoreInfoHistoryVoltageWindow"
|
||||
xmlns:hc="https://handyorg.github.io/handycontrol"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d"
|
||||
Title="电压历史数据(标定时记录上一次数据)" Height="650" Width="660" ResizeMode="NoResize" FontSize="25"
|
||||
Icon="/Resources/Logo.ico" WindowStartupLocation="CenterScreen" >
|
||||
<Grid Background="AliceBlue">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Text="库位编码" Name="storeCodeTxt" FontSize="40" HorizontalAlignment="Center"></TextBlock>
|
||||
<DataGrid Grid.Row="1" Name="dataGrid" FontSize="15" AutoGenerateColumns="False" HeadersVisibility="All" CanUserAddRows="False">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="电压标准值" Binding="{Binding StandardVoltage}" Width="*"/>
|
||||
<DataGridTextColumn Header="电压偏移值" Binding="{Binding OffsetVoltage}" Width="*"/>
|
||||
<DataGridTextColumn Header="电压当前值" Binding="{Binding CurrentVoltage}" Width="*"/>
|
||||
<DataGridTextColumn Header="记录时间" Binding="{Binding CreateTime,StringFormat='yyyy-MM-dd HH:mm:ss'}" Width="1.5*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<Button Content="关闭" Height="45" FontSize="28" Grid.Row="2" Click="Button_Click"></Button>
|
||||
</Grid>
|
||||
</Window>
|
44
货架标准上位机/Views/Windows/StoreInfoHistoryVoltageWindow.xaml.cs
Normal file
44
货架标准上位机/Views/Windows/StoreInfoHistoryVoltageWindow.xaml.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using HandyControl.Controls;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
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.Shapes;
|
||||
using WCS.Model;
|
||||
using WCS.Model.ApiModel;
|
||||
using WCS.Model.ApiModel.StoreInfo;
|
||||
using WCS.Model.ApiModel.User;
|
||||
using 智能仓储WCS管理系统.Api;
|
||||
|
||||
namespace 智能仓储WCS管理系统
|
||||
{
|
||||
/// <summary>
|
||||
/// CalibrationWindow.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class StoreInfoHistoryVoltageWindow : System.Windows.Window
|
||||
{
|
||||
public StoreInfoHistoryVoltageWindow(List<StoreInfoHistoryVoltageModel> list,string storeCode)
|
||||
{
|
||||
InitializeComponent();
|
||||
dataGrid.ItemsSource = list;
|
||||
this.storeCodeTxt.Text = storeCode;
|
||||
}
|
||||
|
||||
private void Button_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
}
|
||||
}
|
@ -8,8 +8,8 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Company>重庆盟讯电子科技有限公司</Company>
|
||||
<Copyright>Copyright © 2024</Copyright>
|
||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
||||
<FileVersion>1.0.0</FileVersion>
|
||||
<AssemblyVersion>1.0.4</AssemblyVersion>
|
||||
<FileVersion>1.0.4</FileVersion>
|
||||
<ApplicationIcon>Resources\Logo.ico</ApplicationIcon>
|
||||
<Authors>重庆盟讯电子科技有限公司</Authors>
|
||||
<Product>智能仓储WCS管理系统</Product>
|
||||
@ -84,12 +84,12 @@
|
||||
<Resource Include="Resources\Logo.ico" />
|
||||
<Resource Include="Resources\Logo.png" />
|
||||
<Resource Include="Resources\主页.png" />
|
||||
<Resource Include="Resources\入库.png"/>
|
||||
<Resource Include="Resources\出库.png"/>
|
||||
<Resource Include="Resources\盘点.png"/>
|
||||
<Resource Include="Resources\查询.png"/>
|
||||
<Resource Include="Resources\货架.png"/>
|
||||
<Resource Include="Resources\物料.png"/>
|
||||
<Resource Include="Resources\入库.png" />
|
||||
<Resource Include="Resources\出库.png" />
|
||||
<Resource Include="Resources\盘点.png" />
|
||||
<Resource Include="Resources\查询.png" />
|
||||
<Resource Include="Resources\货架.png" />
|
||||
<Resource Include="Resources\物料.png" />
|
||||
<Resource Include="Resources\权限.png" />
|
||||
<Resource Include="Resources\调试.png" />
|
||||
</ItemGroup>
|
||||
|
Reference in New Issue
Block a user