wankeda
2 天以前 6cc35000a6e138cfad96e7b02f8aeddcdb4ba6bf
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs
@@ -31,6 +31,13 @@
using WIDESEA_Common;
using WIDESEA_Core.Enums;
using SqlSugar.Extensions;
using System.Threading.Tasks;
using System.Reflection.Emit;
using WIDESEAWCS_Core.Enums;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
using WIDESEAWCS_Core.Tool;
using System.Net;
namespace WIDESEAWCS_TaskInfoService
{
    public class TaskCZService : ServiceBase<DtCZTask, ITaskCZRepository>, ITaskCZService
@@ -39,13 +46,17 @@
        private readonly ITaskService _taskService;
        private readonly ITaskCZDetailsRepository _detailsRepository;
        private readonly IDt_StationinfoRepository _stationinfoRepository;
        private readonly ITaskHtyRepository _taskHtyRepository;
        private readonly ITaskHtyService _taskHtyService;
        public TaskCZService(ITaskCZRepository BaseDal, IDt_StationinfoRepository stationinfoRepository, ITaskService taskService, ITaskRepository taskRepository, ITaskCZDetailsRepository detailsRepository) : base(BaseDal)
        public TaskCZService(ITaskCZRepository BaseDal, ITaskHtyService taskHtyService, ITaskHtyRepository taskHtyRepository, IDt_StationinfoRepository stationinfoRepository, ITaskService taskService, ITaskRepository taskRepository, ITaskCZDetailsRepository detailsRepository) : base(BaseDal)
        {
            _taskRepository = taskRepository;
            _detailsRepository = detailsRepository;
            _taskService = taskService;
            _stationinfoRepository = stationinfoRepository;
            _taskHtyRepository = taskHtyRepository;
            _taskHtyService = taskHtyService;
        }
        public Task<WebResponseContent> AddTaskCZAsync(CZTaskDto dto)
@@ -97,6 +108,10 @@
        {
            WebResponseContent response = new WebResponseContent();
            try
            {
                //ConsoleHelper.WriteErrorLine($"{nameof(dto.TaskId)}");
                WriteLog.Info("任务完成").Write($"任务号{dto.TaskId}", "任务完成");
                if (dto.Floor == 1)
            {
                var czTask = BaseDal.QueryFirst(x => x.TaskTaskID == dto.TaskId);
                if (czTask == null)
@@ -165,6 +180,48 @@
                    response.Error("任务完成失败!");
                }
            }
                else
                {
                    Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == dto.TaskId.ObjToInt());
                    if (task == null)
                    {
                        response.Error("任务不存在!");
                        return Task.FromResult(response);
                    }
                    WriteLog.Info("1").Write($"任务号{task.TaskNum}", "1");
                    task.TaskState = TaskInStatusEnum.AGV_InFinish.ObjToInt();
                    if (task.SourceAddress.Contains("SL-0"))
                    {
                        var address = task.SourceAddress.Split("||");
                        WriteLog.Info("1").Write($"{address}", "1");
                        Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == address[0]);
                        WriteLog.Info("1").Write($"{Stationinfo.StationCode}", "1");
                        Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == address[1]);
                        WriteLog.Info("1").Write($"{Stationinfo.StationCode}", "1");
                        Stationinfo.Location_state = LocationStatusEnum.Free.ObjToInt();
                        _stationinfoRepository.UpdateData(Stationinfo);
                        Stationinfo1.Location_state = LocationStatusEnum.Free.ObjToInt();
                        _stationinfoRepository.UpdateData(Stationinfo1);
                    }
                    if (task.TargetAddress.Contains("SL-0"))
                    {
                        var address = task.TargetAddress.Split("||");
                        Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == address[0]);
                        WriteLog.Info("2").Write($"{Stationinfo.StationCode}", "2");
                        Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == address[1]);
                        WriteLog.Info("2").Write($"{Stationinfo.StationCode}", "2");
                        Stationinfo.Location_state = LocationStatusEnum.InStock.ObjToInt();
                        _stationinfoRepository.UpdateData(Stationinfo);
                        Stationinfo1.Location_state = LocationStatusEnum.InStock.ObjToInt();
                        _stationinfoRepository.UpdateData(Stationinfo1);
                    }
                    _taskHtyService.AddTask_Hty(task, OperateTypeEnum.自动完成);
                    _taskService.DeleteData(task);
                    response.OK("任务完成成功!");
                    WriteLog.Info("任务完成成功").Write($"任务号{task.TaskId}", "任务完成成功");
                }
            }
            catch (Exception ex)
            {
                response.Error(ex.Message);
@@ -173,7 +230,7 @@
        }
        /// <summary>
        /// ç©ºæ‰˜å›žæµ
        /// ç©ºæ‰˜å›žæµ         AGV任务完成之后需更新缓存架状态
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
@@ -184,54 +241,78 @@
            {
                //通过站点表判断缓存架是那个区域去那条输送线回流口。。。。。。。。。。。
                string Saddress = saveModel.MainData["sourceAddress"].ToString();
                string Saddress1 = saveModel.MainData["sourceAddress1"].ToString();
                string Taddress = saveModel.MainData["targetAddress"].ToString();
                Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == Saddress);
                if (Saddress == Saddress1)
                {
                    webResponseContent.Error("同一缓存架不能扫描两次!");
                    return Task.FromResult(webResponseContent);
                }
                Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == Saddress || x.SourceAddress == Saddress1 || x.TargetAddress == Saddress || x.TargetAddress == Saddress1);
                if (task != null)
                {
                    webResponseContent.Error("此缓存架已存在任务!");
                    return Task.FromResult(webResponseContent);
                }
                Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress);
                Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress && x.Enable);
                Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress1 && x.Enable);
                if (Stationinfo == null || Stationinfo1 == null)
                {
                    webResponseContent.Error("未找到此起点缓存架,或此缓存架已被禁用!");
                    return Task.FromResult(webResponseContent);
                }
                Stationinfo.Location_state = LocationStatusEnum.Lock.ObjToInt();
                _stationinfoRepository.UpdateData(Stationinfo);
                Stationinfo1.Location_state = LocationStatusEnum.Lock.ObjToInt();
                _stationinfoRepository.UpdateData(Stationinfo1);
                Dt_Task dt_Task = new Dt_Task();
                {
                dt_Task.TaskNum = _taskService.GetTaskNum();
                dt_Task.CreateDate = DateTime.Now;
                dt_Task.Creater = "system";
                dt_Task.CurrentAddress = Saddress;
                dt_Task.SourceAddress = Saddress;
                    dt_Task.CurrentAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
                    dt_Task.SourceAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
                dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
                dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                    //dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                dt_Task.Grade = 1;
                dt_Task.PalletCode = "";
                if (Stationinfo.Area == "正极")
                    if (Stationinfo.Area == "A区")
                {
                    dt_Task.TargetAddress = "正极回流输送线入口";
                        dt_Task.TargetAddress = "ZJXL-KPHLS001";
                        dt_Task.NextAddress = "ZJXL-KPHLX001";
                        dt_Task.TaskType = 64;
                }
                else
                {
                    dt_Task.TargetAddress = "负极回流输送线入口";
                        dt_Task.TargetAddress = "FJXL-KPHLS001";
                        dt_Task.NextAddress = "FJXL-KPHLX001";
                        dt_Task.TaskType = 256;
                }
                dt_Task.NextAddress = dt_Task.TargetAddress;
                dt_Task.Barcode = "";
                dt_Task.Roadway = "AGV";
                dt_Task.WMSId = 0;
                dt_Task.Remark = "空托回流";
                    dt_Task.Floor = 3;
                }
                var isTrue = _taskRepository.AddData(dt_Task);
                Dt_Task dt_Tasks = new Dt_Task();
                {
                dt_Tasks.TaskNum = _taskService.GetTaskNum();
                dt_Tasks.CreateDate = DateTime.Now;
                dt_Tasks.Creater = "system";
                if (Stationinfo.Area == "正极")
                    if (Stationinfo.Area == "A区")
                {
                    dt_Task.CurrentAddress = "正极回流输送线出口";
                        dt_Tasks.CurrentAddress = "ZJXL-KPHLX001";
                }
                else
                {
                    dt_Task.CurrentAddress = "负极回流输送线出口";
                        dt_Tasks.CurrentAddress = "FJXL-KPHLX001";
                }
                dt_Tasks.SourceAddress = dt_Task.CurrentAddress;
                    dt_Tasks.SourceAddress = dt_Tasks.CurrentAddress;
                dt_Tasks.TaskState = (int)TaskInStatusEnum.InPending;
                dt_Tasks.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                    dt_Tasks.TaskType = 16;
                dt_Tasks.Grade = 1;
                dt_Tasks.PalletCode = "";
                dt_Tasks.TargetAddress = Taddress;
@@ -240,8 +321,9 @@
                dt_Tasks.Roadway = "AGV";
                dt_Tasks.WMSId = 0;
                dt_Tasks.Remark = "空托回流";
                    dt_Task.Floor = 3;
                }
                var isTrue = _taskRepository.AddData(dt_Task);
                var isTrue1 = _taskRepository.AddData(dt_Tasks);
                webResponseContent.OK("任务下发成功!");
            }
