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.Model.ViewModel; 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 TmtnDevOperateRecordService : ITmtnDevOperateRecordService { private readonly ITmtnDevOperateRecordRepository _repository; private readonly IMapper _mapper; private readonly IClaimsAccessor _claims; private readonly InspectionDbContext _sqlDBContext; public TmtnDevOperateRecordService(InspectionDbContext sqlDBContext, IClaimsAccessor claims, ITmtnDevOperateRecordRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; _claims = claims; _sqlDBContext = sqlDBContext; } public async Task GetDevOpsStatisticsAsync(string storeCode) { return await _repository.GetDevOpsStatisticsAsync(storeCode); } public async Task> GetDevOpsStatisticsFullScreenAsync(string storeCode) { RepairStatistics repair = await _repository.GetDevOpsStatisticsAsync(storeCode); if (null == repair) { return new FullScreenRecordItem[0]; } IEnumerable fullScreenRecordItems = new FullScreenRecordItem[5] { new FullScreenRecordItem { x = "取消维保", y = Convert.ToString(repair.Cancel) } , new FullScreenRecordItem { x = "确认维保", y = Convert.ToString(repair.Confirm) } , new FullScreenRecordItem { x = "完成维保", y = Convert.ToString(repair.Complete) } , new FullScreenRecordItem { x = "审批中", y = Convert.ToString(repair.Approval) } , new FullScreenRecordItem { x = "正在维保", y = Convert.ToString(repair.RepairOn) } }; return await Task.FromResult(fullScreenRecordItems); } public async Task CreateOneAsync(TmtnDevOperateRecordViewModel 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> GetConditionAsync(TmtnDevOperateRecordSearchModel searchModel) { var predicate = PredicateBuilder.New(true);//查询条件,推荐后台使用这种方式灵活筛选 #region 添加条件查询 //predicate = predicate.And(i => i.C_Status.Equals("1")); if (!string.IsNullOrEmpty(searchModel.C_SpotCode)) { predicate = predicate.And(i => i.C_SpotCode.Equals(searchModel.C_SpotCode)); } if (!string.IsNullOrEmpty(searchModel.C_ID)) { predicate = predicate.And(i => i.C_ID.Equals(searchModel.C_ID)); } if (!string.IsNullOrEmpty(searchModel.C_Record)) { predicate = predicate.And(i => i.C_Record.Contains(searchModel.C_Record)); } #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); return dtoList; } 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, TmtnDevOperateRecordUpdateModel 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(TmtnDevOperateRecordUpdateModel), typeof(TMTN_DevOperateRecord)); _repository.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } public async Task GetDevOpsRecordItemAsync(string devId, string repairId) { var vm = new TmtnDevOpsRecordItemDetailViewMode(); 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_DevOpsCode == repairId) join user in sysUsers on orderItem.C_CreateBy equals user.C_UserID group orderItem by new { orderItem.C_ID, orderItem.C_Remark, orderItem.C_Record, orderItem.C_Status, orderItem.C_SpotDevOpsContentCode, orderItem.D_CreateOn, orderItem.C_SolidWaste, user.C_Name } into sg select new DevOpsRecordItemViewMode { C_ID = sg.Key.C_ID, D_CreateOn = sg.Key.D_CreateOn, C_Remark = sg.Key.C_Remark, C_SpotDevOpsContentCode = sg.Key.C_SpotDevOpsContentCode, C_Status = sg.Key.C_Status, C_Record = sg.Key.C_Record, C_SolidWaste = sg.Key.C_SolidWaste, CreateUserName = sg.Key.C_Name, }).OrderBy(x => x.D_CreateOn).ToListAsync(); //group orderItem by new { orderItem.C_ID, orderItem.C_Remark, orderItem.C_Record, orderItem.C_Status, orderItem.C_SpotDevOpsContentCode, orderItem.D_CreateOn, user.C_Name } into sg //select new DevOpsRecordItemViewMode //{ // C_ID = sg.Key.C_ID, // D_CreateOn = sg.Key.D_CreateOn, // C_Remark = sg.Key.C_Remark, // C_SpotDevOpsContentCode = sg.Key.C_SpotDevOpsContentCode, // C_Status = sg.Key.C_Status, // C_RepairRecord = sg.Key.C_Record, // CreateUserName = sg.Key.C_Name, //}).OrderBy(x => x.D_CreateOn).ToListAsync(); List devOpsItem = new List(); List DevOpsRecordSolidWaste = new List(); foreach (IGrouping item in orderItem_group_datas.GroupBy(p => p.C_Status).ToList()) { devOpsItem.Add(item.FirstOrDefault()); if (item.FirstOrDefault()?.C_Status == "7") { foreach(var item2 in item.ToList()) { if(!string.IsNullOrEmpty(item2.C_SolidWaste)) DevOpsRecordSolidWaste.Add(JsonConvert.DeserializeObject(item2.C_SolidWaste)) ; } } } vm.DevOpsRecordSolidWasteItems = DevOpsRecordSolidWaste; vm.DevOpsRecordItems = devOpsItem; 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 Task UpdateOneAsync(TmtnDevOperateRecordViewModel 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(); } } }