Administrator
2025-05-25 5818ac31e7d82e611fa98c35e9a353319bebd3c3
主流程测试完成
6个文件已修改
403 ■■■■■ 已修改文件
Admin.NET/WCS.Application/Model/AGVModel.cs 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/OpenApi/OpenApi.cs 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCService.cs 262 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/AGVStorageUtil.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Util/HttpService.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Admin.NET/WCS.Application/Model/AGVModel.cs
@@ -162,18 +162,29 @@
        public string ReqTime { get; set; }
        public string CurrentPositionCode { get; set; }
        /// <summary>
        /// 方法名 end : 任务结束
        /// </summary>
        public string Method { get; set; }
        /// <summary>
        /// 任务号
        /// </summary>
        public string TaskCode { get; set; }
        public string robotTaskCode { get; set; }
        /// <summary>
        /// 托盘号
        /// </summary>
        public string CtnrCode { get; set; }
        public ExtraInfo Extra { get; set; }
    }
    public class ExtraInfo
    {
        public ExtraInfoVal Values { get; set; }
    }
    public class ExtraInfoVal
    {
        /// <summary>
        /// 方法名 end : 任务结束
        /// </summary>
        public string Method { get; set; }
    }
    public class AGVCallBackResponse
    {
Admin.NET/WCS.Application/OpenApi/OpenApi.cs
@@ -418,21 +418,22 @@
    [UnitOfWork]
    public async Task<dynamic> agvCallback(AGVCallBackInput input)
    {
        Log.Information("AGV反馈任务" + input.ToJson());
        AGVCallBackResponse result = new AGVCallBackResponse()
        {
            ReqCode = input.ReqCode,
            Message = "成功",
            Code = "0"
        };
        if (input.TaskCode.Substring(0, 3) != "WCS" && input.TaskCode.Substring(0, 2) != "TK")
        if (input.robotTaskCode.Substring(0, 3) != "WCS" && input.robotTaskCode.Substring(0, 2) != "TK")
            return result;
        PLCUtil modUtil = null;
        try
        {
            var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.TaskCode);
            var modTask = await _db.Queryable<WcsTask>().FirstAsync(s => s.TaskNo == input.robotTaskCode);
            if (modTask != null)
            {
                switch (input.Method)
                switch (input.Extra.Values.Method)
                {
                    case "end"://任务完成
                        {
@@ -459,15 +460,26 @@
                                var inputs = new TaskRequestWMS();
                                inputs.TaskNo = modTask.TaskNo;
                                inputs.PalletNo = modTask.PalletNo;
                                inputs.TaskType = modTask.TaskType.ToString();
                                inputs.TaskType = ((int)modTask.TaskType).ToString();
                                inputs.TaskStatus = "2";
                                var modResponseTask = httpService.RequestTask(inputs).Result;
                            }
                            
                        }
                        break;
                    case "admin"://走出储位
                    case "outbin"://走出储位
                        {
                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
                            {
                                TaskNo = modTask.TaskNo,
                                //PlcId = modDevice.PlcId,
                                PlcName = "AGV",
                                StartLocat = modTask.StartLocate,
                                EndLocat = modTask.EndLocate,
                                Status = TaskStatusEnum.Complete,
                                InteractiveMsg = $"AGV小车反馈任务取货完成,走出储位",
                            };
                            await _db.Insertable(modTaskMonitor).ExecuteCommandAsync();
                            //反馈WMS任务取货完成、WMS判断是平库储位就更新储位状态
                            if (modTask.Origin == "WMS")
                            {
@@ -475,22 +487,22 @@
                                var inputs = new TaskRequestWMS();
                                inputs.TaskNo = modTask.TaskNo;
                                inputs.PalletNo = modTask.PalletNo;
                                inputs.TaskType = "2";
                                inputs.TaskType = ((int)modTask.TaskType).ToString();
                                inputs.TaskStatus = "2";
                                var modResponseTask = httpService.RequestTaskQh(inputs).Result;
                            }
                        }
                        break;
                    case "continue"://放货申请
                    case "release"://放货申请
                        {
                            if (modTask.EndLocate != "B010101")//9号工位地址
                            if (modTask.EndLocate != "B040101")//9号工位地址
                            {
                                result.Code = "1";
                                result.Message = "找不到该任务";
                                return result;
                            }
                            modTask.Status = TaskStatusEnum.Complete;
                            //modTask.Status = TaskStatusEnum.Complete;
                            modTask.IsComple = "1";
                            await _db.Updateable(modTask).ExecuteCommandAsync();
                            WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor()
@@ -506,7 +518,16 @@
                            await _db.Insertable(modTaskMonitor).ExecuteCommandAsync();
                            HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                            HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                            if (modTask.Origin == "WMS")
                            {
                                HttpService httpService = new HttpService();
                                var inputs = new TaskRequestWMS();
                                inputs.TaskNo = modTask.TaskNo;
                                inputs.PalletNo = modTask.PalletNo;
                                inputs.TaskType = ((int)modTask.TaskType).ToString();
                                inputs.TaskStatus = "2";
                                var modResponseTask = httpService.RequestTaskQh(inputs).Result;
                            }
                        }
                        break;
                    case "cancel"://任务取消
@@ -555,7 +576,7 @@
            modUtil?.Close();
        }
        Log.Information("AGV反馈任务返回" + result.ToJson());
        return result;
    }
    
Admin.NET/WCS.Application/PLC/PLCService.cs
@@ -271,6 +271,22 @@
                                    modFinshTask.Status = TaskStatusEnum.Complete;
                                    modFinshTask.FinishDate = DateTime.Now;
                                    _db.Updateable(modFinshTask).ExecuteCommand();
                                    //反馈WMS系统 任务完成
                                    if (modFinshTask.Origin == "WMS")
                                    {
                                        HttpService httpService = new HttpService();
                                        var requestMode = new TaskRequestWMS()
                                        {
                                            TaskNo = modFinshTask.TaskNo,
                                            PalletNo = modFinshTask.PalletNo,
                                            TaskType = ((int)modFinshTask.TaskType).ToString(),
                                            TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                                        };
                                        var modResponseTask = httpService.RequestTask(requestMode).Result;
                                        modFinshTask.IsSuccess = TaskSuccessEnum.Success;
                                        _db.Updateable(modFinshTask).ExecuteCommand();
                                        HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
                                    }
                                }
                                
                                //判断任务是否充电任务,下发开始充电命令
