using AutoMapper; using Ropin.Inspection.Common.Accessor.Interface; using Ropin.Inspection.Model; using Ropin.Inspection.Model.Common; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Model.SearchModel.MTN; using Ropin.Inspection.Model.ViewModel.MTN; using Ropin.Inspection.Repository.DEV.Interface; using Ropin.Inspection.Repository.Interface; using Ropin.Inspection.Repository.MTN; using Ropin.Inspection.Repository.MTN.Interface; using Ropin.Inspection.Repository.SYS.Interface; using Ropin.Inspection.Service.DEV.Interface; using Ropin.Inspection.Service.MTN.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Net.NetworkInformation; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace Ropin.Inspection.Service.MTN { /// /// 报警工单 /// public class TmtnAlarmOrderService : ITmtnAlarmOrderService { private readonly ITmtnAlarmOrderRepository _repository; private readonly ITmtnAlarmOrderRecordRepository _recorRrepository; private readonly ITmtnAlarmOrderRecordAppRepository _recorAppRrepository; private readonly IMapper _mapper; private readonly IClaimsAccessor _claims; private readonly InspectionDbContext _sqlDBContext; private readonly IUnitOfWork _unitOfWork; private readonly ITsysMessageFileRepository _tsysMessageFileRepository; public TmtnAlarmOrderService(IClaimsAccessor claims, InspectionDbContext sqlDBContext, ITmtnAlarmOrderRepository repository, IMapper mapper, IUnitOfWork unitOfWork, ITmtnAlarmOrderRecordRepository recorRrepository, ITmtnAlarmOrderRecordAppRepository recorAppRrepository, ITsysMessageFileRepository tsysMessageFileRepository) { _repository = repository; _mapper = mapper; _claims = claims; _sqlDBContext = sqlDBContext; _unitOfWork = unitOfWork; _recorRrepository = recorRrepository; _recorAppRrepository = recorAppRrepository; _tsysMessageFileRepository = tsysMessageFileRepository; } /// /// 工单创建 /// /// /// /// public async Task CreateOneAsync(AlarmOrderViewModel viewModel) { var IsExit= await _repository.GetByConditionAsync(t => t.C_PushMsgResultCode==viewModel.C_PushMsgResultCode); if (IsExit.Count()>0) { throw new Exception("报警记录已存在"); } var content = _mapper.Map(viewModel); content.C_ID = Guid.NewGuid().ToString(); content.C_CreateBy = _claims.ApiUserId.ToString(); 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 CreateOrderAsync(AddAlarmOrderViewModel viewModel) { var IsExit = await _repository.GetByConditionAsync(t => t.C_MessageCode == viewModel.C_MessageCode); if (IsExit.Count() > 0) { throw new Exception("报警记录已存在"); } bool result = false; try { _unitOfWork.BeginTransaction(); var content = _mapper.Map(viewModel); content.C_ID = Guid.NewGuid().ToString(); content.C_CreateBy = _claims.ApiUserId.ToString(); content.D_CreateOn = DateTime.Now; content.C_Status = "1"; result = await _unitOfWork.RegisterNew(content); if (!result) { throw new Exception("创建失败"); } TMTN_AlarmHandleRecord record = new TMTN_AlarmHandleRecord(); record.C_ID = Guid.NewGuid().ToString(); record.C_AlarmOrderCode = content.C_ID; record.C_Record = !string.IsNullOrEmpty(viewModel.C_Record) ? viewModel.C_Record : "上报处理报警"; record.C_CreateBy = _claims.ApiUserId.ToString(); record.D_CreateOn = DateTime.Now; record.C_Status = "1"; result = await _unitOfWork.RegisterNew(record); if (!result) { throw new Exception("创建失败"); } if (viewModel.fileList != null && viewModel.fileList.Count > 0) { List fileList = new List(); foreach (var item in viewModel.fileList) { TMTN_AlarmHandleRecordApp app = new TMTN_AlarmHandleRecordApp { C_ID = Guid.NewGuid().ToString(), C_AlarmHandleRecordCode = record.C_ID, C_Name = item.C_Name, C_Url = item.C_Url, C_Type = item.C_Type, C_CreateBy = _claims.ApiUserId.ToString(), D_CreateOn = DateTime.Now, C_Status = "1" }; fileList.Add(app); } if (fileList.Count>0) { result = await _unitOfWork.RegisterRangeNew(fileList); } } } catch { _unitOfWork.Rollback(); throw; } finally { if (result) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); } } /// /// 工单修改 /// /// /// /// /// public async Task UpdateAsync(string code, AlarmOrderViewModel updateModel) { var items = await _repository.GetByConditionAsync(C => C.C_ID == code); var content = items.FirstOrDefault(); if (content == null) { throw new Exception("没有此数据"); } content.C_Name = updateModel.C_Name; if (string.IsNullOrEmpty(content.C_ExamineBy)) { content.C_ExamineBy = _claims.ApiUserId.ToString(); content.D_ExamineOn = DateTime.Now; } content.C_Remark = updateModel.C_Remark; content.C_LastUpdatedBy = _claims.ApiUserId.ToString(); content.D_LastUpdatedOn = DateTime.Now; content.C_Status = updateModel.C_Status; _repository.Update(content); var result = await _repository.SaveAsync(); if (!result) { throw new Exception("更新失败"); } } /// /// 工单流程 /// /// /// /// /// public async Task OrderFlowAsync(string code, UpdateAlarmOrderViewModel updateModel) { var items = await _repository.GetByConditionAsync(C => C.C_ID == code); var content = items.FirstOrDefault(); if (content == null) { throw new Exception("没有此数据"); } bool result = false; try { _unitOfWork.BeginTransaction(); if (string.IsNullOrEmpty(content.C_ExamineBy)&&(updateModel.C_Status=="2"|| updateModel.C_Status=="3" || updateModel.C_Status == "5")) { content.C_ExamineBy = _claims.ApiUserId.ToString(); content.D_ExamineOn = DateTime.Now; } content.C_LastUpdatedBy = _claims.ApiUserId.ToString(); content.D_LastUpdatedOn = DateTime.Now; content.C_Status = updateModel.C_Status; result = await _unitOfWork.RegisterDirty(content); if (!result) { throw new Exception("更新失败"); } TMTN_AlarmHandleRecord record = new TMTN_AlarmHandleRecord(); record.C_ID = Guid.NewGuid().ToString(); record.C_AlarmOrderCode = content.C_ID; record.C_Record = updateModel.C_Record; record.C_Remark = updateModel.C_Remark; record.C_CreateBy = _claims.ApiUserId.ToString(); record.D_CreateOn = DateTime.Now; record.C_Status = updateModel.C_Status; result = await _unitOfWork.RegisterNew(record); if (!result) { throw new Exception("创建失败"); } if (updateModel.fileList != null && updateModel.fileList.Count > 0) { List fileList = new List(); foreach (var item in updateModel.fileList) { TMTN_AlarmHandleRecordApp app = new TMTN_AlarmHandleRecordApp { C_ID = Guid.NewGuid().ToString(), C_AlarmHandleRecordCode = record.C_ID, C_Name = item.C_Name, C_Url = item.C_Url, C_Type = item.C_Type, C_CreateBy = _claims.ApiUserId.ToString(), D_CreateOn = DateTime.Now, C_Status = "1" }; fileList.Add(app); } if (fileList.Count > 0) { result = await _unitOfWork.RegisterRangeNew(fileList); } } } catch { _unitOfWork.Rollback(); throw; } finally { if (result) await _unitOfWork.CommitAsync(); else _unitOfWork.Rollback(); } } /// /// 工单删除 /// /// /// /// public async Task DeleteAsync(string id) { var content = await _repository.GetByIdAsync(id.ToString()); if (content == null) { throw new Exception("数据库中没有此数据"); } content.C_LastUpdatedBy = _claims.ApiUserId.ToString(); 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> GetAlarmOrderList(AlarmOrderSearchModel searchModel) { return await _repository.GetAlarmOrderList(searchModel); } /// /// 工单表移动端统计(6个月) /// /// /// public async Task GetAlarmOrderStatisticsAsync(string storeCode) { return await _repository.GetAlarmOrderStatisticsAsync(storeCode); } /// /// 工单处理记录列表 /// /// /// public async Task> GetAlarmOrderRecordList(AlarmOrderSearchModel searchModel) { IEnumerable list= await _recorRrepository.GetAlarmOrderRecordList(searchModel); foreach (AlarmOrderRecordViewModel record in list) { if (record!=null) { var fileList = await _recorAppRrepository.GetByConditionAsync(t => t.C_AlarmHandleRecordCode == record.C_ID); if (fileList.Count() > 0) { var file = _mapper.Map, IEnumerable>(fileList); record.fileList = file.ToList(); } } } return list; } /// /// 工单处理记录附件列表 /// /// /// public async Task> GetAlarmOrderRecordAppList(string RecordId) { IEnumerable fileList = await _recorAppRrepository.GetByConditionAsync(t=>t.C_AlarmHandleRecordCode==RecordId); var list = _mapper.Map, IEnumerable>(fileList); return list; } /// /// 工单表详情 /// /// /// public async Task GetByIdAsync(string id) { AlarmOrderSearchModel searchModel = new AlarmOrderSearchModel(); searchModel.IsPagination = false; searchModel.C_ID = id; var content = await _repository.GetAlarmOrderList(searchModel); var entity= content.FirstOrDefault(); if (entity != null) { IEnumerable list = await _recorRrepository.GetAlarmOrderRecordList(searchModel); foreach (AlarmOrderRecordViewModel record in list) { if (record != null) { var fileList = await _recorAppRrepository.GetByConditionAsync(t => t.C_AlarmHandleRecordCode == record.C_ID); if (fileList.Count() > 0) { var file = _mapper.Map, IEnumerable>(fileList); record.fileList = file.ToList(); } } } entity.historyRecord = list.ToList(); TsysMessageFileSearchModel fileSearch = new TsysMessageFileSearchModel(); fileSearch.C_MessageCode = entity.C_MessageCode; fileSearch.IsPagination = false; fileSearch.C_Status = "1"; entity.messageFile = (List)await _tsysMessageFileRepository.GetList(fileSearch); } return content.FirstOrDefault(); } /// /// 工单统计-状态 /// /// /// public async Task AlarmOrderStatistics(AlarmOrderSearchModel searchModel) { var content = await _repository.GetAlarmOrderList(searchModel); if (null == content || content.Count()==0) { return new AlarmOrderStatistics() { Approval = 0, Confirm = 0, RepairOn = 0, Complete = 0, Cancel = 0, RepairRework = 0, RepairCompleted = 0, }; } AlarmOrderStatistics statistics = new AlarmOrderStatistics() { Approval = content.Where(t=>t.C_Status=="1").Count(), Confirm = content.Where(t => t.C_Status == "2").Count(), RepairOn = content.Where(t => t.C_Status == "3").Count(), Complete = content.Where(t => t.C_Status == "4").Count(), Cancel = content.Where(t => t.C_Status == "5").Count(), RepairRework = content.Where(t => t.C_Status == "6").Count(), RepairCompleted = content.Where(t => t.C_Status == "7").Count(), }; return statistics; } public Task IsExistAsync(string id) { throw new NotImplementedException(); } public Task UpdateOneAsync(AlarmOrderViewModel viewModel, params string[] fields) { throw new NotImplementedException(); } } }