huanghongfeng
昨天 770ff234ccd1bcca05dd32754911d887a8cef541
最新
已修改9个文件
158 ■■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Http/HttpHelperh.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Http/HttpHelperh.cs
@@ -2,8 +2,6 @@
using Newtonsoft.Json;
using System.Net;
using System.Text;
using WIDESEA_Common.Log;
namespace WIDESEA_Comm.Http
{
    public class HttpHelperh
@@ -62,7 +60,6 @@
            }
            catch (Exception ex)
            {
                WriteLog.Write_Log("System/API请求", rquestName, "请求异常", new { è¯·æ±‚报文 = parm, æŽ¥æ”¶æŠ¥æ–‡ = responseContent, é”™è¯¯ = ex.Message });
                throw ex;
            }
        }
@@ -119,7 +116,6 @@
            }
            catch (Exception ex)
            {
                WriteLog.Write_Log("System/API请求", rquestName, "请求异常", new { è¯·æ±‚报文 = parm, æŽ¥æ”¶æŠ¥æ–‡ = responseContent, é”™è¯¯ = ex.Message });
                throw ex;
            }
        }
@@ -183,13 +179,10 @@
                {
                    throw new Exception("异常,响应码:" + statsCode.ToString());
                }
                WriteLog.Write_Log("System/API请求", rquestName, "请求成功", new { è¯·æ±‚报文 = parm, æŽ¥æ”¶æŠ¥æ–‡ = responseContent });
                return JsonConvert.DeserializeObject<T>(responseContent);
            }
            catch (Exception ex)
            {
                WriteLog.Write_Log("System/API请求", rquestName, "请求异常", new { è¯·æ±‚报文 = parm, æŽ¥æ”¶æŠ¥æ–‡ = responseContent, é”™è¯¯ = ex.Message });
                throw ex;
            }
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj
@@ -6,4 +6,8 @@
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
  </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -238,5 +238,11 @@
        /// <param name="sourceAddress">起始地址</param>
        /// <returns></returns>
        Dt_Task RequestWMSTaskMovelibrary(Dt_Task _Task);
        /// <summary>
        /// å‡ºåº“口获取当前堆垛机完成任务
        /// </summary>
        /// <returns></returns>
        Dt_Task GetOutTaskInfo(string PLCaddress);
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -8,8 +8,8 @@
  },
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType",
  "urlWMSMovelibraryTask": "http://10.50.11.65:8098/api/Task/IsRelocations", //请求移库接口
  "urlTaskCompleted": "http://10.50.11.65:8098/api/Task/TaskCompleted", //任务反馈
  "urlWMSMovelibraryTask": "http://127.0.0.1:9290/api/Task/IsRelocations", //请求移库接口
  "urlTaskCompleted": "http://127.0.0.1:9290/api/Task/TaskCompleted", //任务反馈
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,6 +16,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using HslCommunication.Enthernet;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using SqlSugar;
@@ -397,34 +398,36 @@
            try
            {
                int oldState = task.TaskState;
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>();
                    task.TaskState = nextStatus;
                    task.TaskState = (int)TaskOutStatusEnum.SC_OutExecuting;
                    task.Dispatchertime = DateTime.Now;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    if (task.TaskState >= (int)TaskInStatusEnum.InFinish)
                    {
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = nextStatus;
                    if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish)
                    //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
                    task.TaskState = (int)TaskInStatusEnum.SC_InExecuting;
                    task.Dispatchertime = DateTime.Now;
                }
                else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                {
                    if (task.TaskState != (int)TaskRelocationStatusEnum.RelocationNew)
                    {
                        Random random = new Random();
                        task.CurrentAddress = task.NextAddress;
                        task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}";
                        task.TargetAddress = task.NextAddress;
                        return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                    }
                    task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationExecuting;    //下发移库任务
                }
                else
                {
@@ -435,6 +438,7 @@
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{task.TaskNum}】,任务状态:【{task.TaskState}】");
                }
                task.ModifyDate = DateTime.Now;
                task.Modifier = "System";
