Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine_After.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,333 @@ #region << ç æ¬ 注 é >> /*---------------------------------------------------------------- * å½å空é´ï¼WIDESEAWCS_QuartzJob * å建è ï¼è¡ç«¥åº * å建æ¶é´ï¼2024/8/2 16:13:36 * çæ¬ï¼V1.0.0 * æè¿°ï¼ä¸è¬è¾é线å®ç°ç±» * * ---------------------------------------------------------------- * ä¿®æ¹äººï¼ * ä¿®æ¹æ¶é´ï¼ * çæ¬ï¼V1.0.1 * ä¿®æ¹è¯´æï¼ * *----------------------------------------------------------------*/ #endregion << ç æ¬ 注 é >> using HslCommunication; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Communicator; using WIDESEAWCS_QuartzJob.ConveyorLine.Enum; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; namespace WIDESEAWCS_QuartzJob { [Description("è¾é线")] public class CommonConveyorLine_After : IConveyorLine { #region Private Member /// <summary> /// å åæºé讯对象 /// </summary> private readonly BaseCommunicator _communicator; /// <summary> /// å åæºåè®®ä¿¡æ¯ /// </summary> private readonly List<DeviceProDTO> _deviceProDTOs; /// <summary> /// å åæºåè®®æç»ä¿¡æ¯ /// </summary> private readonly List<DeviceProtocolDetailDTO> _deviceProtocolDetailDTOs; /// <summary> /// 设å¤ç¼å· /// </summary> public readonly string _deviceCode; /// <summary> /// 设å¤åç§° /// </summary> public readonly string _deviceName; private bool _heartStatr = true; private bool _isConnected = true; #endregion #region Public Member /// <summary> /// è¾é线é讯对象 /// </summary> public BaseCommunicator Communicator => _communicator; /// <summary> /// è¾é线åè®®ä¿¡æ¯ /// </summary> public List<DeviceProDTO> DeviceProDTOs => _deviceProDTOs; /// <summary> /// è¾é线åè®®æç»ä¿¡æ¯ /// </summary> public List<DeviceProtocolDetailDTO> DeviceProtocolDetailDTOs => _deviceProtocolDetailDTOs; /// <summary> /// 设å¤ç¼å· /// </summary> public string DeviceCode => _deviceCode; /// <summary> /// 设å¤åç§° /// </summary> public string DeviceName => _deviceName; /// <summary> /// æ¯å¦ææ é /// </summary> public bool IsFault => false; /// <summary> /// é讯æ¯å¦å·²è¿æ¥ /// </summary> public bool IsConnected => Communicator.IsConnected && _isConnected; /// <summary> /// 设å¤ç¶æ /// </summary> public DeviceStatus Status => DeviceStatus.Offline; #endregion #region Constructor Function /// <summary> /// æé 彿° /// </summary> /// <param name="communicator">å åæºé讯对象</param> /// <param name="deviceProDTOs">å åæºå议信æ¯</param> /// <param name="deviceProtocolDetailDTOs">å åæºåè®®æç»ä¿¡æ¯</param> /// <param name="deviceCode">设å¤ç¼å·</param> /// <param name="deviceName">设å¤åç§°</param> public CommonConveyorLine_After(BaseCommunicator communicator, List<DeviceProDTO> deviceProDTOs, List<DeviceProtocolDetailDTO> deviceProtocolDetailDTOs, string deviceCode, string deviceName) { _communicator = communicator; _deviceProDTOs = deviceProDTOs; _deviceProtocolDetailDTOs = deviceProtocolDetailDTOs; _deviceCode = deviceCode; _deviceName = deviceName; CheckConnect(); } #endregion #region Private Method private void CheckConnect() { Task.Run(() => { while (_heartStatr) { try { DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(); if (devicePro == null) _isConnected = false; else Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); _isConnected = true; } catch (Exception ex) { _isConnected = false; } Thread.Sleep(500); } }); } #endregion #region Public Method /// <summary> /// 读åPLCåè®®å°åçæ°æ® /// </summary> /// <typeparam name="TEnum">å议信æ¯çæä¸¾å¯¹è±¡ä¿¡æ¯ã</typeparam> /// <typeparam name="TRsult">è¯»åæ°æ®çç±»å对象信æ¯ã</typeparam> /// <param name="value">æä¸¾å¼</param> /// <param name="deviceChildCode">设å¤åç¼å·</param> /// <returns>读åå°çæ°æ®</returns> public TRsult GetValue<TEnum, TRsult>(TEnum value, string deviceChildCode) where TEnum : Enum { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == value.ToString() && x.DeviceChildCode == deviceChildCode); return devicePro == null ? throw new Exception() : (TRsult)Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); } /// <summary> /// ä¸è®¾å¤çå¿è·³ /// </summary> public void Heartbeat() { throw new NotImplementedException(); } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="command"></param> /// <param name="deviceChildCode"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public bool SendCommand<T>(T command, string deviceChildCode) where T : IDataTransfer, new() { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); if (devicePro == null) { return false; } if (Communicator.WriteCustomer(devicePro.DeviceProAddress, command)) { return true; } return false; } /// <summary> /// 读åPLCæ°æ®ï¼è¿åèªå®ä¹å¯¹è±¡ /// </summary> /// <typeparam name="T">æ³å</typeparam> /// <param name="deviceChildCode">å设å¤ç¼å·</param> /// <returns>è¿åèªå®ä¹å¯¹è±¡ææåºå¼å¸¸</returns> /// <exception cref="Exception"></exception> public T ReadCustomer<T>(string deviceChildCode) where T : IDataTransfer, new() { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == "ReadDeviceCommand" && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); if (devicePro == null) { throw new Exception("æªæ¾å°å议信æ¯"); } else { return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress); } } /// <summary> /// 读åPLCæ°æ®ï¼è¿åèªå®ä¹å¯¹è±¡ /// </summary> /// <typeparam name="T">æ³å</typeparam> /// <param name="deviceChildCode">å设å¤ç¼å·</param> /// <param name="deviceProParamType">åæ°ç±»å</param> /// <returns>è¿åèªå®ä¹å¯¹è±¡ææåºå¼å¸¸</returns> /// <exception cref="Exception"></exception> public T ReadCustomer<T>(string deviceChildCode, string deviceProParamType) where T : IDataTransfer, new() { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.Where(x => x.DeviceProParamType == deviceProParamType && x.DeviceChildCode == deviceChildCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); if (devicePro == null) { throw new Exception("æªæ¾å°å议信æ¯"); } else { return Communicator.ReadCustomer<T>(devicePro.DeviceProAddress); } } /// <summary> /// æ ¹æ®åæ°åç§°ã设å¤åç¼å·åå ¥å¯¹åºçæ°æ®ã /// </summary> /// <typeparam name="TEnum">åæ°åç§°æä¸¾ç±»åã</typeparam> /// <typeparam name="TValue">è¦åå ¥çæ°æ®ç±»åã</typeparam> /// <param name="enum">åæ°åç§°ã</param> /// <param name="value">è¦åå ¥çæ°æ®ã</param> /// <param name="deviceChildCode">设å¤åç¼å·å</param> /// <returns>è¿ååå ¥æåæå¤±è´¥</returns> public bool SetValue<TEnum, TValue>(TEnum @enum, TValue value, string deviceChildCode) where TEnum : Enum where TValue : notnull { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode); return devicePro == null ? throw new Exception() : Communicator.WriteObj(devicePro.DeviceProAddress, devicePro.DeviceDataType, value); } /// <summary> /// æ ¹æ®åæ°åç§°ã设å¤åç¼å·è¯»å对åºçæ°æ®ã /// </summary> /// <typeparam name="TEnum">åæ°åç§°æä¸¾ç±»åã</typeparam> /// <param name="enum">åæ°åç§°ã</param> /// <param name="deviceChildCode">设å¤åç¼å·å</param> /// <returns>è¿ååå ¥æåæå¤±è´¥</returns> public object ReadValue<TEnum>(TEnum @enum, string deviceChildCode) where TEnum : Enum { if (!IsConnected) throw new Exception($"éè®¯è¿æ¥é误ï¼è¯·æ£æ¥ç½ç»"); DeviceProDTO? devicePro = _deviceProDTOs.FirstOrDefault(x => x.DeviceProParamName == @enum.ToString() && x.DeviceChildCode == deviceChildCode); return devicePro == null ? throw new Exception() : Communicator.ReadAsObj(devicePro.DeviceProAddress, devicePro.DeviceDataType); } /// <summary> /// /// </summary> /// <param name="deviceChildCode"></param> /// <returns></returns> /// <exception cref="Exception"></exception> public bool IsOccupied(string deviceChildCode) { if (Communicator.IsConnected) { List<DeviceProDTO> devicePros = _deviceProDTOs.Where(x => x.DeviceProParamType == ConveyorLineStatus.IsOccupied.ToString()).ToList(); if (devicePros.Count == 0) { //todo åè®®ä¿¡æ¯æªè·åå°æ¶æåºå¼å¸¸ throw new Exception(); } for (int i = 0; i < devicePros.Count; i++) { object readStatus = Communicator.ReadAsObj(devicePros[i].DeviceProAddress, devicePros[i].DeviceDataType); //todo åè®®æç»ä¿¡æ¯æªè·åå°æ¶æåºå¼å¸¸ DeviceProtocolDetailDTO? deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamName) ?? throw new Exception(); deviceProtocolDetail = _deviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == devicePros[i].DeviceProParamType && x.ProtocalDetailValue.Equals(readStatus.ToString())); if (deviceProtocolDetail != null) { return true; } return false; } } //todo é讯æªè¿æ¥æ¶æåºå¼å¸¸ return false; } public void Dispose() { _heartStatr = false; _communicator.Dispose(); GC.SuppressFinalize(this); } #endregion } } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Filter/CustomProfile.cs
@@ -22,6 +22,7 @@ CreateMap<Dt_DeviceInfo,DeviceInfoDTO>(); CreateMap<WMSTaskDTO, Dt_Task>().ForMember(a => a.WMSId, b => b.MapFrom(b => b.Id)); CreateMap<Dt_Task, ConveyorLineTaskCommand>().ForMember(a => a.TargetAddress, b => b.MapFrom(b => b.NextAddress)).ForMember(a => a.Barcode, b => b.MapFrom(b => b.PalletCode)).ForMember(a => a.TaskNum, b => b.MapFrom(b => b.TaskNum)); CreateMap<Dt_Task,ConveyorLineTaskCommand_After>().ForMember(a => a.ConveyorLineTargetAddress, b => b.MapFrom(b => b.NextAddress)).ForMember(a => a.ConveyorLineBarcode, b => b.MapFrom(b => b.PalletCode)).ForMember(a => a.ConveyorLineTaskNum, b => b.MapFrom(b => b.TaskNum)); } } } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/CommonConveyorLine_AfterJob.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,702 @@ #region MyRegion #region << ç æ¬ 注 é >> /*---------------------------------------------------------------- * å½å空é´ï¼WIDESEAWCS_Tasks.ConveyorLineJob * å建è ï¼è¡ç«¥åº * å建æ¶é´ï¼2024/8/2 16:13:36 * çæ¬ï¼V1.0.0 * æè¿°ï¼ * * ---------------------------------------------------------------- * ä¿®æ¹äººï¼ * ä¿®æ¹æ¶é´ï¼ * çæ¬ï¼V1.0.1 * ä¿®æ¹è¯´æï¼ * *----------------------------------------------------------------*/ #endregion << ç æ¬ 注 é >> using AutoMapper; using HslCommunication; using Microsoft.AspNetCore.Server.HttpSys; using Newtonsoft.Json; using Quartz; using SqlSugar; using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_Tasks.ConveyorLineJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonConveyorLine_AfterJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; private readonly IMapper _mapper; public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; _taskRepository = taskRepository; } public Task Execute(IJobExecutionContext context) { try { CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); //List<Task> tasks = new List<Task>(); foreach (string childDeviceCode in childDeviceCodes) { ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode); if (command.ConveyorLineBarcode.Trim().Contains("\0")) command.ConveyorLineBarcode = ""; DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal) && x.ProtocalDetailValue == command.InteractiveSignal.ToString()); if (deviceProtocolDetails != null) { MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); if (method != null) { method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode }); } } } //Task.WaitAll(tasks.ToArray()); } } catch (Exception ex) { Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } finally { //WriteDebug("CommonConveyorLineJob", "test"); //Console.Out.WriteLine(DateTime.Now); } return Task.CompletedTask; } /// <summary> /// è¾é线请æ±å ¥åº /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { var taskNew = _taskService.QueryCraneConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode); if (taskNew == null) { string barcode = command.ConveyorLineBarcode.TrimEnd(); if (_taskService.RequestWMSTask(command.ConveyorLineBarcode, childDeviceCode).Status) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); if (task != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; taskCommand.ResponState = 1; taskCommand.ConveyorLineTaskNum = task.TaskNum; taskCommand.ConveyorLineTargetAddress = Convert.ToInt16(task.NextAddress); conveyorLine.SendCommand(taskCommand, childDeviceCode); //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); _taskService.UpdateTaskStatusToNext(task); } } } var inTask = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum.ObjToInt(), childDeviceCode); if (inTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(inTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; taskCommand.ResponState = 1; conveyorLine.SendCommand(taskCommand, childDeviceCode); _taskService.UpdateTaskStatusToNext(inTask); } } /// <summary> /// è¾é线请æ±å ¥åºä¸ä¸å°å /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { //if(command) Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); if (newTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; conveyorLine.SendCommand(taskCommand, childDeviceCode); } } } /// <summary> /// è¾éçº¿å ¥åºå®æ /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) { //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); Console.Out.WriteLine(content.Serialize()); } } /// <summary> /// è¾é线请æ±åºä¿¡æ¯ /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); if (task != null) { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); //taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); _taskService.UpdateTaskStatusToNext(task); } } /// <summary> /// è¾é线请æ±åºåºä¸ä¸å°å /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); if (newTask != null) { ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); //taskCommand.InteractiveSignal = command.InteractiveSignal; conveyorLine.SendCommand(taskCommand, childDeviceCode); } } } /// <summary> /// è¾é线åºåºå®æ /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="command">读åç请æ±ä¿¡æ¯</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.ConveyorLineTaskNum, childDeviceCode); if (task != null) { conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); Console.Out.WriteLine(content.Serialize()); } } /// <summary> /// è¾é线交äºå®æ /// </summary> /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> /// <param name="childDeviceCode">å设å¤ç¼å·</param> /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> /// <param name="value">å¼</param> public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) { DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); string[] x = devicePro.DeviceProAddress.Split('.'); x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); string DeviceProAddress = string.Join(".", x); conveyorLine.Communicator.Write(DeviceProAddress, value); } } } #endregion #region MyRegion //using AutoMapper; //using HslCommunication; //using Newtonsoft.Json; //using Quartz; //using SqlSugar; //using System.Reflection; //using WIDESEAWCS_Common.TaskEnum; //using WIDESEAWCS_Core; //using WIDESEAWCS_Core.Helper; //using WIDESEAWCS_DTO.TaskInfo; //using WIDESEAWCS_ITaskInfoRepository; //using WIDESEAWCS_ITaskInfoService; //using WIDESEAWCS_Model.Models; //using WIDESEAWCS_QuartzJob; //using WIDESEAWCS_QuartzJob.DeviceBase; //using WIDESEAWCS_QuartzJob.DTO; //using WIDESEAWCS_QuartzJob.Service; //using WIDESEAWCS_Tasks.ConveyorLineJob; //namespace WIDESEAWCS_Tasks //{ // [DisallowConcurrentExecution] // public class CommonConveyorLine_AfterJob : JobBase, IJob // { // private readonly List<string> _deviceCodes1 = new List<string>() { "1063", "1061", "1060" }; // private readonly List<string> _deviceCodes2 = new List<string>() { "1067", "1069", "1068" }; // private readonly string[] HCTrayCode = { "1012", "1013" }; // private readonly ITaskService _taskService; // private readonly ITaskRepository _taskRepository; // private readonly ITaskExecuteDetailService _taskExecuteDetailService; // private readonly IRouterService _routerService; // private readonly IMapper _mapper; // public CommonConveyorLine_AfterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository) // { // _taskService = taskService; // _taskExecuteDetailService = taskExecuteDetailService; // _routerService = routerService; // _mapper = mapper; // _taskRepository = taskRepository; // } // public Task Execute(IJobExecutionContext context) // { // try // { // CommonConveyorLine_After conveyorLine = (CommonConveyorLine_After)context.JobDetail.JobDataMap.Get("JobParams"); // if (conveyorLine != null) // { // List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); // List<Task> tasks = new List<Task>(); // foreach (string childDeviceCode in childDeviceCodes) // { // //Task task = Task.Run(() => // //{ // ConveyorLineTaskCommand_After command = conveyorLine.ReadCustomer<ConveyorLineTaskCommand_After>(childDeviceCode); // if (command != null) // { // var structs = BitConverter.GetBytes(command.InteractiveSignal).Reverse().ToArray().ToBoolArray(); // List<DeviceProtocolDetailDTO>? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.Where(x => x.DeviceProParamName == nameof(ConveyorLineTaskCommand_After.InteractiveSignal)).ToList(); // if (deviceProtocolDetails != null) // { // foreach (var item in deviceProtocolDetails) // { // var outDeviceCodes = _routerService.QueryOutDeviceCodes(conveyorLine.DeviceCode); // if (structs[item.ProtocalDetailValue.ObjToInt()] == true) // { // MethodInfo? method = GetType().GetMethod(item.ProtocolDetailType); // if (method != null) // { // method.Invoke(this, new object[] { conveyorLine, command, childDeviceCode, item.ProtocalDetailValue.ObjToInt() }); // } // } // else // { // //DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); // //string[] x = devicePro.DeviceProAddress.Split('.'); // //x[x.Length - 1] = (item.ProtocalDetailValue.ObjToInt() + 1).ToString(); // //string DeviceProAddress = string.Join(".", x); // //var writeRead = conveyorLine.Communicator.Read<bool>(DeviceProAddress); // //if (writeRead) // //{ // // ConveyorLineSendFinish(conveyorLine, childDeviceCode, item.ProtocalDetailValue.ObjToInt(), false); // //} // } // } // } // } // //}); // //tasks.Add(task); // } // Task.WaitAll(tasks.ToArray()); // } // } // catch (Exception ex) // { // Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); // } // finally // { // //WriteDebug("CommonConveyorLineJob", "test"); // //Console.Out.WriteLine(DateTime.Now); // } // return Task.CompletedTask; // } // /// <summary> // /// è¾é线请æ±å ¥åº // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> // public void RequestInbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue) // { // var taskNew = _taskService.QueryCraneConveyorLineTask(command.Barcode.ObjToInt(), childDeviceCode); // var Taskout = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (Taskout != null) // { // // 空æçä»»å¡ // if (Taskout.TaskType == (int)TaskOutboundTypeEnum.OutTray) // { // if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // if (command.Barcode == "") // { // taskCommand.TargetAddress = 1092; // } // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) // { // if (command.Barcode == "") // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // taskCommand.TargetAddress = 1092; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // } // } // else if (Taskout.TaskType == (int)TaskOutboundTypeEnum.Outbound) // { // if (Taskout.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // if (command.Barcode == "") // { // //todo 没ææç¡®å¼å¸¸å£ï¼éå°ç®æ å··éçNGå£ // //taskCommand.TargetAddress = 1092; // } // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else if (Taskout.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) // { // if (command.Barcode == "") // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(Taskout); // taskCommand.InteractiveSignal = command.InteractiveSignal; // // todo éå°ç®æ å··éçNGå£ // taskCommand.TargetAddress = 1092; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // else // { // // todo è°ç¨WMSä»»å¡å®ææ¥å£ // var x = new { taskNum = Taskout.TaskNum }; // var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result; // WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); // if (content.Status) // { // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(Taskout); // } // } // } // } // } // if (taskNew == null) // { // if (_taskService.RequestWMSTask(command.Barcode, childDeviceCode).Status) // { // Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (task != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // _taskService.UpdateTaskStatusToNext(task); // } // } // } // } // // // /// <summary> // /// 空æçåæµ // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // /// <param name="index">读åç第ä¸ä¸ªä½ç½®</param> // public void EmptyTrayReturn(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index) // { // var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.OutTray); // if (tasks.Count <= index) // { // WMSTaskDTO taskDTO = new WMSTaskDTO() // { // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), // Grade = 1, // PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"), // RoadWay = "CHSC01", // SourceAddress = "001-001-001", // TargetAddress = childDeviceCode, // TaskState = (int)TaskOutStatusEnum.OutNew, // Id = 0, // TaskType = (int)TaskOutboundTypeEnum.OutTray // }; // #region ç宿°æ® // // TODO: è°ç¨æ¥å£è·åä¸ä¸ä¸ªå°å // //RequestTaskDto request = new RequestTaskDto() // //{ // // Position = sourceAddress, // // PalletCode = palletCode, // //}; // //// åé请æ±å¹¶çå¾ ååº // //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result; // //// ååºååååºå 容 // //WebResponseContent content = JsonConvert.DeserializeObject<WebResponseContent>(result); // //// æ£æ¥ç¶æå¹¶è¿å // ////if (!content.Status) // //// return content; // //// ååºåå任塿°æ® // //WMSTaskDTO task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); // #endregion // var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); // if (content.Status) // { // Console.WriteLine("空æçå¼å«æå"); // } // } // } // ///// <summary> // ///// éååºåº // ///// </summary> // ///// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // ///// <param name="command">读åç请æ±ä¿¡æ¯</param> // ///// <param name="childDeviceCode">å设å¤ç¼å·</param> // ///// <param name="index">线ä½å½åbool读ååç§»å°å</param> // //public void ChuanhuaOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int index) // //{ // // var tasks = _taskRepository.QueryData(x => (x.TaskState == (int)TaskOutStatusEnum.OutNew || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting) && x.TaskType == (int)TaskOutboundTypeEnum.Outbound); // // if (tasks.Count <= index) // // { // // WMSTaskDTO taskDTO = new WMSTaskDTO() // // { // // TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), // // Grade = 1, // // PalletCode = DateTime.Now.ToString("MMddHHmmss"), // // RoadWay = "CHSC01", // // SourceAddress = "001-001-001", // // TargetAddress = childDeviceCode, // // TaskState = (int)TaskOutStatusEnum.OutNew, // // Id = 0, // // TaskType = (int)TaskOutboundTypeEnum.Outbound, // // }; // // var content = _taskService.ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); // // if (content.Status) // // { // // Console.WriteLine("åºåºå¼å«æå"); // // } // // } // // else // // { // // Dt_Task task = tasks[index]; // // if (task != null) // // { // // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); // // taskCommand.InteractiveSignal = command.InteractiveSignal; // // conveyorLine.SendCommand(taskCommand, childDeviceCode); // // } // // } // //} // /// <summary> // /// è¾é线请æ±å ¥åºä¸ä¸å°å // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // public void RequestInNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); // if (newTask != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // } // } // } // /// <summary> // /// è¾éçº¿å ¥åºå®æ // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> // public void ConveyorLineInFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode, int ProtocalDetailValue) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) // { // ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // Console.Out.WriteLine(content.Serialize()); // } // } // /// <summary> // /// è¾é线请æ±åºä¿¡æ¯ // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // public void RequestOutbound(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode); // if (task != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(task); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // _taskService.UpdateTaskStatusToNext(task); // } // } // /// <summary> // /// è¾é线请æ±åºåºä¸ä¸å°å // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // public void RequestOutNextAddress(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); // if (newTask != null) // { // ConveyorLineTaskCommand_After taskCommand = _mapper.Map<ConveyorLineTaskCommand_After>(newTask); // taskCommand.InteractiveSignal = command.InteractiveSignal; // conveyorLine.SendCommand(taskCommand, childDeviceCode); // } // } // } // /// <summary> // /// è¾é线åºåºå®æ // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="command">读åç请æ±ä¿¡æ¯</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // public void ConveyorLineOutFinish(CommonConveyorLine_After conveyorLine, ConveyorLineTaskCommand_After command, string childDeviceCode) // { // Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); // if (task != null) // { // conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // Console.Out.WriteLine(content.Serialize()); // } // } // /// <summary> // /// è¾é线交äºå®æ // /// </summary> // /// <param name="conveyorLine">è¾é线å®ä¾å¯¹è±¡</param> // /// <param name="childDeviceCode">å设å¤ç¼å·</param> // /// <param name="ProtocalDetailValue">线ä½å½åbool读ååç§»å°å</param> // /// <param name="value">å¼</param> // public void ConveyorLineSendFinish(CommonConveyorLine_After conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value) // { // DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault(); // string[] x = devicePro.DeviceProAddress.Split('.'); // x[x.Length - 1] = (ProtocalDetailValue + 1).ToString(); // string DeviceProAddress = string.Join(".", x); // conveyorLine.Communicator.Write(DeviceProAddress, value); // } // } //} #endregion Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/ConveyorLineDBName_After.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,79 @@ #region << ç æ¬ 注 é >> /*---------------------------------------------------------------- * å½å空é´ï¼WIDESEAWCS_Tasks.ConveyorLineJob * å建è ï¼è¡ç«¥åº * å建æ¶é´ï¼2024/8/2 16:13:36 * çæ¬ï¼V1.0.0 * æè¿°ï¼ * * ---------------------------------------------------------------- * ä¿®æ¹äººï¼ * ä¿®æ¹æ¶é´ï¼ * çæ¬ï¼V1.0.1 * ä¿®æ¹è¯´æï¼ * *----------------------------------------------------------------*/ #endregion << ç æ¬ 注 é >> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Tasks.ConveyorLineJob { public enum ConveyorLineDBName_After { #region ReadDevice /// <summary> /// ç®çå°å /// </summary> ConveyorLineTargetAddress, /// <summary> /// ä»»å¡å· /// </summary> ConveyorLineTaskNum, /// <summary> /// æçå· /// </summary> ConveyorLineBarcode, /// <summary> /// 请æ±åé¦ /// </summary> ResponState, Reserve2, Reserve3, /// <summary> /// 请æ±ä¿¡å· /// </summary> InteractiveSignal, /// <summary> /// æçä¿¡å· /// </summary> HasPallet, /// <summary> /// æ¥è¦ä»£ç /// </summary> ConveyorLineAlarm, Reserve4, Reserve5, #endregion #region WriteDevice #endregion } } Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob_After/ConveyorLineTaskCommand_After.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ #region << ç æ¬ 注 é >> /*---------------------------------------------------------------- * å½å空é´ï¼WIDESEAWCS_Tasks.ConveyorLineJob * å建è ï¼è¡ç«¥åº * å建æ¶é´ï¼2024/8/2 16:13:36 * çæ¬ï¼V1.0.0 * æè¿°ï¼ * * ---------------------------------------------------------------- * ä¿®æ¹äººï¼ * ä¿®æ¹æ¶é´ï¼ * çæ¬ï¼V1.0.1 * ä¿®æ¹è¯´æï¼ * *----------------------------------------------------------------*/ #endregion << ç æ¬ 注 é >> using System.Runtime.CompilerServices; using WIDESEAWCS_QuartzJob.DeviceBase; namespace WIDESEAWCS_Tasks.ConveyorLineJob { //public class ConveyorLineTaskCommand_After : DeviceCommand //{ // public short TargetAddress { get; set; } // public short TaskNum { get; set; } // public ushort InteractiveSignal { get; set; } // [DataLength(25)] // public string Barcode { get; set; } // public short ConveyorLineAlarm { get; set; } //} public class ConveyorLineTaskCommand_After : DeviceCommand { public short ConveyorLineTargetAddress { get; set; } public int ConveyorLineTaskNum { get; set; } [DataLength(25)] public string ConveyorLineBarcode { get; set; } public short ResponState { get; set; } public short Reserved2 { get; set; } public short Reserved3 { get; set; } public byte InteractiveSignal { get; set; } public short HasPallet { get; set; } public short ConveyorLineAlarm { get; set; } public short Reserved4 { get; set; } public short Reserved5 { get; set; } } //public class ConveyorLineTaskCommandWrite : DeviceCommand //{ // public ushort WriteInteractiveSignal { get; set; } // [DataLength(25)] // public string Barcode { get; set; } // public short TargetAddress { get; set; } // public short TaskNum { get; set; } //} } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/Const/ConfigConst.cs
@@ -20,6 +20,11 @@ /// é®ç®±é ç½® /// </summary> public const string CONFIG_SYS_RegExmail = "Sys_RegExmail"; /// <summary> /// IPæ¥å£å°å /// </summary> public const string CONFIG_SYS_IPAddress = "CONFIG_SYS_IPAddress"; } /// <summary> @@ -60,5 +65,15 @@ /// é®ç®±å 容æ é¢ /// </summary> public const string SMTP_RegUser = "smtpRegUser"; /// <summary> /// WCS IP /// </summary> public const string WCSIPAddress = "WCSIPAddress"; /// <summary> /// HK IP /// </summary> public const string HKIPAddress = "HKIPAddress"; } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/ManageEnum.cs
@@ -143,6 +143,12 @@ /// </summary> [Description("空æçåºåº")] OutTray = 104, /// <summary> /// NGåºåº /// </summary> [Description("NGåºåº")] OutNG =105, } public enum TaskRelocationTypeEnum Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MCS/NotifyFinishTest.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO { public class NotifyFinishTest { /// <summary> /// åºåº /// </summary> public int LocationArea { get; set; } /// <summary> /// æçå· /// </summary> public string PalletBarcode { get; set; } /// <summary> /// åºä½å· /// </summary> public string LocationID { get; set; } /// <summary> /// æ¯å¦åå¨NG (1-æ;2-æ ) /// </summary> public int IsNG { get; set; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MCS/NotityInFinish.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO { public class NotityInFinish { /// <summary> /// åºåº /// </summary> public int LocationArea { get; set; } /// <summary> /// æçå· /// </summary> public string PalletBarcode { get; set; } /// <summary> /// åºä½å· /// </summary> public string LocationID { get; set; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MCS/RequestReMove.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO { public class RequestReMove { /// <summary> /// åºåº /// </summary> public int LocationArea { get; set; } /// <summary> /// æçå· /// </summary> public string PalletBarcode { get; set; } /// <summary> /// åºä½å· /// </summary> public string LocationID { get; set; } /// <summary> /// ç§»åºç±»å(1-æ£å¸¸ç§»åº/æ£ä¿®ç§»åº 2-转移å°å¼å¸¸è¸¢åºå£(ç§»å ¥Ngç«) 5-æ¶é²ç§»åº(ç«è¦)) /// </summary> public int MoveType { get; set; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MCS/RequsetCellInfo.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO { /// <summary> /// 请æ±åºä½ä¿¡æ¯ /// </summary> public class RequsetCellInfo { /// <summary> /// åºåº /// </summary> public int LocationArea { get; set; } /// <summary> /// åºä½å· /// </summary> public string LocationID { get; set; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MCS/WorkState.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO { public class WorkState { /// <summary> /// åºä½æ°æ®ï¼å¼ç¨,2024å¹´11æ5æ¥é¢è° å°éååºä½æ°æ®æ¹ä¸ºå个åºä½æ°æ®åæ¥ï¼ /// </summary> public List<LocationWorkState> workStates { get; set; } } public class LocationWorkState { public int LocationArea { get; set; } /// <summary> /// ç¶æ /// </summary> public int StateCode { get; set; } /// <summary> /// åºä½ç¼å· /// </summary> public string LocationID { get; set; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_IStoragIntegrationServices/MCS/IMCSService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; namespace WIDESEA_IStoragIntegrationServices { public interface IMCSService : IDependency { WebResponseContent NotifyFinishTest(object json); WebResponseContent RequestChangeLocation(object json); WebResponseContent ModifyAccessStatus(object json); WebResponseContent RequsetCellInfo(object json); } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/MCSService.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_IStorageBasicRepository; using WIDESEA_IStorageTaskRepository; using WIDESEA_IStoragIntegrationServices; namespace WIDESEA_StoragIntegrationServices { public partial class MCSService : IMCSService { private readonly ILocationInfoRepository _locationRepository; private readonly IDt_TaskRepository _taskRepository; private readonly IStockInfoRepository _stockInfoRepository; public MCSService(ILocationInfoRepository locationRepository,IDt_TaskRepository taskRepository,IStockInfoRepository stockInfoRepository) { _locationRepository = locationRepository; _taskRepository = taskRepository; _stockInfoRepository = stockInfoRepository; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/ModifyAccessStatus.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ using MailKit; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_DTO; namespace WIDESEA_StoragIntegrationServices { public partial class MCSService { public WebResponseContent ModifyAccessStatus(object json) { WebResponseContent content = new WebResponseContent(); try { if (string.IsNullOrEmpty(json.ToString())) throw new Exception("ä¸ä¼ åæ°ä¸ºç©º"); var result = JsonConvert.DeserializeObject<LocationWorkState>(json.ToString()); var locationinfo = _locationRepository.QueryFirst(x => x.AreaId == result.LocationArea && x.LocationCode == result.LocationID); if (locationinfo != null) { //æ£æµææä¾çè´§ä½ç¶æï¼åªæwmsæªéå®ä¸æä¾çç¶æä¸ºå 许æå 许æ¾è´§ if (locationinfo.Remark != LocationStatusByCode(result.StateCode)) { locationinfo.Remark = LocationStatusByCode(result.StateCode); _locationRepository.UpdateData(locationinfo); } } else throw new Exception("è´§ä½ä¸åå¨"); return content.OK(); } catch (Exception ex) { return content.Error(ex.Message); } } private static string LocationStatusByCode(int code) { string str = null; switch (code) { case 1: str = "LocationState_Allows"; break; case 2: str = "LocationState_NotAllows"; break; //case 2: str = LocationState.LocationLock.ToString(); break; default: str = "LocationState_NotAllows"; break; } return str; } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/NotifyFinishTest.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,83 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO; using WIDESEA_DTO.WMS; using WIDESEA_Model.Models; using WIDESEA_StorageBasicRepository; namespace WIDESEA_StoragIntegrationServices { public partial class MCSService { public WebResponseContent NotifyFinishTest(object json) { WebResponseContent content = new WebResponseContent(); try { if (string.IsNullOrEmpty(json.ToString())) throw new Exception("ä¸ä¼ åæ°ä¸ºç©º"); var result = JsonConvert.DeserializeObject<NotifyFinishTest>(json.ToString()); if (string.IsNullOrEmpty(result?.PalletBarcode)) throw new Exception("ä¸ä¼ æçå·ä¸ºç©º"); var location = _locationRepository.QueryFirst(x => x.AreaId == result.LocationArea && x.LocationCode == result.LocationID); if (location == null) throw new Exception("æªç¥åºä½"); int taskNum = _taskRepository.GetTaskNo().Result; Dt_Task task = new Dt_Task { CreateDate = DateTime.Now, Creater = "HK", CurrentAddress = result.LocationID, Grade = 1, PalletCode = result.PalletBarcode, Roadway = location.RoadwayNo, SourceAddress = result.LocationID, TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = result.IsNG == 1 ? (int)TaskOutboundTypeEnum.OutNG : (int)TaskOutboundTypeEnum.Outbound, TargetAddress = "", TaskNum = taskNum, //_taskRepository.GetTaskNo().Result, TaskId = 0, }; WMSTaskDTO taskDTO = new WMSTaskDTO { Id = 0, Grade = 1, PalletCode = result.PalletBarcode, RoadWay = location.RoadwayNo, SourceAddress = result.LocationID, TargetAddress = result.LocationID, TaskNum = taskNum, //_taskRepository.GetTaskNo().Result, TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = result.IsNG == 1 ? (int)TaskOutboundTypeEnum.OutNG : (int)TaskOutboundTypeEnum.Outbound, }; var respon = HttpHelper.Post("http://localhost:9291/api/Task/ReceiveTask", JsonConvert.SerializeObject(taskDTO)); if (respon != null) { } return content.OK(); } catch (Exception ex) { return content.Error(ex.Message); } } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/RequestChangeLocation.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_DTO; namespace WIDESEA_StoragIntegrationServices { public partial class MCSService { /// <summary> /// 请æ±ç§»åº /// </summary> /// <param name="json"></param> /// <returns></returns> public WebResponseContent RequestChangeLocation(object json) { WebResponseContent content = new WebResponseContent(); try { if (string.IsNullOrEmpty(json.ToString())) throw new Exception("ä¸ä¼ åæ°ä¸ºç©º"); var result = JsonConvert.DeserializeObject<RequestReMove>(json.ToString()); return content.OK(); } catch (Exception ex) { return content.Error(ex.Message); } } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/MCS/Partial/RequsetCellInfo.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_DTO; namespace WIDESEA_StoragIntegrationServices { public partial class MCSService { /// <summary> /// è·ååºä½ä¿¡æ¯ /// </summary> /// <param name="json"></param> /// <returns></returns> public WebResponseContent RequsetCellInfo(object json) { WebResponseContent content = new WebResponseContent(); try { if (string.IsNullOrEmpty(json.ToString())) throw new Exception("ä¸ä¼ åæ°ä¸ºç©º"); var result = JsonConvert.DeserializeObject<RequsetCellInfo>(json.ToString()); //_stockInfoRepository.QueryFirst(x=>x.LocationCode == result.LocationID && x) //todo return content.OK(); } catch (Exception ex) { return content.Error(ex.Message); } } } } Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MCS/MCSController.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WIDESEA_DTO; using WIDESEA_IStoragIntegrationServices; namespace WIDESEA_WMSServer.Controllers; [Route("api/[controller]")] [ApiController] public class MCSController : Controller { private readonly IMCSService _MCSService; public MCSController(IMCSService MCSService) { _MCSService = MCSService; } [HttpPost("NotifyFinishTest")] public WebResponseContent NotifyFinishTest([FromBody] object input) { return _MCSService.NotifyFinishTest(input); } [HttpPost("RequestChangeLocation")] public WebResponseContent RequestChangeLocation([FromBody] object input) { return _MCSService.RequestChangeLocation(input); } [HttpPost("ModifyAccessStatus")] public WebResponseContent ModifyAccessStatus([FromBody] object input) { return _MCSService.ModifyAccessStatus(input); } [HttpPost("RequsetCellInfo")] public WebResponseContent RequsetCellInfo([FromBody] object input) { return _MCSService.RequsetCellInfo(input); } }