| 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";        }    }}
 |