添加报警窗口

出库流程调试、优化
This commit is contained in:
hehaibing-1996
2024-05-05 16:57:20 +08:00
parent d283924ae1
commit 311a695498
44 changed files with 2272 additions and 307 deletions

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WCS.Model;
using WCS.Model.WebSocketModel;
namespace WCS.BLL.Services.IService
{
/// <summary>
/// 处理、查询报警使用的服务
/// </summary>
public interface IWarningService
{
public Task<ResponseCommon<object>> SolveWarning(SolveWarningRequest request);
}
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Runtime;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@ -10,9 +11,12 @@ using WCS.BLL.DbModels;
using WCS.BLL.HardWare;
using WCS.BLL.Manager;
using WCS.BLL.Services.IService;
using WCS.BLL.Tool;
using WCS.BLL.Tool.Api.ApiModel;
using WCS.DAL.Db;
using WCS.Model;
using WCS.Model.ApiModel.MatBaseInfo;
using static Dm.net.buffer.ByteArrayBuffer;
namespace WCS.BLL.Services.Service
{
@ -63,7 +67,7 @@ namespace WCS.BLL.Services.Service
//已找到模组对应货架
shelf.GoInInstore(request.IpAdress);
if (shelf.CurentMode == Mode.)
if (shelf.CurrentMode == Mode.)
//成功进入入库模式
return new ShelfGoInInstoreResponse()
{
@ -129,12 +133,12 @@ namespace WCS.BLL.Services.Service
};
}
//判断当前是否是入库模式
if (shelf.CurentMode != Mode.)
if (shelf.CurrentMode != Mode.)
{
return new ResponseCommon<MatInfo>()
{
Code = 201,
Message = $"操作失败:货架[{request.ShelfCode}]不在入库模式!\r\n当前为{shelf.CurentMode}",
Message = $"操作失败:货架[{request.ShelfCode}]不在入库模式!\r\n当前为{shelf.CurrentMode}",
};
}
//判断物料是否已入库
@ -149,9 +153,92 @@ namespace WCS.BLL.Services.Service
}
#region //调用接口或者直接查询数据库
//TODO做成配置 调用接口
if (1 != 1)
if (1 == 1)
{
#region Mes接口获取物料信息
try
{
var body = new
{
materialBar = request.MatSn
};
//var Result = ApiHelp.GetDataFromHttp<ResponseCommon<List<queryByBarResponse>>>("http://192.168.2.23:9213/integrate/instock/queryBybar", body, "POST");
var Result = new ResponseCommon<List<queryByBarResponse>>()
{
Code = 200,
Data = new List<queryByBarResponse>() {new queryByBarResponse()
{
materialBar = request.MatSn,
materialCode = "111222",
materialName = "电阻",
materialQty = 1000,
}
}
};
//查询到物料信息
if (Result != null && Result.Code == 200 && Result.Data != null && Result.Data.Count > 0)
{
var data = Result.Data.First();
shelf.InStoreData = new MatInfoResponse()
{
materialBar = data.materialBar,
materialCode = data.materialCode,
materialName = data.materialName,
materialQty = data.materialQty,
materialSpec = data.materialSpec,
batchNo = data.batchNo,
supplier = "",
customer = data.materialBar,
InstoreUser = request.UserName
};
var matInfo = new MatInfo()
{
MatSn = data.materialBar,
MatCode = data.materialCode,
MatName = data.materialName,
MatBatch = data.batchNo,
MatQty = (int)data.materialQty,
MatSpec = data.materialSpec,
MatSupplier = "",
MatCustomer = "",
};
return new ResponseCommon<MatInfo>()
{
Code = 200,
Data = matInfo,
Message = "success"
};
}
else if (Result != null && Result.Code == 200 && Result.Data == null)
{
//Mes系统中未获取到物料信息
return new ResponseCommon<MatInfo>()
{
Code = 201,
Message = $"操作失败调用Mes接口未获取到物料信息",
};
}
else
{
return new ResponseCommon<MatInfo>()
{
Code = 201,
Message = $"操作失败调用Mes接口失败",
};
}
}
catch (Exception e)
{
return new ResponseCommon<MatInfo>()
{
Code = 300,
Message = $"操作失败调用Mes接口发生异常{e.Message}",
};
}
#endregion
}
//查询数据库
else
@ -207,12 +294,12 @@ namespace WCS.BLL.Services.Service
}
//判断当前是否是入库模式
if (shelf.CurentMode != Mode.)
if (shelf.CurrentMode != Mode.)
{
return new ResponseCommon()
{
Code = 201,
Message = $"货架[{request.ShelfCode}]已退出入库模式!\r\n当前为{shelf.CurentMode}",
Message = $"货架[{request.ShelfCode}]已退出入库模式!\r\n当前为{shelf.CurrentMode}",
};
}

