using AutoMapper; using LinqKit; using Microsoft.EntityFrameworkCore; 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 TmtnRepairOrderService : ITmtnRepairOrderService { private readonly ITmtnRepairOrderRepository _repository; private readonly IMapper _mapper; private readonly IClaimsAccessor _claims; private readonly ITmtnRepairOrderItemRepository _tmtnRepairOrderItemRepository; private readonly ITmtnRepairOrderItemAppRepository _tmtnRepairOrderItemAppRepository; private readonly ITsysUserRepository _tsysUserRepository; private readonly ITdevDevStoreRepository _tdevDevStoreRepository; private readonly InspectionDbContext _sqlDBContext; public TmtnRepairOrderService(IClaimsAccessor claims, InspectionDbContext sqlDBContext, ITmtnRepairOrderItemRepository tmtnRepairOrderItemRepository, ITdevDevStoreRepository tdevDevStoreRepository, ITsysUserRepository tsysUserRepository, ITmtnRepairOrderRepository repository, ITmtnRepairOrderItemAppRepository tmtnRepairOrderItemAppRepository, IMapper mapper) { _repository = repository; _tmtnRepairOrderItemAppRepository = tmtnRepairOrderItemAppRepository; _mapper = mapper; _claims = claims; _tsysUserRepository = tsysUserRepository; _tdevDevStoreRepository = tdevDevStoreRepository; _tmtnRepairOrderItemRepository = tmtnRepairOrderItemRepository; _sqlDBContext = sqlDBContext; } public async Task CreateOneAsync(TmtnRepairOrderViewModel 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(string 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 CreateRepairOrderAsync(TmtnRepairOrderViewModel content) { //var contentDto = _mapper.Map(content); TMTN_RepairOrder record = new TMTN_RepairOrder(); record.C_Name = content.C_Name; record.C_DevStoreCode = content.C_DevStoreCode; record.C_RepairContent = content.C_RepairContent; record.C_Remark = content.C_Remark; record.C_ID = Guid.NewGuid().ToString(); record.C_CreateBy = _claims.ApiUserId; record.D_CreateOn = DateTime.Now; record.C_Status = "1"; string itemId = Guid.NewGuid().ToString(); await _tmtnRepairOrderItemRepository.CreateOneAsync(new TMTN_RepairOrderItem { C_ID = itemId, C_RepairCode = record.C_ID, C_RepairRecord = content.C_RepairContent, C_Remark = content.C_Remark, C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = "1" }); await _tmtnRepairOrderItemRepository.SaveAsync(); if (null != content.FilePaths && content.FilePaths.Any()) { foreach (string imgPath in content.FilePaths) { await _tmtnRepairOrderItemAppRepository.CreateRangeAsync(new List{ new TMTN_RepairOrderItemApp { C_ID = Guid.NewGuid().ToString(), C_RepairOrderItemCode = record.C_ID, //record.C_ID后期调整,itemId C_Name = "故障上报记录图片", C_Url = imgPath, //C_Type = "1", C_Remark = "", C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = "1" }, new TMTN_RepairOrderItemApp { C_ID = Guid.NewGuid().ToString(), C_RepairOrderItemCode = itemId, //record.C_ID后期调整,itemId C_Name = "故障上报记录图片", C_Url = imgPath, //C_Type = "1", C_Remark = "", C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = "1" }}); //await _tmtnRepairOrderItemAppRepository.CreateOneAsync(new TMTN_RepairOrderItemApp // { // C_ID = Guid.NewGuid().ToString(), // C_RepairOrderItemCode = itemId, //record.C_ID后期调整,itemId // 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); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } } public async Task> GetConditionAsync(TmtnRepairOrderSearchModel searchModel) { var predicate = PredicateBuilder.New(true);//查询条件,推荐后台使用这种方式灵活筛选 #region 添加条件查询 //predicate = predicate.And(i => i.C_Status.Equals("1")); if (!string.IsNullOrEmpty(searchModel.C_Status)) { predicate = predicate.And(i => i.C_Status.Equals(searchModel.C_Status)); } 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); 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(); } //var repairOrderItem = _sqlDBContext.GetDbSet(); //var repairOrderItemApp = _sqlDBContext.GetDbSet(); //var query = from m in dtoList // join p in repairOrderItem.AsNoTracking() on m.C_ID equals p.C_RepairCode into oi // from orderItems in oi.DefaultIfEmpty() // //join k in repairOrderItemApp.AsNoTracking() on m.C_ID equals k.C_RepairOrderItemCode into oia // //from orderApps in oia.DefaultIfEmpty() // join n in repairOrderItemApp.AsNoTracking() on orderItems.C_ID equals n.C_RepairOrderItemCode into oiaa // from orderItemApps in oiaa.DefaultIfEmpty() // select new // { // infor1 = m, // infor2 = orderItems, // infor4 = orderItemApps, // }; return dtoList; } public async Task> GetRepairOrderWithImageAsync(TmtnRepairOrderSearchModel 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 TmtnRepairOrderWithImageViewModel { 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(TmtnRepairOrderRecordSearchModel searchModel) { var content = await _repository.GetRecordsConditionAsync(searchModel, _claims.Linsence); return content; } public async Task GetRecords30DaysStatisticsAsync(string storeCode) { var pagedList = await _repository.GetRecords30DaysStatisticsAsync(storeCode); TispRecord30DaysStatisticsViewModel model = new TispRecord30DaysStatisticsViewModel(); object[] normal = pagedList.Select(d => d.Normal).ToArray(); object[] abnormal = pagedList.Select(d => d.Abnormal).ToArray();//.ForEach(a => empIds += a.Id + ","); string[] specificDay = pagedList.Select(d => d.SpecificDay).ToArray(); model.AbnormalArray = abnormal; model.NormalArray = normal; model.SpecificDayArray = specificDay; return model; } public async Task GetRepairStatisticsAsync(string storeCode) { return await _repository.GetRepairStatisticsAsync(storeCode); } public async Task> GetRepairStatisticsFullScreenAsync(string storeCode) { RepairStatistics repair = await _repository.GetRepairStatisticsAsync(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 GetByIdAsync(string id) { var content = await _repository.GetByIdAsync(id); var contentDto = _mapper.Map(content); return contentDto; } public async Task UpdateAsync(string code, TmtnRepairOrderUpdateModel updateModel) { var items = await _repository.GetByConditionAsync(C => C.C_ID == code); var content = items.FirstOrDefault(); if (content == null) { throw new Exception("没有此数据"); } content.C_Status = updateModel.C_Status; content.C_LastUpdatedBy = _claims.ApiUserId; content.D_LastUpdatedOn = DateTime.Now; //_mapper.Map(updateModel, content, typeof(TmtnRepairOrderUpdateModel), typeof(TMTN_RepairOrder)); //var content = _mapper.Map(viewModel); string itemId = Guid.NewGuid().ToString(); await _tmtnRepairOrderItemRepository.CreateOneAsync(new TMTN_RepairOrderItem { C_ID = itemId, C_RepairCode = content.C_ID, C_RepairRecord = updateModel.C_RepairContent, C_Remark = updateModel.C_Remark, C_CreateBy = _claims.ApiUserId, D_CreateOn = DateTime.Now, C_Status = updateModel.C_Status }); await _tmtnRepairOrderItemRepository.SaveAsync(); if (null != updateModel.FilePaths && updateModel.FilePaths.Any()) { foreach (string imgPath in updateModel.FilePaths) { await _tmtnRepairOrderItemAppRepository.CreateOneAsync(new TMTN_RepairOrderItemApp { C_ID = Guid.NewGuid().ToString(), C_RepairOrderItemCode = itemId, 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.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } public Task UpdateOneAsync(TmtnRepairOrderViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } public Task IsExistAsync(string 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(); } } }