From 5999e9c77ee30a7090ed7f6cdd07d82fe9a4015b Mon Sep 17 00:00:00 2001 From: bklLiudl <673013083@qq.com> Date: 星期三, 11 九月 2024 08:44:06 +0800 Subject: [PATCH] Merge branch 'master' into liudl --- Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoOutput.cs | 121 ++++ Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceOutput.cs | 26 Web/src/views/wcs/wcsMateialPzInfo/index.vue | 217 +++++++ Admin.NET/WCS.Application/Entity/WcsMateialPzInfo.cs | 83 ++ Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs | 61 ++ Web/src/api/wcs/wcsDevice.ts | 8 Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs | 206 +++++++ Web/src/views/wcs/wcsMateialPzInfo/component/editDialog.vue | 191 ++++++ Admin.NET/WCS.Application/Hub/IPlcDeviceHub.cs | 16 Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs | 2 Web/src/views/device/deviceMonitor/signalR.ts | 49 + Admin.NET/WCS.Application/Service/WcsMateialPzInfo/WcsMateialPzInfoService.cs | 128 ++++ Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs | 99 +++ Web/src/views/device/deviceMonitor/index.vue | 61 + Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoInput.cs | 200 ++++++ Web/src/views/device/sortPallet/index.vue | 10 Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs | 12 Web/src/views/device/deviceMonitor/component/setting.vue | 42 Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoDto.cs | 119 ++++ Web/src/views/device/wcsOderTask/component/editDialog.vue | 4 Web/src/api/wcs/wcsMateialPzInfo.ts | 50 + 21 files changed, 1,669 insertions(+), 36 deletions(-) diff --git a/Admin.NET/WCS.Application/Entity/WcsMateialPzInfo.cs b/Admin.NET/WCS.Application/Entity/WcsMateialPzInfo.cs new file mode 100644 index 0000000..b8f4aee --- /dev/null +++ b/Admin.NET/WCS.Application/Entity/WcsMateialPzInfo.cs @@ -0,0 +1,83 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +using Admin.NET.Core; +namespace WCS.Application.Entity; + +/// <summary> +/// 鐗╂枡鍝佺淇℃伅缁存姢琛� +/// </summary> +[SugarTable("WCSMateialPZInfo","鐗╂枡鍝佺淇℃伅缁存姢琛�")] +[Tenant("1300000000001")] +public class WcsMateialPzInfo : EntityBaseData +{ + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + [SugarColumn(ColumnName = "SkuNo", ColumnDescription = "鐗╂枡缂栫爜", Length = 20)] + public string? SkuNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + [SugarColumn(ColumnName = "SkuName", ColumnDescription = "鐗╂枡鍚嶇О", Length = 20)] + public string? SkuName { get; set; } + + /// <summary> + /// 闀� + /// </summary> + [SugarColumn(ColumnName = "Length", ColumnDescription = "闀�", Length = 20)] + public string? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + [SugarColumn(ColumnName = "Width", ColumnDescription = "瀹�", Length = 20)] + public string? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + [SugarColumn(ColumnName = "Height", ColumnDescription = "楂�", Length = 20)] + public string? Height { get; set; } + + /// <summary> + /// 鍝佺鍙� + /// </summary> + [SugarColumn(ColumnName = "PZNo", ColumnDescription = "鍝佺鍙�", Length = 10)] + public string? PZNo { get; set; } + + /// <summary> + /// 澶囩敤瀛楁1 + /// </summary> + [SugarColumn(ColumnName = "UDF1", ColumnDescription = "澶囩敤瀛楁1", Length = 20)] + public string? UDF1 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁2 + /// </summary> + [SugarColumn(ColumnName = "UDF2", ColumnDescription = "澶囩敤瀛楁2", Length = 20)] + public string? UDF2 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁3 + /// </summary> + [SugarColumn(ColumnName = "UDF3", ColumnDescription = "澶囩敤瀛楁3", Length = 20)] + public string? UDF3 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁4 + /// </summary> + [SugarColumn(ColumnName = "UDF4", ColumnDescription = "澶囩敤瀛楁4", Length = 20)] + public string? UDF4 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁5 + /// </summary> + [SugarColumn(ColumnName = "UDF5", ColumnDescription = "澶囩敤瀛楁5", Length = 20)] + public string? UDF5 { get; set; } + +} diff --git a/Admin.NET/WCS.Application/Hub/IPlcDeviceHub.cs b/Admin.NET/WCS.Application/Hub/IPlcDeviceHub.cs new file mode 100644 index 0000000..3ec5468 --- /dev/null +++ b/Admin.NET/WCS.Application/Hub/IPlcDeviceHub.cs @@ -0,0 +1,16 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WCS.Application; +public interface IPlcDeviceHub +{ + /// <summary> + /// 涓嬪彂璁惧淇℃伅 + /// </summary> + /// <param name="context"></param> + /// <returns></returns> + Task PublicPlcDevice(WcsDeviceOutput context); +} diff --git a/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs b/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs new file mode 100644 index 0000000..7a8ff9c --- /dev/null +++ b/Admin.NET/WCS.Application/Hub/PlcDeviceHub.cs @@ -0,0 +1,206 @@ +锘縰sing Admin.NET.Core.Service; +using DocumentFormat.OpenXml.Office2010.ExcelAc; +using Furion.InstantMessaging; +using Microsoft.AspNetCore.SignalR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WCS.Application; + +/// <summary> +/// 浠诲姟鏃ュ織闆嗙嚎鍣� +/// </summary> +[MapHub("/hubs/PlcDevice")] +public class PlcDeviceHub : Hub<IPlcDeviceHub> +{ + private static readonly IHubContext<PlcDeviceHub, IPlcDeviceHub> _plcDeviceHubContext = App.GetService<IHubContext<PlcDeviceHub, IPlcDeviceHub>>(); + private static readonly SysCacheService _sysCacheService = App.GetRequiredService<SysCacheService>(); + private static bool boRunningState = false; + private static CancellationTokenSource cts;//鍙栨秷绾跨▼鏍囪瘑 + private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); + public PlcDeviceHub() + { + } + + /// <summary> + /// 杩炴帴 + /// </summary> + /// <returns></returns> + public override async Task OnConnectedAsync() + { + var httpContext = Context.GetHttpContext(); + var userId = (httpContext.User.FindFirst(ClaimConst.UserId)?.Value).ToLong(); + _sysCacheService.Set("PlcDeviceHub:" + Context.ConnectionId, userId); + if (!boRunningState) + { + //寮�鍚鍙栨湇鍔$嚎绋� + boRunningState = true; + cts = new CancellationTokenSource();//鍙栨秷绾跨▼鏍囪瘑 + StartRead(); + } + await base.OnConnectedAsync(); + } + + /// <summary> + /// 鏂紑 + /// </summary> + /// <param name="exception"></param> + /// <returns></returns> + public override async Task OnDisconnectedAsync(Exception exception) + { + _sysCacheService.Remove("PlcDeviceHub:" + Context.ConnectionId); + //濡傛灉娌℃湁杩炴帴浜� 灏卞叧闂嚎绋嬩笉璇讳簡 + if (_sysCacheService.GetKeysByPrefixKey("PlcDeviceHub").Count == 0) + { + cts.Cancel(); + boRunningState = false; + } + await base.OnDisconnectedAsync(exception); + } + + /// <summary> + /// 寮�鍚鍙杙lc绾跨▼ + /// </summary> + public static void StartRead() + { + Task.Run(() => + { + // 鐢ㄤ簬淇濆瓨姣忎釜璁惧鐨勫垵濮嬬姸鎬� + var initialStates = new Dictionary<long, WcsDeviceOutput>(); + + var listPlc = _db.Queryable<WcsPlc>().Where(s => s.Type == PLCTypeEnum.StackingMachine || s.Type == PLCTypeEnum.ConveyorLine).ToList(); + var listPlcId = listPlc.Select(s => s.Id).ToList(); + var listPlcDevice = _db.Queryable<WcsDevice>().Where(s => s.DeviceType == DeviceTypeEnum.Business && listPlcId.Contains(s.PlcId)).Select<WcsDeviceOutput>().ToList(); + var listPlcDeviceId = listPlcDevice.Select(s => s.Id).ToList(); + var listPlcStation = _db.Queryable<WcsPosition>().Where(s => listPlcDeviceId.Contains(s.DeviceId)).ToList(); + while (true) + { + try + { + //鑾峰彇璺烘満鐨勭姸鎬� + foreach (var modDevice in listPlcDevice) + { + //鍙栨秷绾跨▼ + if (cts.Token.IsCancellationRequested) + { + throw new OperationCanceledException(); + } + var modPlc = listPlc.Where(s => s.Id == modDevice.PlcId).FirstOrDefault(); + modDevice.Type = modPlc.Type; + //璇诲彇plc鐨勫�� + var modConn = PLCTaskAction.listPlcConn.FirstOrDefault(s => s != null && s.PlcId == modDevice.PlcId); + if (modConn == null) + { + modDevice.Status = false; + continue; + } + else + { + modDevice.Status = modConn.Connected; + } + if (modConn.Connected) + { + var listPosition = listPlcStation.Where(s => s.DeviceId == modDevice.Id).ToList(); + (var result, var plc) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); + modDevice.Plc = Convert.ToString(plc); + (result, var wcs) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + modDevice.Wcs = Convert.ToString(wcs); + //浠诲姟鍙� + var modPositionTask = listPosition.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + (result, var taskNo) = modConn.GetPlcDBValue(modPositionTask.PosType, modDevice.DbNumber, modPositionTask.PlcPos, modPositionTask.StringLength); + modDevice.TaskNo = Convert.ToString(taskNo); + //浠诲姟绫诲瀷 + var modPositionTaskType = listPosition.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + (result, var taskType) = modConn.GetPlcDBValue(modPositionTaskType.PosType, modDevice.DbNumber, modPositionTaskType.PlcPos); + modDevice.TaskType = (TaskTypeEnum)Convert.ToInt32(taskType); + //璧峰宸ヤ綅 + var modPositionStartLocatNo = listPosition.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + (result, var startLocatNo) = modConn.GetPlcDBValue(modPositionStartLocatNo.PosType, modDevice.DbNumber, modPositionStartLocatNo.PlcPos); + modDevice.StartLocatNo = Convert.ToString(startLocatNo); + //鐩殑宸ヤ綅 + var modPositionEndLocatNo = listPosition.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + (result, var endLocatNo) = modConn.GetPlcDBValue(modPositionEndLocatNo.PosType, modDevice.DbNumber, modPositionEndLocatNo.PlcPos); + modDevice.EndLocatNo = Convert.ToString(endLocatNo); + //鎵樼洏鐮� + var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos, modPositionPalletNo.StringLength); + modDevice.PalletNo = Convert.ToString(palletNo); + if (modPlc.Type == PLCTypeEnum.ConveyorLine) + { + //鏀捐揣鎺� + var modPositionReleaseRow = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + (result, var releaseRow) = modConn.GetPlcDBValue(modPositionReleaseRow.PosType, modDevice.DbNumber, modPositionReleaseRow.PlcPos); + modDevice.ReleaseRow = Convert.ToInt32(releaseRow); + //鏀捐揣鍒� + var modPositionReleaseCol = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + (result, var releaseCol) = modConn.GetPlcDBValue(modPositionReleaseCol.PosType, modDevice.DbNumber, modPositionReleaseCol.PlcPos); + modDevice.ReleaseCol = Convert.ToInt32(releaseCol); + //鏀捐揣灞� + var modPositionReleaseStorey = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + (result, var releaseStorey) = modConn.GetPlcDBValue(modPositionReleaseStorey.PosType, modDevice.DbNumber, modPositionReleaseStorey.PlcPos); + modDevice.ReleaseStorey = Convert.ToInt32(releaseStorey); + //鍙栬揣鎺� + var modPositionPickRow = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + (result, var pickRow) = modConn.GetPlcDBValue(modPositionPickRow.PosType, modDevice.DbNumber, modPositionPickRow.PlcPos); + modDevice.PickRow = Convert.ToInt32(pickRow); + //鍙栬揣鍒� + var modPositionPickCol = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + (result, var pickCol) = modConn.GetPlcDBValue(modPositionPickCol.PosType, modDevice.DbNumber, modPositionPickCol.PlcPos); + modDevice.PickCol = Convert.ToInt32(pickCol); + //鍙栬揣灞� + var modPositionPickStorey = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + (result, var pickStorey) = modConn.GetPlcDBValue(modPositionPickStorey.PosType, modDevice.DbNumber, modPositionPickStorey.PlcPos); + modDevice.PickStorey = Convert.ToInt32(pickStorey); + } + } + //else + //{ + // //娴嬭瘯 + // modDevice.TaskNo = "TK00001"; + // modDevice.TaskType = TaskTypeEnum.In; + // modDevice.Wcs = new Random().Next(1000).ToString(); + // modDevice.Plc = new Random().Next(1000).ToString(); + // modDevice.Status = true; + //} + // 姣旇緝涔嬪墠鐨勭姸鎬� + if (initialStates.TryGetValue(modDevice.Id, out var initialState)) + { + if (modDevice.Status != initialState.Status || + modDevice.Plc != initialState.Plc || + modDevice.Wcs != initialState.Wcs || + modDevice.TaskNo != initialState.TaskNo || + modDevice.TaskType != initialState.TaskType || + modDevice.StartLocatNo != initialState.StartLocatNo || + modDevice.EndLocatNo != initialState.EndLocatNo || + modDevice.PalletNo != initialState.PalletNo || + (modPlc.Type == PLCTypeEnum.ConveyorLine && + (modDevice.ReleaseRow != initialState.ReleaseRow || + modDevice.ReleaseCol != initialState.ReleaseCol || + modDevice.ReleaseStorey != initialState.ReleaseStorey || + modDevice.PickRow != initialState.PickRow || + modDevice.PickCol != initialState.PickCol || + modDevice.PickStorey != initialState.PickStorey))) + { + // 閫氱煡鐢ㄦ埛鍙樻洿 + _plcDeviceHubContext.Clients.All.PublicPlcDevice(modDevice); + } + } + initialStates[modDevice.Id] = modDevice.Adapt<WcsDeviceOutput>(); + } + Thread.Sleep(2000); + } + catch (OperationCanceledException) + { + break; + } + catch (Exception) + { + + } + } + }, cts.Token); + } +} diff --git a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs index 7963543..5d9c864 100644 --- a/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs +++ b/Admin.NET/WCS.Application/Service/WcsCheckTask/WcsCheckTaskService.cs @@ -20,11 +20,14 @@ private readonly SqlSugarRepository<WcsCheckTask> _wcsCheckTaskRep; private readonly SqlSugarRepository<WcsDevice> _wcsDeviceRep; private readonly SqlSugarRepository<WcsOderTask> _wcsOderTaskRep; - public WcsCheckTaskService(SqlSugarRepository<WcsCheckTask> wcsCheckTaskRep, SqlSugarRepository<WcsDevice> wcsDeviceRep, SqlSugarRepository<WcsOderTask> wcsOderTaskRep) + private readonly SqlSugarRepository<WcsMateialPzInfo> _wcsMateialPzInfoRep; + + public WcsCheckTaskService(SqlSugarRepository<WcsCheckTask> wcsCheckTaskRep, SqlSugarRepository<WcsDevice> wcsDeviceRep, SqlSugarRepository<WcsOderTask> wcsOderTaskRep, SqlSugarRepository<WcsMateialPzInfo> wcsMateialPzInfoRep) { _wcsCheckTaskRep = wcsCheckTaskRep; _wcsDeviceRep = wcsDeviceRep; _wcsOderTaskRep = wcsOderTaskRep; + _wcsMateialPzInfoRep = wcsMateialPzInfoRep; } /// <summary> @@ -167,6 +170,12 @@ { throw Oops.Oh("浠诲姟鐘舵�佸紓甯�"); } + //鐗╂枡鍝佺淇℃伅 + var skuInfo = await _wcsMateialPzInfoRep.Context.Queryable<WcsMateialPzInfo>().Where(w => w.SkuNo == taskInfo.SkuNo).FirstAsync(); + if (skuInfo == null) + { + throw Oops.Oh("鐗╂枡鍝佺淇℃伅涓嶅瓨鍦�"); + } //鍒嗘嫞浠诲姟淇℃伅 var checkTaskInfo = await _wcsCheckTaskRep.Context.Queryable<WcsCheckTask>().Where(w => w.Port == deviceInfo.StationNum).FirstAsync(); if (checkTaskInfo == null) @@ -184,6 +193,7 @@ checkTaskInfo.BoxType = taskInfo.BoxType; checkTaskInfo.Qty = taskInfo.Qty; checkTaskInfo.Status = "1";//宸茬粦瀹� + checkTaskInfo.PZNo = skuInfo.PZNo; //鏇存柊鍒嗘嫞浠诲姟 await _wcsCheckTaskRep.AsUpdateable(checkTaskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); } diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs index c998258..a52ca44 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceInput.cs @@ -232,4 +232,65 @@ /// </summary> [Required(ErrorMessage = "璧峰鐐逛綅涓嶈兘涓虹┖")] public int Pos { get; set; } +} +/// <summary> +/// 鍐欏叆鍙傛暟 +/// </summary> +public class WriteWcsDeviceInput : WcsDeviceBaseInput +{ + /// <summary> + /// 涓婚敭Id + /// </summary> + [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")] + public long Id { get; set; } + /// <summary> + /// 浠诲姟鍙� + /// </summary> + public string TaskNo { get; set; } + /// <summary> + /// 浠诲姟绫诲瀷 + /// </summary> + public TaskTypeEnum? TaskType { get; set; } + /// <summary> + /// 璧峰宸ヤ綅 + /// </summary> + public string StartLocatNo { get; set; } + /// <summary> + /// 缁撴潫宸ヤ綅 + /// </summary> + public string EndLocatNo { get; set; } + /// <summary> + /// 鎵樼洏鐮� + /// </summary> + public string PalletNo { get; set; } + public string Plc { get; set; } + public string Wcs { get; set; } + /// <summary> + /// 杩炴帴鐘舵�� + /// </summary> + public bool Status { get; set; } = false; + /// <summary> + /// 鏀捐揣鎺� + /// </summary> + public int ReleaseRow { get; set; } + /// <summary> + /// 鏀捐揣鍒� + /// </summary> + public int ReleaseCol { get; set; } + /// <summary> + /// 鏀捐揣灞� + /// </summary> + public int ReleaseStorey { get; set; } + /// <summary> + /// 鍙栬揣鎺� + /// </summary> + public int PickRow { get; set; } + /// <summary> + /// 鍙栬揣鍒� + /// </summary> + public int PickCol { get; set; } + /// <summary> + /// 鍙栬揣灞� + /// </summary> + public int PickStorey { get; set; } } \ No newline at end of file diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceOutput.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceOutput.cs index e7d24d7..d0c4936 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceOutput.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceOutput.cs @@ -142,8 +142,30 @@ /// 杩炴帴鐘舵�� /// </summary> public bool Status { get; set; } = false; - - + /// <summary> + /// 鏀捐揣鎺� + /// </summary> + public int ReleaseRow { get; set; } + /// <summary> + /// 鏀捐揣鍒� + /// </summary> + public int ReleaseCol { get; set; } + /// <summary> + /// 鏀捐揣灞� + /// </summary> + public int ReleaseStorey { get; set; } + /// <summary> + /// 鍙栬揣鎺� + /// </summary> + public int PickRow { get; set; } + /// <summary> + /// 鍙栬揣鍒� + /// </summary> + public int PickCol { get; set; } + /// <summary> + /// 鍙栬揣灞� + /// </summary> + public int PickStorey { get; set; } } diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs index 8099e82..116d386 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/Dto/WcsDeviceTaskOrderDto.cs @@ -18,4 +18,6 @@ /// 鎬荤鏁�/璁″垝绠辨暟/棰勪及绠辨暟 /// </summary> public int? Qty { get; set; } + public string? LineNO { get; set; } + public string? PZNo { get; set; } } diff --git a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs index 713e769..403432f 100644 --- a/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs +++ b/Admin.NET/WCS.Application/Service/WcsDevice/WcsDeviceService.cs @@ -251,6 +251,34 @@ var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); (result, var palletNo) = modConn.GetPlcDBValue(modPositionPalletNo.PosType, modDevice.DbNumber, modPositionPalletNo.PlcPos, modPositionPalletNo.StringLength); modDevice.PalletNo = Convert.ToString(palletNo); + if (cachePlc.Type == PLCTypeEnum.ConveyorLine) + { + //鏀捐揣鎺� + var modPositionReleaseRow = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + (result, var releaseRow) = modConn.GetPlcDBValue(modPositionReleaseRow.PosType, modDevice.DbNumber, modPositionReleaseRow.PlcPos); + modDevice.ReleaseRow = Convert.ToInt32(releaseRow); + //鏀捐揣鍒� + var modPositionReleaseCol = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + (result, var releaseCol) = modConn.GetPlcDBValue(modPositionReleaseCol.PosType, modDevice.DbNumber, modPositionReleaseCol.PlcPos); + modDevice.ReleaseCol = Convert.ToInt32(releaseCol); + //鏀捐揣灞� + var modPositionReleaseStorey = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + (result, var releaseStorey) = modConn.GetPlcDBValue(modPositionReleaseStorey.PosType, modDevice.DbNumber, modPositionReleaseStorey.PlcPos); + modDevice.ReleaseStorey = Convert.ToInt32(releaseStorey); + //鍙栬揣鎺� + var modPositionPickRow = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + (result, var pickRow) = modConn.GetPlcDBValue(modPositionPickRow.PosType, modDevice.DbNumber, modPositionPickRow.PlcPos); + modDevice.PickRow = Convert.ToInt32(pickRow); + //鍙栬揣鍒� + var modPositionPickCol = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + (result, var pickCol) = modConn.GetPlcDBValue(modPositionPickCol.PosType, modDevice.DbNumber, modPositionPickCol.PlcPos); + modDevice.PickCol = Convert.ToInt32(pickCol); + //鍙栬揣灞� + var modPositionPickStorey = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + (result, var pickStorey) = modConn.GetPlcDBValue(modPositionPickStorey.PosType, modDevice.DbNumber, modPositionPickStorey.PlcPos); + modDevice.PickStorey = Convert.ToInt32(pickStorey); + + } } catch (Exception) { @@ -274,6 +302,69 @@ } return list; + } + + [HttpPost] + [ApiDescriptionSettings(Name = "WriteValue")] + [DisplayName("鍐欏叆鍊�")] + public async Task WriteValue(WriteWcsDeviceInput modDevice) + { + var modPlc = await _wcsDeviceRep.Context.Queryable<WcsPlc>().FirstAsync(s => s.Id == modDevice.PlcId); + if (modPlc == null) + throw Oops.Bah("鎵句笉鍒癙LC淇℃伅"); + PLCUtil modUtil = new PLCUtil(modPlc); + var listPosition = await _wcsDeviceRep.Context.Queryable<WcsPosition>().Where(s => s.DeviceId == modDevice.Id).ToListAsync(); + //(var result, var plc) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); + //modDevice.Plc = Convert.ToString(plc); + //浠诲姟鍙� + var modPositionTask = listPosition.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + if (modPositionTask != null) + modUtil.SetPlcDBValue(modPositionTask.PosType, modPositionTask.PlcPos, modDevice.TaskNo); + //浠诲姟绫诲瀷 + var modPositionTaskType = listPosition.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + if (modPositionTaskType != null) + modUtil.SetPlcDBValue(modPositionTaskType.PosType, modPositionTaskType.PlcPos, modDevice.TaskType.ToString()); + //璧峰宸ヤ綅 + var modPositionStartLocatNo = listPosition.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + if (modPositionStartLocatNo != null) + modUtil.SetPlcDBValue(modPositionStartLocatNo.PosType, modPositionStartLocatNo.PlcPos, modDevice.StartLocatNo.ToString()); + //鐩殑宸ヤ綅 + var modPositionEndLocatNo = listPosition.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + if (modPositionEndLocatNo != null) + modUtil.SetPlcDBValue(modPositionEndLocatNo.PosType, modPositionEndLocatNo.PlcPos, modDevice.EndLocatNo.ToString()); + //鎵樼洏鐮� + var modPositionPalletNo = listPosition.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + if (modPositionPalletNo != null) + modUtil.SetPlcDBValue(modPositionPalletNo.PosType, modPositionPalletNo.PlcPos, modDevice.PalletNo.ToString()); + if (modPlc.Type == PLCTypeEnum.ConveyorLine) + { + //鏀捐揣鎺� + var modPositionReleaseRow = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + if (modPositionReleaseRow != null) + modUtil.SetPlcDBValue(modPositionReleaseRow.PosType, modPositionReleaseRow.PlcPos, modDevice.ReleaseRow.ToString()); + //鏀捐揣鍒� + var modPositionReleaseCol = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + if (modPositionReleaseRow != null) + modUtil.SetPlcDBValue(modPositionReleaseCol.PosType, modPositionReleaseCol.PlcPos, modDevice.ReleaseCol.ToString()); + //鏀捐揣灞� + var modPositionReleaseStorey = listPosition.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + if (modPositionReleaseStorey != null) + modUtil.SetPlcDBValue(modPositionReleaseStorey.PosType, modPositionReleaseStorey.PlcPos, modDevice.ReleaseStorey.ToString()); + //鍙栬揣鎺� + var modPositionPickRow = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + if (modPositionPickRow != null) + modUtil.SetPlcDBValue(modPositionPickRow.PosType, modPositionPickRow.PlcPos, modDevice.PickRow.ToString()); + //鍙栬揣鍒� + var modPositionPickCol = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + if (modPositionPickCol != null) + modUtil.SetPlcDBValue(modPositionPickCol.PosType, modPositionPickCol.PlcPos, modDevice.PickCol.ToString()); + //鍙栬揣灞� + var modPositionPickStorey = listPosition.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + if (modPositionPickStorey != null) + modUtil.SetPlcDBValue(modPositionPickStorey.PosType, modPositionPickStorey.PlcPos, modDevice.PickStorey.ToString()); + + } + modUtil.Close(); } #region 鍒嗘嫞鐮佸灈 @@ -304,8 +395,8 @@ [HttpGet] [ApiDescriptionSettings(Name = "WcsPackStationPlcList")] [DisplayName("鑾峰彇璁惧瀵瑰簲宸ヤ綅鍒楄〃")] - public async Task<List<WcsDeviceTaskOrderDto>> WcsPackStationPlcList([FromQuery]WcsDeviceBaseInput entry) - { + public async Task<List<WcsDeviceTaskOrderDto>> WcsPackStationPlcList([FromQuery] WcsDeviceBaseInput entry) + { return await _wcsDeviceRep.Context.Queryable<WcsDevice>() .LeftJoin<WcsCheckTask>((device, task) => device.StationNum == task.Port) .Where((device, task) => device.PlcId == entry.PlcId) @@ -318,7 +409,9 @@ LotNo=task.LotNo, SkuNo=task.SkuNo, SkuName=task.SkuName, - Status=task.Status, + LineNO=task.LineNO, + Status =task.Status, + PZNo=task.PZNo, Qty=task.Qty }) .ToListAsync(); diff --git a/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoDto.cs b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoDto.cs new file mode 100644 index 0000000..a626bab --- /dev/null +++ b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoDto.cs @@ -0,0 +1,119 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace WCS.Application; + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄨ緭鍑哄弬鏁� + /// </summary> + public class WcsMateialPzInfoDto + { + /// <summary> + /// 涓婚敭Id + /// </summary> + public long Id { get; set; } + + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + public string? SkuNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string? SkuName { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public string? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public string? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public string? Height { get; set; } + + /// <summary> + /// 鍝佺鍙� + /// </summary> + public string? PZNo { get; set; } + + /// <summary> + /// 澶囩敤瀛楁1 + /// </summary> + public string? UDF1 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁2 + /// </summary> + public string? UDF2 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁3 + /// </summary> + public string? UDF3 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁4 + /// </summary> + public string? UDF4 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁5 + /// </summary> + public string? UDF5 { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime? CreateTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTime? UpdateTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰匢d + /// </summary> + public long? CreateUserId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭鍚� + /// </summary> + public string? CreateUserName { get; set; } + + /// <summary> + /// 淇敼鑰匢d + /// </summary> + public long? UpdateUserId { get; set; } + + /// <summary> + /// 淇敼鑰呭鍚� + /// </summary> + public string? UpdateUserName { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂↖d + /// </summary> + public long? CreateOrgId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂ㄥ悕绉� + /// </summary> + public string? CreateOrgName { get; set; } + + /// <summary> + /// 杞垹闄� + /// </summary> + public bool IsDelete { get; set; } + + } diff --git a/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoInput.cs b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoInput.cs new file mode 100644 index 0000000..df74f40 --- /dev/null +++ b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoInput.cs @@ -0,0 +1,200 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +using Admin.NET.Core; +using System.ComponentModel.DataAnnotations; + +namespace WCS.Application; + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ熀纭�杈撳叆鍙傛暟 + /// </summary> + public class WcsMateialPzInfoBaseInput + { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + public virtual string? SkuNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public virtual string? SkuName { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public virtual string? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public virtual string? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public virtual string? Height { get; set; } + + /// <summary> + /// 鍝佺鍙� + /// </summary> + public virtual string? PZNo { get; set; } + + /// <summary> + /// 澶囩敤瀛楁1 + /// </summary> + public virtual string? UDF1 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁2 + /// </summary> + public virtual string? UDF2 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁3 + /// </summary> + public virtual string? UDF3 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁4 + /// </summary> + public virtual string? UDF4 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁5 + /// </summary> + public virtual string? UDF5 { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public virtual DateTime? CreateTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public virtual DateTime? UpdateTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰匢d + /// </summary> + public virtual long? CreateUserId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭鍚� + /// </summary> + public virtual string? CreateUserName { get; set; } + + /// <summary> + /// 淇敼鑰匢d + /// </summary> + public virtual long? UpdateUserId { get; set; } + + /// <summary> + /// 淇敼鑰呭鍚� + /// </summary> + public virtual string? UpdateUserName { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂↖d + /// </summary> + public virtual long? CreateOrgId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂ㄥ悕绉� + /// </summary> + public virtual string? CreateOrgName { get; set; } + + /// <summary> + /// 杞垹闄� + /// </summary> + public virtual bool IsDelete { get; set; } + + } + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ垎椤垫煡璇㈣緭鍏ュ弬鏁� + /// </summary> + public class PageWcsMateialPzInfoInput : BasePageInput + { + /// <summary> + /// 鍏抽敭瀛楁煡璇� + /// </summary> + public string? SearchKey { get; set; } + + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + public string? SkuNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string? SkuName { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public string? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public string? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public string? Height { get; set; } + + /// <summary> + /// 鍝佺鍙� + /// </summary> + public string? PZNo { get; set; } + + } + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ鍔犺緭鍏ュ弬鏁� + /// </summary> + public class AddWcsMateialPzInfoInput : WcsMateialPzInfoBaseInput + { + /// <summary> + /// 杞垹闄� + /// </summary> + [Required(ErrorMessage = "杞垹闄や笉鑳戒负绌�")] + public override bool IsDelete { get; set; } + + } + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ垹闄よ緭鍏ュ弬鏁� + /// </summary> + public class DeleteWcsMateialPzInfoInput : BaseIdInput + { + } + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄦ洿鏂拌緭鍏ュ弬鏁� + /// </summary> + public class UpdateWcsMateialPzInfoInput : WcsMateialPzInfoBaseInput + { + /// <summary> + /// 涓婚敭Id + /// </summary> + [Required(ErrorMessage = "涓婚敭Id涓嶈兘涓虹┖")] + public long Id { get; set; } + + } + + /// <summary> + /// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄤ富閿煡璇㈣緭鍏ュ弬鏁� + /// </summary> + public class QueryByIdWcsMateialPzInfoInput : DeleteWcsMateialPzInfoInput + { + + } diff --git a/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoOutput.cs b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoOutput.cs new file mode 100644 index 0000000..d0f7ac1 --- /dev/null +++ b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/Dto/WcsMateialPzInfoOutput.cs @@ -0,0 +1,121 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +namespace WCS.Application; + +/// <summary> +/// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄨ緭鍑哄弬鏁� +/// </summary> +public class WcsMateialPzInfoOutput +{ + /// <summary> + /// 涓婚敭Id + /// </summary> + public long Id { get; set; } + + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + public string? SkuNo { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + public string? SkuName { get; set; } + + /// <summary> + /// 闀� + /// </summary> + public string? Length { get; set; } + + /// <summary> + /// 瀹� + /// </summary> + public string? Width { get; set; } + + /// <summary> + /// 楂� + /// </summary> + public string? Height { get; set; } + + /// <summary> + /// 鍝佺鍙� + /// </summary> + public string? PZNo { get; set; } + + /// <summary> + /// 澶囩敤瀛楁1 + /// </summary> + public string? UDF1 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁2 + /// </summary> + public string? UDF2 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁3 + /// </summary> + public string? UDF3 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁4 + /// </summary> + public string? UDF4 { get; set; } + + /// <summary> + /// 澶囩敤瀛楁5 + /// </summary> + public string? UDF5 { get; set; } + + /// <summary> + /// 鍒涘缓鏃堕棿 + /// </summary> + public DateTime? CreateTime { get; set; } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTime? UpdateTime { get; set; } + + /// <summary> + /// 鍒涘缓鑰匢d + /// </summary> + public long? CreateUserId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呭鍚� + /// </summary> + public string? CreateUserName { get; set; } + + /// <summary> + /// 淇敼鑰匢d + /// </summary> + public long? UpdateUserId { get; set; } + + /// <summary> + /// 淇敼鑰呭鍚� + /// </summary> + public string? UpdateUserName { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂↖d + /// </summary> + public long? CreateOrgId { get; set; } + + /// <summary> + /// 鍒涘缓鑰呴儴闂ㄥ悕绉� + /// </summary> + public string? CreateOrgName { get; set; } + + /// <summary> + /// 杞垹闄� + /// </summary> + public bool IsDelete { get; set; } + + } + + diff --git a/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/WcsMateialPzInfoService.cs b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/WcsMateialPzInfoService.cs new file mode 100644 index 0000000..37888f9 --- /dev/null +++ b/Admin.NET/WCS.Application/Service/WcsMateialPzInfo/WcsMateialPzInfoService.cs @@ -0,0 +1,128 @@ +锘�// Admin.NET 椤圭洰鐨勭増鏉冦�佸晢鏍囥�佷笓鍒╁拰鍏朵粬鐩稿叧鏉冨埄鍧囧彈鐩稿簲娉曞緥娉曡鐨勪繚鎶ゃ�備娇鐢ㄦ湰椤圭洰搴旈伒瀹堢浉鍏虫硶寰嬫硶瑙勫拰璁稿彲璇佺殑瑕佹眰銆� +// +// 鏈」鐩富瑕侀伒寰� MIT 璁稿彲璇佸拰 Apache 璁稿彲璇侊紙鐗堟湰 2.0锛夎繘琛屽垎鍙戝拰浣跨敤銆傝鍙瘉浣嶄簬婧愪唬鐮佹爲鏍圭洰褰曚腑鐨� LICENSE-MIT 鍜� LICENSE-APACHE 鏂囦欢銆� +// +// 涓嶅緱鍒╃敤鏈」鐩粠浜嬪嵄瀹冲浗瀹跺畨鍏ㄣ�佹壈涔辩ぞ浼氱З搴忋�佷镜鐘粬浜哄悎娉曟潈鐩婄瓑娉曞緥娉曡绂佹鐨勬椿鍔紒浠讳綍鍩轰簬鏈」鐩簩娆″紑鍙戣�屼骇鐢熺殑涓�鍒囨硶寰嬬籂绾峰拰璐d换锛屾垜浠笉鎵挎媴浠讳綍璐d换锛� + +using Admin.NET.Core.Service; +using Microsoft.AspNetCore.Http; +using WCS.Application.Entity; +namespace WCS.Application; + +/// <summary> +/// 鐗╂枡鍝佺淇℃伅缁存姢琛ㄦ湇鍔� +/// </summary> +[ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)] +public class WcsMateialPzInfoService : IDynamicApiController, ITransient +{ + private readonly SqlSugarRepository<WcsMateialPzInfo> _wcsMateialPzInfoRep; + public WcsMateialPzInfoService(SqlSugarRepository<WcsMateialPzInfo> wcsMateialPzInfoRep) + { + _wcsMateialPzInfoRep = wcsMateialPzInfoRep; + } + + /// <summary> + /// 鍒嗛〉鏌ヨ鐗╂枡鍝佺淇℃伅缁存姢琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "Page")] + [DisplayName("鍒嗛〉鏌ヨ鐗╂枡鍝佺淇℃伅缁存姢琛�")] + public async Task<SqlSugarPagedList<WcsMateialPzInfoOutput>> Page(PageWcsMateialPzInfoInput input) + { + input.SearchKey = input.SearchKey?.Trim(); + var query = _wcsMateialPzInfoRep.AsQueryable() + .WhereIF(!string.IsNullOrEmpty(input.SearchKey), u => + u.SkuNo.Contains(input.SearchKey) + || u.SkuName.Contains(input.SearchKey) + || u.Length.Contains(input.SearchKey) + || u.Width.Contains(input.SearchKey) + || u.Height.Contains(input.SearchKey) + || u.PZNo.Contains(input.SearchKey) + ) + .WhereIF(!string.IsNullOrWhiteSpace(input.SkuNo), u => u.SkuNo.Contains(input.SkuNo.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.SkuName), u => u.SkuName.Contains(input.SkuName.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.Length), u => u.Length.Contains(input.Length.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.Width), u => u.Width.Contains(input.Width.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.Height), u => u.Height.Contains(input.Height.Trim())) + .WhereIF(!string.IsNullOrWhiteSpace(input.PZNo), u => u.PZNo.Contains(input.PZNo.Trim())) + .Select<WcsMateialPzInfoOutput>(); + return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize); + } + + /// <summary> + /// 澧炲姞鐗╂枡鍝佺淇℃伅缁存姢琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "Add")] + [DisplayName("澧炲姞鐗╂枡鍝佺淇℃伅缁存姢琛�")] + public async Task<long> Add(AddWcsMateialPzInfoInput input) + { + var entity = input.Adapt<WcsMateialPzInfo>(); + await _wcsMateialPzInfoRep.InsertAsync(entity); + return entity.Id; + } + + /// <summary> + /// 鍒犻櫎鐗╂枡鍝佺淇℃伅缁存姢琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "Delete")] + [DisplayName("鍒犻櫎鐗╂枡鍝佺淇℃伅缁存姢琛�")] + public async Task Delete(DeleteWcsMateialPzInfoInput input) + { + var entity = await _wcsMateialPzInfoRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002); + await _wcsMateialPzInfoRep.FakeDeleteAsync(entity); //鍋囧垹闄� + //await _wcsMateialPzInfoRep.DeleteAsync(entity); //鐪熷垹闄� + } + + /// <summary> + /// 鏇存柊鐗╂枡鍝佺淇℃伅缁存姢琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpPost] + [ApiDescriptionSettings(Name = "Update")] + [DisplayName("鏇存柊鐗╂枡鍝佺淇℃伅缁存姢琛�")] + public async Task Update(UpdateWcsMateialPzInfoInput input) + { + var entity = input.Adapt<WcsMateialPzInfo>(); + await _wcsMateialPzInfoRep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + } + + /// <summary> + /// 鑾峰彇鐗╂枡鍝佺淇℃伅缁存姢琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet] + [ApiDescriptionSettings(Name = "Detail")] + [DisplayName("鑾峰彇鐗╂枡鍝佺淇℃伅缁存姢琛�")] + public async Task<WcsMateialPzInfo> Detail([FromQuery] QueryByIdWcsMateialPzInfoInput input) + { + return await _wcsMateialPzInfoRep.GetFirstAsync(u => u.Id == input.Id); + } + + /// <summary> + /// 鑾峰彇鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ垪琛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet] + [ApiDescriptionSettings(Name = "List")] + [DisplayName("鑾峰彇鐗╂枡鍝佺淇℃伅缁存姢琛ㄥ垪琛�")] + public async Task<List<WcsMateialPzInfoOutput>> List([FromQuery] PageWcsMateialPzInfoInput input) + { + return await _wcsMateialPzInfoRep.AsQueryable().Select<WcsMateialPzInfoOutput>().ToListAsync(); + } + + + + + +} diff --git a/Web/src/api/wcs/wcsDevice.ts b/Web/src/api/wcs/wcsDevice.ts index 4561735..fe7baa5 100644 --- a/Web/src/api/wcs/wcsDevice.ts +++ b/Web/src/api/wcs/wcsDevice.ts @@ -8,6 +8,7 @@ GetWcsPlcPlcIdDropdown = '/api/wcsDevice/WcsPlcPlcIdDropdown', GeneratePos = '/api/wcsDevice/GeneratePos', ListWcsDevice = '/api/wcsDevice/list', + WriteValue = '/api/wcsdevice/writeValue', GetWcsPackPlcList='/api/wcsDevice/WcsPackPlcList', GetWcsPackStationPlcList='/api/wcsDevice/WcsPackStationPlcList', @@ -101,4 +102,11 @@ url: Api.CloseTaskForPLC, method: 'post', data: params, +}); +//鍐欏叆鍊� +export const writeValue = (params?: any) => + request({ + url: Api.WriteValue, + method: 'post', + data: params, }); \ No newline at end of file diff --git a/Web/src/api/wcs/wcsMateialPzInfo.ts b/Web/src/api/wcs/wcsMateialPzInfo.ts new file mode 100644 index 0000000..a17257b --- /dev/null +++ b/Web/src/api/wcs/wcsMateialPzInfo.ts @@ -0,0 +1,50 @@ +锘縤mport request from '/@/utils/request'; +enum Api { + AddWcsMateialPzInfo = '/api/wcsMateialPzInfo/add', + DeleteWcsMateialPzInfo = '/api/wcsMateialPzInfo/delete', + UpdateWcsMateialPzInfo = '/api/wcsMateialPzInfo/update', + PageWcsMateialPzInfo = '/api/wcsMateialPzInfo/page', + DetailWcsMateialPzInfo = '/api/wcsMateialPzInfo/detail', +} + +// 澧炲姞鐗╂枡鍝佺淇℃伅缁存姢琛� +export const addWcsMateialPzInfo = (params?: any) => + request({ + url: Api.AddWcsMateialPzInfo, + method: 'post', + data: params, + }); + +// 鍒犻櫎鐗╂枡鍝佺淇℃伅缁存姢琛� +export const deleteWcsMateialPzInfo = (params?: any) => + request({ + url: Api.DeleteWcsMateialPzInfo, + method: 'post', + data: params, + }); + +// 缂栬緫鐗╂枡鍝佺淇℃伅缁存姢琛� +export const updateWcsMateialPzInfo = (params?: any) => + request({ + url: Api.UpdateWcsMateialPzInfo, + method: 'post', + data: params, + }); + +// 鍒嗛〉鏌ヨ鐗╂枡鍝佺淇℃伅缁存姢琛� +export const pageWcsMateialPzInfo = (params?: any) => + request({ + url: Api.PageWcsMateialPzInfo, + method: 'post', + data: params, + }); + +// 璇︽儏鐗╂枡鍝佺淇℃伅缁存姢琛� +export const detailWcsMateialPzInfo = (id: any) => + request({ + url: Api.DetailWcsMateialPzInfo, + method: 'get', + data: { id }, + }); + + diff --git a/Web/src/views/device/deviceMonitor/component/setting.vue b/Web/src/views/device/deviceMonitor/component/setting.vue index c663b22..243a15f 100644 --- a/Web/src/views/device/deviceMonitor/component/setting.vue +++ b/Web/src/views/device/deviceMonitor/component/setting.vue @@ -10,7 +10,7 @@ <el-card class="box-card" shadow="hover"> <template #header> <div class="card-header"> - + <div> <span>宸ヤ綅鍙凤細</span> <el-select v-model="stationValue" placeholder="璇烽�夋嫨" filterable value-key="stationNum" @@ -22,7 +22,8 @@ <el-button style="margin-left: 10px;">鑷姩</el-button> </div> <div> - <div :class="['lineStatus', stationValue.status ? 'device-status-0' : 'device-status-1']"></div> + <div :class="['lineStatus', stationValue.status ? 'device-status-0' : 'device-status-1']"> + </div> </div> </div> </template> @@ -49,41 +50,41 @@ <el-input v-model="stationValue.wcs"></el-input> </el-form-item> </el-col> - + <el-col :span="12"> <el-form-item label="鍙栬揣鎺�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鏀捐揣鎺�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鍙栬揣鍒�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鏀捐揣鍒�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鍙栬揣灞�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鏀捐揣灞�"> - <el-input ></el-input> + <el-input></el-input> </el-form-item> </el-col> </el-row> </el-form> <div style="text-align: center;margin: 10px;"> - <el-button class="button" size="large">鍐欏叆鏁版嵁</el-button> + <el-button class="button" size="large" @click="write(stationValue)">鍐欏叆鏁版嵁</el-button> </div> </div> <template #footer> @@ -107,6 +108,8 @@ <script lang="ts" setup> import { ref, defineModel } from 'vue'; +import { writeValue } from '/@/api/wcs/wcsDevice'; +import { ElMessageBox,ElMessage } from 'element-plus'; const listStationsData = defineModel<any>("listStationsData") const stationValue = defineModel<any>("stationValue") @@ -122,7 +125,10 @@ // emit('update:listStationsData', listStationsData.value); // emit('update:stationValue', stationValue); // }; - +const write = async (row: any) => { + await writeValue(row); + ElMessage.success('鍐欏叆鎴愬姛锛�'); +} const isShowDialog = ref(false); const openDialog = async (row: any) => { @@ -181,18 +187,18 @@ } .lineStatus { - right: 0; - height: 20px; - width: 20px; - border-radius: 50%; - background-color: #67C23A; + right: 0; + height: 20px; + width: 20px; + border-radius: 50%; + background-color: #67C23A; } .device-status-0 { - background-color: #67C23A; + background-color: #67C23A; } .device-status-1 { - background-color: red; + background-color: red; } </style> \ No newline at end of file diff --git a/Web/src/views/device/deviceMonitor/index.vue b/Web/src/views/device/deviceMonitor/index.vue index 03e945c..f66cf15 100644 --- a/Web/src/views/device/deviceMonitor/index.vue +++ b/Web/src/views/device/deviceMonitor/index.vue @@ -52,7 +52,6 @@ <div class="lineButtonfix"> <el-form label-position="left" label-width="80px"> <el-form-item> - <el-button>鍐欏叆</el-button> <el-button @click="openDialog">璁剧疆</el-button> </el-form-item> </el-form> @@ -85,6 +84,9 @@ <el-form-item label="鐩殑宸ヤ綅"> <el-input v-model="deviceInfo.endLocatNo"></el-input> </el-form-item> + <el-form-item label="鎵樼洏鐮�"> + <el-input v-model="deviceInfo.palletNo"></el-input> + </el-form-item> <el-form-item label="PLC"> <el-input v-model="deviceInfo.plc"></el-input> </el-form-item> @@ -99,24 +101,50 @@ <div class="otherButtonfix"> <el-form label-position="left"> <el-form-item> - <el-button>鍐欏叆</el-button> + <el-button @click="write(deviceInfo)">鍐欏叆</el-button> </el-form-item> </el-form> </div> </el-card> </div> </el-main> - <setting ref="settingDialogRef" :title="title" v-model:listStationsData="listStationsData" v-model:stationValue="stationValue" /> + <setting ref="settingDialogRef" :title="title" v-model:listStationsData="listStationsData" + v-model:stationValue="stationValue" /> </el-container> </template> <script lang="ts" setup> -import { ref, reactive } from 'vue'; -import { listWcsDevice } from '/@/api/wcs/wcsDevice'; +import { ref, onMounted } from 'vue'; +import { listWcsDevice, writeValue } from '/@/api/wcs/wcsDevice'; import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils'; import { listWcsPlc } from '/@/api/wcs/wcsPlc'; - +import { ElMessageBox, ElMessage } from 'element-plus'; import setting from '/@/views/device/deviceMonitor/component/setting.vue' +import { signalR,stopConnection } from './signalR'; +//杩炴帴signalR 鐩戝惉鍙樻洿 +onMounted(async () => { + signalR.off('PublicPlcDevice'); + signalR.on('PublicPlcDevice', (data: any) => { + //todo 闇�瑕佹祴璇� + if (data.type == 0) { + var index = listStackingMachineData.value.findIndex(s => s.id == data.id); + if (index !== -1) { + listStackingMachineData.value.splice(index, 1, data); + } + } + else if (data.type == 1) { + lineOptions.value.forEach(s => { + var index = stations.value[s.id].findIndex(s => s.id == data.id); + if (index !== -1) { + stations.value[s.id].splice(index, 1, data); + } + }); + if (stationValue.value.id == data.id) { + stationValue.value = data; + } + } + }); +}); const stations = ref<any>([]); const listStationsData = ref<any>([]); @@ -138,12 +166,16 @@ const openDialog = async () => { settingDialogRef.value.openDialog(stationValue); } +const write = async (row: any) => { + await writeValue(row); + ElMessage.success('鍐欏叆鎴愬姛锛�'); +} // 鏌ヨ鎿嶄綔 const handleQuery = async () => { - var listplc = await listWcsPlc({ type: 1 }); + const listplc = await listWcsPlc({ type: 1 }); lineOptions.value = listplc.data.result; lineValue.value = listplc.data.result[0].id; - var res = await listWcsDevice(); + const res = await listWcsDevice(); listStackingMachineData.value = res.data.result.filter(s => s.type == 0); const listConveyorLineData = res.data.result.filter(s => s.type == 1); listplc.data.result.forEach(s => { @@ -153,6 +185,19 @@ listStationsData.value = stations.value[lineValue.value]; stationValue.value = listStationsData.value[0]; } + else { + listStationsData.value = []; + stationValue.value = { + stationNum: '', + taskNo: '', + taskType: '', + startLocatNo: '', + endLocatNo: '', + plc: '', + wcs: '', + status: false + }; + } title.value = listStationsData.value[0].text; }; diff --git a/Web/src/views/device/deviceMonitor/signalR.ts b/Web/src/views/device/deviceMonitor/signalR.ts new file mode 100644 index 0000000..9876733 --- /dev/null +++ b/Web/src/views/device/deviceMonitor/signalR.ts @@ -0,0 +1,49 @@ +import * as SignalR from '@microsoft/signalr'; +import { getToken } from '/@/utils/axios-utils'; + +// 鍒濆鍖朣ignalR瀵硅薄 +const connection = new SignalR.HubConnectionBuilder() + .configureLogging(SignalR.LogLevel.Information) + .withUrl(`${window.__env__.VITE_API_URL}/hubs/PlcDevice?token=${getToken()}`, { transport: SignalR.HttpTransportType.WebSockets, skipNegotiation: true }) + .withAutomaticReconnect({ + nextRetryDelayInMilliseconds: () => { + return 5000; // 姣�5绉掗噸杩炰竴娆� + }, + }) + .build(); + +connection.keepAliveIntervalInMilliseconds = 15 * 1000; // 蹇冭烦妫�娴�15s +connection.serverTimeoutInMilliseconds = 30 * 60 * 1000; // 瓒呮椂鏃堕棿30m + +// 鍚姩杩炴帴 +connection.start().then(() => { + debugger; + console.log('鍚姩杩炴帴plc'); +}); +// 鏂紑杩炴帴 +connection.onclose(async () => { + debugger; + console.log('鏂紑杩炴帴plc'); +}); +// 閲嶈繛涓� +connection.onreconnecting(() => { + debugger; + console.log('鏈嶅姟鍣ㄥ凡鏂嚎plc'); +}); +// 閲嶈繛鎴愬姛 +connection.onreconnected(() => { + debugger; + console.log('閲嶈繛鎴愬姛plc'); +}); +// 鍏抽棴杩炴帴鐨勬柟娉� +async function stopConnection() { + try { + await connection.stop(); + console.log('杩炴帴宸插叧闂�'); + } catch (error) { + console.error('鍏抽棴杩炴帴鏃跺彂鐢熼敊璇�:', error); + } + } +// connection.on('PublicPlcConn', () => {}); + +export { connection as signalR,stopConnection }; diff --git a/Web/src/views/device/sortPallet/index.vue b/Web/src/views/device/sortPallet/index.vue index 1612713..5bdd4f7 100644 --- a/Web/src/views/device/sortPallet/index.vue +++ b/Web/src/views/device/sortPallet/index.vue @@ -39,11 +39,14 @@ <el-form-item label="鐗╂枡鍚嶇О"> <el-input v-model="deviceInfo.skuName" readonly></el-input> </el-form-item> + <el-form-item label="鍒嗘嫞绾跨紪鍙�"> + <el-input v-model="deviceInfo.lineNO" readonly></el-input> + </el-form-item> <el-form-item label="缁戝畾鐘舵��"> <el-input :value="deviceInfo.status === '0' ? '鏈粦瀹�' : '宸茬粦瀹�'" readonly></el-input> </el-form-item> <el-form-item label="鎶撶鍝佺"> - <el-input readonly></el-input> + <el-input v-model="deviceInfo.pzNo" readonly></el-input> </el-form-item> <el-form-item label="鎵樼洏鍙�"> <el-input readonly></el-input> @@ -59,7 +62,7 @@ </el-form-item> </el-form> </div> - <div class="otherButtonfix"> + <div v-if="!deviceInfo.text.includes('鎷嗗灈')" class="otherButtonfix"> <el-form label-position="left"> <el-form-item> <el-button type="primary" @click="openBindDialog(deviceInfo.id)">缁戝畾</el-button> @@ -274,5 +277,8 @@ justify-content: flex-end; margin-top: 20px; } + .divDisplay{ + display:none + } </style> \ No newline at end of file diff --git a/Web/src/views/device/wcsOderTask/component/editDialog.vue b/Web/src/views/device/wcsOderTask/component/editDialog.vue index 29bd0c4..d0d0468 100644 --- a/Web/src/views/device/wcsOderTask/component/editDialog.vue +++ b/Web/src/views/device/wcsOderTask/component/editDialog.vue @@ -71,7 +71,7 @@ </el-form-item> </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="鐘舵��" prop="status"> <el-select clearable v-model="ruleForm.status" placeholder="璇烽�夋嫨鐘舵��"> <el-option v-for="(item,index) in dl('TaskStatusEnum')" :key="index" :value="Number(item.value)" :label="`${item.name} (${item.code}) [${item.value}]`"></el-option> @@ -80,7 +80,7 @@ </el-form-item> - </el-col> + </el-col> --> <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="鏄惁鍥為鎴愬姛" prop="isSuccess"> <el-select clearable v-model="ruleForm.isSuccess" placeholder="璇烽�夋嫨鏄惁鍥為鎴愬姛"> diff --git a/Web/src/views/wcs/wcsMateialPzInfo/component/editDialog.vue b/Web/src/views/wcs/wcsMateialPzInfo/component/editDialog.vue new file mode 100644 index 0000000..aa29832 --- /dev/null +++ b/Web/src/views/wcs/wcsMateialPzInfo/component/editDialog.vue @@ -0,0 +1,191 @@ +锘�<template> + <div class="wcsMateialPzInfo-container"> + <el-dialog v-model="isShowDialog" :width="800" draggable="" :close-on-click-modal="false"> + <template #header> + <div style="color: #fff"> + <!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>--> + <span>{{ props.title }}</span> + </div> + </template> + <el-form :model="ruleForm" ref="ruleFormRef" label-width="auto" :rules="rules"> + <el-row :gutter="35"> + <el-form-item v-show="false"> + <el-input v-model="ruleForm.id" /> + </el-form-item> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="鐗╂枡缂栫爜" prop="skuNo"> + <el-input v-model="ruleForm.skuNo" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="鐗╂枡鍚嶇О" prop="skuName"> + <el-input v-model="ruleForm.skuName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="闀�" prop="length"> + <el-input v-model="ruleForm.length" placeholder="璇疯緭鍏ラ暱" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="瀹�" prop="width"> + <el-input v-model="ruleForm.width" placeholder="璇疯緭鍏ュ" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="楂�" prop="height"> + <el-input v-model="ruleForm.height" placeholder="璇疯緭鍏ラ珮" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="鍝佺鍙�" prop="pZNo"> + <el-input v-model="ruleForm.pzNo" placeholder="璇疯緭鍏ュ搧绉嶅彿" maxlength="10" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="澶囩敤瀛楁1" prop="uDF1"> + <el-input v-model="ruleForm.uDF1" placeholder="璇疯緭鍏ュ鐢ㄥ瓧娈�1" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="澶囩敤瀛楁2" prop="uDF2"> + <el-input v-model="ruleForm.uDF2" placeholder="璇疯緭鍏ュ鐢ㄥ瓧娈�2" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="澶囩敤瀛楁3" prop="uDF3"> + <el-input v-model="ruleForm.uDF3" placeholder="璇疯緭鍏ュ鐢ㄥ瓧娈�3" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="澶囩敤瀛楁4" prop="uDF4"> + <el-input v-model="ruleForm.uDF4" placeholder="璇疯緭鍏ュ鐢ㄥ瓧娈�4" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> + <el-form-item label="澶囩敤瀛楁5" prop="uDF5"> + <el-input v-model="ruleForm.uDF5" placeholder="璇疯緭鍏ュ鐢ㄥ瓧娈�5" maxlength="20" show-word-limit clearable /> + + </el-form-item> + + </el-col> + </el-row> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="cancel">鍙� 娑�</el-button> + <el-button type="primary" @click="submit">纭� 瀹�</el-button> + </span> + </template> + </el-dialog> + </div> +</template> +<style lang="scss" scoped> +:deep(.el-select), +:deep(.el-input-number) { + width: 100%; +} +</style> +<script lang="ts" setup> + import { ref,onMounted } from "vue"; + import { ElMessage } from "element-plus"; + import type { FormRules } from "element-plus"; + import { formatDate } from '/@/utils/formatTime'; + import { addWcsMateialPzInfo, updateWcsMateialPzInfo, detailWcsMateialPzInfo } from "/@/api/wcs/wcsMateialPzInfo"; + + //鐖剁骇浼犻�掓潵鐨勫弬鏁� + var props = defineProps({ + title: { + type: String, + default: "", + }, + }); + //鐖剁骇浼犻�掓潵鐨勫嚱鏁帮紝鐢ㄤ簬鍥炶皟 + const emit = defineEmits(["reloadTable"]); + const ruleFormRef = ref(); + const isShowDialog = ref(false); + const ruleForm = ref<any>({}); + //鑷娣诲姞鍏朵粬瑙勫垯 + const rules = ref<FormRules>({ + }); + + // 椤甸潰鍔犺浇鏃� + onMounted(() => { + + }); + + // 鎵撳紑寮圭獥 + const openDialog = async (row: any) => { + // ruleForm.value = JSON.parse(JSON.stringify(row)); + // 鏀圭敤detail鑾峰彇鏈�鏂版暟鎹潵缂栬緫 + let rowData = JSON.parse(JSON.stringify(row)); + if (rowData.id) + ruleForm.value = (await detailWcsMateialPzInfo(rowData.id)).data.result; + else + ruleForm.value = rowData; + isShowDialog.value = true; + }; + + // 鍏抽棴寮圭獥 + const closeDialog = () => { + emit("reloadTable"); + isShowDialog.value = false; + }; + + // 鍙栨秷 + const cancel = () => { + isShowDialog.value = false; + }; + + // 鎻愪氦 + const submit = async () => { + ruleFormRef.value.validate(async (isValid: boolean, fields?: any) => { + if (isValid) { + let values = ruleForm.value; + if (ruleForm.value.id == undefined || ruleForm.value.id == null || ruleForm.value.id == "" || ruleForm.value.id == 0) { + await addWcsMateialPzInfo(values); + } else { + await updateWcsMateialPzInfo(values); + } + closeDialog(); + } else { + ElMessage({ + message: `琛ㄥ崟鏈�${Object.keys(fields).length}澶勯獙璇佸け璐ワ紝璇蜂慨鏀瑰悗鍐嶆彁浜, + type: "error", + }); + } + }); + }; + + + + + + + //灏嗗睘鎬ф垨鑰呭嚱鏁版毚闇茬粰鐖剁粍浠� + defineExpose({ openDialog }); +</script> + + + + diff --git a/Web/src/views/wcs/wcsMateialPzInfo/index.vue b/Web/src/views/wcs/wcsMateialPzInfo/index.vue new file mode 100644 index 0000000..a978c2e --- /dev/null +++ b/Web/src/views/wcs/wcsMateialPzInfo/index.vue @@ -0,0 +1,217 @@ +锘�<template> + <div class="wcsMateialPzInfo-container"> + <el-card shadow="hover" :body-style="{ paddingBottom: '0' }"> + <el-form :model="queryParams" ref="queryForm" labelWidth="90"> + <el-row> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> + <el-form-item label="鍏抽敭瀛�"> + <el-input v-model="queryParams.searchKey" clearable="" placeholder="璇疯緭鍏ユā绯婃煡璇㈠叧閿瓧"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="鐗╂枡缂栫爜"> + <el-input v-model="queryParams.skuNo" clearable="" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="鐗╂枡鍚嶇О"> + <el-input v-model="queryParams.skuName" clearable="" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="闀�"> + <el-input v-model="queryParams.length" clearable="" placeholder="璇疯緭鍏ラ暱"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="瀹�"> + <el-input v-model="queryParams.width" clearable="" placeholder="璇疯緭鍏ュ"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="楂�"> + <el-input v-model="queryParams.height" clearable="" placeholder="璇疯緭鍏ラ珮"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10" v-if="showAdvanceQueryUI"> + <el-form-item label="鍝佺鍙�"> + <el-input v-model="queryParams.pZNo" clearable="" placeholder="璇疯緭鍏ュ搧绉嶅彿"/> + + </el-form-item> + </el-col> + <el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="4" class="mb10"> + <el-form-item > + <el-button-group style="display: flex; align-items: center;"> + <el-button type="primary" icon="ele-Search" @click="handleQuery" v-auth="'wcsMateialPzInfo:page'"> 鏌ヨ </el-button> + <el-button icon="ele-Refresh" @click="() => queryParams = {}"> 閲嶇疆 </el-button> + <el-button icon="ele-ZoomIn" @click="changeAdvanceQueryUI" v-if="!showAdvanceQueryUI" style="margin-left:5px;"> 楂樼骇鏌ヨ </el-button> + <el-button icon="ele-ZoomOut" @click="changeAdvanceQueryUI" v-if="showAdvanceQueryUI" style="margin-left:5px;"> 闅愯棌 </el-button> + <el-button type="primary" style="margin-left:5px;" icon="ele-Plus" @click="openAddWcsMateialPzInfo" v-auth="'wcsMateialPzInfo:add'"> 鏂板 </el-button> + + </el-button-group> + </el-form-item> + + </el-col> + </el-row> + </el-form> + </el-card> + <el-card class="full-table" shadow="hover" style="margin-top: 5px"> + <el-table + :data="tableData" + style="width: 100%" + v-loading="loading" + tooltip-effect="light" + row-key="id" + @sort-change="sortChange" + border=""> + <el-table-column type="index" label="搴忓彿" width="55" align="center"/> + <el-table-column prop="skuNo" label="鐗╂枡缂栫爜" show-overflow-tooltip="" /> + <el-table-column prop="skuName" label="鐗╂枡鍚嶇О" show-overflow-tooltip="" /> + <el-table-column prop="length" label="闀�" show-overflow-tooltip="" /> + <el-table-column prop="width" label="瀹�" show-overflow-tooltip="" /> + <el-table-column prop="height" label="楂�" show-overflow-tooltip="" /> + <el-table-column prop="pzNo" label="鍝佺鍙�" show-overflow-tooltip="" /> + <el-table-column prop="uDF1" label="澶囩敤瀛楁1" show-overflow-tooltip="" /> + <el-table-column prop="uDF2" label="澶囩敤瀛楁2" show-overflow-tooltip="" /> + <el-table-column prop="uDF3" label="澶囩敤瀛楁3" show-overflow-tooltip="" /> + <el-table-column prop="uDF4" label="澶囩敤瀛楁4" show-overflow-tooltip="" /> + <el-table-column prop="uDF5" label="澶囩敤瀛楁5" show-overflow-tooltip="" /> + <el-table-column label="鎿嶄綔" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('wcsMateialPzInfo:update') || auth('wcsMateialPzInfo:delete')"> + <template #default="scope"> + <el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditWcsMateialPzInfo(scope.row)" v-auth="'wcsMateialPzInfo:update'"> 缂栬緫 </el-button> + <el-button icon="ele-Delete" size="small" text="" type="primary" @click="delWcsMateialPzInfo(scope.row)" v-auth="'wcsMateialPzInfo:delete'"> 鍒犻櫎 </el-button> + </template> + </el-table-column> + </el-table> + <el-pagination + v-model:currentPage="tableParams.page" + v-model:page-size="tableParams.pageSize" + :total="tableParams.total" + :page-sizes="[10, 20, 50, 100, 200, 500]" + size="small" + background="" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + layout="total, sizes, prev, pager, next, jumper" + /> + <printDialog + ref="printDialogRef" + :title="printWcsMateialPzInfoTitle" + @reloadTable="handleQuery" /> + <editDialog + ref="editDialogRef" + :title="editWcsMateialPzInfoTitle" + @reloadTable="handleQuery" + /> + </el-card> + </div> +</template> + +<script lang="ts" setup="" name="wcsMateialPzInfo"> + import { ref } from "vue"; + import { ElMessageBox, ElMessage } from "element-plus"; + import { auth } from '/@/utils/authFunction'; + + import { formatDate } from '/@/utils/formatTime'; + + + import printDialog from '/@/views/system/print/component/hiprint/preview.vue' + import editDialog from '/@/views/wcs/wcsMateialPzInfo/component/editDialog.vue' + import { pageWcsMateialPzInfo, deleteWcsMateialPzInfo } from '/@/api/wcs/wcsMateialPzInfo'; + + const showAdvanceQueryUI = ref(false); + const printDialogRef = ref(); + const editDialogRef = ref(); + const loading = ref(false); + const tableData = ref<any>([]); + const queryParams = ref<any>({}); + const tableParams = ref({ + page: 1, + pageSize: 10, + total: 0, + }); + + const printWcsMateialPzInfoTitle = ref(""); + const editWcsMateialPzInfoTitle = ref(""); + + // 鏀瑰彉楂樼骇鏌ヨ鐨勬帶浠舵樉绀虹姸鎬� + const changeAdvanceQueryUI = () => { + showAdvanceQueryUI.value = !showAdvanceQueryUI.value; + } + + // 鏌ヨ鎿嶄綔 + const handleQuery = async () => { + loading.value = true; + var res = await pageWcsMateialPzInfo(Object.assign(queryParams.value, tableParams.value)); + tableData.value = res.data.result?.items ?? []; + tableParams.value.total = res.data.result?.total; + loading.value = false; + }; + + // 鍒楁帓搴� + const sortChange = async (column: any) => { + queryParams.value.field = column.prop; + queryParams.value.order = column.order; + await handleQuery(); + }; + + // 鎵撳紑鏂板椤甸潰 + const openAddWcsMateialPzInfo = () => { + editWcsMateialPzInfoTitle.value = '娣诲姞鐗╂枡鍝佺淇℃伅'; + editDialogRef.value.openDialog({}); + }; + + // 鎵撳紑鎵撳嵃椤甸潰 + const openPrintWcsMateialPzInfo = async (row: any) => { + printWcsMateialPzInfoTitle.value = '鎵撳嵃鐗╂枡鍝佺淇℃伅'; + } + + // 鎵撳紑缂栬緫椤甸潰 + const openEditWcsMateialPzInfo = (row: any) => { + editWcsMateialPzInfoTitle.value = '缂栬緫鐗╂枡鍝佺淇℃伅'; + editDialogRef.value.openDialog(row); + }; + + // 鍒犻櫎 + const delWcsMateialPzInfo = (row: any) => { + ElMessageBox.confirm(`纭畾瑕佸垹闄ゅ悧?`, "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(async () => { + await deleteWcsMateialPzInfo(row); + handleQuery(); + ElMessage.success("鍒犻櫎鎴愬姛"); + }) + .catch(() => {}); + }; + + // 鏀瑰彉椤甸潰瀹归噺 + const handleSizeChange = (val: number) => { + tableParams.value.pageSize = val; + handleQuery(); + }; + + // 鏀瑰彉椤电爜搴忓彿 + const handleCurrentChange = (val: number) => { + tableParams.value.page = val; + handleQuery(); + }; + + handleQuery(); +</script> +<style scoped> +:deep(.el-input), +:deep(.el-select), +:deep(.el-input-number) { + width: 100%; +} +</style> + -- Gitblit v1.8.0