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<Dt_Parameters, IRepository<Dt_Parameters>>, IParametersService
|
{
|
public IRepository<Dt_Parameters> Repository => BaseDal;
|
private readonly IRepository<Sys_User> _user;
|
|
public ParametersService(IRepository<Dt_Parameters> BaseDal, IRepository<Sys_User> user) : base(BaseDal)
|
{
|
_user = user;
|
}
|
|
|
/// <summary>
|
/// 自动控制伸缩杆的伸出和缩回速度
|
/// </summary>
|
/// <param name="ExtendedState">伸/出状态</param>
|
/// <param name="account">用户账号</param>
|
/// <returns></returns>
|
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<int>("D500", ext);
|
liftDevice.Communicator.Write<bool>("M100", true);
|
rightDevice.Communicator.Write<int>("D500", ext);
|
rightDevice.Communicator.Write<bool>("M100", true);
|
Console.WriteLine($"伸缩杆伸出 {ext}");
|
}
|
else if (ExtendedState == "缩回")
|
{
|
liftDevice.Communicator.Write<int>("D501", ret);
|
liftDevice.Communicator.Write<bool>("M101", true);
|
rightDevice.Communicator.Write<int>("D501", ret);
|
rightDevice.Communicator.Write<bool>("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 };
|
}
|
}
|
|
|
|
|
/// <summary>
|
/// 手动控制,伸缩杆的缩回和伸出速度
|
/// </summary>
|
/// <param name="position">伸缩杆的位置(左右)</param>
|
/// <param name="ExtendedState">伸/缩状态</param>
|
/// <returns></returns>
|
///
|
//public WebResponseContent ManualOperation(string position, string ExtendedState)
|
//{
|
// try
|
// {
|
// //俩个plc左右各一个
|
// OtherDevice liftotherDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == "SSG001");
|
// OtherDevice rightotherDevice = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == "SSG002");
|
// //找到Dt_Parameters中的最新一条数据
|
// var para = BaseDal.QueryData().OrderBy(x => x.CreateDate).FirstOrDefault();
|
// int ext = (int)para.ManualExtend;//自动伸出速度
|
// int ret = (int)para.ManualRetraction;//自动缩回速度
|
// if (position == "左" && ExtendedState == "伸出")
|
// {
|
// var values = liftotherDevice.Communicator.Write<int>("D500", ext);//速度
|
// var button = liftotherDevice.Communicator.Write<bool>("M100", true);//伸出按钮
|
// Console.WriteLine($"{position}伸缩杆伸出{ext}");
|
// }
|
// if (position == "左" && ExtendedState == "缩回")
|
// {
|
// var values = liftotherDevice.Communicator.Write<int>("D501", ret);
|
//var button = liftotherDevice.Communicator.Write<bool>("M101", true);//缩回按钮
|
//Console.WriteLine($"{position}伸缩杆缩回{ret}");
|
// }
|
// if (position == "右" && ExtendedState == "伸出")
|
// {
|
// var values = rightotherDevice.Communicator.Write<int>("D500", ext);//速度
|
// var button = rightotherDevice.Communicator.Write<bool>("M100", true);//伸出按钮
|
// Console.WriteLine($"{position}伸缩杆伸出{ext}");
|
// }
|
// if (position == "右" && ExtendedState == "缩回")
|
// {
|
// var values = rightotherDevice.Communicator.Write<int>("D501", ret);
|
// var button = rightotherDevice.Communicator.Write<bool>("M101", true);//缩回按钮
|
// Console.WriteLine($"{position}伸缩杆缩回{ret}");
|
// }
|
// 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<int>("D500", ext);
|
devices.Value.left.Communicator.Write<bool>("M100", true);
|
}
|
else if (position == "左" && ExtendedState == "缩回")
|
{
|
devices.Value.left.Communicator.Write<int>("D501", ret);
|
devices.Value.left.Communicator.Write<bool>("M101", true);
|
}
|
else if (position == "右" && ExtendedState == "伸出")
|
{
|
devices.Value.right.Communicator.Write<int>("D500", ext);
|
devices.Value.right.Communicator.Write<bool>("M100", true);
|
}
|
else if (position == "右" && ExtendedState == "缩回")
|
{
|
devices.Value.right.Communicator.Write<int>("D501", ret);
|
devices.Value.right.Communicator.Write<bool>("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 };
|
|
}
|
}
|
|
|
/// <summary>
|
/// 获取设备号
|
/// </summary>
|
/// <param name="deptId"></param>
|
/// <returns></returns>
|
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);
|
}
|
|
}
|
|
}
|