|
@@ -62,6 +62,7 @@ public class OrderController : BaseController
|
|
|
private readonly IRepository<OrderUrge> _orderUrgeRepository;
|
|
|
private readonly IFileRepository _fileRepository;
|
|
|
private readonly IRepository<OrderScreen> _orderScreenRepository;
|
|
|
+ private readonly IRepository<OrderPublishHistory> _orderPublishHistoryRepository;
|
|
|
|
|
|
|
|
|
public OrderController(
|
|
@@ -84,11 +85,12 @@ public class OrderController : BaseController
|
|
|
IRepository<OrderDelay> orderDelayRepository,
|
|
|
ITimeLimitApplication timeLimitApplication,
|
|
|
ISystemSettingCacheManager systemSettingCacheManager,
|
|
|
- IRepository<OrderRedo> orderRedoRepository,
|
|
|
- IRepository<OrderSupervise> orderSuperviseRepository,
|
|
|
- IRepository<OrderUrge> orderUrgeRepository,
|
|
|
+ IRepository<OrderRedo> orderRedoRepository,
|
|
|
+ IRepository<OrderSupervise> orderSuperviseRepository,
|
|
|
+ IRepository<OrderUrge> orderUrgeRepository,
|
|
|
IFileRepository fileRepository,
|
|
|
- IRepository<OrderScreen> orderScreenRepository
|
|
|
+ IRepository<OrderScreen> orderScreenRepository,
|
|
|
+ IRepository<OrderPublishHistory> orderPublishHistoryRepository
|
|
|
)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
@@ -115,6 +117,7 @@ public class OrderController : BaseController
|
|
|
_orderUrgeRepository = orderUrgeRepository;
|
|
|
_fileRepository = fileRepository;
|
|
|
_orderScreenRepository = orderScreenRepository;
|
|
|
+ _orderPublishHistoryRepository = orderPublishHistoryRepository;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -182,7 +185,7 @@ public class OrderController : BaseController
|
|
|
|
|
|
var orderVisit = new OrderVisit();
|
|
|
orderVisit.No = order.No;
|
|
|
- orderVisit.OrderId = id;
|
|
|
+ orderVisit.OrderId = order.Id;
|
|
|
orderVisit.VisitState = EVisitState.WaitForVisit;
|
|
|
orderVisit.PublishTime = DateTime.Now;
|
|
|
string visitId = await _orderVisitRepository.AddAsync(orderVisit);
|
|
@@ -278,10 +281,10 @@ public class OrderController : BaseController
|
|
|
throw UserFriendlyException.SameMessage("未知数据!");
|
|
|
}
|
|
|
var pubentity = _mapper.Map<PublishedEntityDto>(publishedOrder);
|
|
|
- var visit = await _orderVisitRepository.Queryable().Includes(x => x.VisitDetails).FirstAsync(x => x.Id == publishedOrder.OrderId, HttpContext.RequestAborted);
|
|
|
+ var visit = await _orderVisitRepository.Queryable().Includes(x => x.OrderVisitDetails).FirstAsync(x => x.Id == publishedOrder.OrderId, HttpContext.RequestAborted);
|
|
|
if (visit!=null)
|
|
|
{
|
|
|
- var details = visit.VisitDetails.Where(x => x.VisitTarget == EVisitTarget.Org).ToList();
|
|
|
+ var details = visit.OrderVisitDetails.Where(x => x.VisitTarget == EVisitTarget.Org).ToList();
|
|
|
if (details!=null && details.Count>0)
|
|
|
{
|
|
|
pubentity.IdNames = new List<IdName>();
|
|
@@ -291,7 +294,53 @@ public class OrderController : BaseController
|
|
|
return pubentity;
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 修改发布内容
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.PublishedModify)]
|
|
|
+ [HttpPost("published-order-modify")]
|
|
|
+ public async Task PublishedModify([FromBody]PublishOrderModifyDto dto)
|
|
|
+ {
|
|
|
+ var publishOrder = await _orderPublishRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
+
|
|
|
+ if(publishOrder is null)
|
|
|
+ {
|
|
|
+ throw UserFriendlyException.SameMessage("无效数据");
|
|
|
+ }
|
|
|
+
|
|
|
+ var history = new OrderPublishHistory();
|
|
|
+ history.ArrangeTitleBefor = publishOrder.ArrangeTitle;
|
|
|
+ history.ArrangeTitleAfter = dto.ArrangeTitle;
|
|
|
+ history.ArrangeContentBefor = publishOrder.ArrangeContent;
|
|
|
+ history.ArrangeContentAfter = dto.ArrangeContent;
|
|
|
+ history.ArrangeOpinionBefor = publishOrder.ArrangeOpinion;
|
|
|
+ history.ArrangeOpinionAfter = dto.ArrangeOpinion;
|
|
|
+ history.No = publishOrder.No;
|
|
|
+ history.OrderId = publishOrder.OrderId;
|
|
|
+ history.OrderPublishId = publishOrder.Id;
|
|
|
|
|
|
+
|
|
|
+ publishOrder.ArrangeTitle = dto.ArrangeTitle;
|
|
|
+ publishOrder.ArrangeContent = dto.ArrangeContent;
|
|
|
+ publishOrder.ArrangeOpinion = dto.ArrangeOpinion;
|
|
|
+
|
|
|
+ await _orderPublishRepository.UpdateAsync(publishOrder, HttpContext.RequestAborted);
|
|
|
+ await _orderPublishHistoryRepository.AddAsync(history, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 发布修改记录
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [Permission(EPermission.QueryPublishedHistory)]
|
|
|
+ [HttpGet("published-history-list/{id}")]
|
|
|
+ public async Task<List<OrderPublishHistory>> QueryPublishedHistory(string id)
|
|
|
+ {
|
|
|
+ return await _orderPublishHistoryRepository.Queryable().Where(x => x.OrderPublishId == id).OrderByDescending(x=>x.CreationTime).ToListAsync(HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region 工单回访
|
|
@@ -303,17 +352,18 @@ public class OrderController : BaseController
|
|
|
/// <returns></returns>
|
|
|
[Permission(EPermission.QueryOrderVisitList)]
|
|
|
[HttpGet("visit")]
|
|
|
- public async Task<PagedDto<OrderVisit>> QueryOrderVisitList([FromQuery] QueryOrderVisitDto dto)
|
|
|
+ public async Task<PagedDto<OrderVisitDto>> QueryOrderVisitList([FromQuery] QueryOrderVisitDto dto)
|
|
|
{
|
|
|
var (total, items) = await _orderVisitRepository.Queryable()
|
|
|
.Includes(x => x.Order)
|
|
|
.Includes(x => x.Employee)
|
|
|
+ .Includes(x => x.OrderVisitDetails)
|
|
|
.WhereIF(dto.VisitState == EVisitStateQuery.NoVisit, x => x.VisitState == Share.Enums.Order.EVisitState.WaitForVisit || x.VisitState == Share.Enums.Order.EVisitState.NoSatisfiedWaitForVisit)
|
|
|
.WhereIF(dto.VisitState == EVisitStateQuery.Visited, x => x.VisitState == Share.Enums.Order.EVisitState.Visited)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
|
|
|
.OrderBy(x => x.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
- return new PagedDto<OrderVisit>(total, _mapper.Map<IReadOnlyList<OrderVisit>>(items));
|
|
|
+ return new PagedDto<OrderVisitDto>(total, _mapper.Map<IReadOnlyList<OrderVisitDto>>(items));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -327,6 +377,7 @@ public class OrderController : BaseController
|
|
|
var orderVisit = await _orderVisitRepository.Queryable()
|
|
|
.Includes(x => x.Order)
|
|
|
.Includes(x => x.Employee)
|
|
|
+ .Includes(x=>x.OrderVisitDetails)
|
|
|
.FirstAsync(x => x.Id == id, HttpContext.RequestAborted);
|
|
|
|
|
|
if (orderVisit is null)
|
|
@@ -336,11 +387,13 @@ public class OrderController : BaseController
|
|
|
|
|
|
int visitCount = await _orderVisitRepository.CountAsync(x => x.OrderId == orderVisit.OrderId && x.VisitState == Share.Enums.Order.EVisitState.Visited, HttpContext.RequestAborted);
|
|
|
int againCount = await _orderVisitRepository.CountAsync(x => x.OrderId == orderVisit.OrderId && x.AgainState == EAgainState.DoAgain, HttpContext.RequestAborted);
|
|
|
+ var voiceEvaluate = EnumExts.GetDescriptions<EVoiceEvaluate>();
|
|
|
+ var seatEvaluate = EnumExts.GetDescriptions<ESeatEvaluate>();
|
|
|
var visitSatisfaction = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitSatisfaction);
|
|
|
var dissatisfiedReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.DissatisfiedReason);
|
|
|
var visitManner = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.VisitManner);
|
|
|
|
|
|
- return new { OrderVisitModel = orderVisit, VisitCount = visitCount, AgainCount = againCount, VisitSatisfaction = visitSatisfaction, DissatisfiedReason = dissatisfiedReason, VisitManner = visitManner };
|
|
|
+ return new { OrderVisitModel = orderVisit, VisitCount = visitCount, AgainCount = againCount, VisitSatisfaction = visitSatisfaction, DissatisfiedReason = dissatisfiedReason, VisitManner = visitManner,ViceEvaluate= voiceEvaluate, SeatEvaluate = seatEvaluate };
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -375,36 +428,48 @@ public class OrderController : BaseController
|
|
|
//var visit = await _orderVisitRepository.GetAsync(dto.Id, HttpContext.RequestAborted);
|
|
|
var visit = await _orderVisitRepository.Queryable()
|
|
|
.Includes(d => d.Order)
|
|
|
+ .Includes(d => d.OrderVisitDetails)
|
|
|
.FirstAsync(d => d.Id == dto.Id, HttpContext.RequestAborted);
|
|
|
if (visit is null)
|
|
|
throw UserFriendlyException.SameMessage("未知回访信息");
|
|
|
|
|
|
- var first = dto.VisitDetails.First(x => x.VisitTarget == EVisitTarget.Org);
|
|
|
+ var first = dto.VisitDetails.FirstOrDefault(x => x.VisitTarget == EVisitTarget.Org);
|
|
|
|
|
|
|
|
|
//更新主表
|
|
|
- visit.VisitState = Share.Enums.Order.EVisitState.Visited;
|
|
|
- visit.VisitTime = DateTime.Now;
|
|
|
+ if (dto.IsPutThrough)
|
|
|
+ {
|
|
|
+ visit.VisitState = Share.Enums.Order.EVisitState.Visited;
|
|
|
+ visit.VisitTime = DateTime.Now;
|
|
|
+ visit.VisitType = EVisitType.ArtificialVisit;
|
|
|
+ }
|
|
|
visit.IsPutThrough = dto.IsPutThrough;
|
|
|
visit.AgainState = dto.IsAgain ? EAgainState.NeedAgain : EAgainState.NoAgain;
|
|
|
visit.EmployeeId = _sessionContext.UserId;
|
|
|
- visit.NowEvaluate = first.OrgProcessingResults;
|
|
|
+ if (first!=null)
|
|
|
+ {
|
|
|
+ visit.NowEvaluate = first.OrgProcessingResults;
|
|
|
+ }
|
|
|
//await _orderVisitRepository.UpdateAsync(visit,HttpContext.RequestAborted);
|
|
|
|
|
|
//update order
|
|
|
- visit.Order.Visited(first.OrgProcessingResults.Id, first.OrgProcessingResults.Name);
|
|
|
-
|
|
|
- //更新明細
|
|
|
- //var visitDetails = _mapper.Map <List<OrderVisitDetail>>(dto.VisitDetails);
|
|
|
- //await _orderVisitedDetailRepository.UpdateRangeAsync(visitDetails, HttpContext.RequestAborted);
|
|
|
- visit.VisitDetails = _mapper.Map<List<OrderVisitDetail>>(dto.VisitDetails);
|
|
|
-
|
|
|
- _orderVisitRepository.UpdateNav(visit);
|
|
|
-
|
|
|
- var orderDto = _mapper.Map<OrderDto>(visit.Order);
|
|
|
-
|
|
|
- //推省上
|
|
|
- _capPublisher.Publish(EventNames.HotlineOrderVisited, new PublishVisitDto() { Order = orderDto, No = visit.No, VisitType = visit.VisitType, VisitName = visit.Employee.Name, VisitTime = visit.VisitTime, VisitRemark = first.VisitContent, AreaCode = visit.Order.AreaCode!, SubjectResultSatifyCode = first.OrgProcessingResults.Id, FirstSatisfactionCode = visit.Order.FirstVisitResultCode!, ClientGuid = "" });
|
|
|
+ if (dto.IsPutThrough)
|
|
|
+ {
|
|
|
+ if (first!=null)
|
|
|
+ {
|
|
|
+ visit.Order.Visited(first.OrgProcessingResults.Id, first.OrgProcessingResults.Name);
|
|
|
+ }
|
|
|
+ _mapper.Map(dto.VisitDetails,visit.OrderVisitDetails);
|
|
|
+ await _orderVisitRepository.UpdateAsync(visit,HttpContext.RequestAborted);
|
|
|
+ await _orderVisitedDetailRepository.UpdateRangeAsync(visit.OrderVisitDetails, HttpContext.RequestAborted);
|
|
|
+ await _orderRepository.UpdateAsync(visit.Order, HttpContext.RequestAborted);
|
|
|
+ var orderDto = _mapper.Map<OrderDto>(visit.Order);
|
|
|
+ if (first!=null)
|
|
|
+ {
|
|
|
+ //推省上
|
|
|
+ _capPublisher.Publish(EventNames.HotlineOrderVisited, new PublishVisitDto() { Order = orderDto, No = visit.No, VisitType = visit.VisitType, VisitName = visit.CreatorName, VisitTime = visit.VisitTime, VisitRemark = first.VisitContent, AreaCode = visit.Order.AreaCode!, SubjectResultSatifyCode = first.OrgProcessingResults.Id, FirstSatisfactionCode = visit.Order.FirstVisitResultCode!, ClientGuid = "" });
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#endregion
|