using System; using System.Collections.Generic; using System.DirectoryServices; using System.Linq; using System.Text; using System.Threading.Tasks; using AutoMapper; using SqlSugar; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_ITelescopicService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_TelescopicService { public class ParametersService : ServiceBase>, IParametersService { public IRepository Repository => BaseDal; private readonly IRepository _user; public ParametersService(IRepository BaseDal, IRepository user) : base(BaseDal) { _user = user; } /// /// 自动控制伸缩杆的伸出和缩回速度 /// /// 伸/出状态 /// 用户账号 /// public WebResponseContent automation(string ExtendedState, string account) { try { var loginer = _user.QueryData(x => x.UserName == account).FirstOrDefault(); if (loginer == null) return new WebResponseContent { Status = false, Message = "登录用户不存在" }; // 设备编号规则是按部门编号依次为 SSG001~SSG010 string liftDeviceCode = $"SSG{(loginer.Dept_Id * 2 - 1):D3}"; string rightDeviceCode = $"SSG{(loginer.Dept_Id * 2):D3}"; OtherDevice liftDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == liftDeviceCode); OtherDevice rightDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightDeviceCode); if (liftDevice == null || rightDevice == null) { return new WebResponseContent { Status = false, Message = $"设备 {liftDeviceCode} 或 {rightDeviceCode} 未找到" }; } if (liftDevice.Communicator == null || rightDevice.Communicator == null) { return new WebResponseContent { Status = false, Message = "设备通讯未初始化" }; } //找到Dt_Parameters中的最新一条数据 var para = BaseDal.QueryData().OrderByDescending(x => x.CreateDate).FirstOrDefault(); if (para == null) return new WebResponseContent { Status = false, Message = "未找到参数配置" }; int ext = (int)para.ExtendSpeed; int ret = (int)para.RetractionSpeed; if (ExtendedState == "伸出") { liftDevice.Communicator.Write("D500", ext); liftDevice.Communicator.Write("M100", true); rightDevice.Communicator.Write("D500", ext); rightDevice.Communicator.Write("M100", true); Console.WriteLine($"伸缩杆伸出 {ext}"); } else if (ExtendedState == "缩回") { liftDevice.Communicator.Write("D501", ret); liftDevice.Communicator.Write("M101", true); rightDevice.Communicator.Write("D501", ret); rightDevice.Communicator.Write("M101", true); Console.WriteLine($"伸缩杆缩回 {ret}"); } else { return new WebResponseContent { Status = false, Message = "未知的操作命令" }; } return new WebResponseContent { Status = true, Message = "成功" }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = ex.Message }; } } public WebResponseContent ManualOperation(string position, string ExtendedState,string account) { try { var loginer = _user.QueryData(x => x.UserName == account).FirstOrDefault(); if (loginer == null) return new WebResponseContent { Status = false, Message = "用户不存在" }; var devices = GetDevicesByDeptId((int)loginer.Dept_Id); if (devices == null) return new WebResponseContent { Status = false, Message = "设备未找到" }; var para = BaseDal.QueryData().OrderByDescending(x => x.CreateDate).FirstOrDefault(); if (para == null) return new WebResponseContent { Status = false, Message = "参数未配置" }; int ext = (int)para.ExtendSpeed; int ret = (int)para.RetractionSpeed; if (position == "左" && ExtendedState == "伸出") { devices.Value.left.Communicator.Write("D500", ext); devices.Value.left.Communicator.Write("M100", true); } else if (position == "左" && ExtendedState == "缩回") { devices.Value.left.Communicator.Write("D501", ret); devices.Value.left.Communicator.Write("M101", true); } else if (position == "右" && ExtendedState == "伸出") { devices.Value.right.Communicator.Write("D500", ext); devices.Value.right.Communicator.Write("M100", true); } else if (position == "右" && ExtendedState == "缩回") { devices.Value.right.Communicator.Write("D501", ret); devices.Value.right.Communicator.Write("M101", true); } else { return new WebResponseContent { Status = false, Message = "状态参数错误" }; } return new WebResponseContent { Status = true, Message = "成功" }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = ex.Message }; } } /// /// 获取设备号 /// /// /// public (OtherDevice left, OtherDevice right)? GetDevicesByDeptId(int deptId) { // 左设备号:1 -> 001,2 -> 003,3 -> 005... int baseCode = 1 + (deptId - 1) * 2; string leftCode = $"SSG{baseCode.ToString("D3")}"; string rightCode = $"SSG{(baseCode + 1).ToString("D3")}"; var left = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == leftCode); var right = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightCode); if (left == null || right == null) return null; return (left, right); } } }