|
@@ -36,6 +36,7 @@ using XF.Utility.EnumExtensions;
|
|
|
using Microsoft.IdentityModel.Tokens;
|
|
|
using System.Linq;
|
|
|
using Hotline.Share.Dtos.FlowEngine.Workflow;
|
|
|
+using System.Diagnostics;
|
|
|
using System.Transactions;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
@@ -82,6 +83,8 @@ public class OrderController : BaseController
|
|
|
private readonly IRepository<OrderVisitApply> _orderVisitApplyRepository;
|
|
|
private readonly IRepository<OrderFinality> _orderFinalityRepository;
|
|
|
private readonly IRepository<OrderSendBack> _orderSendBackRepository;
|
|
|
+ private readonly IRepository<OrderSpecial> _orderSpecialRepository;
|
|
|
+ private readonly IRepository<WorkflowTrace> _workflowTraceRepository;
|
|
|
|
|
|
|
|
|
|
|
@@ -122,7 +125,9 @@ public class OrderController : BaseController
|
|
|
IRepository<OrderObserve> orderObserveRepository,
|
|
|
IRepository<OrderFinality> orderFinalityRepository,
|
|
|
IRepository<OrderVisitApply> orderVisitApplyRepository,
|
|
|
- IRepository<OrderSendBack> orderSendBackRepository
|
|
|
+ IRepository<OrderSendBack> orderSendBackRepository,
|
|
|
+ IRepository<OrderSpecial> orderSpecialRepository,
|
|
|
+ IRepository<WorkflowTrace> workflowTraceRepository
|
|
|
)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
@@ -162,8 +167,8 @@ public class OrderController : BaseController
|
|
|
_orderFinalityRepository = orderFinalityRepository;
|
|
|
_orderVisitApplyRepository = orderVisitApplyRepository;
|
|
|
_orderSendBackRepository = orderSendBackRepository;
|
|
|
-
|
|
|
-
|
|
|
+ _orderSpecialRepository = orderSpecialRepository;
|
|
|
+ _workflowTraceRepository = workflowTraceRepository;
|
|
|
}
|
|
|
|
|
|
#region 工单发布
|
|
@@ -1111,16 +1116,16 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.OrderVisit.Order.Title.Contains(dto.Keyword!) || d.OrderVisit.Order.No.Contains(dto.Keyword!))
|
|
|
.Where(d => d.VisitTarget == EVisitTarget.Org && d.VisitOrgCode == _sessionContext.OrgId && (
|
|
|
- SqlFunc.JsonField(d.OrgProcessingResults, "Value") == "不满意" || SqlFunc.JsonField(d.OrgProcessingResults, "Value") == "非常不满意" ||
|
|
|
- SqlFunc.JsonField(d.OrgHandledAttitude, "Value") == "不满意" || SqlFunc.JsonField(d.OrgHandledAttitude, "Value") == "非常不满意"
|
|
|
+ SqlFunc.JsonField(d.OrgProcessingResults, "Key") == "1" || SqlFunc.JsonField(d.OrgProcessingResults, "Key") == "2" ||
|
|
|
+ SqlFunc.JsonField(d.OrgHandledAttitude, "Key") == "1" || SqlFunc.JsonField(d.OrgHandledAttitude, "Key") == "2"
|
|
|
));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
query.WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.OrderVisit.Order.Title.Contains(dto.Keyword!) || d.OrderVisit.Order.No.Contains(dto.Keyword!))
|
|
|
.Where(d => d.VisitTarget == EVisitTarget.Org && (
|
|
|
- SqlFunc.JsonField(d.OrgProcessingResults, "Value") == "不满意" || SqlFunc.JsonField(d.OrgProcessingResults, "Value") == "非常不满意" ||
|
|
|
- SqlFunc.JsonField(d.OrgHandledAttitude, "Value") == "不满意" || SqlFunc.JsonField(d.OrgHandledAttitude, "Value") == "非常不满意"
|
|
|
+ SqlFunc.JsonField(d.OrgProcessingResults, "Key") == "1" || SqlFunc.JsonField(d.OrgProcessingResults, "Key") == "2" ||
|
|
|
+ SqlFunc.JsonField(d.OrgHandledAttitude, "Key") == "1" || SqlFunc.JsonField(d.OrgHandledAttitude, "Key") == "2"
|
|
|
));
|
|
|
}
|
|
|
var (total, items) = await query
|
|
@@ -1977,12 +1982,14 @@ public class OrderController : BaseController
|
|
|
[HttpGet("send_back")]
|
|
|
public async Task<PagedDto<OrderSendBackDto>> UrgeList([FromQuery] OrderSendBackListDto dto)
|
|
|
{
|
|
|
- var (total, items) = await _orderSendBackRepository.Queryable()
|
|
|
- .Includes(x => x.Order)
|
|
|
- .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
- d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
|
|
|
- .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
|
|
|
- .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
|
|
|
+ var (total, items) = await _orderSendBackRepository.Queryable()
|
|
|
+ .Includes(x => x.Order)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
+ d => d.Order.Title.Contains(dto.Keyword!) || d.Order.No.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
|
|
|
+ .WhereIF(dto.State is > 0, d => d.State > 0)
|
|
|
+ .WhereIF(dto.State is 0, d => d.State == 0)
|
|
|
.OrderByDescending(x => x.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
|
|
@@ -2087,6 +2094,154 @@ public class OrderController : BaseController
|
|
|
#endregion
|
|
|
|
|
|
#region 工单特提
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单特提信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dtos"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ //[Permission(EPermission.AddCitizen)]
|
|
|
+ [HttpPost("special")]
|
|
|
+ public async Task Add([FromBody] OrderSpecialAddDto dto)
|
|
|
+ {
|
|
|
+ var specialAny =await _orderSpecialRepository.Queryable().Where(x => x.OrderId == dto.OrderId && x.State == 0).AnyAsync();
|
|
|
+ if(specialAny) throw UserFriendlyException.SameMessage("工单已存在待审批特提信息!");
|
|
|
+ var model = _mapper.Map<OrderSpecial>(dto);
|
|
|
+ model.OrgId = _sessionContext.OrgId;
|
|
|
+ model.OrgName = _sessionContext.OrgName;
|
|
|
+ if (!dto.Audit) model.State = 1;
|
|
|
+ await _orderSpecialRepository.AddAsync(model, HttpContext.RequestAborted);
|
|
|
+ if (model.State == 1)
|
|
|
+ {
|
|
|
+ //TODO 调用流程
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 审批工单特提信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ //[Permission(EPermission.UpdateCitizen)]
|
|
|
+ [HttpPut("special")]
|
|
|
+ public async Task Update([FromBody] AuditOrderSpecialDto dto)
|
|
|
+ {
|
|
|
+ var special = await _orderSpecialRepository.GetAsync(dto.Id);
|
|
|
+ if (special is null) throw UserFriendlyException.SameMessage("无效特提审批信息!");
|
|
|
+ if (special.State != 0) throw UserFriendlyException.SameMessage("无效特提审批信息,特提审批信息错误,该信息已审核!");
|
|
|
+ _mapper.Map(dto, special);
|
|
|
+ await _orderSpecialRepository.UpdateAsync(special, HttpContext.RequestAborted);
|
|
|
+ if (special.State == 1)
|
|
|
+ {
|
|
|
+ //TODO 调用流程
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取工单特提信息列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ //[Permission(EPermission.CitizenList)]
|
|
|
+ [HttpGet("special/list")]
|
|
|
+ public async Task<PagedDto<OrderSpecialDto>> List([FromQuery] OrderSpecialListDto dto)
|
|
|
+ {
|
|
|
+ var (total, items) = await _orderSpecialRepository.Queryable()
|
|
|
+ .Includes(x=>x.Order)
|
|
|
+ .Includes(x=>x.Trace)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword),x=>x.Order.No.Contains(dto.Keyword!) || x.Order.Title.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(dto.State.HasValue, x=>x.State == dto.State)
|
|
|
+ .OrderByDescending(x => x.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderSpecialDto>(total, _mapper.Map<IReadOnlyList<OrderSpecialDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 工单列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("special/apply_list")]
|
|
|
+ public async Task<PagedDto<OrderDto>> SpecialList([FromQuery] QueryOrderDto dto)
|
|
|
+ {
|
|
|
+ var query = _orderRepository.Queryable()
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword),
|
|
|
+ d => d.Title.Contains(dto.Keyword!) || d.No.Contains(dto.Keyword!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Content), d => d.Content.Contains(dto.Content!))
|
|
|
+ .WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptType))
|
|
|
+ .WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannel))
|
|
|
+ .WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone.Contains(dto.TransferPhone!))
|
|
|
+ .WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.Workflow.ActualHandleOrgCode))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.NameOrNo),
|
|
|
+ d => d.AcceptorName.Contains(dto.NameOrNo!) || d.AcceptorStaffNo.Contains(dto.NameOrNo!))
|
|
|
+ .WhereIF(dto.CreationTimeStart.HasValue, d => d.CreationTime >= dto.CreationTimeStart)
|
|
|
+ .WhereIF(dto.CreationTimeEnd.HasValue, d => d.CreationTime <= dto.CreationTimeEnd)
|
|
|
+ .WhereIF(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.PhoneNo),
|
|
|
+ d => d.FromPhone.Contains(dto.PhoneNo!) || d.Contact.Contains(dto.PhoneNo!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode)
|
|
|
+ .WhereIF(dto.ExpiredTimeStart.HasValue, d => d.ExpiredTime >= dto.ExpiredTimeStart)
|
|
|
+ .WhereIF(dto.ExpiredTimeEnd.HasValue, d => d.ExpiredTime <= dto.ExpiredTimeEnd)
|
|
|
+ .WhereIF(dto.Statuses.Any(), d => dto.Statuses.Contains(d.Status))
|
|
|
+ .WhereIF(dto.Statuses.Any(d => d == EOrderStatus.BackToUnAccept), d => d.Status <= EOrderStatus.BackToUnAccept);
|
|
|
+ if (!_sessionContext.OrgIsCenter && _sessionContext.OrgId.Length >= 6)
|
|
|
+ {
|
|
|
+ var oneCode = _sessionContext.OrgId.Substring(0, 6);
|
|
|
+ query = query.Where(x => x.AcceptorOrgCode.StartsWith(oneCode) && !x.AcceptorOrgCode.StartsWith(_sessionContext.OrgId));
|
|
|
+ }
|
|
|
+ var (total, items) = await query
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
+ .ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
+ return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取工单特提信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ //[Permission(EPermission.CitizenEntity)]
|
|
|
+ [HttpGet("special/{id}")]
|
|
|
+ public async Task<OrderSpecialDto> SpecialEntity(string id)
|
|
|
+ {
|
|
|
+ var item = await _orderSpecialRepository.Queryable()
|
|
|
+ .Includes(x => x.Order)
|
|
|
+ .Includes(x => x.Trace)
|
|
|
+ .FirstAsync(x => x.Id == id);
|
|
|
+ return _mapper.Map<OrderSpecialDto>(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 列表页面基础数据
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("special/base/{id}")]
|
|
|
+ public async Task<object> SpecialBaseData(string id)
|
|
|
+ {
|
|
|
+ var rsp = new
|
|
|
+ {
|
|
|
+ SpecialTimeType = EnumExts.GetDescriptions<ETimeType>(),
|
|
|
+ SpecialReason = _sysDicDataCacheManager.GetSysDicDataCache(SysDicTypeConsts.SpecialReason),
|
|
|
+ Traces = await _workflowTraceRepository.Queryable().Where(x=>x.WorkflowId == id).ToListAsync()
|
|
|
+ };
|
|
|
+ return rsp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取办理时限
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("special/handle_time")]
|
|
|
+ public async Task<int> SpecialHandleTime([FromQuery] OrderSpecialHandleTime dto)
|
|
|
+ {
|
|
|
+ var order = await _orderRepository.GetAsync(dto.OrderId);
|
|
|
+ var trace = await _workflowTraceRepository.GetAsync(dto.TraceId);
|
|
|
+ var org = await _organizeRepository.GetAsync(trace.HandlerOrgId);
|
|
|
+ if (org != null && org.IsCenter) return _timeLimitDomainService.GetOrderTimeLimitConfig(string.Empty);
|
|
|
+ return _timeLimitDomainService.GetOrderTimeLimitConfig(order.AcceptTypeCode);
|
|
|
+ }
|
|
|
#endregion
|
|
|
|
|
|
#region 市民信息
|