液晶标签协议对接 接口业务实现

This commit is contained in:
hehaibing-1996
2024-12-10 16:47:51 +08:00
parent 1c2a34256e
commit c94af9e987
9 changed files with 440 additions and 237 deletions

View File

@ -2,6 +2,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security.Policy;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@ -69,6 +71,7 @@ namespace WCS.BLL.Services.Service
Message = $"操作失败:库位【{task.StoreCode}】当前在{task.TaskMode}",
};
}
var tasks = new List<CurrentTask>();
//生成任务数据
foreach (var orderDetail in request.List)
@ -106,7 +109,7 @@ namespace WCS.BLL.Services.Service
Message = $"操作失败:{ex.Message}"
};
}
//发送任务至各个标签
//发送任务至各个标签 交给后台线程来做
return new ResponseCommon<object>
{
Code = 200,
@ -131,15 +134,15 @@ namespace WCS.BLL.Services.Service
//第一步:校验库位在数据库中是否都存在
var storeCodeList = request.StoreCodes.Distinct()
.ToList();
var stores = DbHelp.db.Queryable<StoreInfo>()
var modules = DbHelp.db.Queryable<ModuleInfo>()
.LeftJoin<ShelfTypeInfo>((si, sti) => si.ShelfTypeId == sti.Id)
.Where((si, sti) => sti.ShelfTypeName == "液晶货架")
.Where((si, sti) => storeCodeList.Contains(si.StoreCode))
.Select((st, sti) => st)
.Where((si, sti) => sti.ShelfTypeName == "液晶标签货架")
.Where((si, sti) => storeCodeList.Contains(si.ModuleCode))
.Select((si, sti) => si)
.ToList();
if (stores.Count < storeCodeList.Count)
if (modules.Count < storeCodeList.Count)
{
var storeCodesInDB = stores.Select(t => t.StoreCode).ToList();
var storeCodesInDB = modules.Select(t => t.ModuleCode).ToList();
storeCodeList.RemoveAll(t => storeCodesInDB.Contains(t));
return new ResponseCommon
{
@ -147,7 +150,38 @@ namespace WCS.BLL.Services.Service
Message = $"操作失败:库位【{string.Join(",", storeCodeList)}】不存在!",
};
}
//向WMS系统获取对应库位最新的库存信息、更新至电子标签
//第二步:获取对应货架
var shelfs = modules.Select(t => new
{
ShelfId = t.ShelfId,
ModuId = t.Id
})
.GroupBy(t => t.ShelfId)
.Select(g => new
{
ShelfId = g.Key,
ModuIds = g.Select(t => t.ModuId).ToList()
})
.ToList();
//标记对应的模组为需要刷新
foreach (var shelf in shelfs)
{
var shelfInMemory = ShelfManager.Shelves.Where(t => t.ShelfTypeName == "液晶标签货架")
.Where(t => t.ShelfId == shelf.ShelfId)
.FirstOrDefault();
if (shelfInMemory == null)
{
Logs.Write($"[后台APi refreshInventoryRequest]通过{shelf.ShelfId}在内存缓存中查找货架失败!");
continue;
}
//将内存中对应模组置为需要刷新!
var modulesInMemory = shelfInMemory.MXL4Modules.Where(t => shelf.ModuIds.Contains(t.ModuleId))
.ToList();
modulesInMemory.ForEach(t =>
{
t.IsNeedRefresh = true;
});
}
return new ResponseCommon
{
Code = 200,