diff --git a/WCS.BLL/Config/JsConfig.cs b/WCS.BLL/Config/JsConfig.cs
index 7390edf..d5ef580 100644
--- a/WCS.BLL/Config/JsConfig.cs
+++ b/WCS.BLL/Config/JsConfig.cs
@@ -18,6 +18,18 @@ namespace WCS.BLL.Config
///
public bool IsSameMatCodeOut { get; set; }
///
+ /// 数据-数据库路径
+ ///
+ public string DataDbPath { get; set; }
+ ///
+ /// 日志-数据库路径
+ ///
+ public string LogDbPath { get; set; }
+ ///
+ /// 权限-数据库路径
+ ///
+ public string AuthDbPath { get; set; }
+ ///
/// 是否接入WMS系统
///
public bool IsAccessWMS { get; set; }
@@ -25,5 +37,25 @@ namespace WCS.BLL.Config
/// WMS系统
///
public string? WMSUrl { get; set; }
+
+ #region 盟讯公司后台配置
+ public bool IsMx { get; set; }
+ ///
+ /// 回传Mes入库/移库
+ ///
+ public string InputStockInStr { get; set; }
+ ///
+ /// 回传Mes出库
+ ///
+ public string BunkerOutStr { get; set; }
+ ///
+ /// 通过条码查询物料信息接口
+ ///
+ public string QueryBybar { get; set; }
+ ///
+ /// 后台配置的组别
+ ///
+ public string GroupName { get; set; }
+ #endregion
}
}
diff --git a/WCS.BLL/DbModels/DingDingSendUser.cs b/WCS.BLL/DbModels/DingDingSendUser.cs
new file mode 100644
index 0000000..d19c848
--- /dev/null
+++ b/WCS.BLL/DbModels/DingDingSendUser.cs
@@ -0,0 +1,19 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WCS.BLL.DbModels
+{
+ [SugarTable("ding_ding_send_user")]
+ public class DingDingSendUser
+ {
+ ///
+ /// 工号
+ ///
+ [SugarColumn(ColumnName = "user_name", Length = 50, IsNullable = true, ColumnDescription = "创建人")]
+ public string UserName { get; set; }
+ }
+}
diff --git a/WCS.BLL/DbModels/DocumentSerialNumber.cs b/WCS.BLL/DbModels/DocumentSerialNumber.cs
index c5efd11..1860f35 100644
--- a/WCS.BLL/DbModels/DocumentSerialNumber.cs
+++ b/WCS.BLL/DbModels/DocumentSerialNumber.cs
@@ -12,7 +12,7 @@ namespace WCS.BLL.DbModels
///
/// 用于记录单据生成到哪个序号了
///
- [SugarTable("document_serial_number")]
+ [SugarTable("wcs_document_serial_number")]
public class DocumentSerialNumber
{
///
diff --git a/WCS.BLL/DbModels/InOutRecord.cs b/WCS.BLL/DbModels/InOutRecord.cs
index 08014b8..080816f 100644
--- a/WCS.BLL/DbModels/InOutRecord.cs
+++ b/WCS.BLL/DbModels/InOutRecord.cs
@@ -12,7 +12,7 @@ namespace WCS.BLL.DbModels
///
/// 出入库记录
///
- [SugarTable("in_out_record")]
+ [SugarTable("wcs_in_out_record")]
public class InOutRecord
{
///
@@ -115,6 +115,33 @@ namespace WCS.BLL.DbModels
[SugarColumn(ColumnName = "operate_user", Length = 100, IsNullable = true, ColumnDescription = "创建人")]
public string OperateUser { get; set; }
+ ///
+ /// 串联绑定后的大货架编码
+ ///
+ [SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
+ public string? BigShelfCode { get; set; } = string.Empty;
+ ///
+ /// Row 行
+ ///
+ [SugarColumn(ColumnName = "R", Length = 10, IsNullable = true, ColumnDescription = "库位 行")]
+ public string R { get; set; }
+ ///
+ /// Column 列
+ ///
+ [SugarColumn(ColumnName = "C", Length = 10, IsNullable = true, ColumnDescription = "库位 列")]
+ public string C { get; set; }
+ ///
+ /// Column 位
+ ///
+ [SugarColumn(ColumnName = "Wei", Length = 10, IsNullable = true, ColumnDescription = "库位 位 第几个库位灯")]
+ public string Wei { get; set; }
+
+ ///
+ /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
+ ///
+ [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
+ public string GroupName { get; set; }
+
///
/// 序号
///
diff --git a/WCS.BLL/DbModels/InventoryDetail.cs b/WCS.BLL/DbModels/InventoryDetail.cs
index 3707137..93ddf90 100644
--- a/WCS.BLL/DbModels/InventoryDetail.cs
+++ b/WCS.BLL/DbModels/InventoryDetail.cs
@@ -11,7 +11,7 @@ namespace WCS.BLL.DbModels
///
/// 库存明细表
///
- [SugarTable("inventory_detail")]
+ [SugarTable("wcs_inventory_detail")]
public class InventoryDetail
{
///
@@ -102,7 +102,38 @@ namespace WCS.BLL.DbModels
///
[SugarColumn(ColumnName = "is_locked", IsNullable = false, ColumnDescription = "物料是否已被锁定")]
public bool IsLocked { get; set; } = false;
+ ///
+ /// 串联绑定后的大货架编码
+ ///
+ [SugarColumn(ColumnName = "big_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
+ public string? BigShelfCode { get; set; } = string.Empty;
+ ///
+ /// Row 行
+ ///
+ [SugarColumn(ColumnName = "R", Length = 10, IsNullable = true, ColumnDescription = "库位 行")]
+ public string R { get; set; }
+ ///
+ /// Column 列
+ ///
+ [SugarColumn(ColumnName = "C", Length = 10, IsNullable = true, ColumnDescription = "库位 列")]
+ public string C { get; set; }
+ ///
+ /// Column 位
+ ///
+ [SugarColumn(ColumnName = "Wei", Length = 10, IsNullable = true, ColumnDescription = "库位 位 第几个库位灯")]
+ public string Wei { get; set; }
+ ///
+ /// WarehouseCode 仓库代码
+ ///
+ [SugarColumn(ColumnName = "WarehouseCode", Length = 10, IsNullable = true, ColumnDescription = "仓库代码")]
+ public string WarehouseCode { get; set; }
+
+ ///
+ /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
+ ///
+ [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
+ public string GroupName { get; set; }
///
/// 序号
///
diff --git a/WCS.BLL/DbModels/MatBaseInfo.cs b/WCS.BLL/DbModels/MatBaseInfo.cs
index 6f234ae..2b1b4a4 100644
--- a/WCS.BLL/DbModels/MatBaseInfo.cs
+++ b/WCS.BLL/DbModels/MatBaseInfo.cs
@@ -10,7 +10,7 @@ namespace WCS.BLL.DbModels
///
///物料基础信息
///
- [SugarTable("mat_base_info")]
+ [SugarTable("wcs_mat_base_info")]
public partial class MatBaseInfo
{
///
diff --git a/WCS.BLL/DbModels/MatInfo.cs b/WCS.BLL/DbModels/MatInfo.cs
index 9c392f7..896f613 100644
--- a/WCS.BLL/DbModels/MatInfo.cs
+++ b/WCS.BLL/DbModels/MatInfo.cs
@@ -10,7 +10,7 @@ namespace WCS.BLL.DbModels
///
///物料信息表
///
- [SugarTable("mat_info")]
+ [SugarTable("wcs_mat_info")]
public class MatInfo
{
///
diff --git a/WCS.BLL/DbModels/ModuleInfo.cs b/WCS.BLL/DbModels/ModuleInfo.cs
index 73a4c41..77d31c6 100644
--- a/WCS.BLL/DbModels/ModuleInfo.cs
+++ b/WCS.BLL/DbModels/ModuleInfo.cs
@@ -11,7 +11,7 @@ namespace WCS.DAL.DbModels
///
///模组信息表
///
- [SugarTable("module_info")]
+ [SugarTable("wcs_module_info")]
public class ModuleInfo
{
@@ -62,7 +62,11 @@ namespace WCS.DAL.DbModels
///
[SugarColumn(ColumnName = "client_ip", Length = 50, IsNullable = false, ColumnDescription = "货架对应Can模块的Ip")]
public string CleintIp { get; set; }
-
+ ///
+ /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
+ ///
+ [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
+ public string GroupName { get; set; }
///
/// R 行
///
diff --git a/WCS.BLL/DbModels/OutOrder.cs b/WCS.BLL/DbModels/OutOrder.cs
index dac1965..5fb7a59 100644
--- a/WCS.BLL/DbModels/OutOrder.cs
+++ b/WCS.BLL/DbModels/OutOrder.cs
@@ -6,7 +6,7 @@ namespace WCS.BLL.DbModels
///
/// 出库单据
///
- [SugarTable("out_order")]
+ [SugarTable("wcs_out_order")]
public class OutOrder
{
///
@@ -63,6 +63,12 @@ namespace WCS.BLL.DbModels
[SugarColumn(ColumnName = "shelf_type_id", IsNullable = false, DefaultValue = "0", ColumnDescription = "货架类型Id")]
public int ShelfTypeId { get; set; } = 0;
+ ///
+ /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
+ ///
+ [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
+ public string GroupName { get; set; }
+
///
/// 创建时间
///
diff --git a/WCS.BLL/DbModels/OutOrderDetail.cs b/WCS.BLL/DbModels/OutOrderDetail.cs
index 73550b5..477c0e1 100644
--- a/WCS.BLL/DbModels/OutOrderDetail.cs
+++ b/WCS.BLL/DbModels/OutOrderDetail.cs
@@ -6,7 +6,7 @@ namespace WCS.BLL.DbModels
///
/// 出库单据明细表
///
- [SugarTable("out_order_detail")]
+ [SugarTable("wcs_out_order_detail")]
public class OutOrderDetail
{
///
diff --git a/WCS.BLL/DbModels/OutOrderMatDetail.cs b/WCS.BLL/DbModels/OutOrderMatDetail.cs
index 84e1fa5..3b284fd 100644
--- a/WCS.BLL/DbModels/OutOrderMatDetail.cs
+++ b/WCS.BLL/DbModels/OutOrderMatDetail.cs
@@ -11,7 +11,7 @@ namespace WCS.BLL.DbModels
///
/// 出库物料明细(库存数据加锁后缓存对应的数据并记录状态)
///
- [SugarTable("out_order_mat_detail")]
+ [SugarTable("wcs_out_order_mat_detail")]
public class OutOrderMatDetail
{
///
diff --git a/WCS.BLL/DbModels/ShelfInfo.cs b/WCS.BLL/DbModels/ShelfInfo.cs
index df5f5f6..66fcd40 100644
--- a/WCS.BLL/DbModels/ShelfInfo.cs
+++ b/WCS.BLL/DbModels/ShelfInfo.cs
@@ -8,7 +8,7 @@ using WCS.BLL.HardWare;
namespace WCS.DAL.DbModels
{
- [SugarTable("shelf_info")]
+ [SugarTable("wcs_shelf_info")]
public class ShelfInfo
{
@@ -83,7 +83,7 @@ namespace WCS.DAL.DbModels
/// 串联绑定后的大货架编码
///
[SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
- public string? BindShelfCode { get; set; } = string.Empty;
+ public string? BigShelfCode { get; set; } = string.Empty;
///
/// 序号
diff --git a/WCS.BLL/DbModels/ShelfTypeInfo.cs b/WCS.BLL/DbModels/ShelfTypeInfo.cs
index 6b0db4b..5e84a14 100644
--- a/WCS.BLL/DbModels/ShelfTypeInfo.cs
+++ b/WCS.BLL/DbModels/ShelfTypeInfo.cs
@@ -10,7 +10,7 @@ namespace WCS.BLL.DbModels
///
/// 货架类型
///
- [SugarTable("shelf_type")]
+ [SugarTable("wcs_shelf_type")]
public class ShelfTypeInfo
{
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsNullable = false, IsIdentity = true)]
diff --git a/WCS.BLL/DbModels/StockTakingOrder.cs b/WCS.BLL/DbModels/StockTakingOrder.cs
index 47498ce..ccd2e36 100644
--- a/WCS.BLL/DbModels/StockTakingOrder.cs
+++ b/WCS.BLL/DbModels/StockTakingOrder.cs
@@ -11,7 +11,7 @@ namespace WCS.BLL.DbModels
///
/// 盘点单据
///
- [SugarTable("stock_taking_order")]
+ [SugarTable("wcs_stock_taking_order")]
public class StockTakingOrder
{
///
diff --git a/WCS.BLL/DbModels/StockTakingOrderMatDetail.cs b/WCS.BLL/DbModels/StockTakingOrderMatDetail.cs
index 203ebb3..83b9c33 100644
--- a/WCS.BLL/DbModels/StockTakingOrderMatDetail.cs
+++ b/WCS.BLL/DbModels/StockTakingOrderMatDetail.cs
@@ -11,7 +11,7 @@ namespace WCS.BLL.DbModels
///
/// 盘点单据物料明细
///
- [SugarTable("stock_taking_order_matdetail")]
+ [SugarTable("wcs_stock_taking_order_matdetail")]
public class StockTakingOrderMatDetail
{
///
diff --git a/WCS.BLL/DbModels/StoreInfo.cs b/WCS.BLL/DbModels/StoreInfo.cs
index ff551aa..1b6a409 100644
--- a/WCS.BLL/DbModels/StoreInfo.cs
+++ b/WCS.BLL/DbModels/StoreInfo.cs
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace WCS.DAL.DbModels
{
- [SugarTable("store_info")]
+ [SugarTable("wcs_store_info")]
public partial class StoreInfo
{
///
@@ -25,7 +25,7 @@ namespace WCS.DAL.DbModels
/// 货架类型Id
///
[SugarColumn(ColumnName = "shelf_type_id", IsNullable = false, DefaultValue = "0", ColumnDescription = "货架类型Id")]
- public int ShelfTypeId { get; set; }
+ public int ShelfTypeId { get; set; }
///
/// 模组Id
///
@@ -92,6 +92,33 @@ namespace WCS.DAL.DbModels
[SugarColumn(ColumnName = "offset_voltage", IsNullable = true, ColumnDescription = "电压偏移值")]
public decimal OffsetVoltage { get; set; }
+ ///
+ /// 串联绑定后的大货架编码
+ ///
+ [SugarColumn(ColumnName = "Bind_shelf_code", IsNullable = true, ColumnDescription = "串联绑定后的大货架编码")]
+ public string? BigShelfCode { get; set; } = string.Empty;
+ ///
+ /// Row 行
+ ///
+ [SugarColumn(ColumnName = "R", Length = 10, IsNullable = true, ColumnDescription = "库位 行")]
+ public string R { get; set; }
+ ///
+ /// Column 列
+ ///
+ [SugarColumn(ColumnName = "C", Length = 10, IsNullable = true, ColumnDescription = "库位 列")]
+ public string C { get; set; }
+ ///
+ /// Column 位
+ ///
+ [SugarColumn(ColumnName = "Wei", Length = 10, IsNullable = true, ColumnDescription = "库位 位 第几个库位灯")]
+ public string Wei { get; set; }
+
+ ///
+ /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)
+ ///
+ [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")]
+ public string GroupName { get; set; }
+
///
/// 序号
///
diff --git a/WCS.BLL/DbModels/SystemApiLogRecord.cs b/WCS.BLL/DbModels/SystemApiLogRecord.cs
index e1ae5a9..6746e34 100644
--- a/WCS.BLL/DbModels/SystemApiLogRecord.cs
+++ b/WCS.BLL/DbModels/SystemApiLogRecord.cs
@@ -10,7 +10,7 @@ namespace WCS.BLL.DbModels
///
/// 系统接口日志记录
///
- [SugarTable("system_api_log_record")]
+ [SugarTable("wcs_system_api_log_record")]
public class SystemApiLogRecord
{
///
diff --git a/WCS.BLL/HardWare/SmartShelf.cs b/WCS.BLL/HardWare/SmartShelf.cs
index 03ae84f..782a4dd 100644
--- a/WCS.BLL/HardWare/SmartShelf.cs
+++ b/WCS.BLL/HardWare/SmartShelf.cs
@@ -949,6 +949,12 @@ namespace WCS.BLL.HardWare
StoreCode = storeInfo.StoreCode,
StoreId = storeInfo.Id,
+ R = storeInfo.R,
+ C = storeInfo.C,
+ Wei = storeInfo.Wei,
+ BigShelfCode = storeInfo.BigShelfCode,
+ GroupName = storeInfo.GroupName,
+
MatSN = this.InStoreData.materialBar,
MatCode = this.InStoreData.materialCode,
MatName = this.InStoreData.materialName,
@@ -969,6 +975,12 @@ namespace WCS.BLL.HardWare
StoreId = storeInfo.Id,
StoreInfo = storeInfo,
+ R = storeInfo.R,
+ C = storeInfo.C,
+ Wei = storeInfo.Wei,
+ BigShelfCode = storeInfo.BigShelfCode,
+ GroupName = storeInfo.GroupName,
+
MatSN = this.InStoreData.materialBar,
MatCode = this.InStoreData.materialCode,
MatName = this.InStoreData.materialName,
@@ -1344,6 +1356,12 @@ namespace WCS.BLL.HardWare
StoreId = storeInfo.Id,
StoreInfo = storeInfo,
+ R = storeInfo.R,
+ C = storeInfo.C,
+ Wei = storeInfo.Wei,
+ BigShelfCode = storeInfo.BigShelfCode,
+ GroupName = storeInfo.GroupName,
+
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
diff --git a/WCS.BLL/Manager/DbInit.cs b/WCS.BLL/Manager/DbInit.cs
index 981e4f2..e7d6f36 100644
--- a/WCS.BLL/Manager/DbInit.cs
+++ b/WCS.BLL/Manager/DbInit.cs
@@ -1,9 +1,13 @@
-using System;
+using SqlSugar;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WCS.BLL.Config;
using WCS.BLL.DbModels;
+using WCS.BLL.HardWare;
+using WCS.DAL;
using WCS.DAL.Db;
using WCS.DAL.Db.AuthDb;
using WCS.DAL.DbModels;
@@ -15,7 +19,49 @@ namespace WCS.BLL.Manager
public static void InitDb()
{
Logs.Write("【初始化数据库】开始", LogsType.StartBoot);
+ //初始化数据库对象
+ if (LocalFile.Config.IsMx)
+ {
+ DbHelp.db = new SqlSugarScope(new ConnectionConfig()
+ {
+ ConnectionString = LocalFile.Config.DataDbPath,
+ DbType = DbType.SqlServer,//[Sqlite]安装[System.Data.SQLite];
+ IsAutoCloseConnection = true
+ }, db =>
+ {
+ db.Aop.OnError = ex =>
+ {
+ };
+ });
+
+ DbHelp.dbLog = new SqlSugarScope(new ConnectionConfig()
+ {
+ ConnectionString = LocalFile.Config.LogDbPath,
+ DbType = DbType.SqlServer,//[Sqlite]安装[System.Data.SQLite];
+ IsAutoCloseConnection = true
+ }, db =>
+ {
+ db.Aop.OnError = ex =>
+ {
+ };
+ });
+
+ AuthDbHelp.db = new SqlSugarScope(new ConnectionConfig()
+ {
+ ConnectionString = LocalFile.Config.AuthDbPath,
+ DbType = DbType.SqlServer,//[Sqlite]安装[System.Data.SQLite];
+ IsAutoCloseConnection = true
+ }, db =>
+ {
+ db.Aop.OnError = ex =>
+ {
+ };
+ });
+ }
+
+
DbHelp.db.DbMaintenance.CreateDatabase();
+ DbHelp.dbLog.DbMaintenance.CreateDatabase();
DbHelp.db.CodeFirst.InitTables(typeof(ModuleInfo), typeof(ShelfInfo), typeof(StoreInfo)
, typeof(InventoryDetail), typeof(OutOrder), typeof(OutOrderDetail), typeof(OutOrderMatDetail)
@@ -46,8 +92,25 @@ namespace WCS.BLL.Manager
DbHelp.db.Insertable(outDocumentSerialNumber).ExecuteCommand();
DbHelp.db.Insertable(stockTakingDocumentSerialNumber).ExecuteCommand();
}
+ //初始化货架类型
+ if (!DbHelp.db.Queryable().Any())
+ {
+ var smartShelf = new ShelfTypeInfo()
+ {
+ ShelfTypeName = "智能货架"
+ };
+ var singleLight = new ShelfTypeInfo()
+ {
+ ShelfTypeName = "信息化货架"
+ };
+ DbHelp.db.Insertable(smartShelf).ExecuteCommand();
+ DbHelp.db.Insertable(singleLight).ExecuteCommand();
+ }
Logs.Write("【初始化数据库】结束", LogsType.StartBoot);
+
+ //初始化权限数据库
+ AuthDbHelp.InitDb();
}
}
}
diff --git a/WCS.BLL/Manager/MXBackgroundThread.cs b/WCS.BLL/Manager/MXBackgroundThread.cs
new file mode 100644
index 0000000..1b6de7f
--- /dev/null
+++ b/WCS.BLL/Manager/MXBackgroundThread.cs
@@ -0,0 +1,255 @@
+using SqlSugar;
+using WCS.BLL.Config;
+using WCS.BLL.DbModels;
+using WCS.BLL.Tool;
+using WCS.DAL;
+using WCS.DAL.Db;
+using WCS.DAL.Db.AuthDb;
+using WCS.Model;
+using WCS.Model.ApiModel.InOutRecord;
+using WCS.Model.ApiModel.MXBackgroundThread;
+
+namespace WCS.BLL.Manager
+{
+ //盟讯公司后台方法
+ public static class MXBackgroundThread
+ {
+ public static void InitBackgroundThread()
+ {
+ #region 定时任务:回传Mes入库出库
+ Task.Run(() =>
+ {
+ while (true)
+ {
+ //每5秒同步一次
+ Thread.Sleep(5000);
+ try
+ {
+ var records = DbHelp.db.Queryable()
+ .Where(t => t.OperateTime > DateTime.Now.AddDays(-3)) //只查询回传三天内数据
+ .Where(t => t.IsUpload == false)
+ .Includes(t => t.StoreInfo)
+ .OrderBy(t => t.Id)
+ .ToList();
+ //入库记录上传
+ var inventoryDetails = records.Where(t => t.Direction == DirectionEnum.入库)
+ .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
+ .ToList();
+ if (inventoryDetails != null && inventoryDetails.Count > 0)
+ {
+ for (int i = 0; i < inventoryDetails.Count; i++)
+ {
+ try
+ {
+ //请求WMS上传入库记录
+ var data = new InputStockInRequest
+ {
+ materialBar = inventoryDetails[i].MatSN,
+ shelfCode = inventoryDetails[i].BigShelfCode,
+ shelfX = "R" + inventoryDetails[i].R,
+ shelfY = "C" + inventoryDetails[i].C,
+ shelfZ = inventoryDetails[i].Wei,
+ inUser = inventoryDetails[i].OperateUser,
+ inTime = inventoryDetails[i].OperateTime.ToString("yyyy-MM-dd HH:mm:ss"),
+ };
+ Guid guid = Guid.NewGuid();
+ var result = ApiHelp.GetDataFromHttp(LocalFile.Config.InputStockInStr, data, "POST", true);
+ if (result != null && (result.Code == 200))
+ {
+ //上传成功 更改上传状态
+ inventoryDetails[i].IsUpload = true;
+ DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
+ }
+
+ }
+ catch (Exception ex)
+ {
+
+ }
+ Thread.Sleep(200);
+ }
+ }
+
+ //出库记录上传
+ var outRecord = records.Where(t => t.Direction == DirectionEnum.出库)
+ .Where(t => !string.IsNullOrEmpty(t.OrderNumber))
+ .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName)
+ .ToList();
+ if (outRecord != null && outRecord.Count > 0)
+ {
+ for (int i = 0; i < outRecord.Count; i++)
+ {
+ try
+ {
+ var retString = string.Empty;
+
+ var data = new BunkerOutRequest()
+ {
+ materialBar = outRecord[i].MatSN,
+ outType = 0,
+ pickBillNumber = outRecord[i].OrderNumber,
+ qty = outRecord[i].MatQty,
+ };
+ var result = ApiHelp.GetDataFromHttp(LocalFile.Config.BunkerOutStr, data, "POST", true);
+ //请求成功
+ if (result != null && result.Code == 200)
+ {
+ //上传成功 更改上传状态
+ outRecord[i].IsUpload = true;
+ DbHelp.db.Updateable(outRecord[i]).ExecuteCommand();
+ }
+
+ }
+ catch (Exception ex)
+ {
+
+ }
+ Thread.Sleep(200);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Logs.Write("【定时任务】上传异常:" + ex.Message);
+ }
+ }
+ });
+ #endregion
+
+ #region 定时任务:超时退出 出库、入库、盘点模式
+
+ #endregion
+
+ #region 定时任务:海康未扫物料码的物料更新数据
+ Task.Run(() =>
+ {
+ while (true)
+ {
+ //间隔20秒同步一次
+ Thread.Sleep(20000);
+ try
+ {
+ var inventoryDetails = DbHelp.db.Queryable()
+ .Where(t => t.MatName == "暂时未知")
+ .Where(t => t.InstoreTime > DateTime.Now.AddDays(-3))
+ .ToList();
+ if (inventoryDetails != null && inventoryDetails.Count > 0)
+ {
+ for (int i = 0; i < inventoryDetails.Count; i++)
+ {
+ try
+ {
+ //请求WMS获取物料的信息
+ var request = new QueryBybarRequest()
+ {
+ materialBar = inventoryDetails[i].MatSN
+ };
+ var result = ApiHelp.GetDataFromHttp(LocalFile.Config.QueryBybar, request, "POST", true);
+ if (result != null && (result.code == 200) && result.data != null && result.data.Count() > 0)
+ {
+ //查询成功 更改数值
+ var instoreDto = result.data.FirstOrDefault();
+ inventoryDetails[i].MatCode = instoreDto.materialCode;
+ inventoryDetails[i].MatName = instoreDto.materialName;
+ inventoryDetails[i].MatBatch = instoreDto.batchNo;
+ inventoryDetails[i].MatSpec = instoreDto.materialSpec;
+ inventoryDetails[i].MatQty = (int)instoreDto.materialQty;
+ DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
+ }
+
+ }
+ catch (Exception ex)
+ {
+
+ }
+ Thread.Sleep(500);
+ }
+ }
+
+
+
+ }
+ catch (Exception ex)
+ {
+ Logs.Write("【定时任务】更新海康物料信息异常:" + ex.Message);
+ }
+
+ Thread.Sleep(3000);
+ try
+ {
+ var inventoryDetails = DbHelp.db.Queryable()
+ .Where(t => t.WarehouseCode == null)
+ .Where(t => t.InstoreTime > DateTime.Now.AddDays(-30))
+ .ToList();
+ if (inventoryDetails != null && inventoryDetails.Count > 0)
+ {
+ for (int i = 0; i < inventoryDetails.Count; i++)
+ {
+ try
+ {
+ var url = $"http://192.168.2.23:9213/integrate/hkwsInventoryDetail/selectMaterialBar?materialBar={inventoryDetails[i].MatSN}";
+ var result = ApiHelp.GetDataFromHttp(url, null, "POST", false);
+ if (result != null && result.code == 200 && result.data != null && !string.IsNullOrEmpty(result.data.warehouseCode))
+ {
+ //查询成功 更改数值
+ inventoryDetails[i].WarehouseCode = result.data.warehouseCode;
+ DbHelp.db.Updateable(inventoryDetails[i]).ExecuteCommand();
+ }
+
+ }
+ catch (Exception ex)
+ {
+ Logs.Write("【定时任务】更新仓库代码异常:" + ex.Message);
+ }
+ Thread.Sleep(500);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+ });
+ #endregion
+
+ #region 定时任务:紧机复原和监测警示灯关灯机制
+ #endregion
+ }
+
+ ///
+ /// 发送钉钉消息
+ ///
+ /// 发送的消息内容
+ /// 错误信息
+ /// 工号列表
+ ///
+ public static bool SendDingDingMsg(string msg, List idList, ref string errMsg)
+ {
+ try
+ {
+ #region 获取所有工程研发人员
+ var list = AuthDbHelp.db.Queryable().Where(t => t.IsGCYF)
+ .Select(t => t.LoginName)
+ .ToList();
+ #endregion
+ string ids = string.Join(",", list);
+ string url = "http://192.168.2.23:9213/integrate/cmccMonitor/rateAlertByCMCC?" + $"context={msg}&messageType=软件管理平台&username={ids}";
+ #region 调用接口请求发送钉钉消息
+ var Result = ApiHelp.GetDataFromHttp(url, null, "GET");
+ if (Result != null && Result.code != 200)
+ {
+ errMsg = Result.msg;
+ return false;
+ }
+ return true;
+ #endregion
+
+ }
+ catch (Exception ex)
+ {
+ errMsg = "接口调用失败";
+ return false;
+ }
+ }
+ }
+}
diff --git a/WCS.BLL/Manager/ShelfManager.cs b/WCS.BLL/Manager/ShelfManager.cs
index 20a1c35..347222e 100644
--- a/WCS.BLL/Manager/ShelfManager.cs
+++ b/WCS.BLL/Manager/ShelfManager.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.HardWare;
using WCS.DAL.Db;
@@ -22,7 +23,10 @@ namespace WCS.BLL.Manager
{
Logs.Write("【InitShelves】开始", LogsType.StartBoot);
- var shelvesInDb = DbHelp.db.Queryable().ToList();
+ var shelvesInDbQueryable = DbHelp.db.Queryable();
+ if (LocalFile.Config.IsMx)
+ shelvesInDbQueryable = shelvesInDbQueryable.Where(t => t.GroupName == LocalFile.Config.GroupName);
+ var shelvesInDb = shelvesInDbQueryable.ToList();
foreach (var shelfInDb in shelvesInDb)
{
Shelves.Add(InitShelf(shelfInDb));
diff --git a/WCS.BLL/Manager/WarningManager.cs b/WCS.BLL/Manager/WarningManager.cs
index ab69ca2..b8fafe7 100644
--- a/WCS.BLL/Manager/WarningManager.cs
+++ b/WCS.BLL/Manager/WarningManager.cs
@@ -139,7 +139,6 @@ namespace WCS.BLL.Manager
public static void SolveLoss(WebSocketMessageModel warning)
{
#region 【后台】丢失的数据处理
-
try
{
//获取库位
@@ -164,6 +163,12 @@ namespace WCS.BLL.Manager
StoreId = storeInfo.Id,
StoreInfo = storeInfo,
+ R = storeInfo.R,
+ C = storeInfo.C,
+ Wei = storeInfo.Wei,
+ BigShelfCode = storeInfo.BigShelfCode,
+ GroupName = storeInfo.GroupName,
+
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
@@ -174,9 +179,29 @@ namespace WCS.BLL.Manager
MatSupplier = inventoryDetail.MatSupplier,
Direction = DirectionEnum.丢失,
+ OperateUser = warning.SolvedUser,
};
DbHelp.db.Insertable(inOutRecord).ExecuteCommand();
DbHelp.db.Deleteable(inventoryDetail).ExecuteCommand();
+
+ #region 如果是出库 删除正在出库缓存的数据
+ if (warning.WarningType == WarningTypeEnum.出库自检丢失)
+ {
+ //清掉需要出库的缓存
+ var shelf = ShelfManager.Shelves
+ .Where(t => t.ShelfId == warning.ShelfId)
+ .FirstOrDefault();
+ if (shelf != null)
+ {
+ var smartShelf = shelf as SmartShelf;
+ if (smartShelf != null)
+ {
+ smartShelf.CurrentOutStoreMatSNs.RemoveAll(t => t == inventoryDetail.MatSN);
+ //TODO 如何保证丢失的继续进行
+ }
+ }
+ }
+ #endregion
}
DbHelp.db.CommitTran();
}
diff --git a/WCS.BLL/Manager/WebSoceketManager.cs b/WCS.BLL/Manager/WebSoceketManager.cs
index 423ee15..540bcee 100644
--- a/WCS.BLL/Manager/WebSoceketManager.cs
+++ b/WCS.BLL/Manager/WebSoceketManager.cs
@@ -32,7 +32,13 @@ namespace WCS.BLL.Manager
.UseAutoPong();//当收到ping报文时自动回应pong
a.Add();//自定义插件。
}));
-
+ //客户端成功连接
+ service.Connected = (client, e) =>
+ {
+ Logs.Write("[WebSocket]" + client.GetIPPort() + "成功连接!", LogsType.StartBoot);
+ Console.WriteLine("[WebSocket]" + client.GetIPPort() +"成功连接!");
+ return EasyTask.CompletedTask;
+ };
service.Start();
Console.WriteLine("【启动WebSocket】结束");
Logs.Write("【启动WebSocket】结束", LogsType.StartBoot);
diff --git a/WCS.BLL/Services/IService/IMatInventoryDetailService.cs b/WCS.BLL/Services/IService/IMatInventoryDetailService.cs
index 87024f8..55e6e55 100644
--- a/WCS.BLL/Services/IService/IMatInventoryDetailService.cs
+++ b/WCS.BLL/Services/IService/IMatInventoryDetailService.cs
@@ -15,5 +15,7 @@ namespace WCS.BLL.Services.IService
public Task> exportMatInventoryDetail(GetMatInventoryDetailRequest request);
public Task>> getMatInventorySummary(GetMatInventorySummaryRequest request);
+
+ public Task> compareMatInventoryDetail(CompareMatInventoryDetailRequest request);
}
}
diff --git a/WCS.BLL/Services/Service/InstoreService.cs b/WCS.BLL/Services/Service/InstoreService.cs
index 96e37ea..18aeb4b 100644
--- a/WCS.BLL/Services/Service/InstoreService.cs
+++ b/WCS.BLL/Services/Service/InstoreService.cs
@@ -13,6 +13,7 @@ using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.InOutRecord;
+using WCS.Model.ApiModel.MXBackgroundThread;
namespace WCS.BLL.Services.Service
{
@@ -180,7 +181,7 @@ namespace WCS.BLL.Services.Service
materialSpec = data.materialSpec,
batchNo = data.batchNo,
supplier = "",
- customer = data.materialBar,
+ customer = "",
InstoreUser = request.UserName
};
@@ -207,6 +208,47 @@ namespace WCS.BLL.Services.Service
else if (Result != null && Result.Code == 200 && Result.Data == null)
{
//Mes系统中未获取到物料信息
+
+ //简单校验看是否满足海康物料
+ //海康物料 只扫了外箱码 未扫条码
+ if ((request.MatSn.Length == 54 || request.MatSn.Length == 56) && !request.MatSn.Contains("\\") && !request.MatSn.Contains("/"))
+ {
+
+ if (!request.SingleLightIn && shelf != null)
+ shelf.InStoreData = new MatInfoResponse()
+ {
+ materialBar = request.MatSn,
+ materialCode = "暂时未知",
+ materialName = "暂时未知",
+ materialQty = 0,
+ materialSpec = "暂时未知",
+ batchNo = "暂时未知",
+ supplier = "",
+ customer = "",
+
+ InstoreUser = request.UserName
+ };
+
+ var matInfo = new MatInfo()
+ {
+ MatSn = request.MatSn,
+ MatCode = "暂时未知",
+ MatName = "暂时未知",
+ MatBatch = "暂时未知",
+ MatQty = 0,
+ MatSpec = "暂时未知",
+ MatSupplier = "",
+ MatCustomer = "",
+ };
+
+ return new ResponseCommon()
+ {
+ Code = 200,
+ Data = matInfo,
+ Message = "success"
+ };
+ }
+
return new ResponseCommon()
{
Code = 201,
diff --git a/WCS.BLL/Services/Service/MatInventoryDetailService.cs b/WCS.BLL/Services/Service/MatInventoryDetailService.cs
index c8bab98..5896341 100644
--- a/WCS.BLL/Services/Service/MatInventoryDetailService.cs
+++ b/WCS.BLL/Services/Service/MatInventoryDetailService.cs
@@ -6,6 +6,7 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TouchSocket.Core;
+using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.Services.IService;
using WCS.DAL.Db;
@@ -149,5 +150,48 @@ namespace WCS.BLL.Services.Service
Data = inventortyDetails
};
}
+
+ public async Task> compareMatInventoryDetail(CompareMatInventoryDetailRequest request)
+ {
+ try
+ {
+ //查询 本分组中 是否含有所传SN的物料
+ var recordsQueryable = DbHelp.db.Queryable()
+ .Where(t => request.MatSns.Contains(t.MatSN))
+ .OrderBy(t => t.MatCode)
+ .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.StoreInfo.GroupName == LocalFile.Config.GroupName);
+ var totalCount = await recordsQueryable.CountAsync();
+ var records = await recordsQueryable.ToListAsync();
+ //生成序号 选中
+ for (int i = 0; i < records.Count; i++)
+ {
+ records[i].RowNumber = i + 1;
+ records[i].IsSelected = true;
+ }
+ return new PageQueryResponse()
+ {
+ Code = 200,
+ Message = $"success",
+ Data = new PageQueryResponseData()
+ {
+ TotalCount = totalCount,
+ Count = records.Count,
+ Lists = records.ToList()
+ }
+ };
+ }
+ catch
+ {
+ return new PageQueryResponse()
+ {
+ Code = 200,
+ Message = $"success",
+ Data = new PageQueryResponseData()
+ {
+ Lists = new List()
+ }
+ };
+ }
+ }
}
}
diff --git a/WCS.BLL/Services/Service/OutstoreService.cs b/WCS.BLL/Services/Service/OutstoreService.cs
index 14cbeb6..32b065b 100644
--- a/WCS.BLL/Services/Service/OutstoreService.cs
+++ b/WCS.BLL/Services/Service/OutstoreService.cs
@@ -1,4 +1,5 @@
-using SqlSugar;
+using Microsoft.Data.SqlClient;
+using SqlSugar;
using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.Manager;
@@ -154,103 +155,262 @@ namespace WCS.BLL.Services.Service
Message = "出库单据同步失败:缺少物料明细!"
};
}
- //库存有无校验 & 库存已锁校验
- try
+ //标准版逻辑-库存有无校验 & 库存已锁校验
+ if (!LocalFile.Config.IsMx)
{
- await DbHelp.db.BeginTranAsync();
- var inventoryDetails = await DbHelp.db.Queryable()
- .Where(t => request.SnList.Contains(t.MatSN))
- .TranLock(DbLockType.Wait)
- .ToListAsync();
- if (inventoryDetails.Count < request.SnList.Count)//库存的物料少于需求的物料数量
+ try
{
- var existsSns = inventoryDetails.Select(t => t.MatSN).ToList();
- request.SnList.RemoveAll(t => existsSns.Contains(t));
- await DbHelp.db.RollbackTranAsync();
- //返回提示哪些物料库存不存在
+ await DbHelp.db.BeginTranAsync();
+ var inventoryDetails = await DbHelp.db.Queryable()
+ .Where(t => request.SnList.Contains(t.MatSN))
+ .TranLock(DbLockType.Wait)
+ .ToListAsync();
+ if (inventoryDetails.Count < request.SnList.Count)//库存的物料少于需求的物料数量
+ {
+ var existsSns = inventoryDetails.Select(t => t.MatSN).ToList();
+ request.SnList.RemoveAll(t => existsSns.Contains(t));
+ await DbHelp.db.RollbackTranAsync();
+ //返回提示哪些物料库存不存在
+ return new ResponseCommon()
+ {
+ Code = 201,
+ Message = "出库单据同步失败:存在物料不在库存中!",
+ Data = request.SnList
+
+ };
+ }
+ else if (inventoryDetails.Where(t => t.IsLocked).Any())
+ {
+ await DbHelp.db.RollbackTranAsync();
+ //返回提示哪些物料库存已被锁定
+ return new ResponseCommon()
+ {
+ Code = 201,
+ Message = "出库单据同步失败:存在物料被锁定!",
+ Data = inventoryDetails.Where(t => t.IsLocked).Select(t => t.MatSN).ToList()
+ };
+ }
+
+ #region 保存数据
+
+ //锁库存
+ inventoryDetails.ForEach(t =>
+ {
+ t.IsLocked = true;
+ });
+ var lockTask = DbHelp.db.Updateable(inventoryDetails).ExecuteCommandAsync();
+
+ //保存数据
+ var order = new OutOrder()
+ {
+ OrderNumber = request.OrderNumber,
+ OrderSource = request.OrderSource,
+ OrderType = request.OrderType,
+ SyncType = SyncTypeEnum.ByMatSn,
+ CreateUser = request.UserName,
+ };
+ order.Id = await DbHelp.db.Insertable(order).ExecuteReturnIdentityAsync();
+
+ //通过库存数据保存出库物料明细表
+ var matDetailTasks = inventoryDetails.Select(async t =>
+ {
+ var orderMatDetail = new OutOrderMatDetail()
+ {
+ OrderId = order.Id,
+ OrderNumber = order.OrderNumber,
+ InventoryDetailId = t.Id,
+ StoreId = t.StoreId,
+ StoreCode = t.StoreCode,
+ MatSN = t.MatSN,
+ MatCode = t.MatCode,
+ MatName = t.MatName,
+ MatSpec = t.MatSpec,
+ MatBatch = t.MatBatch,
+ MatQty = t.MatQty,
+ MatSupplier = t.MatSupplier,
+ MatCustomer = t.MatCustomer,
+ CreateUser = request.UserName
+ };
+ await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync();
+ }).ToList();
+
+ await lockTask;
+ await Task.WhenAll(matDetailTasks);
+
+ await DbHelp.db.CommitTranAsync();
return new ResponseCommon()
{
- Code = 201,
- Message = "出库单据同步失败:存在物料不在库存中!",
- Data = request.SnList
-
+ Code = 200,
+ Message = $"出库单据同步成功!\r\n出库单据号为{request.OrderNumber}",
+ Data = order.Id
};
+ #endregion
}
- else if (inventoryDetails.Where(t => t.IsLocked).Any())
+ catch (Exception ex)
{
await DbHelp.db.RollbackTranAsync();
- //返回提示哪些物料库存已被锁定
- return new ResponseCommon()
+ return new ResponseBase()
{
Code = 201,
- Message = "出库单据同步失败:存在物料被锁定!",
- Data = inventoryDetails.Where(t => t.IsLocked).Select(t => t.MatSN).ToList()
+ Message = $"出库单据同步失败:{ex.Message}"
};
}
-
- #region 保存数据
-
- //锁库存
- inventoryDetails.ForEach(t =>
- {
- t.IsLocked = true;
- });
- var lockTask = DbHelp.db.Updateable(inventoryDetails).ExecuteCommandAsync();
-
- //保存数据
- var order = new OutOrder()
- {
- OrderNumber = request.OrderNumber,
- OrderSource = request.OrderSource,
- OrderType = request.OrderType,
- SyncType = SyncTypeEnum.ByMatSn,
- CreateUser = request.UserName,
- };
- order.Id = await DbHelp.db.Insertable(order).ExecuteReturnIdentityAsync();
-
- //通过库存数据保存出库物料明细表
- var matDetailTasks = inventoryDetails.Select(async t =>
- {
- var orderMatDetail = new OutOrderMatDetail()
- {
- OrderId = order.Id,
- OrderNumber = order.OrderNumber,
- InventoryDetailId = t.Id,
- StoreId = t.StoreId,
- StoreCode = t.StoreCode,
- MatSN = t.MatSN,
- MatCode = t.MatCode,
- MatName = t.MatName,
- MatSpec = t.MatSpec,
- MatBatch = t.MatBatch,
- MatQty = t.MatQty,
- MatSupplier = t.MatSupplier,
- MatCustomer = t.MatCustomer,
- CreateUser = request.UserName
- };
- await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync();
- }).ToList();
-
- await lockTask;
- await Task.WhenAll(matDetailTasks);
-
- await DbHelp.db.CommitTranAsync();
- return new ResponseCommon()
- {
- Code = 200,
- Message = $"出库单据同步成功!\r\n出库单据号为{request.OrderNumber}",
- Data = order.Id
- };
- #endregion
}
- catch (Exception ex)
+ //盟讯公司逻辑 不锁库存 直接保存数据/清除未发送的
+ else
{
- await DbHelp.db.RollbackTranAsync();
- return new ResponseBase()
+ try
{
- Code = 201,
- Message = $"出库单据同步失败:{ex.Message}"
- };
+ DbHelp.db.BeginTran();
+ //1. 获取库存物料明细
+ var inventoryDetails = await DbHelp.db.Queryable()
+ .Where(t => request.SnList.Contains(t.MatSN))
+ .ToListAsync();
+ if (inventoryDetails == null || inventoryDetails.Count == 0)
+ {
+ return new ResponseCommon()
+ {
+ Code = 201,
+ Message = "保存出库单失败!请重试!",
+ Data = request.SnList
+ };
+ }
+ //2. 先获取对应单号是否已经保存
+ var outOrder = DbHelp.db.Queryable()
+ .Where(t => t.OrderNumber == request.OrderNumber)
+ .Where(t => t.GroupName == LocalFile.Config.GroupName)
+ .First();
+ //数据库中没有才添加
+ if (outOrder == null)
+ {
+ //OutOrder
+ outOrder = new OutOrder()
+ {
+ OrderNumber = request.OrderNumber,
+ OutOrderExeStatus = OutOrderExeStatus.开始发料,
+ OrderSource = "WCS前端",
+ SyncType = SyncTypeEnum.ByMatSn,
+ ShelfTypeName = "智能货架",
+ ShelfTypeId = 0,
+ GroupName = LocalFile.Config.GroupName,
+ };
+ outOrder.Id = await DbHelp.db.Insertable(outOrder).ExecuteReturnIdentityAsync();
+ outOrder = await DbHelp.db.Queryable().Where(t => t.OrderNumber == request.OrderNumber)
+ .Where(t => t.Id == outOrder.Id)
+ .FirstAsync();
+ //保存单据失败了
+ if (outOrder == null)
+ return new ResponseCommon()
+ {
+ Code = 201,
+ Message = "保存出库单失败!保存Order失败!",
+ Data = request.SnList
+ };
+
+ //出库物料明细
+ foreach (var item in inventoryDetails)
+ {
+ var orderMatDetail = new OutOrderMatDetail()
+ {
+ OrderId = outOrder.Id,
+ OrderNumber = outOrder.OrderNumber,
+ InventoryDetailId = item.Id,
+ StoreId = item.StoreId,
+ StoreCode = item.StoreCode,
+ MatSN = item.MatSN,
+ MatCode = item.MatCode,
+ MatName = item.MatName,
+ MatSpec = item.MatSpec,
+ MatBatch = item.MatBatch,
+ MatQty = item.MatQty,
+ MatSupplier = item.MatSupplier,
+ MatCustomer = item.MatCustomer,
+ CreateUser = request.UserName
+ };
+ await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync();
+ }
+ DbHelp.db.CommitTran();
+ }
+ //数据库已有该Order
+ else
+ {
+ outOrder.CreateTime = DateTime.Now;
+ DbHelp.db.Updateable(outOrder).ExecuteCommand();
+ //删除未出库的
+ var outOrderDetails = DbHelp.db.Deleteable()
+ .Where(t => t.OrderId == outOrder.Id)
+ .Where(t => t.IsSended == false)
+ .ExecuteCommand();
+ //当前已出库的 //已出库的也不在库存中了 应该查询不到了
+ //避免影响效率 就不查重了
+ foreach (var item in inventoryDetails)
+ {
+ var orderMatDetail = new OutOrderMatDetail()
+ {
+ OrderId = outOrder.Id,
+ OrderNumber = outOrder.OrderNumber,
+ InventoryDetailId = item.Id,
+ StoreId = item.StoreId,
+ StoreCode = item.StoreCode,
+ MatSN = item.MatSN,
+ MatCode = item.MatCode,
+ MatName = item.MatName,
+ MatSpec = item.MatSpec,
+ MatBatch = item.MatBatch,
+ MatQty = item.MatQty,
+ MatSupplier = item.MatSupplier,
+ MatCustomer = item.MatCustomer,
+ CreateUser = request.UserName
+ };
+ await DbHelp.db.Insertable(orderMatDetail).ExecuteCommandAsync();
+ }
+ DbHelp.db.CommitTran();
+
+ //更新订单状态
+ Task.Run(() =>
+ {
+ if (outOrder != null)
+ {
+ #region 物料明细表是否已发完
+ var orderMatDetails = DbHelp.db.Queryable()
+ .Where(t => t.OrderId == outOrder.Id)
+ .ToList();
+ var isExistNoSendMat = orderMatDetails.Where(t => t.IsSended == false)
+ .Any();
+ if (isExistNoSendMat)
+ {
+ outOrder.OrderStatus = OutOrderStatus.部分发料;
+ }
+ else
+ {
+ outOrder.OrderStatus = OutOrderStatus.全部发料;
+ outOrder.OutOrderExeStatus = OutOrderExeStatus.发料完成;
+ }
+ #endregion
+ DbHelp.db.Updateable(outOrder).ExecuteCommand();
+ }
+ });
+ }
+ return new ResponseCommon()
+ {
+ Code = 200,
+ Message = $"Success",
+ Data = request.SnList
+ };
+
+ }
+ catch (Exception ex)
+ {
+ DbHelp.db.RollbackTran();
+ Logs.Write($"同步出库单据发生异常{ex.Message}", LogsType.Info);
+ return new ResponseCommon()
+ {
+ Code = 201,
+ Message = $"保存出库单失败!{ex.Message}!",
+ Data = request.SnList
+ };
+ }
+
}
}
@@ -887,7 +1047,7 @@ namespace WCS.BLL.Services.Service
t.GoOutOutstore();
});
-
+
return new ResponseCommon()
{
diff --git a/WCS.BLL/Services/Service/StockTakingService.cs b/WCS.BLL/Services/Service/StockTakingService.cs
index c71eb2b..4d47e00 100644
--- a/WCS.BLL/Services/Service/StockTakingService.cs
+++ b/WCS.BLL/Services/Service/StockTakingService.cs
@@ -941,6 +941,12 @@ namespace WCS.BLL.Services.Service
StoreCode = inventoryDetail.StoreCode,
StoreId = inventoryDetail.StoreId,
+ R = inventoryDetail.R,
+ C = inventoryDetail.C,
+ Wei = inventoryDetail.Wei,
+ BigShelfCode = inventoryDetail.BigShelfCode,
+ GroupName = inventoryDetail.GroupName,
+
MatSN = inventoryDetail.MatSN,
MatCode = inventoryDetail.MatCode,
MatName = inventoryDetail.MatName,
diff --git a/WCS.BLL/Services/Service/StoreInfoService.cs b/WCS.BLL/Services/Service/StoreInfoService.cs
index aef3f20..a05038e 100644
--- a/WCS.BLL/Services/Service/StoreInfoService.cs
+++ b/WCS.BLL/Services/Service/StoreInfoService.cs
@@ -5,7 +5,9 @@ using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TouchSocket.Core;
+using WCS.BLL.Config;
using WCS.BLL.DbModels;
+using WCS.BLL.Manager;
using WCS.BLL.Services.IService;
using WCS.DAL;
using WCS.DAL.Db;
@@ -107,7 +109,7 @@ namespace WCS.BLL.Services.Service
shelfnfo.ClientIp = request.ShelfInfo.ClientIp;
shelfnfo.GroupName = request.ShelfInfo.GroupName;
shelfnfo.IsBind = request.ShelfInfo.IsBind;
- shelfnfo.BindShelfCode = request.ShelfInfo.BindShelfCode;
+ shelfnfo.BigShelfCode = request.ShelfInfo.BigShelfCode;
var rowNum = await DbHelp.db.Updateable(shelfnfo).ExecuteCommandAsync();
if (rowNum == 0)
@@ -154,7 +156,7 @@ namespace WCS.BLL.Services.Service
ClientIp = request.ShelfInfo.ClientIp,
GroupName = request.ShelfInfo.GroupName,
IsBind = request.ShelfInfo.IsBind,
- BindShelfCode = request.ShelfInfo.BindShelfCode,
+ BigShelfCode = request.ShelfInfo.BigShelfCode,
};
var rowNum = await DbHelp.db.Insertable(newShelfInfo).ExecuteCommandAsync();
if (rowNum == 0)
@@ -243,29 +245,36 @@ namespace WCS.BLL.Services.Service
///
public async Task> GenerateStoreInfo()
{
- var shelfInfo = await DbHelp.db.Queryable().Where(t => t.ShelfCode == "C04-1").FirstAsync();
- var ModuleInfos = await DbHelp.db.Queryable().Where(t => t.ShelfId == shelfInfo.Id).ToListAsync();
- ModuleInfos.ForEach(moduleInfo =>
+ var shelfInfos = DbHelp.db.Queryable().ToList();
+ foreach (var shelfInfo in shelfInfos)
{
- for (int i = 1; i <= moduleInfo.LightCount; i++)
+ var ModuleInfos = await DbHelp.db.Queryable().Where(t => t.ShelfId == shelfInfo.Id).ToListAsync();
+ ModuleInfos.ForEach(moduleInfo =>
{
- var storeInfo = new StoreInfo()
+ for (int i = 1; i <= moduleInfo.LightCount; i++)
{
- StoreCode = moduleInfo.ModuleCode + "-" + i.ToString(),
- ModuleId = moduleInfo.Id,
- ModuleCode = moduleInfo.ModuleCode,
- ShelfId = shelfInfo.Id,
- ShelfCode = shelfInfo.ShelfCode,
- BoardId = moduleInfo.BoardId,
- LightNumber = i,
- Priority = 1,
- CurrentMatSn = string.Empty,
- };
- DbHelp.db.Insertable(storeInfo).ExecuteCommand();
-
- }
- });
-
+ var storeInfo = new StoreInfo()
+ {
+ StoreCode = moduleInfo.ModuleCode + "-" + i.ToString(),
+ ShelfTypeId = 1,
+ ModuleId = moduleInfo.Id,
+ ModuleCode = moduleInfo.ModuleCode,
+ ShelfId = shelfInfo.Id,
+ ShelfCode = shelfInfo.ShelfCode,
+ BoardId = moduleInfo.BoardId,
+ LightNumber = i,
+ Priority = 1,
+ CurrentMatSn = string.Empty,
+ BigShelfCode = moduleInfo.Bigshelfcode,
+ R = moduleInfo.R,
+ C = moduleInfo.C,
+ Wei = i.ToString(),
+ GroupName = moduleInfo.GroupName,
+ };
+ DbHelp.db.Insertable(storeInfo).ExecuteCommand();
+ }
+ });
+ }
return new ResponseCommon
public bool IsAdmin { get; set; }
+
+ /////
+ ///// 是否是工程研发
+ /////
+ //[SugarColumn(ColumnName = "IsGCYF", IsNullable = true, ColumnDescription = "是否是工程研发人员")]
+ public bool IsGCYF { get; set; } = false;
+
///
/// 创建时间
///
@@ -52,7 +59,7 @@ namespace WCS.DAL.Db.AuthDb
///
/// 角色
///
- [SugarTable("Role")]
+ [SugarTable("wcs_role")]
public class RoleBase
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
diff --git a/WCS.DAL/Db/DbHelp.cs b/WCS.DAL/Db/DbHelp.cs
index d8a842f..180b104 100644
--- a/WCS.DAL/Db/DbHelp.cs
+++ b/WCS.DAL/Db/DbHelp.cs
@@ -1,6 +1,7 @@
using SqlSugar;
using System;
using System.Collections.Generic;
+using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -21,11 +22,8 @@ namespace WCS.DAL.Db
{
db.Aop.OnError = ex =>
{
- //TO DO LOG
- //Logs.Write($@"{nameof(db)}{Environment.NewLine}SQL:{ex?.Sql}{Environment.NewLine}Parametres:{JsonConvert.SerializeObject(ex?.Parametres)}{Environment.NewLine}InnerException:{ex?.InnerException?.ToString()}{Environment.NewLine}Exception:{ex?.ToString()}{Environment.NewLine}", LogsType.DbErr);
};
});
-
///
/// 日志数据库
///
@@ -38,23 +36,7 @@ namespace WCS.DAL.Db
{
db.Aop.OnError = ex =>
{
- //TO DO LOG
- //Logs.Write($@"{nameof(dbAuth)}{Environment.NewLine}SQL:{ex?.Sql}{Environment.NewLine}Parametres:{JsonConvert.SerializeObject(ex?.Parametres)}{Environment.NewLine}InnerException:{ex?.InnerException?.ToString()}{Environment.NewLine}Exception:{ex?.ToString()}{Environment.NewLine}", LogsType.DbErr);
};
});
-
- public static void InitDb()
- {
- //#region 初始化业务数据库
- ////不存在创建数据库,存在不会创建
- //db.DbMaintenance.CreateDatabase();
- ////创建表根据实体类
- //db.CodeFirst.InitTables(typeof(ModuleInfo), typeof(ShelfInfo), typeof(StoreInfo));
- //#endregion
-
- //#region 初始化日志数据库
- //dbLog.DbMaintenance.CreateDatabase();
- //#endregion
- }
}
}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/ApiResult.cs b/WCS.Model/ApiModel/MXBackgroundThread/ApiResult.cs
new file mode 100644
index 0000000..ab61a70
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/ApiResult.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class ApiResult
+ {
+ ///
+ /// 处理结果 200成功
+ ///
+ public int code { get; set; }
+ ///
+ /// 处理消息
+ ///
+ public string message { get; set; }
+
+ }
+
+ public class ApiResult : ApiResult
+ {
+
+ ///
+ /// 数据
+ ///
+ public T data { get; set; }
+ }
+
+
+ public class ApiResultMsg
+ {
+ ///
+ /// 处理结果 200成功
+ ///
+ public int code { get; set; }
+ ///
+ /// 处理消息
+ ///
+ public string msg { get; set; }
+
+ }
+
+ public class ApiResultMsg : ApiResultMsg
+ {
+
+ ///
+ /// 数据
+ ///
+ public T data { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/BunkerOutRequest.cs b/WCS.Model/ApiModel/MXBackgroundThread/BunkerOutRequest.cs
new file mode 100644
index 0000000..96c75a3
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/BunkerOutRequest.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class BunkerOutRequest
+ {
+ public string materialBar { get; set; }
+ ///
+ ///
+ ///
+ public int outType { get; set; } = 0;
+ ///
+ ///
+ ///
+ public string pickBillNumber { get; set; }
+ ///
+ ///
+ ///
+ public int qty { get; set; } = 0;
+ ///
+ ///
+ ///
+ public int warehouseType { get; set; } = 20;
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/InputStockInRequest.cs b/WCS.Model/ApiModel/MXBackgroundThread/InputStockInRequest.cs
new file mode 100644
index 0000000..daa5a0f
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/InputStockInRequest.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class InputStockInRequest
+ {
+ public string materialBar { get; set; }
+
+ public string shelfCode { get; set; }
+
+ public string shelfX { get; set; }
+
+ public string shelfY { get; set; }
+
+ public string shelfZ { get; set; }
+
+ public string inUser { get; set; } = string.Empty;
+
+ public string inTime { get; set; }
+
+ public int warehouseType { get; set; } = 20;
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/MXMesResponseCommon.cs b/WCS.Model/ApiModel/MXBackgroundThread/MXMesResponseCommon.cs
new file mode 100644
index 0000000..c600841
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/MXMesResponseCommon.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class MXMesResponseCommon
+ {
+ public int code { get; set; }
+ public string message { get; set; }
+ public string msg { get; set; }
+ public object data { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/PickOrderRequest.cs b/WCS.Model/ApiModel/MXBackgroundThread/PickOrderRequest.cs
new file mode 100644
index 0000000..de230df
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/PickOrderRequest.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class PickOrderRequest
+ {
+ public string orderProdNumber { get; set; }
+ public string orderWorkNumber { get; set; }
+ public string pickBillNumber { get; set; }
+ }
+
+ public class PickOrderResponse
+ {
+ ///
+ ///
+ ///
+ public int code { get; set; }
+ ///
+ ///
+ ///
+ public string msg { get; set; }
+ ///
+ ///
+ ///
+ public List data { get; set; }
+ }
+ public class PickOrder
+ {
+ public bool IsSelected { get; set; }
+ public int id { get; set; }
+ public string pickBillNumber { get; set; }
+ public string relationPickNumber { get; set; }
+ public string orderProdIds { get; set; }
+ public string orderProdNumbers { get; set; }
+ public string orderWorkIds { get; set; }
+ public string orderWorkNumbers { get; set; }
+ public string dictType { get; set; }
+ public string dictTypeStr
+ {
+ get
+ {
+ switch (dictType)
+ {
+ case "1":
+ return "生产领料";
+ default: return "其他";
+ }
+ }
+ }
+ public string dictStatus { get; set; }
+ public string dictStatusStr
+ {
+ get
+ {
+ switch (dictStatus)
+ {
+ case "15":
+ return "待领料";
+ case "10":
+ return "部分领料";
+ default: return dictStatus.ToString();
+ }
+ }
+ }
+ public string createdBy { get; set; }
+ public string createdDt { get; set; }
+ public string updatedBy { get; set; }
+ public string updatedDt { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/QueryByBar.cs b/WCS.Model/ApiModel/MXBackgroundThread/QueryByBar.cs
new file mode 100644
index 0000000..1a8ba81
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/QueryByBar.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class QueryBybarRequest
+ {
+ //条码
+ public string materialBar { get; set; }
+ }
+
+ public class InStoreDto
+ {
+ public string materialBar { get; set; }
+ ///
+ ///
+ ///
+ public string materialCode { get; set; }
+ ///
+ /// 有源蜂鸣器
+ ///
+ public string materialName { get; set; }
+ ///
+ /// TMB09A03/5X9电压3V
+ ///
+ public string materialSpec { get; set; }
+
+ public double materialQty { get; set; }
+
+ public string batchNo { get; set; }
+ }
+
+ public class QueryBybarResponse
+ {
+ ///
+ ///
+ ///
+ public int code { get; set; }
+ ///
+ ///
+ ///
+ public string message { get; set; }
+ ///
+ ///
+ ///
+ public List data { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/RecommendedBarCodeRequest.cs b/WCS.Model/ApiModel/MXBackgroundThread/RecommendedBarCodeRequest.cs
new file mode 100644
index 0000000..d5e9d58
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/RecommendedBarCodeRequest.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class RecommendedBarCodeRequest
+ {
+ public string pickBillNumber { get; set; }
+ public string warehouseCode { get; set; } = string.Empty;
+ public int warehouseType { get; set; } = 10;
+
+ }
+
+ public class FistPushRecommendedBarCodeRequest : RecommendedBarCodeRequest
+ {
+ public string reportSide { get; set; } = null;
+ }
+
+ public class RecommendedBarCodeResponse
+ {
+ ///
+ ///
+ ///
+ public int code { get; set; }
+ ///
+ ///
+ ///
+ public string message { get; set; }
+ ///
+ ///
+ ///
+ public List data { get; set; }
+ }
+
+ public class PickOrderDetailGetReturnList
+ {
+ public bool IsInstore { get; set; }
+ public int id { get; set; }
+ public string materialBar { get; set; }
+ public string materialId { get; set; }
+ public string materialCode { get; set; }
+ public string materialName { get; set; }
+ public string materialSpec { get; set; }
+ public string unitOfMeasure { get; set; }
+ public string batchNo { get; set; }
+ public double qty { get; set; }
+ public string warehouseId { get; set; }
+ public string warehouseCode { get; set; }
+ public string warehouseName { get; set; }
+ public string shelfCode { get; set; }
+ public string shelfX { get; set; }
+ public string shelfY { get; set; }
+ public string shelfZ { get; set; }
+ public string inUser { get; set; }
+ public string inTime { get; set; }
+ public string outUser { get; set; }
+ public string outTime { get; set; }
+ public string createdBy { get; set; }
+ public string createdDt { get; set; }
+ public string updatedBy { get; set; }
+ public string updatedDt { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MXBackgroundThread/SelectMaterialBarDto.cs b/WCS.Model/ApiModel/MXBackgroundThread/SelectMaterialBarDto.cs
new file mode 100644
index 0000000..2cb6edf
--- /dev/null
+++ b/WCS.Model/ApiModel/MXBackgroundThread/SelectMaterialBarDto.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MXBackgroundThread
+{
+ public class SelectMaterialBarDto
+ {
+ public string materialBar { get; set; }
+
+ public string warehouseCode { get; set; }
+
+ public string warehouseName { get; set; }
+ }
+
+ public class SelectMaterialBarResponse
+ {
+ ///
+ ///
+ ///
+ public int code { get; set; }
+ ///
+ ///
+ ///
+ public string msg { get; set; }
+ ///
+ ///
+ ///
+ public SelectMaterialBarDto data { get; set; }
+ }
+}
diff --git a/WCS.Model/ApiModel/MatInventoryDetail/CompareMatInventoryDetailRequest.cs b/WCS.Model/ApiModel/MatInventoryDetail/CompareMatInventoryDetailRequest.cs
new file mode 100644
index 0000000..01cca12
--- /dev/null
+++ b/WCS.Model/ApiModel/MatInventoryDetail/CompareMatInventoryDetailRequest.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WCS.Model.ApiModel.MatInventoryDetail
+{
+ public class CompareMatInventoryDetailRequest : RequestBase
+ {
+ public List MatSns { get; set; }
+
+ public string GroupName { get; set; }
+
+ }
+}
diff --git a/WCS.Model/ApiModel/StoreInfo/ModuleInfoModel.cs b/WCS.Model/ApiModel/StoreInfo/ModuleInfoModel.cs
index 1213eb9..4cff369 100644
--- a/WCS.Model/ApiModel/StoreInfo/ModuleInfoModel.cs
+++ b/WCS.Model/ApiModel/StoreInfo/ModuleInfoModel.cs
@@ -24,7 +24,7 @@ namespace WCS.Model.ApiModel.StoreInfo
public string C { get; set; }
- public string? Bigshelfcode { get; set; }
+ public string? BigShelfCode { get; set; }
public bool IsEnable { get; set; }
diff --git a/WCS.Model/ApiModel/StoreInfo/ShelfInfoModel.cs b/WCS.Model/ApiModel/StoreInfo/ShelfInfoModel.cs
index eb2a6af..feb3e4f 100644
--- a/WCS.Model/ApiModel/StoreInfo/ShelfInfoModel.cs
+++ b/WCS.Model/ApiModel/StoreInfo/ShelfInfoModel.cs
@@ -49,7 +49,7 @@ namespace WCS.Model.ApiModel.StoreInfo
public bool IsBind { get; set; }
- public string BindShelfCode { get; set; } = string.Empty;
+ public string BigShelfCode { get; set; }
public int RowNumber { get; set; }
diff --git a/WCS.Model/WebSocketModel/SolveWarningRequesr.cs b/WCS.Model/WebSocketModel/SolveWarningRequesr.cs
index 94a718d..7b97545 100644
--- a/WCS.Model/WebSocketModel/SolveWarningRequesr.cs
+++ b/WCS.Model/WebSocketModel/SolveWarningRequesr.cs
@@ -4,7 +4,7 @@ using System.Text;
namespace WCS.Model.WebSocketModel
{
- public class SolveWarningRequest
+ public class SolveWarningRequest : RequestBase
{
public Guid Guid { get; set; }
public SolveTypeEnum SolveType { get; set; }
diff --git a/WCS.Model/WebSocketModel/WebSocketMessageModel.cs b/WCS.Model/WebSocketModel/WebSocketMessageModel.cs
index 40e4f7f..4838fcf 100644
--- a/WCS.Model/WebSocketModel/WebSocketMessageModel.cs
+++ b/WCS.Model/WebSocketModel/WebSocketMessageModel.cs
@@ -25,6 +25,12 @@ namespace WCS.Model.WebSocketModel
//恢复正常需要消除的报警guid
public List SolvedGuids { get; set; }
+
+
+ ///
+ /// 异常处理人
+ ///
+ public string SolvedUser { get; set; }
}
public enum WarningTypeEnum
diff --git a/WCS.WebApi/Controllers/FileDownLoadController.cs b/WCS.WebApi/Controllers/FileDownLoadController.cs
index 028b6be..83bfd85 100644
--- a/WCS.WebApi/Controllers/FileDownLoadController.cs
+++ b/WCS.WebApi/Controllers/FileDownLoadController.cs
@@ -44,7 +44,7 @@ namespace WCS.WebApi.Controllers
[HttpGet("getLatestAppName")]
public ResponseCommon getLatestAppName()
{
- string directoryPath = Path.Combine(Directory.GetCurrentDirectory(), $"Files");
+ string directoryPath = Path.Combine(AppContext.BaseDirectory, $"Files");
// 获取目录下的所有文件信息
FileInfo[] files = Directory.GetFiles(directoryPath, "*.APK")
diff --git a/WCS.WebApi/Controllers/MatInventoryDetailController.cs b/WCS.WebApi/Controllers/MatInventoryDetailController.cs
index b0e75e3..ad52277 100644
--- a/WCS.WebApi/Controllers/MatInventoryDetailController.cs
+++ b/WCS.WebApi/Controllers/MatInventoryDetailController.cs
@@ -86,5 +86,13 @@ namespace WCS.WebApi.Controllers
{
return await _matInventoryDetailService.getMatInventorySummary(request);
}
+
+ [Route("compareMatInventoryDetail")]
+ [HttpPost(Name = "compareMatInventoryDetail")]
+ public async Task compareMatInventoryDetail(CompareMatInventoryDetailRequest request)
+ {
+ return await _matInventoryDetailService.compareMatInventoryDetail(request);
+ }
+
}
}
diff --git a/WCS.WebApi/Program.cs b/WCS.WebApi/Program.cs
index a9af159..61af649 100644
--- a/WCS.WebApi/Program.cs
+++ b/WCS.WebApi/Program.cs
@@ -20,60 +20,76 @@ namespace WebApi
{
public static void Main(string[] args)
{
- //ʼwebsocket
- WebSoceketManager.InitWebSocket();
-
- //ʼݿ
- DbInit.InitDb();
-
- //ʼļ
- LocalFile.SaveConfig();
-
- //ʼTCP
- TCPClientManager.InitTcpClient();
-
- //ʼ
- ShelfManager.InitShelves();
-
-
- WarningManager.StartWarningMessageThread();
-
- var builder = WebApplication.CreateBuilder(args);
-
- // Add services to the container.
- builder.Services.AddControllers();
- // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
- builder.Services.AddEndpointsApiExplorer();
- builder.Services.AddSwaggerGen();
-
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
- //롢ɵõģʽ
- builder.Services.AddSingleton();
-
- var app = builder.Build();
-
- app.UseMiddleware();
- // Configure the HTTP request pipeline.
- if (app.Environment.IsDevelopment())
+ try
{
- app.UseSwagger();
- app.UseSwaggerUI();
- }
+ //ʼwebsocket
+ WebSoceketManager.InitWebSocket();
- app.UseAuthorization();
- app.MapControllers();
- app.Run("http://0.0.0.0:8888");//0.0.0.0ʾipv4
+ //ʼݿ
+ DbInit.InitDb();
+
+ //ʼļ
+ LocalFile.SaveConfig();
+
+ //ʼTCP
+ TCPClientManager.InitTcpClient();
+
+ //ʼܻϢ
+ ShelfManager.InitShelves();
+
+ //Ϣط߳
+ WarningManager.StartWarningMessageThread();
+
+ //Ѷ˾̨߳
+ if (LocalFile.Config.IsMx)
+ {
+ MXBackgroundThread.InitBackgroundThread();
+ var str = string.Empty;
+ //MXBackgroundThread.SendDingDingMsg("ɹ", new List { "104379" }, ref str);
+ }
+
+
+
+ var builder = WebApplication.CreateBuilder(args);
+ // Add services to the container.
+ builder.Services.AddControllers();
+ // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+ builder.Services.AddEndpointsApiExplorer();
+ builder.Services.AddSwaggerGen();
+
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ builder.Services.AddScoped();
+ //롢ɵõģʽ
+ builder.Services.AddSingleton();
+
+ var app = builder.Build();
+
+ app.UseMiddleware();
+ // Configure the HTTP request pipeline.
+ if (app.Environment.IsDevelopment())
+ {
+ app.UseSwagger();
+ app.UseSwaggerUI();
+ }
+
+ app.UseAuthorization();
+ app.MapControllers();
+ app.Run("http://0.0.0.0:8888");//0.0.0.0ʾipv4
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
}
}
}
diff --git a/WCS.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml b/WCS.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
index 36847ea..f5f22fe 100644
--- a/WCS.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
+++ b/WCS.WebApi/Properties/PublishProfiles/FolderProfile1.pubxml
@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
- false
+ true
false
true
Release
@@ -13,5 +13,11 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
bin\Release\net6.0\publish\
FileSystem
<_TargetId>Folder
+
+ net6.0
+ linux-x64
+ 118d453b-1693-4c00-8378-20ecbfcf2700
+ false
+ false
\ No newline at end of file
diff --git a/货架标准上位机/Api/ApiHelp.cs b/货架标准上位机/Api/ApiHelp.cs
index 99822fc..4abe7dd 100644
--- a/货架标准上位机/Api/ApiHelp.cs
+++ b/货架标准上位机/Api/ApiHelp.cs
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;
using WCS.Model;
+using WCS.Model.ApiModel.MXBackgroundThread;
namespace 货架标准上位机.Api
{
@@ -320,5 +321,100 @@ namespace 货架标准上位机.Api
return default(T);
}
}
+
+ ///
+ /// 调用接口-长延时(MX MES接口返回时间偶尔10秒+为保证业务能正常进行所以增加此接口)
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static ApiResult MXGetDataFromHttpLongWait(string data, string url, string httpMethod, bool isSaveLog = false)
+ {
+ Guid guid = Guid.NewGuid();
+ try
+ {
+ if (isSaveLog)
+ Logs.Write($"【{guid}】开始请求调用接口 url:{url} 请求方式:{httpMethod} 数据:{data}");
+ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+ request.Method = httpMethod;
+ request.ContentType = "application/json";
+ request.Timeout = 20000;
+ if (!string.IsNullOrEmpty(data))
+ {
+ string strContent = data; //参数data
+ using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
+ {
+ dataStream.Write(strContent);
+ dataStream.Close();
+ }
+ }
+
+ HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+ string encoding = response.ContentEncoding;
+ if (encoding == null || encoding.Length < 1)
+ {
+ encoding = "UTF-8"; //默认编码
+ }
+ StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
+ string retString = reader.ReadToEnd();
+ if (isSaveLog)
+ Logs.Write($"【{guid}】请求调用接口结束 返回数据为{retString}");
+ return JsonConvert.DeserializeObject>(retString);
+ }
+ catch (Exception ex)
+ {
+ Logs.Write($"【{guid}】请求调用遇到异常 异常信息为{ex.Message}");
+ return new ApiResult()
+ {
+ code = 500,
+ message = ex.Message,
+ };
+ }
+ }
+ public static ApiResult MXGetDataFromHttp(string data, string url, string httpMethod, bool isSaveLog = false)
+ {
+ Guid guid = Guid.NewGuid();
+ try
+ {
+ if (isSaveLog)
+ Logs.Write($"【{guid}】开始请求调用接口 url:{url} 请求方式:{httpMethod} 数据:{data}");
+ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+ request.Method = httpMethod;
+ request.ContentType = "application/json";
+ request.Timeout = 8000;
+ if (!string.IsNullOrEmpty(data))
+ {
+ string strContent = data; //参数data
+ using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
+ {
+ dataStream.Write(strContent);
+ dataStream.Close();
+ }
+ }
+ HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+ string encoding = response.ContentEncoding;
+ if (encoding == null || encoding.Length < 1)
+ {
+ encoding = "UTF-8"; //默认编码
+ }
+ StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
+ string retString = reader.ReadToEnd();
+ if (isSaveLog)
+ Logs.Write($"【{guid}】请求调用接口结束 返回数据为{retString}");
+ return JsonConvert.DeserializeObject>(retString);
+ }
+ catch (Exception ex)
+ {
+ Logs.Write($"【{guid}】请求调用遇到异常 异常信息为{ex.Message}");
+ return new ApiResult()
+ {
+ code = 500,
+ message = ex.Message,
+ };
+ }
+ }
}
}
diff --git a/货架标准上位机/App.xaml b/货架标准上位机/App.xaml
index 1640844..feac15d 100644
--- a/货架标准上位机/App.xaml
+++ b/货架标准上位机/App.xaml
@@ -2,7 +2,6 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:货架标准上位机"
- StartupUri="Views/MainWindows/MainWindow1.xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:hc="https://handyorg.github.io/handycontrol">
diff --git a/货架标准上位机/App.xaml.cs b/货架标准上位机/App.xaml.cs
index e7a4e99..02490c8 100644
--- a/货架标准上位机/App.xaml.cs
+++ b/货架标准上位机/App.xaml.cs
@@ -3,8 +3,10 @@ using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
+using System.Management.Instrumentation;
using System.Threading.Tasks;
using System.Windows;
+using System.Windows.Controls;
namespace 货架标准上位机
{
@@ -13,5 +15,20 @@ namespace 货架标准上位机
///
public partial class App : Application
{
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ base.OnStartup(e);
+
+ if (LocalFile.Config.IsMx)
+ {
+ MainWindow = new MXMainWindow();
+ }
+ else
+ {
+ MainWindow = new MainWindow1();
+ }
+ MainWindow.ShowDialog();
+
+ }
}
}
diff --git a/货架标准上位机/Models/JsConfig.cs b/货架标准上位机/Models/JsConfig.cs
index 95206fb..e13e763 100644
--- a/货架标准上位机/Models/JsConfig.cs
+++ b/货架标准上位机/Models/JsConfig.cs
@@ -45,6 +45,26 @@ namespace 货架标准上位机
/// 串口扫码枪延时
///
public int ScannerTimeOut { get; set; }
+
+ #region 盟讯公司配置
+ public bool IsMx { get; set; }
+ ///
+ ///MX-获取要料单接口地址
+ ///
+ public string GetPickOrderUrl { get; set; }
+ ///
+ ///MX-获取要料明细接口地址
+ ///
+ public string RecommendedBarCode { get; set; }
+ ///
+ ///MX-首盘发料明细接口地址
+ ///
+ public string FirstSendRecommendedBarCode { get; set; }
+ ///
+ ///MX-后续发料明细接口地址
+ ///
+ public string ElectronicSiloPush { get; set; }
+ #endregion
}
public class JsSysConfig
diff --git a/货架标准上位机/Resources/扫码枪结束入库二维码.png b/货架标准上位机/Resources/goOutInstore.png
similarity index 100%
rename from 货架标准上位机/Resources/扫码枪结束入库二维码.png
rename to 货架标准上位机/Resources/goOutInstore.png
diff --git a/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs
new file mode 100644
index 0000000..c343196
--- /dev/null
+++ b/货架标准上位机/ViewModels/MXViewModel/MXOutInventoryViewModel.cs
@@ -0,0 +1,305 @@
+using HandyControl.Controls;
+using HandyControl.Data;
+using MiniExcelLibs;
+using Ping9719.WpfEx.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data.SqlClient;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Security.Cryptography.X509Certificates;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Web.UI.WebControls;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using TouchSocket.Core;
+using WCS.Model;
+using WCS.Model.ApiModel.OutStore;
+using WCS.Model.ApiModel.Stocktaking;
+using 货架标准上位机.Api;
+using 货架标准上位机.ViewModel;
+
+namespace 货架标准上位机.ViewModel
+{
+ public class MXOutInventoryViewModel : BindableBase
+ {
+ public MXOutInventoryViewModel()
+ {
+ RefreshOutOrderList();
+ }
+
+ #region Property
+ private OutOrderModel selectedOutOrder;
+ public OutOrderModel SelectedOutOrder
+ {
+ get { return selectedOutOrder; }
+ set
+ {
+ SetProperty(ref selectedOutOrder, value);
+ if (selectedOutOrder != null)
+ {
+ SelectedOutOrderNumber = selectedOutOrder.OrderNumber;
+ RefreshDataGridItemSource();
+ }
+ else
+ {
+ DataGridItemSource?.Clear();
+ }
+ }
+ }
+
+ private string selectedOutOrderNumber;
+ public string SelectedOutOrderNumber
+ {
+ get => selectedOutOrderNumber;
+ set
+ {
+ SetProperty(ref selectedOutOrderNumber, value);
+ }
+ }
+
+
+ private ObservableCollection outOrderList;
+ public ObservableCollection OutOrderList
+ {
+ get => outOrderList;
+ set
+ {
+ SetProperty(ref outOrderList, value);
+ }
+ }
+
+ private ObservableCollection dataGridItemSource;
+ public ObservableCollection DataGridItemSource
+ {
+ get { return dataGridItemSource; }
+ set
+ {
+ SetProperty(ref dataGridItemSource, value);
+ RefreshCount();
+ }
+ }
+
+ //单据总盘数
+ private int totalPan;
+ public int TotalPan
+ {
+ get => totalPan; set
+ {
+ SetProperty(ref totalPan, value);
+ }
+ }
+
+ private int sendedPan;
+ public int SendedPan
+ {
+ get => sendedPan; set
+ {
+ SetProperty(ref sendedPan, value);
+ }
+ }
+
+ private string orderStatus;
+ public string OrderStatus
+ {
+ get { return orderStatus; }
+ set
+ {
+ SetProperty(ref orderStatus, value);
+ }
+ }
+
+ public void RefreshCount()
+ {
+ Task.Run(() =>
+ {
+ SendedPan = dataGridItemSource.Where(t => t.IsSended).Count();
+ TotalPan = dataGridItemSource.Count();
+ });
+ }
+ #endregion
+
+ #region Command
+ public ICommand BtnOutOrderCommand { get => new DelegateCommand(BtnOutOrder); }
+ public void BtnOutOrder()
+ {
+ var window = new MXOutOrderView();
+ window.Owner = Application.Current.MainWindow;
+ window.ShowDialog();
+ }
+
+
+ public ICommand BtnStartCommand { get => new DelegateCommand(BtnStart); }
+ public void BtnStart()
+ {
+ try
+ {
+ //判断是否选择单据
+ if (SelectedOutOrder == null)
+ {
+ Growl.Warning("未选择单据!");
+ return;
+ }
+
+ #region 调用接口开始出库
+ var body = new GetOutOrderDetailRequest()
+ {
+ OrderId = selectedOutOrder.Id,
+ OrderNumber = selectedOutOrder.OrderNumber,
+ UserName = LocalStatic.CurrentUser,
+ DeviceType = LocalFile.Config.DeviceType,
+ };
+ var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outStore/goInOutstore", body, "POST");
+ if (Result != null && Result.Code == 200)
+ {
+ Growl.Warning("已成功开始出库!");
+ RefreshDataGridItemSource();
+ }
+ else if (Result != null)
+ {
+ Growl.Warning(Result.Message);
+ }
+ else
+ {
+ Growl.Warning("调用接口失败!");
+ }
+ #endregion
+ }
+ catch (Exception ex)
+ {
+ Growl.Error("出现异常:" + ex.Message);
+ }
+ finally
+ {
+ }
+ }
+
+ public ICommand BtnPauseCommand { get => new DelegateCommand(BtnPause); }
+ public void BtnPause()
+ {
+ try
+ {
+ //判断是否选择单据
+ if (SelectedOutOrder == null)
+ {
+ Growl.Warning("未选择单据!");
+ return;
+ }
+ #region 调用接口结束出库
+ var body = new GetOutOrderDetailRequest()
+ {
+ OrderId = selectedOutOrder.Id,
+ OrderNumber = selectedOutOrder.OrderNumber,
+ UserName = LocalStatic.CurrentUser,
+ DeviceType = LocalFile.Config.DeviceType,
+ };
+ var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outStore/goOutOutstore", body, "POST");
+ if (Result != null && Result.Code == 200)
+ {
+ Growl.Warning("已成功结束出库!");
+ RefreshDataGridItemSource();
+ }
+ else if (Result != null)
+ {
+ Growl.Warning(Result.Message);
+ }
+ else
+ {
+ Growl.Warning("调用接口失败!");
+ }
+ #endregion
+ }
+ catch (Exception ex)
+ {
+ Growl.Error("出现异常:" + ex.Message);
+ }
+ finally
+ {
+ }
+ }
+
+ public void RefreshOutOrderList(string OrderNumber = "")
+ {
+ #region 调用接口获取发料单
+ try
+ {
+ var body = new GetOutOrderListByStatusRequest()
+ {
+ OrderExeStatus = new List() { OutOrderExeStatus.开始发料, OutOrderExeStatus.发料完成 }
+ };
+ var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "outstore/getOutOrderListByStatus", body, "POST");
+ if (Result != null && Result.Code == 200)
+ {
+ OutOrderList = new ObservableCollection(Result.Data.Lists);
+ if (!string.IsNullOrEmpty(OrderNumber))
+ {
+ SelectedOutOrder = OutOrderList.Where(t => t.OrderNumber == OrderNumber).FirstOrDefault();
+ }
+ }
+ else if (Result != null && !string.IsNullOrEmpty(Result.Message))
+ {
+ Growl.Warning(Result.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ Growl.Warning(ex.Message);
+ }
+ #endregion
+ }
+
+ public void RefreshDataGridItemSource()
+ {
+ if (SelectedOutOrder == null)
+ {
+ //选择的单据为空无法进行查询
+ return;
+ }
+ #region 调用接口获取出库单物料明细
+ Task.Run(() =>
+ {
+ var body = new GetOutOrderDetailRequest()
+ {
+ OrderId = selectedOutOrder.Id,
+ OrderNumber = selectedOutOrder.OrderNumber,
+ UserName = LocalStatic.CurrentUser,
+ DeviceType = LocalFile.Config.DeviceType,
+
+ };
+ var Result = ApiHelp.GetDataFromHttp>>(LocalFile.Config.ApiIpHost + "outStore/getOutOrderMatDetail", body, "POST");
+ if (Result != null && Result.Code == 200)
+ {
+ if (Result.Data.Count > 0)
+ {
+ DataGridItemSource = new ObservableCollection(Result.Data);
+ OrderStatus = Result.Message;
+ }
+ else
+ {
+ App.Current.Dispatcher.Invoke(() =>
+ {
+ DataGridItemSource?.Clear();
+ });
+ Growl.Warning("该单据未查询到发料明细!");
+ }
+ }
+ else if (Result != null)
+ {
+ Growl.Warning(Result.Message);
+ }
+ else
+ {
+ Growl.Warning("调用接口失败!");
+ }
+ });
+ #endregion
+ }
+ #endregion
+ }
+}
diff --git a/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs
new file mode 100644
index 0000000..c32319a
--- /dev/null
+++ b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs
@@ -0,0 +1,216 @@
+using HandyControl.Controls;
+using HandyControl.Data;
+using MiniExcelLibs;
+using Newtonsoft.Json;
+using Ping9719.WpfEx.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Input;
+using TouchSocket.Core;
+using System.Windows.Markup;
+using System.Security.Policy;
+using WCS.Model.ApiModel.MXBackgroundThread;
+using 货架标准上位机;
+using WCS.Model.ApiModel.MatInventoryDetail;
+using 货架标准上位机.Api;
+using System.Runtime.CompilerServices;
+using WCS.Model;
+
+namespace 货架标准上位机.ViewModel
+{
+ public class MXOutOrderDetailViewViewModel : BindableBase
+ {
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 是否是首盘发料
+ public MXOutOrderDetailViewViewModel(
+ string billNumber, string warehouseCode
+ , string orderProdNumbers, string orderWorkNumbers
+ , int isFirstSend = 0, string reportSide = null
+ )
+ {
+ BillNumber = billNumber;
+ OrderProdNumbers = orderProdNumbers;
+ OrderWorkNumbers = orderWorkNumbers;
+ WarehouseCode = warehouseCode;
+
+ Task.Run(() =>
+ {
+ var request = new RecommendedBarCodeRequest()
+ {
+ pickBillNumber = billNumber,
+ warehouseCode = warehouseCode,
+ warehouseType = 20
+ };
+ var requeststr = JsonConvert.SerializeObject(request);
+ var url = string.Empty;
+ if (isFirstSend == 0)
+ {
+ url = LocalFile.Config.RecommendedBarCode;
+ }
+ else if (isFirstSend == 1)
+ {
+ request = new FistPushRecommendedBarCodeRequest()
+ {
+ pickBillNumber = billNumber,
+ warehouseCode = warehouseCode,
+ warehouseType = 20,
+ reportSide = reportSide,
+ };
+ requeststr = JsonConvert.SerializeObject(request);
+ url = LocalFile.Config.FirstSendRecommendedBarCode;
+ }
+ //后续料
+ else
+ {
+ url = LocalFile.Config.ElectronicSiloPush;
+ }
+
+ var result = ApiHelp.MXGetDataFromHttp>(requeststr, url, "POST", true);
+ if (result != null && result.code == 200 && result.data != null && result.data.Count() > 0)
+ {
+ //获取推荐的条码
+ var matSns = result.data.Select(t => t.materialBar).ToList();
+
+ //调用 比对库存数据 获取库存中有的数据
+ #region 调用接口 比对库存数据 获取库存中有的数据
+ try
+ {
+ var body = new CompareMatInventoryDetailRequest()
+ {
+ MatSns = matSns,
+ };
+ var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "matInventoryDetail/compareMatInventoryDetail", body, "POST", true);
+
+ //查询到物料信息
+ if (Result != null && Result.Data != null && Result.Data.Lists != null && Result.Data.Lists.Count != 0)
+ {
+ DataGridItemSource = Result.Data.Lists;
+ }
+ 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)}");
+ DataGridItemSource = null;
+ }
+ else
+ {
+ MessageBox.Show($"未查询到领料明细!请重试!");
+ DataGridItemSource = null;
+ }
+ }
+ catch (Exception e)
+ {
+ MessageBox.Show($"未查询到领料明细!请重试!");
+ DataGridItemSource = null;
+ }
+ #endregion
+ }
+ else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
+ {
+ Growl.Warning("未查询到物料明细!MES推荐物料明细为空!");
+ DataGridItemSource = null;
+ }
+ else
+ {
+ Growl.Warning("未查询到领料明细!请求MES接口失败!");
+ DataGridItemSource = null;
+ }
+ });
+ }
+
+
+ #region Property
+ private int selectedCount;
+ public int SelectedCount
+ {
+ get { return selectedCount; }
+ set { SetProperty(ref selectedCount, value); }
+ }
+
+ private int selectedPan;
+ public int SelectedPan
+ {
+ get { return selectedPan; }
+ set { SetProperty(ref selectedPan, value); }
+ }
+ //发料单号
+ private string billNumber;
+ public string BillNumber
+ {
+ get { return billNumber; }
+ set { SetProperty(ref billNumber, value); }
+ }
+
+ //订单号
+ private string orderProdNumbers;
+ public string OrderProdNumbers
+ {
+ get { return orderProdNumbers; }
+ set { SetProperty(ref orderProdNumbers, value); }
+ }
+
+ //工单号
+ private string orderWorkNumbers;
+ public string OrderWorkNumbers
+ {
+ get { return orderWorkNumbers; }
+ set { SetProperty(ref orderWorkNumbers, value); }
+ }
+
+ //输入的仓库代码
+ private string warehouseCode;
+ public string WarehouseCode
+ {
+ get { return warehouseCode; }
+ set
+ {
+ SetProperty(ref warehouseCode, value);
+ }
+ }
+
+ private List dataGridItemSource;
+ public List DataGridItemSource
+ {
+ get { return dataGridItemSource; }
+ set
+ {
+ SetProperty(ref dataGridItemSource, value);
+ RefreshCount();
+ }
+ }
+
+
+ public void RefreshCount()
+ {
+ Task.Run(() =>
+ {
+ try
+ {
+ SelectedCount = dataGridItemSource.Where(t => t.IsSelected == true).Sum(t => t.MatQty);
+ SelectedPan = dataGridItemSource.Where(t => t.IsSelected == true).Count();
+ }
+ catch { }
+
+ });
+ }
+
+ #endregion
+
+ #region Command
+
+ #endregion
+ }
+}
diff --git a/货架标准上位机/ViewModels/MXViewModel/MXOutOrderViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderViewModel.cs
new file mode 100644
index 0000000..f592f81
--- /dev/null
+++ b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderViewModel.cs
@@ -0,0 +1,132 @@
+using HandyControl.Controls;
+using HandyControl.Data;
+using MiniExcelLibs;
+using Ping9719.WpfEx.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Controls;
+using System.Windows.Input;
+using TouchSocket.Core;
+using Newtonsoft.Json;
+using WCS.Model.ApiModel.MXBackgroundThread;
+using 货架标准上位机.Api;
+
+namespace 货架标准上位机.ViewModel
+{
+ public class MXOutOrderViewModel : BindableBase
+ {
+ public MXOutOrderViewModel()
+ {
+ }
+
+
+ #region Property
+ private string matCode1;
+ public string MatCode1
+ {
+ get { return matCode1; }
+ set
+ {
+ SetProperty(ref matCode1, value);
+ }
+ }
+
+ private string orderProdNumber;
+ public string OrderProdNumber
+ {
+ get { return orderProdNumber; }
+ set
+ {
+ SetProperty(ref orderProdNumber, value);
+ }
+ }
+
+ private string orderWorkNumber;
+ public string OrderWorkNumber
+ {
+ get { return orderWorkNumber; }
+ set
+ {
+ SetProperty(ref orderWorkNumber, value);
+ }
+ }
+
+ private string pickBillNumber;
+ public string PickBillNumber
+ {
+ get { return pickBillNumber; }
+ set
+ {
+ SetProperty(ref pickBillNumber, value);
+ }
+ }
+
+ private string warehouseCode;
+ public string WarehouseCode
+ {
+ get { return warehouseCode; }
+ set
+ {
+ SetProperty(ref warehouseCode, value);
+ }
+ }
+
+
+
+ private List dataGridItemSource;
+ public List DataGridItemSource
+ {
+ get { return dataGridItemSource; }
+ set
+ {
+ SetProperty(ref dataGridItemSource, value);
+ }
+ }
+
+
+
+
+ #endregion
+
+ #region Command
+ public ICommand BtnSearchCommand { get => new DelegateCommand(BtnSearch); }
+ public void BtnSearch()
+ {
+ Task.Run(() =>
+ {
+ var request = new PickOrderRequest()
+ {
+ orderProdNumber = OrderProdNumber,
+ orderWorkNumber = OrderWorkNumber,
+ pickBillNumber = PickBillNumber
+ };
+ var requeststr = JsonConvert.SerializeObject(request);
+ var result = ApiHelp.MXGetDataFromHttpLongWait>(requeststr, LocalFile.Config.GetPickOrderUrl, "POST");
+ if (result != null && result.code == 200 && result.data != null && result.data.Count() > 0)
+ {
+ DataGridItemSource = result.data;
+ }
+ else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0))
+ {
+ result.message = "输入的搜索条件未查询到发料单信息!";
+ Growl.Warning(result.message);
+ DataGridItemSource = result.data;
+ }
+ else
+ {
+ Growl.Warning("调用MES接口超时:搜索失败!");
+ }
+ });
+ }
+ #endregion
+
+
+ }
+}
diff --git a/货架标准上位机/ViewModels/ShelfInfoAddOrUpdateViewModel.cs b/货架标准上位机/ViewModels/ShelfInfoAddOrUpdateViewModel.cs
index a5b8063..0b24199 100644
--- a/货架标准上位机/ViewModels/ShelfInfoAddOrUpdateViewModel.cs
+++ b/货架标准上位机/ViewModels/ShelfInfoAddOrUpdateViewModel.cs
@@ -33,7 +33,7 @@ namespace 货架标准上位机.ViewModel
ClientIp = shelfInfoModel.ClientIp;
GroupName = shelfInfoModel.GroupName;
IsBind = shelfInfoModel.IsBind;
- BindShelfCode = shelfInfoModel.BindShelfCode;
+ BigShelfCode = shelfInfoModel.BigShelfCode;
}
}
@@ -51,7 +51,7 @@ namespace 货架标准上位机.ViewModel
ClientIp = ClientIp,
GroupName = GroupName,
IsBind = IsBind,
- BindShelfCode = BindShelfCode,
+ BigShelfCode = BigShelfCode,
};
}
@@ -156,13 +156,13 @@ namespace 货架标准上位机.ViewModel
}
}
- private string bindShelfCode;
- public string BindShelfCode
+ private string bigShelfCode;
+ public string BigShelfCode
{
- get { return bindShelfCode; }
+ get { return bigShelfCode; }
set
{
- SetProperty(ref bindShelfCode, value);
+ SetProperty(ref bigShelfCode, value);
}
}
#endregion
diff --git a/货架标准上位机/Views/InInventoryView.xaml b/货架标准上位机/Views/InInventoryView.xaml
index a92fbaf..efee7eb 100644
--- a/货架标准上位机/Views/InInventoryView.xaml
+++ b/货架标准上位机/Views/InInventoryView.xaml
@@ -34,7 +34,7 @@
hc:BorderElement.CornerRadius="15"
MinHeight="40"
FontSize="20"
- Content="结束入库"
+ Content="结束所有入库"
FontFamily="{StaticResource IconFont}"
Command="{Binding BtnEndCommand}">
@@ -42,17 +42,33 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/货架标准上位机/Views/InInventoryView.xaml.cs b/货架标准上位机/Views/InInventoryView.xaml.cs
index c8793cd..c9bb6a9 100644
--- a/货架标准上位机/Views/InInventoryView.xaml.cs
+++ b/货架标准上位机/Views/InInventoryView.xaml.cs
@@ -36,8 +36,10 @@ namespace 货架标准上位机
t.ScannerDisplayControl = control;
scannersWrapPanel.Children.Add(control);
});
- }
+ //ImageSource = new BitmapImage(new Uri("/Resources/goOutInstore.png"));
+ }
+ //public BitmapImage ImageSource { get; set; }
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
DataGrid datagrid = sender as DataGrid;
diff --git a/货架标准上位机/Views/MXWindows/MXMainWindow.xaml b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml
new file mode 100644
index 0000000..a9afc94
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主页
+
+
+
+
+
+
+
+
+
+
+
+ 物料入库
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 物料出库
+
+
+
+
+
+
+
+
+
+
+
+ 盘点单据
+
+
+
+
+
+
+
+
+
+
+
+ 物料盘点
+
+
+
+
+
+
+
+
+
+
+
+ 库存查询
+
+
+
+
+
+
+
+
+
+
+
+ 出入记录
+
+
+
+
+
+
+
+
+
+
+
+ 库位管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 接口记录
+
+
+
+
+
+
+
+
+
+
+
+ 权限
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 调试
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/货架标准上位机/Views/MXWindows/MXMainWindow.xaml.cs b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml.cs
new file mode 100644
index 0000000..c341185
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXMainWindow.xaml.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Threading;
+using 货架标准上位机.ViewModel;
+using HandyControl.Controls;
+
+namespace 货架标准上位机
+{
+ ///
+ /// MainWindow1.xaml 的交互逻辑
+ ///
+ public partial class MXMainWindow : HandyControl.Controls.Window
+ {
+ public static MainViewModel viewModel = MainWindow.viewModel;
+ public MXMainWindow()
+ {
+ if (!viewModel.InitAgo())
+ {
+ this.Close();
+ System.Environment.Exit(0);
+ }
+ InitializeComponent();
+ this.DataContext = viewModel;
+ }
+
+ private void load(object sender, RoutedEventArgs e)
+ {
+ viewModel.Init(this);
+ }
+
+ private void tabControl_PreviewKeyDown(object sender, KeyEventArgs e)
+ {
+ //取消tabControl快捷键切换
+ if (e.Key == Key.LeftCtrl || e.Key == Key.LeftCtrl || e.Key == Key.Tab)
+ e.Handled = true;
+ }
+
+ private void Window_Closed(object sender, EventArgs e)
+ {
+ System.Environment.Exit(0);
+ }
+ }
+}
diff --git a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml
new file mode 100644
index 0000000..cfc1f84
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml.cs b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml.cs
new file mode 100644
index 0000000..f93396f
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml.cs
@@ -0,0 +1,69 @@
+using Ping9719.WpfEx;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using System.Text.RegularExpressions;
+using 货架标准上位机.ViewModel;
+
+namespace 货架标准上位机
+{
+ public partial class MXOutInventoryView : UserControlBase
+ {
+ public static MXOutInventoryViewModel viewModel = new MXOutInventoryViewModel();
+ public MXOutInventoryView()
+ {
+ InitializeComponent();
+ this.DataContext = viewModel;
+ }
+
+ private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
+ {
+ try
+ {
+ var viewModel = this.DataContext as InInventoryViewModel;
+ DataGrid datagrid = sender as DataGrid;
+ var index = datagrid.SelectedIndex;
+ if (index >= 0)
+ {
+
+ }
+ datagrid.UnselectAllCells();
+ }
+ catch
+ {
+
+ }
+ }
+
+ private void ListView_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
+ {
+ if (!e.Handled)
+ {
+ // ListView拦截鼠标滚轮事件
+ e.Handled = true;
+
+ // 激发一个鼠标滚轮事件,冒泡给外层ListView接收到
+ var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
+ eventArg.RoutedEvent = UIElement.MouseWheelEvent;
+ eventArg.Source = sender;
+ var parent = ((Control)sender).Parent as UIElement;
+ parent.RaiseEvent(eventArg);
+ }
+ }
+
+ private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+ viewModel.RefreshOutOrderList(viewModel.SelectedOutOrderNumber);
+ }
+ }
+}
diff --git a/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml b/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml
new file mode 100644
index 0000000..4ad9511
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml.cs b/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml.cs
new file mode 100644
index 0000000..45bb968
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutOrderDetailView.xaml.cs
@@ -0,0 +1,158 @@
+using HandyControl.Controls;
+using HandyControl.Data;
+using HandyControl.Tools.Extension;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Media;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using WCS.Model;
+using WCS.Model.ApiModel.MatInventoryDetail;
+using 货架标准上位机.Api;
+using 货架标准上位机.ViewModel;
+using 货架标准上位机.Views.Controls;
+
+namespace 货架标准上位机
+{
+ public partial class MXOutOrderDetailView : HandyControl.Controls.Window
+ {
+ public MXOutOrderDetailViewViewModel viewModel;
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// 是否是首盘发料
+ public MXOutOrderDetailView(string billNumber, string warehouseCode
+ , string orderProdNumbers, string orderWorkNumbers, int isFirstSend = 0, string reportSide = null
+ )
+ {
+ InitializeComponent();
+ viewModel = new MXOutOrderDetailViewViewModel(billNumber, warehouseCode, orderProdNumbers, orderWorkNumbers, isFirstSend, reportSide);
+ this.DataContext = viewModel;
+ }
+
+ private void closeClick(object sender, RoutedEventArgs e)
+ {
+ this.DialogResult = false;
+ this.Close();
+ }
+
+ private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
+ {
+ DataGrid datagrid = sender as DataGrid;
+ var index = datagrid.SelectedIndex;
+ if (index >= 0)
+ {
+ if (viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > index)
+ {
+ var data = viewModel.DataGridItemSource.ElementAt(index);
+ data.IsSelected = !data.IsSelected;
+ viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
+ }
+ }
+ datagrid.UnselectAllCells();
+ }
+
+ private void txtMatQty1_PreviewTextInput(object sender, TextCompositionEventArgs e)
+ {
+ if (!Regex.IsMatch(e.Text, "^[0-9]"))
+ {
+ e.Handled = true;
+ }
+ }
+
+ public List DataGridItemSource = new List();
+
+ private void comfirmClick(object sender, RoutedEventArgs e)
+ {
+ this.DialogResult = true;
+ if (viewModel.DataGridItemSource != null)
+ {
+ DataGridItemSource = viewModel.DataGridItemSource.Where(t => t.IsSelected).ToList();
+
+ if (DataGridItemSource != null && DataGridItemSource.Count > 0)
+ {
+ var dia = Dialog.Show(new TextDialog());
+ try
+ {
+ #region 调用接口保存出库单据
+ var body1 = new SysOutOrderByMatSnRequest()
+ {
+ OrderNumber = viewModel.BillNumber,
+ OrderType = "出库",
+ OrderSource = "WCS前端",
+ SnList = DataGridItemSource.Select(t => t.MatSN).ToList(),
+ DeviceType = LocalFile.Config.DeviceType,
+ UserName = LocalStatic.CurrentUser
+ };
+ var Result1 = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outstore/sysOutOrderByMatSn", body1, "POST");
+ if (Result1 != null && Result1.Code == 200)
+ {
+ //出库单据保存成功 刷新左侧出库单列表
+ MXOutInventoryView.viewModel.RefreshOutOrderList(viewModel.BillNumber);
+ Growl.Success("出库单据保存成功,请点击【开始发料】进行发料!");
+ }
+ else if (Result1 != null)
+ {
+ Growl.Warning(Result1.Message);
+ }
+ #endregion
+ }
+ catch (Exception ex)
+ {
+ Growl.Error("保存出库单据失败:" + ex.Message);
+ }
+ finally
+ {
+ App.Current.Dispatcher.Invoke(() =>
+ {
+ dia.Close();
+ dia.Collapse();
+ });
+ }
+ }
+ this.Close();
+ }
+ else
+ this.Close();
+ }
+ private void CheckBox_Checked(object sender, RoutedEventArgs e)
+ {
+ viewModel.RefreshCount();
+ }
+ private void allChecked_Checked(object sender, RoutedEventArgs e)
+ {
+ if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
+ {
+ foreach (var item in viewModel.DataGridItemSource)
+ {
+ item.IsSelected = true;
+ }
+ viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
+ }
+ }
+
+ private void allChecked_Unchecked(object sender, RoutedEventArgs e)
+ {
+ if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
+ {
+ foreach (var item in viewModel.DataGridItemSource)
+ {
+ item.IsSelected = false;
+ }
+ viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
+ }
+ }
+ }
+}
diff --git a/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml b/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml
new file mode 100644
index 0000000..6378ce0
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+ B
+
+
+
+
+
+
+
+
+
+
diff --git a/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml.cs b/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml.cs
new file mode 100644
index 0000000..a83c3e5
--- /dev/null
+++ b/货架标准上位机/Views/MXWindows/MXOutOrderView.xaml.cs
@@ -0,0 +1,156 @@
+using HandyControl.Controls;
+using HandyControl.Data;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics.Eventing.Reader;
+using System.Linq;
+using System.Media;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
+using TouchSocket.Core;
+using WCS.Model.ApiModel.MatInventoryDetail;
+using WCS.Model.ApiModel.MXBackgroundThread;
+using 货架标准上位机.ViewModel;
+
+namespace 货架标准上位机
+{
+ public partial class MXOutOrderView : HandyControl.Controls.Window
+ {
+ public MXOutOrderViewModel viewModel = new MXOutOrderViewModel();
+ public MXOutOrderView()
+ {
+ InitializeComponent();
+ this.DataContext = viewModel;
+ }
+
+ private void closeClick(object sender, RoutedEventArgs e)
+ {
+ this.DialogResult = false;
+ this.Close();
+ }
+
+ int index = 0;
+
+ private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
+ {
+ System.Windows.Controls.DataGrid datagrid = sender as System.Windows.Controls.DataGrid;
+ index = datagrid.SelectedIndex;
+ if (index >= 0)
+ {
+ if (viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > index)
+ {
+ var data = viewModel.DataGridItemSource.ElementAt(index);
+ try
+ {
+ var current = viewModel.DataGridItemSource.Where(t => t.IsSelected).First();
+ current.IsSelected = false;
+ }
+ catch { }
+
+ data.IsSelected = true;
+ viewModel.DataGridItemSource = viewModel.DataGridItemSource.ToList();
+ }
+ }
+ //datagrid.UnselectAllCells();
+ }
+
+ private void txtMatQty1_PreviewTextInput(object sender, TextCompositionEventArgs e)
+ {
+ if (!Regex.IsMatch(e.Text, "^[0-9]"))
+ {
+ e.Handled = true;
+ }
+ }
+
+ public PickOrder SelectedOrder { get; set; }
+
+ public List inventoryDetails { get; set; }
+
+
+
+ private void comfirmClick(object sender, RoutedEventArgs e)
+ {
+ var isFirstSend = 0;
+ try
+ {
+ var button = sender as System.Windows.Controls.Button;
+ if (button != null)
+ {
+ if (button.Content.Equals("首盘发料"))
+ isFirstSend = 1;
+ else if (button.Content.Equals("全部发料"))
+ isFirstSend = 0;
+ else
+ isFirstSend = 2;
+ }
+ else
+ {
+ Logs.Write("button获取失败了!!!");
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+
+ if (viewModel.DataGridItemSource == null)
+ {
+ Growl.Warning("请搜索并选择领料单后进行确认!");
+ return;
+ }
+
+ SelectedOrder = viewModel.DataGridItemSource.Where(t => t.IsSelected).FirstOrDefault();
+ if (SelectedOrder == null)
+ {
+ Growl.Warning("请选择领料单后进行确认!");
+ return;
+ }
+
+ if (SelectedOrder.pickBillNumber.Contains("SCLL"))
+ {
+ if (string.IsNullOrEmpty(viewModel.WarehouseCode))
+ {
+ Growl.Warning("请输入仓库代码!");
+ txtWarehouseCode.Focus();
+ return;
+ }
+ }
+ else
+ {
+ if (!string.IsNullOrEmpty(viewModel.WarehouseCode))
+ {
+
+ Growl.Warning("非生产领料无需输入仓库代码!");
+ txtWarehouseCode.Focus();
+ return;
+ }
+ viewModel.WarehouseCode = string.Empty;
+ }
+
+ this.Hide();
+ var detailWindow = new MXOutOrderDetailView(SelectedOrder.pickBillNumber, viewModel.WarehouseCode
+ , SelectedOrder.orderProdNumbers, SelectedOrder.orderWorkNumbers, isFirstSend, reportSideCbx.Text
+ );
+ System.Windows.Interop.WindowInteropHelper mainUI = new System.Windows.Interop.WindowInteropHelper(detailWindow);
+ mainUI.Owner = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
+
+ detailWindow.ShowDialog();
+ if (detailWindow.DialogResult == true && detailWindow.DataGridItemSource != null && detailWindow.DataGridItemSource.Count > 0)
+ {
+ inventoryDetails = detailWindow.DataGridItemSource;
+ //LocalStatic.CurrentPickBillNumber = SelectedOrder.pickBillNumber;
+ this.Close();
+ }
+ else
+ this.ShowDialog();
+ }
+ }
+
+}
diff --git a/货架标准上位机/Views/MainWindows/MainWindow.xaml.cs b/货架标准上位机/Views/MainWindows/MainWindow.xaml.cs
index e1890e3..1470044 100644
--- a/货架标准上位机/Views/MainWindows/MainWindow.xaml.cs
+++ b/货架标准上位机/Views/MainWindows/MainWindow.xaml.cs
@@ -27,7 +27,10 @@ namespace 货架标准上位机
public MainWindow()
{
if (!viewModel.InitAgo())
+ {
this.Close();
+ System.Environment.Exit(0);
+ }
InitializeComponent();
diff --git a/货架标准上位机/Views/MainWindows/MainWindow1.xaml b/货架标准上位机/Views/MainWindows/MainWindow1.xaml
index 8157270..60cf77e 100644
--- a/货架标准上位机/Views/MainWindows/MainWindow1.xaml
+++ b/货架标准上位机/Views/MainWindows/MainWindow1.xaml
@@ -8,6 +8,7 @@
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
+ Closed="Window_Closed"
Title="{Binding Title}" NonClientAreaBackground="#FFDCEEFF" Height="800" Width="1280" Icon="/Resources/Logo.ico"
Background="#FFDCEEFF" WindowStartupLocation="CenterScreen" Loaded="load">
diff --git a/货架标准上位机/Views/MainWindows/MainWindow1.xaml.cs b/货架标准上位机/Views/MainWindows/MainWindow1.xaml.cs
index 02dd3d6..110ae4a 100644
--- a/货架标准上位机/Views/MainWindows/MainWindow1.xaml.cs
+++ b/货架标准上位机/Views/MainWindows/MainWindow1.xaml.cs
@@ -29,8 +29,10 @@ namespace 货架标准上位机
public MainWindow1()
{
if (!viewModel.InitAgo())
+ {
this.Close();
-
+ System.Environment.Exit(0);
+ }
InitializeComponent();
this.DataContext = viewModel;
}
@@ -46,5 +48,10 @@ namespace 货架标准上位机
if (e.Key == Key.LeftCtrl || e.Key == Key.LeftCtrl || e.Key == Key.Tab)
e.Handled = true;
}
+
+ private void Window_Closed(object sender, EventArgs e)
+ {
+ System.Environment.Exit(0);
+ }
}
}
diff --git a/货架标准上位机/Views/ModuleInfoView.xaml b/货架标准上位机/Views/ModuleInfoView.xaml
index bceec7c..24287e0 100644
--- a/货架标准上位机/Views/ModuleInfoView.xaml
+++ b/货架标准上位机/Views/ModuleInfoView.xaml
@@ -90,7 +90,7 @@
-
+
diff --git a/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml b/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml
index 84ff139..8212119 100644
--- a/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml
+++ b/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml
@@ -121,9 +121,9 @@
-
diff --git a/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml.cs b/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml.cs
index 4f5d3e1..13b76a9 100644
--- a/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml.cs
+++ b/货架标准上位机/Views/ShelfInfoAddOrUpdateView.xaml.cs
@@ -69,10 +69,10 @@ namespace 货架标准上位机
txtGroupName.Focus();
return;
}
- if (ViewModel.IsBind && string.IsNullOrEmpty(ViewModel.BindShelfCode))
+ if (ViewModel.IsBind && string.IsNullOrEmpty(ViewModel.BigShelfCode))
{
Growl.Warning("需要绑定的货架需要输入绑定后货架编码!");
- txtBindShelfCode.Focus();
+ txtBigShelfCode.Focus();
return;
}
#endregion
diff --git a/货架标准上位机/Views/ShelfInfoView.xaml b/货架标准上位机/Views/ShelfInfoView.xaml
index 64e6e44..070bc9d 100644
--- a/货架标准上位机/Views/ShelfInfoView.xaml
+++ b/货架标准上位机/Views/ShelfInfoView.xaml
@@ -120,7 +120,7 @@
-
+
diff --git a/货架标准上位机/Views/StocktakingDocumentDetailView.xaml b/货架标准上位机/Views/StocktakingDocumentDetailView.xaml
index c6716b2..e736e23 100644
--- a/货架标准上位机/Views/StocktakingDocumentDetailView.xaml
+++ b/货架标准上位机/Views/StocktakingDocumentDetailView.xaml
@@ -30,6 +30,7 @@
AutoGenerateColumns="False" Name="dg1" FontSize="13">
+
@@ -37,7 +38,6 @@
-
diff --git a/货架标准上位机/Views/Windows/WarningWindow.xaml.cs b/货架标准上位机/Views/Windows/WarningWindow.xaml.cs
index 530131e..4b23906 100644
--- a/货架标准上位机/Views/Windows/WarningWindow.xaml.cs
+++ b/货架标准上位机/Views/Windows/WarningWindow.xaml.cs
@@ -114,6 +114,8 @@ namespace 货架标准上位机
{
Guid = _warning.Guid,
SolveType = clikename == "确认" ? SolveTypeEnum.处理 : SolveTypeEnum.忽略,
+ UserName = LocalStatic.CurrentUser,
+ DeviceType = "WCS前端",
};
var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "warning/solveWarning", body, "POST");
if (Result != null && Result.Code == 200)
diff --git a/货架标准上位机/WebSocket.cs b/货架标准上位机/WebSocket.cs
index 7c7ecea..90638d4 100644
--- a/货架标准上位机/WebSocket.cs
+++ b/货架标准上位机/WebSocket.cs
@@ -3,8 +3,10 @@ using Newtonsoft.Json;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
+using System.Diagnostics.Eventing.Reader;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using TouchSocket.Core;
@@ -30,12 +32,33 @@ namespace 货架标准上位机
{
a.Add();
//配置心跳
- a.UseWebSocketHeartbeat()//使用心跳插件
- .SetTick(TimeSpan.FromSeconds(5));//每5秒ping一次。
+ //a.UseWebSocketHeartbeat()//使用心跳插件
+ // .SetTick(TimeSpan.FromSeconds(5));//每5秒ping一次。
//配置断线重连
a.UseReconnection(-1, true, 1000);//-1表示一直重连
}));
client.Connect();
+ //自定义实现心跳和重连
+ Task.Run(async () =>
+ {
+ while (true)
+ {
+ await Task.Delay(4000);
+ try
+ {
+ WebSocket.client.Ping();
+ await Task.Delay(200);
+ if (WebSocket.client.LastReceivedTime < DateTime.Now.AddSeconds(-10))
+ {
+ WebSocket.client.TryConnect();
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+ }
+ });
}
}
public class WebSocketClientPlugin : PluginBase, IWebSocketReceivedPlugin
@@ -75,7 +98,10 @@ namespace 货架标准上位机
switch (warning.WarningType)
{
case WarningTypeEnum.通知刷新出库:
- OutVentoryView.viewModel.RefreshDataGridItemSource();
+ if (LocalFile.Config.IsMx)
+ MXOutInventoryView.viewModel.RefreshDataGridItemSource();
+ else
+ OutVentoryView.viewModel.RefreshDataGridItemSource();
client.Send(e.DataFrame.ToText());
break;
case WarningTypeEnum.通知刷新盘点:
@@ -97,7 +123,6 @@ namespace 货架标准上位机
}
else
{
-
Application.Current.Dispatcher.Invoke(() =>
{
WarningManager.AddWarning(warning);
diff --git a/货架标准上位机/data/jsconfig.json b/货架标准上位机/data/jsconfig.json
index 015a1ec..b5907f3 100644
--- a/货架标准上位机/data/jsconfig.json
+++ b/货架标准上位机/data/jsconfig.json
@@ -2,11 +2,11 @@
//连接不上加:SslMode=none;
"MySql": "server=localhost;Database=db1;Uid=root;Pwd=123456;Convert Zero Datetime=True",
//货架服务器的IP和端口号
- "ApiIpHost": "http://127.0.0.1:8888/",
+ "ApiIpHost": "http://192.168.5.84:8888/",
//WebSocket的地址
- "WebSocketUrl": "ws://127.0.0.1:7789/ws",
+ "WebSocketUrl": "ws://192.168.5.84:7789/ws",
//货架分区
- "GroupName": [ "13寸智能货架", "7寸智能货架" ],
+ "GroupName": [ "C0"],
//设备类型 可以配置为每个电脑不一样
"DeviceType": "WCS前端",
//货架类型的是否开机自检
@@ -15,6 +15,16 @@
"ScannerComList": [],
//串口扫码枪延时
"ScannerTimeOut": 2000,
+ //盟讯公司配置-是否是盟讯
+ "IsMX": true,
+ //盟讯公司配置-获取要料单
+ "GetPickOrderUrl": "http://192.168.2.23:9289/integrate/inOut/missPickListR",
+ //盟讯公司配置-获取要料明细接口
+ "RecommendedBarCode": "http://192.168.2.23:9289/integrate/inOut/recommendedBarCode",
+ //盟讯公司配置-首盘发料获取要料单明细
+ "FirstSendRecommendedBarCode": "http://192.168.2.23:9213/integrate/inOut/firstsetPush",
+ //盟讯公司配置-后续发料获取要料单明细
+ "ElectronicSiloPush": "http://192.168.2.23:9213/integrate/inOut/electronicSiloPush",
//系统配置
"Sys": {
//是否保存登录历史
diff --git a/货架标准上位机/货架标准上位机.csproj b/货架标准上位机/货架标准上位机.csproj
index d26facb..f57b1f3 100644
--- a/货架标准上位机/货架标准上位机.csproj
+++ b/货架标准上位机/货架标准上位机.csproj
@@ -30,6 +30,7 @@
+
@@ -73,6 +74,9 @@
PreserveNewest
+
+ PreserveNewest
+