159 lines
7.3 KiB
C#
159 lines
7.3 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] HouseInfoInputSave input)
|
||
{
|
||
//根据任务审核记录判断是否是审核操作,从而确定 DataStatus
|
||
//审核操作,则为 input.TaskCheckRecord.PassOrBackDataStatus
|
||
//非审核操作,则为 DataStatus.Saved
|
||
var isCheckAction = input.TaskCheckRecord != null;
|
||
await InputDataProcess(input, isCheckAction ? input.TaskCheckRecord.PassOrBackDataStatus : DataStatus.Saved);
|
||
}
|
||
|
||
[HttpPost("/houseInfo/submitToCheck")]
|
||
[UnitOfWork]
|
||
[AllowAnonymous]
|
||
public async Task SubmitToCheck([FromBody] HouseInfoInputSave input)
|
||
{
|
||
await InputDataProcess(input,DataStatus.Submited);
|
||
}
|
||
|
||
[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;
|
||
}
|
||
|
||
[NonAction]
|
||
public async Task InputDataProcess(HouseInfoInputSave input,DataStatus dataStatus = DataStatus.Init)
|
||
{
|
||
//房屋编码地址/坐标单独更新
|
||
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);
|
||
|
||
//建档审核通过的房屋数据修改时,对应的建档任务Task不处理
|
||
if (houseEntity == null || houseEntity.State != 6)
|
||
{
|
||
var houseTask = input.PatrolInfo.Adapt<BsHouseTask>();
|
||
houseTask.HouseCodeId = input.houseCode.Id;
|
||
//任务没有暂存状态,其他状态与HouseInfo的State一致
|
||
houseTask.Status = dataStatus == DataStatus.TempSaved ? (int)DataStatus.Saved : (int)dataStatus;
|
||
await houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true);
|
||
}
|
||
//判断房屋建档状态
|
||
//dataStatus == DataStatus.Saved 若是保存操作 则判断是新增/更新
|
||
//判断是新增/更新 根据传入参数dataStatus确定
|
||
input.houseInfo.State = dataStatus == DataStatus.Saved ? (houseEntity == null ? (int)DataStatus.Saved : houseEntity.State) : (int)dataStatus;
|
||
var houseInfo = input.houseInfo.Adapt<BsHouseInfo>();
|
||
houseInfo.HouseCodeId = input.houseCode.Id;
|
||
|
||
if (houseEntity == null)
|
||
{
|
||
houseInfo.Id = Guid.NewGuid().ToString();
|
||
await houseInfo.InsertAsync();
|
||
}
|
||
else
|
||
{
|
||
houseInfo.Id = houseEntity.Id;
|
||
await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true);
|
||
}
|
||
|
||
|
||
//审核操作则新增一条审核记录
|
||
if (dataStatus == DataStatus.Back || dataStatus == DataStatus.Passed)
|
||
{
|
||
var checkRecord = input.TaskCheckRecord.Adapt<BsHouseTaskCheckRecord>();
|
||
await checkRecord.InsertAsync();
|
||
}
|
||
}
|
||
}
|
||
}
|