Merge branch 'dev' of http://115.159.85.185:8098/r/SuZhouGuanHong/ShanMeiXinNengYuan into dev
| | |
| | | "total_spawned": 135, |
| | | "total_completed": 157, |
| | | "total_failed": 0, |
| | | "last_updated": "2026-04-20T17:02:18.739Z" |
| | | "last_updated": "2026-04-21T06:46:41.255Z" |
| | | } |
| | |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Microsoft.AspNetCore.Authorization; |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc.Filters; |
| | | using Microsoft.Extensions.Hosting; |
| | | using WIDESEAWCS_Core.Authorization; |
| | |
| | | int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt(); |
| | | if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != replaceTokenPath) |
| | | { |
| | | context.HttpContext.Response.Headers.Add("wideseawcs_exp", "1"); |
| | | context.HttpContext.Response.Headers.Append("wideseawcs_exp", "1"); |
| | | } |
| | | } |
| | | } |
| | |
| | | string fileName = GetLogFileName(entry.Source); |
| | | string filePath = Path.Combine(_logFolder, fileName); |
| | | string content = entry.ToFormattedString() + Environment.NewLine; |
| | | ConsoleHelper.WriteInfoLine(content); |
| | | //ConsoleHelper.WriteInfoLine(content); |
| | | File.AppendAllText(filePath, content); |
| | | } |
| | | } |
| | |
| | | public async Task InvokeAsync(HttpContext context) |
| | | { |
| | | |
| | | context.Response.Headers.Add("Access-Control-Expose-Headers", "wideseawcs_exp"); |
| | | context.Response.Headers.Append("Access-Control-Expose-Headers", "wideseawcs_exp"); |
| | | await _next(context); |
| | | } |
| | | } |
| | |
| | | .Enrich.WithProperty("Application", "WCS") |
| | | // 设置Microsoftå½å空é´çæ¥å¿çº§å«ä¸ºInformation |
| | | // è¿æ ·å¯ä»¥åå°Microsoftæ¡æ¶æ¬èº«çè¯¦ç»æ¥å¿ï¼é¿å
è¿å¤çDebugæ¥å¿ |
| | | .MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
| | | .MinimumLevel.Override("Microsoft", LogEventLevel.Debug) |
| | | .WriteTo.Console() // æ·»å æ§å¶å°è¾åºæ¥æ¶å¨ï¼æ¥å¿å°æ¾ç¤ºå¨æ§å¶å°çªå£ä¸ |
| | | // æ·»å æä»¶è¾åºæ¥æ¶å¨ï¼å°æ¥å¿åå
¥æä»¶ç³»ç» |
| | | .WriteTo.File( |
| | |
| | | </ItemGroup> |
| | | |
| | | <ItemGroup> |
| | | <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" /> |
| | | <PackageReference Include="Swashbuckle.AspNetCore" Version="8.0.0" /> |
| | | </ItemGroup> |
| | | |
| | | <ItemGroup> |
| | |
| | | //è·¨å |
| | | "Cors": { |
| | | "PolicyName": "CorsIpAccess", //çç¥åç§° |
| | | "EnableAllIPs": false, //å½ä¸ºtrueæ¶ï¼å¼æ¾ææIPåå¯è®¿é®ã |
| | | "EnableAllIPs": true, //å½ä¸ºtrueæ¶ï¼å¼æ¾ææIPåå¯è®¿é®ã |
| | | // æ¯æå¤ä¸ªåå端å£ï¼æ³¨æç«¯å£å·åä¸è¦å¸¦/ææï¼æ¯å¦localhost:8000/ï¼æ¯éç |
| | | // 注æï¼http://127.0.0.1:1818 å http://localhost:1818 æ¯ä¸ä¸æ ·ç |
| | | "IPs": "http://127.0.0.1:8080,http://localhost:8080,http://localhost:8081" |
| | |
| | | using MapsterMapper; |
| | | using Masuit.Tools; |
| | | using Microsoft.Extensions.Configuration; |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | | using Quartz; |
| | | using Serilog; |
| | | using SqlSugar; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | /// ä»»å¡æå¡ |
| | | /// </summary> |
| | | private readonly ITaskService _taskService; |
| | | |
| | | |
| | | /// <summary> |
| | | /// æºå¨äººä»»å¡æå¡ |
| | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger<CommonConveyorLineNewJob> _logger; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// ç®æ å°åå°è®¾å¤ç±»åçæ å° |
| | |
| | | /// <remarks> |
| | | /// </remarks> |
| | | private static List<string> AddressToDeviceType = new List<string> { "11020", "11028" }; |
| | | |
| | | /// <summary> |
| | | /// æçæ£æ¥ä½ç½®çæè¿æ§è¡æ¶é´ï¼ç¨äº30ç§é´ééå¶ï¼ |
| | | /// </summary> |
| | | private static readonly Dictionary<string, DateTime> _lastPalletCheckTime = new(); |
| | | |
| | | /// <summary> |
| | | /// æé 彿° |
| | |
| | | /// <param name="mapper">对象æ å°å¨</param> |
| | | /// <param name="httpClientHelper">HTTP 客æ·ç«¯å¸®å©ç±»</param> |
| | | /// <param name="logger">æ¥å¿è®°å½å¨</param> |
| | | public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper, ILogger<CommonConveyorLineNewJob> logger, IRobotTaskService robotTaskService) |
| | | public CommonConveyorLineNewJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, HttpClientHelper httpClientHelper, ILogger logger, IRobotTaskService robotTaskService) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | |
| | | // 妿å½å设å¤å¨æ£æ¥åè¡¨ä¸ |
| | | if (checkPalletPositions.Any(x => x.Code == childDeviceCode)) |
| | | { |
| | | // 30ç§é´ééå¶ |
| | | if (_lastPalletCheckTime.TryGetValue(childDeviceCode, out var lastTime) && |
| | | (DateTime.Now - lastTime).TotalSeconds < 30) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | // æ£æ¥è¾éçº¿ç¶æï¼æ¯å¦ææçï¼ |
| | | if (command.CV_State == 2) |
| | | { |
| | |
| | | TargetAddress = childDeviceCode |
| | | }.Serialize()); |
| | | |
| | | _lastPalletCheckTime[childDeviceCode] = DateTime.Now; |
| | | |
| | | // å¦æè¯·æ±æåï¼æ¥æ¶ WMS è¿åçä»»å¡ |
| | | if (responseResult.IsSuccess && responseResult.Data.Status) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | #endregion æ£æµæ¯å¦éè¦ç©ºæç |
| | | |
| | | // ========== æ£æ¥ PLC_STB æ å¿ ========== |
| | | // åªæå½ PLC_STB 为 1 æ¶æå¤çä»»å¡ |
| | |
| | | RobotTargetAddressLineCode = childDeviceCode, |
| | | RobotTaskNum = num, // çæä»»å¡å· |
| | | RobotDispatchertime = DateTime.Now, |
| | | |
| | | }; |
| | | if (_robotTaskService.AddData(robotTask).Status) |
| | | { |
| | |
| | | using MapsterMapper; |
| | | using Microsoft.Extensions.Logging; |
| | | using Serilog; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | |
| | | Dt_Task? task = _taskFilter.QueryExecutingTask(command.TaskNo, childDeviceCode); |
| | | if (task != null) |
| | | { |
| | | |
| | | // æ´æ°ä»»å¡ç¶æå°ä¸ä¸é¶æ®µï¼é常æ¯å®æï¼ |
| | | if (_taskService.UpdateTaskStatusToNext(task).Status) |
| | | { |
| | |
| | | conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, (short)1, childDeviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "ConveyorLineInFinishï¼å
¥åºå®æï¼ä»»å¡å·: {TaskNum}ï¼å设å¤: {ChildDeviceCode}", $"å
¥åºå®æï¼ä»»å¡å·: {task.TaskNum}", conveyorLine.DeviceCode, task.TaskNum, childDeviceCode); |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using Serilog; |
| | | using WIDESEAWCS_QuartzJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | |
| | | if (device == null) |
| | | { |
| | | // è®¾å¤æªæ¾å°æ¶è®°å½è°è¯æ¥å¿ï¼æ¹ä¾¿ææ¥é
ç½®é®é¢ |
| | | _logger.LogDebug("FindDeviceï¼æªæ¾å° {DeviceName}", deviceName); |
| | | _logger.Debug("FindDeviceï¼æªæ¾å° {DeviceName}", deviceName); |
| | | } |
| | | return device; // å¯è½ä¸º nullï¼ç±è°ç¨æ¹è´è´£ null æ£æ¥ |
| | | } |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using Serilog; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Serilog; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | |
| | | namespace WIDESEAWCS_Tasks; |
| | |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogError(ILogger logger, Exception ex, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogError(ex, loggerMessage, args); |
| | | logger.Error(ex, loggerMessage, args); |
| | | QuartzLogger.Error(quartzMessage, deviceCode, ex); |
| | | } |
| | | |
| | |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogError(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogError(loggerMessage, args); |
| | | logger.Error(loggerMessage, args); |
| | | QuartzLogger.Error(quartzMessage, deviceCode); |
| | | } |
| | | |
| | |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogInfo(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogInformation(loggerMessage, args); |
| | | logger.Information(loggerMessage, args); |
| | | QuartzLogger.Info(quartzMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½ä¿¡æ¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | public static void LogInfo(ILogger logger, string loggerMessage, string deviceCode) |
| | | { |
| | | logger.Information(loggerMessage); |
| | | QuartzLogger.Info(loggerMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogWarn(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogWarning(loggerMessage, args); |
| | | logger.Warning(loggerMessage, args); |
| | | QuartzLogger.Warn(quartzMessage, deviceCode); |
| | | } |
| | | |
| | |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogDebug(ILogger logger, string loggerMessage, string quartzMessage, string deviceCode, params object[] args) |
| | | { |
| | | logger.LogDebug(loggerMessage, args); |
| | | logger.Debug(loggerMessage, args); |
| | | QuartzLogger.Debug(quartzMessage, deviceCode); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è®°å½è°è¯æ¥å¿ |
| | | /// </summary> |
| | | /// <param name="logger">ILogger å®ä¾</param> |
| | | /// <param name="loggerMessage">ILogger çç»æåæ¥å¿æ¨¡æ¿ï¼æ¯æå ä½ç¬¦ï¼</param> |
| | | /// <param name="quartzMessage">QuartzLogger çæ¥å¿æ¶æ¯</param> |
| | | /// <param name="deviceCode">设å¤ç¼ç </param> |
| | | /// <param name="args">ILogger ç»æåæ¥å¿çåæ°</param> |
| | | public static void LogDebug(ILogger logger, string loggerMessage, string deviceCode) |
| | | { |
| | | logger.Debug(loggerMessage); |
| | | QuartzLogger.Debug(loggerMessage, deviceCode); |
| | | } |
| | | } |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | //using Microsoft.Extensions.Logging; |
| | | using Quartz; |
| | | using Serilog; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Common.Constants; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | |
| | | using WIDESEAWCS_QuartzJob.Service; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane; |
| | | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; |
| | | using WIDESEAWCS_Common.Constants; |
| | | using WIDESEAWCS_Tasks.StackerCraneJob; |
| | | |
| | | namespace WIDESEAWCS_Tasks |
| | |
| | | /// <summary> |
| | | /// æ¥å¿è®°å½å¨ |
| | | /// </summary> |
| | | private readonly ILogger<CommonStackerCraneJob> _logger; |
| | | private readonly ILogger _logger; |
| | | |
| | | /// <summary> |
| | | /// å åæºè®¾å¤ç¼ç |
| | |
| | | ITaskRepository taskRepository, |
| | | IRouterService routerService, |
| | | HttpClientHelper httpClientHelper, |
| | | ILogger<CommonStackerCraneJob> logger) |
| | | ILogger logger) |
| | | { |
| | | _taskService = taskService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | |
| | | { |
| | | try |
| | | { |
| | | //QuartzLogger.Info($"CommonStackerCraneJob Executeï¼å¼å§æ§è¡å åæºä»»å¡è°åº¦ ã{DateTime.Now.ToString("F")}ã", "CommonStackerCraneJob Execute "); |
| | | // ä» JobDataMap è·åå åæºè®¾å¤åæ° |
| | | bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); |
| | | if (!flag || value is not CommonStackerCrane commonStackerCrane) |
| | | { |
| | | _logger.Information("Executeï¼åæ°æ æï¼æªæ¾å° JobParams æç±»åä¸å¹é
"); |
| | | // åæ°æ æï¼ç´æ¥è¿å |
| | | QuartzLogHelper.LogWarn(_logger, "Executeï¼åæ°æ æ", "Executeï¼åæ°æ æ", "CommonStackerCraneJob"); |
| | | return Task.CompletedTask; |
| | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | |
| | | |
| | | // ========== æå»ºå½ä»¤ ========== |
| | | // å½ä»¤æå»ºä¸æ²å°ä¸ç¨æå»ºå¨ |
| | | object? stackerCraneTaskCommand = _commandBuilder.ConvertToStackerCraneTaskCommand(task); |
| | |
| | | // è®°å½å¼å¸¸ |
| | | QuartzLogHelper.LogError(_logger, ex, "Executeï¼æ§è¡å¼å¸¸ï¼è®¾å¤: {DeviceCode}", $"æ§è¡å¼å¸¸: {ex.Message}", _deviceCode, _deviceCode); |
| | | } |
| | | finally |
| | | { |
| | | QuartzLogHelper.LogInfo(_logger, $"CommonStackerCraneJob Executeï¼å åæºä»»å¡è°åº¦æ§è¡å®æ ã{DateTime.Now.ToString("F")}ã", _deviceCode); |
| | | } |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using System; |
| | | using Serilog; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEAWCS_Common.Constants; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob.Models; |
| | |
| | | using Microsoft.Extensions.Logging; |
| | | using Newtonsoft.Json; |
| | | using Serilog; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using WIDESEA_Core; |
| | | using WIDESEAWCS_Common.Constants; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.LogHelper; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_QuartzJob; |
| | |
| | | Dt_Task? candidateTask; |
| | | var deviceCode = commonStackerCrane.DeviceCode; |
| | | |
| | | //_logger.LogInformation("SelectTaskï¼å¼å§éæ©ä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {LastTaskType}", deviceCode, commonStackerCrane.LastTaskType); |
| | | //QuartzLogger.Info($"å¼å§éæ©ä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {commonStackerCrane.LastTaskType}", deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, $"å¼å§éæ©ä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ä¸ä¸ä»»å¡ç±»å: {commonStackerCrane.LastTaskType}",commonStackerCrane.DeviceName); |
| | | |
| | | // æ ¹æ®ä¸ä¸ä»»å¡ç±»åå³å®æ¥è¯¢çç¥ |
| | | if (commonStackerCrane.LastTaskType == null || commonStackerCrane.LastTaskType == TaskRelocationTypeEnum.Relocation.GetHashCode()) |
| | | { |
| | | // 没æä¸ä¸ä»»å¡ç±»åï¼æ¥è¯¢æ®éä»»å¡ |
| | | candidateTask = _taskService.QueryStackerCraneTask(deviceCode); |
| | | //QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"æ¥è¯¢æ®éä»»å¡ï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName); |
| | | } |
| | | else if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | |
| | | candidateTask = _taskService.QueryStackerCraneInTask(deviceCode); |
| | | // å¦ææ²¡æå
¥åºä»»å¡ï¼åæ¥ä¸ä¸åºåºä»»å¡ |
| | | candidateTask ??= _taskService.QueryStackerCraneOutTask(deviceCode); |
| | | //QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"åºåºåä¼å
æ¥å
¥åºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName); |
| | | } |
| | | else |
| | | { |
| | | // ä¸ä¸ä»»å¡æ¯å
¥åºï¼éåºåºï¼ï¼ä¼å
æ¥åºåºä»»å¡ |
| | | candidateTask = _taskService.QueryStackerCraneOutTask(deviceCode); |
| | | //QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {DeviceCode}ï¼ç»æ: {TaskNum}", $"å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", deviceCode, deviceCode, candidateTask?.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"å
¥åºåä¼å
æ¥åºåºï¼è®¾å¤: {deviceCode}ï¼ç»æ: {candidateTask?.TaskNum}", commonStackerCrane.DeviceName); |
| | | } |
| | | |
| | | // å¦ææ²¡æåéä»»å¡ï¼è¿å null |
| | | if (candidateTask == null) |
| | | { |
| | | //QuartzLogHelper.LogDebug(_logger, "SelectTaskï¼æ²¡æåéä»»å¡ï¼è®¾å¤: {DeviceCode}", $"没æåéä»»å¡ï¼è®¾å¤: {deviceCode}", deviceCode, deviceCode); |
| | | QuartzLogHelper.LogDebug(_logger, $"没æåéä»»å¡ï¼è®¾å¤: {deviceCode}", commonStackerCrane.DeviceName); |
| | | return null; |
| | | } |
| | | |
| | | // 妿䏿¯åºåºä»»å¡ï¼ç´æ¥è¿å |
| | | if (candidateTask.TaskType.GetTaskTypeGroup() != TaskTypeGroup.OutbondGroup) |
| | | { |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}ï¼ä»»å¡ç±»å: {TaskType}", $"éä¸éåºåºä»»å¡ï¼ä»»å¡å·: {candidateTask.TaskNum}ï¼ä»»å¡ç±»å: {candidateTask.TaskType}", deviceCode, deviceCode, candidateTask.TaskNum, candidateTask.TaskType); |
| | | QuartzLogHelper.LogDebug(_logger, $"éä¸éåºåºä»»å¡ï¼ä»»å¡å·: {candidateTask.TaskNum}ï¼ä»»å¡ç±»å: {candidateTask.TaskType}", commonStackerCrane.DeviceName); |
| | | return candidateTask; |
| | | } |
| | | |
| | |
| | | Dt_Task? selectedTask = TrySelectOutboundTask(candidateTask); |
| | | if (selectedTask != null) |
| | | { |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸åºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"éä¸åºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"éä¸åºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", commonStackerCrane.DeviceName); |
| | | return selectedTask; |
| | | } |
| | | |
| | |
| | | selectedTask = TrySelectOutboundTask(alternativeTask); |
| | | if (selectedTask != null) |
| | | { |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼éä¸å¤éåºåºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"éä¸å¤éåºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", deviceCode, deviceCode, selectedTask.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"éä¸å¤éåºåºä»»å¡ï¼ä»»å¡å·: {selectedTask.TaskNum}", commonStackerCrane.DeviceName); |
| | | return selectedTask; |
| | | } |
| | | } |
| | | |
| | | // 没æå¯ç¨åºåºä»»å¡ï¼å°è¯è¿åå
¥åºä»»å¡ |
| | | var inboundTask = _taskService.QueryStackerCraneInTask(deviceCode); |
| | | QuartzLogHelper.LogInfo(_logger, "SelectTaskï¼è¿åå
¥åºä»»å¡ï¼è®¾å¤: {DeviceCode}ï¼ä»»å¡å·: {TaskNum}", $"è¿åå
¥åºä»»å¡ï¼ä»»å¡å·: {inboundTask?.TaskNum}", deviceCode, deviceCode, inboundTask?.TaskNum); |
| | | QuartzLogHelper.LogDebug(_logger, $"è¿åå
¥åºä»»å¡ï¼ä»»å¡å·: {inboundTask?.TaskNum}", commonStackerCrane.DeviceName); |
| | | return inboundTask; |
| | | } |
| | | |
| | |
| | | let loadingInstance; |
| | | let loadingStatus = false; |
| | | if (process.env.NODE_ENV == 'development') { |
| | | axios.defaults.baseURL = 'http://127.0.0.1:9291/'; |
| | | axios.defaults.baseURL = window.webConfig.webApiProduction; |
| | | } |
| | | else if (process.env.NODE_ENV == 'debug') { |
| | | axios.defaults.baseURL = window.webConfig.webApiBaseUrl; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <vol-box |
| | | v-model="showDetialBox" |
| | | :lazy="true" |
| | | width="400px" |
| | | :padding="15" |
| | | title="éæ©æºæ¢°æ" |
| | | > |
| | | <div> |
| | | <el-form> |
| | | <el-form-item required label="æºæ¢°æï¼"> |
| | | <el-select v-model="selectedRobot" placeholder="è¯·éæ©æºæ¢°æ" style="width: 100%"> |
| | | <el-option |
| | | v-for="item in robotList" |
| | | :key="item.robotCode" |
| | | :label="item.robotName" |
| | | :value="item.robotCode" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <template #footer> |
| | | <el-button type="primary" size="small" @click="submit">确认</el-button> |
| | | <el-button type="danger" size="small" @click="close">å
³é</el-button> |
| | | </template> |
| | | </vol-box> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import VolBox from "@/components/basic/VolBox.vue"; |
| | | export default { |
| | | components: { VolBox }, |
| | | data() { |
| | | return { |
| | | showDetialBox: false, |
| | | robotList: [ |
| | | { robotCode: '注液ç»çæºæ¢°æ', robotName: '注液ç»çæºæ¢°æ' }, |
| | | { robotCode: '髿¸©æ¢çæºæ¢°æ', robotName: '髿¸©æ¢çæºæ¢°æ' }, |
| | | { robotCode: 'åææ¢çæºæ¢°æ', robotName: 'åææ¢çæºæ¢°æ' }, |
| | | { robotCode: 'æçæºæ¢°æ', robotName: 'æçæºæ¢°æ' }, |
| | | { robotCode: 'æåç»çæºæ¢°æ', robotName: 'æåç»çæºæ¢°æ' } |
| | | ], |
| | | selectedRobot: '', |
| | | currentRow: null, |
| | | actionType: null // 'bind' or 'unbind' |
| | | }; |
| | | }, |
| | | methods: { |
| | | open(action, row) { |
| | | this.actionType = action; |
| | | this.currentRow = row; |
| | | this.selectedRobot = ''; |
| | | this.showDetialBox = true; |
| | | }, |
| | | close() { |
| | | this.showDetialBox = false; |
| | | }, |
| | | async submit() { |
| | | if (!this.selectedRobot) { |
| | | return this.$message.error("è¯·éæ©æºæ¢°æ"); |
| | | } |
| | | |
| | | this.showDetialBox = false; |
| | | |
| | | try { |
| | | if (this.actionType === 'bind') { |
| | | // ç»ç确认 |
| | | await this.$confirm( |
| | | `确认æ§è¡æçç»çæä½ï¼\næçç¼å·ï¼${this.currentRow.palletCode}\næºæ¢°æï¼${this.selectedRobot}`, |
| | | "ç»ç确认", |
| | | { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | } |
| | | ); |
| | | |
| | | const result = await this.http.post("/api/StockInfoDetail/BindContainer", { |
| | | palletCode: this.currentRow.palletCode, |
| | | robotCode: this.selectedRobot |
| | | }, "æ£å¨è°ç¨MESæ¥å£..."); |
| | | |
| | | if (result.status) { |
| | | this.$Message.success(result.message || "æçç»çæå"); |
| | | this.$parent.$refs.table.load(); |
| | | } else { |
| | | this.$error(result.message || "æçç»ç失败"); |
| | | } |
| | | } else if (this.actionType === 'unbind') { |
| | | // æç确认 |
| | | await this.$confirm( |
| | | `确认æ§è¡æçæçæä½ï¼\næçç¼å·ï¼${this.currentRow.palletCode}\næºæ¢°æï¼${this.selectedRobot}`, |
| | | "æç确认", |
| | | { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | } |
| | | ); |
| | | |
| | | const result = await this.http.post("/api/StockInfoDetail/UnbindContainer", { |
| | | palletCode: this.currentRow.palletCode, |
| | | robotCode: this.selectedRobot |
| | | }, "æ£å¨è°ç¨MESæ¥å£..."); |
| | | |
| | | if (result.status) { |
| | | this.$Message.success(result.message || "æçæçæå"); |
| | | this.$parent.$refs.table.load(); |
| | | } else { |
| | | this.$error(result.message || "æçæç失败"); |
| | | } |
| | | } |
| | | } catch (error) { |
| | | if (error !== "cancel") { |
| | | this.$error(error.message || "ç½ç»é误ï¼è¯·ç¨åéè¯"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè
éæ°é
ç½®çæç代ç |
| | | import RobotSelect from './extend/RobotSelect.vue'; |
| | | |
| | | let extension = { |
| | | components: { |
| | | //æ¥è¯¢ç颿©å±ç»ä»¶ |
| | | gridHeader: "", |
| | | gridBody: "", |
| | | gridFooter: "", |
| | | gridHeader: '', |
| | | gridBody: RobotSelect, |
| | | gridFooter: '', |
| | | //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ |
| | | modelHeader: "", |
| | | modelBody: "", |
| | |
| | | <el-button |
| | | type="primary" |
| | | size="small" |
| | | onClick={($e) => { |
| | | this.handleInbound(row); |
| | | }} |
| | | > |
| | | è¿ç« |
| | | </el-button> |
| | | onClick={($e) => { this.handleBind(row); }} |
| | | >ç»å®</el-button> |
| | | <el-button |
| | | type="primary" |
| | | size="small" |
| | | onClick={($e) => { this.handleInbound(row); }} |
| | | >è¿ç«</el-button> |
| | | <el-button |
| | | type="success" |
| | | size="small" |
| | | style="margin-left: 8px" |
| | | onClick={($e) => { |
| | | this.handleOutbound(row); |
| | | }} |
| | | > |
| | | åºç« |
| | | </el-button> |
| | | onClick={($e) => { this.handleOutbound(row); }} |
| | | >åºç«</el-button> |
| | | <el-button |
| | | type="success" |
| | | size="small" |
| | | style="margin-left: 8px" |
| | | onClick={($e) => { this.handleUnbind(row); }} |
| | | >è§£ç»</el-button> |
| | | </div> |
| | | ); |
| | | }, |
| | | }); |
| | | }, |
| | | |
| | | // æçç»çæä½ |
| | | handleBind(row) { |
| | | this.$refs.gridBody.open('bind', row); |
| | | }, |
| | | |
| | | // æçè¿ç«æä½ |
| | |
| | | } |
| | | }, |
| | | |
| | | // æçæçæä½ |
| | | handleUnbind(row) { |
| | | this.$refs.gridBody.open('unbind', row); |
| | | }, |
| | | |
| | | onInited() { |
| | | // æ¡æ¶åå§åé
ç½®å |
| | | }, |
| | |
| | | this.showJsonDetail(row, 'request'); |
| | | } else if (column.property === 'responseJson' && row.responseJson) { |
| | | this.showJsonDetail(row, 'response'); |
| | | } else if (column.property === 'errorMessage' && row.errorMessage) { |
| | | this.showJsonDetail(row, 'errorMessage'); |
| | | } |
| | | }, |
| | | |
| | | // æ¾ç¤º JSON 详æ
æ½å± |
| | | showJsonDetail(row, type = 'request') { |
| | | const jsonContent = type === 'request' ? row.requestJson : row.responseJson; |
| | | const title = type === 'request' ? 'ð è¯·æ± JSON' : 'ð¥ ååº JSON'; |
| | | const jsonContent = type === 'request' ? row.requestJson : type === 'response' ? row.responseJson : row.errorMessage; |
| | | const title = type === 'request' ? 'ð è¯·æ± JSON' : type === 'response' ? 'ð è¯·æ± JSON': 'ð¥ éè¯¯æ¶æ¯'; |
| | | |
| | | // è§£æ JSON 对象ï¼è§£æå¤±è´¥åä¿çåå§å符串 |
| | | let jsonData; |
| | |
| | | return `<span style="color: #409EFF; cursor: pointer;">${preview}</span>`; |
| | | } |
| | | }, |
| | | { field: "errorMessage", title: "é误信æ¯", width: 250 }, |
| | | { |
| | | field: "errorMessage", |
| | | title: "é误信æ¯", |
| | | width: 250, |
| | | |
| | | formatter: (row) => { |
| | | if (!row.responseJson) return '-'; |
| | | const preview = row.responseJson.length > 50 |
| | | ? row.responseJson.substring(0, 50) + '...' |
| | | : row.responseJson; |
| | | return `<span style="color: #409EFF; cursor: pointer;">${preview}</span>`; |
| | | } |
| | | }, |
| | | { field: "elapsedMs", title: "èæ¶(ms)", width: 100, sortable: true }, |
| | | { field: "createDate", title: "è°ç¨æ¶é´", width: 160, sortable: true }, |
| | | { field: "creator", title: "æä½äºº", width: 100 } |
| | |
| | | }; |
| | | } |
| | | |
| | | private HttpRequestConfig BuildConfig(string token) |
| | | public HttpRequestConfig BuildConfig(string token) |
| | | { |
| | | return new HttpRequestConfig |
| | | { |
| | |
| | | int ExpMinutes = AppSettings.Get("ExpMinutes").ObjToInt(); |
| | | if ((expDate.GetValueOrDefault() - DateTime.Now).TotalMinutes < ExpMinutes / 3 && context.HttpContext.Request.Path != ReplaceTokenPath) |
| | | { |
| | | context.HttpContext.Response.Headers.Add("widesea_exp", "1"); |
| | | context.HttpContext.Response.Headers.Append("widesea_exp", "1"); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | public async Task InvokeAsync(HttpContext context) |
| | | { |
| | | context.Response.Headers.Add("Access-Control-Expose-Headers", "widesea_exp"); |
| | | context.Response.Headers.Append("Access-Control-Expose-Headers", "widesea_exp"); |
| | | await _next(context); |
| | | } |
| | | } |
| | |
| | | public List<string> SfcList { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 设å¤åç§° |
| | | /// </summary> |
| | | public string DeviceName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// ä½ç½®ä¿¡æ¯ |
| | | /// </summary> |
| | | public string Location { get; set; } |
| | |
| | | public string PalletCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 设å¤åç§° |
| | | /// </summary> |
| | | public string DeviceName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// çµè¯ç å表 |
| | | /// </summary> |
| | | public List<string> SfcList { get; set; } |
| | |
| | | /// æçåºç«ï¼æ¯æå¨æTokenï¼ |
| | | /// </summary> |
| | | HttpResponseResult<MesResponse> OutboundInContainer(OutboundInContainerRequest request, string token); |
| | | |
| | | /// <summary> |
| | | /// 请æ±å¤´é
ç½® |
| | | /// </summary> |
| | | /// <param name="token"> 请æ±Token</param> |
| | | /// <returns></returns> |
| | | HttpRequestConfig BuildConfig(string token); |
| | | } |
| | | } |
| | |
| | | MesUploadStatusEnum successStatus, |
| | | string apiType, |
| | | string requestJson, |
| | | Func<(bool isSuccess, string responseJson, string errorMessage)> mesCall, |
| | | Func<(bool isSuccess, string responseJson, string errorMessage, string httpRequest)> mesCall, |
| | | string creator = "System"); |
| | | } |
| | | } |
| | |
| | | using Newtonsoft.Json.Linq; |
| | | using System.Diagnostics; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_IStockService; |
| | | |
| | | namespace WIDESEA_StockService |
| | | { |
| | |
| | | MesUploadStatusEnum successStatus, |
| | | string apiType, |
| | | string requestJson, |
| | | Func<(bool isSuccess, string responseJson, string errorMessage)> mesCall, |
| | | Func<(bool isSuccess, string responseJson, string errorMessage, string httpRequest)> mesCall, |
| | | string creator = "System") |
| | | { |
| | | _ = Task.Run(async () => |
| | |
| | | var stopwatch = Stopwatch.StartNew(); |
| | | try |
| | | { |
| | | var (isSuccess, responseJson, errorMessage) = mesCall(); |
| | | var (isSuccess, responseJson, errorMessage, httpRequest) = mesCall(); |
| | | stopwatch.Stop(); |
| | | |
| | | // 奿°=æåï¼å¶æ°=失败 |
| | | int status = isSuccess ? (int)successStatus : (int)successStatus + 1; |
| | | await _stockInfoService.UpdateMesUploadStatusAsync(palletCode, status); |
| | | |
| | | requestJson = MergeJsonObjects(requestJson, httpRequest); |
| | | |
| | | await LogAsync(palletCode, apiType, requestJson, responseJson, |
| | | stopwatch.ElapsedMilliseconds, isSuccess, errorMessage, creator); |
| | |
| | | // æ¥å¿è®°å½å¤±è´¥ä¸å½±å主æµç¨ |
| | | } |
| | | } |
| | | |
| | | public static string MergeJsonObjects(string json1, string json2) |
| | | { |
| | | var obj1 = JObject.Parse(json1); |
| | | var obj2 = JObject.Parse(json2); |
| | | obj1.Merge(obj2, new JsonMergeSettings |
| | | { |
| | | MergeArrayHandling = MergeArrayHandling.Union // æ°ç»åå¹¶æ¹å¼ï¼å¯æéä¿®æ¹ |
| | | }); |
| | | return obj1.ToString(); |
| | | } |
| | | } |
| | | } |
| | |
| | | return ( |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }); |
| | | |
| | |
| | | return ( |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }); |
| | | |
| | |
| | | return ( |
| | | result?.Data?.IsSuccess ?? false, |
| | | JsonConvert.SerializeObject(result), |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }); |
| | | |
| | |
| | | return ( |
| | | result?.Data?.IsSuccess ?? false, |
| | | Newtonsoft.Json.JsonConvert.SerializeObject(result), |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }); |
| | | |
| | |
| | | using WIDESEA_Model.Models; |
| | | using WIDESEA_Common.Constants; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core.Helper; |
| | | |
| | | namespace WIDESEA_WMSServer.Controllers.Stock |
| | | { |
| | |
| | | ? _mesService.InboundInContainer(mesRequest) |
| | | : _mesService.InboundInContainer(mesRequest, token); |
| | | return ( |
| | | result?.IsSuccess ?? false, |
| | | result.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }, |
| | | App.User.UserName); |
| | |
| | | ? _mesService.OutboundInContainer(mesRequest) |
| | | : _mesService.OutboundInContainer(mesRequest, token); |
| | | return ( |
| | | result?.IsSuccess ?? false, |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }, |
| | | App.User.UserName); |
| | |
| | | using Microsoft.AspNetCore.Http; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_ISystemService; |
| | | using WIDESEA_Model.Models; |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using WIDESEA_Common.Constants; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.BaseController; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.MES; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_IStockService; |
| | | using WIDESEA_ISystemService; |
| | | using WIDESEA_Model.Models; |
| | | |
| | | namespace WIDESEA_WMSServer.Controllers.Stock |
| | | { |
| | |
| | | |
| | | try |
| | | { |
| | | // 1. åæ°éªè¯ |
| | | if (dto.SfcList == null || !dto.SfcList.Any()) |
| | | { |
| | | return response.Error("çµè¯ç å表ä¸è½ä¸ºç©º"); |
| | | } |
| | | //// 1. åæ°éªè¯ |
| | | //if (dto.SfcList == null || !dto.SfcList.Any()) |
| | | //{ |
| | | // return response.Error("çµè¯ç å表ä¸è½ä¸ºç©º"); |
| | | //} |
| | | |
| | | // 2. éªè¯çµè¯ç¶æï¼é'å·²éå®'ç¶æå
许ç»å®ï¼ |
| | | var stockDetail = await Service.Repository.QueryFirstAsync(x => dto.SfcList.Contains(x.SerialNumber)); |
| | | if (stockDetail != null && stockDetail.Status == 99) |
| | | { |
| | | return response.Error("å½ååºåæç»å
å«å·²éå®ç¶æï¼ä¸å
许æ§è¡ç»å®æä½"); |
| | | } |
| | | var stockInfo = await _stockInfoService.Repository.QueryFirstAsync(x => stockDetail.StockId == x.Id); |
| | | //var stockDetail = await Service.Repository.QueryFirstAsync(x => dto.SfcList.Contains(x.SerialNumber)); |
| | | //if (stockDetail != null && stockDetail.Status == 99) |
| | | //{ |
| | | // return response.Error("å½ååºåæç»å
å«å·²éå®ç¶æï¼ä¸å
许æ§è¡ç»å®æä½"); |
| | | //} |
| | | var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => x.PalletCode == dto.PalletCode); |
| | | |
| | | // 3. 卿è·åMESåè¯ |
| | | var mesConfig = _mesDeviceConfigService.GetByDeviceName("ç»çæºæ¢°æ"); |
| | | var mesConfig = _mesDeviceConfigService.GetByDeviceName(dto.DeviceName); |
| | | string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE; |
| | | string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE; |
| | | string token = mesConfig?.Token; |
| | |
| | | ResourceCode = resourceCode, |
| | | LocalTime = DateTime.Now, |
| | | ContainerCode = stockInfo.PalletCode, |
| | | ContainerSfcList = dto.SfcList.Select(sfc => new ContainerSfcItem |
| | | ContainerSfcList = stockInfo.Details.Select(sfc => new ContainerSfcItem |
| | | { |
| | | Sfc = sfc, |
| | | Location = dto.Location ?? "" |
| | | Sfc = sfc.SerialNumber, |
| | | Location = sfc.InboundOrderRowNo.ToString() ?? "" |
| | | }).ToList(), |
| | | OperationType = dto.OperationType |
| | | }; |
| | |
| | | ? _mesService.BindContainer(mesRequest) |
| | | : _mesService.BindContainer(mesRequest, token); |
| | | return ( |
| | | result?.IsSuccess ?? false, |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }, |
| | | App.User.UserName); |
| | |
| | | try |
| | | { |
| | | // 1. åæ°éªè¯ |
| | | if (dto.SfcList == null || !dto.SfcList.Any()) |
| | | { |
| | | return response.Error("çµè¯ç å表ä¸è½ä¸ºç©º"); |
| | | } |
| | | //if (dto.SfcList == null || !dto.SfcList.Any()) |
| | | //{ |
| | | // return response.Error("çµè¯ç å表ä¸è½ä¸ºç©º"); |
| | | //} |
| | | |
| | | // 2. éªè¯çµè¯ç¶æï¼é'å·²éå®'ç¶æå
许解ç»ï¼ |
| | | var stockDetail = await Service.Repository.QueryFirstAsync(x => dto.SfcList.Contains(x.SerialNumber)); |
| | | if (stockDetail != null && stockDetail.Status == 99) |
| | | { |
| | | return response.Error("å½ååºåæç»å
å«å·²éå®ç¶æï¼ä¸å
许æ§è¡è§£ç»æä½"); |
| | | } |
| | | var stockInfo = await _stockInfoService.Repository.QueryFirstAsync(x => stockDetail.StockId == x.Id); |
| | | //// 2. éªè¯çµè¯ç¶æï¼é'å·²éå®'ç¶æå
许解ç»ï¼ |
| | | //var stockDetail = await Service.Repository.QueryFirstAsync(x => dto.SfcList.Contains(x.SerialNumber)); |
| | | //if (stockDetail != null && stockDetail.Status == 99) |
| | | //{ |
| | | // return response.Error("å½ååºåæç»å
å«å·²éå®ç¶æï¼ä¸å
许æ§è¡è§£ç»æä½"); |
| | | //} |
| | | var stockInfo = await _stockInfoService.Repository.QueryDataNavFirstAsync(x => dto.PalletCode == x.PalletCode); |
| | | |
| | | // 3. 卿è·åMESåè¯ |
| | | var mesConfig = _mesDeviceConfigService.GetByDeviceName("ç»çæºæ¢°æ"); |
| | | var mesConfig = _mesDeviceConfigService.GetByDeviceName(dto.DeviceName); |
| | | string equipmentCode = mesConfig?.EquipmentCode ?? StockConstants.MES_EQUIPMENT_CODE; |
| | | string resourceCode = mesConfig?.ResourceCode ?? StockConstants.MES_RESOURCE_CODE; |
| | | string token = mesConfig?.Token; |
| | |
| | | ResourceCode = resourceCode, |
| | | LocalTime = DateTime.Now, |
| | | ContainCode = stockInfo.PalletCode, |
| | | SfcList = dto.SfcList |
| | | SfcList = stockInfo.Details.Select(x => x.SerialNumber).ToList(), |
| | | }; |
| | | |
| | | string requestJson = System.Text.Json.JsonSerializer.Serialize(mesRequest); |
| | |
| | | ? _mesService.UnBindContainer(mesRequest) |
| | | : _mesService.UnBindContainer(mesRequest, token); |
| | | return ( |
| | | result?.IsSuccess ?? false, |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(token ?? string.Empty).ToJson() |
| | | ); |
| | | }, |
| | | App.User.UserName); |
| | |
| | | { |
| | | var result = _mesService.ContainerNgReport(mesRequest); |
| | | return ( |
| | | result?.IsSuccess ?? false, |
| | | result?.Data?.IsSuccess ?? false, |
| | | System.Text.Json.JsonSerializer.Serialize(result), |
| | | result?.ErrorMessage ?? "æªç¥é误" |
| | | result?.Data?.Msg ?? result?.ErrorMessage ?? "æªç¥é误", |
| | | _mesService.BuildConfig(mesConfig?.Token ?? string.Empty).ToJson() |
| | | ); |
| | | }, |
| | | App.User.UserName); |