@@ -281,20 +297,7 @@
                                    plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2");
                                }
                                //反馈WMS系统 任务完成
                                //HttpService httpService = new HttpService();
                                //var requestMode = new TaskRequestWMS()
                                //{
                                //    TaskNo = modFinshTask.TaskNo,
                                //    PalletNo = modFinshTask.PalletNo,
                                //    TaskType = ((int)modFinshTask.TaskType).ToString(),
                                //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                                //};
                                //var modResponseTask = httpService.RequestTask(requestMode).Result;
                                //modFinshTask.IsSuccess = TaskSuccessEnum.Success;
                                //_db.Updateable(modFinshTask).ExecuteCommand();
                                HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>());
                            }
                        }
                    }
@@ -541,6 +544,76 @@
                    }
                    if (listResult.All(s => s.IsSucceed))
                    {
                        if (modTask.TaskType == TaskTypeEnum.Out)
                        {
                            #region 输送线 写入PLC 730
                            var text = "";
                            var devStation = "";
                            var endLocate = modTask.EndRoadway;
                            var carcon = new carConverModel();
                            if (carcon.conveyorBei.Keys.Contains(endLocate))
                            {
                                text = "输送线北";
                                devStation = carcon.conveyorBei[endLocate];
                            }
                            else if (carcon.conveyorNan.Keys.Contains(endLocate))
                            {
                                text = "输送线南";
                                devStation = carcon.conveyorNan[endLocate];
                            }
                            if (text != "")
                            {
                                var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
                                var modConn = new PLCUtil(modPlc);
                                var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
                                var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
                                if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720)
                                {
                                    modConn.Close();
                                    return;//放货工位没有读取成功或不是空闲
                                }
                                var listResultcon = new List<Result>();
                                //任务号与托盘条码
                                var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "任务号");
                                listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
                                var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "托盘条码");
                                listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
                                // 起始工位、目的工位
                                var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "起始工位");
                                listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
                                var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "目的工位");
                                listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate));
                                if (listResultcon.All(s => s.IsSucceed))
                                {
                                    var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730");
                                    if (!plcResult.IsSucceed)
                                    {
                                        modConn.Close();
                                        return;
                                    }
                                    //添加任务明细
                                    var taskMonitor2 = new WcsTaskMonitor()
                                    {
                                        TaskNo = carTaskNext.TaskNo,
                                        PlcName = modDevice.Text,
                                        Status = TaskStatusEnum.Complete,
                                        InteractiveMsg = $"写入指令730:工位是{modDeviceConver.StationNum}"
                                    };
                                    _db.Insertable(taskMonitor2).ExecuteCommand();
                                }
                                modConn.Close();
                            }
                            #endregion
                        }
                        var modStart = modDevice.listStation.FirstOrDefault(s => s.Text == "启动命令");
                        var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                        if (result.IsSucceed)
