xiaojiao
2026-01-24 c5f01e9a882b16f534166d033312c5c8ba8d94dd
ÏîÄ¿´úÂë/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/InboundArea/InboundStationAction.cs
@@ -1,13 +1,17 @@
using HslCommunication;
using Microsoft.EntityFrameworkCore;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Common.LogEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.Tools;
using WIDESEA_Core.Extensions;
using WIDESEA_Core.Utilities;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Services;
@@ -21,6 +25,9 @@
    public partial class InboundAreaDispatch
    {
        public static string[] InboundStationNo = new string[] { "50301", "50302", "50303", "50304", "50305", "50306", "50307"};
        private static string CLOutStationNo = "30302";
        public static void InboundStationAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
        {
            foreach (var item in InboundStationNo)
@@ -77,6 +84,12 @@
                int taskNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), station).ToString());
                string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), station).ToString();
                bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), station).ToString());
                bool SB = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_DeviceNormal.ToString(), station).ToString());
                if (!SB)
                {
                    return;
                }
                if (!flag)
                    return;
                Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(x => x.wcstask_taskNumber == taskNumber && x.wcstask_barcode == barcode);
@@ -90,7 +103,7 @@
                    string toLayer = wcsInfo.wcstask_endLocation.Substring(0, 2);
                    string stationLayer = station.Substring(3, 2);
                    if (toLayer == stationLayer)
                    if (toLayer == stationLayer)
                    {
                        string state = string.Empty;
                        //空托和实托的入库
@@ -99,30 +112,50 @@
                              || wcsInfo.wcstask_type == TaskType.TaskType_ErrorCheckBackIn.ToString()
                                || wcsInfo.wcstask_type == TaskType.TaskType_CheckBackIn.ToString()
                            )
                        {
                            state = TaskState.TaskState_ConveyorLineFinish.ToString();
                        }
                        //测量回库
                        else if (wcsInfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString() && wcsInfo.wcstask_state == TaskState.TaskState_Measure_Back_Line_Executing.ToString())
                        {
                            state = TaskState.TaskState_Measure_Back_Line_Finished.ToString();
                        }
                        WebResponseContent content = WMSApi.PostTaskStateToWMS(barcode, state);
                        if (content.Status)
                        {
                            Dt_TaskRGVinfo _tmpRgvInfo = taskRGVinfoRepository.FindFirst(x => x.rgvtask_barCode == wcsInfo.wcstask_barcode);
                            Dt_TaskRGVinfo _tmpRgvInfo = taskRGVinfoRepository.FindFirst(x => x.rgvtask_barCode == wcsInfo.wcstask_barcode || x.rgvtask_wcsTaskNumber == wcsInfo.wcstask_taskNumber);
                            if (_tmpRgvInfo == null)
                            {
                                //在此生成RGV任务
                                Dt_TaskRGVinfo rgvInfo = new Dt_TaskRGVinfo();
                                rgvInfo.rgvtask_taskId = GetTaskNumber.GetRgvTaskNumber(taskRGVinfoRepository).ToString();
                                rgvInfo.rgvtask_taskType = RGVTaskType.RgvTaskType_Inbound.ToString();
                                rgvInfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Wait_Send.ToString();
                                rgvInfo.rgvtask_priorityCode = wcsInfo.wcstask_grade.ToString();
                                rgvInfo.rgvtask_startNode = station;
                                rgvInfo.rgvtask_endNode = wcsInfo.wcstask_endLocation;
                                rgvInfo.rgvtask_wcsTaskNumber = wcsInfo.wcstask_taskNumber;
                                rgvInfo.rgvtask_barCode = wcsInfo.wcstask_barcode;
                                rgvInfo.rgvtask_msgTime = DateTime.Now;
                                rgvInfo.rgvtask_areaCode = "InboundArea";
                                taskRGVinfoRepository.Add(rgvInfo, true);
                                //LogRecord.WriteLog(LogEnum.InBound, "因为担心rgv会重复生成任");
                                try
                                {
                                    // åŠ ä¸ªæ—¥å¿—
                                    // æ‰˜ç›˜å— ä»»åŠ¡å· wcs任务状态
                                    //LogRecord.WriteLog(LogEnum.RGV, $"接受到RGV上报的任务状态:任务号:{taskId},小车编号:{rgvId},任务状态:{taskStatus}");
                                    LogRecord.WriteLog(LogEnum.InBound, $"因为担心rgv会重复生成任务,这里要做一个记录,托盘码【{wcsInfo.wcstask_barcode}】 ä»»åŠ¡å·ã€{wcsInfo.wcstask_taskNumber}】,任务状态:【{wcsInfo.wcstask_state}】");
                                    //在此生成RGV任务
                                    Dt_TaskRGVinfo rgvInfo = new Dt_TaskRGVinfo();
                                    rgvInfo.rgvtask_taskId = GetTaskNumber.GetRgvTaskNumber(taskRGVinfoRepository).ToString();
                                    rgvInfo.rgvtask_taskType = RGVTaskType.RgvTaskType_Inbound.ToString();
                                    rgvInfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Wait_Send.ToString();
                                    rgvInfo.rgvtask_priorityCode = wcsInfo.wcstask_grade.ToString();
                                    rgvInfo.rgvtask_startNode = station;
                                    rgvInfo.rgvtask_endNode = wcsInfo.wcstask_endLocation;
                                    rgvInfo.rgvtask_wcsTaskNumber = wcsInfo.wcstask_taskNumber;
                                    rgvInfo.rgvtask_barCode = wcsInfo.wcstask_barcode;
                                    rgvInfo.rgvtask_msgTime = DateTime.Now;
                                    rgvInfo.rgvtask_areaCode = "InboundArea";
                                    taskRGVinfoRepository.Add(rgvInfo, true);
                                }
                                catch (Exception x)
                                {
                                    string str = $"这里报错了 åº”该是添加了重复的托盘号,托盘码【{wcsInfo.wcstask_barcode}】" +
                                        $"任务号【{wcsInfo.wcstask_taskNumber}】,任务状态:【{wcsInfo.wcstask_state}】错误信息【{x.Message}】";
                                    LogRecord.WriteLog(LogEnum.Errer, str.ToString());
                                    throw;
                                }
                            }
                            wcsInfo.wcstask_state = state;
                            wcsInfo.wcstask_dispatcherTime = DateTime.Now;
@@ -143,7 +176,7 @@
        }
        //public static
        /// <summary>
        /// å‡ºåº“测量任务,当穿梭车放货后的处理逻辑
        /// </summary>
@@ -174,6 +207,15 @@
                    return;
                }
                bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), CLOutStationNo).ToString());
                bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), CLOutStationNo).ToString());
                if (flag || !noflag)
                {
                    return;
                }
                //string lineCode = "Measure_O";
                int taskNumber = taskWCSinfo.wcstask_taskNumber;
                //查看线体状态,准备给线体下发任务信息  è¯»å–逻辑控制值