|
@@ -1,4 +1,5 @@
|
|
|
using ServiceCenter.Extensions;
|
|
|
+using ServiceCenter.Logs;
|
|
|
using ServiceCenter.SqlSugars;
|
|
|
using System.ComponentModel;
|
|
|
using WCS.Core;
|
|
@@ -75,25 +76,84 @@ namespace WCS.WorkEngineering.Systems.环形库
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
|
|
|
- if (res.ResCode != ResponseStatusCodeEnum.Sucess)
|
|
|
+ var robot = GetRobotDevice(obj.Entity);
|
|
|
+ if (robot == null)
|
|
|
{
|
|
|
- World.Log(res.ResMsg, ServiceCenter.Logs.LogLevelEnum.Mid);
|
|
|
+ World.Log($"未检索到对应的机械臂设备号", 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.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, 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 (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();
|
|
@@ -122,5 +182,27 @@ namespace WCS.WorkEngineering.Systems.环形库
|
|
|
};
|
|
|
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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|