@@ -549,75 +622,7 @@
                            carTaskNext.CarTaskNo = carTaskNo;
                            _db.Updateable(carTaskNext).ExecuteCommand();
                            if (modTask.TaskType == TaskTypeEnum.Out)
                            {
                                #region 输送线 写入PLC 730
                                var text = "";
                                var devStation = "";
                                var endLocate = modTask.EndRoadway;
                                var carcon = new carConverModel();
                                if (carcon.conveyorBei.Keys.Contains(endLocate))
                                {
                                    text = "输送线北";
                                    devStation = carcon.conveyorBei[endLocate];
                                }
                                else if (carcon.conveyorNan.Keys.Contains(endLocate))
                                {
                                    text = "输送线南";
                                    devStation = carcon.conveyorNan[endLocate];
                                }
                                if (text != "")
                                {
                                    var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text);
                                    var modConn = new PLCUtil(modPlc);
                                    var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation);
                                    var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos);
                                    if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720)
                                    {
                                        modConn.Close();
                                        return;//放货工位没有读取成功或不是空闲
                                    }
                                    var listResultcon = new List<Result>();
                                    //任务号与托盘条码
                                    var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "任务号");
                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString()));
                                    var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "托盘条码");
                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString()));
                                    // 起始工位、目的工位
                                    var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "起始工位");
                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum));
                                    var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "目的工位");
                                    listResultcon.Add(modConn.SetPlcDBValue(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate));
                                    if (listResultcon.All(s => s.IsSucceed))
                                    {
                                        var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730");
                                        if (!plcResult.IsSucceed)
                                        {
                                            modConn.Close();
                                            return;
                                        }
                                        //添加任务明细
                                        var taskMonitor2 = new WcsTaskMonitor()
                                        {
                                            TaskNo = carTaskNext.TaskNo,
                                            PlcName = modDevice.Text,
                                            Status = TaskStatusEnum.Complete,
                                            InteractiveMsg = $"写入指令730:工位是{modDeviceConver.StationNum}"
                                        };
                                        _db.Insertable(taskMonitor2).ExecuteCommand();
                                    }
                                    modConn.Close();
                                }
                                #endregion
                            }
                             
                            //清除小车空闲时间
                            var carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP);
@@ -758,7 +763,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -779,7 +784,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -854,7 +859,7 @@
                        }
                        // 写入输送线退回指令
                        var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum);
                        if (ret.IsSucceed)
                        {
                            plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350");
@@ -899,17 +904,17 @@
                    var listResult = new List<Result>();
                    // 任务号、任务类型、托盘号
                    var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "任务号");
                    listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString()));
                    var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "任务类型");
                    var taskTypeStr = (int)modTask.TaskType;
                    listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString()));
                    var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "托盘条码");
                    listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo));
                    // 起始工位、目的工位
                    var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "起始工位");
                    listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum));
                    var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "目的工位");
                    listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
                    listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue));
                    if (listResult.All(s => s.IsSucceed))
@@ -1185,12 +1190,18 @@
                        var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos);
                        int taskNoVal = Convert.ToInt32(taskVal);
                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal);
                        var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal && w.TaskType == TaskTypeEnum.Out);
                        if (taskInfo == null)
                        {
                            Log.Error(string.Format("输送线430:未找到对应的任务。"));
                            break;
                        }
                        // 改变任务状态
                        taskInfo.Status = TaskStatusEnum.Complete;
                        taskInfo.FinishDate = DateTime.Now;
                        //modTask.Levels = 999;
                        _db.Updateable(taskInfo).ExecuteCommand();
                        HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>());
                        // 插入任务明细 
                        var modInsertTaskMonitor = new WcsTaskMonitor()
                        {
@@ -1203,7 +1214,28 @@
                            StartLocat = Convert.ToString(starVal),
                            EndLocat = modDevice.StationNum,
                        };
                        if (taskInfo.Origin == "WMS")
                        {
                            // 反馈WMS
                            var requestMode = new TaskRequestWMS()
                            {
                                TaskNo = taskInfo.TaskNo,
                                PalletNo = taskInfo.PalletNo,
                                TaskType = ((int)taskInfo.TaskType).ToString(),
                                TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                            };
                            HttpService httpService = new HttpService();
                            var modResponseTask = httpService.RequestTask(requestMode).Result;
                            if (modResponseTask.StatusCode == 0)
                            {
                                modInsertTaskMonitor.InteractiveMsg += ",返回给WMS任务完成";
                            }
                            else
                            {
                                Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                            }
                        }
                        // 插入交互日志
                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
