wangxinhui
2025-07-07 a6df2a29e7424ce327776fd3880ae514d8ca8c9f
更新
已重命名1个文件
已修改6个文件
已删除9个文件
已添加7个文件
1842 ■■■■■ 文件已修改
项目代码/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs 295 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineCPDBName.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineDBName.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineFLDB.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_RgvCPDBName.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineDBName.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineFLDB.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_RgvCPDBName.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneAutoStatusEnum.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneStatusEnum.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneWorkStatusEnum.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineEmptyBack_CP.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CP.cs 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPA.cs 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPB.cs 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPC.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/ConveyorLineJob_CPD.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/RGVJob_CP.cs 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WCSServices/WIDESEAWCS_Tasks/成品仓/StackerCraneJob_CP.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -43,24 +43,6 @@
        SC_Finish = 220,
        /// <summary>
        /// è¾“送线待执行
        /// </summary>
        [Description("输送线待执行")]
        Line_Execute = 400,
        /// <summary>
        /// è¾“送线执行中
        /// </summary>
        [Description("输送线执行中")]
        Line_Executing = 410,
        /// <summary>
        /// è¾“送线完成
        /// </summary>
        [Description("输送线完成")]
        Line_Finish = 420,
        /// <summary>
        /// AGV待执行
        /// </summary>
        [Description("AGV待执行")]
@@ -69,7 +51,7 @@
        /// AGV取货中
        /// </summary>
        [Description("AGV取货中")]
        AGV_Takeing =305,
        AGV_Takeing = 305,
        /// <summary>
        /// AGV执行中
        /// </summary>
