Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
ddc0b13813 | |||
05a66dc2d3 | |||
dfe65e806d | |||
9e16a001c0 | |||
963ffc4ad2 | |||
15ccafbd5e | |||
9f5fdc24e9 | |||
6fbc90dac3 | |||
40024b339d | |||
6282ecc0c1 | |||
ec50c3986b | |||
2f9ca87876 | |||
d64dbe4c33 | |||
e197c32f52 | |||
0386f95bc2 | |||
21d12b0003 | |||
759ebf2c89 |
@ -103,6 +103,18 @@ namespace WCS.DAL.DbModels
|
|||||||
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
|
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
|
||||||
public string? BigShelfCode { get; set; } = string.Empty;
|
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>
|
||||||
/// 序号
|
/// 序号
|
||||||
/// </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; }
|
||||||
|
}
|
||||||
|
}
|
@ -994,7 +994,7 @@ namespace WCS.BLL.HardWare
|
|||||||
ExceptionMessages.Add($"模组{item.ModuleCode}未响应自检!");
|
ExceptionMessages.Add($"模组{item.ModuleCode}未响应自检!");
|
||||||
}
|
}
|
||||||
//通信校验
|
//通信校验
|
||||||
var messages = notReturnList.Select(t => $"模组{t.ModuleCode}未响应自检!").ToList();
|
var messages = notReturnList.Select(t => $"模组{t.ModuleCode}({t.CurrentMode})未响应自检!").ToList();
|
||||||
var exceptionMessage = string.Join("\r\n", messages);
|
var exceptionMessage = string.Join("\r\n", messages);
|
||||||
var warningModel = new WebSocketMessageModel()
|
var warningModel = new WebSocketMessageModel()
|
||||||
{
|
{
|
||||||
@ -1697,12 +1697,53 @@ namespace WCS.BLL.HardWare
|
|||||||
}
|
}
|
||||||
//当前库位未记录MatSn
|
//当前库位未记录MatSn
|
||||||
if (string.IsNullOrEmpty(storeInfo.CurrentMatSn))
|
if (string.IsNullOrEmpty(storeInfo.CurrentMatSn))
|
||||||
|
{
|
||||||
|
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给了多个正常出库信号
|
//该库位是需要出库的库位,物料被多次取出or给了多个正常出库信号
|
||||||
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}", LogsType.Outstore);
|
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}", LogsType.Outstore);
|
||||||
//暂不进行处理
|
//暂不进行处理
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//不是本次出库需要出的物料
|
//不是本次出库需要出的物料
|
||||||
if (!CurrentOutStoreMatSNs.Contains(storeInfo.CurrentMatSn))
|
if (!CurrentOutStoreMatSNs.Contains(storeInfo.CurrentMatSn))
|
||||||
@ -2240,7 +2281,9 @@ namespace WCS.BLL.HardWare
|
|||||||
|
|
||||||
public void ResetReturnProcess(byte[] data, int boardId, int lightNumber)
|
public void ResetReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||||
{
|
{
|
||||||
var module = this.Modules.Where(t => t.BoardId == boardId && t.CurrentMode == Mode.入库模式).FirstOrDefault();
|
var module = this.Modules
|
||||||
|
.Where(t => t.BoardId == boardId)
|
||||||
|
.FirstOrDefault();
|
||||||
if (module == null)
|
if (module == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -2337,7 +2380,7 @@ namespace WCS.BLL.HardWare
|
|||||||
{
|
{
|
||||||
//获取当前板所有库位
|
//获取当前板所有库位
|
||||||
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
|
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
|
||||||
.Where(t => t.BoardId == boardId)
|
.Where(t => t.BoardId == boardId && t.ShelfId == ShelfId)
|
||||||
.ToList();
|
.ToList();
|
||||||
//当前设置的板库位数
|
//当前设置的板库位数
|
||||||
var boardStoreNumber = storeInfos.Count();
|
var boardStoreNumber = storeInfos.Count();
|
||||||
|
@ -122,12 +122,22 @@ namespace WCS.BLL.HardWare
|
|||||||
.OrderBy(t => t.LightNumber)
|
.OrderBy(t => t.LightNumber)
|
||||||
.ToList();
|
.ToList();
|
||||||
char[] data = "0000000000000000".ToCharArray();
|
char[] data = "0000000000000000".ToCharArray();
|
||||||
|
|
||||||
|
//禁用
|
||||||
|
char[] dataBan = "0000000000000000".ToCharArray();
|
||||||
|
|
||||||
var boardStoreNumber = storeInfos.Count();
|
var boardStoreNumber = storeInfos.Count();
|
||||||
foreach (var storeInfo in storeInfos)
|
foreach (var storeInfo in storeInfos)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber)
|
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber)
|
||||||
{
|
{
|
||||||
data[storeInfo.LightNumber - 1] = '1';
|
data[storeInfo.LightNumber - 1] = '1';
|
||||||
|
|
||||||
|
//禁用
|
||||||
|
if (storeInfo.CurrentMatSn == "禁用")
|
||||||
|
{
|
||||||
|
dataBan[storeInfo.LightNumber - 1] = '1';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var dataStr = string.Join("", data.Reverse());
|
var dataStr = string.Join("", data.Reverse());
|
||||||
@ -136,6 +146,13 @@ namespace WCS.BLL.HardWare
|
|||||||
GoInInstoreData[1] = Convert.ToByte(data1, 2);
|
GoInInstoreData[1] = Convert.ToByte(data1, 2);
|
||||||
GoInInstoreData[2] = Convert.ToByte(data2, 2);
|
GoInInstoreData[2] = Convert.ToByte(data2, 2);
|
||||||
|
|
||||||
|
//禁用
|
||||||
|
var dataBanStr = string.Join("", dataBan.Reverse());
|
||||||
|
var data1Ban = dataBanStr.Substring(8, 8);
|
||||||
|
var data2Ban = dataBanStr.Substring(0, 8);
|
||||||
|
GoInInstoreData[6] = Convert.ToByte(data1Ban, 2);
|
||||||
|
GoInInstoreData[7] = Convert.ToByte(data2Ban, 2);
|
||||||
|
|
||||||
tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoInInstoreData));
|
tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoInInstoreData));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,12 +204,21 @@ namespace WCS.BLL.HardWare
|
|||||||
.OrderBy(t => t.LightNumber)
|
.OrderBy(t => t.LightNumber)
|
||||||
.ToList();
|
.ToList();
|
||||||
char[] data = "0000000000000000".ToCharArray();
|
char[] data = "0000000000000000".ToCharArray();
|
||||||
|
//禁用功能
|
||||||
|
char[] dataBan = "0000000000000000".ToCharArray();
|
||||||
|
|
||||||
var boardStoreNumber = storeInfos.Count();
|
var boardStoreNumber = storeInfos.Count();
|
||||||
foreach (var storeInfo in storeInfos)
|
foreach (var storeInfo in storeInfos)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber)
|
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= boardStoreNumber)
|
||||||
{
|
{
|
||||||
data[storeInfo.LightNumber - 1] = '1';
|
data[storeInfo.LightNumber - 1] = '1';
|
||||||
|
|
||||||
|
//禁用功能
|
||||||
|
if (storeInfo.CurrentMatSn == "禁用")
|
||||||
|
{
|
||||||
|
dataBan[storeInfo.LightNumber - 1] = '1';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var dataStr = string.Join("", data.Reverse());
|
var dataStr = string.Join("", data.Reverse());
|
||||||
@ -201,6 +227,13 @@ namespace WCS.BLL.HardWare
|
|||||||
CheckModeData[1] = Convert.ToByte(data1, 2);
|
CheckModeData[1] = Convert.ToByte(data1, 2);
|
||||||
CheckModeData[2] = Convert.ToByte(data2, 2);
|
CheckModeData[2] = Convert.ToByte(data2, 2);
|
||||||
|
|
||||||
|
//禁用功能
|
||||||
|
var dataBanStr = string.Join("", dataBan.Reverse());
|
||||||
|
var data1Ban = dataBanStr.Substring(8, 8);
|
||||||
|
var data2Ban = dataBanStr.Substring(0, 8);
|
||||||
|
CheckModeData[6] = Convert.ToByte(data1Ban, 2);
|
||||||
|
CheckModeData[7] = Convert.ToByte(data2Ban, 2);
|
||||||
|
|
||||||
tcpClient.Send(tcpClient.GenerateMessage(BoardId, CheckModeData));
|
tcpClient.Send(tcpClient.GenerateMessage(BoardId, CheckModeData));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,12 +251,21 @@ namespace WCS.BLL.HardWare
|
|||||||
.ToList();
|
.ToList();
|
||||||
//计算物料在库的库位
|
//计算物料在库的库位
|
||||||
char[] data = "0000000000000000".ToCharArray();
|
char[] data = "0000000000000000".ToCharArray();
|
||||||
|
|
||||||
|
//计算禁用的库位
|
||||||
|
char[] dataBan = "0000000000000000".ToCharArray();
|
||||||
|
|
||||||
var storeNumber = storeInfos.Count();
|
var storeNumber = storeInfos.Count();
|
||||||
foreach (var storeInfo in storeInfos)
|
foreach (var storeInfo in storeInfos)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= storeNumber)
|
if (!string.IsNullOrEmpty(storeInfo.CurrentMatSn) && storeInfo.LightNumber > 0 && storeInfo.LightNumber <= storeNumber)
|
||||||
{
|
{
|
||||||
data[storeInfo.LightNumber - 1] = '1';
|
data[storeInfo.LightNumber - 1] = '1';
|
||||||
|
//禁用
|
||||||
|
if (storeInfo.CurrentMatSn == "禁用")
|
||||||
|
{
|
||||||
|
dataBan[storeInfo.LightNumber - 1] = '1';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var dataStr = string.Join("", data.Reverse());
|
var dataStr = string.Join("", data.Reverse());
|
||||||
@ -232,6 +274,13 @@ namespace WCS.BLL.HardWare
|
|||||||
GoInOutstoreModeData[1] = Convert.ToByte(data1, 2);
|
GoInOutstoreModeData[1] = Convert.ToByte(data1, 2);
|
||||||
GoInOutstoreModeData[2] = Convert.ToByte(data2, 2);
|
GoInOutstoreModeData[2] = Convert.ToByte(data2, 2);
|
||||||
|
|
||||||
|
//禁用
|
||||||
|
var dataBanStr = string.Join("", dataBan.Reverse());
|
||||||
|
var data1Ban = dataBanStr.Substring(8, 8);
|
||||||
|
var data2Ban = dataBanStr.Substring(0, 8);
|
||||||
|
GoInOutstoreModeData[6] = Convert.ToByte(data1Ban, 2);
|
||||||
|
GoInOutstoreModeData[7] = Convert.ToByte(data2Ban, 2);
|
||||||
|
|
||||||
//出库位置亮灯
|
//出库位置亮灯
|
||||||
if (outSns != null && outSns.Count > 0)
|
if (outSns != null && outSns.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -70,7 +70,7 @@ namespace WCS.BLL.Manager
|
|||||||
DbHelp.dbLog.DbMaintenance.CreateDatabase();
|
DbHelp.dbLog.DbMaintenance.CreateDatabase();
|
||||||
Logs.Write("【初始化数据库】创建数据库", LogsType.StartBoot);
|
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(InventoryDetail), typeof(OutOrder), typeof(OutOrderDetail), typeof(OutOrderMatDetail)
|
||||||
, typeof(ShelfTypeInfo), typeof(MatBaseInfo), typeof(MatInfo)
|
, typeof(ShelfTypeInfo), typeof(MatBaseInfo), typeof(MatInfo)
|
||||||
, typeof(StockTakingOrder), typeof(StockTakingOrderMatDetail), typeof(InOutRecord)
|
, typeof(StockTakingOrder), typeof(StockTakingOrderMatDetail), typeof(InOutRecord)
|
||||||
|
@ -5,6 +5,7 @@ using System.Data.OscarClient;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using WCS.BLL.Config;
|
||||||
using WCS.BLL.DbModels;
|
using WCS.BLL.DbModels;
|
||||||
using WCS.BLL.HardWare;
|
using WCS.BLL.HardWare;
|
||||||
using WCS.DAL.Db;
|
using WCS.DAL.Db;
|
||||||
@ -81,6 +82,21 @@ namespace WCS.BLL.Manager
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (solveType == SolveTypeEnum.屏蔽库位)
|
||||||
|
{
|
||||||
|
switch (warningInManager.WarningType)
|
||||||
|
{
|
||||||
|
case WarningTypeEnum.出库自检未扫描上架:
|
||||||
|
DisableNoScan(warningInManager);
|
||||||
|
break;
|
||||||
|
case WarningTypeEnum.入库自检未扫描上架:
|
||||||
|
DisableNoScan(warningInManager);
|
||||||
|
break;
|
||||||
|
case WarningTypeEnum.自检未扫描上架:
|
||||||
|
DisableNoScan(warningInManager);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (solveType == SolveTypeEnum.忽略)
|
else if (solveType == SolveTypeEnum.忽略)
|
||||||
{
|
{
|
||||||
//不发指令了
|
//不发指令了
|
||||||
@ -120,6 +136,14 @@ namespace WCS.BLL.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (warning.WarningType == WarningTypeEnum.入库中未扫描上架 ||
|
||||||
|
warning.WarningType == WarningTypeEnum.入库中异常取出 ||
|
||||||
|
warning.WarningType == WarningTypeEnum.出库中丢失 ||
|
||||||
|
warning.WarningType == WarningTypeEnum.出库中未扫描上架)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#region 重新发指令进入对应模式
|
#region 重新发指令进入对应模式
|
||||||
Logs.Write($"GoInRightMode", LogsType.WebSocket);
|
Logs.Write($"GoInRightMode", LogsType.WebSocket);
|
||||||
GoInRightMode(warning);
|
GoInRightMode(warning);
|
||||||
@ -143,9 +167,85 @@ namespace WCS.BLL.Manager
|
|||||||
|
|
||||||
|
|
||||||
#region 报警消除的处理
|
#region 报警消除的处理
|
||||||
public static void SolveNoScan(WebSocketMessageModel warning)
|
/// <summary>
|
||||||
|
/// 未扫描上架禁用库位
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="warning"></param>
|
||||||
|
public static void DisableNoScan(WebSocketMessageModel warning)
|
||||||
{
|
{
|
||||||
|
#region 【后台】未扫描上架库位的处理
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//获取库位
|
||||||
|
var storeInfo = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => t.ShelfId == warning.ShelfId)
|
||||||
|
.Where(t => t.Id == warning.StoreId)
|
||||||
|
.First();
|
||||||
|
if (storeInfo != null)
|
||||||
|
{
|
||||||
|
storeInfo.CurrentMatSn = "禁用";
|
||||||
|
DbHelp.db.Updateable(storeInfo).ExecuteCommand();
|
||||||
|
if (LocalFile.Config.IsMx)
|
||||||
|
{
|
||||||
|
var DingDing = string.Empty;
|
||||||
|
MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被 {warning.SolvedUser} “未扫描上架弹窗”屏蔽,请及时调查或维保硬件!", new List<string> { "104379", "103595" }, ref DingDing);
|
||||||
|
Logs.Write($"【智能货架】库位{storeInfo.StoreCode}被 {warning.SolvedUser} “未扫描上架弹窗”屏蔽,请及时调查或维保硬件!");
|
||||||
|
#region 计算库位禁用率并发送
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
var disabledStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => t.CurrentMatSn == "禁用")
|
||||||
|
.ToList();
|
||||||
|
var allStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledCount = disabledStore.Count();
|
||||||
|
var allCount = allStore.Count();
|
||||||
|
|
||||||
|
var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
|
||||||
|
var disabledModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.Where(t => t.IsEnable == false)
|
||||||
|
.ToList();
|
||||||
|
var allModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledModuleCount = disabledModule.Count();
|
||||||
|
var allModuleCount = allModule.Count();
|
||||||
|
|
||||||
|
var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," +
|
||||||
|
$"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," +
|
||||||
|
$"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" +
|
||||||
|
$"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," +
|
||||||
|
$"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," +
|
||||||
|
$"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。";
|
||||||
|
|
||||||
|
Logs.Write(message);
|
||||||
|
var dd = string.Empty;
|
||||||
|
MXBackgroundThread.SendDingDingMsg(message, new List<string> { "104379", "103595" }, ref dd);
|
||||||
|
});
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
DbHelp.db.RollbackTran();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SolveLoss(WebSocketMessageModel warning)
|
public static void SolveLoss(WebSocketMessageModel warning)
|
||||||
@ -244,6 +344,7 @@ namespace WCS.BLL.Manager
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void GoInRightMode(WebSocketMessageModel warning)
|
public static void GoInRightMode(WebSocketMessageModel warning)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -52,6 +52,13 @@ namespace WCS.BLL.Services.IService
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task<ResponseCommon> queryModuleVoltage(QueryModuleVoltageRequest request);
|
public Task<ResponseCommon> queryModuleVoltage(QueryModuleVoltageRequest request);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询库位历史电压值-非硬件查询 仅查询软件记录的历史电压
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Task<ResponseCommon> queryStoreInfoHistoryVoltage(QueryStoreInfoHistoryVoltageRequest request);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 标定+设置偏移量
|
/// 标定+设置偏移量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -73,5 +80,6 @@ namespace WCS.BLL.Services.IService
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Task<ResponseCommon> disableOrEnableStore(DisableOrEnableStoreRequest request);
|
public Task<ResponseCommon> disableOrEnableStore(DisableOrEnableStoreRequest request);
|
||||||
|
|
||||||
|
public Task<ResponseCommon> getDisablePercent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,11 @@ namespace WCS.BLL.Services.Service
|
|||||||
{
|
{
|
||||||
public class SingleLightService : ISingleLightService
|
public class SingleLightService : ISingleLightService
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 单灯 一个库位对应一个硬件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public async Task<ResponseCommon<object>> SingleLightControl(SingleLightControlRequest request)
|
public async Task<ResponseCommon<object>> SingleLightControl(SingleLightControlRequest request)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -37,11 +42,12 @@ namespace WCS.BLL.Services.Service
|
|||||||
Message = "操作失败:没有需要控制的库位",
|
Message = "操作失败:没有需要控制的库位",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
//对应库位
|
//库位编码去重
|
||||||
var storeCodes = request.StoreList.Select(t => t.StoreCode)
|
var storeCodes = request.StoreList.Select(t => t.StoreCode)
|
||||||
.Distinct()
|
.Distinct()
|
||||||
.ToList();
|
.ToList();
|
||||||
var stores = DbHelp.db.Queryable<StoreInfo>().Where(t => storeCodes.Contains(t.StoreCode))
|
var stores = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => storeCodes.Contains(t.StoreCode))
|
||||||
.ToList();
|
.ToList();
|
||||||
if (stores == null || stores.Count == 0)
|
if (stores == null || stores.Count == 0)
|
||||||
{
|
{
|
||||||
@ -56,6 +62,7 @@ namespace WCS.BLL.Services.Service
|
|||||||
var shelfIds = stores.Select(t => t.ShelfId).Distinct().ToList();
|
var shelfIds = stores.Select(t => t.ShelfId).Distinct().ToList();
|
||||||
var shelfs = DbHelp.db.Queryable<ShelfInfo>().Where(t => shelfIds.Contains(t.Id))
|
var shelfs = DbHelp.db.Queryable<ShelfInfo>().Where(t => shelfIds.Contains(t.Id))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
//对应模组信息
|
//对应模组信息
|
||||||
var moduleIds = stores.Select(t => t.ModuleId).Distinct().ToList();
|
var moduleIds = stores.Select(t => t.ModuleId).Distinct().ToList();
|
||||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => moduleIds.Contains(t.Id))
|
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => moduleIds.Contains(t.Id))
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -350,7 +351,55 @@ namespace WCS.BLL.Services.Service
|
|||||||
if (LocalFile.Config.IsMx)
|
if (LocalFile.Config.IsMx)
|
||||||
{
|
{
|
||||||
var DingDing = string.Empty;
|
var DingDing = string.Empty;
|
||||||
MXBackgroundThread.SendDingDingMsg($"【智能货架】模组{moduleInfo.ModuleCode}被屏蔽", new List<string> { "104379", "103595" }, ref DingDing);
|
MXBackgroundThread.SendDingDingMsg($"【智能货架】模组{moduleInfo.ModuleCode}被屏蔽(模组管理),请及时调查或维保硬件!", new List<string> { "104379", "103595" }, ref DingDing);
|
||||||
|
Logs.Write($"【智能货架】模组{moduleInfo.ModuleCode}被屏蔽(模组管理),请及时调查或维保硬件!");
|
||||||
|
|
||||||
|
#region 计算库位禁用率并发送
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
var disabledStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => t.CurrentMatSn == "禁用")
|
||||||
|
.ToList();
|
||||||
|
var allStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledCount = disabledStore.Count();
|
||||||
|
var allCount = allStore.Count();
|
||||||
|
|
||||||
|
var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
|
||||||
|
var disabledModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.Where(t => t.IsEnable == false)
|
||||||
|
.ToList();
|
||||||
|
var allModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledModuleCount = disabledModule.Count();
|
||||||
|
var allModuleCount = allModule.Count();
|
||||||
|
|
||||||
|
var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," +
|
||||||
|
$"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," +
|
||||||
|
$"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" +
|
||||||
|
$"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," +
|
||||||
|
$"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," +
|
||||||
|
$"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。";
|
||||||
|
|
||||||
|
Logs.Write(message);
|
||||||
|
var dd = string.Empty;
|
||||||
|
MXBackgroundThread.SendDingDingMsg(message, new List<string> { "104379", "103595" }, ref dd);
|
||||||
|
});
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -443,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)
|
public async Task<ResponseCommon> calibrationSetOffset(CalibrationSetOffsetRequest request)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -455,23 +537,68 @@ namespace WCS.BLL.Services.Service
|
|||||||
if (shelf != null && shelf is SmartShelf)
|
if (shelf != null && shelf is SmartShelf)
|
||||||
{
|
{
|
||||||
var smartShelf = (SmartShelf)shelf;
|
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);
|
smartShelf.CalibrationSetOffset(module.Id, request.OffSet);
|
||||||
isSend = true;
|
isSend = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isSend)
|
if (isSend)
|
||||||
|
{
|
||||||
return new ResponseCommon()
|
return new ResponseCommon()
|
||||||
{
|
{
|
||||||
Code = 200,
|
Code = 200,
|
||||||
Message = "Success"
|
Message = "Success"
|
||||||
};
|
};
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
return new ResponseCommon()
|
return new ResponseCommon()
|
||||||
{
|
{
|
||||||
Code = 201,
|
Code = 201,
|
||||||
Message = "操作失败:未找到对应模组"
|
Message = "操作失败:未找到对应模组"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
return new ResponseCommon()
|
return new ResponseCommon()
|
||||||
@ -552,7 +679,56 @@ namespace WCS.BLL.Services.Service
|
|||||||
if (LocalFile.Config.IsMx)
|
if (LocalFile.Config.IsMx)
|
||||||
{
|
{
|
||||||
var DingDing = string.Empty;
|
var DingDing = string.Empty;
|
||||||
MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被屏蔽", new List<string> { "104379", "103595" }, ref DingDing);
|
MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被屏蔽(库位管理),请及时调查或维保硬件!", new List<string> { "104379", "103595" }, ref DingDing);
|
||||||
|
Logs.Write($"【智能货架】库位{storeInfo.StoreCode}被屏蔽(库位管理),请及时调查或维保硬件!");
|
||||||
|
|
||||||
|
#region 计算库位禁用率并发送
|
||||||
|
Task.Run(() =>
|
||||||
|
{
|
||||||
|
var disabledStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => t.CurrentMatSn == "禁用")
|
||||||
|
.ToList();
|
||||||
|
var allStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledCount = disabledStore.Count();
|
||||||
|
var allCount = allStore.Count();
|
||||||
|
|
||||||
|
var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
|
||||||
|
var disabledModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.Where(t => t.IsEnable == false)
|
||||||
|
.ToList();
|
||||||
|
var allModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledModuleCount = disabledModule.Count();
|
||||||
|
var allModuleCount = allModule.Count();
|
||||||
|
|
||||||
|
var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," +
|
||||||
|
$"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," +
|
||||||
|
$"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" +
|
||||||
|
$"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," +
|
||||||
|
$"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," +
|
||||||
|
$"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。";
|
||||||
|
|
||||||
|
Logs.Write(message);
|
||||||
|
|
||||||
|
var dd = string.Empty;
|
||||||
|
MXBackgroundThread.SendDingDingMsg(message, new List<string> { "104379", "103595" }, ref dd);
|
||||||
|
});
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
//库位
|
//库位
|
||||||
@ -618,6 +794,75 @@ namespace WCS.BLL.Services.Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ResponseCommon> getDisablePercent()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
#region 计算库位禁用率
|
||||||
|
var disabledStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.Where(t => t.CurrentMatSn == "禁用")
|
||||||
|
.ToList();
|
||||||
|
var allStore = DbHelp.db.Queryable<StoreInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledCount = disabledStore.Count();
|
||||||
|
var allCount = allStore.Count();
|
||||||
|
|
||||||
|
var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
|
||||||
|
var disabledModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.Where(t => t.IsEnable == false)
|
||||||
|
.ToList();
|
||||||
|
var allModule = DbHelp.db.Queryable<ModuleInfo>()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var disabledModuleCount = disabledModule.Count();
|
||||||
|
var allModuleCount = allModule.Count();
|
||||||
|
|
||||||
|
var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count();
|
||||||
|
|
||||||
|
var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count();
|
||||||
|
|
||||||
|
var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," +
|
||||||
|
$"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," +
|
||||||
|
$"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" +
|
||||||
|
$"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," +
|
||||||
|
$"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," +
|
||||||
|
$"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。";
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//非盟讯公司的展示
|
||||||
|
if (LocalFile.Config.IsMx == false)
|
||||||
|
{
|
||||||
|
message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}。";
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseCommon()
|
||||||
|
{
|
||||||
|
Code = 200,
|
||||||
|
Message = $"Success",
|
||||||
|
Data = message,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
DbHelp.db.RollbackTran();
|
||||||
|
return new ResponseCommon()
|
||||||
|
{
|
||||||
|
Code = 300,
|
||||||
|
Message = $"操作失败:异常{ex.Message}!"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,8 @@ namespace WCS.BLL
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
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)
|
if (ex is NotConnectedException)
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,11 @@ namespace WCS.Model.ApiModel.MXL4
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string MatBatch { get; set; }
|
public string MatBatch { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物料SN
|
||||||
|
/// </summary>
|
||||||
|
public string MatSN { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 数量
|
/// 数量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -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; }
|
||||||
|
}
|
||||||
|
}
|
@ -14,5 +14,6 @@ namespace WCS.Model.WebSocketModel
|
|||||||
{
|
{
|
||||||
处理 = 0,
|
处理 = 0,
|
||||||
忽略 = 1,
|
忽略 = 1,
|
||||||
|
屏蔽库位 = 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ using WCS.Model.ApiModel.StoreInfo;
|
|||||||
using WCS.BLL.DbModels;
|
using WCS.BLL.DbModels;
|
||||||
using WCS.Model.ApiModel.MatBaseInfo;
|
using WCS.Model.ApiModel.MatBaseInfo;
|
||||||
using WCS.DAL.DbModels;
|
using WCS.DAL.DbModels;
|
||||||
|
using WCS.DAL.Db;
|
||||||
|
using WCS.BLL.Config;
|
||||||
|
|
||||||
namespace WCS.WebApi.Controllers
|
namespace WCS.WebApi.Controllers
|
||||||
{
|
{
|
||||||
@ -44,7 +46,6 @@ namespace WCS.WebApi.Controllers
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 模组管理
|
#region 模组管理
|
||||||
[Route("getModules")]
|
[Route("getModules")]
|
||||||
[HttpPost(Name = "getModules")]
|
[HttpPost(Name = "getModules")]
|
||||||
@ -67,6 +68,13 @@ namespace WCS.WebApi.Controllers
|
|||||||
return await _storeInfoService.queryModuleVoltage(request);
|
return await _storeInfoService.queryModuleVoltage(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("queryStoreInfoHistoryVoltage")]
|
||||||
|
[HttpPost(Name = "queryStoreInfoHistoryVoltage")]
|
||||||
|
public async Task<ResponseBase> queryStoreInfoHistoryVoltage(QueryStoreInfoHistoryVoltageRequest request)
|
||||||
|
{
|
||||||
|
return await _storeInfoService.queryStoreInfoHistoryVoltage(request);
|
||||||
|
}
|
||||||
|
|
||||||
[Route("calibrationSetOffset")]
|
[Route("calibrationSetOffset")]
|
||||||
[HttpPost(Name = "calibrationSetOffset")]
|
[HttpPost(Name = "calibrationSetOffset")]
|
||||||
public async Task<ResponseBase> calibrationSetOffset(CalibrationSetOffsetRequest request)
|
public async Task<ResponseBase> calibrationSetOffset(CalibrationSetOffsetRequest request)
|
||||||
@ -89,6 +97,132 @@ namespace WCS.WebApi.Controllers
|
|||||||
{
|
{
|
||||||
return await _storeInfoService.disableOrEnableStore(request);
|
return await _storeInfoService.disableOrEnableStore(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("getDisablePercent")]
|
||||||
|
[HttpPost(Name = "getDisablePercent")]
|
||||||
|
public async Task<ResponseBase> getDisablePercent(DisableOrEnableStoreRequest request)
|
||||||
|
{
|
||||||
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
BIN
版本履历表.xlsx
Normal file
BIN
版本履历表.xlsx
Normal file
Binary file not shown.
@ -102,7 +102,9 @@ namespace 智能仓储WCS管理系统.ViewModel
|
|||||||
}
|
}
|
||||||
else if (Result != null && Result.Code == 200 && (Result.Data == null || Result.Data.Lists == null || Result.Data.Lists.Count == 0))
|
else if (Result != null && Result.Code == 200 && (Result.Data == null || Result.Data.Lists == null || Result.Data.Lists.Count == 0))
|
||||||
{
|
{
|
||||||
MessageBox.Show($"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!\r\n{string.Join(",\r\n", matSns)}");
|
var content = $"MES/WMS系统按先进先出推荐物料条码在此货架上不存在,请确认物料是否在其他货架(B区)上!或者确认是否是物料上架后丢失(复制物料条码后在[出入记录]功能中通过物料SN查询确认是否丢失,如果确认是此货架上丢失,重新上架再次进行出库操作),具体条码如下:\r\n{string.Join(",\r\n", matSns)}";
|
||||||
|
//MessageBox.Show($"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!或者是否已经丢失?(复制物料条码后在[出入记录]功能中即可查询)\r\n{string.Join(",\r\n", matSns)}");
|
||||||
|
TipView.Show(content, "提示", true);
|
||||||
DataGridItemSource = null;
|
DataGridItemSource = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -120,12 +122,12 @@ namespace 智能仓储WCS管理系统.ViewModel
|
|||||||
}
|
}
|
||||||
else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
|
else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
|
||||||
{
|
{
|
||||||
Growl.Warning("未查询到物料明细!MES推荐物料明细为空!");
|
Growl.Warning("未查询到物料明细!MES推荐物料明细为空!请确认该单据是否已发或咨询MES系统相关负责人!");
|
||||||
DataGridItemSource = null;
|
DataGridItemSource = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Growl.Warning("未查询到领料明细!请求MES接口失败!");
|
Growl.Warning("未查询到领料明细!请求MES接口失败!请确认该单据是否已发或咨询MES系统相关负责人!");
|
||||||
DataGridItemSource = null;
|
DataGridItemSource = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -230,6 +230,37 @@ namespace 智能仓储WCS管理系统.ViewModel
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ICommand BtnDisablePercentCommand { get => new DelegateCommand(DisablePercent); }
|
||||||
|
public void DisablePercent()
|
||||||
|
{
|
||||||
|
#region 调用接口 获取屏蔽率
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var body = new DisableOrEnableStoreRequest()
|
||||||
|
{
|
||||||
|
};
|
||||||
|
var Result = ApiHelp.GetDataFromHttp<ResponseCommon>(LocalFile.Config.ApiIpHost + "storeInfo/getDisablePercent", body, "POST");
|
||||||
|
if (Result != null && Result.Code == 200)
|
||||||
|
{
|
||||||
|
HandyControl.Controls.MessageBox.Show(Result.Data.ToString());
|
||||||
|
}
|
||||||
|
else if (Result != null)
|
||||||
|
{
|
||||||
|
Growl.Warning(Result.Message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Growl.Warning("操作失败:请重试!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Growl.Error("操作失败:" + ex.Message);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region PageOperation 分页操作
|
#region PageOperation 分页操作
|
||||||
|
@ -168,7 +168,7 @@
|
|||||||
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
||||||
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
|
<DataGridTextColumn IsReadOnly="True" Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
|
||||||
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></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" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
|
||||||
<DataGridTextColumn IsReadOnly="True" MaxWidth="300" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
|
<DataGridTextColumn IsReadOnly="True" MaxWidth="300" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
|
||||||
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
|
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
|
||||||
|
@ -67,6 +67,11 @@
|
|||||||
Grid.Column="9" MinHeight="40" FontSize="18" Content=" 重置" FontFamily="{StaticResource IconFont}"
|
Grid.Column="9" MinHeight="40" FontSize="18" Content=" 重置" FontFamily="{StaticResource IconFont}"
|
||||||
Command="{Binding BtnResetCommand}">
|
Command="{Binding BtnResetCommand}">
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
|
<Button Style="{StaticResource ButtonWarning}" hc:BorderElement.CornerRadius="12"
|
||||||
|
Grid.Column="8" Grid.Row="1" MinHeight="30" FontSize="18" Content=" 屏蔽率" FontFamily="{StaticResource IconFont}"
|
||||||
|
Command="{Binding BtnDisablePercentCommand}">
|
||||||
|
</Button>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
|
|
||||||
@ -85,6 +90,11 @@
|
|||||||
SelectionChanged="dataGrid_SelectionChanged"
|
SelectionChanged="dataGrid_SelectionChanged"
|
||||||
RowHeight="39"
|
RowHeight="39"
|
||||||
AutoGenerateColumns="False" FontSize="13">
|
AutoGenerateColumns="False" FontSize="13">
|
||||||
|
<DataGrid.ContextMenu>
|
||||||
|
<ContextMenu Name="dgmenu1" StaysOpen="true">
|
||||||
|
<MenuItem Header="查询历史电压" Click="MenuItem_Click"/>
|
||||||
|
</ContextMenu>
|
||||||
|
</DataGrid.ContextMenu>
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
|
||||||
<DataGridTextColumn IsReadOnly="True" Header="货架编码" Binding="{Binding ShelfCode}"></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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
@ -14,7 +15,10 @@ using System.Windows.Input;
|
|||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
|
using WCS.Model.ApiModel.StoreInfo;
|
||||||
|
using WCS.Model;
|
||||||
using 智能仓储WCS管理系统.ViewModel;
|
using 智能仓储WCS管理系统.ViewModel;
|
||||||
|
using 智能仓储WCS管理系统.Api;
|
||||||
|
|
||||||
namespace 智能仓储WCS管理系统
|
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("发送标定指令成功!");
|
Growl.Success("发送标定指令成功!");
|
||||||
this.Close();
|
this.Close();
|
||||||
}
|
}
|
||||||
else if (Result != null)
|
else if (Result1 != null)
|
||||||
{
|
{
|
||||||
Growl.Error(Result1.Message);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@
|
|||||||
<TextBlock Margin="5,0" Text="{Binding Title, FallbackValue=标题}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left"/>
|
<TextBlock Margin="5,0" Text="{Binding Title, FallbackValue=标题}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left"/>
|
||||||
<Button Grid.Column="1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityHiddenConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" Click="closeClick"/>
|
<Button Grid.Column="1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityHiddenConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" Click="closeClick"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Margin="5,0" Grid.Row="1" Text="{Binding Content, FallbackValue=我是内容}" FontSize="18" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
<TextBox Margin="5,0" Grid.Row="1" Text="{Binding Content, Mode=OneWay}" FontSize="18" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||||
<hc:UniformSpacingPanel x:Name="spacingPanel" Grid.Row="2" Margin="5,0,5,10" Spacing="10" Width="auto" ChildWrapping="Wrap" HorizontalAlignment="Center">
|
<hc:UniformSpacingPanel x:Name="spacingPanel" Grid.Row="2" Margin="5,0,5,10" Spacing="10" Width="auto" ChildWrapping="Wrap" HorizontalAlignment="Center">
|
||||||
<Button Content="确认"/>
|
<Button Content="确认"/>
|
||||||
<Button Content="取消"/>
|
<Button Content="取消"/>
|
||||||
|
@ -66,6 +66,19 @@ namespace 智能仓储WCS管理系统
|
|||||||
return Show(content, title, new string[] { "确认", "忽略" }, _warning, isVisCloseBut);
|
return Show(content, title, new string[] { "确认", "忽略" }, _warning, isVisCloseBut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 显示提示框
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="content">内容</param>
|
||||||
|
/// <param name="title">标题</param>
|
||||||
|
/// <param name="isVisCloseBut">界面右上角是否显示关闭按钮</param>
|
||||||
|
/// <returns>点击的按钮文本</returns>
|
||||||
|
public static WarningWindow ShowNoScanError(string content, string title, WebSocketMessageModel _warning, bool isVisCloseBut = true, Window owner = null)
|
||||||
|
{
|
||||||
|
content = content + "\r\n确认对应无物料可点击[屏蔽库位]按钮进行库位屏蔽!";
|
||||||
|
return Show(content, title, new string[] { "确认","屏蔽库位", "忽略" }, _warning, isVisCloseBut);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 显示提示框
|
/// 显示提示框
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -92,6 +105,14 @@ namespace 智能仓储WCS管理系统
|
|||||||
Content = item,
|
Content = item,
|
||||||
};
|
};
|
||||||
button.Margin = new Thickness(10, 0, 10, 0);
|
button.Margin = new Thickness(10, 0, 10, 0);
|
||||||
|
button.FontSize = 18;
|
||||||
|
if (item == "屏蔽库位")
|
||||||
|
{
|
||||||
|
button.Foreground = Brushes.Red;
|
||||||
|
button.FontWeight = FontWeights.DemiBold;
|
||||||
|
//WaningWindow.Content = WaningWindow.Content + "\r\n确认对应无物料可点击[屏蔽库位]按钮进行库位屏蔽!";
|
||||||
|
}
|
||||||
|
|
||||||
button.Click += (s, e) =>
|
button.Click += (s, e) =>
|
||||||
{
|
{
|
||||||
clikename = ((Button)s).Content.ToString();
|
clikename = ((Button)s).Content.ToString();
|
||||||
@ -99,10 +120,26 @@ namespace 智能仓储WCS管理系统
|
|||||||
#region 调用接口处理异常/消除报警
|
#region 调用接口处理异常/消除报警
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var solveType = SolveTypeEnum.忽略;
|
||||||
|
switch (clikename)
|
||||||
|
{
|
||||||
|
case "确认":
|
||||||
|
solveType = SolveTypeEnum.处理;
|
||||||
|
break;
|
||||||
|
case "忽略":
|
||||||
|
solveType = SolveTypeEnum.忽略;
|
||||||
|
break;
|
||||||
|
case "屏蔽库位":
|
||||||
|
solveType = SolveTypeEnum.屏蔽库位;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
solveType = SolveTypeEnum.忽略;
|
||||||
|
break;
|
||||||
|
}
|
||||||
var body = new SolveWarningRequest()
|
var body = new SolveWarningRequest()
|
||||||
{
|
{
|
||||||
Guid = _warning.Guid,
|
Guid = _warning.Guid,
|
||||||
SolveType = clikename == "确认" ? SolveTypeEnum.处理 : SolveTypeEnum.忽略,
|
SolveType = solveType,
|
||||||
UserName = LocalStatic.CurrentUser,
|
UserName = LocalStatic.CurrentUser,
|
||||||
DeviceType = "WCS前端",
|
DeviceType = "WCS前端",
|
||||||
};
|
};
|
||||||
|
@ -25,8 +25,15 @@ namespace 智能仓储WCS管理系统
|
|||||||
{
|
{
|
||||||
Logs.Write($"【添加报警信息弹窗】报警类型:{warningModel.WarningType} 报警信息:{warningModel.WarningMessage} Guid:{warningModel.Guid}", LogsType.WebSocket);
|
Logs.Write($"【添加报警信息弹窗】报警类型:{warningModel.WarningType} 报警信息:{warningModel.WarningMessage} Guid:{warningModel.Guid}", LogsType.WebSocket);
|
||||||
Application.Current.Dispatcher.Invoke(new Action(() =>
|
Application.Current.Dispatcher.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
if (warningModel.WarningType == WarningTypeEnum.入库自检未扫描上架 || warningModel.WarningType == WarningTypeEnum.出库自检未扫描上架 || warningModel.WarningType == WarningTypeEnum.自检未扫描上架)
|
||||||
|
{
|
||||||
|
warnings.Add(WarningWindow.ShowNoScanError(warningModel.WarningMessage, "报警信息", warningModel));
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
warnings.Add(WarningWindow.Show(warningModel.WarningMessage, "报警信息", warningModel));
|
warnings.Add(WarningWindow.Show(warningModel.WarningMessage, "报警信息", warningModel));
|
||||||
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<Company>重庆盟讯电子科技有限公司</Company>
|
<Company>重庆盟讯电子科技有限公司</Company>
|
||||||
<Copyright>Copyright © 2024</Copyright>
|
<Copyright>Copyright © 2024</Copyright>
|
||||||
<AssemblyVersion>1.0.0</AssemblyVersion>
|
<AssemblyVersion>1.0.4</AssemblyVersion>
|
||||||
<FileVersion>1.0.0</FileVersion>
|
<FileVersion>1.0.4</FileVersion>
|
||||||
<ApplicationIcon>Resources\Logo.ico</ApplicationIcon>
|
<ApplicationIcon>Resources\Logo.ico</ApplicationIcon>
|
||||||
<Authors>重庆盟讯电子科技有限公司</Authors>
|
<Authors>重庆盟讯电子科技有限公司</Authors>
|
||||||
<Product>智能仓储WCS管理系统</Product>
|
<Product>智能仓储WCS管理系统</Product>
|
||||||
@ -84,12 +84,12 @@
|
|||||||
<Resource Include="Resources\Logo.ico" />
|
<Resource Include="Resources\Logo.ico" />
|
||||||
<Resource Include="Resources\Logo.png" />
|
<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" />
|
<Resource Include="Resources\权限.png" />
|
||||||
<Resource Include="Resources\调试.png" />
|
<Resource Include="Resources\调试.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
Reference in New Issue
Block a user