123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- using Newtonsoft.Json;
- using ServiceCenter.Logs;
- using ServiceCenter.SqlSugars;
- using SqlSugar;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.BCR;
- using WCS.Entity.Protocol.SRM;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.WebApi.Models.WCS.Request;
- //using WCS.WorkEngineering.WebApi.Controllers;
- //using WCS.WorkEngineering.WebApi.Models.WMS.Request;
- using WCS.WorkEngineering.Worlds;
- using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
- namespace WCS.WorkEngineering.Systems
- {
- [BelongTo(typeof(MainWorld))]
- [Description("堆垛机")]
- public class 堆垛机 : DeviceSystem<SRM>
- {
- protected override bool ParallelDo => true;
-
- public 堆垛机()
- {
- }
- public override void Do(SRM obj)
- {
- obj.Data.HB = (short)(obj.Data.HB == 0 ? 1 : 0);
- if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
- return;
- if (obj.Data2.Alarm != 0)
- {
- MainWorld.Redis.Set($"Sx:WCSInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}" + obj.Data3.Alarm.Description() + obj.Data3.Alarm1.Description(), Time = DateTime.Now }));
- return;
- }
- if (obj.Data2.Mode != SrmMode.自动)
- return;
- if (obj.Data.OkAck1 == 1)
- {
- if (obj.Data2.FinishedTaskID1 == 0)
- obj.Data.OkAck1 = 0;
- return;
- }
- if (obj.Data.OkAck2 == 1)
- {
- if (obj.Data2.FinishedTaskID2 == 0)
- obj.Data.OkAck2 = 0;
- return;
- }
- if(obj.Data.CancelAck1 == 1)
- {
- if (obj.Data2.Cancel1 == 0)
- obj.Data.CancelAck1 = 0;
- return;
- }
- if (obj.Data.CancelAck2 == 1)
- {
- if (obj.Data2.Cancel2 == 0)
- obj.Data.CancelAck2 = 0;
- return;
- }
- //同时完成的情况一起处理
- if (obj.Data2.FinishedTaskID1 != 0 && obj.Data2.FinishedTaskID2 != 0)
- {
- if (obj.Data2.FinishedTaskID1 != obj.Data.TaskID1)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}完成任务号{obj.Data2.FinishedTaskID1}有误", Time = DateTime.Now }));
- throw new Exception($"完成任务号{obj.Data2.FinishedTaskID1}有误");
- }
- if (obj.Data2.FinishedTaskID2 != obj.Data.TaskID2)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}完成任务号{obj.Data2.FinishedTaskID2}有误", Time = DateTime.Now }));
- throw new Exception($"完成任务号{obj.Data2.FinishedTaskID2}有误");
- }
- World.Log("开始处理堆垛机完成任务1和2");
- WMS.堆垛机完成(obj.Data2.FinishedTaskID1);
- WMS.堆垛机完成(obj.Data2.FinishedTaskID2);
- SqlSugarHelper.Do(db =>
- {
- obj.FinishTask(db, obj.Data2.FinishedTaskID1, obj.Entity.Code);
- obj.Data.OkAck1 = 1;
- obj.FinishTask(db, obj.Data2.FinishedTaskID2, obj.Entity.Code);
- obj.Data.OkAck2 = 1;
- World.Log("结束堆垛机完成任务1和2");
- });
- return;
- }
- if (obj.Data2.FinishedTaskID1 != 0)
- {
- if (obj.Data2.FinishedTaskID1 != obj.Data.TaskID1)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}完成任务号{obj.Data2.FinishedTaskID1}有误", Time = DateTime.Now }));
- throw new Exception($"完成任务号{obj.Data2.FinishedTaskID1}有误");
- }
- World.Log("开始处理堆垛机完成任务1");
- WMS.堆垛机完成(obj.Data2.FinishedTaskID1);
- SqlSugarHelper.Do(db =>
- {
- obj.FinishTask(db, obj.Data2.FinishedTaskID1, obj.Entity.Code);
- obj.Data.OkAck1 = 1;
- World.Log("结束堆垛机完成任务1");
- });
- return;
- }
- if (obj.Data2.FinishedTaskID2 != 0)
- {
- if (obj.Data2.FinishedTaskID2 != obj.Data.TaskID2)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}完成任务号{obj.Data2.FinishedTaskID2}有误", Time = DateTime.Now }));
- throw new Exception($"完成任务号{obj.Data2.FinishedTaskID2}有误");
- }
- World.Log("开始处理堆垛机完成任务2");
- WMS.堆垛机完成(obj.Data2.FinishedTaskID2);
- SqlSugarHelper.Do(db =>
- {
- obj.FinishTask(db, obj.Data2.FinishedTaskID2, obj.Entity.Code);
- obj.Data.OkAck2 = 1;
- World.Log("结束堆垛机完成任务2");
- });
- return;
- }
- if (obj.Data2.Cancel1 == 1)
- {
- //取消任务
- SqlSugarHelper.Do(db =>
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.ID == obj.Data2.TaskID1).First();
- if (task == null)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}取消任务时,任务号有误{obj.Data2.TaskID1}", Time = DateTime.Now }));
- throw new Exception("取消任务时,任务号有误");
- }
- if (task != null)
- {
- if (task.Type == TaskType.EnterDepot)
- {
- task.Status = Entity.TaskStatus.巷道分配;
- task.EditTime = DateTime.Now;
- task.ManualRemarks = "堆垛机取消任务";
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "堆垛机取消任务");
- }
- else if (task.Type == TaskType.OutDepot || task.Type == TaskType.TransferDepot)
- {
- task.Status = Entity.TaskStatus.NewBuild;
- task.EditTime = DateTime.Now;
- task.ManualRemarks = "堆垛机取消任务";
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "堆垛机取消任务");
- }
- else
- {
- throw new Exception($"取消任务功能不支持任务类型{task.Type}");
- }
- }
- obj.Data.CancelAck1 = 1;
- });
- }
- if (obj.Data2.Cancel2 == 1)
- {
- //取消任务
- SqlSugarHelper.Do(db =>
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.ID == obj.Data2.TaskID2).First();
- if (task == null)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code}取消任务时,任务号有误{obj.Data2.TaskID2}", Time = DateTime.Now }));
- throw new Exception("取消任务时,任务号有误");
- }
- if (task.Type == TaskType.EnterDepot)
- {
- task.Status = Entity.TaskStatus.巷道分配;
- task.EditTime = DateTime.Now;
- task.ManualRemarks = "堆垛机取消任务";
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "堆垛机取消任务");
- }
- else if (task.Type == TaskType.OutDepot || task.Type == TaskType.TransferDepot)
- {
- task.Status = Entity.TaskStatus.NewBuild;
- task.EditTime = DateTime.Now;
- task.ManualRemarks = "堆垛机取消任务";
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "堆垛机取消任务");
- }
- else
- {
- throw new Exception($"取消任务功能不支持任务类型{task.Type}");
- }
- obj.Data.CancelAck2 = 1;
- });
- }
- if (obj.Data2.Status != SrmRunStatus.空闲)
- return;
- obj.Do();
- }
- public override bool Select(Device dev)
- {
- return "1,2,3".Split(',').Contains(dev.GetFlag("Floor"));
- }
- }
- }
|