From 79ad6097cbe4b4d6cee66dd8ad9c3c1c8f2b5243 Mon Sep 17 00:00:00 2001 From: IPC-610 <IPC-610@DESKTOP-6LEOOS3> Date: 星期二, 15 十月 2024 16:42:49 +0800 Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/WCSNet6 --- Admin.NET/WCS.Application/Hub/IPlcHub.cs | 13 + Admin.NET/WCS.Application/PLC/PLCService.cs | 16 + Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs | 104 +++++++++++ Web/src/views/device/deviceInfo/index.vue | 10 + Web/src/api/wcs/wcsTask.ts | 9 + Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs | 2 Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 6 Admin.NET/WCS.Application/PLC/ModbusUtil.cs | 273 ++++++++++++++++++++++++++++++ Admin.NET/WCS.Application/Hub/PlcHub.cs | 29 ++ Web/src/views/wcs/wcsTask/index.vue | 34 +++ 10 files changed, 482 insertions(+), 14 deletions(-) diff --git a/Admin.NET/WCS.Application/Hub/IPlcHub.cs b/Admin.NET/WCS.Application/Hub/IPlcHub.cs index 580024e..1f58fde 100644 --- a/Admin.NET/WCS.Application/Hub/IPlcHub.cs +++ b/Admin.NET/WCS.Application/Hub/IPlcHub.cs @@ -43,9 +43,22 @@ } public class PlcPositionInfo { + /// <summary> + /// 宸ヤ綅鍙� + /// </summary> public string StationNum { get; set; } + /// <summary> + /// 鏄惁鏈夌墿鍝� + /// </summary> public bool BoHaveItem { get; set; } + /// <summary> + /// Plc绫诲瀷 + /// </summary> public PLCTypeEnum Type { get; set; } + + /// <summary> + /// 璺烘満浣嶇疆 + /// </summary> public int BoxHeight { get; set; } public string EndLocat { get; set; } } diff --git a/Admin.NET/WCS.Application/Hub/PlcHub.cs b/Admin.NET/WCS.Application/Hub/PlcHub.cs index bec19d3..a7caaa5 100644 --- a/Admin.NET/WCS.Application/Hub/PlcHub.cs +++ b/Admin.NET/WCS.Application/Hub/PlcHub.cs @@ -129,6 +129,8 @@ BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal, + BoOutLock=PLCTaskAction.boOutLock, + BoEnterLock=PLCTaskAction.boEnterLock, Error = "涓嶱CL浜や簰澶辫触锛屾搷浣滃け璐ワ紒" }); return; @@ -146,6 +148,8 @@ BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal, + BoOutLock = PLCTaskAction.boOutLock, + BoEnterLock = PLCTaskAction.boEnterLock, Error = "PCL鏈繛鎺ワ紝鎿嶄綔澶辫触锛�" }); return; @@ -178,6 +182,8 @@ BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal, + BoOutLock=PLCTaskAction.boOutLock, + BoEnterLock=PLCTaskAction.boEnterLock, Error = "涓嶱CL浜や簰澶辫触锛屾搷浣滃け璐ワ紒" }); return; @@ -195,27 +201,44 @@ BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal, + BoOutLock = PLCTaskAction.boOutLock, + BoEnterLock = PLCTaskAction.boEnterLock, Error = "PCL鏈繛鎺ワ紝鎿嶄綔澶辫触锛�" }); return; } } - await _plcHubContext.Clients.All.UpdateService(new PLCServiceModel() { BoRunningState = PLCTaskAction.boRunningState, BoRefresh = PLCTaskAction.boRefresh, BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal }); + //鍑哄簱閿佸畾 + if (context.BoOutLock.HasValue) + { + PLCTaskAction.boOutLock = context.BoOutLock.Value; + await _sysConfigService.UpdateConfigValue("sys_BoOutLock", context.BoOutLock.Value); + } + //鍏ュ簱閿佸畾 + if (context.BoEnterLock.HasValue) + { + PLCTaskAction.boEnterLock = context.BoEnterLock.Value; + await _sysConfigService.UpdateConfigValue("sys_BoEnterLock", context.BoEnterLock.Value); + } + await _plcHubContext.Clients.All.UpdateService(new PLCServiceModel() { BoRunningState = PLCTaskAction.boRunningState, BoRefresh = PLCTaskAction.boRefresh, BoOffline = PLCTaskAction.boOffline, BoDemo = PLCTaskAction.boDemo, BoDrumReversal = PLCTaskAction.boDrumReversal, BoOutLock = PLCTaskAction.boOutLock, BoEnterLock = PLCTaskAction.boEnterLock }); } } public class PLCServiceModel { public bool? BoRunningState { get; set; } - public bool? BoOffline { get; set; } - public bool? BoRefresh { get; set; } public bool? BoDemo { get; set; } public bool? BoDrumReversal { get; set; } + + public bool? BoOutLock { get; set; } + + public bool? BoEnterLock { get; set; } + /// <summary> /// 閿欒淇℃伅 /// </summary> diff --git a/Admin.NET/WCS.Application/PLC/ModbusUtil.cs b/Admin.NET/WCS.Application/PLC/ModbusUtil.cs new file mode 100644 index 0000000..1c77885 --- /dev/null +++ b/Admin.NET/WCS.Application/PLC/ModbusUtil.cs @@ -0,0 +1,273 @@ +锘縰sing IoTClient; +using IoTClient.Clients.Modbus; +using IoTClient.Common.Enums; +using IoTClient.Enums; +using IoTClient.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WCS.Application; +/// <summary> +/// Modbus +/// </summary> +public class ModbusUtil +{ + public readonly long PlcId; + public readonly string PlcIP; + private ModbusTcpClient _client; + private WcsPlc _modPlc; + private readonly object OLock = new object(); + public ModbusUtil(WcsPlc modPlc) + { + //娴嬭瘯浠g爜 + //WCS.Application.ModbusUtil modUtil = new WCS.Application.ModbusUtil(new WCS.Application.WcsPlc() { IP = "127.0.0.1", Port = 502 }); + //var result = modUtil.GetDBValue(WCS.Application.PLCDataTypeEnum.Int, "4"); + //Console.WriteLine(result.value); + //var result2 = modUtil.SetDBValue(WCS.Application.PLCDataTypeEnum.Int, "4", "44"); + //Console.WriteLine(result2.IsSucceed); + + PlcId = modPlc.Id; + PlcIP = modPlc.IP; + _modPlc = modPlc; + _client = new ModbusTcpClient(modPlc.IP, modPlc.Port); + _client.Open(); + } + + public bool Connected + { + get { return _client.Connected; } + } + public IoTClient.Result Open() + { + return _client.Open(); + } + public IoTClient.Result Close() + { + return _client.Close(); + } + /// <summary> + /// 璇诲彇PLC鍊� + /// </summary> + /// <param name="PosType">瀛楃绫诲瀷</param> + /// <param name="Pos">鍋忕Щ閲�/鍦板潃</param> + /// <param name="StationNumber">绔欏彿</param> + /// <returns></returns> + public (IoTClient.Result, dynamic value) GetDBValue(PLCDataTypeEnum PosType, string Pos, byte StationNumber = 1) + { + lock (OLock) + { + dynamic result = null; + switch (PosType) + { + case PLCDataTypeEnum.Bit: + result = _client.ReadCoil(Pos, StationNumber); + break; + case PLCDataTypeEnum.Byte: + result = _client.ReadDiscrete(Pos, StationNumber); + break; + case PLCDataTypeEnum.Short: + result = _client.ReadInt16(Pos, StationNumber); + break; + case PLCDataTypeEnum.UShort: + result = _client.ReadUInt16(Pos, StationNumber); + break; + case PLCDataTypeEnum.Int: + result = _client.ReadInt32(Pos, StationNumber); + break; + case PLCDataTypeEnum.UInt: + result = _client.ReadUInt32(Pos, StationNumber); + break; + case PLCDataTypeEnum.Long: + result = _client.ReadInt64(Pos, StationNumber); + break; + case PLCDataTypeEnum.ULong: + result = _client.ReadUInt64(Pos, StationNumber); + break; + case PLCDataTypeEnum.Float: + result = _client.ReadFloat(Pos, StationNumber); + break; + case PLCDataTypeEnum.Double: + result = _client.ReadDouble(Pos, StationNumber); + break; + case PLCDataTypeEnum.String: + result = _client.ReadString(Pos, StationNumber); + break; + default: + result = new IoTClient.Result<object>(); + break; + } + return (result, result.Value); + } + } + /// <summary> + /// 鎵归噺璇诲彇PLC鍊� + /// </summary> + /// <returns></returns> + public Result<List<ModbusOutput>> GetBatchDBValue(Dictionary<string, PLCDataTypeEnum> listaddress) + { + lock (OLock) + { + var list = new List<ModbusInput>(); + foreach (var address in listaddress) + { + switch (address.Value) + { + case PLCDataTypeEnum.Bit: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Bool, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Byte: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Byte, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Short: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Int16, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.UShort: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.UInt16, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Int: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Int32, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.UInt: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.UInt32, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Long: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Int64, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.ULong: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.UInt64, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Float: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Float, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.Double: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.Double, + FunctionCode = 3, + StationNumber = 1 + }); + break; + case PLCDataTypeEnum.String: + list.Add(new ModbusInput() + { + Address = address.Key, + DataType = DataTypeEnum.String, + FunctionCode = 3, + StationNumber = 1 + }); + break; + default: + break; + } + } + return _client.BatchRead(list); + } + } + /// <summary> + /// 鍐欏叆PLC鍊� + /// </summary> + /// <param name="PosType">瀛楃绫诲瀷</param> + /// <param name="Pos">鍋忕Щ閲�/鍦板潃</param> + /// <param name="Value">鍐欏叆鍊�</param> + /// <param name="StationNumber">绔欏彿</param> + /// <returns></returns> + public IoTClient.Result SetDBValue(PLCDataTypeEnum PosType, string Pos, string Value, byte StationNumber = 1) + { + switch (PosType) + { + case PLCDataTypeEnum.Bit: + if (!bool.TryParse(Value, out bool bit)) + { + if (Value == "0") + bit = false; + else if (Value == "1") + bit = true; + else + { + throw new Exception("鍐欏叆鍊奸敊璇�"); + } + } + return _client.Write(Pos, bit, StationNumber); + case PLCDataTypeEnum.Byte: + return _client.Write(Pos, byte.Parse(Value), StationNumber); + case PLCDataTypeEnum.Short: + return _client.Write(Pos, short.Parse(Value), StationNumber); + case PLCDataTypeEnum.UShort: + return _client.Write(Pos, ushort.Parse(Value), StationNumber); + case PLCDataTypeEnum.Int: + return _client.Write(Pos, int.Parse(Value), StationNumber); + case PLCDataTypeEnum.UInt: + return _client.Write(Pos, uint.Parse(Value), StationNumber); + case PLCDataTypeEnum.Long: + return _client.Write(Pos, long.Parse(Value), StationNumber); + case PLCDataTypeEnum.ULong: + return _client.Write(Pos, ulong.Parse(Value), StationNumber); + case PLCDataTypeEnum.Float: + return _client.Write(Pos, float.Parse(Value), StationNumber); + case PLCDataTypeEnum.Double: + return _client.Write(Pos, float.Parse(Value), StationNumber); + case PLCDataTypeEnum.String: + return _client.Write(Pos, Value, StationNumber); + default: + return new IoTClient.Result(); + } + } +} diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 058b15d..2d0be31 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -64,12 +64,17 @@ // 璺烘満绌洪棽锛岃幏鍙栧嚭搴撲换鍔°�佺Щ搴撲换鍔� { // 鑾峰彇浠诲姟淇℃伅 - var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.CreateTime).OrderBy(m => m.Levels, OrderByType.Desc) + var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.CreateTime).OrderBy(m => m.Levels, OrderByType.Asc) .First(s => s.Status == TaskStatusEnum.Wait && (s.TaskType == TaskTypeEnum.Out || s.TaskType == TaskTypeEnum.Move) && s.StartRoadway == modDevice.StationNum); if (modTask == null) { break; + } + //鍒ゆ柇鍑哄簱閿佸畾鏄惁鎵撳紑 + if (PLCTaskAction.boOutLock) + { + break;//鍑哄簱閿佸畾鎵撳紑鍒欎笉鎵ц鍑哄簱浠诲姟 } PlcTaskInfo taskInfo = new PlcTaskInfo(); @@ -529,6 +534,7 @@ // 鏀瑰彉浠诲姟鐘舵�� modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; + modTask.Levels = 999; _db.Updateable(modTask).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); @@ -950,7 +956,6 @@ break; case "330": { - // 鍐欏叆浠诲姟 鎵樼洏绉诲姩 340 // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� @@ -967,6 +972,11 @@ { // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず break; + } + //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑 + if (PLCTaskAction.boEnterLock) + { + break;//鍏ュ簱閿佸畾鎵撳紑鍒欎笉鎵ц鍏ュ簱浠诲姟 } // 鑾峰彇宸烽亾鍙e叆搴撳伐浣� @@ -1317,6 +1327,7 @@ // 鏀瑰彉浠诲姟鐘舵�� modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; + modTask.Levels = 999; _db.Updateable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); // 鎻掑叆浠诲姟鏄庣粏 @@ -1419,6 +1430,7 @@ // 鏀瑰彉浠诲姟鐘舵�� modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; + modTask.Levels = 999; _db.Updateable(modTask).ExecuteCommand(); HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs index f8471a5..e4ef889 100644 --- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs +++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs @@ -17,6 +17,10 @@ public static bool boDemo = false; //婊氱瓛鍙嶈浆 public static bool boDrumReversal = false; + //鍑哄簱閿佸畾 + public static bool boOutLock = false; + //鍏ュ簱閿佸畾 + public static bool boEnterLock = false; public static List<PlcPositionInfo> listPositionInfo = new List<PlcPositionInfo>(); @@ -55,6 +59,8 @@ boRefresh = _sysConfigService.GetConfigValue<bool>("sys_Refresh").Result; boDemo = _sysConfigService.GetConfigValue<bool>("sys_demo").Result; boDrumReversal = _sysConfigService.GetConfigValue<bool>("sys_DrumReversal").Result; + boOutLock = _sysConfigService.GetConfigValue<bool>("sys_BoOutLock").Result; + boEnterLock = _sysConfigService.GetConfigValue<bool>("sys_BoEnterLock").Result; } /// <summary> /// 鍒濆鍖朠LC杩炴帴 diff --git a/Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs b/Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs index ed6dfd1..7aa3764 100644 --- a/Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs +++ b/Admin.NET/WCS.Application/Service/WcsPlc/WcsPlcService.cs @@ -136,7 +136,7 @@ } } //鏈嶅姟鐘舵�� - var modService = new { PLCTaskAction.boRunningState, PLCTaskAction.boOffline, PLCTaskAction.boRefresh, PLCTaskAction.boDemo, PLCTaskAction.boDrumReversal }; + var modService = new { PLCTaskAction.boRunningState, PLCTaskAction.boOffline, PLCTaskAction.boRefresh, PLCTaskAction.boDemo, PLCTaskAction.boDrumReversal, PLCTaskAction.boOutLock, PLCTaskAction.boEnterLock }; return new { listPlc, modService }; } /// <summary> diff --git a/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs index 8820828..da996a9 100644 --- a/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs +++ b/Admin.NET/WCS.Application/Service/WcsTask/WcsTaskService.cs @@ -2,10 +2,12 @@ using AngleSharp.Dom; using COSXML.Network; using DocumentFormat.OpenXml.Drawing.Charts; +using DocumentFormat.OpenXml.Math; using Elastic.Clients.Elasticsearch.Tasks; using Furion.DatabaseAccessor; using Furion.Logging; using Microsoft.AspNetCore.SignalR; +using NewLife; using WCS.Application.Entity; using WCS.Application.Service.WcsTask.Dto; @@ -53,7 +55,7 @@ .WhereIF(!string.IsNullOrWhiteSpace(input.PalletNo), u => u.PalletNo.Contains(input.PalletNo.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.Origin), u => u.Origin.Contains(input.Origin.Trim())) .Select<WcsTaskOutput>(); - return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize); + return await query.OrderBy(o=>o.Levels).OrderByDescending(o=>o.CreateTime).ToPagedListAsync(input.Page, input.PageSize); } /// <summary> @@ -196,6 +198,7 @@ modTask.CancelDate = DateTime.Now;//鍙栨秷鏃堕棿 } modTask.Status = input.Status; + modTask.Levels = 999; await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Status, s.IsSuccess, s.FinishDate, s.CancelDate, s.UpdateTime, s.UpdateUserId, s.UpdateUserName }).ExecuteCommandAsync(); //鍐欏叆浠诲姟鏄庣粏琛� WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() @@ -293,6 +296,105 @@ //涓嬪彂浠诲姟鏃ュ織 HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } + /// <summary> + /// 浠诲姟缃《 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "TopUpTask")] + [DisplayName("浠诲姟缃《")] + public async Task TopUpTask(UpdateWcsTaskInput input) + { + var modTask = await _wcsTaskRep.GetByIdAsync(input.Id); + if (modTask.Status != TaskStatusEnum.Wait) + { + throw Oops.Oh("鍙湁绛夊緟鎵ц鐨勪换鍔℃墠鑳界疆椤讹紒"); + } + int editNum = 1; + List<string> _editTaskNoList = new List<string>(); + //鍌ㄤ綅娣卞害 + string locatDepth = ""; + if (modTask.TaskType == TaskTypeEnum.Out || modTask.TaskType == TaskTypeEnum.Move)//鍑哄簱浠诲姟鎴栧叆搴撲换鍔� + { + locatDepth = modTask.StartLocate.Substring(modTask.StartLocate.Length - 1, 1);//璧峰鍌ㄤ綅娣卞害 + if (locatDepth == "2")//鍒ゆ柇褰撳墠鍌ㄤ綅鏄惁娣卞害涓�2锛屽唴渚у偍浣� + { + string locatString = modTask.StartLocate.Substring(0, modTask.StartLocate.Length - 1) + "1";//鑾峰彇澶栦晶鍌ㄤ綅鍦板潃 + //鍒ゆ柇澶栦晶鍌ㄤ綅鏄惁鏈夌瓑寰呮墽琛岀殑浠诲姟锛屾湁灏变紭鍏堟墽琛� + var modTask2 = _db.Queryable<WcsTask>().First(w => w.IsDelete == false && w.Status == TaskStatusEnum.Wait && w.StartLocate == locatString); + if (modTask2 != null) + { + modTask2.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask2).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask2.TaskNo); + + modTask.Levels = 2; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + + editNum = 2; + } + else + { + modTask.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + } + } + else + { + modTask.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + } + } + if (modTask.TaskType == TaskTypeEnum.In)//鍏ュ簱浠诲姟 + { + if (string.IsNullOrEmpty(modTask.EndLocate)) + { + throw Oops.Oh("璇ュ叆搴撲换鍔¤繕鏈垎閰嶅偍浣嶏紝缃《澶辫触锛�"); + } + locatDepth = modTask.EndLocate.Substring(modTask.EndLocate.Length - 1, 1);//鐩爣鍌ㄤ綅娣卞害 + if (locatDepth == "1")//鍒ゆ柇褰撳墠鍌ㄤ綅鏄惁娣卞害涓�1锛屽渚у偍浣� + { + string locatString = modTask.EndLocate.Substring(0, modTask.EndLocate.Length - 1) + "2";//鑾峰彇鍐呬晶鍌ㄤ綅鍦板潃 + //鍒ゆ柇鍐呬晶鍌ㄤ綅鏄惁鏈夌瓑寰呮墽琛岀殑浠诲姟锛屾湁灏变紭鍏堟墽琛� + var modTask2 = _db.Queryable<WcsTask>().First(w => w.IsDelete == false && w.Status == TaskStatusEnum.Wait && (w.StartLocate == locatString || w.EndLocate == locatString)); + if (modTask2 != null) + { + modTask2.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask2).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask2.TaskNo); + + modTask.Levels = 2; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + + editNum = 2; + } + else + { + modTask.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + } + } + else + { + modTask.Levels = 1; + await _wcsTaskRep.Context.Updateable(modTask).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + _editTaskNoList.Add(modTask.TaskNo); + } + } + //椤哄欢鍏朵粬缃《浠诲姟 + var modTaskList = _db.Queryable<WcsTask>().Where(w => w.IsDelete == false && w.Status == TaskStatusEnum.Wait && w.Levels != 999 && !_editTaskNoList.Contains(w.TaskNo)).ToList(); + foreach (var item in modTaskList) + { + item.Levels += editNum; + } + await _wcsTaskRep.Context.Updateable(modTaskList).UpdateColumns(s => new { s.Levels }).ExecuteCommandAsync(); + } /// <summary> /// 鑷姩鐢熸垚浠诲姟鍙� diff --git a/Web/src/api/wcs/wcsTask.ts b/Web/src/api/wcs/wcsTask.ts index 6c44521..e8c73d2 100644 --- a/Web/src/api/wcs/wcsTask.ts +++ b/Web/src/api/wcs/wcsTask.ts @@ -7,6 +7,7 @@ DetailWcsTask = '/api/wcsTask/detail', FinshWcsTask = '/api/wcsTask/Finsh', UploadWcsTask = '/api/wcsTask/UploadTask', + TopUpWcsTask = '/api/wcsTask/TopUpTask', } // 澧炲姞浠诲姟琛� @@ -64,4 +65,12 @@ url: Api.UploadWcsTask, method: 'post', data: params, + }); + +// 缃《浠诲姟 +export const topUpWcsTask = (params?: any) => + request({ + url: Api.TopUpWcsTask, + method: 'post', + data: params, }); \ No newline at end of file diff --git a/Web/src/views/device/deviceInfo/index.vue b/Web/src/views/device/deviceInfo/index.vue index 7b827eb..6281d12 100644 --- a/Web/src/views/device/deviceInfo/index.vue +++ b/Web/src/views/device/deviceInfo/index.vue @@ -1,5 +1,5 @@ <template> - <div class="sys-user-container" style="overflow: hidden;"> + <div class="sys-user-container"> <el-row> <el-col :span="3"> <el-collapse v-model="activeName"> @@ -24,6 +24,14 @@ <el-switch v-model="state.boDrumReversal" active-text="" inactive-text="婊氬姩鍙嶈浆" @change="handleSwitchChange('boDrumReversal', $event)"></el-switch> </el-card> + <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> + <el-switch v-model="state.boOutLock" active-text="" inactive-text="鍑哄簱閿佸畾" + @change="handleSwitchChange('boOutLock', $event)"></el-switch> + </el-card> + <el-card class="box-card" shadow="hover" style="margin-top: 3px;"> + <el-switch v-model="state.boEnterLock" active-text="" inactive-text="鍏ュ簱閿佸畾" + @change="handleSwitchChange('boEnterLock', $event)"></el-switch> + </el-card> </el-collapse-item> <el-collapse-item title="鍫嗗灈鏈�" name="2"> diff --git a/Web/src/views/wcs/wcsTask/index.vue b/Web/src/views/wcs/wcsTask/index.vue index f569b3a..dca6577 100644 --- a/Web/src/views/wcs/wcsTask/index.vue +++ b/Web/src/views/wcs/wcsTask/index.vue @@ -68,6 +68,7 @@ @cell-click="handleClick" @sort-change="sortChange" border=""> <el-table-column type="index" label="搴忓彿" width="55" align="center" /> <el-table-column prop="taskNo" label="浠诲姟鍙�" width="130" show-overflow-tooltip="" /> + <el-table-column prop="levels" label="浼樺厛绾�" width="55" show-overflow-tooltip="" /> <el-table-column prop="taskType" width="85" label="浠诲姟绫诲瀷" show-overflow-tooltip=""> <template #default="scope"> <el-tag :type="dv('TaskTypeEnum', scope.row.taskType)?.tagType"> {{ dv('TaskTypeEnum', @@ -114,7 +115,7 @@ <ModifyRecord :data="scope.row" /> </template> </el-table-column> --> - <el-table-column prop="鎿嶄綔" label="鎿嶄綔" width="150" align="center" fixed="right" show-overflow-tooltip="" + <el-table-column prop="鎿嶄綔" label="鎿嶄綔" width="200" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wcsTask:complete') || auth('wcsTask:cancell')"> <template #default="scope"> <template v-if="scope.row.status <= 1"> @@ -126,6 +127,10 @@ <template v-if="scope.row.status == 2 && scope.row.origin == 'WMS'"> <el-button icon="ele-Upload" size="small" text="" type="primary" @click="uploadTask(scope.row)" v-auth="'wcsTask:cancell'"> 涓婁紶 </el-button> + </template> + <template v-if="scope.row.status == 0"> + <el-button icon="ele-Top" size="small" text="" type="primary" @click="topUpTask(scope.row)" + v-auth="'wcsTask:cancell'"> 缃《 </el-button> </template> </template> </el-table-column> @@ -148,10 +153,10 @@ <el-row> <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> <el-form-item label="浠诲姟鍙�"> - <el-input v-model="queryParams2.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿" /> + <el-input v-model="queryParams2.taskNo" clearable="" placeholder="璇疯緭鍏ヤ换鍔″彿"style="width: 130px;" /> </el-form-item> </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" style="margin-left: 20px;"> <el-form-item> <el-button type="primary" icon="ele-Search" @click="handleQuery2"> 鏌ヨ </el-button> @@ -195,7 +200,7 @@ import printDialog from '/@/views/system/print/component/hiprint/preview.vue' import editDialog from '/@/views/wcs/wcsTask/component/editDialog.vue' -import { pageWcsTask, finshWcsTask, uploadWcsTask } from '/@/api/wcs/wcsTask'; +import { pageWcsTask, finshWcsTask, uploadWcsTask,topUpWcsTask } from '/@/api/wcs/wcsTask'; import { pageWcsMonitorTask } from '/@/api/wcs/wcsTaskMonitor'; import { signalR } from './signalR'; @@ -333,10 +338,27 @@ }) .then(async () => { var param = Object.assign(row); - await uploadWcsTask(param); + await topUpTask(param); handleQuery(); handleQuery2(); - ElMessage.success("涓婁紶浠诲姟鎴愬姛"); + ElMessage.success("缃《浠诲姟鎴愬姛"); + }) + .catch(() => { }); + +} +//缃《浠诲姟 +const topUpTask = async (row: any) => { + ElMessageBox.confirm(`纭畾瑕佺疆椤朵换鍔″悧?`, "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(async () => { + var param = Object.assign(row); + await topUpWcsTask(param); + handleQuery(); + handleQuery2(); + ElMessage.success("缃《浠诲姟鎴愬姛"); }) .catch(() => { }); -- Gitblit v1.8.0