@@ -252,46 +334,71 @@
            return Task.FromResult(webResponseContent);
        }
        /// <summary>
        /// çƒ˜çƒ¤å‡ºæ–™
        /// çƒ˜çƒ¤å‡ºæ–™      AGV任务完成之后需更新缓存架状态
        /// </summary>
        /// <param name="sourceAddress"></param>
        /// <returns></returns>
        public Task<WebResponseContent> OutBoundTask(string sourceAddress)
        public Task<WebResponseContent> OutBoundTask(SaveModel saveModel)
        {
            WebResponseContent webResponseContent = new WebResponseContent();
            try
            {
                Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == sourceAddress);
                string Saddress = saveModel.MainData["sourceAddress"].ToString();
                Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == Saddress);
                if (task != null)
                {
                    webResponseContent.Error("起点已存在任务!");
                    return Task.FromResult(webResponseContent);
                }
                Dt_Stationinfo stationinfo = _stationinfoRepository.QueryFirst(x => x.Location_state == LocationStatusEnum.Free.ObjToInt());
                if (stationinfo == null)
                {
                    webResponseContent.Error("未找到空缓存架放置!");
                    return Task.FromResult(webResponseContent);
                }
                Dt_Task tasks = _taskRepository.QueryFirst(x => x.SourceAddress == stationinfo.StationCode || x.TargetAddress == stationinfo.StationCode);
                if (tasks != null)
                {
                    webResponseContent.Error("未找到可用缓存架");
                    return Task.FromResult(webResponseContent);
                }
                //var station = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress);
                //// æŸ¥æ‰¾ä¸¤ä¸ªå¯ç”¨çš„空缓存架
                //var freeStations = _stationinfoRepository
                //    .QueryData(x => x.Location_state == LocationStatusEnum.Free.ObjToInt() && x.Enable && x.Remark == station.Remark && x.Area == station.Area)//  && x.Stationtype == station.Stationtype
                //    .Take(2) // åªå–前两个
                //    .ToList();
                //int floor = 0;
                //if (station.Area.Contains("A区"))
                //{
                //    floor = 32;
                //}
                //else
                //{
                //    floor = 128;
                //}
                //if (freeStations.Count < 2)
                //{
                //    webResponseContent.Error("未找到足够的空缓存架!");
                //    return Task.FromResult(webResponseContent);
                //}
                //// æ£€æŸ¥è¿™ä¸¤ä¸ªç¼“存架是否被任务占用
                //var stationCodes = freeStations.Select(s => s.StationCode).ToList();
                //freeStations[0].Location_state = LocationStatusEnum.Lock.ObjToInt();
                //_stationinfoRepository.UpdateData(freeStations[0]);
                //freeStations[1].Location_state = LocationStatusEnum.Lock.ObjToInt();
                //_stationinfoRepository.UpdateData(freeStations[1]);
                ////stationCodes.
                //var tasks = _taskRepository.QueryData(x => stationCodes.Contains(x.SourceAddress) || stationCodes.Contains(x.TargetAddress)).ToList();
                //if (tasks.Any())
                //{
                //    webResponseContent.Error("部分缓存架已被占用,无法使用!");
                //    return Task.FromResult(webResponseContent);
                //}
                Dt_Task dt_Task = new Dt_Task()
                {
                    TaskNum = _taskService.GetTaskNum(),
                    CreateDate = DateTime.Now,
                    Creater = "system",
                    CurrentAddress = sourceAddress,
                    SourceAddress = sourceAddress,
                    TaskState = (int)TaskInStatusEnum.InNew,
                    TaskType = (int)TaskOutboundTypeEnum.Outbound,
                    CurrentAddress = Saddress,
                    SourceAddress = Saddress,
                    TaskState = (int)TaskInStatusEnum.AGV_Queue,
                    TaskType = 0,//floor
                    Grade = 1,
                    PalletCode = "",
                    TargetAddress = stationinfo.StationCode,
                    NextAddress = stationinfo.StationCode,
                    Floor = 3,
                    TargetAddress = "",//string.Join("||", freeStations.Select(s => s.StationCode))
                    NextAddress = "",//string.Join("||", freeStations.Select(s => s.StationCode))
                    Barcode = "",
                    Roadway = "AGV",
                    WMSId = 0,
@@ -307,7 +414,7 @@
            return Task.FromResult(webResponseContent);
        }
        /// <summary>
        /// çƒ˜çƒ¤å›žç‚‰
        /// çƒ˜çƒ¤å›žç‚‰  AGV任务完成之后需更新缓存架状态
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
@@ -318,49 +425,71 @@
            {
                //通过站点表判断缓存架是那个区域去那条输送线回流口。。。。。。。。。。。
                string Saddress = saveModel.MainData["sourceAddress"].ToString();
                string Saddress1 = saveModel.MainData["sourceAddress1"].ToString();
                string Taddress = saveModel.MainData["targetAddress"].ToString();
                Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress);
                if (Saddress == Saddress1)
                {
                    webResponseContent.Error("同一缓存架不能扫描两次!");
                    return Task.FromResult(webResponseContent);
                }
                Dt_Stationinfo Stationinfo = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress && x.Enable);
                Dt_Stationinfo Stationinfo1 = _stationinfoRepository.QueryFirst(x => x.StationCode == Saddress1 && x.Enable);
                if (Stationinfo == null || Stationinfo1 == null)
                {
                    webResponseContent.Error("未找到此起点缓存架,或此缓存架已被禁用!");
                    return Task.FromResult(webResponseContent);
                }
                Stationinfo.Location_state = LocationStatusEnum.Lock.ObjToInt();
                _stationinfoRepository.UpdateData(Stationinfo);
                Stationinfo1.Location_state = LocationStatusEnum.Lock.ObjToInt();
                _stationinfoRepository.UpdateData(Stationinfo1);
                Dt_Task dt_Task = new Dt_Task();
                {
                dt_Task.TaskNum = _taskService.GetTaskNum();
                dt_Task.CreateDate = DateTime.Now;
                dt_Task.Creater = "system";
                dt_Task.CurrentAddress = Saddress;
                dt_Task.SourceAddress = Saddress;
                    dt_Task.CurrentAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
                    dt_Task.SourceAddress = Stationinfo.StationCode + "||" + Stationinfo1.StationCode;
                dt_Task.TaskState = (int)TaskInStatusEnum.InNew;
                dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                    //dt_Task.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                dt_Task.Grade = 1;
                dt_Task.PalletCode = "";
                if (Stationinfo.Area == "正极")
                    if (Stationinfo.Area == "A区")
                {
                    dt_Task.TargetAddress = "正极回流输送线入口";
                        dt_Task.TargetAddress = "ZJXL-KPHLS001";
                        dt_Task.NextAddress = "ZJXL-KPHLX001";
                        dt_Task.TaskType = 64;
                }
                else
                {
                    dt_Task.TargetAddress = "负极回流输送线入口";
                        dt_Task.TargetAddress = "FJXL-KPHLS001";
                        dt_Task.NextAddress = "FJXL-KPHLX001";
                        dt_Task.TaskType = 256;
                }
                dt_Task.NextAddress = dt_Task.TargetAddress;
                dt_Task.Barcode = "";
                dt_Task.Roadway = "AGV";
                dt_Task.WMSId = 0;
                dt_Task.Remark = "烘烤回炉";
                    dt_Task.Floor = 3;
                }
                var isTrue = _taskRepository.AddData(dt_Task);
                Dt_Task dt_Tasks = new Dt_Task();
                {
                dt_Tasks.TaskNum = _taskService.GetTaskNum();
                dt_Tasks.CreateDate = DateTime.Now;
                dt_Tasks.Creater = "system";
                if (Stationinfo.Area == "正极")
                    if (Stationinfo.Area == "A区")
                {
                    dt_Task.CurrentAddress = "正极回流输送线出口";
                        dt_Tasks.CurrentAddress = "ZJXL-KPHLX001";
                }
                else
                {
                    dt_Task.CurrentAddress = "负极回流输送线出口";
                        dt_Tasks.CurrentAddress = "FJXL-KPHLX001";
                }
                dt_Tasks.SourceAddress = dt_Task.CurrentAddress;
                    dt_Tasks.SourceAddress = dt_Tasks.CurrentAddress;
                dt_Tasks.TaskState = (int)TaskInStatusEnum.InPending;
                dt_Tasks.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                    dt_Tasks.TaskType = 8;
                dt_Tasks.Grade = 1;
                dt_Tasks.PalletCode = "";
                dt_Tasks.TargetAddress = Taddress;
@@ -369,7 +498,8 @@
                dt_Tasks.Roadway = "AGV";
                dt_Tasks.WMSId = 0;
                dt_Tasks.Remark = "烘烤回炉";
                var isTrue = _taskRepository.AddData(dt_Task);
                    dt_Task.Floor = 3;
                }
                var isTrue1 = _taskRepository.AddData(dt_Tasks);
                webResponseContent.OK("任务下发成功!");
            }