Merge branch 'feature/智能货架'

This commit is contained in:
hehaibing-1996
2024-05-15 19:00:34 +08:00
75 changed files with 2174 additions and 272 deletions

View File

@ -42,7 +42,7 @@ namespace WCS.BLL.DbModels
[SugarColumn(ColumnName = "mat_spec", Length = 150, IsNullable = true, ColumnDescription = "物料规格")]
public string? MatSpec { get; set; }
[SugarColumn(ColumnName = "mat_unit", Length = 100, IsNullable = true, ColumnDescription = "物料单位")]
public string? MatUnit { get; set; }
@ -75,6 +75,13 @@ namespace WCS.BLL.DbModels
/// </summary>
[SugarColumn(ColumnName = "is_printed", ColumnDescription = "是否已打印")]
public bool IsPrinted { get; set; } = false;
/// <summary>
/// 打印次数
/// </summary>
[SugarColumn(ColumnName = "printed_times", DefaultValue = "0", ColumnDescription = "打印次数")]
public int PrintedTimes { get; set; }
/// <summary>
/// Desc:更新人
/// Default:

View File

@ -12,7 +12,7 @@ namespace WCS.DAL.DbModels
///模组信息表
///</summary>
[SugarTable("module_info")]
public partial class ModuleInfo
public class ModuleInfo
{
/// <summary>
@ -80,5 +80,16 @@ namespace WCS.DAL.DbModels
[SugarColumn(ColumnName = "current_mode", IsNullable = true, ColumnDescription = "串联后大货架编码;大货架编码:未串联时是与货架编码是一对一的关系;串联后与货架编码是一对多的关系")]
public Mode CurrentMode { get; set; } = Mode.;
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -50,6 +50,12 @@ namespace WCS.BLL.DbModels
[SugarColumn(ColumnName = "create_user", Length = 100, IsNullable = true, ColumnDescription = "创建人")]
public string CreateUser { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SugarColumn(ColumnName = "update_time", IsNullable = false, ColumnDescription = "更新时间")]
public DateTime UpdateTime { get; set; } = DateTime.Now;
/// <summary>
/// 序号
/// </summary>

View File

@ -87,5 +87,16 @@ namespace WCS.DAL.DbModels
/// </summary>
[SugarColumn(ColumnName = "offset_voltage", IsNullable = true, ColumnDescription = "电压偏移值")]
public decimal OffsetVoltage { get; set; }
/// <summary>
/// 序号
/// </summary>
[SugarColumn(IsIgnore = true)]
public int RowNumber { get; set; }
/// <summary>
/// 是否已经选择
/// </summary>
[SugarColumn(IsIgnore = true)]
public bool IsSelected { get; set; }
}
}

View File

