肖洋
2025-01-07 e61bb0e26530b2aa9055737fade9e77ccb1feebf
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -14,6 +14,7 @@
using WIDESEA_StorageBasicRepository;
using WIDESEA_StoragIntegrationServices;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_QuartzJob.Models;
namespace WIDESEA_StorageTaskServices;
@@ -300,7 +301,7 @@
    private async Task AddStockInfoHtyAsync(DtStockInfo_Hty dtStock)
    {
        var isStockAdd = await SqlSugarHelper.Db.InsertNav(dtStock).IncludesAllFirstLayer().ExecuteCommandAsync();
        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(dtStock).IncludesAllFirstLayer().ExecuteCommandAsync();
        if (!isStockAdd)
        {
            throw new Exception("库存历史信息添加失败");
@@ -1229,14 +1230,19 @@
    /// </summary>
    private async Task<DtStockInfo> QueryStockInfoForRealTrayCWAsync(List<string> areaCodes, string productionLine)
    {
        var area = await _areaInfoRepository.QueryFirstAsync(x => x.AreaCode == "CWSC1");
        var areaId = (await _areaInfoRepository.QueryDataAsync(x => areaCodes.Contains(x.AreaCode))).Select(x => x.AreaID).ToList();
        if (areaId.Count == 0)
        {
            ConsoleHelper.WriteErrorLine($"查询常温实盘库存信息时,未找到区域代码为{JsonConvert.SerializeObject(areaCodes)}的数据");
            return null;
        }
        var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
            .Includes(x => x.LocationInfo) // 预加载LocationInfo
            .Includes(x => x.StockInfoDetails) // 预加载StockInfoDetails
            .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 过滤条件
            .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine)
            .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件
            .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && areaId.Contains(x.LocationInfo.AreaId) && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 过滤条件
            .OrderBy(x => x.OutboundTime) // 排序
            .FirstAsync(); // 获取第一个元素
@@ -1669,7 +1675,39 @@
                    content.OK(data: taskDTO);
                }
                else
                    content.Error(result.MOMMessage);
                {
                    var location = await GetLocationDistributeAsync(station.Roadway);
                    var task = new Dt_Task
                    {
                        CurrentAddress = station.stationLocation,
                        Grade = 1,
                        Roadway = station.Roadway,
                        TargetAddress = location.LocationCode,
                        Dispatchertime = DateTime.Now,
                        MaterialNo = "",
                        NextAddress = location.LocationCode,
                        OrderNo = null,
                        PalletCode = palletCode,
                        SourceAddress = position,
                        TaskState = (int)TaskInStatusEnum.Line_InFinish,
                        TaskType = (int)TaskInboundTypeEnum.InTray,
                        TaskNum = await BaseDal.GetTaskNo(),
                        Creater = "Systeam"
                    };
                    // 创建WMS任务
                    WMSTaskDTO taskDTO = CreateWMSTaskDTO(task);
                    await _unitOfWorkManage.UseTranAsync(async () =>
                    {
                        // 添加任务到数据库
                        await BaseDal.AddDataAsync(task);
                        // 更新库存位置状态为不可用
                        location.LocationStatus = (int)LocationEnum.Lock;
                        await _locationRepository.UpdateDataAsync(location);
                    });
                    content.OK(data: taskDTO);
                }
            }
            else
            {
@@ -1697,7 +1735,7 @@
                Grade = 1,
                PalletCode = taskOld.PalletCode,
                RoadWay = taskOld.Roadway,
                SourceAddress = taskOld.CurrentAddress,
                SourceAddress = taskOld.SourceAddress,
                TargetAddress = taskOld.TargetAddress,
                TaskState = taskOld.TaskState.Value,
                Id = 0,
@@ -2259,7 +2297,11 @@
    /// <returns></returns>
    public async Task<string> GetRoadWayAsync(List<string> process)
    {
        var minGroup = _locationRepository.QueryData(x => process.Contains(x.RoadwayNo) && x.LocationStatus == (int)LocationEnum.Free)
        var deviceCode = await SqlSugarHelper.DbWCS.Queryable<Dt_DeviceInfo>()
             .Where(x => x.DeviceStatus == 1.ToString() && process.Contains(x.DeviceCode))
             .Select(x => x.DeviceCode).ToListAsync();
        var minGroup = _locationRepository.QueryData(x => deviceCode.Contains(x.RoadwayNo) && x.LocationStatus == (int)LocationEnum.Free)
             .GroupBy(x => x.RoadwayNo)
             .OrderByDescending(g => g.Count()) // 根据每个组的元素数量排序
             .ToList(); // 取出数量最多的组