|
@@ -65,6 +65,7 @@ using Hotline.Share.Tools;
|
|
|
using Hotline.EventBus;
|
|
|
using Hotline.Orders.Notifications;
|
|
|
using Hotline.OrderTranspond;
|
|
|
+using XF.Utility.EnumExtensions;
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
namespace Hotline.Application.Orders;
|
|
@@ -433,7 +434,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
var seg = new Segment();
|
|
|
ICollection<WordInfo> splitWords = seg.DoSegment(inputStr);
|
|
|
var words = new List<string>();
|
|
|
- for (int i = 0; i < splitWords.Count; i++)
|
|
|
+ for (int i = 0;i < splitWords.Count;i++)
|
|
|
{
|
|
|
var word = splitWords.ElementAt(i);
|
|
|
if (word is { WordType: WordType.SimplifiedChinese, Word.Length: > 1 })
|
|
@@ -660,7 +661,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
visit.VisitTime = dto.VisitTime;
|
|
|
visit.VisitType = dto.VisitType;
|
|
|
|
|
|
- for (int i = 0; i < visit.OrderVisitDetails.Count; i++)
|
|
|
+ for (int i = 0;i < visit.OrderVisitDetails.Count;i++)
|
|
|
{
|
|
|
var detail = visit.OrderVisitDetails[i];
|
|
|
var detaildto = dto.OrderVisitDetailDto.FirstOrDefault(x => x.Id == detail.Id);
|
|
@@ -847,7 +848,7 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
visit.JudgeState = EJudgeState.Judging;
|
|
|
}
|
|
|
|
|
|
- for (int i = 0; i < visit.OrderVisitDetails.Count; i++)
|
|
|
+ for (int i = 0;i < visit.OrderVisitDetails.Count;i++)
|
|
|
{
|
|
|
var detail = visit.OrderVisitDetails[i];
|
|
|
var detaildto = dto.VisitDetails.FirstOrDefault(x => x.Id == detail.Id);
|
|
@@ -977,30 +978,30 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ReceiveProvinceNo), d => d.ReceiveProvinceNo == dto.ReceiveProvinceNo) //省编号
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No) //工单编码
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AcceptType), d => d.AcceptTypeCode == dto.AcceptType) //受理类型
|
|
|
- //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
|
|
|
+ //.WhereIF(dto.AcceptTypes.Any(), d => dto.AcceptTypes.Contains(d.AcceptTypeCode)) //受理类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Channel), d => d.SourceChannelCode == dto.Channel)
|
|
|
//.WhereIF(dto.Channels.Any(), d => dto.Channels.Contains(d.SourceChannelCode)) //来源渠道
|
|
|
//.WhereIF(dto.HotspotIds.Any(), d => dto.HotspotIds.Contains(d.HotspotId)) //热点类型
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.Hotspot), d => d.HotspotSpliceName != null && d.HotspotSpliceName.Contains(dto.Hotspot))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.TransferPhone), d => d.TransferPhone == dto.TransferPhone!) //转接号码
|
|
|
- //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
|
|
|
- //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
|
|
|
+ //.WhereIF(dto.OrgCodes.Any(), d => d.Workflow.Assigns.Any(s => dto.OrgCodes.Contains(s.OrgCode)))
|
|
|
+ //.WhereIF(dto.OrgCodes.Any(), d => dto.OrgCodes.Contains(d.ActualHandleOrgCode)) //接办部门
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.OrgId), d => d.CurrentHandleOrgId == dto.OrgId)//接办部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.OrgLevelOneName), d => d.OrgLevelOneName.Contains(dto.OrgLevelOneName)) //一级部门
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandleOrgName), d => d.ActualHandleOrgName.Contains(dto.ActualHandleOrgName)) //接办部门(综合查询模糊)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.NameOrNo), d => d.AcceptorName == dto.NameOrNo! || d.AcceptorStaffNo == 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(dto.EmergencyLevels.Any(), d => dto.EmergencyLevels.Contains(d.EmergencyLevel)) //紧急程度
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FromPhone), d => d.FromPhone == dto.FromPhone) //来电号码
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.PhoneNo), d => d.Contact == dto.PhoneNo!) //联系电话
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), d => d.PushTypeCode == dto.PushTypeCode) //推送分类
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.PushTypeCode), x => x.OrderPushTypes.Any(opt => opt.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 => dto.Statuses.Contains(d.Status)) //工单状态
|
|
|
.WhereIF(dto.Status.HasValue, d => d.Status == dto.Status) //工单状态
|
|
|
- //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
|
|
|
+ //.WhereIF(dto.Statuses.Any(d => d == EOrderStatus.SpecialToUnAccept), d => d.Status <= EOrderStatus.SpecialToUnAccept)
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.ActualHandlerName), d => d.ActualHandlerName == dto.ActualHandlerName) //接办人
|
|
|
.WhereIF(dto.IsScreen == true, d => d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //有甄别
|
|
|
.WhereIF(dto.IsScreen == false, d => !d.OrderScreens.Any(x => x.Status != EScreenStatus.Refuse)) //无甄别
|
|
@@ -1015,8 +1016,8 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
(d.ExpiredTime > d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //否 超期
|
|
|
.WhereIF(dto.IdentityType != null, d => d.IdentityType == dto.IdentityType) //来电主体
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.FromName), d => d.FromName == dto.FromName) //来电人姓名
|
|
|
- //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
|
|
|
- //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
|
|
|
+ //.WhereIF(dto.AreaCodes.Any(), d => dto.AreaCodes.Contains(d.AreaCode)) //区域
|
|
|
+ //.WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)//区域
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") > 0,
|
|
|
d => d.AreaCode.StartsWith(SqlFunc.Substring(dto.AreaCode, 0, 4)))
|
|
|
.WhereIF(!string.IsNullOrEmpty(dto.AreaCode) && dto.AreaCode.LastIndexOf("00") <= 0, d => d.AreaCode.StartsWith(dto.AreaCode))
|
|
@@ -1331,9 +1332,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
if (IsCenter && list != null)
|
|
|
{
|
|
|
data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
- })
|
|
|
+ {
|
|
|
+ VisitOrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6"))
|
|
|
+ })
|
|
|
.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgCode = x.VisitOrgCode.Substring(SqlFunc.MappingColumn<int>("0"), SqlFunc.MappingColumn<int>("6")),
|
|
@@ -1382,9 +1383,9 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
else
|
|
|
{
|
|
|
data = await list.GroupBy(x => new
|
|
|
- {
|
|
|
- x.VisitOrgCode
|
|
|
- })
|
|
|
+ {
|
|
|
+ x.VisitOrgCode
|
|
|
+ })
|
|
|
.Select(x => new VisitAndOrgSatisfactionStatisticsDto()
|
|
|
{
|
|
|
OrgCode = x.VisitOrgCode,
|
|
@@ -1648,10 +1649,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
dt.Columns.Remove("Column1");
|
|
|
|
|
|
//计算小计
|
|
|
- for (int i = 0; i < dt.Rows.Count; i++)
|
|
|
+ for (int i = 0;i < dt.Rows.Count;i++)
|
|
|
{
|
|
|
int sumcount = 0;
|
|
|
- for (int j = 1; j < dt.Columns.Count - 1; j++)
|
|
|
+ for (int j = 1;j < dt.Columns.Count - 1;j++)
|
|
|
{
|
|
|
sumcount += Convert.ToInt32(dt.Rows[i][j].ToString());
|
|
|
}
|
|
@@ -1663,10 +1664,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
DataRow totalRow = dt.NewRow();
|
|
|
if (dt.Columns[0].ColumnName == "HotspotName") totalRow["HotspotName"] = "合计";
|
|
|
else totalRow["一级热点"] = "合计";
|
|
|
- for (int i = 1; i < dt.Columns.Count; i++)
|
|
|
+ for (int i = 1;i < dt.Columns.Count;i++)
|
|
|
{
|
|
|
int sumcount = 0;
|
|
|
- for (int j = 0; j < dt.Rows.Count; j++)
|
|
|
+ for (int j = 0;j < dt.Rows.Count;j++)
|
|
|
{
|
|
|
sumcount += Convert.ToInt32(dt.Rows[j][i].ToString());
|
|
|
}
|
|
@@ -1820,10 +1821,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
if (IsCenter && list != null)
|
|
|
{
|
|
|
data = await list.GroupBy((x, h) => new
|
|
|
- {
|
|
|
- HotspotName = h.HotSpotName,
|
|
|
- HotspotId = h.Id
|
|
|
- })
|
|
|
+ {
|
|
|
+ HotspotName = h.HotSpotName,
|
|
|
+ HotspotId = h.Id
|
|
|
+ })
|
|
|
.Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
|
|
|
{
|
|
|
HotspotName = h.HotSpotName,
|
|
@@ -1858,10 +1859,10 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
else
|
|
|
{
|
|
|
data = await list.GroupBy((x, h) => new
|
|
|
- {
|
|
|
- HotspotName = h.HotSpotName,
|
|
|
- HotspotId = h.Id
|
|
|
- })
|
|
|
+ {
|
|
|
+ HotspotName = h.HotSpotName,
|
|
|
+ HotspotId = h.Id
|
|
|
+ })
|
|
|
.Select((x, h) => new VisitAndHotspotSatisfactionStatisticsDto()
|
|
|
{
|
|
|
HotspotName = h.HotSpotName,
|
|
@@ -2508,20 +2509,20 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
}).ToListAsync();
|
|
|
|
|
|
var res = (from t1 in items
|
|
|
- join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
|
|
|
- from item in t1_t2.DefaultIfEmpty()
|
|
|
- select new SendOrderReportOutDto
|
|
|
- {
|
|
|
- UserId = t1.UserId,
|
|
|
- UserName = t1.UserName,
|
|
|
- SendOrderNum = t1.SendOrderNum,
|
|
|
- NoSendOrderNum = t1.NoSendOrderNum,
|
|
|
- ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
|
|
|
- ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0
|
|
|
- ? ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) /
|
|
|
- double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%"
|
|
|
- : "100.00%",
|
|
|
- }).ToList();
|
|
|
+ join t2 in items2 on t1.UserId equals t2.UserId into t1_t2
|
|
|
+ from item in t1_t2.DefaultIfEmpty()
|
|
|
+ select new SendOrderReportOutDto
|
|
|
+ {
|
|
|
+ UserId = t1.UserId,
|
|
|
+ UserName = t1.UserName,
|
|
|
+ SendOrderNum = t1.SendOrderNum,
|
|
|
+ NoSendOrderNum = t1.NoSendOrderNum,
|
|
|
+ ReSendOrderNum = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault(),
|
|
|
+ ChainRate = t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault() > 0
|
|
|
+ ? ((double.Parse(t1.SendOrderNum.ToString()) - double.Parse(t1_t2.Select(x => x.ReSendOrderNum).FirstOrDefault().ToString())) /
|
|
|
+ double.Parse(t1.SendOrderNum.ToString()) * 100).ToString("F2") + "%"
|
|
|
+ : "100.00%",
|
|
|
+ }).ToList();
|
|
|
return res;
|
|
|
}
|
|
|
|
|
@@ -2613,8 +2614,61 @@ public class OrderApplication : IOrderApplication, IScopeDependency
|
|
|
.WhereIF(dto.Status.HasValue, d => d.Status == dto.Status)
|
|
|
.WhereIF(dto.StartTime.HasValue && dto.EndTime.HasValue, d => d.Order.StartTime >= dto.StartTime && d.Order.StartTime <= dto.EndTime)
|
|
|
.OrderByDescending(d => d.CreationTime);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
|
|
|
- }
|
|
|
- #endregion
|
|
|
+ public ISugarQueryable<OrderListOutDto> QueryWaitedForSeat(QueryOrderWaitedDto dto)
|
|
|
+ {
|
|
|
+ EOrderStatus[] handleStatuses = EnumExts.GetFields<EOrderStatus>().Select(d => (EOrderStatus)d.Key).ToArray();
|
|
|
+ handleStatuses = handleStatuses.WhereIF(dto.IsHandled.HasValue,
|
|
|
+ d => dto.IsHandled!.Value
|
|
|
+ ? d is not EOrderStatus.WaitForAccept and not EOrderStatus.BackToUnAccept and not EOrderStatus.SpecialToUnAccept and not EOrderStatus.HandOverToUnAccept
|
|
|
+ : d is EOrderStatus.WaitForAccept or EOrderStatus.BackToUnAccept or EOrderStatus.SpecialToUnAccept or EOrderStatus.HandOverToUnAccept)
|
|
|
+ .ToArray();
|
|
|
|
|
|
+ var query = _orderRepository.Queryable();
|
|
|
+ if (dto.IsHandled.HasValue)
|
|
|
+ {
|
|
|
+ var hasHandled = dto.IsHandled.Value;
|
|
|
+ query = query.Where(d => SqlFunc.Subqueryable<WorkflowTrace>()
|
|
|
+ .Where(step => step.ExternalId == d.Id &&
|
|
|
+ (hasHandled || step.Status != EWorkflowStepStatus.Handled) &&
|
|
|
+ (!hasHandled || step.Status == EWorkflowStepStatus.Handled &&
|
|
|
+ step.TraceState != EWorkflowTraceState.StepRemoveByPrevious) &&
|
|
|
+ ((step.FlowAssignType == EFlowAssignType.User && !string.IsNullOrEmpty(step.HandlerId) &&
|
|
|
+ step.HandlerId == _sessionContext.RequiredUserId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Org && !string.IsNullOrEmpty(step.HandlerOrgId) &&
|
|
|
+ step.HandlerOrgId == _sessionContext.RequiredOrgId) ||
|
|
|
+ (step.FlowAssignType == EFlowAssignType.Role && !string.IsNullOrEmpty(step.RoleId) &&
|
|
|
+ _sessionContext.Roles.Contains(step.RoleId)))).Any() ||
|
|
|
+ (string.IsNullOrEmpty(d.WorkflowId) &&
|
|
|
+ (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId))
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ return query
|
|
|
+ .WhereIF(dto.IsProvince.HasValue, d => d.IsProvince == dto.IsProvince)
|
|
|
+ .WhereIF(dto.IsHandled.HasValue, d => handleStatuses.Contains(d.Status))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.Keyword), d => d.Title.StartsWith(dto.Keyword!))
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.No), d => d.No == dto.No)
|
|
|
+ .WhereIF(!string.IsNullOrEmpty(dto.AreaCode), d => d.AreaCode == dto.AreaCode)
|
|
|
+ .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == true, d => d.CounterSignType.HasValue)
|
|
|
+ .WhereIF(dto.IsCounterSign.HasValue && dto.IsCounterSign == false, d => d.CounterSignType == null)
|
|
|
+ .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == true,
|
|
|
+ d => (d.ExpiredTime < DateTime.Now && d.Status < EOrderStatus.Filed) ||
|
|
|
+ (d.ExpiredTime < d.ActualHandleTime && d.Status >= EOrderStatus.Filed)) //超期 未办
|
|
|
+ .WhereIF(dto.ExpiredOrAlmostOverdue.HasValue && dto.ExpiredOrAlmostOverdue == false,
|
|
|
+ d => d.NearlyExpiredTime < DateTime.Now && d.ExpiredTime > DateTime.Now) //即将超期 未办
|
|
|
+ .WhereIF(dto.StartTime.HasValue, d => d.CreationTime >= dto.StartTime)
|
|
|
+ .WhereIF(dto.EndTime.HasValue, d => d.CreationTime <= dto.EndTime)
|
|
|
+ //.Where(d => (string.IsNullOrEmpty(d.WorkflowId) && (string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)))
|
|
|
+ //.Where(d => string.IsNullOrEmpty(d.SignerId) || d.SignerId == _sessionContext.RequiredUserId)
|
|
|
+ .WhereIF(dto.IsUrgent.HasValue, d => d.IsUrgent == dto.IsUrgent.Value)
|
|
|
+ .Where(x => x.Source < ESource.MLSQ || x.Source > ESource.WZSC)
|
|
|
+ .Where(x => x.Status != EOrderStatus.BackToProvince && x.Status < EOrderStatus.Filed)
|
|
|
+ .OrderBy(d => d.Status)
|
|
|
+ .OrderByIF(dto.IsHandled == true, d => d.StartTime, OrderByType.Desc)
|
|
|
+ .OrderByIF(dto.IsHandled == false, d => new { IsUrgent = d.IsUrgent, CreationTime = d.CreationTime }, OrderByType.Desc)
|
|
|
+ .Select<OrderListOutDto>();
|
|
|
+ }
|
|
|
}
|