using AutoMapper; using Google.Protobuf; using LinqKit; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; 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 TmtnRepairOrderItemService : ITmtnRepairOrderItemService { private readonly ITmtnRepairOrderItemRepository _repository; private readonly IMapper _mapper; private readonly IClaimsAccessor _claims; private readonly ITmtnRepairOrderItemAppRepository _tmtnRepairOrderItemAppRepository; private readonly ITmtnRepairOrderRepository _tmtnRepairOrderRepository; private readonly ITsysUserRepository _tsysUserRepository; private readonly ITdevDevStoreRepository _tdevDevStoreRepository; private readonly InspectionDbContext _sqlDBContext; public TmtnRepairOrderItemService(IClaimsAccessor claims, InspectionDbContext sqlDBContext, ITmtnRepairOrderRepository tmtnRepairOrderRepository, ITdevDevStoreRepository tdevDevStoreRepository, ITsysUserRepository tsysUserRepository, ITmtnRepairOrderItemRepository repository, ITmtnRepairOrderItemAppRepository tmtnRepairOrderItemAppRepository, IMapper mapper) { _repository = repository; _tmtnRepairOrderItemAppRepository = tmtnRepairOrderItemAppRepository; _tmtnRepairOrderRepository = tmtnRepairOrderRepository; _mapper = mapper; _claims = claims; _tsysUserRepository = tsysUserRepository; _tdevDevStoreRepository = tdevDevStoreRepository; _sqlDBContext = sqlDBContext; } public async Task CreateOneAsync(TmtnRepairOrderItemViewModel viewModel) { var content = _mapper.Map(viewModel); content.C_ID = Guid.NewGuid().ToString(); content.C_CreateBy = _claims.ApiUserId; content.D_CreateOn = DateTime.Now; content.C_Status = "1"; _repository.Create(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } } 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 DeleteAsync(string code) { var items = await _repository.GetByConditionAsync(C => C.C_ID == code); var content = items.FirstOrDefault(); if (content == null) { throw new Exception("没有此数据"); } 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.Where(i => i.C_Status == "1").ToList()); return contentDtoList.ToList(); } public async Task CreateRepairOrderItemAsync(TmtnRepairOrderItemViewModel content) { var repairOrder = await _tmtnRepairOrderRepository.GetByIdAsync(content.C_RepairCode); if (repairOrder == null) { throw new Exception("没有此维修工单数据"); } repairOrder.C_LastUpdatedBy = _claims.ApiUserId; repairOrder.D_LastUpdatedOn = DateTime.Now; repairOrder.C_Status = "4"; _tmtnRepairOrderRepository.Update(repairOrder); var result = await _tmtnRepairOrderRepository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } var record = _mapper.Map(content); record.C_ID = Guid.NewGuid().ToString(); record.C_CreateBy = _claims.ApiUserId; record.D_CreateOn = DateTime.Now; record.C_Status = "4"; if (null != content.FilePaths && content.FilePaths.Any()) { foreach (string imgPath in content.FilePaths) { await _tmtnRepairOrderItemAppRepository.CreateOneAsync(new TMTN_RepairOrderItemApp { C_ID = Guid.NewGuid().ToString(), C_RepairOrderItemCode = record.C_ID, C_Name = "维修记录", C_Url = imgPath, //C_Type = "1", C_Remark = "", C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = "1" }); var resultItemImage = await _tmtnRepairOrderItemAppRepository.SaveAsync(); if (!resultItemImage) { throw new Exception("创建失败"); } } } _repository.Create(record); result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } } public async Task> GetConditionAsync(TmtnRepairOrderItemSearchModel searchModel) { var predicate = PredicateBuilder.New(true);//查询条件,推荐后台使用这种方式灵活筛选 #region 添加条件查询 //predicate = predicate.And(i => i.C_Status.Equals("1")); if (!string.IsNullOrEmpty(searchModel.C_RepairCode)) { predicate = predicate.And(i => i.C_RepairCode.Equals(searchModel.C_RepairCode)); } if (!string.IsNullOrEmpty(searchModel.C_ID)) { predicate = predicate.And(i => i.C_ID.Equals(searchModel.C_ID)); } #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); foreach (var item in dtoList) { var devStoreList = await _tmtnRepairOrderItemAppRepository.GetByConditionAsync(x => x.C_RepairOrderItemCode == item.C_ID); item.FilePaths = devStoreList.Select(x=>x.C_Url).ToList(); //item.DevOpsRecordSolidWaste = JsonConvert.DeserializeObject(item.C_Remark); } return dtoList; } public async Task GetRepairOrderItemAsync(string devId,string repairId) { var vm = new TmtnRepairOrderItemDetailViewMode(); var sysUsers = _sqlDBContext.GetDbSet().AsNoTracking().Where(x => x.C_Status == "1"); var repairOrderItemSet = _sqlDBContext.GetDbSet(); var orderItem_group_datas = await (from orderItem in repairOrderItemSet.AsNoTracking().Where(t => t.C_RepairCode == repairId) join user in sysUsers on orderItem.C_CreateBy equals user.C_UserID //orderby orderItem.D_CreateOn ascending group orderItem by new { orderItem.C_ID, orderItem.C_Remark, orderItem.C_RepairRecord, orderItem.C_Status, orderItem.C_Url, orderItem.D_CreateOn, user.C_Name } into sg select new RepairOrderItemViewMode { C_ID = sg.Key.C_ID, D_CreateOn = sg.Key.D_CreateOn, C_Remark = sg.Key.C_Remark, C_Url = sg.Key.C_Url, C_Status = sg.Key.C_Status, C_RepairRecord = sg.Key.C_RepairRecord, CreateUserName = sg.Key.C_Name, }).OrderBy(x=>x.D_CreateOn).ToListAsync(); vm.RepairOrderRecordItems = orderItem_group_datas; var store_dev =await (from devStore in _sqlDBContext.GetDbSet().AsNoTracking().Where(t => t.C_ID == devId) join store in _sqlDBContext.GetDbSet().AsNoTracking() on devStore.C_StoreCode equals store.C_ID.ToString() select new { store.C_Logo, store.C_LicenseCode, store.C_Name, devStore.D_CreateOn }).FirstOrDefaultAsync(); vm.StoreName = store_dev.C_Name; vm.DevCreateOn = store_dev.D_CreateOn; vm.C_Logo = store_dev.C_Logo; var devUserName = await (from user in sysUsers join userRole in _sqlDBContext.GetDbSet().AsNoTracking() on user.C_UserID equals userRole.C_UserCode join role in _sqlDBContext.GetDbSet().AsNoTracking().Where(t => t.C_LicenseCode == store_dev.C_LicenseCode && t.C_Status == "1") on userRole.C_RoleCode equals role.C_Code select new { RoleName = role.C_Name, user.C_Name, user.C_Mobile }).ToListAsync(); devUserName.ToList().ForEach(x => { if (x.RoleName.Contains("设备管理员")) vm.DevManager += x.C_Name + " " + x.C_Mobile + " "; if (x.RoleName.Contains("设备运维员")) vm.DevOpser += x.C_Name + " " + x.C_Mobile + " "; }); return vm; } //public async Task> GetRepairOrderItemWithImageAsync(TmtnRepairOrderItemSearchModel searchModel) //{ // var predicate = PredicateBuilder.New(true);//查询条件,推荐后台使用这种方式灵活筛选 // #region 添加条件查询 // //predicate = predicate.And(i => i.C_Status.Equals("1")); // if (!string.IsNullOrEmpty(searchModel.C_DevStoreCode)) // { // predicate = predicate.And(i => i.C_DevStoreCode.Equals(searchModel.C_DevStoreCode)); // } // if (!string.IsNullOrEmpty(searchModel.C_ID)) // { // predicate = predicate.And(i => i.C_ID.Equals(searchModel.C_ID)); // } // if (!string.IsNullOrEmpty(searchModel.C_Name)) // { // predicate = predicate.And(i => i.C_Name.Contains(searchModel.C_Name)); // } // #endregion // var list = await _repository.GetPageAsync(predicate, "C_Name,-D_CreateOn", searchModel.IsPagination, searchModel.PageIndex, searchModel.PageSize); // searchModel.TotalCount = list.Totals; // var dtoList = _mapper.Map, List>(list.Rows); // var devStoreList = await _tdevDevStoreRepository.GetByConditionAsync(x => x.C_ID == searchModel.C_DevStoreCode); // var devStore = devStoreList.FirstOrDefault(); // IEnumerable userList = await _tsysUserRepository.GetAllAsync(); // var q = from a in dtoList // join b in userList // on a.C_CreateBy equals b.C_UserID // select new TmtnRepairOrderItemWithImageViewModel // { // C_ID = a.C_ID, // C_Name = a.C_Name, // C_DevStoreCode = a.C_DevStoreCode, // C_Url = a.C_Url, // D_CreateOn = a.D_CreateOn, // C_Status = a.C_Status, // C_CreateUserName = b.C_Name, // C_DevStoreName = devStore.C_Name // }; // return q; //} //public async Task> GetRecordsConditionAsync(TmtnRepairOrderItemRecordSearchModel searchModel) //{ // var content = await _repository.GetRecordsConditionAsync(searchModel); // return content; //} public async Task GetByIdAsync(Guid id) { var content = await _repository.GetByIdAsync(id); var contentDto = _mapper.Map(content); return contentDto; } public async Task UpdateAsync(string code, TmtnRepairOrderItemUpdateModel updateModel) { var items = await _repository.GetByConditionAsync(C => C.C_ID == code); var content = items.FirstOrDefault(); if (content == null) { throw new Exception("没有此数据"); } content.C_LastUpdatedBy = _claims.ApiUserId; content.D_LastUpdatedOn = DateTime.Now; _mapper.Map(updateModel, content, typeof(TmtnRepairOrderItemUpdateModel), typeof(TMTN_RepairOrderItem)); _repository.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } public Task UpdateOneAsync(TmtnRepairOrderItemViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } public Task IsExistAsync(Guid id) { throw new NotImplementedException(); } public Task> GetByConditionAsync(Expression> expression) { throw new NotImplementedException(); } public Task UpdateAsync(string code, TpntAreaUpdateModel updateModel) { throw new NotImplementedException(); } public Task> GetConditionAsync(TpntAreaSearchModel searchModel) { throw new NotImplementedException(); } } }