|
@@ -36,6 +36,8 @@ using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
using StackExchange.Redis;
|
|
|
using Order = Hotline.Orders.Order;
|
|
|
+using Hotline.Share.Dtos.Quality;
|
|
|
+using Hotline.Repository.SqlSugar.Orders;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -72,9 +74,10 @@ public class OrderController : BaseController
|
|
|
private readonly IRepositoryTextSearch<OrderTs> _repositoryts;
|
|
|
private readonly IQualityRepository _qualityRepository;
|
|
|
private readonly IRepository<Workflow> _workflowRepository;
|
|
|
+ private readonly ICitizenRepository _citizenRepository;
|
|
|
|
|
|
|
|
|
- public OrderController(
|
|
|
+ public OrderController(
|
|
|
IOrderDomainService orderDomainService,
|
|
|
IOrderRepository orderRepository,
|
|
|
IWorkflowApplication workflowApplication,
|
|
@@ -102,7 +105,8 @@ public class OrderController : BaseController
|
|
|
IRepository<OrderPublishHistory> orderPublishHistoryRepository,
|
|
|
IRepositoryTextSearch<OrderTs> repositoryts,
|
|
|
IQualityRepository qualityRepository,
|
|
|
- IRepository<Workflow> workflowRepository
|
|
|
+ IRepository<Workflow> workflowRepository,
|
|
|
+ ICitizenRepository citizenRepository
|
|
|
)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
@@ -133,6 +137,7 @@ public class OrderController : BaseController
|
|
|
_repositoryts = repositoryts;
|
|
|
_qualityRepository =qualityRepository;
|
|
|
_workflowRepository = workflowRepository;
|
|
|
+ _citizenRepository = citizenRepository;
|
|
|
}
|
|
|
|
|
|
#region 工单发布
|
|
@@ -1617,5 +1622,109 @@ public class OrderController : BaseController
|
|
|
return new PagedDto<OrderWaitedDto>(total, dtos);
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 市民信息
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 新增市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dtos"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.AddCitizen)]
|
|
|
+ [HttpPost("citizen")]
|
|
|
+ public async Task Add([FromBody] CitizenAddDto dto)
|
|
|
+ {
|
|
|
+ var citizen = await _citizenRepository.CountAsync(x=>x.PhoneNumber == dto.PhoneNumber, HttpContext.RequestAborted);
|
|
|
+ if (citizen > 0)
|
|
|
+ throw UserFriendlyException.SameMessage("市民联系电话信息重复");
|
|
|
+ await _citizenRepository.AddAsync(dto, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 删除市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.DeleteCitizen)]
|
|
|
+ [HttpDelete("citizen")]
|
|
|
+ public async Task Delete([FromBody] CitizenDeleteDto dto)
|
|
|
+ {
|
|
|
+ await _citizenRepository.RemoveAsync(x => x.Id == dto.Id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 更新市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.UpdateCitizen)]
|
|
|
+ [HttpPut("citizen")]
|
|
|
+ public async Task Update([FromBody] CitizenUpdateDto dto)
|
|
|
+ {
|
|
|
+ var citizen = await _citizenRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
+ if (citizen is null)
|
|
|
+ throw UserFriendlyException.SameMessage("无效市民信息");
|
|
|
+ _mapper.Map(dto, citizen);
|
|
|
+ citizen.LastModificationName = _sessionContext.UserName;
|
|
|
+ await _citizenRepository.UpdateAsync(citizen, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取市民信息列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.CitizenList)]
|
|
|
+ [HttpGet("citizen/list")]
|
|
|
+ public async Task<PagedDto<CitizenDto>> List([FromQuery] CitizenListDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _citizenRepository.Queryable()
|
|
|
+ .OrderByDescending(x => x.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<CitizenDto>(total, _mapper.Map<IReadOnlyList<CitizenDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.CitizenEntity)]
|
|
|
+ [HttpGet("citizen/{id}")]
|
|
|
+ public async Task<Citizen> CitizenEntity(string id)
|
|
|
+ {
|
|
|
+ return await _citizenRepository.Queryable()
|
|
|
+ .FirstAsync(x => x.Id == id);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取市民信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("citizen_phone/{phone}")]
|
|
|
+ public async Task<object> Citizen(string phone)
|
|
|
+ {
|
|
|
+ //市民基本信息
|
|
|
+ var citizen = await _citizenRepository.Queryable()
|
|
|
+ .FirstAsync(x => x.PhoneNumber == phone);
|
|
|
+ //工单历史
|
|
|
+ var oders = await _orderRepository.Queryable().Where(x => x.FromPhone == phone).OrderBy(x => x.CreationTime, OrderByType.Desc).ToListAsync();
|
|
|
+ var allOrderNum = oders.Count;
|
|
|
+ var endOrderNum = oders.Count(x => x.Status == EOrderStatus.Published || x.Status == EOrderStatus.Visited || x.Status == EOrderStatus.Filed);
|
|
|
+ var handOrderNum = oders.Count(x => x.Status == EOrderStatus.Handling || x.Status == EOrderStatus.Countersigning);
|
|
|
+ //来电历史
|
|
|
+ //TODO
|
|
|
+ //关注诉求
|
|
|
+ var hotspotNames = string.Join(",", oders.Select(x => x.HotspotName).Distinct().Take(5).ToList());
|
|
|
+ var rsp = new {
|
|
|
+ Citizen = citizen,
|
|
|
+ Order = new { allOrderNum = allOrderNum , endOrderNum = endOrderNum , handOrderNum = handOrderNum },
|
|
|
+ CallHistory = new { },
|
|
|
+ HotspotNames = hotspotNames,
|
|
|
+ };
|
|
|
+ return rsp;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
}
|