| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- 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<Device<IRobot530, IRobot531,IStation521>>
- {
- protected override bool ParallelDo => true;
-
- public override void Do(Device<IRobot530, IRobot531, IStation521> 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<Palletizing>().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<WCS_TaskOld>()
- .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<WCS_TaskInfo>().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<Palletizing>().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<Palletizing>().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<WCS_TaskInfo>()
- .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";
- }
- }
- }
|