2ecd9c5db603efcde9e6e51a500b3c2b1162fb85..94a1a7574f7ce3c61148742cb6f8e6c60a4ed3aa
2025-04-28 chengsc
解决冲突
94a1a7 对比 | 目录
2025-04-28 chengsc
修改分配任务问题
e3a418 对比 | 目录
3个文件已修改
59 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Entity/WcsTask.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/FourWayCarUtil.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Entity/WcsTask.cs
@@ -182,4 +182,11 @@
    [SugarColumn(ColumnName = "TaskId", ColumnDescription = "PLC-WCS交互任务号")]
    public int? TaskId { get; set; }
    
    /// <summary>
    /// 小车IP
    /// </summary>
    public string? CarIp { get; set; }
}
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -34,7 +34,7 @@
                    AGV(mod);                                       // AGV调度
                    break;
                case PLCTypeEnum.ShuttleCar: //穿梭车
                    ShuttleCar(mod);
                    //ShuttleCar(mod);
                    break;
                case PLCTypeEnum.RobotPalletizer:
                    RobotPalletizer(mod);//码垛机器人
@@ -238,14 +238,14 @@
                    //要下发路径2任务
                    if (carTaskNext != null)
                    {
                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP);
                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                    }
                    else
                    {
                        // 获取任务信息
                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
                        if (modTask == null)
                        {
                            return;
Admin.NET/WCS.Application/Util/FourWayCarUtil.cs
@@ -197,13 +197,13 @@
                        executionPath1 += pathXYZQian + ";";
                    }
                    executionPath2 += pathXYZQian + ";";
                    //判断添加前置任务Id
                    if (!preId1.Contains(item + ""))
                    {
                        preId1 += item + ";";
                    }
                }
                //判断添加前置任务Id
                if (!preId1.Contains(item + ""))
                {
                    preId1 += item + ";";
                }
                isOk = "2";
            }
@@ -278,7 +278,8 @@
                    PalletNo = "",
                    Status = TaskStatusEnum.Wait,
                    Levels = 999,
                    Origin = "WCS"
                    Origin = "WCS",
                    CarIp = item.CarPlcIp
                };
                _db.Insertable(modTask).ExecuteCommand();
                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
@@ -302,7 +303,8 @@
        #region 判断现有任务中最终节点是否在当前分配路径中,如有 添加移走小车任务并加入前置任务 4
        //获取等待或正在执行的任务中包含当前节点的小车任务,不会有太多任务,同层有几个小车最多有几个任务
        var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).ToList();
        var taskListTask4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo!=assignCar.CarPlcIp).GroupBy(m=>m.TaskNo).Select(m=>m.TaskNo).ToList();
        var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.CarNo != assignCar.CarPlcIp).ToList();
        var preId4 = "";//前置任务Id
        var str4 = "";//所有已分配或执行的任务全路径之和
@@ -311,9 +313,14 @@
            str4 += item.Path;
        }
        //判断现有任务中最终节点是否在当前分配路径中,如有 添加移走小车任务并加入前置任务 
        foreach (var item in taskList4)
        foreach (var item in taskListTask4)
        {
            var lastPathList = item.ExecutionPath.Split(';');
            var lastTask = taskList4.Where(m =>  m.TaskNo == item ).OrderBy(m=>m.CreateTime).LastOrDefault();
            if (lastTask == null)
            {
                continue;
            }
            var lastPathList = lastTask.ExecutionPath.Split(';');
            //  a;b;c; 最后一个位是“”,所以lastPathList.Length - 2
            var lastPath = lastPathList[lastPathList.Length - 2];
            var lastPath2 = lastPath.Substring(0,6);
@@ -321,6 +328,7 @@
            //如果此此分配路径包含醉舞中最终节点路径,添加移走小车
            if (path.Contains(lastPath2))
            {
                var endLocate = "";
                var executionPath4 = "";
                var path4 = "";
@@ -328,7 +336,7 @@
                //查找目标位置
                while (endLocate == "" || datas4.Count == 0 || datas4 == null)
                {
                    endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4);
                    endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4+path);
                    var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate);
                    datas4 = FourWayCarUtil.GetCarPathUp(data4, 0);
                }
@@ -352,7 +360,8 @@
                    PalletNo = "",
                    Status = TaskStatusEnum.Wait,
                    Levels = 999,
                    Origin = "WCS"
                    Origin = "WCS",
                    CarIp = lastTask.CarNo
                };
                _db.Insertable(modTask).ExecuteCommand();
                HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
@@ -363,7 +372,7 @@
                    PreId = "",
                    ExecutionPath = executionPath4,
                    Path = path4,
                    CarNo = item.CarNo,
                    CarNo = lastTask.CarNo,
                    Status = TaskStatusEnum.Wait
                };
                var idLong = _db.Insertable(carTaskYC).ExecuteReturnSnowflakeId();
@@ -392,7 +401,7 @@
            var carTask2 = new WcsCarTasks()
            {
                TaskNo = waitTask.TaskNo,
                PreId = preId1,
                PreId = "",
                ExecutionPath = executionPath2,
                Path = path,
                CarNo = assignCar.CarPlcIp,
@@ -400,15 +409,16 @@
            };
            _db.Insertable(carTask2).ExecuteCommand();
        }
        waitTask.CarIp = assignCar.CarPlcIp;
        if (moveType == 1)
        {
            // 改变总任务表状态
            waitTask.Status = TaskStatusEnum.Doing;
            waitTask.UpdateTime = DateTime.Now;
            _db.Updateable(waitTask).ExecuteCommand();
            HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
            waitTask.UpdateTime = DateTime.Now;
        }
        _db.Updateable(waitTask).ExecuteCommand();
        HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>());
        return true;
        #endregion
    }