qinchulong
2025-03-04 6acfe6b52441943b1ceb8468a2235326dad880fe
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/GZJ/GZJJob.cs
@@ -29,6 +29,7 @@
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_TaskInfoService;
using WIDESEAWCS_Tasks.OHT;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEAWCS_Tasks
{
@@ -88,83 +89,138 @@
                    {
                        throw new Exception($"规整机投入使用信号为false");
                    }
                    Dt_Task task = new Dt_Task();
                    var storagemode = _storagemodeRepository.QueryFirst(v=>v.Id==1);
                    if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_DK_isready)//RGV上料模式,且东跨架子有上料信号
                    var Inisout = _outStockRepository.QueryFirst(v => v.Id == 1);
                    if (Inisout.InOut==1)
                    {
                        var station=_dt_stationInfoRepository.QueryFirst(v=>v.msg== "东跨架子");
                        task.SourceAddress = station.Row + "-" + station.Column + "-1";
                        task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                        Dt_Task task = new Dt_Task();
                        var storagemode = _storagemodeRepository.QueryFirst(v => v.Id == 1);
                        if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_DK_isready)//RGV上料模式,且东跨架子有上料信号
                        {
                            var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                            task.SourceAddress = station.Row + "-" + station.Column + "-1";
                            task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                            task.Grade = 1;
                            task.Remark = (int)MateTypeEnum.ZiChan;
                        }
                        else if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_XK_isready)//RGV上料模式,且西跨架子有上料信号
                        {
                            var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                            task.SourceAddress = station.Row + "-" + station.Column + "-1";
                            task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                            var DKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                            string address = DKstation.Row + "-" + DKstation.Column + "-1";
                            var oldtask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == address);
                            if (oldtask != null && oldtask.TaskState == (int)TaskInStatusEnum.InNew)
                            {
                                task.Grade = 2;
                            }
                            else
                            {
                                task.Grade = 1;
                            }
                            task.Remark = (int)MateTypeEnum.ZiChan;
                        }
                        else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_XK_isready)//人工叉车上料模式,且西跨架子有上料信号
                        {
                            var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                            task.SourceAddress = station.Row + "-" + station.Column + "-1";
                            task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                            task.Grade = 1;
                            task.Remark = (int)MateTypeEnum.WaiGou;
                        }
                        else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_DK_isready)//人工叉车上料模式,且东跨架子有上料信号
                        {
                            var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                            task.SourceAddress = station.Row + "-" + station.Column + "-1";
                            task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                            var XKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                            string address = XKstation.Row + "-" + XKstation.Column + "-1";
                            var oldtask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == address);
                            if (oldtask != null && oldtask.TaskState == (int)TaskInStatusEnum.InNew)
                            {
                                task.Grade = 2;
                            }
                            else
                            {
                                task.Grade = 1;
                            }
                            task.Remark = (int)MateTypeEnum.WaiGou;
                        }
                        else
                        {
                            throw new Exception($"规整机当前信号不满足入库任务生成条件");
                        }
                        //查找相邻的库位
                        Dt_LocationInfo Towlocation = new Dt_LocationInfo();
                        var Onelocation = _LocationInfoRepository.QueryFirst(v => v.LocationCode == task.TargetAddress);
                        if (Onelocation.Depth == 1)
                        {
                            Towlocation = _LocationInfoRepository.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 2);
                        }
                        else
                        {
                            Towlocation = _LocationInfoRepository.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 1);
                        }
                        task.NextAddress = Towlocation.LocationCode;
                        task.Roadway = "TC01";
                        task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                        task.TaskState = (int)TaskInStatusEnum.InNew;
                        task.PalletCode = "text";
                        task.CurrentAddress = "text";
                        task.WMSId = 3;
                        var oldhtytask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == task.SourceAddress);
                        if (oldhtytask == null)
                        {
                            _dt_taskRepositiry.AddData(task);
                        }
                    }
                    else if(Inisout.InOut == 2)
                    {
                        if (!OHTJob.oHTReadData.R_ZXJ_TCMode || !OHTJob.oHTReadData.R_HC_isReadyWork)
                        {
                            throw new Exception($"整形机不属于天车上料模式或天车放板信号为false");
                        }
                        Dt_Task outtask = new Dt_Task();
                        if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_DK_isready )
                        {
                            var Stastation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                            outtask.SourceAddress = Stastation.Row + "-" + Stastation.Column + "-1";
                        }
                        else if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_XK_isready)
                        {
                            var Stastation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                            outtask.SourceAddress = Stastation.Row + "-" + Stastation.Column + "-1";
                        }
                        else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_XK_isready)
                        {
                            var Stastation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                            outtask.SourceAddress = Stastation.Row + "-" + Stastation.Column + "-1";
                        }
                        else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_DK_isready)
                        {
                            var Stastation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                            outtask.SourceAddress = Stastation.Row + "-" + Stastation.Column + "-1";
                        }
                        
                        task.Grade = 1;
                        task.Remark = (int)MateTypeEnum.ZiChan;
                    }
                    else if (OHTJob.oHTReadData.R_RGVMode && OHTJob.oHTReadData.R_XK_isready)//RGV上料模式,且西跨架子有上料信号
                    {
                        var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                        task.SourceAddress = station.Row + "-" + station.Column + "-1";
                        task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                        var DKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                        string address= DKstation.Row + "-" + DKstation.Column + "-1";
                        var oldtask = _dt_taskRepositiry.QueryFirst(v=>v.SourceAddress== address);
                        if (oldtask!=null && oldtask.TaskState== (int)TaskInStatusEnum.InNew)
                        var Endstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "整形机放料位");
                        outtask.TargetAddress = Endstation.Row + "-" + Endstation.Column + "-1";
                        outtask.Grade = 1;
                        outtask.NextAddress = Endstation.Row + "-" + Endstation.Column + "-1";
                        outtask.Roadway = "TC01";
                        outtask.TaskType = (int)TaskOutboundTypeEnum.OutInventory;
                        outtask.TaskState = (int)TaskOutStatusEnum.OutNew;
                        outtask.WMSId = 3;
                        outtask.PalletCode = "text";
                        outtask.CurrentAddress = "text";
                        var oldtask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == outtask.SourceAddress &&v.TargetAddress== outtask.SourceAddress);
                        if (oldtask == null)
                        {
                            task.Grade = 2;
                            _dt_taskRepositiry.AddData(outtask);
                        }
                        else
                        {
                            task.Grade = 1;
                        }
                        task.Remark = (int)MateTypeEnum.ZiChan;
                    }
                    else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_XK_isready)//人工叉车上料模式,且西跨架子有上料信号
                    {
                        var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                        task.SourceAddress = station.Row + "-" + station.Column + "-1";
                        task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                        task.Grade = 1;
                        task.Remark = (int)MateTypeEnum.WaiGou;
                    }
                    else if (OHTJob.oHTReadData.R_CCMode && OHTJob.oHTReadData.R_DK_isready)//人工叉车上料模式,且东跨架子有上料信号
                    {
                        var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "东跨架子");
                        task.SourceAddress = station.Row + "-" + station.Column + "-1";
                        task.TargetAddress = _locationInfoService.GetInLocation(storagemode.storagemode).LocationCode;
                        var XKstation = _dt_stationInfoRepository.QueryFirst(v => v.msg == "西跨架子");
                        string address= XKstation.Row + "-" + XKstation.Column + "-1";
                        var oldtask = _dt_taskRepositiry.QueryFirst(v => v.SourceAddress == address);
                        if (oldtask != null && oldtask.TaskState == (int)TaskInStatusEnum.InNew)
                        {
                            task.Grade = 2;
                        }
                        else
                        {
                            task.Grade = 1;
                        }
                        task.Remark = (int)MateTypeEnum.WaiGou;
                    }
                    else
                    {
                        throw new Exception($"规整机当前信号不满足入库任务生成条件");
                    }
                    //查找相邻的库位
                    Dt_LocationInfo Towlocation = new Dt_LocationInfo();
                    var Onelocation = _LocationInfoRepository.QueryFirst(v => v.LocationCode == task.TargetAddress);
                    if (Onelocation.Depth == 1)
                    {
                        Towlocation = _LocationInfoRepository.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 2);
                    }
                    else
                    {
                        Towlocation = _LocationInfoRepository.QueryFirst(v => v.Row == Onelocation.Row && v.Column == Onelocation.Column && v.Depth == 1);
                    }
                    task.NextAddress = Towlocation.LocationCode;
                    task.Roadway = "TC01";
                    task.TaskType = (int)TaskInboundTypeEnum.Inbound;
                    task.TaskState = (int)TaskInStatusEnum.InNew;
                    task.PalletCode = "text";
                    task.CurrentAddress = "text";
                    _dt_taskRepositiry.AddData(task);
                    #endregion
                }
