duyongjia
2024-12-23 430404d69be9b5d420ad12b9ac087508f1fa2aca
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -81,76 +81,67 @@
                    command.CL1002Status = conveyorLine.Communicator.Read<short>("DB801.46.0");
                    command.Weight = conveyorLine.Communicator.Read<short>("DB801.48.0");
                    command.CL1002Barcode = conveyorLine.Communicator.Read<string>("DB801.52.0");
                    command.ISIn = conveyorLine.Communicator.Read<short>("DB801.84.0");
                    command.ISIn = conveyorLine.Communicator.Read<short>("DB801.84.0");//等于1的时候不让出库
                    if (command != null)
                    {
                        Dt_Task Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                        if (Intask != null)
                        if (!string.IsNullOrEmpty(command.CL1002Barcode.Trim()))
                        {
                            //入库处理
                            //如果入库到位,则根据托盘码(条码)去获取WCS任务号
                            if (command.ISInFinish == 1)
                            Dt_Task Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                            if (Intask != null)
                            {
                                _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库执行中");
                                //入库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库完成");
                                //入库处理
                                //如果入库到位,则根据托盘码(条码)去获取WCS任务号
                                if (command.ISInFinish == 1)
                                {
                                    _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InExecuting);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库执行中");
                                    //入库确认信号
                                    conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                    _taskService.UpdateTaskStatus(Intask.TaskId, (int)TaskInStatusEnum.Line_InFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Intask.TaskId, $"输送线入库完成");
                                }
                            }
                            else//如果根据托盘条码查不到任务,则认为是空托盘,空托盘入库可以不需要组盘,直接新建任务,也可以直接下空托出库任务
                            {
                                if (command.ISInFinish == 1)
                                {
                                    //先不给PLC入库确认信号,调WMS空托入库任务接口
                                    _taskService.GenerateEmptyInBoundTask(command.CL1002Barcode);
                                }
                            }
                        }
                        else//如果根据托盘条码查不到任务,则认为是空托盘,空托盘入库不需要组盘,直接新建任务
                        if (!string.IsNullOrEmpty(command.Barcode.Trim()))
                        {
                            if (command.ISInFinish == 1)
                            Dt_Task Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                            if (Outtask != null)
                            {
                                //入库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.6.0", 1);
                                Dt_Task task = new Dt_Task();
                                task.TaskNum= GetTaskNo();
                                task.PalletCode = command.CL1002Barcode;
                                task.TaskType =(int)TaskInboundTypeEnum.Inbound;
                                task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                                task.Roadway = "SC01";
                                task.SourceAddress = "R01-001-023-001";
                                //向WMS申请空货位
                                task.TargetAddress= WMSApiInvoke.GetAllLocationGroups(task.PalletCode);
                                _taskService.AddData(task);
                                Dt_Router dt_Router = new Dt_Router();
                                //临时记录下托盘和库位的绑定关系
                                dt_Router.StartPosi = task.TargetAddress;
                                dt_Router.NextPosi = task.PalletCode;
                                dt_Router.InOutType = RouterInOutType.Out;
                                dt_Router.ChildPosi = "1";
                                dt_Router.ChildPosiDeviceCode = "1";
                                dt_Router.IsEnd = true;
                                _routerService.AddData(dt_Router);
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"输送线入库执行中");
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"输送线入库完成");
                            }
                                //出库处理
                                //如果出库到位,出库任务完成
                                if (command.ISOutFinish == 1)
                                {
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutExecuting);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库执行中");
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库完成");
                                    //出库确认信号
                                    conveyorLine.Communicator.Write<short>("DB800.0.0", 1);
                                    _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.OutFinish);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"出库任务完成");
                                    _taskService.OutBoundTaskByWMS(Outtask.TaskNum);
                        }
                        Dt_Task Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                        if (Outtask != null)
                        {
                            //出库处理
                            //如果出库到位,出库任务完成
                            if (command.ISOutFinish == 1)
                            {
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutExecuting);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库执行中");
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.Line_OutFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"输送线出库完成");
                                //出库确认信号
                                conveyorLine.Communicator.Write<short>("DB800.0.0", 1);
                                _taskService.UpdateTaskStatus(Outtask.TaskId, (int)TaskOutStatusEnum.OutFinish);
                                _taskExecuteDetailService.AddTaskExecuteDetail(Outtask.TaskId, $"出库任务完成");
                                }
                            }
                        }
                        //Intask = _taskService.QueryConveyorLineTask(command.CL1002Barcode);
                        //Outtask = _taskService.QueryConveyorLineOutTask(command.Barcode);
                        //if (Intask==null&&Outtask==null && command.CL1001Free==1 && command.CL1002Free==1&& command.ISIn==0)
                        //{
                        //    //生成空车出库任务
                        //    _taskService.GenerateEmptyOutBoundTask();
                        //}
                    }
                    Task.WaitAll(tasks.ToArray());
                }