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();
}
}
}