@@ -1250,66 +1282,30 @@
                        
                        int tasknoVal = Convert.ToInt32(taskVal);
                        var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.IsDelete == false && m.TaskId == tasknoVal);
                        var modTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskId == tasknoVal);
                        if (modTask == null)
                        {
                            Log.Error(string.Format("输送线440:未找到对应的任务。"));
                            break;
                        }
                        // 改变任务状态
                        modTask.Status = TaskStatusEnum.Complete;
                        modTask.FinishDate = DateTime.Now;
                        //modTask.Levels = 999;
                        _db.Updateable(modTask).ExecuteCommand();
                        HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>());
                        // 插入任务明细 
                        var modInsertTaskMonitor = new WcsTaskMonitor()
                        {
                            TaskNo = modTask.TaskNo,
                            PlcId = modDevice.Id,
                            PlcName = modDevice.Text,
                            InteractiveMsg = $"写入指令450:{modDevice.StationNum}出库完成",
                            InteractiveMsg = $"写入指令450:{modDevice.StationNum}托盘离开工位",
                            PalletNo = palletVal,
                            Status = TaskStatusEnum.Complete,
                            StartLocat = starVal.ToString(),
                            EndLocat = modDevice.StationNum,
                        };
                        if (modTask.Origin == "WMS")
                        {
                            //// 反馈WMS
                            //var requestMode = new TaskRequestWMS()
                            //{
                            //    TaskNo = modTask.TaskNo + modTask.EndLocate,
                            //    PalletNo = modTask.PalletNo,
                            //    TaskType = ((int)TaskTypeEnum.Out).ToString(),
                            //    TaskStatus = ((int)TaskStatusEnum.Complete).ToString()
                            //};
                            //HttpService httpService = new HttpService();
                            //var modResponseTask = httpService.RequestTask(requestMode).Result;
                            //if (modResponseTask.StatusCode == 0)
                            //{
                            //    modInsertTaskMonitor.InteractiveMsg += ",返回给WMS任务完成";
                            //}
                            //else
                            //{
                            //    Log.Error(string.Format("任务反馈失败:StatusCode:{0};Msg:{1}", modResponseTask.StatusCode, modResponseTask.Msg));
                            //}
                        }
                        // 插入交互日志
                        _db.Insertable(modInsertTaskMonitor).ExecuteCommand();
                        // 通知任务界面任务已存在更新 请更新界面
                        HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>());
                        // led显示内容
                        var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId);
                        ledText += $"出库完成\n\n";
                        ledText += $"任务号:{modTask.TaskNo}\n";
                        ledText += $"托盘号:{modTask.PalletNo}\n\n";
                        ledText += $"起始位:{modTask.StartRoadway + " " + modTask.StartLocate}\n";
                        ledText += $"目标位:{modTask.EndRoadway + " " + modTask.EndLocate}";
                        LedDisplay(ledDevice.LedIP, ledText);
                    }
                    #endregion
                }
