| | |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | | using WIDESEAWCS_Core.UnitOfWork; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_Model.Models; |
| | | |
| | |
| | | /// <summary> |
| | | /// 机械手状态 SqlSugar 仓储实现 |
| | | /// </summary> |
| | | public class RobotStateRepository : IUnitOfWork, IRobotStateRepository |
| | | public class RobotStateRepository : RepositoryBase<Dt_RobotState>, IRobotStateRepository |
| | | { |
| | | private readonly IUnitOfWorkManage _unitOfWork; |
| | | private readonly SqlSugarClient _db; |
| | | |
| | | public RobotStateRepository(IUnitOfWorkManage unitOfWork) |
| | | public RobotStateRepository(IUnitOfWorkManage unitOfWork) : base(unitOfWork) |
| | | { |
| | | _unitOfWork = unitOfWork; |
| | | _db = unitOfWork.GetDbClient(); |
| | | } |
| | | |
| | | public Dt_RobotState? GetByIp(string ipAddress) |
| | | { |
| | | return _db.Queryable<Dt_RobotState>() |
| | | return Db.Queryable<Dt_RobotState>() |
| | | .Where(x => x.IPAddress == ipAddress) |
| | | .First(); |
| | | } |
| | |
| | | var newState = new Dt_RobotState |
| | | { |
| | | IPAddress = ipAddress, |
| | | Version = DateTime.UtcNow.Ticks, |
| | | RobotCraneJson = JsonConvert.SerializeObject(robotCrane), |
| | | CreateTime = DateTime.Now, |
| | | UpdateTime = DateTime.Now |
| | | CreateDate = DateTime.Now, |
| | | ModifyDate = DateTime.Now |
| | | }; |
| | | |
| | | _db.Insertable(newState).ExecuteCommand(); |
| | | Db.Insertable(newState).ExecuteCommand(); |
| | | return newState; |
| | | } |
| | | |
| | | public bool TryUpdate(string ipAddress, Dt_RobotState newState, byte[] expectedRowVersion) |
| | | public bool TryUpdate(string ipAddress, Dt_RobotState newState, long expectedVersion) |
| | | { |
| | | newState.UpdateTime = DateTime.Now; |
| | | newState.ModifyDate = DateTime.Now; |
| | | |
| | | var affectedRows = _db.Updateable<Dt_RobotState>(newState) |
| | | .Where(x => x.IPAddress == ipAddress) |
| | | .WhereRowVersion(x => x.RowVersion, expectedRowVersion) |
| | | // 乐观锁:WHERE IPAddress = @ip AND Version = @expectedVersion,版本匹配才更新 |
| | | var affectedRows = Db.Updateable<Dt_RobotState>(newState) |
| | | .Where(x => x.IPAddress == ipAddress && x.Version == expectedVersion) |
| | | .ExecuteCommand(); |
| | | |
| | | return affectedRows > 0; |
| | |
| | | var state = new RobotSocketState |
| | | { |
| | | IPAddress = entity.IPAddress, |
| | | Version = BitConverter.ToInt64(entity.RowVersion.Length >= 8 ? entity.RowVersion.Take(8).ToArray() : new byte[8], 0), |
| | | Version = entity.Version, |
| | | IsEventSubscribed = entity.IsEventSubscribed, |
| | | RobotRunMode = entity.RobotRunMode, |
| | | RobotControlMode = entity.RobotControlMode, |
| | |
| | | |
| | | return entity; |
| | | } |
| | | |
| | | public SqlSugarClient GetDbClient() => _db; |
| | | |
| | | public void BeginTran() => _unitOfWork.BeginTran(); |
| | | |
| | | public void CommitTran() => _unitOfWork.CommitTran(); |
| | | |
| | | public void RollbackTran() => _unitOfWork.RollbackTran(); |
| | | } |
| | | } |