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(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 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> GetProductWithDataByAsync(TprdProductWithDataSearchModel searchModel) { return await _repository.GetProductWithDataByAsync(searchModel); } public async Task> 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> GetAllAsync() { var pagedList = await _repository.GetAllAsync(); var contentDtoList = _mapper.Map>(pagedList.ToList()); return contentDtoList.ToList(); } public async Task> GetConditionAsync(TprdProductSearchModel searchModel) { var predicate = PredicateBuilder.New(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>(list.Rows); return dtoList; } public async Task GetDeviceCountByAsync(string storeCode) { Expression> 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 GetAlertDeviceCountByAsync(string storeCode) { Expression> 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> GetAlertProductsByAsync(string storeCode) { //Expression> 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>(items); //return dtoList; return await _repository.GetAlertProductsByAsync(storeCode); } public async Task> GetValiDateProductsByAsync(string storeCode) { //Expression> 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>(items); //return dtoList; return await _repository.GetValiDateProductsByAsync(storeCode); } public async Task GetAlertProductByCodeAsync(Guid code) { return await _repository.GetAlertProductByCodeAsync(code); } public async Task GetValiDateProductByCodeAsync(Guid code) { return await _repository.GetValiDateProductByCodeAsync(code); } public async Task GetByIdAsync(Guid id) { var content = await _repository.GetByIdAsync(id); var contentDto = _mapper.Map(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 UpdateOneAsync(TprdProductViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } public Task IsExistAsync(Guid id) { throw new NotImplementedException(); } public Task> GetByConditionAsync(Expression> expression) { throw new NotImplementedException(); } } }