using System; using System.Collections.Generic; using System.Threading.Tasks; using Yitter.IdGenerator; using Znyc.Admin.Commons.Cache; using Znyc.Admin.Commons.Const; using Znyc.Admin.Commons.Entitys; using Znyc.Admin.Commons.Enums; using Znyc.Admin.Commons.Extensions; using Znyc.Admin.Commons.Mapping; using Znyc.Admin.Commons.Pages; using Znyc.Admin.Commons.Services; using Znyc.Admin.MongoDb.Core.Collection; using Znyc.Admin.MongoDb.Core.IRepositorys; using Znyc.Admin.Security.Dtos; using Znyc.Admin.Security.Entitys; using Znyc.Admin.Security.IRepositories; using Znyc.Admin.Security.IServices; namespace Znyc.Admin.Security.Services { /// /// /// public class VehicleService : BaseService, IVehicleService { private readonly IVehicleRepository _vehicleRepository; private readonly IGpsRealTimeRepository _gpsRealTimeRepository; private readonly ICompanyRepository _companyRepository; private readonly IVehicleGroupRepository _vehicleGroupRepository; private readonly ICacheService _cacheService; public VehicleService(IVehicleRepository repository, IGpsRealTimeRepository gpsRealTimeRepository, ICompanyRepository companyRepository, IVehicleGroupRepository vehicleGroupRepository, ICacheService cacheService ) : base(repository) { _vehicleRepository = repository; _gpsRealTimeRepository = gpsRealTimeRepository; _companyRepository = companyRepository; _vehicleGroupRepository = vehicleGroupRepository; _cacheService = cacheService; } /// /// 分页查询车辆信息 /// /// /// public async Task> FindWithPagerSearchAsync(SearchVehicleModel search) { bool order = search.Order == "asc" ? false : true; string where = GetDataPrivilege(false); if (!string.IsNullOrEmpty(search.Keywords)) { @where += string.Format(" and (VehicleCode like '%{0}%' or SimNo like '%{0}%' or VehiclePlate like '%{0}%' or ImeiNo like '%{0}%' )", search.Keywords); } if (search.CompanyId > 0) { @where += string.Format(" and CompanyId={0}", search.CompanyId); } if (search.Status > (int)CommonStatus.DELETED) { @where += string.Format(" and Status={0}", search.Status); } if (!string.IsNullOrEmpty(search.StartTime)) { @where += " and CreatedTime >='" + search.StartTime + " 00:00:00'"; } if (!string.IsNullOrEmpty(search.EndTime)) { @where += " and CreatedTime <='" + search.EndTime + " 23:59:59'"; } PagerInfo pagerInfo = new PagerInfo { CurrenetPageIndex = search.CurrenetPageIndex, PageSize = search.PageSize }; List list = await repository.FindWithPagerAsync(where, pagerInfo, "ImeiNo", order); List vehicleOutputDto = list.MapTo(); foreach (var item in vehicleOutputDto) { item.TerminalTypeName = EnumExtensions.GetDescription(typeof(TerminalTypeEnum), (int)TerminalTypeEnum.BSJKGM_08) ?? CommonConst.Unknown_TerminalType; item.CardTypeName = EnumExtensions.GetDescription(typeof(CardTypeEnum), (int)CardTypeEnum.Beijing_Mobile) ?? CommonConst.Unknown_CardType; } PageResult pageResult = new PageResult { CurrentPage = pagerInfo.CurrenetPageIndex, Items = vehicleOutputDto, ItemsPerPage = pagerInfo.PageSize, TotalItems = pagerInfo.RecordCount }; return pageResult; } /// /// 新增车辆信息 /// /// /// public async Task InsertAsync(Vehicle entity) { CommonResult result = new CommonResult(); //1.新增车辆 //2.初始化gps信息 VehicleGroup vehicleGroup = await _vehicleGroupRepository.GetWhereAsync(" CompanyId=" + entity.CompanyId); string where = string.Format(@"(CompanyId={0} and VehicleCode='{1}') or (VehiclePlate='{2}' AND Status=1)", entity.CompanyId, entity.VehicleCode, entity.VehiclePlate); Vehicle car = await _vehicleRepository.GetWhereAsync(where); if (car != null) { result.Success = false; result.ErrMsg = ReturnConst.Vehicle_Repeat; return result; } string key = string.Format(@" (SimNo='{0}' or ImeiNo='{1}') AND Status=1", entity.SimNo, entity.ImeiNo); Vehicle repeatVehicle = await _vehicleRepository.GetWhereAsync(key); if (repeatVehicle != null) { result.Success = false; result.ErrMsg = string.Format(ReturnConst.Vehicle_Equipment_Repeat, repeatVehicle.VehiclePlate); return result; } entity.Id = YitIdHelper.NextId(); entity.VehicleType = 1; entity.VehicleGroup = vehicleGroup.Id; entity.TerminalNo = entity.ImeiNo; entity.AgreementNo = entity.AgreementNo ?? ""; entity.DriverPhone = ""; entity.VehicleDriver = 0; entity.ContactPerson = ""; entity.ContactPhone = ""; entity.Acc = 0; entity.Work = 0; entity.GpsState = 0; entity.IsActivate = true; entity.IsGps = true; entity.Status = (int)CommonStatus.ENABLE; entity.GpsTime = new DateTime(1990, 1, 1); entity.IsOverspeedAlarm = false; entity.Overspeed = CommonConst.DEFAULT_OVERSPEED; entity.Sort = entity.Sort; await _vehicleRepository.InsertAsync(entity); Vehicle vehicle = await _vehicleRepository.GetWhereAsync(" Id=" + entity.Id); Company company = await _companyRepository.GetWhereAsync(" Id=" + entity.CompanyId); GpsRealTime gpsRealTime = new GpsRealTime { VehicleId = vehicle.Id, VehicleCode = vehicle.VehicleCode, VehiclePlate = vehicle.VehiclePlate, VehicleDriver = vehicle.VehicleDriver, DriverPhone = vehicle.DriverPhone, Status = (int)CommonStatus.ENABLE, GpsState = 0, GpsTime = Convert.ToDateTime("1900-01-01 8:00:00.000"), //new DateTime(1990, 1, 1), RecTime = Convert.ToDateTime("1900-01-01 8:00:00.000"), //new DateTime(1990, 1, 1), Longitude = company.Longitude, Latitude = company.Latitude, Direct = 0, Speed = 0, Acc = 0, Address = "", DurationTime = "", AccDurationTime = "", SimNo = vehicle.SimNo, CompanyId = company.Id, TerminalNo = vehicle.TerminalNo, ModifiedTime = DateTime.Now, CreatedTime = DateTime.Now }; await _gpsRealTimeRepository.InsertGpsRealTime(gpsRealTime); result.Success = true; //清除车辆列表缓存 await _cacheService.RemoveAsync(CacheKey.CACHE_KEY_VehicleByCompanyId + $"{company.Id}"); return result; } /// /// 更新车辆信息 /// /// /// public async Task UpdateAsync(Vehicle tinfo) { CommonResult result = new CommonResult(); Vehicle info = await repository.GetAsync(tinfo.Id); GpsRealTime gpsRealTime = await _gpsRealTimeRepository.GetGpsRealTime(info.Id); if (!(info?.Id > 0) || gpsRealTime == null) { result.Success = false; result.ErrMsg = ReturnConst.Vehicle_Not_Exist; return result; } string where = string.Format(@" (SimNo='{0}' or ImeiNo='{1}') AND Status=1 AND Id !={2}", tinfo.SimNo, tinfo.ImeiNo, tinfo.Id); Vehicle repeatVehicle = await _vehicleRepository.GetWhereAsync(where); if (repeatVehicle != null) { result.Success = false; result.ErrMsg = string.Format(ReturnConst.Vehicle_Equipment_Repeat, repeatVehicle.VehiclePlate); return result; } info.VehicleCode = tinfo.VehicleCode; info.VehiclePlate = tinfo.VehiclePlate; info.CardType = tinfo.CardType; info.TerminalType = tinfo.TerminalType; info.SimNo = tinfo.SimNo; info.ImeiNo = tinfo.ImeiNo; info.TerminalNo = tinfo.ImeiNo; info.OpenTime = tinfo.OpenTime; info.ExpireTime = tinfo.ExpireTime; info.ModifiedUserId = tinfo.ModifiedUserId; info.ModifiedTime = tinfo.ModifiedTime; info.Sort = tinfo.Sort; await repository.UpdateAsync(info, tinfo.Id).ConfigureAwait(false); gpsRealTime.VehicleCode = tinfo.VehicleCode; gpsRealTime.VehiclePlate = tinfo.VehiclePlate; gpsRealTime.SimNo = tinfo.SimNo; gpsRealTime.TerminalNo = info.TerminalNo; gpsRealTime.Status = info.Status; result.Success = await _gpsRealTimeRepository.UpdateGpsRealTime(gpsRealTime); await ClearVelicleCacheAsync(info.Id, info.CompanyId); return result; } /// /// 修改车辆状态 /// /// /// 状态 /// public async Task UpdateStatusAsync(long id, int status) { CommonResult result = new CommonResult(); Vehicle info = await repository.GetAsync(id); GpsRealTime gpsRealTime = await _gpsRealTimeRepository.GetGpsRealTime(id); if (!(info?.Id > 0) || gpsRealTime == null) { result.Success = false; result.ErrMsg = ReturnConst.Vehicle_Not_Exist; return result; } info.Status = status; gpsRealTime.Status = status; await repository.UpdateAsync(info, info.Id).ConfigureAwait(false); result.Success = await _gpsRealTimeRepository.UpdateGpsRealTime(gpsRealTime); await ClearVelicleCacheAsync(info.Id, info.CompanyId); return result; } /// /// 修改车辆是否激活 /// /// /// 状态 /// public async Task UpdateIsActivateAsync(long id, bool isActivate) { CommonResult result = new CommonResult(); Vehicle info = await repository.GetAsync(id); if (!(info?.Id > 0)) { result.Success = false; result.ErrMsg = ReturnConst.Vehicle_Not_Exist; return result; } info.IsActivate = isActivate; await repository.UpdateAsync(info, info.Id).ConfigureAwait(false); await ClearVelicleCacheAsync(info.Id, info.CompanyId); result.Success = true; return result; } /// /// 修改车辆是否开启GPS /// /// /// 状态 /// public async Task UpdateIsGpsAsync(long id, bool isGps) { CommonResult result = new CommonResult(); Vehicle info = await repository.GetAsync(id); if (!(info?.Id > 0)) { result.Success = false; result.ErrMsg = ReturnConst.Vehicle_Not_Exist; return result; } info.IsGps = isGps; await repository.UpdateAsync(info, info.Id).ConfigureAwait(false); result.Success = true; await ClearVelicleCacheAsync(info.Id, info.CompanyId); return result; } /// /// /// /// /// /// public async Task ClearVelicleCacheAsync(long velicId, long companyId) { //清除缓存 await _cacheService.RemoveAsync(CacheKey.CACHE_KEY_VehicleByCompanyId + $"{companyId}"); await _cacheService.RemoveAsync(CacheKey.CACHE_KEY_Vehicle + $"{velicId}"); } } }