You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

155 lines
6.7 KiB

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Yitter.IdGenerator;
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
{
/// <summary>
///
/// </summary>
public class VehicleChangeService : BaseService<VehicleChange, VehicleChangeOutputDto, long>, IVehicleChangeService
{
private readonly IVehicleChangeRepository _vehicleChangeRepository;
private readonly IVehicleRepository _vehicleRepository;
private readonly IGpsRealTimeRepository _gpsRealTimeRepository;
private readonly ICompanyRepository _companyRepository;
private readonly IVehicleGroupRepository _vehicleGroupRepository;
private readonly IDictionaryService _dcDictionaryService;
public VehicleChangeService(IVehicleChangeRepository vehicleChangeRepository,
IVehicleRepository vehicleRepository,
IGpsRealTimeRepository gpsRealTimeRepository,
ICompanyRepository companyRepository,
IVehicleGroupRepository vehicleGroupRepository,
IDictionaryService dcDictionaryService
) : base(vehicleChangeRepository)
{
_vehicleChangeRepository = vehicleChangeRepository;
_vehicleRepository = vehicleRepository;
_gpsRealTimeRepository = gpsRealTimeRepository;
_companyRepository = companyRepository;
_vehicleGroupRepository = vehicleGroupRepository;
_dcDictionaryService = dcDictionaryService;
}
/// <summary>
/// ·ÖÒ³²éѯ»»×°¼Ç¼
/// </summary>
/// <param name="search"></param>
/// <returns></returns>
public async Task<PageResult<VehicleChangeOutputDto>> FindWithPagerSearchAsync(SearchVehicleChangeModel search)
{
bool order = search.Order == "asc" ? false : true;
string where = GetDataPrivilege(false);
@where += string.Format(@" and VehicleId = {0}", search.VehicleId);
if (!string.IsNullOrEmpty(search.Keywords))
{
@where += string.Format(" and (ImeiNo like '%{0}%' or SimNo like '%{0}%' or TerminalNo like '{0}')", search.Keywords);
}
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<VehicleChange> list = await _vehicleChangeRepository.FindWithPagerAsync(where, pagerInfo, search.Sort, order);
List<VehicleChangeOutputDto> outputDtos = list.MapTo<VehicleChangeOutputDto>();
foreach (var item in outputDtos)
{
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<VehicleChangeOutputDto> pageResult = new PageResult<VehicleChangeOutputDto>
{
CurrentPage = pagerInfo.CurrenetPageIndex,
Items = outputDtos,
ItemsPerPage = pagerInfo.PageSize,
TotalItems = pagerInfo.RecordCount
};
return pageResult;
}
/// <summary>
/// ÐÂÔö³µÁ¾»»×°¼Ç¼
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public async Task<CommonResult> InsertAsync(VehicleChange entity)
{
CommonResult result = new CommonResult();
Vehicle info = await _vehicleRepository.GetAsync(entity.VehicleId);
if (!(info?.Id > 0))
{
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}", entity.SimNo, entity.ImeiNo,entity.VehicleId);
Vehicle repeatVehicle = await _vehicleRepository.GetWhereAsync(where);
if (repeatVehicle != null)
{
result.Success = false;
result.ErrMsg = string.Format(ReturnConst.Vehicle_Equipment_Repeat, repeatVehicle.VehiclePlate);
return result;
}
VehicleChange vehicleChange = new VehicleChange()
{
Id = YitIdHelper.NextId(),
CompanyId = info.CompanyId,
VehicleId = info.Id,
CardType = info.CardType,
TerminalType = info.TerminalType,
SimNo = info.SimNo,
ImeiNo = info.ImeiNo,
AgreementNo=info.AgreementNo,
TerminalNo = info.TerminalNo,
ChangeTime = entity.ChangeTime,
UpdateTime = entity.UpdateTime,
Note = entity.Note,
CreatedTime = DateTime.Now,
CreatedUserId = entity.CreatedUserId
};
await _vehicleChangeRepository.InsertAsync(vehicleChange);
info.CardType = entity.CardType;
info.TerminalType = entity.TerminalType;
info.SimNo = entity.SimNo;
info.ImeiNo = entity.ImeiNo;
info.TerminalNo = entity.ImeiNo;
info.AgreementNo = entity.AgreementNo ?? "";
info.ModifiedUserId = entity.ModifiedUserId;
info.ModifiedTime = entity.ModifiedTime;
await _vehicleRepository.UpdateAsync(info, info.Id).ConfigureAwait(false);
GpsRealTime gpsRealTime = await _gpsRealTimeRepository.GetGpsRealTime(info.Id);
gpsRealTime.SimNo = entity.SimNo;
gpsRealTime.TerminalNo = info.TerminalNo;
gpsRealTime.Status = info.Status;
result.Success = await _gpsRealTimeRepository.UpdateGpsRealTime(gpsRealTime);
return result;
}
}
}