#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using AutoMapper; using HslCommunication; using Newtonsoft.Json; using Quartz; using SqlSugar; using System.Net; using System.Reflection; using System.Threading.Tasks; using WIDESEAWCS_BasicInfoRepository; using WIDESEAWCS_BasicInfoService; using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_Core.HttpContextUser; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_ISystemServices; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_SignalR; using WIDESEAWCS_Tasks.ConveyorLineJob; using WIDESEAWCS_Tasks.StackerCraneJob; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonConveyorLineJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskRepository _taskRepository; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly IRouterService _routerService; private readonly IMapper _mapper; private readonly IDt_StationManagerService _stationManagerService; private readonly ISys_ConfigService _sys_ConfigService; private readonly ICacheService _cacheService; private readonly INoticeService _noticeService; private readonly IDt_needBarcodeRepository _needBarcodeRepository; private readonly IDt_StationManagerRepository _stationManagerRepository; private static List? userTokenIds; private static List? userIds; public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IDt_StationManagerService stationManagerService, ISys_ConfigService sys_ConfigService, ICacheService cacheService, INoticeService noticeService, IDt_needBarcodeRepository needBarcodeRepository, IDt_StationManagerRepository stationManagerRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _routerService = routerService; _mapper = mapper; _taskRepository = taskRepository; _stationManagerService = stationManagerService; _sys_ConfigService = sys_ConfigService; _cacheService = cacheService; _noticeService = noticeService; _needBarcodeRepository = needBarcodeRepository; _stationManagerRepository = stationManagerRepository; } public async Task Execute(IJobExecutionContext context) { try { CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams"); if (conveyorLine != null) { List stationManagers = _stationManagerService.GetAllStationByDeviceCode(conveyorLine.DeviceCode); foreach (var station in stationManagers) { if (station.stationType == 8) //焊装接车逻辑处理 { var request = conveyorLine.GetValue(ConveyorLineDBName.EntApply, station.stationChildCode); if (request) { var palletcode = conveyorLine.GetValue(ConveyorLineDBName.SkidNo, station.stationChildCode); var pvi = conveyorLine.GetValue(ConveyorLineDBName.PVI, station.stationChildCode); WebResponseContent response = _taskService.RequestWhiteBody(palletcode.ToString(), pvi, station).Result; if (response.Status) { conveyorLine.SetValue(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode); } } } if (station.stationType == 5) //焊装提升机逻辑处理 { var request = conveyorLine.GetValue(ConveyorLineDBName.EntApply, station.stationChildCode); if (request) { var palletcode = conveyorLine.GetValue(ConveyorLineDBName.SkidNo, station.stationChildCode); var pvi = conveyorLine.GetValue(ConveyorLineDBName.PVI, station.stationChildCode); if (station.stationModel == "1") //直通模式 { //todo BDC02过点 焊涂绑定 conveyorLine.SetValue(ConveyorLineDBName.Spare6, 2, station.stationChildCode); conveyorLine.SetValue(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode); } else //入库模式 { WebResponseContent response = _taskService.RequestRoadWayTask(palletcode.ToString(), pvi, station).Result; if (response.Status) { var task = _taskService.QueryBarCodeConveyorLineTask(palletcode.ToString(), station.stationChildCode); if (task != null) { var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == task.NextAddress); conveyorLine.SetValue(ConveyorLineDBName.Spare6, 3, station.stationChildCode); Thread.Sleep(300); conveyorLine.SetValue(ConveyorLineDBName.Spare5, Convert.ToInt16(stationInfo.stationTCLocation), station.stationChildCode); conveyorLine.SetValue(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode); _taskService.UpdateTaskStatusToNext(task); } } } } //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.RequestInboundRoadWayNo)?.ConfigValue; //if (wmsBase == null || requestTask == null) //{ // throw new InvalidOperationException("WMS IP 未配置"); //} //var wmsIpAddrss = wmsBase + requestTask; //var result = await HttpHelper.PostAsync(wmsIpAddrss, new { palletCode = palletcode, Roadways = station.Roadway, area = station.stationArea, Position = station.stationChildCode, PVI = pvi }.ToJsonString()); //WebResponseContent content = JsonConvert.DeserializeObject(result); //if (!content.Status) //{ // return; //} ////焊涂提升机 直通人涂装-2 入库-3 //conveyorLine.SetValue(ConveyorLineDBName.Spare6, 3, station.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName.Spare5, 5, station.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName.AllowRelease, 1, station.stationChildCode); } //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == request.ToString()); //if (deviceProtocolDetails != null) //{ // MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); // if (method != null) // { // method.Invoke(this, new object[] { conveyorLine, conveyorLine, station }); // } //} //ConveyorLineTaskCommand command = conveyorLine.ReadCustomer(station.stationChildCode); //command.PVI.Replace("/0", "").Replace("\"\\u0010\\u000f", ""); //command.CarColor.Replace("/0", ""); //command.CarType.Replace("/0", ""); //command.CarCate.Replace("/0", ""); //command.CatSkyWindow.Replace("/0", ""); //DeviceProtocolDetailDTO? deviceProtocolDetails = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.DeviceProParamName == station.stationChildCode && x.ProtocalDetailValue == command.Request.ToString()); ////x.DeviceProParamName == nameof(ConveyorLineTaskCommand.ConveyorLineSingal) //if (deviceProtocolDetails != null) //{ // MethodInfo? method = GetType().GetMethod(deviceProtocolDetails.ProtocolDetailType); // if (method != null) // { // method.Invoke(this, new object[] { conveyorLine, command, station }); // } //} #region 调用事件总线通知前端 //var tokenInfos = _cacheService.Get>("Cache_UserToken"); //if (tokenInfos == null || !tokenInfos.Any()) //{ // //throw new Exception(conveyorLine.DeviceName + "缓存中未找到Token缓存"); // continue; //} //var userTokenIds = tokenInfos?.Select(x => x.Token_ID).ToList(); //var userIds = tokenInfos?.Select(x => x.UserId).ToList(); //object obj = new //{ // childDeviceCode = station.stationChildCode, // commandAfter = command, //}; //await _noticeService.StackerData(userIds?.FirstOrDefault(), userTokenIds, new { conveyorLine.DeviceName, data = obj }); #endregion 调用事件总线通知前端 } } } catch (Exception ex) { Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString()); } finally { //WriteDebug("CommonConveyorLineJob", "test"); //Console.Out.WriteLine(DateTime.Now); } return; } ///// ///// 输送线请求入库 ///// ///// 输送线实例对象 ///// 读取的请求信息 ///// 子设备编号 //public void RequestReceviceCar(CommonConveyorLine conveyorLine, CommonConveyorLine conveyorLine2, Dt_StationManager stationInfo) //{ // var log = $"【{conveyorLine.DeviceName}】,托盘号:【{stationInfo.stationChildCode}】,站台:【{stationInfo.remark}】请求任务"; // ConsoleHelper.WriteSuccessLine(log); // //_noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); // WriteInfo(conveyorLine.DeviceName, log); // //if() // var palletcode = conveyorLine2.GetValue(ConveyorLineDBName.SkidNo, stationInfo.stationChildCode); // var taskNew = _taskService.QueryConveyorLineTask(palletcode, stationInfo.stationChildCode); // if (taskNew == null) // { // if (_taskService.RequestTask(palletcode, stationInfo).Result.Status) // { // Dt_Task task = _taskService.QueryConveyorLineTask(palletcode, stationInfo.stationChildCode); // if (task != null) // { // //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode); // //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode); // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode); // _taskService.UpdateTaskStatusToNext(task); // } // } // else // { // //如果任务请求失败 // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode); // } // } //} /// /// 输送线请求入库 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 //public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo) //{ // var log = $"【{conveyorLine.DeviceName}】,托盘号:【{stationInfo.stationChildCode}】,站台:【{stationInfo.remark}】请求任务"; // ConsoleHelper.WriteSuccessLine(log); // //_noticeService.Logs(userTokenIds, new { conveyorLine.DeviceName, log = log, time = DateTime.Now.ToString("G"), color = "red" }); // WriteInfo(conveyorLine.DeviceName, log); // //if() // var taskNew = _taskService.QueryConveyorLineTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode); // if (taskNew == null) // { // if (_taskService.RequestTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo).Result.Status) // { // Dt_Task task = _taskService.QueryConveyorLineTask(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode); // if (task != null) // { // //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode); // //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.NextAddress, stationInfo.stationChildCode); // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode); // _taskService.UpdateTaskStatusToNext(task); // } // } // else // { // //如果任务请求失败 // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode); // } // } //} /// /// 输送线入库完成 /// /// /// /// //public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo) //{ // //string clinfo = conveyorLine.ReadValue(ConveyorLineDBName.Barcode, stationInfo.stationChildCode).ToString(); // var task = _taskService.QueryExecutingTaskByBarcode(command.PalletCode.ToString().PadLeft(4, '0'), stationInfo.stationChildCode); // if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish) // { // //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // ConsoleHelper.WriteErrorLine($"{stationInfo.stationChildCode}站台请求响应信息:{content.ToJsonString()}"); // if (content.Status) // { // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode); // } // else // { // //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 2, stationInfo.stationChildCode); // } // } //} /// /// 输送线请求出信息 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 /// 线体当前bool读取偏移地址 public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo) { var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceName, stationInfo.stationChildCode); if (task != null) { conveyorLine.SetValue(ConveyorLineDBName.SkidNo, task.PalletCode, stationInfo.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName.TargetAddress, task.TargetAddress, stationInfo.stationChildCode); //conveyorLine.SetValue(ConveyorLineDBName.ResponState, 1, stationInfo.stationChildCode); //ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true); _taskService.UpdateTaskStatusToNext(task); } } /// /// 输送线任务完成 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 /// 线体当前bool读取偏移地址 public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, Dt_StationManager stationInfo) { var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceName, stationInfo.stationChildCode); if (task != null) { var canTask = _taskRepository.QueryData(x => true).OrderByDescending(x => x.Grade).ThenBy(x => x.CreateDate).FirstOrDefault(); if (null != canTask && task.PalletCode == canTask.PalletCode) { //WebResponseContent k4 = _taskService.UpdateTaskStatusToNext(task); //command.PalletCode = (Int32)20; //command.PVI = "ABCD0123456789"; //command.CarCate = "SUV"; //command.CarColor = "AB01"; conveyorLine.SetValue(ConveyorLineDBName.SkidNo, 20, stationInfo.stationChildCode); conveyorLine.SetValue(ConveyorLineDBName.PVI, "ABCD", stationInfo.stationChildCode); //conveyorLine.SendCommand(command, stationInfo.stationChildCode); } } } } }