@@ -1376,7 +1372,7 @@
            }
        };
        var response = new HttpService().GenAgvSendTask(taskModel).Result;
        if (response.code == "0")
        if (response.code == "SUCCESS")
        {
            modTask.Status = TaskStatusEnum.Doing;
            _db.Updateable(modTask).ExecuteCommand();
Admin.NET/WCS.Application/PLC/PLCTaskAction.cs
@@ -332,7 +332,7 @@
                        Thread.Sleep(3000);
                        Thread.Sleep(500);
                    }
                    catch (OperationCanceledException)
                    {
@@ -433,7 +433,8 @@
                            var gongwei = carcon.conveyorRuKu[endLocate];
                            //判断任务
                            var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei && m.Type == PLCTypeEnum.ConveyorLine);
                            var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei
                            && m.Type == PLCTypeEnum.ConveyorLine && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing));
                            if (convarTask != null)
                            {
                                continue;//放货工位有任务
Admin.NET/WCS.Application/Util/AGVStorageUtil.cs
@@ -26,47 +26,58 @@
        type2 = "";
        jiebo = "";
        var taskModle = "";//任务模板
        var locate1 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == straLocate);
        var locate2 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == endLocate);
        if (locate1 == null || locate2 == null)
        //前缀L立库 前缀B 平库
        var locate1q = straLocate.Substring(0,1);
        var locate2q = endLocate.Substring(0, 1);
        if (locate1q == null || locate2q == null)
        {
            return taskModle;
        }
        switch (locate1.WareHouseNo)
        switch (locate1q)
        {
            case "W02":
                type1 = "SITE";
                break;
            case "W04":
            case "L":
                type1 = "STORAGE";
                break;
            case "B":
                type1 = "SITE";
                break;
            default:
                break;
        }
        switch (locate2.WareHouseNo)
        switch (locate2q)
        {
            case "W02":
                type2 = "SITE";
                break;
            case "W04":
            case "L":
                type2 = "STORAGE";
                break;
            case "B":
                type2 = "SITE";
                break;
            default:
                break;
        }
        var  AreaAll = new List<string>() { "B06", "B07" };//1002、1003全部区域
        var Area1002 = new List<string>() { "B06",""};//1002车间区域
        var Area10031 = new List<string>() { ""};//1003 1楼车间区域
        var  AreaAll = new List<string>() { "B06", "B07", "B09" };//1002、1003全部区域
        var Area1002 = new List<string>() { "B06"};//1002车间区域
        var Area10031 = new List<string>() { "B09"};//1003 1楼车间区域
        var Area10032 = new List<string>() { "B07"};//1003 2楼车间区域
        if (Area1002.Contains(locate2.AreaNo))
        var locate1 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == straLocate);
        var locate2 = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.LocatNo == endLocate);
        if (locate1q == "B" || locate2q == "B")
        {
            jiebo = "1JB";//接驳位
            if (Area1002.Contains(locate2.AreaNo) || Area1002.Contains(locate1.AreaNo))
            {
                jiebo = "1JB";//接驳位
            }
            if (Area10031.Contains(locate2.AreaNo) || Area10032.Contains(locate2.AreaNo) || Area10031.Contains(locate1.AreaNo) || Area10032.Contains(locate1.AreaNo))
            {
                jiebo = "2JB";
            }
        }
        if (Area10031.Contains(locate2.AreaNo) || Area10032.Contains(locate2.AreaNo))
        {
            jiebo = "2JB";
        }
        if (type1 == "" || type2 == "")
        {
            return taskModle;
@@ -86,21 +97,21 @@
                break;
            case "SITE" when type2 == "SITE":
                {
                    if (Area10032.Contains(locate1.AreaNo) && locate2.AreaNo == "B04")
                    if ((Area10032.Contains(locate1.AreaNo) || Area10031.Contains(locate1.AreaNo)) && locate2.AreaNo == "B04")
                    {
                        taskModle = "CPRK";
                        taskModle = "CPRK1003";
                    }
                    else if(Area1002.Contains(locate1.AreaNo) && locate2.AreaNo == "B04")
                    {
                        taskModle = "CPRK2";
                        taskModle = "CPRK1002";
                    }
                    else if ((Area10032.Contains(locate2.AreaNo) || Area10032.Contains(locate2.AreaNo)) && !AreaAll.Contains(locate1.AreaNo))
                    else if ((Area10032.Contains(locate2.AreaNo) || Area10031.Contains(locate2.AreaNo)) && !AreaAll.Contains(locate1.AreaNo))
                    {
                        taskModle = "YFLSX";
                        taskModle = "YCLSX";
                    }
                    else if (Area1002.Contains(locate2.AreaNo) && !AreaAll.Contains(locate1.AreaNo))
                    {
                        taskModle = "YFLSX2";
                        taskModle = "YCLSX2";
                    }
                }
Admin.NET/WCS.Application/Util/HttpService.cs
@@ -78,7 +78,8 @@
                    TaskNo = result.TaskList.TaskNo,
                    Levels = 999,
                    EndLocate = result.TaskList.EndLocate,
                    EndRoadway = result.TaskList.EndRoadway
                    EndRoadway = result.TaskList.EndRoadway,
                    TaskId = FourWayCarUtil.GetTaskId()
                };
                
                var endLocat2 = PLCCommon.RoadwayToStationNum(taskAdd.EndRoadway, stationNum);
@@ -350,7 +351,7 @@
        var requestId = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
        var dic = new Dictionary<string, object>()
        {
            {"X-lr-request-id","123456879" },
            {"X-lr-request-id",requestId },
            {"X-lr-version","4.2" },
        };
        var mod = new