Files
zsxt_nbzs_h5/Api/Ewide.Application/Service/HouseSafety/HouseInfo/HouseInfoService.cs
2021-06-09 16:34:42 +08:00

126 lines
5.5 KiB
C#

using Dapper;
using Ewide.Core;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
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
{
/// <summary>
/// 房屋详细信息
/// </summary>
[ApiDescriptionSettings(Name = "HouseInfo", Order = 200)]
public class HouseInfoService : IHouseInfoService, IDynamicApiController, ITransient
{
private readonly IRepository<BsHouseCode> _houseCodeRep;
private readonly IRepository<BsHouseInfo> _houseInfoRep;
private readonly IRepository<BsHouseTask> _houseTaskRep;
private readonly IUserManager _userManager;
private readonly IDapperRepository _dapperRepository;
public HouseInfoService(IRepository<BsHouseCode> HouseCodeRep,IRepository<BsHouseInfo> HouseInfoRep, IRepository<BsHouseTask> HouseTaskRep, IUserManager userManager, IDapperRepository dapperRepository)
{
_houseCodeRep = HouseCodeRep;
_houseInfoRep = HouseInfoRep;
_houseTaskRep = HouseTaskRep;
_userManager = userManager;
_dapperRepository = dapperRepository;
}
[HttpPost("/houseInfo/save")]
[UnitOfWork]
[AllowAnonymous]
public async Task Save([FromBody] HouseInfoInputAdd input)
{
var houseCode = input.houseCode.Adapt<BsHouseCode>();
await houseCode.UpdateIncludeAsync(new[] { nameof(BsHouseCode.Address), nameof(BsHouseCode.Lng), nameof(BsHouseCode.Lat) }, true);
var houseEntity = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == input.houseCode.Id);
var houseInfo = input.houseInfo.Adapt<BsHouseInfo>();
houseInfo.HouseCodeId = input.houseCode.Id;
if(houseEntity == null)
{
houseInfo.Id = Guid.NewGuid().ToString();
houseInfo.State = 3;
await houseInfo.InsertAsync();
}
else
{
houseInfo.Id = houseEntity.Id;
houseInfo.State = houseEntity.State;
await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true) ;
}
if(houseInfo.State != 6)
{
var houseTask = input.PatrolInfo.Adapt<BsHouseTask>();
houseTask.HouseCodeId = input.houseCode.Id;
houseTask.Status = 1;
await houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true);
}
}
[HttpGet("/houseInfo/getByTaskId")]
[AllowAnonymous]
public async Task<HouseInfoOutputForDetailPage> GetByTaskId([Required] string taskId)
{
//获取任务实体
var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t=>t.Id == taskId);
if(houseTask == null) throw Oops.Oh("任务不存在");
//获取房屋编码信息
var houseCodeOutputAsync = await _dapperRepository.QueryAsync<HouseCodeOutput>(
@"SELECT HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.Name,'(',Proj.Note,')') ProjectFullName,HC.HouseCode,HC.Lng,HC.Lat,HC.No FROM bs_house_code HC
LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId
LEFT JOIN sys_org O ON HC.ZoneId = O.Id
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
};
var taskOutput = houseTask.Adapt<HouseTaskOutput>();
taskOutput.PatrolDate = houseTask.PatrolDate.GetValueOrDefault(DateTime.Now);
taskOutput.PatrolUser = String.IsNullOrEmpty(houseTask.PatrolUser) ? currentUser.Name : houseTask.PatrolUser;
houseInfoOutputForDetailPage.PatrolInfo = taskOutput;
if (houseInfo == null)
{
houseInfoOutputForDetailPage.HouseInfo = new HouseInfoOutput();
return houseInfoOutputForDetailPage;
}
var houseInfoOutput = (await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.HouseCodeId == houseTask.HouseCodeId)).Adapt<HouseInfoOutput>();
houseInfoOutputForDetailPage.HouseInfo = houseInfoOutput;
return houseInfoOutputForDetailPage;
}
}
}