123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- using ServiceCenter.Extensions;
- using ServiceCenter.Logs;
- using ServiceCenter.SqlSugars;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Model.WMS;
- using WCS.WorkEngineering.WebApi.Controllers;
- using WCS.WorkEngineering.WebApi.Models.WMS.Response;
- using WCS.WorkEngineering.Worlds;
- using TaskStatus = WCS.Entity.TaskStatus;
- namespace WCS.WorkEngineering.Systems.环形库
- {
- /// <summary>
- /// 环形库分配货位
- /// </summary>
- [BelongTo(typeof(SortingBranchWorld))]
- [Description("环形库分配货位")]
- public class 环形库分配货位 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
- {
- protected override bool ParallelDo => true;
- public override void Do(Device<IStation520, IStation521, IStation523> obj)
- {
- if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
- {
- World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}");
- return;
- }
- if (obj.Data3.Status.HasFlag(StationStatus.Run))
- {
- World.Log("设备运行中");
- return;
- }
- ;
- if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status))
- {
- World.Log("站台货物信息与实际占用不一致");
- return;
- }
- if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
- {
- }
- ;
- if (obj.Data2.Request != 1)
- {
- World.Log("无请求");
- return;
- }
- WCS_TaskInfo taskInfo = null;
- int sideNum = 0;
- //开始获取货位号
- SqlSugarHelper.Do(db =>
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().First(v => obj.Data2.TaskNumber == v.ID);
- if (task == null)
- {
- World.Log($"未找到任务[{obj.Data2.TaskNumber}],请人工接入处理!!!!");
- return;
- }
- if (task.Type != TaskType.SetPlate)
- {
- World.Log($"任务[{obj.Data2.TaskNumber}]任务类型错误,应该是组盘任务,请人工接入处理!!!!");
- return;
- }
- if (task.Status != TaskStatus.FinishOfShunt)
- {
- World.Log($"任务[{obj.Data2.TaskNumber}]任务状态错误,当前状态应该市分流结束,,请人工接入处理!!!!");
- return;
- }
- var robot = GetRobotDevice(obj.Entity);
- if (robot == null)
- {
- World.Log($"未检索到对应的机械臂设备号", LogLevelEnum.High);
- return;
- }
- if (robot.GetIsDirectPalletizing(db.Default))
- {
- //获取对应的码垛信息
- var ringPalletizingInfo = db.Default.Queryable<BillRingPalletizingInfo>().Single(x => x.Id == task.TaskGroupKey.ToLong());
- // 获取对应码垛工位所有的码垛信息
- var ringPalletizingInfos = db.Default.Queryable<BillRingPalletizingInfo>().Where(x => x.MaDuoGongWei == ringPalletizingInfo.MaDuoGongWei && x.Out == false).ToList();
- if (ringPalletizingInfos.Count > 1) //有多条需判断是否能进行放行
- {
- //获取所有此码垛工位所有已经分配的任务
- var ringPalletizingMaDuoGongWeilList = ringPalletizingInfos.Select(x => x.Id.ToString()).ToList();
- var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(x => ringPalletizingMaDuoGongWeilList.Contains(x.TaskGroupKey) && x.Status < TaskStatus.Finish && x.ProdLine == 1).ToList();
- //暂时不考虑同一个码垛工位,会有出现第一条信息还没被放行,第二条码垛信息就被创建的情况
- if (tasks.GroupBy(x => x.TaskGroupKey).Count() != 1)
- {
- World.Log($"同时有两组未结束的码垛信息被放行,请检查码垛工位{ringPalletizingInfo.MaDuoGongWei}的实际情况,是否存在上组任务未结束或任务乱等情况", LogLevelEnum.High);
- return;
- }
- if (tasks.First().TaskGroupKey == ringPalletizingInfo.Id.ToString())
- {
- task.LastInteractionPoint = obj.Entity.Code;
- task.Device = obj.Entity.Code;
- task.ProdLine = 1; //标识放行
- task.EditWho = "WCS";
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"直接码垛放行{task.AddrTo}");
- var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
- sideNum = invNow.SideNum;
- taskInfo = task;
- }
- else
- {
- World.Log($"同时有两组未结束的码垛信息被放行,请检查码垛工位{ringPalletizingInfo.MaDuoGongWei}的实际情况,是否存在上组任务未结束或任务乱等情况", LogLevelEnum.High);
- return;
- }
- }
- else
- {
- task.LastInteractionPoint = obj.Entity.Code;
- task.Device = obj.Entity.Code;
- task.ProdLine = 1; //标识放行
- task.EditWho = "WCS";
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.LastInteractionPoint, x.ProdLine, x.Device, x.EditWho }).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"直接码垛放行{task.AddrTo}");
- var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
- sideNum = invNow.SideNum;
- taskInfo = task;
- }
- }
- else
- {
- var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
- if (res.ResCode != ResponseStatusCodeEnum.Sucess)
- {
- World.Log(res.ResMsg, ServiceCenter.Logs.LogLevelEnum.High);
- return;
- }
- task.AddrTo = res.ResData.CellNo;
- task.Line = res.ResData.Row;
- task.Col = res.ResData.Colomn;
- task.Layer = res.ResData.Layer;
- task.Depth = res.ResData.Row;
- task.LastInteractionPoint = obj.Entity.Code;
- task.Device = obj.Entity.Code;
- task.EditWho = "WCS";
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.Device, x.EditWho }).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"任务分配货位{task.AddrTo}");
- var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
- sideNum = invNow.SideNum;
- taskInfo = task;
- }
- });
- if (taskInfo == null) return;
- var next = (taskInfo.AddrNext.ToShort() - 2).ToShort();
- obj.Data.TaskNumber = taskInfo.ID;
- obj.Data.TaskNumber = taskInfo.ID;
- obj.Data.GoodsStart = obj.Entity.Code.ToShort();
- obj.Data.GoodsStart = obj.Entity.Code.ToShort();
- obj.Data.GoodsEnd = next;
- if (sideNum == 2) //反面
- {
- obj.Data.CmdType = StationCmd.Res6;
- obj.Data.CmdType = StationCmd.Res6;
- }
- obj.Data.GoodsEnd = next;
- obj.Data.SetVoucherNo();
- }
- public override bool Select(Device dev)
- {
- var codes = new List<string>()
- {
- "444","644","844","1044","1244","1444",
- "426","626","826","1026","1226","1426",
- "435","635","835","1035","1235","1435"
- };
- return codes.Any(x => x == dev.Code);
- }
- public Device? GetRobotDevice(Device dev)
- {
- var robotCode = dev.Code switch
- {
- "433" => "Robot1",
- "633" => "Robot2",
- "833" => "Robot3",
- "1033" => "Robot4",
- "1233" => "Robot5",
- "1433" => "Robot6",
- "442" => "Robot1",
- "642" => "Robot2",
- "842" => "Robot3",
- "1042" => "Robot4",
- "1242" => "Robot5",
- "1442" => "Robot6",
- _ => "99999"
- };
- return Device.All.FirstOrDefault(v => v.Code == robotCode);
- }
- }
- }
|