using Entity.Api.Req; using Entity.Base; using Entity.DbModel.Station; using Entity.Dto.Req; using HybirdFrameworkCore.Autofac.Attribute; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using Repository.Station; using Repository.System; using Service.Mgr; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using HybirdFrameworkCore.Entity; using log4net; using Service.Execute; using Service.Execute.Api; using Service.Plc.Client; namespace Service.Station { [Scope("SingleInstance")] public class BinInfoService : BaseServices { private static readonly ILog Log = LogManager.GetLogger(typeof(BinInfoService)); private BinInfoRepository _binInfoRepository; public PlcTaskMgr PlcTaskMgr { get; set; } public BinInfoService(BinInfoRepository dal) { _binInfoRepository = dal; BaseDal = dal; } /// /// 充电仓查询 /// /// /// public async Task> ChargePositionQuery(ChargePositionQueryReq input) { RefAsync total = 0; var items = await _binInfoRepository.QueryPageAsync( entity => true, false, entity => true, !string.IsNullOrEmpty(input.No), u => u.No == input.No, !string.IsNullOrEmpty(input.Name), u => u.Name == input.Name, u => u.Id, input.PageNum, input.PageSize, total ); return new PageResult() { PageNum = input.PageNum, PageSize = input.PageSize, ToTal = total, Rows = items, }; } /// /// 消防移仓 /// /// /// public Result FireProtectionRelocation(string entrySelection) { BinInfo? queryByClause = _binInfoRepository.QueryByClause(i => i.No.Equals(entrySelection) && i.Exists == 1); if (queryByClause == null) { return Result.Fail("无电池"); } if (queryByClause.ChargeStatus == 1) { if (!StopCharge(entrySelection)) { return Result.Fail("停止充电失败"); } } var result = PlcMgr.DistributeTask(0, ushort.Parse(entrySelection), 5); if (!result) { return Result.Fail(); } //读取消防任务状态 result = PlcMgr.ReadTaskStatus(5); if (!result) { return Result.Fail(); } result = PlcMgr.HoldOn(3); if (!result) { return Result.Fail(); } Log.Info($"FireProtectionRelocation task Manual removeBinNo={entrySelection} "); return PlcTaskMgr.QueryPlcTask(5, 1100, 1101) ? Result.Success() : Result.Fail(); } private bool StopCharge(string binNo) { bool success = false; int count = 0; while (!success) { ChargeApi.StopCharge(binNo); BinInfo? bin = _binInfoRepository.QueryByClause(i => i.No.Equals(binNo)); if (bin.ChargeStatus == 4) { success = true; } Thread.Sleep(1000); count++; if (count > 10) { Log.Info($"StopCharge timeout"); return false; } } return true; } } }