123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- using Newtonsoft.Json;
- using ServiceCenter.Extensions;
- using ServiceCenter.Logs;
- using ServiceCenter.Redis;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Protocol.BCR;
- using WCS.WorkEngineering.Protocol.Station;
- using WCS.WorkEngineering.Worlds;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 主线分流
- /// </summary>
- [BelongTo(typeof(MainWorld))]
- [Description("主线分流点")]
- public class 主线分流点 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR83>>
- {
- protected override bool ParallelDo => true;
- protected override bool SaveLogsToFile => true;
- public override void Do(Device<IStation520, IStation521, IStation523, IBCR83> obj)
- {
- if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
- if (obj.Data4.index == obj.Data4.Lastindex) throw new KnownException("扫码结果未更新", LogLevelEnum.Mid);
- if (obj.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
- //获取条码
- var bcr = obj.Data4.BcrCode.Trim('\0').Trim();
- if (string.IsNullOrWhiteSpace(bcr))
- {
- obj.Data.TaskNumber = 1;
- obj.Data.GoodsStart = obj.Entity.Code.ToShort();
- obj.Data.GoodsEnd = 418;
- obj.Data.VoucherNo++;
- World.Log($"执行记录:条码:[{bcr}];任务号[{1}],扫码错误");
- }
- try
- {
- var key = $"AllocationWarehouseSort:{bcr}";
- var value = RedisHub.WMS.Get(key);
- if (value == null)
- {
- obj.Data.TaskNumber = 1;
- obj.Data.GoodsStart = obj.Entity.Code.ToShort();
- obj.Data.GoodsEnd = 418;
- obj.Data.VoucherNo++;
- }
- //throw new KnownException($"{bcr}无入库信息", LogLevelEnum.Low);
- //获取到仓库Id
- var mainlineDiversion = JsonConvert.DeserializeObject<MainlineDiversion>(value);
- //更具仓库ID来分配目标地址
- //TODO:暂未考虑工字轮型号,统一往09走问题
- int nextAdd = 0;
- switch (mainlineDiversion.WarehouseCode)
- {
- case "1N":
- nextAdd = 418;
- break;
- case "1S":
- nextAdd = 0;
- break;
- case "2N":
- nextAdd = 0;
- break;
- case "2S":
- nextAdd = 0;
- break;
- case "3N":
- nextAdd = 0;
- break;
- case "3S":
- nextAdd = 0;
- break;
- }
- obj.Data.TaskNumber = mainlineDiversion.TaskId;
- obj.Data.GoodsStart = obj.Entity.Code.ToShort();
- obj.Data.GoodsEnd = nextAdd.ToShort();
- obj.Data.VoucherNo++;
- World.Log($"执行记录:条码:[{bcr}];任务号[{mainlineDiversion.TaskId}]");
- RedisHub.WMS.Del(key);
- }
- catch (Exception e)
- {
- var a = 0;
- }
- }
- public override bool Select(Device dev)
- {
- return dev.HasFlag(Extensions.DeviceFlags.主线分流点);
- }
- }
- /// <summary>
- /// 主线分流
- /// </summary>
- public class MainlineDiversion
- {
- /// <summary>
- /// 任务号
- /// </summary>
- public int TaskId { get; set; }
- /// <summary>
- /// 仓库号
- /// </summary>
- public string WarehouseCode { get; set; }
- }
- }
|