.gitignore
@@ -1579,3 +1579,11 @@ /Code Management/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.12.31.40377/SemanticSymbols.db-shm /Code Management/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.12.31.40377/SemanticSymbols.db-wal /Code Management/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/CopilotIndices/17.12.31.40377/SemanticSymbols.db /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/CodeChunks.db /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/CodeChunks.db-shm /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/CodeChunks.db-wal /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/SemanticSymbols.db /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/SemanticSymbols.db-shm /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/CodeChunks.db-wal /Code Management/.vs/Code Management/CopilotIndices/17.12.31.40377/SemanticSymbols.db-wal /Code Management/.vs/slnx.sqlite Code Management/.vs/slnx.sqliteBinary files differ
Code Management/WCS/WIDESEAWCS_Client/src/extension/basicinfo/Dt_needBarcode.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè éæ°é ç½®çæç代ç import gridBody from './extend/routerview.vue'; import gridHeader from './extend/addrouters.vue'; let extension = { components: { //æ¥è¯¢ç颿©å±ç»ä»¶ gridHeader: gridHeader, gridBody: gridBody, gridFooter: '', //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ modelHeader: '', modelBody: '', modelFooter: '' }, tableAction: '', //æå®æå¼ 表çæé(è¿éå¡«å表å,é»è®¤ä¸ç¨å¡«å) buttons: { view: [], box: [], detail: [] }, //æ©å±çæé® methods: { //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ onInit() { }, onInited() { //æ¡æ¶åå§åé ç½®å //妿è¦é ç½®æç»è¡¨,卿¤æ¹æ³æä½ //this.detailOptions.columns.forEach(column=>{ }); }, searchBefore(param) { //ç颿¥è¯¢å,å¯ä»¥ç»param.wheresæ·»å æ¥è¯¢åæ° //è¿åfalseï¼åä¸ä¼æ§è¡æ¥è¯¢ return true; }, searchAfter(result) { //æ¥è¯¢åï¼resultè¿åçæ¥è¯¢æ°æ®,å¯ä»¥å¨æ¾ç¤ºå°è¡¨æ ¼åå¤çè¡¨æ ¼çå¼ return true; }, addBefore(formData) { //æ°å»ºä¿ååformData为对象ï¼å æ¬æç»è¡¨ï¼å¯ä»¥ç»ç»è¡¨å设置å¼ï¼èªå·±è¾åºçformDataçå¼ return true; }, updateBefore(formData) { //ç¼è¾ä¿ååformData为对象ï¼å æ¬æç»è¡¨ãå é¤è¡çId return true; }, rowClick({ row, column, event }) { //æ¥è¯¢çé¢ç¹å»è¡äºä»¶ // this.$refs.table.$refs.table.toggleRowSelection(row); //åå»è¡æ¶éä¸å½åè¡; }, modelOpenAfter(row) { //ç¹å»ç¼è¾ãæ°å»ºæé®å¼¹åºæ¡åï¼å¯ä»¥å¨æ¤å¤åé»è¾ï¼å¦ï¼ä»åå°è·åæ°æ® //(1)夿æ¯ç¼è¾è¿æ¯æ°å»ºæä½ï¼ this.currentAction=='Add'; //(2)ç»å¼¹åºæ¡è®¾ç½®é»è®¤å¼ //(3)this.editFormFields.åæ®µ='xxx'; //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é 置对åºdata屿§çkeyå¼ //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) } } }; export default extension; Code Management/WCS/WIDESEAWCS_Client/src/extension/taskinfo/task_Hty.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè éæ°é ç½®çæç代ç import gridBody from './extend/taskExecuteDetail.vue' let extension = { components: { //æ¥è¯¢ç颿©å±ç»ä»¶ gridHeader: '', gridBody: gridBody, gridFooter: '', //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ modelHeader: '', modelBody: '', modelFooter: '' }, tableAction: '', //æå®æå¼ 表çæé(è¿éå¡«å表å,é»è®¤ä¸ç¨å¡«å) buttons: { view: [], box: [], detail: [] }, //æ©å±çæé® methods: { //ä¸é¢è¿äºæ¹æ³å¯ä»¥ä¿çä¹å¯ä»¥å é¤ onInit() { // this.$Notice.success({ title: this.detailOptions.cnName + ',æ¥è¯¢ç»æ', desc: 'è¿åç对象ï¼' + JSON.stringify(data) }); // var previousButton = this.buttons.find((x) => x.value == "Previous"); // if (previousButton) previousButton.hidden = true; // var nextButton = this.buttons.find((x) => x.value == "Next"); // if (nextButton) nextButton.hidden = true; // var recoveryButton = this.buttons.find((x) => x.value == "TaskRecovery"); // if (recoveryButton) recoveryButton.hidden = true; //æ©å±é¡µé¢åå§åæä½ this.columns.push({ field: 'æä½', title: 'æä½', width: 70, fixed: 'right', align: 'center', formatter: (row) => { return ( '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">æ¥ç</i>' ); }, click: (row) => { this.$refs.gridBody.open(row); } }); }, onInited() { //æ¡æ¶åå§åé ç½®å //妿è¦é ç½®æç»è¡¨,卿¤æ¹æ³æä½ //this.detailOptions.columns.forEach(column=>{ }); }, searchBefore(param) { //ç颿¥è¯¢å,å¯ä»¥ç»param.wheresæ·»å æ¥è¯¢åæ° //è¿åfalseï¼åä¸ä¼æ§è¡æ¥è¯¢ return true; }, searchAfter(result) { //æ¥è¯¢åï¼resultè¿åçæ¥è¯¢æ°æ®,å¯ä»¥å¨æ¾ç¤ºå°è¡¨æ ¼åå¤çè¡¨æ ¼çå¼ return true; }, addBefore(formData) { //æ°å»ºä¿ååformData为对象ï¼å æ¬æç»è¡¨ï¼å¯ä»¥ç»ç»è¡¨å设置å¼ï¼èªå·±è¾åºçformDataçå¼ return true; }, updateBefore(formData) { //ç¼è¾ä¿ååformData为对象ï¼å æ¬æç»è¡¨ãå é¤è¡çId return true; }, rowClick({ row, column, event }) { //æ¥è¯¢çé¢ç¹å»è¡äºä»¶ // this.$refs.table.$refs.table.toggleRowSelection(row); //åå»è¡æ¶éä¸å½åè¡; }, modelOpenAfter(row) { //ç¹å»ç¼è¾ãæ°å»ºæé®å¼¹åºæ¡åï¼å¯ä»¥å¨æ¤å¤åé»è¾ï¼å¦ï¼ä»åå°è·åæ°æ® //(1)夿æ¯ç¼è¾è¿æ¯æ°å»ºæä½ï¼ this.currentAction=='Add'; //(2)ç»å¼¹åºæ¡è®¾ç½®é»è®¤å¼ //(3)this.editFormFields.åæ®µ='xxx'; //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é 置对åºdata屿§çkeyå¼ //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) } } }; export default extension; Code Management/WCS/WIDESEAWCS_Client/src/uitils/signalr.js
@@ -95,6 +95,9 @@ connection.on("LineData", (data) => { eventBus.emit("locationData", data); }); connection.on("Logs", (data) => { eventBus.emit("Logs", data); }); }; //页é¢éæ¯ Code Management/WCS/WIDESEAWCS_Client/src/views/Home.vue
@@ -1,21 +1,38 @@ <template> <div class="title"></div> <el-container> <el-header>æ¥å¿</el-header> <el-main> <el-card v-for="(log, index) in logs" :key="index" class="log-card" :style="{ color: log.color }"> <div :style="{ color: log.color }">{{ log.logEntry }}</div> <div :style="{ color: log.color }">{{ log.time }}</div> </el-card> </el-main> </el-container> </template> <script> import { ref, reactive } from 'vue' import eventBus from "../uitils/eventBus"; import { ref, onMounted } from 'vue' import eventBus from "@/uitils/eventBus"; export default { setup() { return { const logs = ref([]); onMounted(() => { eventBus.on('Logs', eventData => { if (logs.value.length > 500) { logs.value = []; } const logEntry = "æ¥å¿ä¿¡æ¯ï¼" + eventData.log const time = "æ¶é´ï¼" + eventData.time logs.value.unshift({ logEntry: logEntry, time: time, color: eventData.color }); eventBus.on('stackerData', eventData => { console.log(eventData); }) eventBus.on('locationData', eventData => { console.log(eventData); }) // logs.value.unshift(logEntry); }); }); return { logs } } } </script> @@ -27,4 +44,8 @@ font-size: 28px; color: orange; } .log-card { margin-bottom: 10px; } </style> Code Management/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/copilot-chat/bef6627e/sessions/0fd52b0d-b36f-4668-871f-5e1c1d23e2e3Binary files differ
Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/SysConfigKeyConst.cs
@@ -69,6 +69,9 @@ /// </summary> public const string RequestOutTaskToBZ = "RequestOutTaskToBZ"; /// <summary> /// éç½®NGå ¥åº /// </summary> public const string RequestInBoundTaskNG = "RequestInBoundTaskNG"; } } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -15,6 +15,8 @@ //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True", //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WCS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=True", //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WCSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //è·¨å "Cors": { Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_SignalR/Hub/ISimpleHub.cs
@@ -32,4 +32,11 @@ /// <param name="context"></param> /// <returns></returns> Task LineData(object context); /// <summary> /// çº¿ä½æ°æ® /// </summary> /// <param name="context"></param> /// <returns></returns> Task Logs(object context); } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_SignalR/Service/INoticeService.cs
@@ -51,4 +51,13 @@ /// <param name="message">éç¥å 容</param> /// <returns></returns> Task LineData(int? userId, List<string> clientIds, object message); /// <summary> /// æ¥å¿æµç¨æ°æ® /// </summary> /// <param name="userId">ç¨æ·ID</param> /// <param name="clientIds">clientIdå表</param> /// <param name="message">éç¥å 容</param> /// <returns></returns> Task Logs(List<string> clientIds, object message); } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_SignalR/Service/SignalrNoticeService.cs
@@ -59,5 +59,12 @@ await GetHubContext().Clients.Users(clientIds).LineData(message); } /// <inheritdoc/> public async Task Logs(List<string> clientIds, object message) { //åéæ¶æ¯ç»ç¨æ· await GetHubContext().Clients.Users(clientIds).Logs(message); } #endregion MyRegion } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -1,5 +1,4 @@  using AutoMapper; using AutoMapper; using HslCommunication; using Mapster; using Microsoft.AspNetCore.Components.Routing; @@ -76,76 +75,110 @@ /// <returns>è¿åå¤çç»æ</returns> public WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs) { // å建ä¸ä¸ªWebResponseContent对象ç¨äºåå¨è¿åç»æ WebResponseContent content = new WebResponseContent(); try { // å建ä¸ä¸ªDt_Taskç±»åçå表ç¨äºåå¨è½¬æ¢åç任塿°æ® List<Dt_Task> tasks = new List<Dt_Task>(); // éåä¼ å ¥çWMSTaskDTOå表 foreach (var item in taskDTOs) { // æ¥è¯¢æ°æ®åºä¸æ¯å¦åå¨ç¸åä»»å¡ç¼å·ææçç çä»»å¡ï¼å¦æåå¨åè·³è¿å½åå¾ªç¯ if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null) { continue; } // å°WMSTaskDTO对象æ å°ä¸ºDt_Task对象 Dt_Task task = _mapper.Map<Dt_Task>(item); // 设置任å¡çå建è 为"WMS" task.Creater = "WMS"; // 夿任å¡ç±»åæ¯å¦ä¸ºåºåºä»»å¡ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { if (task.TargetAddress == "002-021-001") // 夿任å¡ç®æ å°ååè·¯å¾æ¯å¦æ»¡è¶³ç¹å®æ¡ä»¶ if (task.TargetAddress == "002-021-001" && task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray) { // 设置任å¡ç¶æä¸ºåºåºæ°å»º task.TaskState = (int)TaskOutStatusEnum.OutNew; // 设置å½åå°å为æºå°å task.CurrentAddress = item.SourceAddress; // 设置ä¸ä¸ä¸ªå°åä¸ºç®æ å°å task.NextAddress = item.TargetAddress; } else { // æ¥è¯¢ä¸ä¸ä¸ªè·¯ç± List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress); if (routers.Count > 0) { // 设置任å¡ç¶æä¸ºåºåºæ°å»º task.TaskState = (int)TaskOutStatusEnum.OutNew; // 设置å½åå°å为æºå°å task.CurrentAddress = item.SourceAddress; // 设置ä¸ä¸ä¸ªå°å为第ä¸ä¸ªåä½ç½® task.NextAddress = routers.FirstOrDefault().ChildPosi; } else { // æ¥è¯¢ä»æºå°åå°ç®æ å°åçè·¯ç± routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); if (routers.Count > 0) { // 设置任å¡ç¶æä¸ºåºåºå®æ task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; // 设置å½åå°å为æºå°å task.CurrentAddress = item.SourceAddress; // 设置ä¸ä¸ä¸ªå°å为第ä¸ä¸ªåä½ç½® task.NextAddress = routers.FirstOrDefault().ChildPosi; } } } } // 夿任å¡ç±»åæ¯å¦ä¸ºå ¥åºä»»å¡ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { if (task.SourceAddress == "1359-4") // 夿æºå°åæ¯å¦ä¸çäº"1359-4" if (task.SourceAddress != "1359-4") { task.TaskState = (int)TaskInStatusEnum.InNew; task.CurrentAddress = item.SourceAddress; } else { // æ¥è¯¢ä»æºå°åå°ç®æ å°åçè·¯ç± List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); if (routers.Count > 0) { // 设置任å¡ç¶æä¸ºå ¥åºæ°å»º task.TaskState = (int)TaskInStatusEnum.InNew; // 设置å½åå°å为æºå°å task.CurrentAddress = item.SourceAddress; // 设置ä¸ä¸ä¸ªå°å为第ä¸ä¸ªåä½ç½® task.NextAddress = routers.FirstOrDefault().ChildPosi; } } else { // 设置å½åå°å为"002-021-001" task.CurrentAddress = "002-021-001"; // 设置ä¸ä¸ä¸ªå°åä¸ºç®æ å°å task.NextAddress = item.TargetAddress; } } // å°è½¬æ¢åç任塿·»å å°ä»»å¡åè¡¨ä¸ tasks.Add(task); } // å°ä»»å¡å表添å å°æ°æ®åºä¸ BaseDal.AddData(tasks); // æ·»å 任塿§è¡è¯¦æ _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "æ¥æ¶WMSä»»å¡"); // 设置è¿åç»æä¸ºæå content = WebResponseContent.Instance.OK("æå"); } catch (Exception ex) { // æè·å¼å¸¸å¹¶è®¾ç½®è¿åç»æä¸ºéè¯¯ä¿¡æ¯ content = WebResponseContent.Instance.Error($"任塿¥æ¶é误,é误信æ¯:{ex.Message}"); } // è¿åç»æ return content; } @@ -166,14 +199,16 @@ return content.OK("å½åæçåå¨ä»»å¡"); } var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; if (wmsBase == null || requestTask == null) var wmsIpAddrss = string.Empty; var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == sourceAddress); if (stationManager.stationType == 5) { throw new InvalidOperationException("WMS IP æªé ç½®"); wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestInBoundTaskNG); } var wmsIpAddrss = wmsBase + requestTask; else { wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestTask); } var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode }.ToJsonString()); content = JsonConvert.DeserializeObject<WebResponseContent>(result); @@ -192,8 +227,7 @@ _Task.TaskState = (int)TaskInStatusEnum.InNew; _Task.CurrentAddress = task.SourceAddress; _Task.NextAddress = station.stationNGChildCode; _Task.TargetAddress = station.stationNGLocation; _Task.Roadway = station.Roadway; _Task.TargetAddress = task.TargetAddress; BaseDal.AddData(_Task); _taskExecuteDetailService.AddTaskExecuteDetail(_Task.TaskNum, "æ¥æ¶WMSä»»å¡"); @@ -218,7 +252,7 @@ /// <returns></returns> public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress) { return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -229,7 +263,7 @@ /// <returns></returns> public Dt_Task QueryNextConveyorLineTask(string deviceNo, string currentAddress) { return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.NextAddress == currentAddress, TaskOrderBy); return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.NextAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -240,7 +274,7 @@ /// <returns></returns> public Dt_Task QueryBarCodeConveyorLineTask(string Barcode, string currentAddress) { return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress && x.PalletCode == Barcode, TaskOrderBy); return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress && x.PalletCode == Barcode, TaskOrderBy); } /// <summary> @@ -265,11 +299,16 @@ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); } /// <summary> /// æ ¹æ®æçå·ãå½åå°åæ¥è¯¢ä»»å¡ /// </summary> /// <param name="taskNum">ä»»å¡å·</param> /// <param name="currentAddress">å½åå°å</param> /// <returns></returns> public Dt_Task QueryBarcodeTask(string barcode, string currentAddress) { return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> /// æ ¹æ®ä»»å¡å·ãå½åå°åæ¥è¯¢è¾é线æ°å»ºçä»»å¡ @@ -291,7 +330,7 @@ public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null) { if (taskTypeGroup == null) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); return BaseDal.QueryFirst(x => x.Roadway == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) @@ -308,9 +347,9 @@ public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); return BaseDal.QueryFirst(x => x.Roadway == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); } /// <summary> @@ -472,8 +511,8 @@ if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) { #region å ¥åºè°ç¨æ¥å£è·åè´§ä½å°å // TODO: è°ç¨æ¥å£è·åè´§ä½å°å // å建请æ±å¯¹è±¡ var taskDto = new RequestTaskDto() @@ -509,12 +548,11 @@ task.CurrentAddress = task.NextAddress; task.NextAddress = taskResult.TargetAddress; task.TargetAddress = task.NextAddress; #endregion #endregion å ¥åºè°ç¨æ¥å£è·åè´§ä½å°å } else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish) { task.ModifyDate = DateTime.Now; task.Modifier = "System"; @@ -542,6 +580,7 @@ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工æå¨å°ä»»å¡ç¶æä»ã{oldState}ã跳转å°ã{task.TaskState}ã" : $"ç³»ç»èªå¨æµç¨ï¼ä»»å¡ç¶æä»ã{oldState}ã转å°ã{task.TaskState}ã"); #region æ´æ°ä»»å¡ç¶æ // è·åWMSipå°å var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; @@ -554,7 +593,8 @@ var result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; content = JsonConvert.DeserializeObject<WebResponseContent>(result); #endregion #endregion æ´æ°ä»»å¡ç¶æ content = WebResponseContent.Instance.OK(); } @@ -614,6 +654,7 @@ if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); #region WMS忥任å¡å®æ var keys = new Dictionary<string, object>() { {"taskNum", taskNum} @@ -640,7 +681,8 @@ } } task.ExceptionMessage += " " + content.Message; #endregion #endregion WMS忥任å¡å®æ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { @@ -678,7 +720,6 @@ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); } //æä¸èèå¤ä¸ªåºåºå£ } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) @@ -707,21 +748,6 @@ { throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã"); } #region æ´æ°ä»»å¡ç¶æ //var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTask)?.ConfigValue; //if (wmsBase == null || updateTask == null) //{ // throw new InvalidOperationException("WMS IP æªé ç½®"); //} //wmsIpAddress = wmsBase + updateTask; //result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; //content = JsonConvert.DeserializeObject<WebResponseContent>(result); #endregion //content = WebResponseContent.Instance.OK(); } catch (Exception ex) { @@ -829,5 +855,17 @@ { return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); } private string GetIpAddress(string baseIp, string name) { var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wcsBasez = configz.Where(x => x.ConfigKey == baseIp).FirstOrDefault()?.ConfigValue; var address = configz.Where(x => x.ConfigKey == name).FirstOrDefault()?.ConfigValue; if (wcsBasez == null || address == null) { throw new InvalidOperationException("WMS IP æªé ç½®"); } return wcsBasez + address; } } } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -1,5 +1,6 @@ using AutoMapper; using HslCommunication; using NetTaste; using Newtonsoft.Json; using Quartz; using SqlSugar; @@ -43,6 +44,10 @@ private readonly ICacheService _cacheService; private readonly INoticeService _noticeService; private static List<string>? userTokenIds; private static List<int>? userIds; public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService, IDt_StationManagerService stationManagerService, IDt_StationManagerRepository stationManagerRepository, ICacheService cacheService, INoticeService noticeService) { _taskService = taskService; @@ -61,34 +66,71 @@ public async Task Execute(IJobExecutionContext context) { string jobName = context.JobDetail.Key.Name; if (MemoryLockManager.TryAcquireLock(jobName)) { //if (MemoryLockManager.TryAcquireLock(jobName)) //{ try { // ä»JobDataMapä¸è·åä¼ éçåæ° CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { // æ¥è¯¢ææå设å¤çä½ç½® List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); // å¹¶è¡å¤çæ¯ä¸ªåè®¾å¤ var tasks = childDeviceCodes.Select(childDeviceCode => ProcessDeviceAsync(conveyorLine, childDeviceCode)).ToList(); await Task.WhenAll(tasks); // è·åææç«ç¹ç®¡çå¨ List<Dt_StationManager> stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); foreach (var station in stationManagers) { if (station.stationType == 11) { // 读åä»»å¡å½ä»¤å设å¤å½ä»¤ ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); if (command != null && commandWrite != null) { // å°äº¤äºä¿¡å·è½¬æ¢ä¸ºå¸å°æ°ç» var structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); if (structs[0] == true) { // è¾åºè¦åä¿¡æ¯ ConsoleHelper.WriteWarningLine($"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ã空æçè¯·æ±æ«ç å ¥åº"); // å¤çå ¥åºè¯·æ± NGRequestTaskInbound(conveyorLine, command, station.stationChildCode, 0, station.stationLocation); } else { // åéå®æä¿¡å· ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); } } } else if (station.stationType == 5) { // 读åä»»å¡å½ä»¤å设å¤å½ä»¤ ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(station.stationChildCode); ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(station.stationChildCode, "DeviceCommand"); if (command != null && commandWrite != null) { // å°äº¤äºä¿¡å·è½¬æ¢ä¸ºå¸å°æ°ç» var structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); if (structs[0] == true) { // æ£æ¥æ¯å¦åå¨ä»»å¡ if (_taskRepository.QueryData(x => x.SourceAddress == station.stationChildCode).Count() > 0) { return; } // è¾åºè¦åä¿¡æ¯ ConsoleHelper.WriteWarningLine($"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{station.stationChildCode}ãå¼å¸¸å£è¯·æ±æ«ç å ¥åº"); // å¤çæ°ä»»å¡ await HandleNewTaskAsync(conveyorLine, command, station.stationChildCode, 0); } else { // åéå®æä¿¡å· ConveyorLineSendFinish(conveyorLine, station.stationChildCode, 0, false); } } @@ -98,46 +140,68 @@ } catch (Exception ex) { // è¾åºå¼å¸¸ä¿¡æ¯ Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } finally { MemoryLockManager.ReleaseLock(jobName); } } else { ConsoleHelper.WriteErrorLine($"[CommonConveyorLineJob]ã{jobName}ãä»»å¡å·²è¢«éå®ï¼æ æ³å¤ç"); } // finally // { // MemoryLockManager.ReleaseLock(jobName); // } // } // else // { // ConsoleHelper.WriteErrorLine($"[CommonConveyorLineJob]ã{jobName}ãä»»å¡å·²è¢«éå®ï¼æ æ³å¤ç"); // } return; } private Task ProcessDeviceAsync(CommonConveyorLine conveyorLine, string childDeviceCode) { // 读åä»»å¡å½ä»¤å设å¤å½ä»¤ ConveyorLineTaskCommand command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(childDeviceCode); ConveyorLineTaskCommandWrite commandWrite = conveyorLine.ReadCustomer<ConveyorLineTaskCommandWrite>(childDeviceCode, "DeviceCommand"); if (command != null && commandWrite != null) { #region è°ç¨äºä»¶æ»çº¿éç¥å端 // è·åç¼åä¸çç¨æ·ä¿¡æ¯ if (userTokenIds == null && userIds == null) { var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); if (tokenInfos != null && tokenInfos.Any()) { var userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); var userIds = tokenInfos.Select(x => x.UserId).ToList(); userTokenIds = tokenInfos.Select(x => x.Token_ID).ToList(); userIds = tokenInfos.Select(x => x.UserId).ToList(); // æé éç¥æ°æ® object obj = new { command, commandWrite }; // åééç¥ _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj }); } } else { // æé éç¥æ°æ® object obj = new { command, commandWrite }; // åééç¥ _noticeService.LineData(userIds.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, childDeviceCode, data = obj }); } #endregion è°ç¨äºä»¶æ»çº¿éç¥å端 // å°äº¤äºä¿¡å·è½¬æ¢ä¸ºå¸å°æ°ç» var writeInteractiveSignal = commandWrite.WriteInteractiveSignal; var structs = BitConverter.GetBytes(writeInteractiveSignal).Reverse().ToArray().ToBoolArray(); // è·å设å¤å议详æ List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList(); if (deviceProtocolDetails != null) @@ -147,116 +211,48 @@ int itemValue = item.ProtocalDetailValue.ObjToInt(); if (structs[itemValue] == true) { var numRead = itemValue; var numWrite = itemValue + 1; ConsoleHelper.WriteWarningLine($"ã{conveyorLine.DeviceName}ãã{childDeviceCode}ãã{numRead.ToString()}ãä½è¾é线读åä¿¡å·ï¼ã{structs[itemValue]}ã ã{numWrite}ãä½WCSåå ¥ä¿¡å·ï¼ã{structs[itemValue + 1]}ã"); if (structs[itemValue + 1] != structs[itemValue]) { // è·åå¤çæ¹æ³ MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); if (method != null) { command.InteractiveSignal = writeInteractiveSignal; // è°ç¨å¤çæ¹æ³ method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, itemValue }); } } } else { // åéå®æä¿¡å· ConveyorLineSendFinish(conveyorLine, childDeviceCode, itemValue, false); } } } // æ¥è¯¢å¹³å°ä¿¡æ¯ Platform platform = _platFormRepository.QueryFirst(x => x.PLCCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active"); if (platform != null && !string.IsNullOrEmpty(platform.Location)) { var strings = platform.Location.Split(',').ToList(); foreach (var ite in strings) { // 读åä»»å¡å½ä»¤ ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(ite); if (command1.InteractiveSignal != 2) { command.InteractiveSignal = writeInteractiveSignal; int count = strings.Count; // è·åå¤çæ¹æ³ MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); if (method != null) { command.InteractiveSignal = commandWrite.WriteInteractiveSignal; // è°ç¨å¤çæ¹æ³ method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); }; } } } #region //var structs = BitConverter.GetBytes(commandWrite.WriteInteractiveSignal).Reverse().ToArray().ToBoolArray(); //List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand.InteractiveSignal)).ToList(); //if (deviceProtocolDetails != null) //{ // foreach (var item in deviceProtocolDetails) // { // if (structs[item.ProtocalDetailValue.ObjToInt()] == true) // { // MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); // if (method != null) // { // var numRead = item.ProtocalDetailValue.ObjToInt(); // var numWrite = item.ProtocalDetailValue.ObjToInt() + 1; // ConsoleHelper.WriteWarningLine($"ã{conveyorLine.DeviceName}ãã{childDeviceCode}ãã{numRead.ToString()}ãä½è¾é线读åä¿¡å·ï¼ã{structs[item.ProtocalDetailValue.ObjToInt()]}ã ã{numWrite}ãä½WCSåå ¥ä¿¡å·ï¼ã{structs[item.ProtocalDetailValue.ObjToInt() + 1]}ã"); // if (structs[item.ProtocalDetailValue.ObjToInt() + 1] != structs[item.ProtocalDetailValue.ObjToInt()]) // { // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() }); // } // } // } // else // { // ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false); // } // } //} //Platform platform = _platFormRepository.QueryFirst(x => x.PLCCode == conveyorLine.DeviceCode && x.PlatCode == childDeviceCode && x.Status == "Active"); //if (platform != null) //{ // if (command.InteractiveSignal != 2) // { // MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); // if (method != null) // { // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; // int count = string.IsNullOrEmpty(platform.Location) ? 0 + 1 : platform.Location.Split(',').Count() + 1; // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); // } // } // else // { // if (platform.Location != null && platform.Location != "") // { // var strings = platform.Location.Split(',').ToList(); // foreach (var ite in strings) // { // //int index = strings.FindIndex(p => p == ite); // ConveyorLineTaskCommand command1 = conveyorLine.ReadCustomer<ConveyorLineTaskCommand>(ite); // if (command1.InteractiveSignal != 2) // { // MethodInfo? method = GetType().GetMethod(platform.ExecutionMethod); // if (method != null) // { // command.InteractiveSignal = commandWrite.WriteInteractiveSignal; // //int count = strings.Count - index; // int count = strings.Count; // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, count, platform }); // } // } // } // } // } //} #endregion } return Task.CompletedTask; } @@ -270,44 +266,62 @@ /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) public async Task RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { try { ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å ¥åº"); // è¾åºè¦åä¿¡æ¯ï¼è¡¨ç¤ºä»»å¡å·²å°è¾¾å设å¤å¹¶è¯·æ±æ«ç å ¥åº var log = $"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å ¥åº"; ConsoleHelper.WriteWarningLine(log); // åééç¥ await _noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); WriteInfo(conveyorLine.DeviceName, log); // æ¥è¯¢æ¡ç 对åºçä»»å¡ var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode); if (task != null) { // 妿任å¡ç±»åæ¯åºåºæåºæçï¼åå¤çåºåºä»»å¡ if (task.TaskType == (int)TaskOutboundTypeEnum.OutTray || task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { HandleTaskOut(conveyorLine, command, childDeviceCode, ProtocalDetailValue, task); } else { // è·åä»»å¡çä¸ä¸ç®æ å°å var next = task.NextAddress; // å°ä»»å¡æ å°ä¸ºå½ä»¤ var taskCommand = MapTaskCommand(task, command); // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å task.NextAddress = next; // åéå½ä»¤å°åè®¾å¤ conveyorLine.SendCommand(taskCommand, childDeviceCode); // è¾åºè¦åä¿¡æ¯ï¼è¡¨ç¤ºä»»å¡å·²å°è¾¾å设å¤å¹¶è¯·æ±æ«ç å ¥åºï¼ä¸ä¸ç®æ å°å ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å ¥åº,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"); // åéä»»å¡å®æéç¥ ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // æ´æ°ä»»å¡ç¶æä¸ºä¸ä¸ç¶æ _taskService.UpdateTaskStatusToNext(task); } } else { // 妿任å¡ä¸ºç©ºä¸æ¡ç ä¸ä¸º"NoRead"䏿¡ç ä¸ä¸ºç©ºï¼åå¤çæ°ä»»å¡ if (task == null && command.Barcode != "NoRead" && command.Barcode.IsNotEmptyOrNull()) { // æ¥è¯¢æ¡ç 对åºçä»»å¡ task = _taskService.QueryBarcodeTask(command.Barcode, childDeviceCode); if (task == null) HandleNewTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); // 弿¥å¤çæ°ä»»å¡ await HandleNewTaskAsync(conveyorLine, command, childDeviceCode, ProtocalDetailValue); } } } catch (Exception ex) { // æè·å¹¶è¾åºå¼å¸¸ä¿¡æ¯ Console.Out.WriteLine(ex.ToString()); } } @@ -322,6 +336,7 @@ /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode) { ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ã请æ±å ¥åºä¸ä¸å°å"); Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { @@ -361,7 +376,10 @@ { if (command.Barcode == task.PalletCode && childDeviceCode == task.NextAddress) { ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾éçº¿å ¥åºå®æ,ä¸ä¸ç®æ å°åãçå¾ åé è´§ä½ã"); //conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, "1000", childDeviceCode); ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾éçº¿å ¥åºå®æ,ä¸ä¸ç®æ å°åãçå¾ åé è´§ä½,å¹¶åå ¥1000ã"); ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); if (task.TaskType == (int)TaskInboundTypeEnum.InNG) @@ -399,31 +417,40 @@ /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { // æ¥è¯¢è¾é线任å¡ï¼æ ¹æ®è¾é线设å¤åå设å¤ä»£ç è·åä»»å¡ä¿¡æ¯ var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // è¾åºæåä¿¡æ¯ï¼å æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç åå设å¤ä»£ç ï¼ä»¥åä»»å¡ä¿¡æ¯ ConsoleHelper.WriteSuccessLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåº,task{task.ToJsonString()}"); // 妿任å¡ä¸ä¸ºç©ºï¼åæ§è¡ä»¥ä¸æä½ if (task != null) { //if (command.Barcode == task.PalletCode) { //task.NextAddress = task.NextAddress.Replace("-1", ""); //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; //ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); // è·åä»»å¡çä¸ä¸ç®æ å°å var next = task.NextAddress; // å°ä»»å¡å½ä»¤æ å°å°å½åä»»å¡ var taskCommand = MapTaskCommand(task, command); // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å task.NextAddress = next; // è¾åºæåä¿¡æ¯ï¼å æ¬è¾é线åç§°ãä»»å¡å·ãæçæ¡ç ãå设å¤ä»£ç åä¸ä¸ç®æ å°å ConsoleHelper.WriteSuccessLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåº,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"); // åè¾é线åéå½ä»¤ conveyorLine.SendCommand(taskCommand, childDeviceCode); // 宿è¾é线åéä»»å¡ï¼å¹¶æ´æ°ä»»å¡ç¶æ ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ _taskService.UpdateTaskStatusToNext(task); // 妿任å¡çç®æ å°åæ¯"1020-1"ï¼å忬¡æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ if (task.TargetAddress == "1020-1") { _taskService.UpdateTaskStatusToNext(task); } } } } @@ -436,26 +463,40 @@ /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç 以å请æ±åºåºä¸ä¸å°åçå设å¤ä»£ç ConsoleHelper.WriteSuccessLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåºä¸ä¸å°å"); // æ¥è¯¢æ£å¨æ§è¡çè¾é线任å¡ï¼æ ¹æ®ä»»å¡å·åå设å¤ä»£ç è·åä»»å¡ä¿¡æ¯ Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // 妿任å¡åå¨ if (task != null) { // æ£æ¥ä»»å¡ä¸çæçæ¡ç æ¯å¦ä¸å½ä»¤ä¸çæçæ¡ç ä¸è´ if (command.Barcode == task.PalletCode) { // æ´æ°ä»»å¡çä½ç½®ä¿¡æ¯ï¼å¹¶è·åæ´æ°åçä»»å¡å¯¹è±¡ Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); // å¦ææ´æ°åçä»»å¡å¯¹è±¡ä¸ä¸ºç©º if (newTask != null) { //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(newTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; //ConveyorLineTaskCommand taskCommand = MapTaskCommand(newTask, command); // è·åä¸ä¸ç®æ å°å var next = newTask.NextAddress; // å°æ°ä»»å¡å¯¹è±¡æ å°ä¸ºä»»å¡å½ä»¤å¯¹è±¡ var taskCommand = MapTaskCommand(newTask, command); // æ¢å¤æ°ä»»å¡å¯¹è±¡çä¸ä¸ç®æ å°å newTask.NextAddress = next; // æå°æåæ¥å¿ï¼æ¾ç¤ºå½å设å¤åç§°ãä»»å¡å·ãæçæ¡ç ãå设å¤ä»£ç 以åä¸ä¸ç®æ å°å ConsoleHelper.WriteSuccessLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线请æ±åºåºä¸ä¸å°å,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"); // åéä»»å¡å½ä»¤å°åè®¾å¤ conveyorLine.SendCommand(taskCommand, childDeviceCode); // æ è®°è¾é线åéä»»å¡å®æ ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } @@ -470,34 +511,63 @@ /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåº ConsoleHelper.WriteSuccessLine($"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åºåºå®æ"); // æ¥è¯¢æ£å¨æ§è¡çè¾éçº¿ä»»å¡ var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // 妿任å¡åå¨ if (task != null) { // 妿任å¡ä¸çæçæ¡ç ä¸å½ä»¤ä¸çæçæ¡ç ä¸è´ if (command.Barcode == task.PalletCode) { // å建ä¸ä¸ªç©ºçWebResponseContent对象 WebResponseContent content = new WebResponseContent(); //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; //ConveyorLineTaskCommand taskCommand = MapTaskCommand(task, command); // ä¿åä»»å¡çä¸ä¸ç®æ å°å var next = task.NextAddress; // å°ä»»å¡æ å°ä¸ºå½ä»¤ var taskCommand = MapTaskCommand(task, command); // æ¢å¤ä»»å¡çä¸ä¸ç®æ å°å task.NextAddress = next; // 妿任å¡çæçæ¡ç ä¸å½ä»¤ä¸çæçæ¡ç ä¸ä¸è´æè ä»»å¡å¤æ³¨ä¸º"NG" if (task.PalletCode != command.Barcode || task.Remark == "NG") { // æ¥è¯¢ç®æ å°åç容é var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; // 设置å½ä»¤çç®æ å°å为NGå°å taskCommand.TargetAddress = NGAddress; } else { // 设置å½ä»¤çç®æ å°å为1000 taskCommand.TargetAddress = 1000; } // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåºï¼ä¸ä¸ç®æ å°åå·²ç¡®å® ConsoleHelper.WriteSuccessLine($"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åºåºå®æ,ä¸ä¸ç®æ å°åã{taskCommand.TargetAddress}ã"); // åéå½ä»¤å°è¾é线 conveyorLine.SendCommand(taskCommand, childDeviceCode); // 宿è¾é线åé ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ content = _taskService.UpdateTaskStatusToNext(task); } else { // æ¥è¯¢ç®æ å°åç容é var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == task.TargetAddress).Capacity; // æå°æåä¿¡æ¯ï¼è¡¨ç¤ºæçå·²å°è¾¾æå®è¾éçº¿å¹¶å®æåºåºï¼ä¸ä¸ç®æ å°åå·²ç¡®å® ConsoleHelper.WriteSuccessLine($"ã{conveyorLine.DeviceName}ãä»»å¡å·ï¼ã{command.TaskNum}ã,æçæ¡ç ï¼ã{command.Barcode}ãå·²å°è¾¾ã{childDeviceCode}ãè¾é线åºåºå®æ,ä¸ä¸ç®æ å°åã{NGAddress}ã"); // 设置è¾é线çç®æ å°å为NGå°å conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, NGAddress, childDeviceCode); // 宿è¾é线åé ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // æ´æ°ä»»å¡ç¶æå°ä¸ä¸ä¸ªç¶æ _taskService.UpdateTaskStatusToNext(task); } } } @@ -513,10 +583,21 @@ /// <param name="value">å¼</param> public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) { // ä»conveyorLineä¸çDeviceProDTOsåè¡¨ä¸æ¥æ¾ç¬¬ä¸ä¸ªç¬¦åæ¡ä»¶çDeviceProDTO对象 // æ¡ä»¶æ¯DeviceProParamTypeçäºDeviceCommandï¼ä¸DeviceChildCodeçäºchildDeviceCode // æ¥æ¾ç»ææDeviceProOffsetååºæå DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); // å°deviceProçDeviceProAddressæ'.'å岿å符串æ°ç»x string[] x = devicePro.DeviceProAddress.Split('.'); // å°æ°ç»xçæåä¸ä¸ªå ç´ æ¿æ¢ä¸ºProtocalDetailValueå 1åçåç¬¦ä¸²å½¢å¼ x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); // å°ä¿®æ¹åçæ°ç»xéæ°æ¼æ¥æå符串ï¼ä½ä¸ºæ°çDeviceProAddress string DeviceProAddress = string.Join(".", x); // 使ç¨conveyorLineçCommunicator对象çWriteæ¹æ³ï¼å°valueåå ¥æ°çDeviceProAddresså°å conveyorLine.Communicator.Write(DeviceProAddress, value); } @@ -529,19 +610,24 @@ /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> /// <param name="index">线ä½å½åbool读ååç§»å°å</param> // å®ä¹ä¸ä¸ªå¼æ¥æ¹æ³ï¼ç¨äºå¤ç空æçè¿åä»»å¡ public async void EmptyTrayReturn(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int index, Platform platform) { try { // å®ä¹ä»»å¡ç±»åæä¸¾åé TaskOutboundTypeEnum taskOutboundTypeEnum; // æ ¹æ®å¹³å°ç±»å设置任å¡ç±»åæä¸¾ if (platform.PlatformType.Contains("OutTray")) taskOutboundTypeEnum = TaskOutboundTypeEnum.OutTray; else taskOutboundTypeEnum = TaskOutboundTypeEnum.Outbound; // è°ç¨æ£æ¥å¹¶å建任å¡çæ¹æ³ await CheckAndCreateTask(taskOutboundTypeEnum, childDeviceCode, index, platform.Stacker, platform); } catch (Exception) { // æè·å¹¶å¿½ç¥å¼å¸¸ } } @@ -550,38 +636,44 @@ /// </summary> private async Task CheckAndCreateTask(TaskOutboundTypeEnum taskType, string childDeviceCode, int index, string roadWay, Platform platform) { // æ¥è¯¢æ°æ®åºä¸å·²æçä»»å¡ var tasks = _taskRepository.QueryData(x => x.TaskType == (int)taskType && x.TargetAddress == childDeviceCode); // 妿已æä»»å¡æ°éå°äºæå®ç´¢å¼ if (tasks.Count < index) { //ConsoleHelper.WriteErrorLine($"ã{childDeviceCode}ã请æ±ã{taskType.ToString()}ãä»»å¡,å·²æã{taskType.ToString()}ãä»»å¡ã{tasks.Count}ã,æå¤æ¥æã{index - 1}ã"); // è°ç¨WMSè·ååºåºä»»å¡ #region è°ç¨WMSè·ååºåºä»»å¡ // å®ä¹WMS任塿°æ®ä¼ è¾å¯¹è±¡ WMSTaskDTO taskDTO = new WMSTaskDTO(); // è·åWMSipå°å // è·åWMS IPå°åé ç½® var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; var requestTrayOutTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayOutTask)?.ConfigValue; // 妿WMS IPå°åæªé ç½®ï¼æåºå¼å¸¸ if (wmsBase == null || requestTrayOutTask == null) { throw new InvalidOperationException("WMS IP æªé ç½®"); } var wmsIpAddress = wmsBase + requestTrayOutTask; // åéHTTP POST请æ±è·å任塿°æ® var result = await HttpHelper.PostAsync(wmsIpAddress, new { position = childDeviceCode, tag = (int)taskType, areaCdoe = roadWay, platform.ProductionLine }.ToJsonString()); //var result = await HttpHelper.PostAsync("http://localhost:5000/api/Task/RequestTrayOutTaskAsync", dynamic.ToJsonString()); // è§£æè¿åçJSONæ°æ® WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); // æ£æ¥ç¶æå¹¶è¿å // æ£æ¥è¿åç¶æï¼å¦æå¤±è´¥åè¿å if (!content.Status) return; // è§£æä»»å¡æ°æ® taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); #endregion è°ç¨WMSè·ååºåºä»»å¡ // å建并åéä»»å¡ CreateAndSendTask(taskDTO); } } @@ -601,7 +693,7 @@ #endregion æ£æµç©ºçå®çä»»å¡ #region åæNGå£å ¥åº #region 设å¤NGå£å ¥åº public void NGRequestTaskInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, string TargetAddress) { @@ -632,6 +724,9 @@ WriteInfo("å ¥ç«æ ¡éª", $"ã{childDeviceCode}ãå ¥ç«æ ¡éªè¿ååæ°ã{result}ã"); ResultTrayCellsStatus result1 = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(result); if (result1.Success) { var serialNosError = result1.SerialNos.Where(x => x.SerialNoStatus != 1).ToList(); if (serialNosError.Count > 0) { @@ -648,10 +743,6 @@ NextAddress = TargetAddress, TaskNum = 0 }; //ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(dt_Task); //taskCommand.InteractiveSignal = command.InteractiveSignal; //ConveyorLineTaskCommand taskCommand = MapTaskCommand(dt_Task, command); var next = dt_Task.NextAddress; var taskCommand = MapTaskCommand(dt_Task, command); @@ -663,21 +754,16 @@ } else { // 空æçå ¥åºé»è¾ Dt_Task dt_Task = new Dt_Task() { TargetAddress = TargetAddress, PalletCode = command.Barcode, NextAddress = "1000", TaskNum = 0 }; ConveyorLineTaskCommand taskCommand = _mapper.Map<ConveyorLineTaskCommand>(dt_Task); taskCommand.InteractiveSignal = command.InteractiveSignal; conveyorLine.SendCommand(taskCommand, childDeviceCode); conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, 1000, childDeviceCode); ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } } else { } } #endregion åæNGå£å ¥åº } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/Task/RequestInbound.cs
@@ -50,7 +50,7 @@ /// <summary> /// å¤çæ°ä»»å¡ /// </summary> private async void HandleNewTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) private async Task HandleNewTaskAsync(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue) { var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == childDeviceCode && x.stationPLC == conveyorLine.DeviceCode); @@ -79,19 +79,6 @@ default: break; } //if ((conveyorLine.DeviceCode == "1003" && childDeviceCode == "1016") || (conveyorLine.DeviceCode == "1005" && childDeviceCode == "1048")) //{ // await CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); //} //else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088") || (conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339")) //{ // await RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue); //} //else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1068")) //{ // ConveyorLineOutFinish(conveyorLine, command, childDeviceCode, ProtocalDetailValue); //} } /// <summary> @@ -221,18 +208,15 @@ var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode); if (task != null) { if (task.NextAddress.Contains("JZ")) if (task.SourceAddress == "1059-4") { int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskState = nextStatus; //conveyorLine.SetValue(ConveyorLineDBName.ConveyorLineTargetAddress, "1000", childDeviceCode); ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{task.TaskNum}ã,æçæ¡ç ï¼ã{task.PalletCode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å ¥åº(å®ç),ä¸ä¸ç®æ å°åã{task.TargetAddress}ã"); _taskService.UpdateTaskStatusToNext(task); ConsoleHelper.WriteWarningLine($"ã{conveyorLine._deviceName}ãä»»å¡å·ï¼ã{task.TaskNum}ã,æçæ¡ç ï¼ã{task.PalletCode}ãå·²å°è¾¾ã{childDeviceCode}ãè¯·æ±æ«ç å ¥åº(å®ç),ä¸ä¸ç®æ å°åã{1000}ã"); ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); } else { //var taskCommand = MapTaskCommand(task, command); var next = task.NextAddress; var taskCommand = MapTaskCommand(task, command); task.NextAddress = next; Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,21 +1,15 @@ using Autofac.Core; using HslCommunication; using Mapster; using Newtonsoft.Json; using Mapster; using Quartz; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core.Caches; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.HttpContextUser; using WIDESEAWCS_DTO.MOM; using WIDESEAWCS_IProcessRepository; using WIDESEAWCS_ITaskInfo_HtyRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; @@ -98,11 +92,8 @@ #region è°ç¨äºä»¶æ»çº¿éç¥å端 var tokenInfos = _cacheService.Get<List<UserInfo>>("Cache_UserToken"); if (tokenInfos == null || !tokenInfos.Any()) if (tokenInfos != null && tokenInfos.Any()) { //throw new Exception(commonStackerCrane.DeviceName + "ç¼å䏿ªæ¾å°Tokenç¼å"); return Task.CompletedTask; } var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList(); var userIds = tokenInfos?.Select(x => x.UserId).ToList(); @@ -117,9 +108,9 @@ commonStackerCrane.LastTaskNum, }; _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { commonStackerCrane.DeviceName, data = obj }); } #endregion è°ç¨äºä»¶æ»çº¿éç¥å端 } } catch (Exception ex) @@ -321,7 +312,6 @@ return null; } /// <summary> /// æ¥æ¾å ¶ä»åºåºä»»å¡çè¾ å©æ¹æ³ï¼æé¤æå®ä»»å¡IDçä»»å¡ï¼ /// </summary> @@ -370,6 +360,37 @@ stackerCraneTaskCommand.StartCommand = 1; if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//夿æ¯å¦æ¯å ¥åºä»»å¡ { if (task.SourceAddress == "1359-4" && task.Roadway.Contains("JZ")) { string[] souredCodes = task.CurrentAddress.Split("-"); if (souredCodes.Length == 3) { stackerCraneTaskCommand.StartRow = Convert.ToInt16(souredCodes[0]); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(souredCodes[1]); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(souredCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"å ¥åºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); return null; } string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 3) { stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]) % 2 != 0 ? (short)1 : (short)2; stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"å ¥åºä»»å¡ç»ç¹é误ï¼èµ·ç¹ï¼ã{task.NextAddress}ã"); return null; } } else { List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway); if (routers.Count > 0) { @@ -397,9 +418,23 @@ return null; } } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { if (task.Roadway.Contains("GW")) { string[] endCodes = task.NextAddress.Split("-"); stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(endCodes[1]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(endCodes[2]); string[] sourceCodes = task.SourceAddress.Split("-"); stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]) % 2 != 0 ? (short)1 : (short)2; stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); } else { if (task.TargetAddress == "002-021-001" && task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray) { string[] endCodes = task.NextAddress.Split("-"); stackerCraneTaskCommand.EndRow = Convert.ToInt16(endCodes[0]); @@ -440,6 +475,7 @@ } } } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) { string[] targetCodes = task.NextAddress.Split("-"); @@ -471,6 +507,5 @@ } return stackerCraneTaskCommand; } } } Code Management/WMS/WIDESEA_WMSClient/src/api/http.js
@@ -11,8 +11,8 @@ let loadingInstance let loadingStatus = false if (process.env.NODE_ENV == 'development') { axios.defaults.baseURL = 'http://localhost:5000/'; // axios.defaults.baseURL = 'http://192.168.20.251:5000/'; // axios.defaults.baseURL = 'http://localhost:5000/'; axios.defaults.baseURL = 'http://192.168.5.251:5000/'; } else if (process.env.NODE_ENV == 'debug') { axios.defaults.baseURL = 'http://127.0.0.1:9991/'; Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/stock/Dt_BillGroupStock.vue
@@ -53,7 +53,7 @@ [{ field: 'id', title: 'åºåID', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' }, { field: 'locationCode', title: 'åºä½', type: 'string', width: 110, align: 'left', }, { field: 'palletCode', title: 'æçæ¡ç ', type: 'string', width: 110, align: 'left', }, { field: 'isFull', title: 'åºåç±»å', type: 'bool', width: 110, align: 'left', bind: { key: "isFull", data: [] }, }, { field: 'isFull', title: 'åºåç±»å', type: 'bool', width: 110, align: 'left', bind: { key: "isFull", data: [{ key: false, value: '空ç'},{ key: true, value: 'å®ç'}] }, }, { field: 'linedProcessFeedbackTime', title: 'å·¥èºå¼å§æ¶é´', type: 'string', width: 110, align: 'left',}, { field: 'specialParameterDuration', title: 'å·¥èºæ¶é¿', type: 'string', width: 110, align: 'left', sort: true }, { field: 'outboundTime', title: 'åºåºåºæ¶é´', type: 'string', width: 110, align: 'left', sort: true }, Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/BaseServices/ServiceBase.cs
@@ -130,9 +130,22 @@ if (expressionType == LinqExpressionType.Equal) { if (string.IsNullOrEmpty(where)) { // é对å符串类åçåæ®µä½¿ç¨æ¨¡ç³æ¥è¯¢ where += $"{searchParametersList[i].Name} like '%{searchParametersList[i].Value}%'"; } else where += $" and {searchParametersList[i].Name} = '{searchParametersList[i].Value}'"; { // é对å¸å°ç±»ååæ®µè¿è¡ç²¾ç¡®æ¥è¯¢ if (searchParametersList[i].Value.ToLower() == "true" || searchParametersList[i].Value.ToLower() == "false") { where += $" and {searchParametersList[i].Name} = {searchParametersList[i].Value.ToLower()}"; } else { where += $" and {searchParametersList[i].Name} like '%{searchParametersList[i].Value}%'"; } } } else { Code Management/WMS/WIDESEA_WMSServer/WIDESEA_IStorageTaskService/Task/IDt_TaskService.cs
@@ -190,6 +190,14 @@ Task<WebResponseContent> CreateAndSendOutboundTask(string locationCode, string palletCode); /// <summary> /// æå®ä»»å¡åºåº /// </summary> /// <param name="palletCode">æçå·</param> /// <param name="position">ä½ç½®</param> /// <returns></returns> Task<WebResponseContent> CreateAndSendInboundTask(string palletCode, string position); /// <summary> /// 常温补空æçè³å容 /// </summary> /// <param name="taskDTO"></param> Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -1,6 +1,7 @@ using Mapster; using Masuit.Tools; using System.Text.RegularExpressions; using System.Threading.Tasks; using WIDESEA_Core.Const; using WIDESEA_DTO.MOM; using WIDESEA_DTO.WMS; @@ -285,7 +286,7 @@ WebResponseContent content = new WebResponseContent(); try { if (task.TaskType == (int)TaskInboundTypeEnum.InNG) if (task.TaskType == (int)TaskInboundTypeEnum.InNG || task.TaskType == (int)TaskInboundTypeEnum.InQuality) { task.TaskState = (int)TaskInStatusEnum.SC_InFinish; // å建åå²ä»»å¡å®ä¾æ¨¡å @@ -539,6 +540,7 @@ case (int)TaskInboundTypeEnum.Inbound: case (int)TaskInboundTypeEnum.InTray: case (int)TaskInboundTypeEnum.InNG: case (int)TaskInboundTypeEnum.InQuality: LogFactory.GetLog("ä»»å¡å®æ").InfoFormat(true, "å ¥åºä»»å¡", ""); return await CompleteInboundTaskAsync(task); @@ -1325,7 +1327,7 @@ #region éç½®å¼å¸¸å£å ¥åº public async Task<WebResponseContent> CreateAndSendInboundTask(string locationCode, string palletCode, string position) public async Task<WebResponseContent> CreateAndSendInboundTask(string palletCode, string position) { WebResponseContent content = new WebResponseContent(); try @@ -1334,22 +1336,40 @@ var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == palletCode); if (stockInfo == null) { var taskOld = BaseDal.QueryFirst(x => x.PalletCode == palletCode); if (!taskOld.IsNullOrEmpty()) {// å建WMSä»»å¡ WMSTaskDTO taskDTO = new WMSTaskDTO() { TaskNum = taskOld.TaskNum.Value, Grade = 1, PalletCode = taskOld.PalletCode, RoadWay = taskOld.Roadway, SourceAddress = taskOld.CurrentAddress, TargetAddress = taskOld.TargetAddress, TaskState = taskOld.TaskState.Value, Id = 0, TaskType = taskOld.TaskType, }; return content.OK(data: taskDTO); } var area = _areaInfoRepository.QueryFirst(x => x.AreaID == 2); var station = _stationManagerRepository.QueryFirst(x => x.stationChildCode == position); TrayCellsStatusDto trayCells = CreateTrayCellsStatusDto(area, palletCode); content = await GetTrayCellStatusAsync(trayCells); if (!content.Status) return content; ConsoleHelper.WriteErrorLine(content.ToJsonString()); var result = JsonConvert.DeserializeObject<ResultTrayCellsStatus>(content.Data.ToString()); if (!result.Success) { if (result.SerialNos.Count <= 0) if (result.SerialNos.Count > 0) { var location = await GetLocationDistributeAsync(station.Roadway); ConsoleHelper.WriteErrorLine(location.ToJsonString()); // å建æ°ä»»å¡å®ä¾ var task = new Dt_Task { CurrentAddress = locationCode, CurrentAddress = station.stationLocation, Grade = 1, Roadway = station.Roadway, TargetAddress = location.LocationCode, @@ -1358,7 +1378,7 @@ NextAddress = location.LocationCode, OrderNo = null, PalletCode = palletCode, SourceAddress = locationCode, SourceAddress = position, TaskState = (int)TaskInStatusEnum.Line_InFinish, TaskType = (int)TaskInboundTypeEnum.Inbound, TaskNum = await BaseDal.GetTaskNo(), @@ -1373,7 +1393,7 @@ PalletCode = task.PalletCode, RoadWay = task.Roadway, SourceAddress = task.SourceAddress, TargetAddress = task.Roadway, TargetAddress = task.TargetAddress, TaskState = task.TaskState.Value, Id = 0, TaskType = task.TaskType, @@ -1392,7 +1412,6 @@ } else content.Error(result.MOMMessage); } } else { @@ -1690,6 +1709,14 @@ var content = new WebResponseContent(); // è·åç®æ å°ååæ´æ°ä»»å¡ç¶æ input.Position = Regex.Replace(input.Position, @"-(\d+)", ""); if (Convert.ToInt32(input.Position) > 1999) { input.Position = (Convert.ToInt32(input.Position) - 1000).ToString(); } if (task.TaskType == (int)TaskInboundTypeEnum.InNG) { // TODO æ ¹æ®å··éæ¥æ¾å¯¹åºNGå£ï¼ç°å¨é»è®¤å»éç½®å åæºçå¼å¸¸å£è´§ä½å· @@ -1702,7 +1729,7 @@ } else if (task.TaskType == (int)TaskInboundTypeEnum.InQuality) { var stockInfo = _stockInfoRepository.QueryFirst(x => x.PalletCode == input.PalletCode); var stockInfo = await _stockInfoRepository.QueryFirstNavAsync(x => x.PalletCode == input.PalletCode); task.CurrentAddress = input.Position; task.TargetAddress = stockInfo.LocationInfo.LocationCode; task.NextAddress = stockInfo.LocationInfo.LocationCode; Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/RequestInTaskAsync.cs
@@ -44,7 +44,7 @@ //var station = stationManagers.Select(x => x.stationChildCode).ToList(); //// è·åWCSipå°åç¸å ³é ç½® //var wcsIpAddrss = GetWCSIpAddress(); var wcsIpAddrss = GetWCSIpAddress(); //if (wcsIpAddrss == null) //{ // throw new InvalidOperationException("WCS IP æªé ç½®"); Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskController.cs
@@ -146,6 +146,18 @@ } /// <summary> /// éç½®NGå ¥åº /// </summary> /// <param name="locationCode">è´§ä½å·</param> /// <param name="palletCode">æçå·</param> /// <returns></returns> [HttpPost, AllowAnonymous, Route("RequestInBoundTaskNG")] public async Task<WebResponseContent> RequestInBoundTaskNG([FromBody] RequestTaskDto input) { return await Service.CreateAndSendInboundTask(input.PalletCode, input.Position); } /// <summary> /// 常温补空æçè³å容 /// </summary> /// <param name="input">è¯·æ±æ°æ®</param> Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -10,9 +10,9 @@ "MainDB": "DB_WIDESEA", //å½å项ç®ç主åºï¼æå¯¹åºçè¿æ¥å符串çEnabledå¿ é¡»ä¸ºtrue //è¿æ¥å符串 //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=127.0.0.1;Initial Catalog=WIDESEA_WMS2F08;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //è·¨å