using WCS.DeviceProtocol; using WCS.Repository; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; using WCS.Common; using WCS.entity; using WCS.Model; using WCS.Services; using HslCommunication.Profinet.Siemens; using HslCommunication; using WCS.Utils; using IMCS.CCS.Services; namespace WCS.Service.Impl { public class TaskServiceImpl : ITaskService { private readonly DeviceRepository deviceRepository; private readonly IWcsActionService wcsActionService; private readonly IWcsActionAddressService wcsActionAddressService; private readonly ITaskCallbackService taskCallbackService; public TaskServiceImpl(DeviceRepository deviceRepository, IWcsActionService wcsActionService,IWcsActionAddressService wcsActionAddressService, ITaskCallbackService taskCallbackService) { this.deviceRepository = deviceRepository; this.wcsActionService = wcsActionService; this.wcsActionAddressService = wcsActionAddressService; this.taskCallbackService = taskCallbackService; } public async Task ExcuteTask(RequestData data) { ResponseData responseData=new ResponseData(data.data.taskCode); try { List devices = deviceRepository.GetDeviceList(); WcsDevice? wcsDevice = devices.FirstOrDefault(x => x.Ip == data.ip); //WcsDevice device = devices.Where(x => x.Ip == data.url && x.Port == data.port).FirstOrDefault(); if (wcsDevice == null) { Log.Instance.WriteLogAdd("设备已离线===>>" + JsonConvert.SerializeObject(data)); responseData.IsSuccess = false; return responseData; } WcsAction action = new WcsAction(); action.Ip = data.ip; action.OperateType=WcsActionType.GetSend.ToString(); WcsAction? actionInfo = wcsActionService.GetList(action).FirstOrDefault(); SiemensS7Net s7 = DevicePlcS7.SiemensS7(actionInfo.Ip); OperateResult ConnectionResult = s7.ConnectServer(); if (!ConnectionResult.IsSuccess) { s7.ConnectClose(); Log.Instance.WriteLogAdd(WcsActionType.GetSend + "异常===>>" + "PLC连接不上" + JsonConvert.SerializeObject(data), EnumHelper.GetDescription(WcsActionType.GetSend)); responseData.IsSuccess = false; return responseData; } WcsActionAddress actionAddressQuery = new WcsActionAddress(); actionAddressQuery.ActionId = actionInfo.Id; actionAddressQuery.Sort=data.data.type; WcsActionAddress? WcsActionAddresses = wcsActionAddressService.GetList(actionAddressQuery).FirstOrDefault(); if(WcsActionAddresses!=null && data.data.type == 1) { s7.Write(WcsActionAddresses.Address, data.data.startPosition); }else if(WcsActionAddresses != null && data.data.type == 2) { s7.Write(WcsActionAddresses.Address, data.data.endPosition); } s7.ConnectClose(); //插入回调 TaskCallback taskCallbackData = new TaskCallback(data.url, WcsActionType.GetSend.ToString(), EnumHelper.GetDescription(WcsActionType.GetSend), data.taskId, data.taskNodeId); //taskCallbackData = setCallBackValue(CcsActionAddresses, taskCallbackData); await taskCallbackService.CreateOrUpdateAndCache(taskCallbackData); Log.Instance.WriteLogAdd(EnumHelper.GetDescription(WcsActionType.GetSend) + "取放成功===>>" + JsonConvert.SerializeObject(data) , EnumHelper.GetDescription(WcsActionType.GetSend)); return responseData; } catch (Exception ex) { Log.Instance.WriteLogAdd(WcsActionType.GetSend + "取异常===>>" + ex.Message + JsonConvert.SerializeObject(data), EnumHelper.GetDescription(WcsActionType.GetSend)); responseData.IsSuccess = false; return responseData; } } } }