using AutoMapper; using Microsoft.AspNetCore.Http; using Ropin.Inspection.Common.Accessor.Interface; using Ropin.Inspection.Common.Helper; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Model.SearchModel; using Ropin.Inspection.Model.ViewModel; using Ropin.Inspection.Repository; using Ropin.Inspection.Repository.Interface; using Ropin.Inspection.Service.Interface; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Net.Http; using System.Security.Claims; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Service { public class TispRecordService : ITispRecordService { private readonly IClaimsAccessor _claims; private readonly ITispRecordRepository _repository; private readonly ITmtnRepairOrderRepository _tmtnRepairOrderRepository; private readonly ITmtnDevOpsRepository _tmtnDevOpsRepository; private readonly ITispRecordItemRepository _tispRecordItemRepository; private readonly ITispRecordImageRepository _tispRecordImageRepository; private readonly IMapper _mapper; private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHttpClientFactory _httpClientFactory; private readonly ITsysUserRepository _tsysUserRepository; private readonly IPushMsgService _pushMsgService; public TispRecordService(IClaimsAccessor claims, ITispRecordRepository repository, ITmtnDevOpsRepository tmtnDevOpsRepository, ITmtnRepairOrderRepository tmtnRepairOrderRepository,ITispRecordItemRepository tispRecordItemRepository, ITispRecordImageRepository tispRecordImageRepository,IMapper mapper, IHttpClientFactory httpClientFactory, ITsysUserRepository tsysUserRepository, IPushMsgService pushMsgService) { _repository = repository; _tmtnRepairOrderRepository = tmtnRepairOrderRepository; _tmtnDevOpsRepository = tmtnDevOpsRepository; _tispRecordItemRepository = tispRecordItemRepository; _tispRecordImageRepository = tispRecordImageRepository; _mapper = mapper; _claims = claims; _httpClientFactory = httpClientFactory; _tsysUserRepository = tsysUserRepository; _pushMsgService = pushMsgService; } public async Task> GetRecordsConditionAsync(TispRecordSearchModel searchModel) { var result = await _repository.GetRecordsConditionAsync(searchModel); return result; } public async Task CreateOneAsync(TispRecordViewModel viewModel) { var record = _mapper.Map(viewModel); record.C_CreateBy = _claims.ApiUserId; record.D_CreateOn = DateTime.Now; record.C_LastUpdatedBy = _claims.ApiUserId; record.D_LastUpdatedOn = DateTime.Now; _repository.Create(record); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } } public async Task CreateRecordAsync(TispRecordCreateViewModel viewModel) { TISP_Record record = _mapper.Map(viewModel); record.C_ID = Guid.NewGuid(); record.C_CreateBy = _claims.ApiUserId; record.D_CreateOn = DateTime.Now; //有异常,巡检记录异常 if (viewModel.TispRecordItemList.Where(i => i.C_Status == "0").Any()) { record.C_Status = "2"; } await _repository.CreateOneAsync(record); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } foreach (TispRecordItemCreateViewModel itemViewModel in viewModel.TispRecordItemList) { TISP_RecordItem item = _mapper.Map(itemViewModel); item.C_ID = Guid.NewGuid(); item.C_RecordCode = record.C_ID; item.C_CreateBy = _claims.ApiUserId; item.D_CreateOn = DateTime.Now; #region 异常不添加 //var iCount = await _tispRecordItemRepository.GetContentAlarmCout(itemViewModel.C_ContentCode, viewModel.C_SpotCode); //if (iCount>0) //{ // item.C_Status = "5"; // await _tispRecordItemRepository.CreateOneAsync(item); // var re = await _repository.SaveAsync(); // if (!re) // { // throw new Exception("创建失败"); // } // if (null != itemViewModel.FilePaths && itemViewModel.FilePaths.Any()) // { // foreach (string imgPath in itemViewModel.FilePaths) // { // await _tispRecordImageRepository.CreateOneAsync(new TISP_RecordImage { C_RecordItemCode = item.C_ID, C_ImageUrl = imgPath, C_Status = "1" }); // var resultItemImage = await _repository.SaveAsync(); // if (!resultItemImage) // { // throw new Exception("创建失败"); // } // } // } // continue; //} #endregion await _tispRecordItemRepository.CreateOneAsync(item); var resultItem = await _repository.SaveAsync(); if (!resultItem) { throw new Exception("创建失败"); } if (null != itemViewModel.FilePaths && itemViewModel.FilePaths.Any()) { foreach (string imgPath in itemViewModel.FilePaths) { await _tispRecordImageRepository.CreateOneAsync(new TISP_RecordImage { C_RecordItemCode = item.C_ID, C_ImageUrl = imgPath, C_Status = "1" }); var resultItemImage = await _repository.SaveAsync(); if (!resultItemImage) { throw new Exception("创建失败"); } } } if (item.C_Status == "0") { IEnumerable itemDetails = await _tispRecordItemRepository.GetAlarmRecordsByRecordItemIdAsync(item.C_ID); TispRecordItemAlarmDetailViewModel itemDetail = itemDetails.FirstOrDefault(); if (itemDetail == null) return; await _pushMsgService.PushRecordMsgAsync("MSG_TYPE_003", itemDetail,null, record.C_SpotCode.ToString(), item.C_ID.ToString(), "0"); } } //IEnumerable items = _mapper.Map>(viewModel.TispRecordItemList); //foreach (TISP_RecordItem item in items) //{ // item.C_RecordCode = record.C_ID; // item.C_CreateBy = new Guid("62D5B5F5-3008-49B7-B0D6-CC337F1A3330"); // item.D_CreateOn = DateTime.Now; // await _tispRecordItemRepository.CreateOneAsync(item); // var resultItem = await _repository.SaveAsync(); // if (!resultItem) // { // throw new Exception("创建失败"); // } //} } public async Task CreateRecordAndImageAsync(IEnumerable viewModel) { var recordList = _mapper.Map>(viewModel); foreach (var record in recordList) { //record.C_CreateBy = new Guid("62D5B5F5-3008-49B7-B0D6-CC337F1A3330"); record.D_CreateOn = DateTime.Now; //record.C_LastUpdatedBy = new Guid("62D5B5F5-3008-49B7-B0D6-CC337F1A3330"); record.D_LastUpdatedOn = DateTime.Now; _repository.Create(record); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("创建失败"); } } } public async Task DeleteAsync(Guid id) { var record = await _repository.GetByIdAsync(id); if (record == null) { throw new Exception("没有此巡检内容"); } _repository.Delete(record); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("删除失败"); } } public async Task> GetAllAsync(string storeCode) { //TsysUserByRoleSearchModel roleSearchModel = new TsysUserByRoleSearchModel { Roles = new List { "72d5b5f5-3008-49b7-b0d6-cc337f1a3331", "72d5b5f5-3008-49b7-b0d6-cc337f1a3332" } }; //IEnumerable users = await _tsysUserRepository.GetUserDetailByRole(roleSearchModel); //var b = await _tsysUserRepository.GetAllAsync(); var pagedList = await _repository.GetAllAsync(); var recordDtoList = _mapper.Map>(pagedList); return recordDtoList.ToList(); } public async Task> GetAllSpotRecordAsync(AllSpotRecordSearchModel searchModel) { var pagedList = await _repository.GetAllSpotRecordAsync(searchModel); return pagedList; } public async Task> GetUserSpotRecordAsync(UserSpotRecordSearchModel searchModel) { //if (string.IsNullOrEmpty(searchModel.OrganizeCode)) //{ // searchModel.OrganizeCode = _claims.OrganizeId.ToString(); //} var pagedList = await _repository.GetUserSpotRecordAsync(searchModel); return pagedList; } public async Task> GetUserTodaySpotRecordsAsync(Guid id, string storeCode) { IEnumerable pagedList; //if (_claims.RoleIds.Contains("巡检员")) //{ // pagedList = await _repository.GetUserTodaySpotRecordsAsync(id, storeCode); //} //else //{ pagedList = await _repository.GetUserTodaySpotRecordsAsync(Guid.Empty, storeCode); //} return pagedList; } public async Task> GetUserTodayNotSpotRecordsAsync(Guid id, string storeCode) { IEnumerable pagedList; //if (_claims.RoleIds.Contains("巡检员")) //{ //pagedList = await _repository.GetUserTodayNotSpotRecordsAsync(id, storeCode); //} //else //{ pagedList = await _repository.GetUserTodayNotSpotRecordsAsync(Guid.Empty, storeCode); //} return pagedList; } public async Task GetUserTodaySpotRecordCountAsync(Guid id, string storeCode) { var result = 0; //if (_claims.RoleIds.Contains("巡检员")) //{ // result = await _repository.GetUserTodaySpotRecordCountAsync(id, storeCode); //} //else //{ result = await _repository.GetAllTodaySpotRecordCountAsync(storeCode); //} return result; } public async Task GetUserTodayNotSpotRecordCountAsync(Guid id, string storeCode) { var result = 0; //if (_claims.RoleIds.Contains("巡检员")) //{ //result = await _repository.GetUserTodayNotSpotRecordCountAsync(id, storeCode); //} //else //{ result = await _repository.GetAllTodayNotSpotRecordCountAsync(storeCode); //} return result; } public Task> GetByConditionAsync(Expression> expression) { throw new NotImplementedException(); } public async Task GetByIdAsync(Guid id) { var record = await _repository.GetByIdAsync(id); var recordDto = _mapper.Map(record); return recordDto; } public Task IsExistAsync(Guid id) { throw new NotImplementedException(); } public async Task UpdateAsync(Guid id, TispRecordUpdateViewModel updateModel) { var record = await _repository.GetByIdAsync(id); if (record == null) { throw new Exception("没有此巡检记录"); } record.C_LastUpdatedBy = _claims.ApiUserId; record.D_LastUpdatedOn = DateTime.Now; _mapper.Map(updateModel, record, typeof(TispRecordUpdateViewModel), typeof(TISP_Record)); _repository.Update(record); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } public Task UpdateOneAsync(TispRecordViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } public Task GetRecordAsync(Guid id) { throw new NotImplementedException(); } public async Task GetRecords30DaysStatisticsAsync(string storeCode) { var pagedList = await _repository.GetRecords30DaysStatisticsAsync(storeCode); TispRecord30DaysStatisticsViewModel model = new TispRecord30DaysStatisticsViewModel(); object[] normal = pagedList.Select(d => (Convert.ToInt32(d.Normal) + Convert.ToInt32(d.Abnormal)).ToString()).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 GetAlarmRecovery7DaysStatisticsAsync(string storeCode) { var pagedList = await _repository.GetAlarmRecovery7DaysStatisticsAsync(storeCode); TispAlarmRecovery7DaysStatisticsViewModel model = new TispAlarmRecovery7DaysStatisticsViewModel(); object[] alarm = pagedList.Select(d => d.Alarm).ToArray(); object[] recovery = pagedList.Select(d => d.Recovery).ToArray();//.ForEach(a => empIds += a.Id + ","); string[] specificDay = pagedList.Select(d => d.SpecificDay).ToArray(); model.AlarmArray = alarm; model.RecoveryArray = recovery; model.SpecificDayArray = specificDay; return model; } public async Task GetTodaySpotStatisticsAsync(string storeCode) { TodaySpotStatistics model = await _repository.GetTodaySpotStatisticsAsync(storeCode); return model; } public async Task GetTodaySpotContentStatisticsAsync(string storeCode) { TodaySpotContentStatistics model = await _repository.GetTodaySpotContentStatisticsAsync(storeCode); return model; } public async Task GetRecord12MonthStatisticsAsync(string storeCode) { var pagedList = await _repository.GetRecord12MonthStatisticsAsync(storeCode); Record12MonthStatisticsViewModel model = new Record12MonthStatisticsViewModel(); object[] recordCount = pagedList.Select(d => d.RecordCount).ToArray();//.ForEach(a => empIds += a.Id + ","); string[] specificMonth = pagedList.Select(d => d.SpecificMonth).ToArray(); model.RecordCountArray = recordCount; model.SpecificMonthArray = specificMonth; return model; } public async Task> GetRecord12MonthStatisticsFullScreenAsync(string storeCode) { var pagedList = await _repository.GetRecord12MonthStatisticsAsync(storeCode); if (null == pagedList || !pagedList.Any()) { IEnumerable recordItemDetail = null; return await Task.FromResult(recordItemDetail); } var q = from b in pagedList select new FullScreenRecordItem { x = b.SpecificMonth, y = Convert.ToString(b.RecordCount) }; return q; } public async Task> GetAllDevOpsRecord12MonthStatisticsFullScreenAsync(string storeCode) { var recordPagedList = await _repository.GetRecord12MonthStatisticsAsync(storeCode); var repairOrderPagedList = await _tmtnRepairOrderRepository.GetRecord12MonthStatisticsAsync(storeCode); var devOpsPagedList = await _tmtnDevOpsRepository.GetRecord12MonthStatisticsAsync(storeCode); if (null == recordPagedList || !recordPagedList.Any()) { IEnumerable recordItemDetail = null; return await Task.FromResult(recordItemDetail); } var qRecord = from b in recordPagedList.Skip(7).Take(6).ToList()//.Union(repairOrderPagedList).Union(devOpsPagedList) select new FullScreenRecordItem { colorField = "点检", x = Convert.ToString(b.RecordCount), y = b.SpecificMonth, }; var qRepairOrder = from b in repairOrderPagedList.Skip(7).Take(6).ToList() select new FullScreenRecordItem { colorField = "维修", x = Convert.ToString(b.RecordCount), y = b.SpecificMonth }; var qDevOps = from b in devOpsPagedList.Skip(7).Take(6).ToList() select new FullScreenRecordItem { colorField = "维保", x = Convert.ToString(b.RecordCount), y = b.SpecificMonth }; return qRecord.Union(qRepairOrder).Union(qDevOps); } } }