@ -45,49 +45,6 @@ namespace WCS.BLL.HardWare
ModuleIds = Modules.Select(t => t.BoardId).ToList();
});
////初始化TCPCleint
//TcpCleint = new TCPClient("192.168.0.11:20002", "192.168.0.154:20003");
//TcpCleint.tcpClient.Received += (client, e) =>
//{
// var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
// e.ByteBlock.Clear();
// var len = data.Length;
// for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++)
// {
// //协议拆包 通过前缀校验是否为完整数据包
// var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength);
// var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix);
// if (isEqual)
// {
// var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray();
// if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度
// {
// continue;
// }
// index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1
// //获取板子ID
// var boardIds = (data[TcpCleint.PreFixLength + 0] << 8) + data[TcpCleint.PreFixLength + 1];
// var lightNumber = Convert.ToInt32(data[TcpCleint.PreFixLength + 3]);
// //协议处理 判断功能位
// switch (dataTemp[TcpCleint.PreFixLength + 2])
// {
// case 0x01://进入入库模式信号
// GoInInstoreProcess(dataTemp, boardIds, lightNumber);
// break;
// case 0x03://正常入库信号
// InStoreReturnProcess(dataTemp);
// break;
// default:
// ;
// break;
// }
// }
// }
// return EasyTask.CompletedTask;
//};
//TcpCleint.Connect();
}
@ -748,6 +705,7 @@ namespace WCS.BLL.HardWare
}
//获取当前板所有库位
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ShelfId == ShelfId)
.Where(t => t.BoardId == boardId)
.ToList();
//当前板子的灯数量
@ -915,7 +873,9 @@ namespace WCS.BLL.HardWare
{
var boardId = (data[TcpCleint.PreFixLength + 0] << 8) + data[TcpCleint.PreFixLength + 1];
var number = Convert.ToInt32(data[TcpCleint.PreFixLength + 3]);
var storeInfo = DbHelp.db.Queryable<StoreInfo>().Where(t => t.BoardId == boardId
var storeInfo = DbHelp.db.Queryable<StoreInfo>().Where(t =>
t.ShelfId == ShelfId
&& t.BoardId == boardId
&& t.LightNumber == number).First();
if (storeInfo == null)
@ -1062,6 +1022,7 @@ namespace WCS.BLL.HardWare
Logs.Write("协议处理5.1");
lightNumber = (int)data[TcpCleint.PreFixLength + 4];
var storeInfo = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ShelfId == ShelfId)
.Where(t => t.BoardId == boardId && t.LightNumber == lightNumber)
.First();
Logs.Write("协议处理5.2");
@ -1202,6 +1163,7 @@ namespace WCS.BLL.HardWare
}
//获取当前板所有库位
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ShelfId == ShelfId)
.Where(t => t.BoardId == boardId)
.ToList();
//当前板子的灯数量
@ -1310,6 +1272,7 @@ namespace WCS.BLL.HardWare
}
lightNumber = Convert.ToInt32(data[TcpCleint.PreFixLength + 3]);
var storeInfo = DbHelp.db.Queryable<StoreInfo>().Where(t => t.BoardId == boardId
&& t.ShelfId == ShelfId
&& t.LightNumber == lightNumber)
.First();
if (storeInfo == null)
@ -1423,9 +1386,19 @@ namespace WCS.BLL.HardWare
//确认本次出库
module.ComfirmOutstore(TcpCleint, data[TcpCleint.PreFixLength + 3]);
//当前柜子是否还存在未出库的
CurrentOutStoreMatSNs.RemoveAll(t => t == matSN);//删除本次已出的物料SN
var isExsistOut = CurrentOutStoreMatSNs.Any();
var tempOrder = CurrentOutOrder;
//通知前台刷新
Task.Run(() =>
{
//更新订单状态
UpdateOutOrderStatus(tempOrder);
var messageMode = new WebSocketMessageModel()
{
IsWarning = false,
@ -1435,18 +1408,9 @@ namespace WCS.BLL.HardWare
WarningManager.SendWarning(messageMode);
});
//当前柜子是否还存在未出库的
CurrentOutStoreMatSNs.RemoveAll(t => t == matSN);//删除本次已出的物料SN
var isExsistOut = CurrentOutStoreMatSNs.Any();
//本次亮灯的物料已全部取出
if (!isExsistOut)
{
//更新订单状态
UpdateOutOrderStatus(CurrentOutOrder);
CurrentOutOrder = null;
//退出出库模式
@ -1547,7 +1511,6 @@ namespace WCS.BLL.HardWare
}
}
catch (Exception ex)
{
@ -1634,6 +1597,7 @@ namespace WCS.BLL.HardWare
{
lightNumber = (int)data[TcpCleint.PreFixLength + 4];
var storeInfo = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ShelfId == ShelfId)
.Where(t => t.BoardId == boardId && t.LightNumber == lightNumber)
.First();
if (storeInfo == null)

View File

@ -92,6 +92,7 @@ namespace WCS.BLL.HardWare
//TO DO 退出对应的模式 然后再发送进入入库模式
}
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();
@ -156,6 +157,7 @@ namespace WCS.BLL.HardWare
return;
}
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();
@ -184,7 +186,7 @@ namespace WCS.BLL.HardWare
public void GoInOutStoreMode(TCPClient tcpClient, List<string> outSns)
{
CurrentOutSns = outSns;
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
var storeInfos = DbHelp.db.Queryable<StoreInfo>().Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();
@ -247,7 +249,7 @@ namespace WCS.BLL.HardWare
{
CurrentStockTakingSns = stockTakingSns;
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
var storeInfos = DbHelp.db.Queryable<StoreInfo>().Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();
@ -277,7 +279,7 @@ namespace WCS.BLL.HardWare
tcpClient.Send(tcpClient.GenerateMessage(BoardId, GoInStockTakingModeData));
}
/// <summary>
/// 已确认过的物料
/// </summary>
@ -286,7 +288,7 @@ namespace WCS.BLL.HardWare
{
CurrentStockTakingSns = stockTakingSns;
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
var storeInfos = DbHelp.db.Queryable<StoreInfo>().Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();
@ -317,14 +319,14 @@ namespace WCS.BLL.HardWare
tcpClient.Send(tcpClient.GenerateMessage(BoardId, ConfirmStockTakingData));
}
/// <summary>
/// 单个确认物料
/// </summary>
/// <param name="tcpClient"></param>
public void ConfirmStockTakingSingle(TCPClient tcpClient, int lightNumber)
{
var storeInfos = DbHelp.db.Queryable<StoreInfo>()
var storeInfos = DbHelp.db.Queryable<StoreInfo>().Where(t => t.ModuleId == ModuleId)
.Where(t => t.BoardId == BoardId)
.OrderBy(t => t.LightNumber)
.ToList();

View File

@ -28,7 +28,7 @@ namespace WCS.BLL.Manager
.ToList();
foreach (var ip in ips)
{
var tcpCleint = new TCPClient(ip, "192.168.9.183:20003");
var tcpCleint = new TCPClient(ip, "");
//配置断线重连
tcpCleint.tcpClient.Received += (client, e) =>
{
@ -102,9 +102,49 @@ namespace WCS.BLL.Manager
Logs.Write("协议处理完毕!");
return EasyTask.CompletedTask;
};
//配置首次连接后复位操作
tcpCleint.tcpClient.Connected += (client, e) =>
{
var clientIpHost = client.IP + ":" + client.Port;
var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost);
if (TcpCleint == null)
{
return EasyTask.CompletedTask;
}
//首次连接
if (TcpCleint.IsFirstConnected == false)
{
InitStatus(TcpCleint);
TcpCleint.IsFirstConnected = true;
}
return EasyTask.CompletedTask;
};
TCPClients.Add(tcpCleint);
tcpCleint.Connect();
}
//启动线程监听所有TCP是否已经完成首次连接
Task.Run(() =>
{
while (true)
{
Thread.Sleep(1000);
var noFirstConnectedClients = TCPClientManager.TCPClients.Where(t => t.IsFirstConnected == false)
.ToList();
if (noFirstConnectedClients.Count == 0)
{
break;
}
else
{
noFirstConnectedClients.ForEach(t =>
{
t.ReConnectAsync();
});
}
}
});
}
//后台启动时给所有板子、警示灯发送复位操作 保持状态一致
@ -133,6 +173,30 @@ namespace WCS.BLL.Manager
}
});
}
//后台启动时给所有板子、警示灯发送复位操作 保持状态一致
public static void InitStatus(TCPClient tcpClient)
{
Task.Run(() =>
{
try
{
Thread.Sleep(1000);
//板子复位
new SmartShelfModule()
{
BoardId = 2047
}.Reset(tcpClient);
//报警灯复位
new WarningLight().CloseLight(tcpClient);
}
catch (Exception ex)
{
Logs.Write($"[{tcpClient.RemoteIPHost}]:启动时复位异常,{ex.Message}");
}
});
}
public static TCPClient GetTCPClientByIPHost(string IpHost)
{
return TCPClients.Where(t => t.RemoteIPHost == IpHost).FirstOrDefault();

View File

@ -144,6 +144,7 @@ namespace WCS.BLL.Manager
{
//获取库位
var storeInfo = DbHelp.db.Queryable<StoreInfo>()
.Where(t => t.ShelfId == warning.ShelfId)
.Where(t => t.Id == warning.StoreId)
.First();
if (storeInfo != null)

View File

@ -14,7 +14,7 @@ namespace WCS.BLL.Services.IService
public Task<PageQueryResponse<MatBaseInfo>> exportMatBaseInfo(GetMatBaseInfoRequest request);
public Task<ResponseCommon<List<string>>> importMatBaseInfo(List<MatBaseInfoImportModel> lists,string userName,string deviceType);
public Task<ResponseCommon<List<string>>> importMatBaseInfo(List<MatBaseInfoImportModel> lists, string userName, string deviceType);
public Task<ResponseCommon<object>> addOrUpdateMatBaseInfo(AddMatBaseInfoRequest<MatBaseInfo> request);
@ -24,5 +24,7 @@ namespace WCS.BLL.Services.IService
public Task<PageQueryResponse<MatInfo>> getMatInfo(GetMatInfoRequest request);
public Task<ResponseCommon> printedMatInfo(PrintedMatInfoRequest request);
}
}

