wanshenmean
2025-04-15 21cd52c5592aad3687be74599a932012d9dd77a4
条码上传冠宏
已修改6个文件
133 ■■■■■ 文件已修改
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs
@@ -65,5 +65,34 @@
        /// å«æ–™æœºå°
        /// </summary>
        public string Tags { get; set; }
        /// <summary>
        /// ç‰©æ–™æ¡ç 
        /// </summary>
        public string MaterialBarcode { get; set; }
    }
    public class CZTaskBarCodeDto
    {
        /// <summary>
        /// 1号条码
        /// </summary>
        public string BarCode1 { get; set; }
        /// <summary>
        /// 2号条码
        /// </summary>
        public string BarCode2 { get; set; }
        /// <summary>
        /// 3号条码
        /// </summary>
        public string BarCode3 { get; set; }
        /// <summary>
        /// 4号条码
        /// </summary>
        public string BarCode4 { get; set; }
    }
}
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs
@@ -107,5 +107,11 @@
        /// </summary>
        [SugarColumn( IsNullable = true)]
        public int TaskFJFinishNumber { get; set; }
        /// <summary>
        /// ä»»åŠ¡è¯¦æƒ…(json格式,存储任务的详细信息Barcode)
        /// </summary>
        [SugarColumn(IsNullable = true)]
        public string DtCZTaskDetails { get; set; }
    }
}
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs
@@ -18,6 +18,7 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
using System.Text.Json;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
@@ -31,6 +32,7 @@
    public class TaskCZService : ServiceBase<DtCZTask, ITaskCZRepository>, ITaskCZService
    {
        private readonly ITaskRepository _taskRepository;
        public TaskCZService(ITaskCZRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
@@ -109,6 +111,28 @@
                {
                    czTask.TaskStatus = TaskInStatusEnum.Line_InExecuting.ToString();
                }
                if (dto.FinishNum is < 1 or > 4)
                    throw new ArgumentException("参数错误!FinishNum å¿…须为 1-4");
                var detail = dto.FinishNum == 1
                    ? new CZTaskBarCodeDto()
                    : JsonSerializer.Deserialize<CZTaskBarCodeDto>(czTask.DtCZTaskDetails) ?? new CZTaskBarCodeDto();
                var property = dto.FinishNum switch
                {
                    1 => nameof(CZTaskBarCodeDto.BarCode1),
                    2 => nameof(CZTaskBarCodeDto.BarCode2),
                    3 => nameof(CZTaskBarCodeDto.BarCode3),
                    4 => nameof(CZTaskBarCodeDto.BarCode4),
                    _ => throw new ArgumentOutOfRangeException("参数错误!请检查【FinishNum】!")
                };
                typeof(CZTaskBarCodeDto).GetProperty(property)?.SetValue(detail, dto.MaterialBarcode);
                czTask.DtCZTaskDetails = JsonSerializer.Serialize(detail);
                var isTrue = BaseDal.UpdateData(czTask);
                if (isTrue)
                {
@@ -125,6 +149,7 @@
            }
            return Task.FromResult(response);
        }
        /// <summary>
        /// è¾“送线回流
        /// </summary>
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs
@@ -8,10 +8,12 @@
    public class CommonAGVJob : JobBase, IJob, IDisposable
    {
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskCZRepository _taskCZRepository;
        public CommonAGVJob(ITaskRepository taskRepository)
        public CommonAGVJob(ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
        {
            _taskRepository = taskRepository;
            _taskCZRepository = taskCZRepository;
        }
        public void Dispose()
@@ -23,7 +25,7 @@
        {
            AGV agv = (AGV)context.JobDetail.JobDataMap.Get("JobParams");
            SendTaskAGV.SendAGVTask(agv, _taskRepository);
            UpdateTaskAGV.UpdateTask(agv, _taskRepository);
            UpdateTaskAGV.UpdateTask(agv, _taskRepository, _taskCZRepository);
            return Task.CompletedTask;
        }
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,6 +1,7 @@
using Newtonsoft.Json;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -258,7 +259,7 @@
            }
        }
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository)
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository)
        {
            // ä½¿ç”¨Interlocked.Exchange保证同一时间只有一个线程可以执行任务更新
            if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0)
@@ -349,6 +350,49 @@
                                throw new Exception($"任务状态更改为4终点已完成失败,任务ID:{taskId},当前状态:{agvTask.TaskState}");
                            }
                            if (agvTask.TargetAddress.Contains("HXWLX"))
                            {
                                if (agvTask.SourceAddress.Contains("KPHLX"))
                                {
                                    // ç©ºç›˜çº¿è¿›çƒ˜ç®±
                                    // TODO: ä»»åŠ¡æˆªå–å®Œæ•´æ¡ç 
                                    var materials = new List<BakingClass>();
                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                }
                                else
                                {
                                    // æå‡æœºè¿›çƒ˜ç®±
                                    // TODO: è°ƒç”¨åˆ›æ™ºæŽ¥å£èŽ·å–å®Œæ•´æ¡ç 
                                    var czTask = _taskCZRepository.QueryFirst(x => x.Id == agvTask.WMSId);
                                    CZTaskBarCodeDto barCodeDto = JsonConvert.DeserializeObject<CZTaskBarCodeDto>(czTask.DtCZTaskDetails);
                                    var materials = Enumerable.Range(0, 2)
                                            .Select(i => new BakingClass
                                            {
                                                MaterialType = czTask.TaskProductCode,
                                                BarCode = GetBarCodeByIndex(barCodeDto, i, hasDesc: !string.IsNullOrEmpty(czTask.TaskDesc))
                                            })
                                            .ToList();
                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                    else
                                    {
                                        if (!string.IsNullOrEmpty(czTask.TaskDesc))
                                        {
                                            czTask.TaskDesc = "任务完成两次次";
                                            _taskCZRepository.DeleteData(czTask);
                                        }
                                        else
                                        {
                                            czTask.TaskDesc = "任务完成一次";
                                            _taskCZRepository.UpdateData(czTask);
                                        }
                                    }
                                }
                            }
                            // åˆ é™¤å·²å®Œæˆçš„任务
                            taskRepository.DeleteData(agvTask);
                            plcClient.Communicator.Write(taskFbInteractive2, 1);
@@ -411,6 +455,19 @@
                }
            }
        }
        // è¾…助方法
        private static string GetBarCodeByIndex(CZTaskBarCodeDto dto, int index, bool hasDesc)
        {
            return (index, hasDesc) switch
            {
                (0, false) => dto.BarCode1,
                (1, false) => dto.BarCode2,
                (0, true) => dto.BarCode3,
                (1, true) => dto.BarCode4,
                _ => throw new IndexOutOfRangeException()
            };
        }
    }
    public class BakingFeedingClass
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -53,8 +53,6 @@
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
@@ -131,7 +129,7 @@
                }
                // åˆ›å»ºå¹¶æ·»åŠ æ–°ä»»åŠ¡åˆ°ä»»åŠ¡ä»“åº“
                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType);
                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType, czTask.Id);
                _taskRepository.AddData(task);
                ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},任务已生成,等待执行......");
            }
@@ -191,7 +189,7 @@
        }
        // è¾…助方法:创建任务对象
        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType)
        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType, int czTaskID = 0)
        {
            Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == currentAddress);
            if (dt_Task != null)
@@ -213,7 +211,7 @@
                NextAddress = targetAddress,
                Barcode = "",
                Roadway = $"{taskType}AGV",
                WMSId = 0,
                WMSId = czTaskID > 0 ? czTaskID : 0,
                Remark = remark
            };
        }