杨前锦
2025-06-19 d42ad8b01195def2a9309930e14f90ff13ad47b1
HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/core/WCSCore.cs
@@ -16,18 +16,6 @@
    internal class WCSCore {
        public static void OperateAgvTaskStatus(AgvTaskState model) {
            if (string.IsNullOrEmpty(model.No)) {
                var alertorDevice = Settings.alertorLightInfos.Where(a => a.deviceNo == int.Parse(model.LockNo)).FirstOrDefault();
                if (model.State == 1023)
                {
                    var result = HH.WCS.Mobox3.YNJT_PT.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.turnLight);
                    LogHelper.Info("modbus 返回信号:" + result, "TSSG");
                }
                if (model.State == 1025)
                {
                    var result = HH.WCS.Mobox3.YNJT_PT.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.offLight);
                    LogHelper.Info("modbus 返回信号:" + result, "TSSG");
                }
            }
            else {
                var TN_Task = WCSHelper.GetTask(model.No);
@@ -56,31 +44,14 @@
                                    break;
                                case 5:
                                    WCSHelper.UpdateStatus(TN_Task, "开始卸货");
                                    WCSHelper.UpdateStatus(TN_Task, "卸货完成");
                                    TaskProcess.OperateStatus(TN_Task, 6);
                                    if (TN_Task.S_OP_NAME == "移库单移库")
                                    {
                                        var startLoc = LocationHelper.GetLoc(TN_Task.S_START_LOC);
                                        var endLoc = LocationHelper.GetLoc(TN_Task.S_END_LOC);
                                        TN_YiKuDetail detail = new TN_YiKuDetail()
                                        {
                                            S_NO = TN_Task.S_OP_CODE,
                                            S_START_AREA = startLoc.S_AREA_CODE,
                                            S_START_ROW = startLoc.N_ROW,
                                            S_END_AREA = endLoc.S_AREA_CODE,
                                            S_END_ROW = endLoc.N_ROW
                                        };
                                        WMSHelper.updateShiftOrderDetail(detail);
                                    }
                                    WCSHelper.End(TN_Task);
                                    break;
                                case 6:
                                    WCSHelper.UpdateStatus(TN_Task, "卸货完成");
                                    TaskProcess.OperateStatus(TN_Task, 6);
                                    break;
                                #endregion
                                case 2:
                                    // 修改工单状态
                                    /*  WCSHelper.UpdateWorkOrderStatus(TN_Task.S_OP_CODE, "已完成");*/
                                    WCSHelper.End(TN_Task);
                                    break;
                                case 7:
                                    //判断是否收到过强制取消,有就不做任何处理
@@ -98,6 +69,16 @@
                        {
                            //安全请求等
                            TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                        }
                        if (model.State == 2)
                        {
                            var mst = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE);
                            if (mst.S_END_LOC == TN_Task.S_END_LOC)
                            {
                                mst.N_B_STATE = 2;
                                WMSHelper.UpdateTaskState(mst);
                            }
                        }
                    }
                }
@@ -137,7 +118,7 @@
                        //终点托盘绑定
                        if (LocationHelper.BindingLoc(wcsTask.S_END_LOC, new List<string> { wcsTask.S_CNTR_CODE })) {
                            //修改托盘状态为可用,增加库存量表,后面分拣出可以计算到
                            ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC);
                           /* ContainerHelper.Enable(wcsTask.S_CNTR_CODE, wcsTask.S_END_LOC);*/
                        }
                    }
@@ -157,5 +138,48 @@
                }
            }
        }
        /// <summary>
        /// 创建最后一个任务
        /// </summary>
        /// <param name="startLocCode"></param>
        /// <param name="mst"></param>
        /// <returns></returns>
        public static WCSTask createLastTask(string startLocCode, WMSTask mst)
        {
            LogHelper.Info($"作业号:{mst.S_CODE},创建AGV出库任务", "WMS");
            var existTask = WCSHelper.GetTaskByStart(startLocCode);
            if (existTask == null)
            {
                var startLoc = LocationHelper.GetLoc(startLocCode);
                // 创建一段入库任务
                WCSTask wcsTask = new WCSTask()
                {
                    S_OP_NAME = mst.S_OP_DEF_NAME,
                    S_OP_CODE = mst.S_CODE,
                    S_CODE = WCSHelper.GenerateTaskNo(),
                    S_CNTR_CODE = mst.S_CNTR_CODE,
                    S_TYPE = mst.S_TYPE,
                    S_START_LOC = startLoc.S_CODE,
                    S_START_AREA = startLoc.S_AREA_CODE,
                    S_END_LOC = mst.S_END_LOC,
                    S_END_AREA = mst.S_END_AREA,
                    S_SCHEDULE_TYPE = "AGV",
                    N_PRIORITY = mst.N_PRIORITY,
                    T_START_TIME = DateTime.Now,
                };
                if (WCSHelper.CreateTask(wcsTask))
                {
                    // 起点、接驳点、终点加锁
                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
                    WMSHelper.UpdateTaskEnd(mst);
                    return wcsTask;
                }
            }
            return null;
        }
    }
}