@@ -503,28 +507,22 @@
                if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
                {
                    /*List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress);
                    if (!routers.Any()) return WebResponseContent.Instance.Error($"未找到设备路由信息");*/
                    task.TaskState = (int)TaskOutStatusEnum.OutFinish;
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}&HowWorks=2");
                    task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish;
                    task.ModifyDate = DateTime.Now;
                    BaseDal.DeleteData(task);
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                    Console.WriteLine("任务完成");
                    //BaseDal.DeleteData(task);
                    // _task_HtyService.AddTaskHty(task); éœ€è¦æ·»åŠ ç§»å…¥åŽ†å²
                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库完成");
                    //todo åŒæ­¥åˆ°WMS
                    //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"出库完成");
                    //暂不考虑多个出库口
                }
                else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                {
                    task.TaskState = (int)TaskInStatusEnum.InFinish;
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}&HowWorks=2");
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                    task.ModifyDate = DateTime.Now;
                    task.Modifier = "System";
@@ -538,7 +536,7 @@
                    task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationFinish;
                    BaseDal.UpdateData(task);
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}&HowWorks=2");
                    content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}");
                  
                    task.ModifyDate = DateTime.Now;
@@ -714,5 +712,11 @@
            return null;
        }
        public Dt_Task GetOutTaskInfo(string PLCaddress)
        {
            return BaseDal.QueryFirst(x => x.TargetAddress== PLCaddress && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy);
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -146,17 +146,20 @@
                                        }
                                    }
                                }
                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK && conveyorLineInfoRead.TaskNo == 0)//出库
                                else if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !STB && !ACK)//出库
                                {
                                    Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.DeviceCode == item.StationDeviceCode && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt());
                                    if (task != null)
                                    Dt_Task dt_Ta = _taskService.GetOutTaskInfo(item.StationCode);
                                    if (dt_Ta != null)
                                    {
                                        Dt_Router dt_Router = _routerRepository.QueryFirst(x => x.StartPosi == dt_Ta.TargetAddress);
                                        //堆垛机任务完成下一地址改成输送线下一地址,设备编号改成输送线
                                        _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
                                        device.SetValue(W_ConveyorLineDB.TaskNo, task.TaskNum, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode);
                                        _taskService.UpdateTaskStatusToNext(dt_Ta.TaskNum);
                                        device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.EndPos, dt_Router.NextPosi, item.StationCode);
                                        device.SetValue(W_ConveyorLineDB.STB, true, item.StationCode);
                                        //删除任务
                                        _taskRepository.DeleteData(dt_Ta);
                                    }
                                }
@@ -177,10 +180,12 @@
                                        Dt_Task dt_Ta = _taskService.GetTaskIninfo(conveyorLineInfoRead.Barcode);
                                        if(dt_Ta != null)
                                        {
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.EndPos, dt_Ta.SourceAddress, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.TaskNo, dt_Ta.TaskNum, item.StationCode);
                                            device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode);
                                        }
                                    }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -60,6 +60,7 @@
        {
            try
            {
                SpeStackerCrane speStackerCrane = (SpeStackerCrane)context.JobDetail.JobDataMap.Get("JobParams");
                if (speStackerCrane != null)
                {
@@ -89,7 +90,7 @@
                                        speStackerCrane.LastTaskType = task.TaskType;
                                        task.Dispatchertime = DateTime.Now;
                                        task.ExceptionMessage = "";
                                        _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing);
                                        WebResponseContent webResponseContent = _taskService.UpdateTaskStatusToNext(task.TaskNum);
                                        //延时1s
                                        Thread.Sleep(1000);
                                    }
@@ -123,7 +124,7 @@
                }
            }
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
@@ -140,7 +141,7 @@
            }
            task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);         //获取入库任务
            if(task != null)
            if (task != null)
            {
                return task;    //如果有任务则直接下发给堆垛机
            }
