1
huangxiaoqiang
2025-05-20 d4d524ace9ec2befa6bcd9321384daf05c68d415
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs
@@ -1,35 +1,24 @@
using LogLibrary.Log;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MimeKit;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using Org.BouncyCastle.Tls;
using System;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using WIDESEA_Common;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Middlewares;
using WIDESEA_DTO.AGV;
using WIDESEA_DTO;
using WIDESEA_IServices;
using WIDESEA_IStorageBasicRepository;
using WIDESEA_IStorageSocketServices;
using WIDESEA_IStorageTaskRepository;
using WIDESEA_IStorageTaskServices;
using WIDESEA_Model.Models.AGV;
using WIDESEA_Model.Models;
using WIDESEAWCS_BasicInfoRepository;
//using static MailKit.Telemetry;
using WIDESEAWCS_Model.Models;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using WIDESEA_Core.BaseRepository;
using AutoMapper;
using Mapster;
@@ -58,8 +47,8 @@
        public SocketClientService(/*IDt_TaskService taskService*/IDt_TaskRepository TaskRepository, IDt_StationManagerRepository stationManagerRepository, ILogger<SocketClientService> logger)
        {
            //_taskService = taskService;
            BaseDal= TaskRepository;
            _stationManagerRepository= stationManagerRepository;
            BaseDal = TaskRepository;
            _stationManagerRepository = stationManagerRepository;
            _logger = logger;
        }
@@ -153,7 +142,7 @@
                    }
                    else
                    {
                         LogFactory.GetLog("Socket接收数据").Error(true, "无效报文格式");
                        LogFactory.GetLog("Socket接收数据").Error(true, "无效报文格式");
                    }
                }
                catch
@@ -172,7 +161,7 @@
                    ReceiveCommandResponse(x);
                    break;
                case "906":
                    AGVJobStartOrEndResponse(x.Substring(21, 1),x.Substring(22,1));
                    AGVJobStartOrEndResponse(x.Substring(21, 1), x.Substring(22, 1));
                    break;
                case "902":
                    DataReportResponse(x.Substring(21, 1));
@@ -249,7 +238,7 @@
            int sum = 0;
            try
            {
                for (int i = 0; i < x.Length-2; i++)
                for (int i = 0; i < x.Length - 2; i++)
                {
                    sum += x[i];
                }
@@ -626,12 +615,24 @@
            {
                //OK
                case "0":
                    //UpdateTaskLocation(parseMessage);
                    InsertWMSTask(parseMessage);
                    Thread.Sleep(500);
                    //915
                    JobReady("0");
                    break;
                    var location = _locationRepository.QueryFirst(x => x.LocationCode == parseMessage.body.ToLocation);
                    if (location == null)
                    {
                        return;
                    }
                    if (location.LocationStatus == (int)LocationEnum.Free)
                    {
                        InsertWMSTask(parseMessage);
                        Thread.Sleep(500);
                        //915
                        JobReady("0");
                        return;
                    }
                    else
                    {
                        //todo货位有货重复入库
                        return;
                    }
                //NG
                case "1":
                    break;
@@ -696,7 +697,7 @@
                        {
                            JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode);
                        }
                       CompleteInboundTask(task);
                        CompleteInboundTask(task);
                        break;
                    case (int)TaskOutboundTypeEnum.Outbound:
                        //出库
@@ -742,15 +743,29 @@
                {
                    //OK
                    case "0":
                        var task = InsertWMSTask(parseMessage);
                        BaseDal.AddData(task);
                        InsertAGVTask(task);
                        Thread.Sleep(500);
                        //915
                        JobReady("0");
                        Thread.Sleep(500);
                        //104
                        DeviceReceiveJobResponse("0");
                        var location = _locationRepository.QueryFirst(x => x.LocationCode == parseMessage.body.ToLocation);
                        if (location == null)
                        {
                            return;
                        }
                        if (location.LocationStatus == (int)LocationEnum.InStock)
                        {
                            var task = InsertWMSTask(parseMessage);
                            BaseDal.AddData(task);
                            InsertAGVTask(task);
                            Thread.Sleep(500);
                            //915
                            JobReady("0");
                            Thread.Sleep(500);
                            //104
                            DeviceReceiveJobResponse("0");
                        }
                        else
                        {
                            //todo货位无货空出库
                            return;
                        }
                        break;
                    default:
                        break;
@@ -792,7 +807,7 @@
                    var taskStation = BaseDal.QueryFirst(x => x.SourceAddress == item.stationName || x.TargetAddress == item.stationName);
                    outStationStatus.Add(new OutStationStatus()
                    {
                        StationName = item.stationName,
                        StationName = item.HostName,
                        StationEnable = station.StationEnable == "1" ? "0" : "1",
                        IsDistributionTask = taskStation == null ? "0" : "1",
                        Spare1 = "00"
@@ -875,11 +890,13 @@
        /// </summary>
        public void DeviceStatusReportRequest()
        {
            AGVStatusRespone status = GetAGVStatus();
            HOSTAGVStatus AgvStatus = new HOSTAGVStatus()
            {
                RuntimeStatus = "R",
                AutoStatus = "1",
                Ready = "1"
                RuntimeStatus = CapitalizeFirstLetter(status.RuntimeStatus),
                AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0",
                Ready = status.AutoStatus == "MaintenanceMode" ? "0" : "1",
            };
            string axis = "000000";
            DeviceStatusReportResponse(AgvStatus, axis, axis);
@@ -1117,8 +1134,8 @@
            {
                d_task_type = task.TaskType == (int)TaskTypeEnum.Inbound ? 1 : 2,
                d_floor = 1,
                d_involed1 = task.SourceAddress,
                d_involed2 = task.TargetAddress,
                d_involed1 = InsertHyphenEveryTwoChars(task.SourceAddress),
                d_involed2 = InsertHyphenEveryTwoChars(task.TargetAddress),
                d_involed5 = task.TaskNum,
            };
@@ -1156,7 +1173,7 @@
        public StationStatus GetStationStatus(string stationName)
        {
            string urlnew = url + "/ilns/strl/getStat";
            string urlnew = url + "/ilns/strl/getState";
            var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { strlName = stationName }.ToJson())).Result;
            return JsonConvert.DeserializeObject<StationStatus>(result.ToString());
        }
@@ -1170,7 +1187,29 @@
            char firstChar = s[0];
            return char.ToUpper(firstChar).ToString();
        }
        public string InsertHyphenEveryTwoChars(string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return input;
            }
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < input.Length; i += 2)
            {
                // æ·»åŠ ä¸¤ä¸ªå­—ç¬¦
                result.Append(input.Substring(i, 2));
                // å¦‚果不是最后两个字符,添加一个连字符
                if (i + 2 < input.Length)
                {
                    result.Append('-');
                }
            }
            return result.ToString();
        }
        #region å¤–部接口方法
        public WebResponseContent CompleteInboundTask(Dt_Task task)