using ServiceCenter.SqlSugars; using SqlSugar; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Worlds; using wms.sqlsugar.model; namespace WCS.WorkEngineering.Systems { [Description("环线成品分配")] [BelongTo(typeof(LoopLineWorld))] public class 环线成品分配 : DeviceSystem> { protected override bool ParallelDo => true; public override void Do(Device obj) { if (obj.Data.VoucherNo != obj.Data2.VoucherNo) return; if (obj.Data2.Request == 0) return; if (obj.Data2.GoodsStart != 1) throw new Exception("GoodsStart值有误"); //MaduoChuKuTiShenJi var floor = short.Parse(obj.Entity.GetFlag("Floor")); var list = new List(); if (floor == 1) { list = new List { 3759, 3767, 3778 }; } else if (floor == 2) { list = new List { 3459, 3467, 3478 }; } else if (floor == 3) { list = new List { 3159, 3167, 3178 }; } var tPaths = list.Select(v => new { Target = v, Arr = DevicePath.GetPath(obj.Entity.Code, v.ToString()).Points.Select(d => d.Protocol(this.World)).ToArray() }); //得到路径上的任务数 var tTasks = tPaths.Select(v => new { Index = list.IndexOf(v.Target), Target = v.Target, Qty = v.Arr.Where(d => d.TaskNumber > 0 && d.GoodsEnd == v.Target).Count() }).ToArray(); var tTask = tTasks.Where(v => v.Qty < 5) .OrderBy(v => v.Qty >= 4)//优先分配不满4个的 .ThenByDescending(v => v.Qty)//数量多的优先 .ThenByDescending(v => v.Index == 3 - floor)//1楼优先3号 3楼优先1号 .FirstOrDefault(); if (tTask == null) { throw new Exception("成品出库提升机缓存位全满"); } var target = tTask.Target; SqlSugarHelper.Do(db => { var task = db.Default.Queryable().Where(v => v.ID == obj.Data2.TaskNumber).First(); if (task == null) { throw new Exception($"任务号{obj.Data2.TaskNumber}不存在"); } db.Default.Updateable() .SetColumns(v => new WCS_TaskInfo { Status = Entity.TaskStatus.出库扫码, EditTime = SqlFunc.GetDate() }) .Where(v => v.ID == task.ID) .ExecuteCommand(); obj.Data.GoodsStart = obj.Data2.GoodsStart; obj.Data.TaskNumber = obj.Data2.TaskNumber; obj.Data.GoodsEnd = target; obj.Data.VoucherNo++; }); } public override bool Select(Device dev) { return dev.HasFlag("出库扫码"); } } /// /// 配置信息表 /// [Tenant("sx")] [SugarTable("sys_config", "配置信息表")] public class SxSysConfig : BaseModel { /// /// 编号 /// [SugarColumn(ColumnName = "code", Length = 100)] public string Code { get; set; } /// /// 名称 /// [SugarColumn(ColumnName = "name", Length = 100)] public string Name { get; set; } /// /// 内容 /// [SugarColumn(ColumnName = "scontent", Length = 100)] public string SContent { get; set; } /// /// 类型 /// [SugarColumn(ColumnName = "stype", Length = 50)] public string SType { get; set; } [SugarColumn(ColumnName = "default1", Length = 100, IsNullable = true)] public string Default1 { get; set; } [SugarColumn(ColumnName = "default2", Length = 100, IsNullable = true)] public string Default2 { get; set; } [SugarColumn(ColumnName = "default3", Length = 100, IsNullable = true)] public string Default3 { get; set; } } }