| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | using ServiceCenter.Extensions;using ServiceCenter.Logs;using ServiceCenter.SqlSugars;using System;using System.Collections;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.WorkEngineering.Extensions;using WCS.WorkEngineering.Protocol.BCR;using WCS.WorkEngineering.Protocol.SRM;using WCS.WorkEngineering.Protocol.Station;using WCS.WorkEngineering.WebApi.Controllers;using WCS.WorkEngineering.Worlds;using static System.Runtime.InteropServices.JavaScript.JSType;using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;namespace WCS.WorkEngineering.Systems{    /// <summary>    ///  装箱区扫码    /// </summary>    [BelongTo(typeof(MainWorld))]    [Description("装箱区扫码")]    public class 装箱区扫码 : DeviceSystem<Device<IStation520, IStation521, IStation523, IStation91, IBCR81>>    {        protected override bool ParallelDo => true;        protected override bool SaveLogsToFile => true;        private List<Station> devs = new List<Station>();        private List<SRM> srms = new List<SRM>();        public override void Do(Device<IStation520, IStation521, IStation523, IStation91, IBCR81> obj)        {            obj.入库站点是否被禁止();            obj.库前入库站点是否满足执行条件();            string bcr = "";            //开始读取条码            bcr = obj.Data5.GetBCRCode();            if (bcr == null) throw new KnownException("未读取到条码", LogLevelEnum.High);            World.Log($"扫码记录:设备号{obj.Entity.Code}-" +             $"bcr{bcr},521任务号:{obj.Data2.TaskNumber}");            WCS_TaskInfo task = null;            SqlSugarHelper.Do(_db =>            {                var db = _db.Default;                //找到对应任务                if (obj.Entity.Code == "8050")                {                    var taskInfo = db.Queryable<WCS_TaskInfo>().First(x => (x.AddrFrom == "8050" || x.BusType == "间隔板出库") && x.Status == Entity.TaskStatus.WaitingToExecute);                    if (taskInfo == null)                    {                        return;                        //向WMS申请入库任务                        //var res = WmsApi.I_WCS_GetInTask(bcr, obj.Entity.Code);                        //return;                        //throw new KnownException($"未找到条码{bcr}对应WCS任务", LogLevelEnum.High);                    }                    if (taskInfo.Status == Entity.TaskStatus.WaitingToExecute)                    {                        if (taskInfo.Type == TaskType.Delivery)                        {                            taskInfo.AddrNext = "8058";                        }                        else if (taskInfo.Type == TaskType.OutDepot && taskInfo.BusType == "间隔板出库")                        {                            taskInfo.AddrNext = taskInfo.AddrTo;                        }                          taskInfo.Status = Entity.TaskStatus.ConveyorExecution;                        taskInfo.EditWho = "WCS";                        taskInfo.EditTime = DateTime.Now;                        db.Updateable(taskInfo).ExecuteCommand();                        taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, taskInfo.AddrNext, $"8050扫码");                        //taskInfo.updateRedisHash();                        task = taskInfo;                    }                }                else                {                    var taskInfo = db.Queryable<WCS_TaskInfo>().First(x => x.ID == obj.Data2.TaskNumber);                    if (taskInfo == null && obj.Data2.TaskNumber>0)                    {                        obj.Data.TaskNumber = obj.Data2.TaskNumber;                        obj.Data.GoodsStart = obj.Entity.Code.ToShort();                        obj.Data.GoodsEnd = 8148;                        obj.Data.VoucherNo++;                        throw new KnownException($"未找到对应WCS任务{obj.Data2.TaskNumber}", LogLevelEnum.High);                    }                    else if (string.IsNullOrEmpty(taskInfo.BarCode))                    {                        if (db.Queryable<WCS_TaskInfo>().Any(x => x.BarCode == bcr))                        {                            throw new KnownException($"一条托盘码不允许绑定两个任务{obj.Data2.TaskNumber}托盘码{bcr}", LogLevelEnum.High);                        }                        taskInfo.EditWho = "WCS";                        taskInfo.EditTime = DateTime.Now;                        taskInfo.BarCode = bcr;                        if (obj.Data4.Weight == 0)                        {                            obj.Data.TaskNumber = obj.Data2.TaskNumber;                            obj.Data.GoodsStart = obj.Entity.Code.ToShort();                            obj.Data.GoodsEnd = 8148;                            obj.Data.VoucherNo++;                            //taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, "8148", $"称重信息是0,排出到异常口");                            throw new KnownException($"任务{obj.Data2.TaskNumber}称重信息是0,排出到异常口,起始地址{obj.Data.GoodsStart}-目标地址{obj.Data.GoodsEnd}", LogLevelEnum.High);                        }                        taskInfo.AddrNext = taskInfo.AddrTo;                        taskInfo.Weight = (float)Math.Round(obj.Data4.Weight, 2);                        db.Updateable(taskInfo).ExecuteCommand();                        WCS_TaskOld taskOld = db.Queryable<WCS_TaskOld>().SplitTable(tabs => tabs.Take(2)).Where(v => v.ID == taskInfo.ID).OrderByDescending(v => v.AddTime).First();                        if (taskOld != null)                        {                            taskOld.BarCode = taskInfo.BarCode;                            db.Updateable(taskOld).SplitTable(tas => tas.Take(2)).ExecuteCommand();                        }                        taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, taskInfo.AddrNext, $"8058扫码完成");                        //taskInfo.updateRedisHash();                        task = taskInfo;                    }                    else if (taskInfo.BarCode != bcr)                    {                        obj.Data.TaskNumber = obj.Data2.TaskNumber;                        obj.Data.GoodsStart = obj.Entity.Code.ToShort();                        obj.Data.GoodsEnd = 8148;                        obj.Data.VoucherNo++;                        throw new KnownException($"任务{obj.Data2.TaskNumber}绑定的托盘条码与实际扫描条码不一致,排出到异常口,起始地址{obj.Data.GoodsStart}-目标地址{obj.Data.GoodsEnd}", LogLevelEnum.High);                    }                    else if (taskInfo.BarCode == bcr)                    {                        if (taskInfo.Type == TaskType.Delivery || (taskInfo.Type == TaskType.OutDepot && taskInfo.BusType == "间隔板出库"))                        {                            taskInfo.AddrNext = taskInfo.AddrTo;                            taskInfo.EditWho = "WCS";                            taskInfo.EditTime = DateTime.Now;                            taskInfo.Weight = (float)Math.Round(obj.Data4.Weight, 2);                            try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, ""); }                            catch (Exception ex) { throw new KnownException(ex.Message, LogLevelEnum.Mid); }                            db.Updateable(taskInfo).ExecuteCommand();                            taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, taskInfo.AddrNext, $"8058重复扫码完成");                            task = taskInfo;                        }                        else                        {                            //taskInfo.AddrNext = string.IsNullOrEmpty(taskInfo.AddrTo) ? "8128" : "8161";                            taskInfo.AddrNext = string.IsNullOrEmpty(taskInfo.AddrTo) ? "8128" : "8300";                            taskInfo.EditWho = "WCS";                            taskInfo.EditTime = DateTime.Now;                            taskInfo.Weight = (float)Math.Round(obj.Data4.Weight, 2);                            //上抛重量                            try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, taskInfo.BarCode); }                            catch (Exception ex) { throw new KnownException(ex.Message, LogLevelEnum.Mid); }                            db.Updateable(taskInfo).ExecuteCommand();                            taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, taskInfo.AddrNext, $"8058扫码完成");                            //taskInfo.updateRedisHash();                            task = taskInfo;                        }                    }                }            });            if (task == null) return;            obj.Data.TaskNumber = task.ID;            obj.Data.GoodsStart = obj.Entity.Code.ToShort();            obj.Data.GoodsEnd = task.AddrNext.ToShort();            obj.Data.VoucherNo++;            World.Log($"设备号{obj.Entity.Code},任务号{task.ID},起始地址{obj.Data.GoodsStart},目标地址{obj.Data.GoodsEnd}");        }        public override bool Select(Device dev)        {            return dev.Code == "8050"|| dev.Code == "8058";        }    }}
 |