消防培训系统服务器
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
9.5 KiB

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AX.FireTrainingSys.Controllers.V1
{
/// <summary>
/// 课件基本信息控制器。
/// </summary>
[Produces("application/json")]
[Route("api/[controller]")]
[ApiVersion("1.0")]
[ApiController]
public class CoursewareBaseInfosController : ControllerBase
{
private readonly DriveDbContext dbContext;
public CoursewareBaseInfosController(DriveDbContext dbContext)
{
this.dbContext = dbContext;
}
/// <summary>
/// 获得指定课件的所有相关基本信息。
/// </summary>
/// <param name="coursewareId">课件编号</param>
/// <returns></returns>
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[HttpGet]
public async Task<Microsoft.AspNetCore.Mvc.ActionResult> Get([FromQuery, BindRequired]string coursewareId)
{
if (string.IsNullOrEmpty(coursewareId))
return BadRequest($"{nameof(coursewareId)}:{coursewareId}");
using (var transaction = dbContext.Database.BeginTransaction())
{
//暂未找到在 EF Core 中合适的临时表方案
//或许可以使用 Dapper 写临时表查询
var buildingAdjoins = await dbContext.BuildingAdjoins
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var buildingBasicInfos = await dbContext.BuildingBasicInfos
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var buildingFeatures = await dbContext.BuildingFeatures
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var exits = await dbContext.Exits
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var fireControlRooms = await dbContext.FireControlRooms
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var fireLifts = await dbContext.FireLifts
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var fireWaterMonitors = await dbContext.FireWaterMonitors
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var foamHydrants = await dbContext.FoamHydrants
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var foamPumpRooms = await dbContext.FoamPumpRooms
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var imageMarkers = await dbContext.ImageMarkers
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var importantLocations = await dbContext.ImportantLocations
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var municipalFireHydrants = await dbContext.MunicipalFireHydrants
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var noParkingAreas = await dbContext.NoParkingAreas
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var outdoorFireHydrants = await dbContext.OutdoorFireHydrants
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var protectedStairways = await dbContext.ProtectedStairways
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var pumpRooms = await dbContext.PumpRooms
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var siameseConnections = await dbContext.SiameseConnections
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var storageTanks = await dbContext.StorageTanks
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var waterTanks = await dbContext.WaterTanks
.AsNoTracking()
.Where(e => e.CoursewareId == coursewareId)
.Select(e => e.Content)
.ToListAsync();
var result = new Dictionary<string, List<string>>
{
{ nameof(buildingAdjoins), buildingAdjoins },
{ nameof(buildingBasicInfos), buildingBasicInfos },
{ nameof(buildingFeatures), buildingFeatures },
{ nameof(exits), exits },
{ nameof(fireControlRooms), fireControlRooms },
{ nameof(fireLifts), fireLifts },
{ nameof(fireWaterMonitors), fireWaterMonitors },
{ nameof(foamHydrants), foamHydrants },
{ nameof(foamPumpRooms), foamPumpRooms },
{ nameof(imageMarkers), imageMarkers },
{ nameof(importantLocations), importantLocations },
{ nameof(municipalFireHydrants), municipalFireHydrants },
{ nameof(noParkingAreas), noParkingAreas },
{ nameof(outdoorFireHydrants), outdoorFireHydrants },
{ nameof(protectedStairways), protectedStairways },
{ nameof(pumpRooms), pumpRooms },
{ nameof(siameseConnections), siameseConnections },
{ nameof(storageTanks), storageTanks },
{ nameof(waterTanks), waterTanks },
};
transaction.Commit();
return Ok(result);
}
}
}
public class BaseInfo
{
public string CoursewareId { get; set; }
public string Id { get; set; }
public string Content { get; set; }
public string Type { get; set; }
}
}