View File

@ -5,6 +5,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TouchSocket.Sockets;
using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.Manager;
using WCS.BLL.Services.IService;
@ -403,78 +404,112 @@ namespace WCS.BLL.Services.Service
public async Task<ResponseBase> GoInOutstore(GetOutOrderDetailRequest request)
{
//获取出库单
var order = await DbHelp.db.Queryable<OutOrder>()
.WhereIF(request.OrderId != 0, t => t.Id == request.OrderId)
.WhereIF(!string.IsNullOrEmpty(request.OrderNumber), t => t.OrderNumber == request.OrderNumber)
.FirstAsync();
if (order == null)
try
{
return new ResponseCommon()
//获取出库单
var order = await DbHelp.db.Queryable<OutOrder>()
.WhereIF(request.OrderId != 0, t => t.Id == request.OrderId)
.WhereIF(!string.IsNullOrEmpty(request.OrderNumber), t => t.OrderNumber == request.OrderNumber)
.FirstAsync();
if (order == null)
{
Code = 201,
Message = $"不存在对应的出库单据{request.OrderNumber}",
Data = null
};
}
//如果是按物料编码出库 需要计算物料明细、并进行物料锁定
if (order.SyncType == SyncTypeEnum.ByMatCode)
{
var result = CaculateOutOrderMatDetails(order);
if (result.Code != 200)
{
return result;
return new ResponseCommon()
{
Code = 201,
Message = $"不存在对应的出库单据{request.OrderNumber}",
Data = null
};
}
}
//获取需要出库的物料明细
var outOrderMatDetails = DbHelp.db.Queryable<OutOrderMatDetail>()
.Where(t => t.OrderId == order.Id)
.Where(t => t.IsSended == false)
.Includes(t => t.StoreInfo)
.ToList();
if (outOrderMatDetails == null || outOrderMatDetails.Count == 0)
{
return new ResponseCommon()
//如果是按物料编码出库 需要计算物料明细、并进行物料锁定
if (order.SyncType == SyncTypeEnum.ByMatCode)
{
Code = 201,
Message = $"出库单据{request.OrderNumber}物料已全部出库!",
Data = null
};
}
//按货架分组 按物料找到对应的货架
var shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId)
.Distinct()
var result = CaculateOutOrderMatDetails(order);
if (result.Code != 200)
{
return result;
}
}
//获取需要出库的物料明细
var outOrderMatDetails = DbHelp.db.Queryable<OutOrderMatDetail>()
.Where(t => t.OrderId == order.Id)
.Where(t => t.IsSended == false)
.Includes(t => t.StoreInfo)
.ToList();
if (outOrderMatDetails == null || outOrderMatDetails.Count == 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"出库单据{request.OrderNumber}物料已全部出库!",
Data = null
};
}
//按货架分组 按物料找到对应的货架
var shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId)
.Distinct()
.ToList();
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
var outherModeShelfs = shelfs.Where(t => t.CurrentMode != HardWare.Mode.).Select(t => t.ShelfCode).ToList();
if (outherModeShelfs != null && outherModeShelfs.Count > 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"进入出库模式失败:货架{string.Join("", outherModeShelfs)}不在待机模式",
Data = null
};
}
//看是否是分批次出库的情况 分批次亮灯
if (LocalFile.Config.IsSameMatCodeOut)
{
var outOrderDetailCount = outOrderMatDetails.GroupBy(t => t.MatCode)
.Select(o => new { count = o.Count(), bb = o })
.Where(o => o.count >= 2)
.OrderByDescending(o => o.count)
.ToList();
var shelfs = ShelfManager.Shelves.Where(t => shelfIds.Contains(t.ShelfId)).ToList(); ;
//相同物料存在盘数超过2的情况亮下一个盘数多的物料
if (outOrderDetailCount.Count > 0)
{
var matCode = outOrderDetailCount.First().bb.Key;
outOrderMatDetails = outOrderMatDetails.Where(t => t.MatCode == matCode)
.ToList();
Logs.Write($"发料单{order.OrderNumber},本次亮灯物料{matCode}");
}
//相同物料不存在盘数超过n的情况剩余物料全部亮灯
else
{
//剩余物料全出
Logs.Write($"发料单{order.OrderNumber},剩余物料灯全亮!");
}
}
var outherModeShelfs = shelfs.Where(t => t.CurentMode != HardWare.Mode.).Select(t => t.ShelfCode).ToList();
if (outherModeShelfs != null && outherModeShelfs.Count > 0)
{
return new ResponseCommon()
{
Code = 201,
Message = $"进入出库模式失败:货架{string.Join("", outherModeShelfs)}不在待机模式",
Data = null
};
}
//对应的货架对应位置 进入出库模式 亮灯
shelfs.ForEach(shelf =>
//对应的货架对应位置 进入出库模式 亮灯
shelfs.ForEach(shelf =>
{
var matDetails = outOrderMatDetails.Where(t => t.StoreInfo.ShelfCode == shelf.ShelfCode)
.Distinct()
.ToList();
shelf.GoInOutstore(matDetails, order);
shelf.OrderNumber = order.OrderNumber;
});
//返回
return new ResponseCommon()
//返回
return new ResponseCommon()
{
Code = 200,
Message = "Success",
Data = null
};
}
catch (Exception ex)
{
Code = 200,
Message = "Success",
Data = null
};
await GoInOutstore(request);
throw ex;
}
}
private ResponseBase CaculateOutOrderMatDetails(OutOrder order)
@ -657,7 +692,8 @@ namespace WCS.BLL.Services.Service
});
//解锁物料 删除物料明细
CancelOutOrderMatDetails(order);
if (order.SyncType == SyncTypeEnum.ByMatCode)
CancelOutOrderMatDetails(order);
return new ResponseCommon()
{

View File

@ -312,21 +312,22 @@ namespace WCS.BLL.Services.Service
{
var recordsQueryable = DbHelp.db.Queryable<StockTakingOrder>()
.WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderNumber), t => t.StocktakingOrderNumber.Contains(request.StocktakingOrderNumber));
.WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderNumber), t => t.StocktakingOrderNumber.Contains(request.StocktakingOrderNumber))
.WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderSource), t => t.StocktakingOrderSource!=null && t.StocktakingOrderSource.Contains(request.StocktakingOrderSource));
switch (request.StocktakingOrderStatus)
{
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == DbModels.StocktakingOrderStatus.);
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == DbModels.StocktakingOrderStatus.);
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == DbModels.StocktakingOrderStatus.);
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == DbModels.StocktakingOrderStatus.);
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
default:
break;
@ -530,7 +531,7 @@ namespace WCS.BLL.Services.Service
#endregion
#region
var shelfs = ShelfManager.Shelves.Where(t => t.CurentMode == HardWare.Mode. && t.OrderNumber == order.StocktakingOrderNumber).ToList();
var shelfs = ShelfManager.Shelves.Where(t => t.CurrentMode == HardWare.Mode. && t.OrderNumber == order.StocktakingOrderNumber).ToList();
shelfs.ForEach(t =>
{
t.GoOutStocktaking();
@ -674,7 +675,7 @@ namespace WCS.BLL.Services.Service
#endregion
#region
if (order.StocktakingOrderStatus != DbModels.StocktakingOrderStatus.)
if (order.StocktakingOrderStatus != StocktakingOrderStatus.)
{
return new ResponseCommon()
{
@ -682,7 +683,7 @@ namespace WCS.BLL.Services.Service
Message = $"单据已提交,请勿重复提交!",
};
}
else if (order.StocktakingOrderStatus != DbModels.StocktakingOrderStatus.)
else if (order.StocktakingOrderStatus != StocktakingOrderStatus.)
{
return new ResponseCommon()
{

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TouchSocket.Core;
using WCS.BLL.Manager;
using WCS.BLL.Services.IService;
using WCS.DAL;
using WCS.DAL.Db.AuthDb;
using WCS.Model;
using WCS.Model.ApiModel;
using WCS.Model.ApiModel.User;
using WCS.Model.WebSocketModel;
namespace WCS.BLL.Services.Service
{
public class WarningService : IWarningService
{
public async Task<ResponseCommon<object>> SolveWarning(SolveWarningRequest request)
{
//获取对应的报警
var warning = WarningManager.Warnings
.Where(t => t.Guid == request.Guid)
.FirstOrDefault();
if (warning != null)
{
WarningManager.ClearWarning(warning, request.SolveType);
}
//判断一下是否还存在对应报警
warning = WarningManager.Warnings
.Where(t => t.Guid == request.Guid)
.FirstOrDefault();
if (warning == null)
return new ResponseCommon<object>()
{
Code = 200,
Message = "报警解除成功!"
};
else
{
return new ResponseCommon<object>()
{
Code = 201,
Message = "报警解除失败!请重试!"
};
}
}
}
}