using Dapper; using Ewide.Core; using Furion.DatabaseAccessor; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ewide.Application.Service.HouseSafety.HouseInfo { /// /// 房屋详细信息 /// [ApiDescriptionSettings(Name = "HouseInfo", Order = 200)] public class HouseInfoService : IHouseInfoService, IDynamicApiController, ITransient { private readonly IRepository _houseCodeRep; private readonly IRepository _houseInfoRep; private readonly IUserManager _userManager; private readonly IDapperRepository _dapperRepository; public HouseInfoService(IRepository HouseCodeRep,IRepository HouseInfoRep, IUserManager userManager, IDapperRepository dapperRepository) { _houseCodeRep = HouseCodeRep; _houseInfoRep = HouseInfoRep; _userManager = userManager; _dapperRepository = dapperRepository; } [HttpGet("/houseInfo/getByTaskId")] [AllowAnonymous] public async Task GetByTaskId([Required] string taskId) { var houseTaskRep = Db.GetRepository(); var houseTask = await houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t=>t.Id == taskId); if(houseTask == null) throw Oops.Oh("任务不存在"); var houseCodeOutputAsync = await _dapperRepository.QueryAsync( @"SELECT HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.Note ProjectNote,CONCAT(Proj.Name,'(',Proj.Note,')') ProjectFullName,HC.HouseCode,HC.Lng,HC.Lat FROM bs_house_code HC LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) WHERE HC.Id=@HouseCodeId", new { houseTask.HouseCodeId } ); var houseCodeOutput= houseCodeOutputAsync.SingleOrDefault(); if (houseCodeOutput == null) throw Oops.Oh("任务已失效:房屋编码不存在"); var currentUser = await _userManager.CheckUserAsync(); var houseInfo = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == houseTask.HouseCodeId); var houseInfoOutputForDetailPage = new HouseInfoOutputForDetailPage { houseCode = houseCodeOutput }; houseInfoOutputForDetailPage.PatrolInfo = new PatrolInfo(); houseInfoOutputForDetailPage.PatrolInfo.PatrolDate = houseTask.PatrolDate.GetValueOrDefault(DateTime.Now); houseInfoOutputForDetailPage.PatrolInfo.PatrolUser = String.IsNullOrEmpty(houseTask.PatrolUser) ? currentUser.Name : houseTask.PatrolUser; if (houseInfo == null) { houseInfoOutputForDetailPage.houseInfoOutput = new HouseInfoOutput(); return houseInfoOutputForDetailPage; } var houseInfoOutputAsync = await _dapperRepository.QueryAsync("SELECT * FROM bs_house_info HI WHERE Id = @HouseCodeId", new { houseTask.HouseCodeId }); var houseInfoOutput = houseInfoOutputAsync.SingleOrDefault(); houseInfoOutputForDetailPage.houseInfoOutput = houseInfoOutput; return houseInfoOutputForDetailPage; } } }