View File

@ -29,5 +29,22 @@ namespace WCS.BLL.Services.IService
public Task<ResponseCommon<object>> GenerateStoreInfo();
/// <summary>
/// 查询货架列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<PageQueryResponse<ModuleInfo>> GetModules(GetModulesRequest request);
/// <summary>
/// 查询货架列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public Task<PageQueryResponse<StoreInfo>> GetStores(GetStoresRequest request);
}
}

View File

@ -78,9 +78,10 @@ namespace WCS.BLL.Services.Service
MatQty = request.MatQty,
ModifyUser = request.UserName
};
matInfo.Id = DbHelp.db.Insertable(matInfo).ExecuteReturnIdentity();
matInfoList.Add(matInfo);
}
DbHelp.db.Insertable(matInfoList).ExecuteCommand();
matBaseInfo.SerialNumber = startNumber + request.TotalCount;
DbHelp.db.Updateable(matBaseInfo).ExecuteCommand();
DbHelp.db.CommitTran();

View File

@ -49,7 +49,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<InOutRecord>()

View File

@ -153,7 +153,7 @@ namespace WCS.BLL.Services.Service
}
#region //调用接口或者直接查询数据库
//TODO做成配置 调用接口
// 调用接口
if (LocalFile.Config.IsAccessWMS)
{
#region WMS接口获取物料信息

View File

@ -45,7 +45,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
//Task.WaitAll(new Task[] { recordsTask, totalCountTask });

View File

@ -23,7 +23,10 @@ namespace WCS.BLL.Services.Service
/// </summary>
public class MatBaseInfoService : IMatBaseInfoService
{
public MatBaseInfoService() { }
public MatBaseInfoService()
{
}
public async Task<PageQueryResponse<MatBaseInfo>> getMatBaseInfo(GetMatBaseInfoRequest request)
{
@ -42,7 +45,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<MatBaseInfo>()
@ -410,8 +413,6 @@ namespace WCS.BLL.Services.Service
}
}
public async Task<PageQueryResponse<MatInfo>> getMatInfo(GetMatInfoRequest request)
{
try
@ -420,6 +421,8 @@ namespace WCS.BLL.Services.Service
.WhereIF(!string.IsNullOrEmpty(request.MatCode), t => t.MatCode.Contains(request.MatCode))
.WhereIF(!string.IsNullOrEmpty(request.MatName), t => t.MatName.Contains(request.MatName))
.WhereIF(!string.IsNullOrEmpty(request.MatSpec), t => t.MatSpec.Contains(request.MatSpec))
.WhereIF(!string.IsNullOrEmpty(request.MatBatch), t => t.MatBatch.Contains(request.MatBatch))
.WhereIF(request.IsPrinted != null, t => t.IsPrinted == request.IsPrinted)
.WhereIF(!string.IsNullOrEmpty(request.MatSN), t => t.MatSn.Contains(request.MatSN));
var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable
@ -428,7 +431,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<MatInfo>()
@ -454,5 +457,51 @@ namespace WCS.BLL.Services.Service
}
}
public async Task<ResponseCommon> printedMatInfo(PrintedMatInfoRequest request)
{
try
{
if (request == null || request.PrintedMatInfoIds == null || request.PrintedMatInfoIds.Count == 0)
{
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败:参数为null",
};
}
DbHelp.db.BeginTran();
//获取打印的具体数据
var matInfos = await DbHelp.db.Queryable<MatInfo>()
.Where(t => request.PrintedMatInfoIds.Contains(t.Id))
.ToListAsync();
//打印次数加一
matInfos.ForEach(matInfo =>
{
matInfo.IsPrinted = true;
matInfo.PrintedTimes = matInfo.PrintedTimes + 1;
});
await DbHelp.db.Updateable(matInfos).ExecuteCommandAsync();
DbHelp.db.CommitTran();
return new ResponseCommon()
{
Code = 200,
Message = $"Success",
};
}
catch (Exception ex)
{
DbHelp.db.RollbackTran();
return new ResponseCommon()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
}
}

