using AutoMapper; using LinqKit; using Ropin.Inspection.Common.Accessor.Interface; using Ropin.Inspection.Model; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Repository; using Ropin.Inspection.Repository.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Service { public class TprdProductService : ITprdProductService { private readonly ITprdProductRepository _repository; private readonly IMapper _mapper; private readonly IClaimsAccessor _claims; private readonly IUnitOfWork _unitOfWork; public TprdProductService(IClaimsAccessor claims, IUnitOfWork unitOfWork, ITprdProductRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; _claims = claims; _unitOfWork = unitOfWork; } public async Task CreateOneAsync(TprdProductViewModel viewModel) { var product = await GetConditionAsync(new TprdProductSearchModel { C_QRCode = viewModel.C_QRCode }); if (product.FirstOrDefault()!=null) { throw new Exception("二维码已被使用"); } var content = _mapper.Map<TPRD_Product>(viewModel); content.C_Code = Guid.NewGuid(); content.C_CreateBy = _claims.ApiUserId; content.D_CreateOn = DateTime.Now; content.I_Status = 1; bool bResult = false; try { _unitOfWork.BeginTransaction(); bResult = await _unitOfWork.RegisterNew(content); if (viewModel.IsDevice) { var device = new TDEV_Device { C_Code = Guid.NewGuid().ToString(), C_Name = viewModel.DeviceName, C_ProductCode = content.C_Code, C_MachineCode = viewModel.DeviceMachineCode, C_Remark = viewModel.DeviceRemark, C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = viewModel.DeviceStatus }; bResult = await _unitOfWork.RegisterNew(device); } } catch { _unitOfWork.Rollback(); throw; } finally { if (bResult) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); } //_repository.Create(content); //if (viewModel.IsDevice) //{ //} //var result = await _repository.SaveAsync(); //if (!result) //{ // throw new Exception("创建失败"); //} } public async Task<TprdProductViewModel> GetProductByQRCodeAsync(string QRCode, string storeCode) { return await _repository.GetProductByQRCodeAsync(QRCode, storeCode); //var result = await GetConditionAsync(new TprdProductSearchModel { C_QRCode = QRCode } ); //return result; } public async Task<IEnumerable<AllProductWithDevViewModel>> GetProductWithDataByAsync(TprdProductWithDataSearchModel searchModel) { return await _repository.GetProductWithDataByAsync(searchModel); } public async Task<IEnumerable<TprdDeviceByAreaViewModel>> GetDeviceByAreaCode(TprdDeviceByAreaSearchModel searchModel) { var result = _repository.GetDeviceByAreaCode(searchModel); return await Task.FromResult(result); } public async Task DeleteAsync(Guid id) { var content = await _repository.GetByIdAsync(id); if (content == null) { throw new Exception("数据库中没有此数据"); } //_repository.Delete(content); //var result = await _repository.SaveAsync(); content.C_LastUpdatedBy = _claims.ApiUserId; content.D_LastUpdatedOn = DateTime.Now; //content.C_Status = "0"; _repository.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("删除失败"); } } public async Task<IEnumerable<TprdProductViewModel>> GetAllAsync() { var pagedList = await _repository.GetAllAsync(); var contentDtoList = _mapper.Map<IEnumerable<TprdProductViewModel>>(pagedList.ToList()); return contentDtoList.ToList(); } public async Task<IEnumerable<TprdProductViewModel>> GetConditionAsync(TprdProductSearchModel searchModel) { var predicate = PredicateBuilder.New<TPRD_Product>(true);//查询条件,推荐后台使用这种方式灵活筛选 #region 添加条件查询 //predicate = predicate.And(i => i.I_Status.Equals(1)); if (!string.IsNullOrEmpty(searchModel.C_QRCode)) { predicate = predicate.And(i => i.C_QRCode.Equals(searchModel.C_QRCode)); } if (!string.IsNullOrEmpty(searchModel.C_SpotCode)) { predicate = predicate.And(i => i.C_SpotCode.Equals(searchModel.C_SpotCode)); } if (!string.IsNullOrEmpty(searchModel.C_AreaCode)) { predicate = predicate.And(i => i.C_AreaCode.Equals(searchModel.C_AreaCode)); } if (!string.IsNullOrEmpty(searchModel.C_StoreCode)) { predicate = predicate.And(i => i.C_StoreCode.Equals(searchModel.C_StoreCode)); } if (!string.IsNullOrEmpty(searchModel.C_DeviceCode)) { predicate = predicate.And(i => i.C_DeviceCode.Equals(searchModel.C_DeviceCode)); } if (!string.IsNullOrEmpty(searchModel.FilterCode)) { predicate = predicate.And(i => i.C_Code.ToString() !=searchModel.FilterCode); } #endregion var list = await _repository.GetPageAsync(predicate, "-D_CreateOn", searchModel.IsPagination, searchModel.PageIndex, searchModel.PageSize); searchModel.TotalCount = list.Totals; var dtoList = _mapper.Map<List<TPRD_Product>, List<TprdProductViewModel>>(list.Rows); return dtoList; } public async Task<int> GetDeviceCountByAsync(string storeCode) { Expression<Func<TPRD_Product, bool>> ex = i => (i.I_Status == 2 || i.I_Status == 1) && i.C_StoreCode == storeCode; var items = await _repository.GetByConditionAsync(ex); return items.Count(); } public async Task<int> GetAlertDeviceCountByAsync(string storeCode) { Expression<Func<TPRD_Product, bool>> ex = i => (i.I_Status == 2 || i.I_Status == 1) && i.I_IsAlarm == 0 && i.C_StoreCode == storeCode; var items = await _repository.GetByConditionAsync(ex); return items.Count(); } public async Task<IEnumerable<TprdProductViewModel>> GetAlertProductsByAsync(string storeCode) { //Expression<Func<TPRD_Product, bool>> ex = i => (i.I_Status == 2 || i.I_Status == 1) && i.I_IsAlarm == 0 && i.C_StoreCode == storeCode; //var items = await _repository.GetByConditionAsync(ex); //var dtoList = _mapper.Map<IEnumerable<TPRD_Product>, IEnumerable<TprdProductViewModel>>(items); //return dtoList; return await _repository.GetAlertProductsByAsync(storeCode); } public async Task<IEnumerable<TprdProductViewModel>> GetValiDateProductsByAsync(string storeCode) { //Expression<Func<TPRD_Product, bool>> ex = i => (i.I_Status == 2 || i.I_Status == 1) && i.D_ValiDate !=null && i.D_ValiDate > DateTime.Now && i.C_StoreCode == storeCode; //var items = await _repository.GetByConditionAsync(ex); //var dtoList = _mapper.Map<IEnumerable<TPRD_Product>, IEnumerable<TprdProductViewModel>>(items); //return dtoList; return await _repository.GetValiDateProductsByAsync(storeCode); } public async Task<TprdProductViewModel> GetAlertProductByCodeAsync(Guid code) { return await _repository.GetAlertProductByCodeAsync(code); } public async Task<TprdProductViewModel> GetValiDateProductByCodeAsync(Guid code) { return await _repository.GetValiDateProductByCodeAsync(code); } public async Task<TprdProductViewModel> GetByIdAsync(Guid id) { var content = await _repository.GetByIdAsync(id); var contentDto = _mapper.Map<TprdProductViewModel>(content); return contentDto; } public async Task UpdateAsync(Guid id, TprdProductUpdateModel updateModel) { var content = await _repository.GetByIdAsync(id); if (content == null) { throw new Exception("没有此数据"); } content.C_LastUpdatedBy = _claims.ApiUserId; content.D_LastUpdatedOn = DateTime.Now; _mapper.Map(updateModel, content, typeof(TprdProductUpdateModel), typeof(TPRD_Product)); _repository.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } public Task<int> UpdateOneAsync(TprdProductViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } public Task<bool> IsExistAsync(Guid id) { throw new NotImplementedException(); } public Task<IEnumerable<TprdProductViewModel>> GetByConditionAsync(Expression<Func<TprdProductViewModel, bool>> expression) { throw new NotImplementedException(); } } }