wangxinhui
2025-03-07 7d173d42cba04b4243f13c6ce013b04e1be4dc95
成品输送线
已删除4个文件
已修改9个文件
已添加12个文件
423 ■■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0eef886a-2ca7-493c-b3e7-9af28ec6cbc3.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/166be54e-3523-45a0-8cf5-478baf552c1d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43fe7b8e-7a9e-4448-87e8-de48119a6e02.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/632bf54f-3b73-4bbd-9a8f-486bbb13c358.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineCPDBName.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CP.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/09cfc190-80e7-4be3-bf3e-9a6eaa1e00d1.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2750f5ae-5ba3-4a71-bf69-75c17db76907.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/416fe101-249f-41a5-9c55-755eb49bfad0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d7aaa65-610a-4a4f-9e08-ac924f0dace4.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6072017d-30e1-411f-8eb8-c9979222f9ad.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e3225869-67ec-44fe-945d-0dc842c706c8.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e4d78ad4-62c0-46d7-8770-62e00cb5d23f.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e5636152-b0c4-43fd-9e1c-ef8dceb4183d.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0eef886a-2ca7-493c-b3e7-9af28ec6cbc3.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/166be54e-3523-45a0-8cf5-478baf552c1d.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/43fe7b8e-7a9e-4448-87e8-de48119a6e02.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/632bf54f-3b73-4bbd-9a8f-486bbb13c358.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs
@@ -26,6 +26,11 @@
        /// </summary>
        [Description("辅料AGV任务发送")]
        Agv_FLSendTask,
        /// <summary>
        /// æˆå“AGV任务发送
        /// </summary>
        [Description("成品AGV任务发送")]
        Agv_CPSendTask,
        /// <summary>
        /// PPAGV任务发送
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -12,9 +12,9 @@
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_HUAIAN;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=TestWCS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "WMSConnectionStrings": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "WMSConnectionStrings": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域
  "Cors": {
    "PolicyName": "CorsIpAccess", //策略名称
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -171,6 +171,14 @@
                        if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                        {
                            stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == item.SourceAddress || x.StationDeviceCode == item.SourceAddress);
                            if (stationManger==null && task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
                            {
                                stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode==task.SourceAddress);
                                //转换成品仓起点站台
                                item.SourceAddress = stationManger.StationCode;
                                task.CurrentAddress = stationManger.StationCode;
                                task.SourceAddress = stationManger.StationCode;
                            }
                        }
                        else
                        {
@@ -220,11 +228,16 @@
                            else
                            {
                                task.NextAddress = taskTypeGroup == TaskTypeGroup.InboundGroup ? task.TargetAddress : router.NextPosi;
                                if (item.RoadWay.Contains("AGV"))
                                if (item.RoadWay.Contains("AGV_FL"))
                                {
                                    task.DeviceCode = item.RoadWay;
                                    task.AgvTaskNum = task.DeviceCode + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum;
                                }
                                else if(item.RoadWay.Contains("AGV_FL"))
                                {
                                    task.DeviceCode = stationManger.StationDeviceCode;
                                    task.AgvTaskNum = task.DeviceCode + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum;
                                }
                                else
                                {
                                    task.DeviceCode = stationManger.StationDeviceCode;
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs
@@ -117,7 +117,52 @@
        /// </summary>
        public byte Undefined2 { get; set; }
    }
    public class R_ConveyorLineCPInfo : DeviceCommand
    {
        /// <summary>
        /// åˆ°ä½æŒ‡ä»¤
        /// </summary>
        public short ConveyArrivaled { get; set; }
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        public short StartPos { get; set; }
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// </summary>
        public short EndPos { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        /// <summary>
        [DataLength(20)]
        public string Barcode { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [DataLength(20)]
        public string TaskNum { get; set; }
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        public short WorkType { get; set; }
        /// <summary>
        /// æ¨¡å¼
        /// </summary>
        public short WorkMode { get; set; }
        /// <summary>
        /// æ ¡éªŒä½
        /// </summary>
        public short CheckPos { get; set; }
    }
    public class R_ConveyorLineStatus
    {
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineCPDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public enum R_ConveyorLineCPDB
    {
        /// <summary>
        /// åˆ°ä½æŒ‡ä»¤
        /// </summary>
        ConveyArrivaled,
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        StartPos,
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// </summary>
        EndPos,
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNum,
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        WorkType,
        /// <summary>
        /// æ¨¡å¼
        /// 1入库模式
        /// 2生产模式
        /// </summary>
        WorkMode,
        /// <summary>
        /// æ ¡éªŒä½
        /// </summary>
        CheckPos
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public enum W_ConveyorLineCPDB
    {
        /// <summary>
        /// ç§»åŠ¨æŒ‡ä»¤
        /// </summary>
        ConveyArrival,
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        StartPos,
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// </summary>
        EndPos,
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNum,
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        WorkType,
        /// <summary>
        /// å­æ‰˜ç±»åž‹
        /// </summary>
        WorkMode,
        /// <summary>
        /// æ ¡éªŒä½
        /// </summary>
        CheckPos
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/AGV_CPExtend.cs
@@ -18,12 +18,12 @@
        {
            try
            {
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.New.ObjToInt() && nameof(AGV_FLJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList();
                foreach (var task in newTasks)
                {
                    try
                    {
                        if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt())
                        if (task.TaskType == TaskTypeEnum.OutProduct.ObjToInt())
                            task.CurrentAddress = GetAGVAddress(task.CurrentAddress);
                        else
                            task.NextAddress = GetAGVAddress(task.NextAddress);
@@ -31,7 +31,7 @@
                        {
                            TaskCode = task.AgvTaskNum,
                            ReqCode = DateTime.Now.ToString("yyyyMMddHHmmss") + task.AgvTaskNum,
                            TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "FLC" : "FLR",
                            TaskTyp = task.TaskType < TaskTypeEnum.Inbound.ObjToInt() ? "CPC" : "CPR",
                            ctnrCode = task.PalletCode,
                            PositionCodePath = new List<CodePath>()
                        {
@@ -47,7 +47,7 @@
                            }
                        },
                        };
                        WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_FLSendTask);
                        WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask);
                        if (!content.Status) throw new Exception(content.Message);
                        task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt();
@@ -59,11 +59,14 @@
                        task.ExceptionMessage = ex.Message;
                    }
                }
                if (newTasks.Count>0)
                {
                _taskService.UpdateData(newTasks);
                }
            }
            catch (Exception ex)
            {
                WriteError(nameof(AGV_FLJob), ex.Message, ex);
                WriteError(nameof(AGV_CPJob), ex.Message, ex);
            }
        }
        /// <summary>
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CP.cs
@@ -1,20 +1,26 @@
using Newtonsoft.Json;
using Quartz;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks.成品仓
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_CP : JobBase, IJob
@@ -63,6 +69,83 @@
                    WriteError(device.DeviceName, $"请配置仓库设备信息");
                    return Task.CompletedTask;
                }
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (item.StationType==StationTypeEnum.StationType_OnlyInbound.ObjToInt() && deviceProWrite!=null)
                    {
                        Dt_Task task = _taskRepository.QueryFirst(x => x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.New.ObjToInt()) && x.WarehouseId == warehouseDevice.WarehouseId);
                        if (task!=null)
                        {
                            //获取站台
                            Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.StationCode);
                            if (stationManger == null)
                            {
                                WriteError(item.StationName, $"未找到对应站台信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                continue;
                            }
                            //查询路由
                            Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == task.CurrentAddress);
                            if (router == null)
                            {
                                WriteError(item.StationName, $"未找到路由配置信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                continue;
                            }
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing, nextAddress: router.NextPosi, targetAddress: router.NextPosi);
                            device.SetValue(W_ConveyorLineCPDB.StartPos, task.CurrentAddress, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.EndPos, router.NextPosi, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.Barcode, task.PalletCode, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.TaskNum, task.TaskNum, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.WorkType, task.PalletType, item.StationCode);
                            device.SetValue(W_ConveyorLineCPDB.WorkMode, 1, item.StationCode);
                            //启动指令
                            device.SetValue(W_ConveyorLineCPDB.ConveyArrival, 1, item.StationCode);
                        }
                    }
                    else if (item.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead != null && conveyorLineInfoRead.EndPos.ToString()==item.StationCode)
                        {
                            short isCanTake = device.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, item.StationCode);
                            if (conveyorLineInfoRead.ConveyArrivaled==1 && isCanTake==1)
                            {
                                //获取任务
                                Dt_Task task = _taskRepository.QueryFirst(x => x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt()) && x.WarehouseId == warehouseDevice.WarehouseId && x.TaskNum == conveyorLineInfoRead.TaskNum.ObjToInt());
                                //获取站台
                                if (task!=null)
                                {
                                    Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.StationCode);
                                    if (stationManger == null)
                                    {
                                        WriteError(item.StationName, $"未找到对应站台信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                        continue;
                                    }
                                    //查询路由
                                    Dt_Router router = _routerRepository.QueryFirst(x => x.InOutType == task.TaskType && x.StartPosi == task.NextAddress);
                                    if (router == null)
                                    {
                                        WriteError(item.StationName, $"未找到路由配置信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                        continue;
                                    }
                                    string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, stationManger.StackerCraneCode);
                                    if (string.IsNullOrEmpty(locationCode))
                                    {
                                        WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                        continue;
                                    }
                                    _taskService.UpdateTask(task, TaskStatusEnum.AGV_Execute,deviceCode: router.ChildPosiDeviceCode, nextAddress: locationCode, targetAddress: locationCode, currentAddress: router.StartPosi);
                                }
                            }
                        }
                    }
                }
            }
            return Task.CompletedTask;
        }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/09cfc190-80e7-4be3-bf3e-9a6eaa1e00d1.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2750f5ae-5ba3-4a71-bf69-75c17db76907.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/416fe101-249f-41a5-9c55-755eb49bfad0.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d7aaa65-610a-4a4f-9e08-ac924f0dace4.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/6072017d-30e1-411f-8eb8-c9979222f9ad.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e3225869-67ec-44fe-945d-0dc842c706c8.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e4d78ad4-62c0-46d7-8770-62e00cb5d23f.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e5636152-b0c4-43fd-9e1c-ef8dceb4183d.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.DB.Models;