View File

@ -47,7 +47,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<InventoryDetail>()

View File

@ -208,7 +208,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<OutOrder>()
@ -378,7 +378,7 @@ namespace WCS.BLL.Services.Service
return new ResponseCommon<List<OutOrderMatDetail>>
{
Code = 200,
Message = "Success",
Message = outOrder.OrderStatus.ToString(),
Data = orderMatDetail
};
}
@ -619,7 +619,7 @@ namespace WCS.BLL.Services.Service
.WhereIF(!string.IsNullOrEmpty(outOrderDetail.MatBatch), t => t.MatBatch == outOrderDetail.MatBatch)
.Where(t => t.IsLocked == false)//未锁定的物料
.OrderBy(t => t.MatBatch)//先进先出
//(t => t.MatQty)//零散料先出
//(t => t.MatQty)//零散料先出
.ToList();
//2.2按照搜索出来的库存和当前未出的数量 计算需要出的SN

View File

@ -345,7 +345,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<StockTakingOrder>()
@ -386,9 +386,6 @@ namespace WCS.BLL.Services.Service
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
case Model.ApiModel.Stocktaking.StocktakingOrderStatus.:
recordsQueryable = recordsQueryable.Where(t => t.StocktakingOrderStatus == StocktakingOrderStatus.);
break;
@ -397,7 +394,8 @@ namespace WCS.BLL.Services.Service
}
var records = await recordsQueryable
.OrderByDescending(t => t.CreateTime)
.Where(t => t.StocktakingOrderStatus != StocktakingOrderStatus.)
.OrderByDescending(t => t.UpdateTime)
.Take(40)
.ToListAsync();
@ -507,6 +505,14 @@ namespace WCS.BLL.Services.Service
Message = $"操作失败:不存在单据号为{request.StockTakingOrderNumber}的盘点单!",
};
}
if (order.StocktakingOrderStatus == StocktakingOrderStatus.)
{
return new ResponseCommon()
{
Code = 201,
Message = $"操作失败:盘点单据:{request.StockTakingOrderNumber}已提交!",
};
}
}
else
{
@ -562,6 +568,10 @@ namespace WCS.BLL.Services.Service
shelf.GoInStocktaking(matDetails, order);
shelf.OrderNumber = order.StocktakingOrderNumber;
});
//更新Order
order.UpdateTime = DateTime.Now;
DbHelp.db.Updateable(order).ExecuteCommand();
//返回
return new ResponseCommon()
{
@ -698,16 +708,24 @@ namespace WCS.BLL.Services.Service
};
}
//返回具体的单据信息
var stockTakinbgOrder = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
var stockTakinOrderMatDetail = await DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == stockTakingOrder.Id)
.Where(t => t.MatSN == request.MatSN)
.FirstAsync();
return new ResponseCommon<StockTakingOrderMatDetail>()
{
Code = 200,
Message = "success",
Data = stockTakinbgOrder
};
if (stockTakinOrderMatDetail != null)
return new ResponseCommon<StockTakingOrderMatDetail>()
{
Code = 200,
Message = "success",
Data = stockTakinOrderMatDetail
};
else
return new ResponseCommon<StockTakingOrderMatDetail>()
{
Code = 201,
Message = "不是本次盘点的物料!",
Data = null
};
}
public async Task<ResponseBase> confirmStocktakingOrder(ConfirmStocktakingOrderRequest request)
@ -736,6 +754,8 @@ namespace WCS.BLL.Services.Service
DbHelp.db.Updateable(stockTakingMatDetail)
.ExecuteCommand();
#region
//判断货架是否已进入盘点模式
var shelf = ShelfManager.Shelves
@ -771,6 +791,32 @@ namespace WCS.BLL.Services.Service
#endregion
DbHelp.db.CommitTran();
#region Order状态
Task.Run(() =>
{
//获取Order
var order = DbHelp.db.Queryable<StockTakingOrder>().Where(t => t.Id == stockTakingMatDetail.StocktakingOrderId).First();
if (order != null)
{
var orderDetails = DbHelp.db.Queryable<StockTakingOrderMatDetail>()
.Where(t => t.StocktakingOrderId == stockTakingMatDetail.StocktakingOrderId)
.ToList();
var stocktakedDetailCount = orderDetails.Where(t => t.IsStocktaking).Count();
if (stocktakedDetailCount < orderDetails.Count && order.StocktakingOrderStatus == StocktakingOrderStatus.)
{
order.StocktakingOrderStatus = StocktakingOrderStatus.;
DbHelp.db.Updateable(order).ExecuteCommand();
}
else if (stocktakedDetailCount == orderDetails.Count)
{
order.StocktakingOrderStatus = StocktakingOrderStatus.;
DbHelp.db.Updateable(order).ExecuteCommand();
}
}
});
#endregion
return new ResponseCommon()
{
Code = 200,

View File

@ -36,7 +36,7 @@ namespace WCS.BLL.Services.Service
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * 10 + i + 1;
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<ShelfInfo>()
{
@ -236,8 +236,11 @@ namespace WCS.BLL.Services.Service
}
}
async Task<ResponseCommon<object>> IStoreInfoService.GenerateStoreInfo()
/// <summary>
/// TODO HardCode 根据模组信息生成库位
/// </summary>
/// <returns></returns>
public async Task<ResponseCommon<object>> GenerateStoreInfo()
{
var shelfInfo = await DbHelp.db.Queryable<ShelfInfo>().Where(t => t.ShelfCode == "C04-1").FirstAsync();
var ModuleInfos = await DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == shelfInfo.Id).ToListAsync();
@ -262,7 +265,93 @@ namespace WCS.BLL.Services.Service
}
});
return new ResponseCommon<object>() { Message = "111"};
return new ResponseCommon<object>() { Message = "111" };
}
#region
public async Task<PageQueryResponse<ModuleInfo>> GetModules(GetModulesRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable<ModuleInfo>()
.WhereIF(!string.IsNullOrEmpty(request.ModuleCode), t => t.ModuleCode.Contains(request.ModuleCode))
.WhereIF(!string.IsNullOrEmpty(request.ShelfCode), t => t.ShelfCode.Contains(request.ShelfCode));
var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
.ToListAsync();
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<ModuleInfo>()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData<ModuleInfo>()
{
TotalCount = totalCount,
MaxPage = request.PageSize == 0 ? 0 : (int)Math.Ceiling((decimal)totalCount / request.PageSize),
Count = records.Count,
Lists = records.ToList()
}
};
}
catch (Exception ex)
{
return new PageQueryResponse<ModuleInfo>()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
#endregion
#region
public async Task<PageQueryResponse<StoreInfo>> GetStores(GetStoresRequest request)
{
try
{
var recordsQueryable = DbHelp.db.Queryable<StoreInfo>()
.WhereIF(!string.IsNullOrEmpty(request.ShelfCode), t => t.ShelfCode.Contains(request.ShelfCode))
.WhereIF(!string.IsNullOrEmpty(request.ModuleCode), t => t.ModuleCode.Contains(request.ModuleCode))
.WhereIF(!string.IsNullOrEmpty(request.StoreCode), t => t.StoreCode.Contains(request.StoreCode))
.WhereIF(!string.IsNullOrEmpty(request.CurrentMatSN), t => t.CurrentMatSn.Contains(request.CurrentMatSN))
;
var totalCount = await recordsQueryable.CountAsync();
var records = await recordsQueryable
.Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize)
.ToListAsync();
//生成序号
for (int i = 0; i < records.Count; i++)
{
records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1;
}
return new PageQueryResponse<StoreInfo>()
{
Code = 200,
Message = $"success",
Data = new PageQueryResponseData<StoreInfo>()
{
TotalCount = totalCount,
MaxPage = request.PageSize == 0 ? 0 : (int)Math.Ceiling((decimal)totalCount / request.PageSize),
Count = records.Count,
Lists = records.ToList()
}
};
}
catch (Exception ex)
{
return new PageQueryResponse<StoreInfo>()
{
Code = 300,
Message = $"操作失败:{ex.Message}",
};
}
}
#endregion
}
}

