wanshenmean
2025-04-15 97ae26c59fe8c0f967903538e147240f8c1600a5
更改保存条码方式
已修改3个文件
已添加3个文件
230 ■■■■ 文件已修改
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskCZDetailsRepository.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTaskDetails.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskCZDetailsRepository.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoRepository/ITaskCZDetailsRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_ITaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ITaskInfoRepository
{
    public interface ITaskCZDetailsRepository : IRepository<DtCZTaskDetails>
    {
    }
}
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTaskDetails.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
namespace WIDESEAWCS_Model.Models
{
    [SugarTable(nameof(DtCZTaskDetails), "任务信息")]
    public class DtCZTaskDetails : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®ID
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        /// <summary>
        /// ä»»åŠ¡åç§°
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true)]
        public string TaskName { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true)]
        public string TaskType { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true)]
        public string TaskStatus { get; set; }
        /// <summary>
        /// ä»»åŠ¡æè¿°
        /// </summary>
        [SugarColumn(Length = 255, IsNullable = true)]
        public string TaskDescription { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç»ˆç‚¹åœ°å€
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true)]
        public string TaskEndAddress { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹
        /// </summary>
        [SugarColumn(Length = 50, IsNullable = true)]
        public string MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™æ¡ç 
        /// </summary>
        [SugarColumn(Length = 100, IsNullable = true)]
        public string MaterialBarCode { get; set; }
    }
}
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoRepository/TaskCZDetailsRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
#region << ç‰ˆ æœ¬ æ³¨ é‡Š >>
/*----------------------------------------------------------------
 * å‘½åç©ºé—´ï¼šWIDESEAWCS_TaskInfoRepository
 * åˆ›å»ºè€…:胡童庆
 * åˆ›å»ºæ—¶é—´ï¼š2024/8/2 16:13:36
 * ç‰ˆæœ¬ï¼šV1.0.0
 * æè¿°ï¼š
 *
 * ----------------------------------------------------------------
 * ä¿®æ”¹äººï¼š
 * ä¿®æ”¹æ—¶é—´ï¼š
 * ç‰ˆæœ¬ï¼šV1.0.1
 * ä¿®æ”¹è¯´æ˜Žï¼š
 *
 *----------------------------------------------------------------*/
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_TaskInfoRepository
{
    public class TaskCZDetailsRepository : RepositoryBase<DtCZTaskDetails>, ITaskCZDetailsRepository
    {
        public TaskCZDetailsRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
        {
        }
    }
}
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs
@@ -32,10 +32,12 @@
    public class TaskCZService : ServiceBase<DtCZTask, ITaskCZRepository>, ITaskCZService
    {
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskCZDetailsRepository _detailsRepository;
        public TaskCZService(ITaskCZRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
        public TaskCZService(ITaskCZRepository BaseDal, ITaskRepository taskRepository, ITaskCZDetailsRepository detailsRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
            _detailsRepository = detailsRepository;
        }
        public Task<WebResponseContent> AddTaskCZAsync(CZTaskDto dto)
@@ -112,26 +114,37 @@
                    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
                var details = new DtCZTaskDetails()
                {
                    1 => nameof(CZTaskBarCodeDto.BarCode1),
                    2 => nameof(CZTaskBarCodeDto.BarCode2),
                    3 => nameof(CZTaskBarCodeDto.BarCode3),
                    4 => nameof(CZTaskBarCodeDto.BarCode4),
                    _ => throw new ArgumentOutOfRangeException("参数错误!请检查【FinishNum】!")
                    MaterialBarCode = dto.MaterialBarcode,
                    MaterialType = dto.ProductCode,
                    TaskDescription = "创智提交任务完成",
                    TaskEndAddress = czTask.TaskEndAddress,
                    TaskName = czTask.TaskName,
                    TaskType = czTask.TaskType,
                    TaskStatus = czTask.TaskStatus,
                };
                _detailsRepository.AddData(details);
                typeof(CZTaskBarCodeDto).GetProperty(property)?.SetValue(detail, dto.MaterialBarcode);
                //if (dto.FinishNum is < 1 or > 4)
                //    throw new ArgumentException("参数错误!FinishNum å¿…须为 1-4");
                czTask.DtCZTaskDetails = JsonSerializer.Serialize(detail);
                //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)
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs
@@ -9,11 +9,13 @@
    {
        private readonly ITaskRepository _taskRepository;
        private readonly ITaskCZRepository _taskCZRepository;
        private readonly ITaskCZDetailsRepository _detailsRepository;
        public CommonAGVJob(ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
        public CommonAGVJob(ITaskRepository taskRepository, ITaskCZRepository taskCZRepository, ITaskCZDetailsRepository detailsRepository)
        {
            _taskRepository = taskRepository;
            _taskCZRepository = taskCZRepository;
            _detailsRepository = detailsRepository;
        }
        public void Dispose()
@@ -25,7 +27,7 @@
        {
            AGV agv = (AGV)context.JobDetail.JobDataMap.Get("JobParams");
            SendTaskAGV.SendAGVTask(agv, _taskRepository);
            UpdateTaskAGV.UpdateTask(agv, _taskRepository, _taskCZRepository);
            UpdateTaskAGV.UpdateTask(agv, _taskRepository, _taskCZRepository, _detailsRepository);
            return Task.CompletedTask;
        }
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,5 +1,4 @@
using Newtonsoft.Json;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
@@ -204,7 +203,6 @@
                                }
                            }
                            //agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.Finished.ToString());
                            _taskRepository.DeleteData(agvTask);
                            plcClient.Communicator.Write(taskFbInteractive2, 1);
@@ -259,7 +257,7 @@
            }
        }
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository)
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository, ITaskCZDetailsRepository _detailsRepository)
        {
            // ä½¿ç”¨Interlocked.Exchange保证同一时间只有一个线程可以执行任务更新
            if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0)
@@ -365,30 +363,35 @@
                                {
                                    // æå‡æœºè¿›çƒ˜ç®±
                                    // 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();
                                    //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();
                                    var details = _detailsRepository.QueryData(x => x.TaskEndAddress == agvTask.TargetAddress && x.TaskName == agvTask.Roadway).OrderBy(x => x.CreateDate).ToList();
                                    if (details.Count >= 2)
                                    {
                                        details = details.Take(2).ToList();
                                    }
                                    var materials = details.Select(x => new BakingClass
                                    {
                                        MaterialType = x.MaterialType,
                                        BarCode = x.MaterialBarCode,
                                    }).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);
                                        }
                                        // åˆ é™¤details数据
                                        _detailsRepository.DeleteData(details);
                                    }
                                }
                            }