namespace WIDESEA_Model.Models
{
    /// <summary>
    /// æˆå“å‡ºåº“详情单
    /// </summary>
    [SugarTable(nameof(Dt_OutProStockInfo), "成品出库详情单")]
    public class Dt_OutProStockInfo : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// å•据编号
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "单据编号")]
        public string OrderNo { get; set; }
        /// <summary>
        /// å•据明细主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "单据明细主键")]
        public int OrderDetailId { get; set; }
        /// <summary>
        /// å•据类型
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "单据类型")]
        public int OrderType { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "批次号")]
        public string BatchNo { get; set; }
        /// <summary>
        /// é”€å”®è®¢å•号
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "销售订单号")]
        public string SaleOrder { get; set; }
        /// <summary>
        /// å®¢æˆ·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "客户")]
        public string Customer { get; set; }
        /// <summary>
        /// äº§å“ç¼–码
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品编码")]
        public string PCode { get; set; }
        /// <summary>
        /// äº§å“ç‰ˆæœ¬
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "产品版本")]
        public string PVer { get; set; }
        /// <summary>
        /// äº§å“å‘¨æœŸ
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "产品周期")]
        public string DateCode { get; set; }
        /// <summary>
        /// åº“存主键
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "库存主键")]
        public int StockId { get; set; }
        /// <summary>
        /// å•据数量
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "单据数量")]
        public float OrderQuantity { get; set; }
        /// <summary>
        /// åŽŸå§‹åº“å­˜é‡
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "原始库存量")]
        public float OriginalQuantity { get; set; }
        /// <summary>
        /// åˆ†é…å‡ºåº“量
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "分配出库量")]
        public float AssignQuantity { get; set; }
        /// <summary>
        /// è´§ä½ç¼–号
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "货位编号")]
        public string LocationCode { get; set; }
        /// <summary>
        /// èƒ¶æ¡†å·
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "胶框号")]
        public string PalletCode { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "单位")]
        public string Unit { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [SugarColumn(IsNullable = true, ColumnDescription = "任务号")]
        public int? TaskNum { get; set; }
        /// <summary>
        /// çŠ¶æ€
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "状态")]
        public int Status { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -1033,28 +1033,23 @@
                    StockStatus = StockStatusEmun.入库确认.ObjToInt(),
                    proStockInfoDetails = proStockInfoDetails
                };
                //分配货位
                locationInfo = _basicService.LocationInfoService.AssignLocation(locationInfo.RoadwayNo, ((PalletTypeEnum)proStockInfo.PalletType).ObjToInt(), proStockInfo.WarehouseId);
                Dt_Task newTask = new Dt_Task()
                {
                    CurrentAddress = bagInfoModel.WorkCenter,
                    Grade = 0,
                    NextAddress = locationInfo.LocationCode,
                    NextAddress = "",
                    PalletCode = proStockInfo.PalletCode,
                    Roadway = locationInfo.RoadwayNo,
                    SourceAddress = bagInfoModel.WorkCenter,
                    TargetAddress = locationInfo.LocationCode,
                    TargetAddress = "",
                    TaskType = TaskTypeEnum.InProduct.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId,
                    PalletType = proStockInfo.PalletType
                };
                locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
                _unitOfWorkManage.BeginTran();
                int taskId = BaseDal.AddData(newTask);
                newTask.TaskId = taskId;
                _basicRepository.LocationInfoRepository.UpdateData(locationInfo);
                Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand();
                Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand();
                _unitOfWorkManage.CommitTran();
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -76,6 +76,40 @@
            return content;
        }
        /// <summary>
        /// ç”Ÿæˆæˆå“å‡ºåº“任务
        /// </summary>
        /// <param name="Id">出库订单ID</param>
        /// <param name="StationCode">站台地址</param>
        /// <returns></returns>
        public WebResponseContent OutProductTask(int Id,string StationCode)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) result =
                OutProductTaskDataHandle(Id, StationCode);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å¤„理成品出库数据
        /// </summary>
        /// <returns></returns>
        public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(int Id, string StationCode)
        {
            List<Dt_Task> tasks = new List<Dt_Task>();
            List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
            List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
            List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>();
            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
            return (tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos);
        }
        /// <summary>
        /// åº“存数据转出库任务
        /// </summary>
        /// <param name="stockInfos"></param>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -13,7 +13,7 @@
  //连接字符串
  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
  //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=sa123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //旧WMS数据库连接
  //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
  //跨域