|
@@ -1,4 +1,5 @@
|
|
|
-using DotNetCore.CAP;
|
|
|
+using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
+using DotNetCore.CAP;
|
|
|
using FluentValidation;
|
|
|
using Hotline.Api.Filter;
|
|
|
using Hotline.Application.CallCenter;
|
|
@@ -70,6 +71,7 @@ using Microsoft.AspNetCore.Authorization;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.Options;
|
|
|
using MiniExcelLibs;
|
|
|
+using NPOI.SS.Formula.Functions;
|
|
|
using SqlSugar;
|
|
|
using System.Text;
|
|
|
using System.Text.Json;
|
|
@@ -80,6 +82,7 @@ using XF.Domain.Exceptions;
|
|
|
using XF.Domain.Repository;
|
|
|
using XF.Utility.EnumExtensions;
|
|
|
using OrderDto = Hotline.Share.Dtos.Order.OrderDto;
|
|
|
+using UserInfo = Hotline.Share.Dtos.FlowEngine.UserInfo;
|
|
|
|
|
|
namespace Hotline.Api.Controllers;
|
|
|
|
|
@@ -1334,7 +1337,9 @@ public class OrderController : BaseController
|
|
|
Histories = histories,
|
|
|
IsCanUpdate = isCanUpdate
|
|
|
};
|
|
|
- if (_appOptions.Value.IsLuZhou && rsp.OrderVisitModel.Order.IsSecret)
|
|
|
+ if (_appOptions.Value.IsLuZhou
|
|
|
+ && !_sessionContext.OrgIsCenter
|
|
|
+ && rsp.OrderVisitModel.Order.IsSecret)
|
|
|
{
|
|
|
rsp.OrderVisitModel.Order.FromPhone = "****";//rsp.OrderVisitModel.Order.FromPhone?.Replace(rsp.OrderVisitModel.Order.FromPhone.Substring(3, 4), "****");
|
|
|
rsp.OrderVisitModel.Order.Contact = "****"; //rsp.OrderVisitModel.Order.Contact?.Replace(rsp.OrderVisitModel.Order.Contact.Substring(3, 4), "****");
|
|
@@ -2059,10 +2064,10 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (_appOptions.Value.IsLuZhou && delaydto.DelayNum > order.TimeLimitCount) throw UserFriendlyException.SameMessage("申请天数需小于等于工单办理时限!");
|
|
|
+ if (_appOptions.Value.IsLuZhou && delaydto.DelayNum > order.TimeLimitCount) throw UserFriendlyException.SameMessage("申请天数需小于等于工单办理时限!");
|
|
|
|
|
|
- //验证延期次数
|
|
|
- var setting = _systemSettingCacheManager.GetSetting(SettingConstants.DelayNum);
|
|
|
+ //验证延期次数
|
|
|
+ var setting = _systemSettingCacheManager.GetSetting(SettingConstants.DelayNum);
|
|
|
if (int.Parse(setting?.SettingValue[0]) != 0 && !_sessionContext.OrgIsCenter)
|
|
|
{
|
|
|
int count = await _orderDelayRepository.CountAsync(x =>
|
|
@@ -2555,7 +2560,8 @@ public class OrderController : BaseController
|
|
|
.ToPagedListAsync(dto.PageIndex, dto.PageSize, HttpContext.RequestAborted);
|
|
|
var data = _mapper.Map<List<OrderVisitDetailDto>>(items);
|
|
|
var isAdmin = _orderDomainService.IsCheckAdmin();
|
|
|
- data.ForEach(d => d.IsShowOperate = dto.ScreenType == EOrderScreenType.Org && (isAdmin == true || (d.VisitOrgCode == _sessionContext.OrgId)));
|
|
|
+ data.ForEach(d => d.IsShowOperate = (dto.ScreenType == EOrderScreenType.Org && d.VisitOrgCode == _sessionContext.OrgId)
|
|
|
+ || isAdmin == true || (dto.ScreenType == EOrderScreenType.Seat));
|
|
|
return new PagedDto<OrderVisitDetailDto>(total, data);
|
|
|
}
|
|
|
|
|
@@ -2974,11 +2980,11 @@ public class OrderController : BaseController
|
|
|
var screen = await _orderScreenRepository.GetAsync(id);
|
|
|
var steps = await _workflowStepRepository.Queryable().Where(x => x.WorkflowId == screen.WorkflowId).ToListAsync();
|
|
|
var allFiles = new List<FileDto>();
|
|
|
- if (screen != null)
|
|
|
- {
|
|
|
- var ids = screen.FileJson.Select(x => x.Id).ToList();
|
|
|
- allFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
|
|
|
- }
|
|
|
+ //if (screen != null)
|
|
|
+ //{
|
|
|
+ // var ids = screen.FileJson.Select(x => x.Id).ToList();
|
|
|
+ // allFiles = await _fileRepository.GetFilesAsync(ids, HttpContext.RequestAborted);
|
|
|
+ //}
|
|
|
foreach (var step in steps)
|
|
|
{
|
|
|
if (step.FileJson != null && step.FileJson.Any())
|
|
@@ -6224,15 +6230,14 @@ public class OrderController : BaseController
|
|
|
var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) = await _workflowDomainService.RecallAsync(recall,
|
|
|
dto.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Recall,
|
|
|
order.ExpiredTime, order.Status >= EOrderStatus.Filed, EHandleMode.Recall,
|
|
|
- async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
|
|
|
+ (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
|
|
|
{
|
|
|
var basicWorkflowDto = _mapper.Map<BasicWorkflowDto>(dto);
|
|
|
var stepAssignInfo = _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
|
|
|
- basicWorkflowDto, HttpContext.RequestAborted).Result;
|
|
|
+ basicWorkflowDto, HttpContext.RequestAborted).Result; //todo 优化异步
|
|
|
if (stepAssignInfo is null) return;
|
|
|
var validator = new StepAssignInfoValidator();
|
|
|
- await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
|
|
|
-
|
|
|
+ validator.ValidateAndThrow(stepAssignInfo);
|
|
|
targetStepNew.Assign(stepAssignInfo);
|
|
|
},
|
|
|
HttpContext.RequestAborted);
|
|
@@ -6401,7 +6406,7 @@ public class OrderController : BaseController
|
|
|
DateTime startTime = DateTime.Now;
|
|
|
DateTime beginTime = DateTime.Now;
|
|
|
|
|
|
- if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue && !order.FileOrgIsCenter.Value)
|
|
|
+ if (order.CenterToOrgTime.HasValue && order.FileOrgIsCenter.HasValue && !order.FileOrgIsCenter.Value)
|
|
|
{
|
|
|
startTime = order.CenterToOrgTime.Value;
|
|
|
}
|
|
@@ -6414,8 +6419,8 @@ public class OrderController : BaseController
|
|
|
{
|
|
|
startTime = order.ExpiredTime.Value;
|
|
|
beginTime = startTime;
|
|
|
- }
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
var expiredTime = await _expireTime.CalcEndTime(beginTime, startTime, order.AcceptTypeCode);
|
|
|
if (dto.TimeLimit.HasValue && dto.TimeLimit.Value > 0)
|
|
|
{
|
|
@@ -6451,26 +6456,26 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
- // {
|
|
|
- // var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
- // await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
|
|
|
- // { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
- // .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
- // }
|
|
|
- DateTime endTime = order.ExpiredTime!.Value;
|
|
|
- var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
|
|
|
+ // if (dto.BusinessType == EBusinessType.Send && recall.NextHandlers.Any())
|
|
|
+ // {
|
|
|
+ // var flowStepHandler = recall.NextHandlers.FirstOrDefault();
|
|
|
+ // await _orderRepository.Updateable().SetColumns(o => new Orders.Order()
|
|
|
+ // { CenterToOrgHandlerId = flowStepHandler.UserId, CenterToOrgHandlerName = flowStepHandler.Username })
|
|
|
+ // .Where(o => o.Id == order.Id).ExecuteCommandAsync(HttpContext.RequestAborted);
|
|
|
+ // }
|
|
|
+ DateTime endTime = order.ExpiredTime!.Value;
|
|
|
+ var (workflow, targetStepDefine, currentStep, targetStep, newStep, isOrgToCenter) =
|
|
|
await _workflowDomainService.RecallAsync(
|
|
|
recall, recall.NextHandlers.FirstOrDefault(), EWorkflowTraceType.Redo,
|
|
|
endTime, order.Status >= EOrderStatus.Filed, EHandleMode.Redo,
|
|
|
- async (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
|
|
|
+ (workflow, currentStep, targetStepDefine, targetStep, targetStepNew) =>
|
|
|
{
|
|
|
var stepAssignInfo = recall.NextHandlers.FirstOrDefault()
|
|
|
- ?? await _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
|
|
|
- recall, HttpContext.RequestAborted);
|
|
|
+ ?? _orderApplication.GetOrderRecallAssignInfoAsync(workflow, targetStepDefine, targetStep,
|
|
|
+ recall, HttpContext.RequestAborted).Result; //todo 优化异步
|
|
|
if (stepAssignInfo is null) return;
|
|
|
var validator = new StepAssignInfoValidator();
|
|
|
- await validator.ValidateAndThrowAsync(stepAssignInfo, HttpContext.RequestAborted);
|
|
|
+ validator.ValidateAndThrow(stepAssignInfo);
|
|
|
targetStepNew.Assign(stepAssignInfo);
|
|
|
}, HttpContext.RequestAborted);
|
|
|
|
|
@@ -7188,6 +7193,60 @@ public class OrderController : BaseController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 批量重提 根据传入的工单编号特提所有工单
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("order_batch_special")]
|
|
|
+ [AllowAnonymous]
|
|
|
+ public async Task BatchSpecial([FromBody] OrderBatchSpecialDto model)
|
|
|
+ {
|
|
|
+ var orders = await _orderRepository.Queryable(isAdmin: true)
|
|
|
+ .Includes(o => o.Workflow)
|
|
|
+ .Includes(o => o.OrderVisits)
|
|
|
+ .Where(o => (o.CounterSignType == null || o.CounterSignType == ECounterSignType.Department))
|
|
|
+ .In(o=> o.No, model.No).ToListAsync();
|
|
|
+ if (!orders.Any())
|
|
|
+ throw UserFriendlyException.SameMessage("未查询到工单信息!");
|
|
|
+ foreach (var order in orders)
|
|
|
+ {
|
|
|
+ var nextStep = await _workflowTraceRepository.Queryable()
|
|
|
+ .LeftJoin<SystemOrganize>((step, o) => step.HandlerOrgId == o.Id)
|
|
|
+ .Where((step,o) => step.WorkflowId == order.WorkflowId && step.TraceStyle == ETraceStyle.Flow && step.StepType == EStepType.Normal
|
|
|
+ &&!string.IsNullOrEmpty(step.HandlerOrgId) && o.Level == 1 && step.BusinessType == EBusinessType.Department).OrderByDescending(step => step.CreationTime)
|
|
|
+ .FirstAsync(HttpContext.RequestAborted);
|
|
|
+ if (nextStep is null)
|
|
|
+ continue;
|
|
|
+ var dto = new OrderReTransactDto
|
|
|
+ {
|
|
|
+ AlterTime = true,
|
|
|
+ BusinessType = EBusinessType.Department,
|
|
|
+ FlowDirection = EFlowDirection.FiledToOrg,
|
|
|
+ HandlerType = EHandlerType.OrgLevel,
|
|
|
+ NextHandlers = new List<StepAssignInfo>
|
|
|
+ {
|
|
|
+ new()
|
|
|
+ {
|
|
|
+ Key = nextStep.HandlerOrgId, Value = nextStep.HandlerOrgName,
|
|
|
+ OrgId = nextStep.HandlerOrgId, OrgName = nextStep.HandlerOrgName,
|
|
|
+ FlowAssignType = EFlowAssignType.Org
|
|
|
+ }
|
|
|
+ },
|
|
|
+ NextStepCode = nextStep.Code,
|
|
|
+ NextStepName = nextStep.Name,
|
|
|
+ OrderId = order.Id,
|
|
|
+ Cause = "不满意二次办理",
|
|
|
+ Reason = "部门回访不满意 批量特提",
|
|
|
+ SpecialType = ESpecialType.SendBack,
|
|
|
+ StepType = EStepType.Normal,
|
|
|
+ TimeLimit = 5,
|
|
|
+ TimeLimitUnit = ETimeType.WorkDay,
|
|
|
+ WorkflowId = order.WorkflowId
|
|
|
+ };
|
|
|
+ await Add(dto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 市民信息
|