@@ -92,6 +74,34 @@
        /// </summary>
        [Description("AGV完成")]
        AGV_Finish = 330,
        /// <summary>
        /// è¾“送线待执行
        /// </summary>
        [Description("输送线待执行")]
        Line_Execute = 400,
        /// <summary>
        /// è¾“送线执行中
        /// </summary>
        [Description("输送线执行中")]
        Line_Executing = 410,
        /// <summary>
        /// è¾“送线完成
        /// </summary>
        [Description("输送线完成")]
        Line_Finish = 420,
        /// <summary>
        /// RGV待执行
        /// </summary>
        [Description("RGV待执行")]
        RGV_Execute = 500,
        /// <summary>
        /// RGV执行中
        /// </summary>
        [Description("RGV执行中")]
        RGV_Executing = 510,
        /// <summary>
        /// ä»»åŠ¡å®Œæˆ
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -23,6 +23,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
@@ -217,14 +218,14 @@
                        if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                        {
                            stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == item.SourceAddress || x.StationDeviceCode == item.SourceAddress);
                            if (stationManger==null && task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
                            {
                                stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode==task.SourceAddress);
                                //转换成品仓起点站台
                                item.SourceAddress = stationManger.StationCode;
                                task.CurrentAddress = stationManger.StationCode;
                                task.SourceAddress = stationManger.StationCode;
                            }
                            //if (stationManger==null && task.TaskType==TaskTypeEnum.InProduct.ObjToInt())
                            //{
                            //    stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode==task.SourceAddress);
                            //    //转换成品仓起点站台
                            //    item.SourceAddress = stationManger.StationCode;
                            //    task.CurrentAddress = stationManger.StationCode;
                            //    task.SourceAddress = stationManger.StationCode;
                            //}
                        }
                        else
                        {
@@ -244,10 +245,11 @@
                        if (routers.Count == 1)
                        {
                            if (taskTypeGroup == TaskTypeGroup.InboundGroup && item.TargetAddress == stationManger.StackerCraneCode)
                            if (taskTypeGroup == TaskTypeGroup.InboundGroup)
                            {
                                task.CurrentAddress = router.StartPosi;
                                task.NextAddress = router.NextPosi;
                                task.DeviceCode = stationManger.StationDeviceCode;
                                task.DeviceCode = router.ChildPosiDeviceCode;
                            }
                            else if (item.TaskType == TaskTypeEnum.MesMatReturn.ObjToInt() && !router.IsEnd)
                            {
@@ -439,21 +441,34 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                string address = AppSettings.Get("WMSApiAddress");
                if (string.IsNullOrEmpty(address))
                //string address = AppSettings.Get("WMSApiAddress");
                //if (string.IsNullOrEmpty(address))
                //{
                //    return WebResponseContent.Instance.Error($"未找到WMSApi地址");
                //}
                //string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
                //WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
                //if (responseContent != null && responseContent.Status && responseContent.Data != null)
                //{
                //    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
                //    if (taskDTO != null)
                //    {
                WMSTaskDTO? taskDTO = new WMSTaskDTO()
                {
                    return WebResponseContent.Instance.Error($"未找到WMSApi地址");
                }
                string responseStr = HttpHelper.Get($"{address}/api/Task/DeviceRequestInboundTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}");
                WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr);
                if (responseContent != null && responseContent.Status && responseContent.Data != null)
                {
                    WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString());
                    if (taskDTO != null)
                    {
                        content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                    }
                }
                    Id = 1,
                    TaskNum = DateTime.Now.ToString("mmss").ObjToInt(),
                    PalletCode="",
                    RoadWay="",
                    TaskType=TaskTypeEnum.InProduct.ObjToInt(),
                    TaskStatus=TaskStatusEnum.New.ObjToInt(),
                    SourceAddress= sourceAddress,
                    TargetAddress="",
                    WarehouseId=1,
                    Grade=0,
                };
                content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO });
                //    }
                //}
            }
            catch (Exception ex)
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService_Operate.cs
@@ -99,11 +99,11 @@
            BaseDal.UpdateData(task);
            string address = AppSettings.Get("WMSApiAddress");
            if (!string.IsNullOrEmpty(address))
            {
                HttpHelper.Post($"{address}/api/Task/UpdateTaskInfo", task.Serialize());
            }
            //string address = AppSettings.Get("WMSApiAddress");
            //if (!string.IsNullOrEmpty(address))
            //{
            //    HttpHelper.Post($"{address}/api/Task/UpdateTaskInfo", task.Serialize());
            //}
            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, stringBuilder.ToString());
        }
    }
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/ConveyorLineTaskCommand.cs
@@ -36,290 +36,71 @@
        public int TaskNum { get; set; }
    }
    public class R_ConveyorLineInfo : DeviceCommand
    {
        /// <summary>
        /// ç«™å°ç¼–号
        /// </summary>
        public short ConveyorNo { get; set; }
        /// <summary>
        /// çŠ¶æ€
        /// </summary>
        public byte Status { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public byte Undefined { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        public short StartPos { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€
        /// </summary>
        public short EndPos { get; set; }
        /// <summary>
        /// é‡é‡
        /// </summary>
        public short GoodsWeight { get; set; }
        /// <summary>
        /// è´§ç‰©ç±»åž‹
        /// </summary>
        public short GoodsType { get; set; }
        /// <summary>
        /// 0静止1前进2后退3上升/顺时针旋转4下降/逆时针旋转
        /// </summary>
        public short RunStatus { get; set; }
        private string _barcode;
        /// <summary>
        /// æ¡ç 
        /// </summary>
        [DataLength(20)]
        public string Barcode
        {
            get { return _barcode; }
            set { _barcode = value.Replace("\0", "").Replace("\\0", ""); }
        }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public short Spare1 { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public short Spare2 { get; set; }
        /// <summary>
        /// äº¤äº’信号
        /// </summary>
        public byte Signal { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public byte Undefined2 { get; set; }
    }
    public class R_ConveyorLineCPInfo : DeviceCommand
    {
        /// <summary>
        /// åˆ°ä½æŒ‡ä»¤
        /// å¿ƒè·³
        /// </summary>
        public short ConveyArrivaled { get; set; }
        public short Heart { get; set; }
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// é¢„ç•™
        /// </summary>
        public short StartPos { get; set; }
        public short Reserve { get; set; }
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// çŠ¶æ€
        /// </summary>
        public short EndPos { get; set; }
        public short StatusPV { get; set; }
        /// <summary>
        /// å‘½ä»¤
        /// </summary>
        public short Command { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNo { get; set; }
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        /// <summary>
        [DataLength(20)]
        public string Barcode { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [DataLength(20)]
        public string TaskNum { get; set; }
        /// <summary>
        /// ç±»åž‹
        /// </summary>
        public short WorkType { get; set; }
        /// <summary>
        /// æ¨¡å¼
        /// </summary>
        public short WorkMode { get; set; }
        /// <summary>
        /// æ ¡éªŒä½
        /// </summary>
        public short CheckPos { get; set; }
        [DataLength(10)]
        public string PalletCode { get; set; }
    }
    public class R_ConveyorLineGMInfo : DeviceCommand
    public class R_RGVCPInfo : DeviceCommand
    {
        /// <summary>
        /// ç®±å·
        /// æ¨¡å¼<br/>
        /// 1手动<br/>
        /// 2ç»´ä¿®<br/>
        /// 3半自动<br/>
        /// 4自动<br/>
        /// 5联机自动<br/>
        /// </summary>
        public short Mode { get; set; }
        /// <summary>
        [DataLength(120)]
        public string Boxcode { get; set; }
    }
    public class R_ConveyorLineFLInfo : DeviceCommand
    {
        /// <summary>
        /// æ‰˜ç›˜å·
        /// çŠ¶æ€<br/>
        /// 0空闲<br/>
        /// 1有任务<br/>
        /// </summary>
        public short State { get; set; }
        /// <summary>
        [DataLength(20)]
        public string Barcode { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// RGV接收任务号<br/>
        /// </summary>
        [DataLength(20)]
        public string TaskNum { get; set; }
    }
    public class R_ConveyorLineStatus
    {
        public short RgvTask { get; set; }
        /// <summary>
        /// æ¡æ‰‹ä¿¡å·
        /// RGV结束任务号<br/>
        /// </summary>
        [BoolIndex(0)]
        public bool HandShake { get; set; }
        public short RgvEndTask { get; set; }
        /// <summary>
        /// 1联机 0脱机
        /// RGV上次任务号<br/>
        /// </summary>
        [BoolIndex(1)]
        public bool Online { get; set; }
        public short RgvLastTask { get; set; }
        /// <summary>
        /// 1空闲 0繁忙
        /// ä»»åŠ¡çŠ¶æ€åé¦ˆ<br/>
        /// </summary>
        [BoolIndex(2)]
        public bool Free { get; set; }
        public short TaskDone { get; set; }
        /// <summary>
        /// 1有货 0无货
        /// å¿ƒè·³<br/>
        /// </summary>
        [BoolIndex(3)]
        public bool Goods { get; set; }
        /// <summary>
        /// 1故障 0正常
        /// </summary>
        [BoolIndex(4)]
        public bool Alarm { get; set; }
        /// <summary>
        /// 1请求补盘 0无
        /// </summary>
        [BoolIndex(5)]
        public bool RequestPakcPallet { get; set; }
        /// <summary>
        /// 1请求拆盘 0无
        /// </summary>
        [BoolIndex(6)]
        public bool RequestUnpackPellet { get; set; }
    }
    public class ConveyorLineSignal
    {
        /// <summary>
        /// è¯·æ±‚信号
        /// </summary>
        [BoolIndex(0)]
        public bool STB { get; set; }
        /// <summary>
        /// å“åº”信号
        /// </summary>
        [BoolIndex(1)]
        public bool ACK { get; set; }
    }
    public class W_ConveyorLineInfo : DeviceCommand
    {
        /// <summary>
        /// ç«™å°ç¼–号
        /// </summary>
        public short ConveyorNo { get; set; }
        public byte Operate { get; set; }
        public byte Undefined { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public int TaskNum { get; set; }
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// </summary>
        public short StartPos { get; set; }
        /// <summary>
        /// ç›®æ ‡åœ°å€
        /// </summary>
        public short EndPos { get; set; }
        /// <summary>
        /// è´§ç‰©ç±»åž‹
        /// </summary>
        public short GoodsType { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public short Spare1 { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public short Spare2 { get; set; }
        /// <summary>
        /// äº¤äº’信号
        /// </summary>
        public byte Signal { get; set; }
        /// <summary>
        /// é¢„ç•™
        /// </summary>
        public byte Undefined2 { get; set; }
    }
    public class W_ConveyorLineOperate
    {
        /// <summary>
        /// æ¡æ‰‹ä¿¡å·
        /// </summary>
        [BoolIndex(0)]
        public bool HandShake { get; set; }
        /// <summary>
        /// å¤ä½æŠ¥è­¦
        /// </summary>
        [BoolIndex(1)]
        public bool ClearAlarm { get; set; }
        /// <summary>
        /// é€€å›ž
        /// </summary>
        [BoolIndex(2)]
        public bool Return { get; set; }
        public short HeartBeat { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineCPDBName.cs
@@ -9,38 +9,28 @@
    public enum R_ConveyorLineCPDB
    {
        /// <summary>
        /// åˆ°ä½æŒ‡ä»¤
        /// å‘½ä»¤
        /// </summary>
        ConveyArrivaled,
        Command,
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// ç›®æ ‡åœ°å€
        /// </summary>
        StartPos,
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// </summary>
        EndPos,
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
        StatusPV,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNum,
        TaskNo,
        /// <summary>
        /// ç±»åž‹
        /// é¢„ç•™
        /// </summary>
        WorkType,
        Reserve,
        /// <summary>
        /// æ¨¡å¼
        /// 1入库模式
        /// 2生产模式
        /// å¿ƒè·³
        /// </summary>
        WorkMode,
        Heart,
        /// <summary>
        /// æ ¡éªŒä½
        /// æ‰˜ç›˜æ¡ç 
        /// </summary>
        CheckPos
        PalletCode
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineDBName.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_ConveyorLineFLDB.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/R_RgvCPDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public enum R_RgvCPDB
    {
        /// <summary>
        /// æ¨¡å¼<br/>
        /// 1手动<br/>
        /// 2ç»´ä¿®<br/>
        /// 3半自动<br/>
        /// 4自动<br/>
        /// 5联机自动<br/>
        /// </summary>
        Mode,
        /// <summary>
        /// çŠ¶æ€<br/>
        /// 0空闲<br/>
        /// 1有任务<br/>
        /// </summary>
        State,
        /// <summary>
        /// RGV接收任务号<br/>
        /// </summary>
        RgvTask,
        /// <summary>
        /// RGV结束任务号<br/>
        /// </summary>
        RgvEndTask,
        /// <summary>
        /// RGV上次任务号<br/>
        /// </summary>
        RgvLastTask,
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€åé¦ˆ<br/>
        /// </summary>
        TaskDone,
        /// <summary>
        /// å¿ƒè·³<br/>
        /// </summary>
        HeartBeat
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineCPDBName.cs
@@ -9,36 +9,24 @@
    public enum W_ConveyorLineCPDB
    {
        /// <summary>
        /// ç§»åŠ¨æŒ‡ä»¤
        /// å‘½ä»¤
        /// </summary>
        ConveyArrival,
        Command,
        /// <summary>
        /// èµ·å§‹åœ°å€
        /// ç›®æ ‡åœ°å€
        /// </summary>
        StartPos,
        /// <summary>
        /// ç»ˆç‚¹åœ°å€
        /// </summary>
        EndPos,
        /// <summary>
        /// æ‰˜ç›˜å·
        /// </summary>
        Barcode,
        TargetAddress,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        TaskNum,
        TaskNo,
        /// <summary>
        /// ç±»åž‹
        /// é¢„ç•™
        /// </summary>
        WorkType,
        Reserve,
        /// <summary>
        /// å­æ‰˜ç±»åž‹
        /// å¿ƒè·³
        /// </summary>
        WorkMode,
        /// <summary>
        /// æ ¡éªŒä½
        /// </summary>
        CheckPos
        Heart
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineDBName.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_ConveyorLineFLDB.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ConveyorLineJob/W_RgvCPDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.ConveyorLineJob
{
    public enum W_RgvCPDB
    {
        /// <summary>
        /// ä»»åŠ¡å·<br/>
        /// </summary>
        WcsTask,
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹<br/>
        /// 1定位<br/>
        /// 2取货<br/>
        /// 3放货<br/>
        /// 4取放货<br/>
        /// </summary>
        TaskType,
        /// <summary>
        /// æ‰§è¡Œå·¥ä½<br/>
        /// 1:1工位<br/>
        /// 2:2工位<br/>
        /// 3:3工位<br/>
        /// 4:12工位<br/>
        /// 5:13工位<br/>
        /// 6:23工位<br/>
        /// 7:123工位<br/>
        /// </summary>
        WorkStation,
        /// <summary>
        /// å–货地址1<br/>
        /// </summary>
        Qu1,
        /// <summary>
        /// å–货地址2<br/>
        /// </summary>
        Qu2,
        /// <summary>
        /// å–货地址2<br/>
        /// </summary>
        Qu3,
        /// <summary>
        /// æ”¾è´§åœ°å€1<br/>
        /// </summary>
        Fang1,
        /// <summary>
        /// æ”¾è´§åœ°å€2<br/>
        /// </summary>
        Fang2,
        /// <summary>
        /// æ”¾è´§åœ°å€3<br/>
        /// </summary>
        Fang3,
        /// <summary>
        /// å¿ƒè·³<br/>
        /// </summary>
        HearBeat,
        /// <summary>
        /// ä¸‹å‘/完成任务标识<br/>
        /// 1确认任务下发<br/>
        /// 2确认任务完成<br/>
        /// </summary>
        TaskReceivedDone,
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneAutoStatusEnum.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneStatusEnum.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/StackerCraneJob/StackerCraneWorkStatusEnum.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineEmptyBack_CP.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CP.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPA.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_CPA : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public ConveyorLineJob_CPA(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.Command == 2 && conveyorLineInfoRead.TaskNo > 0)
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == conveyorLineInfoRead.TaskNo && x.NextAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                            if (task != null)
                            {
                                //分配货位
                                string local = "SC01_CP-001-064-001-01";
                                task.CurrentAddress = item.StackerCraneStationCode;
                                task.TargetAddress= local;
                                task.NextAddress = local;
                                task.DeviceCode = item.StackerCraneCode;
                                _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute);
                                WriteError(item.StationName, $"任务号:{task.TaskNum}进行堆垛机入库");
                                //string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, "AGV_CP");
                                //if (string.IsNullOrEmpty(locationCode) && task.TaskType != TaskTypeEnum.EmptyProductBack.ObjToInt())
                                //{
                                //    WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                //    continue;
                                //}
                            }
                        }
                    }
                    else
                    {
                        WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
                    }
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPB.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_CPB : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public ConveyorLineJob_CPB(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (deviceProRead != null && deviceProWrite!=null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.Command == 6 && conveyorLineInfoRead.TaskNo>0 && !string.IsNullOrEmpty(conveyorLineInfoRead.PalletCode))
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum== conveyorLineInfoRead.TaskNo && x.CurrentAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.Line_Execute.ObjToInt() && x.DeviceCode==device.DeviceCode);
                            if (task != null)
                            {
                                //分配巷道 å­˜å…¥æ‰˜ç›˜æ•°æ®
                                List<Dt_Router> routers = _routerService.QueryNextRoutes(item.StationCode, "SC01_CP", task.TaskType);
                                Dt_Router? router = routers.FirstOrDefault();
                                if (routers == null || routers.Count == 0 || router == null)
                                {
                                    WriteError(item.StationName, $"未找到对应路由信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    continue;
                                }
                                if (routers.Count > 1)
                                {
                                    WriteError(item.StationName, $"路由信息配置错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    continue;
                                }
                                device.SetValue(W_ConveyorLineCPDB.TargetAddress, router.NextPosi, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.TaskNo, task.TaskNum, item.StationCode);
                                device.SetValue(W_ConveyorLineCPDB.Command, 1, item.StationCode);
                                task.NextAddress=router.NextPosi;
                                task.PalletType = 1;
                                task.PalletCode = conveyorLineInfoRead.PalletCode;
                                task.Roadway = "SC01_CP";
                                task.DeviceCode = router.ChildPosiDeviceCode;
                                _taskService.UpdateTask(task, TaskStatusEnum.Line_Executing);
                                WriteError(item.StationName, $"任务号{conveyorLineInfoRead.TaskNo}下一步");
                                //string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, "AGV_CP");
                                //if (string.IsNullOrEmpty(locationCode) && task.TaskType != TaskTypeEnum.EmptyProductBack.ObjToInt())
                                //{
                                //    WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                //    continue;
                                //}
                            }
                        }
                    }
                    else
                    {
                        WriteError(item.StationName, $"未找到设备子编号{item.StationCode}的协议信息");
                    }
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPC.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_CPC : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public ConveyorLineJob_CPC(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).Distinct().ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    if (item.StationType == StationTypeEnum.StationType_InStartAndOutEnd.ObjToInt() && deviceProRead != null)
                    {
                        R_ConveyorLineCPInfo conveyorLineInfoRead = device.Communicator.ReadCustomer<R_ConveyorLineCPInfo>(deviceProRead.DeviceProAddress);
                        if (conveyorLineInfoRead.StatusPV == 3 && conveyorLineInfoRead.Command == 11)
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() || x.TaskState == TaskStatusEnum.RGV_Executing.ObjToInt() || x.TaskState == TaskStatusEnum.New.ObjToInt()));
                            if (task == null)
                            {
                                //获取站台
                                WebResponseContent content = _taskService.RequestWMSTaskSimple("", item.StationCode);
                                //string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, "AGV_CP");
                                //if (string.IsNullOrEmpty(locationCode) && task.TaskType != TaskTypeEnum.EmptyProductBack.ObjToInt())
                                //{
                                //    WriteError(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                //    continue;
                                //}
                                if (content.Status)
                                {
                                    Dt_Task taskNew = _taskRepository.QueryFirst(x => x.SourceAddress == item.StationCode && _taskService.TaskInboundTypes.Contains(x.TaskType) && (x.TaskState == TaskStatusEnum.New.ObjToInt()));
                                    if (taskNew != null)
                                    {
                                        _taskService.UpdateTask(taskNew, TaskStatusEnum.RGV_Execute);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/ConveyorLineJob_CPD.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
using Microsoft.AspNetCore.Components.Routing;
using Newtonsoft.Json;
using Quartz;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ConveyorLineJob_CPD : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public ConveyorLineJob_CPD(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList();
                List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode);
                foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode)))
                {
                    DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(R_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                    DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == item.StationCode && x.DeviceProParamType == nameof(W_ConveyorLineCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/RGVJob_CP.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.Helper;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DTO;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_Tasks.ConveyorLineJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class RGVJob_CP : JobBase, IJob
    {
        private readonly ICacheService _cacheService;
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IStationMangerRepository _stationMangerRepository;
        private readonly IRouterRepository _routerRepository;
        private readonly IRouterService _routerService;
        private readonly IRouterExtension _routerExtension;
        private readonly List<Dt_WarehouseDevice> warehouseDevices;
        public RGVJob_CP(ICacheService cacheService, ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IRouterService routerService, IRouterExtension routerExtension)
        {
            _cacheService = cacheService;
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _stationMangerRepository = stationMangerRepository;
            _routerRepository = routerRepository;
            _routerService = routerService;
            _routerExtension = routerExtension;
            string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice));
            if (!string.IsNullOrEmpty(warehouseDevicesStr))
            {
                warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>();
            }
            else
            {
                warehouseDevices = new List<Dt_WarehouseDevice>();
            }
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                DeviceProDTO? deviceProRead = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(R_RgvCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                DeviceProDTO? deviceProWrite = device.DeviceProDTOs.Where(x => x.DeviceChildCode == device.DeviceCode && x.DeviceProParamType == nameof(W_RgvCPDB)).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
                Console.WriteLine(DateTime.Now.ToString("yyyy-mm-ddd HH:mm:ss"));
                if (deviceProRead != null && deviceProWrite != null)
                {
                    R_RGVCPInfo rgvInfoRead = device.Communicator.ReadCustomer<R_RGVCPInfo>(deviceProRead.DeviceProAddress);
                    if (rgvInfoRead.Mode==4  && rgvInfoRead.State == 0 && rgvInfoRead.TaskDone==1)
                    {
                        //获取任务
                        Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Execute.ObjToInt() && x.DeviceCode==device.DeviceCode);
                        if (task != null)
                        {
                            device.SetValue(W_RgvCPDB.WcsTask, task.TaskNum);
                            device.SetValue(W_RgvCPDB.TaskType, 4);
                            device.SetValue(W_RgvCPDB.WorkStation, 1);
                            device.SetValue(W_RgvCPDB.Qu1, task.CurrentAddress);
                            device.SetValue(W_RgvCPDB.Fang1, task.NextAddress);
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 1);
                            Thread.Sleep(1000);
                            //复位信号
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                            _taskService.UpdateTask(task, TaskStatusEnum.RGV_Executing);
                        }
                    }
                    else if(rgvInfoRead.Mode == 4 && rgvInfoRead.State == 1 && rgvInfoRead.TaskDone == 3)
                    {
                        //获取任务
                        Dt_Task task = _taskRepository.QueryFirst(x =>x.TaskNum==rgvInfoRead.RgvEndTask &&  _taskService.TaskInboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.RGV_Executing.ObjToInt() && x.DeviceCode == device.DeviceCode);
                        if (task != null)
                        {
                            //获取下一个节点的路由
                            Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == task.NextAddress);
                            task.CurrentAddress = task.NextAddress;
                            task.NextAddress = "";
                            task.DeviceCode = stationManger.StationDeviceCode;
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 2);
                            Thread.Sleep(1000);
                            //复位信号
                            device.SetValue(W_RgvCPDB.TaskReceivedDone, 0);
                            _taskService.UpdateTask(task, TaskStatusEnum.Line_Execute);
                            WriteError(device.DeviceName, $"RGV任务完成,任务号{rgvInfoRead.RgvEndTask}");
                        }
                        else
                        {
                            WriteError(device.DeviceName, $"未找到RGV对应的结束任务{rgvInfoRead.RgvEndTask}");
                        }
                    }
                }
                else
                {
                    WriteError(device.DeviceName, $"未找到设备子编号{device.DeviceCode}的协议信息");
                }
            }
            return Task.CompletedTask;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/StackerCraneJob_CP.cs
ÎļþÃû´Ó ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/³ÉÆ·²Ö/StackerCraneJob_CP1.cs ÐÞ¸Ä
@@ -26,7 +26,7 @@
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class StackerCraneJob_CP1 : JobBase, IJob
    public class StackerCraneJob_CP : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
@@ -34,7 +34,7 @@
        private readonly IRouterService _routerService;
        private readonly IStationMangerRepository _stationMangerRepository;
        public StackerCraneJob_CP1(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository)
        public StackerCraneJob_CP(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IStationMangerRepository stationMangerRepository)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
@@ -81,7 +81,7 @@
            }
            catch (Exception ex)
            {
                WriteError(nameof(StackerCraneJob_CP1), ex.Message, ex);
                WriteError(nameof(StackerCraneJob_CP), ex.Message, ex);
            }
            return Task.CompletedTask;
        }
@@ -228,7 +228,7 @@
                if (device != null)
                {
                    OtherDevice client = (OtherDevice)device;
                    if (!client.GetValue<R_ConveyorLineDB, bool>(R_ConveyorLineDB.Goods, stationManger.StationCode))//出库站台未被占用
                    if (client.GetValue<R_ConveyorLineCPDB, short>(R_ConveyorLineCPDB.Command, stationManger.StationCode)==3)//出库站台未被占用
                    {
                        task.NextAddress = stationManger.StackerCraneStationCode;
                        _taskRepository.UpdateData(task);