using Microsoft.Data.SqlClient.Server; using Newtonsoft.Json; using Org.BouncyCastle.Bcpg; using PlcSiemens.Core.Extension; 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.Protocol.Robot; using WCS.Entity.Protocol.Robot; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.WebApi.Models.WCS.Request; using WCS.WorkEngineering.Worlds; namespace WCS.WorkEngineering.Systems { [BelongTo(typeof(MainWorld))] [Description("码垛位")] public class 码垛位 : DeviceSystem> { protected override bool ParallelDo => true; public override void Do(Device obj) { if (obj.Data.VoucherNo != obj.Data2.VoucherNo) return; if (obj.Entity.Code == "8090" && obj.Data.PalletID == 485161 && obj.Data.VoucherNo == -32601 && obj.Data.Cmd != 0) { obj.Data.Cmd = 0; } if (obj.Data2.Rqst == RobotStationRqst.完成码垛) { World.Log($"码垛位{obj.Entity.Code}整垛完成交互开始时间: " + DateTime.Now.ToString("yyyyMMddHHmmss")); //调WMS接口 var res = WMS.码垛完成(obj.Entity.Code); long leftPalletizingID = 0; if (!res.Success) { //兼容wms处理成功,wcs处理失败的情况 if (!string.IsNullOrEmpty(res.Memo1)) { leftPalletizingID = long.Parse(res.Memo1); } else { MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = obj.Entity.Code + res.ResMsg, Time = DateTime.Now })); throw new Exception(res.ResMsg); } } SqlSugarHelper.Do(db => { var pallet = db.Default.Queryable().With(SqlWith.NoLock).Where(v => v.TaskNum == obj.Data2.PalletID).First(); if (pallet == null && leftPalletizingID == 0) { MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data2.PalletID}无码垛位信息", Time = DateTime.Now })); throw new Exception("无码垛位信息"); } var tempPalletizingID = pallet.ID; if (leftPalletizingID > 0) { tempPalletizingID = leftPalletizingID; } db.Default.Updateable() .SetColumns(v => new WCS_TaskOld { Status = Entity.TaskStatus.Finish, EditTime = SqlFunc.GetDate() }) .Where(v => v.Type == TaskType.OutDepot && v.BusType == "装箱码垛") .Where(v => v.Status == Entity.TaskStatus.码垛抓取完成) .Where(v => v.PalletizingID == tempPalletizingID) .SplitTable(v => v.Take(2)) .ExecuteCommand(); db.Default.Deleteable().Where(v => v.Type == TaskType.OutDepot && v.BusType == "装箱码垛") .Where(v => v.Status == Entity.TaskStatus.码垛抓取完成) .Where(v => v.PalletizingID == tempPalletizingID) .ExecuteCommand(); if (obj.Data.VoucherNo == -1) { obj.Data.Cmd = RobotStationCmd.完成确认; obj.Data.VoucherNo = 1; } else { obj.Data.Cmd = RobotStationCmd.完成确认; obj.Data.VoucherNo++; } }); World.Log($"码垛位{obj.Entity.Code}整垛完成交互结束时间: " + DateTime.Now.ToString("yyyyMMddHHmmss")); return; } if (obj.Data2.PalletID == 0) { SqlSugarHelper.Do(db => { var pallet = db.Default.Queryable().Where(v => v.PalletizState == 0) .Where(v => v.TaskNum == obj.Data3.TaskNumber).First(); if (pallet == null) return; obj.Data.PalletID = pallet.TaskNum; obj.Data.Type = (short)pallet.GoodsType; obj.Data.MaxQty = (short)pallet.PalletMax; obj.Data.Cmd = RobotStationCmd.开始码垛; if (obj.Data.VoucherNo == -1) { obj.Data.VoucherNo = 1; } else { obj.Data.VoucherNo++; } }); } else { if (obj.Data3.TaskNumber == 0) { World.Log("托盘未到位"); MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data3.TaskNumber}请检查托盘是否到位以及电控触摸屏上的任务号是否被清掉", Time = DateTime.Now })); return; } SqlSugarHelper.Do(db => { var pallet = db.Default.Queryable().Where(v => v.PalletizState == 0 && v.Count < v.Finish) .Where(v => v.TaskNum == obj.Data3.TaskNumber).First(); if (pallet == null) { MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"{obj.Entity.Code},{obj.Data3.TaskNumber}未找到对应的码垛信息", Time = DateTime.Now })); return; } var flag = db.Default.Queryable() .Where(v => v.PalletizingID == pallet.ID) .Where(v => v.Status == Entity.TaskStatus.码垛抓取扫码 || v.Status == Entity.TaskStatus.码垛抓取中) .Any(); if (flag) throw new Exception("有等待抓取的货物,无法执行强制完成"); pallet.Count = pallet.Finish; db.Default.Updateable(pallet).ExecuteCommand(); obj.Data.Cmd = RobotStationCmd.强制完成; if (obj.Data.VoucherNo == -1) { obj.Data.VoucherNo = 1; } else { obj.Data.VoucherNo++; } }); } } public override bool Select(Device dev) { return true;// "" dev.Code == "8090" || dev.Code == "8092"||dev.Code=="8096"; } } }