View File

@ -17,6 +17,9 @@ namespace WCS.BLL
public bool IsOnline { get; set; } = false;
//第一次连接是否已连接
public bool IsFirstConnected { get; set; } = false;
//can模块协议前缀
public readonly byte[] Prefix = new byte[] { 0x08, 0x00, 0x00 };
//can模块协议前缀长度
@ -76,7 +79,6 @@ namespace WCS.BLL
tcpClient.Received += (client, e) =>
{
var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray();
//e.ByteBlock.Clear();
Logs.Write($"校验发送接收,收到数据" + BitConverter.ToString(data));
var len = data.Length;
for (int index = 0; index < data.Length - PreFixLength; index++)
@ -106,7 +108,7 @@ namespace WCS.BLL
}
Logs.Write($"校验发送接收处理完毕" + BitConverter.ToString(data));
return null;
};
tcpClient.Connected += (client, e) =>
@ -114,7 +116,7 @@ namespace WCS.BLL
this.IsOnline = true;
return EasyTask.CompletedTask;
};
tcpClient.Disconnected += (client, e) =>
{
this.IsOnline = false;
@ -128,12 +130,12 @@ namespace WCS.BLL
{
try
{
//TODO如果指令未回应n次 则取消重发
//TODO如果指令已发两次 则取消重发
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
await Task.Delay(100);
if (MessageList.Count > 0)
{
var failedMessage = MessageList.Where(t => t.Value.SendTimes >= 3).ToList();
var failedMessage = MessageList.Where(t => t.Value.SendTimes >= 2).ToList();
foreach (var message in failedMessage)
{
Logs.Write(BitConverter.ToString(message.Value.Message) +
@ -152,15 +154,12 @@ namespace WCS.BLL
await Task.Delay(10);
}
}
}
}
catch
{
}
}
});
}
catch (Exception ex)