@@ -152,11 +153,11 @@
                {
                    if (OutTaskStationIsOccupied(item) != null)
                    {
                        if(item.Roadway== "SC01")
                        if (item.Roadway == "SC01")
                        {
                            if (item.Depth == 1) return item;
                            //调取WMS接口进行判断是否需要进行移库
                            Dt_Task dt_Task= OutTaskMovelibrary(item);
                            Dt_Task dt_Task = OutTaskMovelibrary(item);
                            if (dt_Task != null) return dt_Task;
                        }
@@ -187,7 +188,7 @@
            string SourceAddress = string.Join("-", targetCodes); //组装浅库位地址
            Dt_Task? tasks = _taskService.QueryStationIsOccupiedOutTasks(task.Roadway, SourceAddress); //找浅库位是否有任务
            if (tasks != null) return tasks;
        //向wms申请判断浅库位是否有货,是否需要进行移库
            //向wms申请判断浅库位是否有货,是否需要进行移库
            Dt_Task? taskst = _taskService.RequestWMSTaskMovelibrary(task);
            if (taskst != null) return taskst;
            return null;
@@ -203,26 +204,27 @@
        /// <returns>如果未被占用,返回传入的任务信息,否则,返回null</returns>
        private Dt_Task? OutTaskStationIsOccupied([NotNull] Dt_Task task)
        {
            Dt_Router? router = _routerService.QueryNextRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
            if (router != null)
            try
            {
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "CL01");
                if (device != null)
                {
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    if (conveyorLine.IsOccupied(router.ChildPosi))//出库站台未被占用
                    OtherDevice conveyorLine = (OtherDevice)device;
                    DeviceProDTO? deviceProDTO = conveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == task.NextAddress && x.DeviceProParamName == "IsOccupied");    //根据堆垛机地址,地址名称找协议
                    if (deviceProDTO != null)
                    {
                        return task;
                        bool B_Event_Test = conveyorLine.Communicator.Read<bool>(deviceProDTO.DeviceProAddress);        //判断输送线是否允许放货信号
                        if (!B_Event_Test)
                        {
                            return task;
                        }
                    }
                }
                else
                {
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到出库站台【{router.ChildPosiDeviceCode}】对应的通讯对象,无法判断出库站台是否被占用");
                }
            }
            else
            catch (Exception ex)
            {
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"未找到站台【{task.NextAddress}】信息,无法校验站台");
                throw;
            }
            return null;
        }
@@ -241,10 +243,10 @@
            stackerCraneTaskCommand.TaskNum = task.TaskNum;
            stackerCraneTaskCommand.WorkType = 1;
            stackerCraneTaskCommand.TrayType = 1;
            if (task.TaskType==(int)TaskInboundTypeEnum.Inbound)//判断是否是入库任务
            if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//判断是否是入库任务
            {
                Dt_StationManger dt_StationManger=_stationMangerRepository.QueryFirst(x=>x.StationCode==task.SourceAddress);
                Dt_StationManger dt_StationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.SourceAddress);
                string[] startCodes = dt_StationManger.StackerCraneStationCode.Split("-");
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -96,9 +96,9 @@
                        _unitOfWorkManage.BeginTran();
                        _stockRepository.AddData(Adddtstockt);
                        _locationInfoRepository.AddData(Addlocations);
                        BaseDal.AddData(Addtaskdt);
                        _stockRepository.DeleteData(Adddtstockt);
                        _locationInfoRepository.UpdateData(Addlocations);
                        BaseDal.DeleteData(Addtaskdt);
                        var respon = PushTasksToWCS(Addtaskdt,"");
                        if (respon.Status)
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -323,12 +323,13 @@
                //删除任务添加历史
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                WebResponseContent content = TaskCompletionFeedback(task);
                /*WebResponseContent content = TaskCompletionFeedback(task);
                if (!content.Status)
                {
                    _unitOfWorkManage.RollbackTran();
                    return content;
                }
                }*/
                _unitOfWorkManage.CommitTran();
            }
@@ -359,20 +360,21 @@
                stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                locationInfo.LocationStatus =(int)LocationStatusEnum.Free;
                task.TaskStatus = TaskOutStatusEnum.OutFinish.ObjToInt();
                _unitOfWorkManage.BeginTran();
                _stockRepository.DeleteData(stockInfo);
                _locationInfoRepository.UpdateData(locationInfo);   //修改成空货位
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, beforeStatus, StockStatusEmun.出库完成.ObjToInt(), stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                WebResponseContent content = TaskCompletionFeedback(task);
                /*WebResponseContent content = TaskCompletionFeedback(task);
                if (!content.Status)
                {
                    _unitOfWorkManage.RollbackTran();
                    return content;
                }
                }*/
                _unitOfWorkManage.CommitTran();
                return webResponse.OK();