@@ -181,70 +237,70 @@
                        throw new Exception($"整形机投入使用信号为false");
                    }
                    var isout = _outStockRepository.QueryFirst(v => v.Id == 1);
                    if (isout.isout != 1)
                    if (isout.isout == 1)
                    {
                        throw new Exception($"当前系统设置为不出库模式");
                    }
                    if (!OHTJob.oHTReadData.R_ZXJ_TCMode || !OHTJob.oHTReadData.R_HC_isReadyWork)
                    {
                        throw new Exception($"整形机不属于天车上料模式或天车放板信号为false");
                    }
                    //查询当前任务池中是否存在出库任务,出库任务只能存在一条
                    var oldtask = _dt_taskRepositiry.QueryFirst(v => v.TaskType == (int)TaskOutboundTypeEnum.Outbound);
                    if (oldtask != null)
                    {
                        throw new Exception($"当前任务池中已存在一条出库任务");
                    }
                    //查询当前需要出库的批次号,以及出库物料类型
                    var batch = _batchInfoRepository.QueryFirst(v => v.Id == 1);
                    //查询库存物料库存信息
                    var stocks = _StockInfoRepository.QueryData(v => v.Remark == batch.materType && v.BatchNo == batch.OutBatch && v.StockStatus==0)
                        .OrderBy(v => v.CreateDate).ToList();
                    if (stocks.Count <= 0)
                    {
                        throw new Exception($"当前库存中没有【{batch.materType}】(0自产 1外购)且批次为【{batch.OutBatch}】的物料");
                    }
                    //查询货位
                    var locaOne=_LocationInfoRepository.QueryFirst(v=>v.LocationCode== stocks[0].LocationCode);
                    //查询相邻的货位
                    Dt_LocationInfo locaTow = new Dt_LocationInfo();
                    if (locaOne.Depth==1)
                    {
                        locaTow = _LocationInfoRepository.QueryFirst(v => v.Row == locaOne.Row &&v.Column== locaOne.Column && v.Depth==2);
                    }
                    else
                    {
                        locaTow = _LocationInfoRepository.QueryFirst(v => v.Row == locaOne.Row && v.Column == locaOne.Column && v.Depth == 1);
                    }
                    locaOne.LocationStatus = (int)LocationStatusEnum.Lock;
                    locaTow.LocationStatus = (int)LocationStatusEnum.Lock;
                    //查询相邻的库存
                    var BBstock = _StockInfoRepository.QueryFirst(v=>v.LocationCode== locaTow.LocationCode);
                    BBstock.StockStatus = 1;
                    stocks[0].StockStatus = 1;
                    //查询终点站台信息
                    var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "整形机放料位");
                    //开始创建任务
                    Dt_Task outtask = new Dt_Task();
                    outtask.Roadway = "TC01";
                    outtask.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                    outtask.TaskState = (int)TaskOutStatusEnum.OutNew;
                    outtask.SourceAddress = stocks[0].LocationCode;
                    outtask.TargetAddress = station.Row + "-" + station.Column + "-1";
                    outtask.NextAddress = locaTow.LocationCode;
                    outtask.Grade = 1;
                    outtask.WMSId = 3;
                    outtask.Remark = batch.materType;
                    outtask.PalletCode = "text";
                    outtask.CurrentAddress = "text";
                        if (!OHTJob.oHTReadData.R_ZXJ_TCMode || !OHTJob.oHTReadData.R_HC_isReadyWork)
                        {
                            throw new Exception($"整形机不属于天车上料模式或天车放板信号为false");
                        }
                        //查询当前任务池中是否存在出库任务,出库任务只能存在一条
                        var oldtask = _dt_taskRepositiry.QueryFirst(v => v.TaskType == (int)TaskOutboundTypeEnum.Outbound);
                        if (oldtask != null)
                        {
                            throw new Exception($"当前任务池中已存在一条出库任务");
                        }
                        //查询当前需要出库的批次号,以及出库物料类型
                        var batch = _batchInfoRepository.QueryFirst(v => v.Id == 1);
                        //查询库存物料库存信息
                        var stocks = _StockInfoRepository.QueryData(v => v.Remark == batch.materType && v.BatchNo == batch.OutBatch && v.StockStatus == 0)
                            .OrderBy(v => v.CreateDate).ToList();
                        if (stocks.Count <= 0)
                        {
                            throw new Exception($"当前库存中没有【{batch.materType}】(0自产 1外购)且批次为【{batch.OutBatch}】的物料");
                        }
                        //查询货位
                        var locaOne = _LocationInfoRepository.QueryFirst(v => v.LocationCode == stocks[0].LocationCode);
                        //查询相邻的货位
                        Dt_LocationInfo locaTow = new Dt_LocationInfo();
                        if (locaOne.Depth == 1)
                        {
                            locaTow = _LocationInfoRepository.QueryFirst(v => v.Row == locaOne.Row && v.Column == locaOne.Column && v.Depth == 2);
                        }
                        else
                        {
                            locaTow = _LocationInfoRepository.QueryFirst(v => v.Row == locaOne.Row && v.Column == locaOne.Column && v.Depth == 1);
                        }
                        locaOne.LocationStatus = (int)LocationStatusEnum.Lock;
                        locaTow.LocationStatus = (int)LocationStatusEnum.Lock;
                        //查询相邻的库存
                        var BBstock = _StockInfoRepository.QueryFirst(v => v.LocationCode == locaTow.LocationCode);
                        BBstock.StockStatus = 1;
                        stocks[0].StockStatus = 1;
                        //查询终点站台信息
                        var station = _dt_stationInfoRepository.QueryFirst(v => v.msg == "整形机放料位");
                        //开始创建任务
                        Dt_Task outtask = new Dt_Task();
                        outtask.Roadway = "TC01";
                        outtask.TaskType = (int)TaskOutboundTypeEnum.Outbound;
                        outtask.TaskState = (int)TaskOutStatusEnum.OutNew;
                        outtask.SourceAddress = stocks[0].LocationCode;
                        outtask.TargetAddress = station.Row + "-" + station.Column + "-1";
                        outtask.NextAddress = locaTow.LocationCode;
                        outtask.Grade = 1;
                        outtask.WMSId = 3;
                        outtask.Remark = batch.materType;
                        outtask.PalletCode = "text";
                        outtask.CurrentAddress = "text";
                    _unitOfWorkManage.BeginTran();
                    _LocationInfoRepository.UpdateData(locaOne);
                    _LocationInfoRepository.UpdateData(locaTow);
                    _StockInfoRepository.UpdateData(BBstock);
                    _dt_taskRepositiry.AddData(outtask);
                    _StockInfoRepository.UpdateData(stocks[0]);
                    _unitOfWorkManage.CommitTran();
                        _unitOfWorkManage.BeginTran();
                        _LocationInfoRepository.UpdateData(locaOne);
                        _LocationInfoRepository.UpdateData(locaTow);
                        _StockInfoRepository.UpdateData(BBstock);
                        _dt_taskRepositiry.AddData(outtask);
                        _StockInfoRepository.UpdateData(stocks[0]);
                        _unitOfWorkManage.CommitTran();
                    }
                    #endregion
                }
                catch (Exception ex)