|
@@ -1,8 +1,10 @@
|
|
|
using Hotline.Application.FlowEngine;
|
|
|
+using Hotline.FlowEngine.Definitions;
|
|
|
using Hotline.FlowEngine.Workflows;
|
|
|
using Hotline.Orders;
|
|
|
using Hotline.Repository.SqlSugar.Extensions;
|
|
|
using Hotline.Settings;
|
|
|
+using Hotline.Settings.Hotspots;
|
|
|
using Hotline.Share.Dtos;
|
|
|
using Hotline.Share.Dtos.FlowEngine;
|
|
|
using Hotline.Share.Dtos.Order;
|
|
@@ -27,8 +29,11 @@ public class OrderController : BaseController
|
|
|
private readonly IOrderRepository _orderRepository;
|
|
|
private readonly IWorkflowApplication _workflowApplication;
|
|
|
private readonly IWorkflowDomainService _workflowDomainService;
|
|
|
- private readonly IHotSpotTypeRepository _hotSpotTypeRepository;
|
|
|
+ private readonly IHotspotTypeRepository _hotspotTypeRepository;
|
|
|
+ private readonly ISystemDomainService _systemDomainService;
|
|
|
private readonly ISystemOrganizeRepository _organizeRepository;
|
|
|
+ private readonly IDefinitionDomainService _definitionDomainService;
|
|
|
+ private readonly ISessionContext _sessionContext;
|
|
|
private readonly IMapper _mapper;
|
|
|
|
|
|
public OrderController(
|
|
@@ -36,16 +41,22 @@ public class OrderController : BaseController
|
|
|
IOrderRepository orderRepository,
|
|
|
IWorkflowApplication workflowApplication,
|
|
|
IWorkflowDomainService workflowDomainService,
|
|
|
- IHotSpotTypeRepository hotSpotTypeRepository,
|
|
|
+ IHotspotTypeRepository hotspotTypeRepository,
|
|
|
+ ISystemDomainService systemDomainService,
|
|
|
ISystemOrganizeRepository organizeRepository,
|
|
|
+ IDefinitionDomainService definitionDomainService,
|
|
|
+ ISessionContext sessionContext,
|
|
|
IMapper mapper)
|
|
|
{
|
|
|
_orderDomainService = orderDomainService;
|
|
|
_orderRepository = orderRepository;
|
|
|
_workflowApplication = workflowApplication;
|
|
|
_workflowDomainService = workflowDomainService;
|
|
|
- _hotSpotTypeRepository = hotSpotTypeRepository;
|
|
|
+ _hotspotTypeRepository = hotspotTypeRepository;
|
|
|
+ _systemDomainService = systemDomainService;
|
|
|
_organizeRepository = organizeRepository;
|
|
|
+ _definitionDomainService = definitionDomainService;
|
|
|
+ _sessionContext = sessionContext;
|
|
|
_mapper = mapper;
|
|
|
}
|
|
|
|
|
@@ -57,7 +68,8 @@ public class OrderController : BaseController
|
|
|
[HttpGet]
|
|
|
public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderDto dto)
|
|
|
{
|
|
|
- var (total, items) = await _orderRepository.Queryable()
|
|
|
+ var (total, items) = await _orderRepository.Queryable(workflowFilter: false)
|
|
|
+ .Includes(d => d.Employee)
|
|
|
.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))
|
|
@@ -70,7 +82,7 @@ public class OrderController : BaseController
|
|
|
.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(dto.PushType.HasValue, d => d.PushType == dto.PushType)
|
|
|
+ .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))
|
|
@@ -85,9 +97,11 @@ public class OrderController : BaseController
|
|
|
/// <param name="dto"></param>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("history")]
|
|
|
- public async Task<PagedDto<OrderDto>> Query([FromQuery] PagedRequest dto)
|
|
|
+ public async Task<PagedDto<OrderDto>> Query([FromQuery] QueryOrderHistoryDto dto)
|
|
|
{
|
|
|
var (total, items) = await _orderRepository.Queryable()
|
|
|
+ .Where(d => d.FromPhone == dto.PhoneNo)
|
|
|
+ .OrderByDescending(d => d.CreationTime)
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
return new PagedDto<OrderDto>(total, _mapper.Map<IReadOnlyList<OrderDto>>(items));
|
|
|
}
|
|
@@ -100,7 +114,8 @@ public class OrderController : BaseController
|
|
|
[HttpGet("{id}")]
|
|
|
public async Task<OrderDto> Get(string id)
|
|
|
{
|
|
|
- var order = await _orderRepository.Queryable()
|
|
|
+ var order = await _orderRepository.Queryable(workflowFilter: false)
|
|
|
+ .Includes(d => d.Employee)
|
|
|
.Includes(d => d.OrderComplain)
|
|
|
.Includes(d => d.OrderReport)
|
|
|
.FirstAsync(d => d.Id == id);
|
|
@@ -119,9 +134,15 @@ public class OrderController : BaseController
|
|
|
public async Task<string> Add([FromBody] AddOrderDto dto)
|
|
|
{
|
|
|
var order = _mapper.Map<Order>(dto);
|
|
|
+ order.EmployeeId = _sessionContext.RequiredUserId;
|
|
|
return await _orderDomainService.AddAsync(order, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 删除工单
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="id"></param>
|
|
|
+ /// <returns></returns>
|
|
|
[HttpDelete("{id}")]
|
|
|
public async Task Remove(string id)
|
|
|
{
|
|
@@ -145,7 +166,8 @@ public class OrderController : BaseController
|
|
|
throw UserFriendlyException.SameMessage("无效工单编号");
|
|
|
if (order.Status != EOrderStatus.Temporary)
|
|
|
throw UserFriendlyException.SameMessage("非草稿工单不可编辑");
|
|
|
- await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
+ _mapper.Map(dto, order);
|
|
|
+ await _orderRepository.UpdateOrderNavAsync(order, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -162,27 +184,45 @@ public class OrderController : BaseController
|
|
|
throw UserFriendlyException.SameMessage("无效工单编号");
|
|
|
if (order.Status != EOrderStatus.Temporary || !string.IsNullOrEmpty(order.WorkflowId))
|
|
|
throw UserFriendlyException.SameMessage("工单已发起流程");
|
|
|
+
|
|
|
+ var definition = await _definitionDomainService.GetLastVersionDefinitionByModuleCodeAsync(
|
|
|
+ WorkflowModuleConsts.OrderManage, HttpContext.RequestAborted);
|
|
|
+ if (definition is null)
|
|
|
+ throw UserFriendlyException.SameMessage("未配置流程模板");
|
|
|
+ dto.DefinitionCode = definition.Code;
|
|
|
+ dto.Title = order.Title;
|
|
|
var workflowId = await _workflowApplication.StartWorkflowAsync(dto, HttpContext.RequestAborted);
|
|
|
order.StartFlow(workflowId);
|
|
|
await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 查询工单办理流程开启参数
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("flow-start")]
|
|
|
+ public async Task<IReadOnlyList<NextStepOptions>> GetFlowStartOptionsAsync()
|
|
|
+ {
|
|
|
+ return await _workflowApplication.GetStartOptionsAsync(WorkflowModuleConsts.OrderManage, HttpContext.RequestAborted);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 列表页面基础数据
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("base-data")]
|
|
|
- public dynamic BaseData()
|
|
|
+ public async Task<object> BaseData()
|
|
|
{
|
|
|
- return new
|
|
|
+ var rsp = new
|
|
|
{
|
|
|
AcceptTypeOptions = EnumExts.GetDescriptions<EAcceptType>(),
|
|
|
ChannelOptions = EnumExts.GetDescriptions<EChannel>(),
|
|
|
- OrgsOptions = _organizeRepository.GetOrgJson(),
|
|
|
+ OrgsOptions = await _organizeRepository.GetOrgJson(),
|
|
|
EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
|
|
|
- PushTypeOptions = EnumExts.GetDescriptions<EPushType>(),
|
|
|
+ PushTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.PushType),
|
|
|
OrderStatusOptions = EnumExts.GetDescriptions<EOrderStatus>(),
|
|
|
};
|
|
|
+ return rsp;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -190,21 +230,21 @@ public class OrderController : BaseController
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("base-data-add")]
|
|
|
- public dynamic BaseDataAdd()
|
|
|
+ public async Task<object> BaseDataAdd()
|
|
|
{
|
|
|
- return new
|
|
|
+ var rsp = new
|
|
|
{
|
|
|
ChannelOptions = EnumExts.GetDescriptions<EChannel>(),
|
|
|
GenderOptions = EnumExts.GetDescriptions<EGender>(),
|
|
|
IdentityTypeOptions = EnumExts.GetDescriptions<EIdentityType>(),
|
|
|
- LicenceTypeOptions = EnumExts.GetDescriptions<ELicenceType>(),
|
|
|
- //AgeRangeOptions =
|
|
|
+ LicenceTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.LicenceType),
|
|
|
+ AgeRangeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.AgeRange),
|
|
|
OrderTypeOptions = EnumExts.GetDescriptions<EOrderType>(),
|
|
|
AcceptTypeOptions = EnumExts.GetDescriptions<EAcceptType>(),
|
|
|
EmergencyLevelOptions = EnumExts.GetDescriptions<EEmergencyLevel>(),
|
|
|
- PushTypeOptions = EnumExts.GetDescriptions<EPushType>(),
|
|
|
- //todo 是否重复
|
|
|
+ PushTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.PushType),
|
|
|
};
|
|
|
+ return rsp;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -212,25 +252,28 @@ public class OrderController : BaseController
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
[HttpGet("base-data-ext")]
|
|
|
- public dynamic BaseDataExtension()
|
|
|
+ public async Task<object> BaseDataExtension()
|
|
|
{
|
|
|
- //todo
|
|
|
- return new
|
|
|
+ var rsp = new
|
|
|
{
|
|
|
- //LicenceTypeOptions = SysDicTypeConsts.LicenceType,
|
|
|
- ComplainTypeOptions = EnumExts.GetDescriptions<EComplainType>()
|
|
|
+ LicenceTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.LicenceType),
|
|
|
+ IdentityTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ProviderIdentityType),
|
|
|
+ IdentityOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.Identity),
|
|
|
+ NationalityOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.Nationality),
|
|
|
+ NationOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.Nation),
|
|
|
+ MarketTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.MarketType),
|
|
|
+ IndustryClassifyOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.IndustryClassify),
|
|
|
+ BrandOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.Brand),
|
|
|
+ ObjectClassifyOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ObjectClassify),
|
|
|
+ ComplainClassifyOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ComplainClassify),
|
|
|
+ ReportClassifyOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ReportClassify),
|
|
|
+ SalesModeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.SalesMode),
|
|
|
+ ECommercePlatformOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.ECommercePlatform),
|
|
|
+ PatentTypeOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.PatentType),
|
|
|
+ AffairTargetOptions = await _systemDomainService.GetSysDicDataByCodeAsync(SysDicTypeConsts.AffairTarget),
|
|
|
+ ComplainTypeOptions = EnumExts.GetDescriptions<EComplainType>(),
|
|
|
};
|
|
|
+ return rsp;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 获取热点
|
|
|
- /// </summary>
|
|
|
- /// <param name="parentId">父级ID</param>
|
|
|
- /// <returns></returns>
|
|
|
- [HttpGet("hotspottype-list-parent")]
|
|
|
- public async Task<List<HotSpotType>> GetHotSpotType(string? parentId)
|
|
|
- {
|
|
|
- return await _hotSpotTypeRepository.Queryable().Where(x => x.ParentId == parentId).ToListAsync();
|
|
|
- }
|
|
|
}
|