Ver Fonte

通话记录关联

Dun.Jason há 6 meses atrás
pai
commit
9824396c83

+ 25 - 19
src/Hotline.Api/Controllers/IPPbxController.cs

@@ -781,37 +781,43 @@ namespace Hotline.Api.Controllers
         public async Task LinkCallRecord([FromBody] LinkCallRecordDto dto)
         {
             //var trRecord = await _trCallRecordRepository.GetAsync(x => x.CallAccept == dto.CallId, HttpContext.RequestAborted);//由CallAccept改为OtherAccept
-            var trRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == dto.CallId, HttpContext.RequestAborted);
+            
             if (dto.IsOrder)
             {
-                if (trRecord.CallOrderType == ECallOrderType.Order && !string.IsNullOrEmpty(trRecord.ExternalId))
-                    throw UserFriendlyException.SameMessage("通话记录已经关联工单");
-
-                //工单
-                var order = await _orderRepository.GetAsync(x => x.Id == dto.Id, HttpContext.RequestAborted);
-                if (!string.IsNullOrEmpty(order.CallId))
-                    throw UserFriendlyException.SameMessage("通话记录已经关联工单");
-
-                order.CallId = dto.CallId;
-                order.FromPhone = trRecord.CPN;
-                order.TransferPhone = trRecord.Gateway;
-                await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
-                trRecord.CallOrderType = ECallOrderType.Order;
-                trRecord.ExternalId = order.Id;
-
-                //推省上
-                await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineCallConnectWithOrder, new PublishCallRecrodDto() { Order = _mapper.Map<OrderDto>(order), TrCallRecordDto = _mapper.Map<TrCallDto>(trRecord) });
+                var trRecords = await _trCallRecordRepository.Queryable().Where(x => x.OtherAccept == dto.CallId).ToListAsync(HttpContext.RequestAborted);
+                foreach (var trRecord in trRecords)
+                {
+                    if (trRecord.CallOrderType == ECallOrderType.Order && !string.IsNullOrEmpty(trRecord.ExternalId))
+                        throw UserFriendlyException.SameMessage("通话记录已经关联工单");
+
+                    //工单
+                    var order = await _orderRepository.GetAsync(x => x.Id == dto.Id, HttpContext.RequestAborted);
+                    if (!string.IsNullOrEmpty(order.CallId))
+                        throw UserFriendlyException.SameMessage("通话记录已经关联工单");
+
+                    order.CallId = dto.CallId;
+                    order.FromPhone = trRecord.CPN;
+                    order.TransferPhone = trRecord.Gateway;
+                    await _orderRepository.UpdateAsync(order, HttpContext.RequestAborted);
+                    trRecord.CallOrderType = ECallOrderType.Order;
+                    trRecord.ExternalId = order.Id;
+                    await _trCallRecordRepository.UpdateAsync(trRecord, HttpContext.RequestAborted);
+                    //推省上
+                    await _capPublisher.PublishAsync(Hotline.Share.Mq.EventNames.HotlineCallConnectWithOrder, new PublishCallRecrodDto() { Order = _mapper.Map<OrderDto>(order), TrCallRecordDto = _mapper.Map<TrCallDto>(trRecord) });
+                }
             }
             else
             {
+                var trRecord = await _trCallRecordRepository.GetAsync(x => x.OtherAccept == dto.CallId, HttpContext.RequestAborted);
                 //回访
                 var visit = await _orderVisitRepository.GetAsync(x => x.Id == dto.Id, HttpContext.RequestAborted);
                 visit.CallId = dto.CallId;
                 await _orderVisitRepository.UpdateAsync(visit, HttpContext.RequestAborted);
                 trRecord.CallOrderType = ECallOrderType.Visit;
                 trRecord.ExternalId = visit.Id;
+                await _trCallRecordRepository.UpdateAsync(trRecord, HttpContext.RequestAborted);
             }
-            await _trCallRecordRepository.UpdateAsync(trRecord, HttpContext.RequestAborted);
+           
         }
 
 

+ 9 - 6
src/Hotline.Application/CallCenter/TianRunCallApplication.cs

@@ -136,13 +136,16 @@ namespace Hotline.Application.CallCenter
 		/// </summary>
 		public override async Task RelateTianrunCallWithOrderAsync(string callId, string orderId, CancellationToken cancellationToken)
         {
-            var callRecord = await _trCallRecordRepository.GetAsync(
-                p => p.OtherAccept == callId && string.IsNullOrEmpty(p.OtherAccept) == false, cancellationToken);
-            if (callRecord != null && string.IsNullOrEmpty(callRecord.ExternalId))
+            var callRecords = await _trCallRecordRepository.Queryable().Where(p => p.OtherAccept == callId && string.IsNullOrEmpty(p.OtherAccept) == false).ToListAsync(cancellationToken);
+
+            foreach (var callRecord in callRecords)
             {
-                callRecord.ExternalId = orderId;
-                callRecord.CallOrderType = Share.Enums.CallCenter.ECallOrderType.Order;
-                await _trCallRecordRepository.UpdateAsync(callRecord, cancellationToken);
+                if (callRecord != null && string.IsNullOrEmpty(callRecord.ExternalId))
+                {
+                    callRecord.ExternalId = orderId;
+                    callRecord.CallOrderType = Share.Enums.CallCenter.ECallOrderType.Order;
+                    await _trCallRecordRepository.UpdateAsync(callRecord, cancellationToken);
+                }
             }
         }
 

+ 120 - 1
src/Hotline/dataview.md

@@ -338,4 +338,123 @@ WHERE ordervisitdetailtemp."VisitTarget" = 20 and ordervisittemp."VisitTime">='2
  SUM(( CASE  WHEN ((( "CallDirection" = 0 ) AND ( "Duration" > 0 )) AND ( "Duration" <= 5 )) THEN 1  ELSE 0 END )) AS "ConnectByeCount" , 
  SUM(( CASE  WHEN ((( "CallDirection" = 0 ) AND ( "OnState" = 1 )) AND ( "RingTimes" <= 15 )) THEN 1  ELSE 0 END )) AS "TimelyAnswerCount"  
  FROM "tr_call_record"  WHERE (( "CreatedTime" >= '2024-09-12 17:00:00' ) AND ( "CreatedTime" <= '2024-09-13 17:00:00' ))  AND ( "Gateway" = '12333' )GROUP BY "Gateway") aaa
- 
+ 
+
+
+ ###信件清单查询(新)
+ select '' as "序号",
+aaa.信件状态,aaa."是否超期",aaa.来源,aaa.转接来源,aaa.当前节点,aaa.重办次数,aaa.甄别状态,aaa.受理编号,aaa.省编号,aaa.受理时间,aaa.标题,aaa.期满时间,aaa."一级部门",
+aaa.二级部门,aaa."接办部门",aaa."办结时间",aaa."受理类型",aaa."热点类型",aaa.热点全称,aaa."区域",aaa.区域全称,aaa."受理人",aaa."姓名",aaa."联系电话",aaa."来电电话",
+aaa."事发地址",aaa."具体对象",aaa."来电人主体",aaa."性别",ccc."SeatVisitResult" as "坐席满意度",bbb."OrgProcessingResults" as "满意度",aaa."推送分类",aaa."受理内容",
+aaa."承办意见",aaa."归档意见" from 
+(select 
+CASE "ordertemp"."Status"
+	WHEN 500 THEN '已回访'
+	WHEN 400 THEN '已发布'
+	WHEN 300 THEN '已归档'
+	WHEN 200 THEN '会签中'
+	WHEN 105 THEN '退回审批中'
+	WHEN 104 THEN '特提审批中'
+	WHEN 103 THEN '移交信件'
+	WHEN 102 THEN '退回信件'
+	WHEN 101 THEN '特提信件'
+	WHEN 100 THEN '办理中'
+	WHEN 9 THEN '退回省平台'
+	WHEN 2 THEN '特提待受理'
+	WHEN 1 THEN '退回待受理'
+	WHEN 0 THEN '待受理'
+	ELSE	'未知'
+END AS "信件状态",
+CASE 	WHEN "Status">=300 and "ExpiredTime">"FiledTime" THEN '正常'
+		  WHEN "Status">=300 AND "ExpiredTime"<"FiledTime" THEN '超期'
+			WHEN "Status"<300 AND "ExpiredTime"> now() AND now()> "NearlyExpiredTime" THEN '即将超期'
+			WHEN "Status"<300 AND "ExpiredTime">now() AND now()< "NearlyExpiredTime" THEN '正常'
+		  WHEN "Status"<300 AND "ExpiredTime"<now() THEN '超期'
+	ELSE '未知'
+END AS "是否超期",
+"SourceChannel" AS "来源" , 
+CASE 
+	WHEN "TransferPhone" is null or "TransferPhone"='undefined' THEN '12345'
+	ELSE
+		"TransferPhone"
+END AS "转接来源" ,
+"ActualHandleStepName" AS "当前节点" ,
+"ReTransactNum" AS "重办次数" , 
+(select CASE "screentemp"."Status"
+	WHEN 0 THEN '待办'
+	WHEN 1 THEN '审批中'
+	WHEN 2 THEN '审批完成'
+	WHEN 3 THEN '审批拒绝'
+	ELSE '-'
+END AS "OrderScreenStatus"
+ from order_screen screentemp WHERE "OrderId"="ordertemp"."Id" order by "CreationTime" DESC LIMIT 1) as "甄别状态", 
+"No" AS "受理编号" , 
+"ProvinceNo" AS "省编号" , 
+to_char("CreationTime", 'YYYY-MM-DD HH24:MI:SS') AS "受理时间" , 
+"Title" AS "标题" , 
+to_char("ExpiredTime", 'YYYY-MM-DD HH24:MI:SS') AS "期满时间" , 
+"OrgLevelOneName" AS "一级部门" , 
+
+CASE 
+	WHEN length("ActualHandleOrgCode")>=9 THEN
+		(select "Name" from system_organize orgtemp WHERE orgtemp."Id"="substring"("ordertemp"."ActualHandleOrgCode", 1, 9))
+	ELSE
+		'-'
+END AS "二级部门" , 
+"ActualHandleOrgName" AS "接办部门" , 
+to_char("FiledTime", 'YYYY-MM-DD HH24:MI:SS') AS "办结时间" , 
+"AcceptType" AS "受理类型" , 
+"HotspotName" AS "热点类型",
+"HotspotSpliceName" AS "热点全称",
+CASE 
+	WHEN "Town" is not NULL and "Town" <>'' THEN "Town"
+  WHEN "County" is not null and "County" <>'' THEN "County"
+	ELSE "City"
+END AS "区域",
+"Address"  As "区域全称",
+"AcceptorName" AS "受理人" ,
+ "FromName" AS "姓名" , 
+ "Contact" AS "联系电话" , 
+ "FromPhone" AS "来电电话" , 
+ "Street" AS "事发地址" ,
+ '' AS "具体对象",
+ CASE "IdentityType"
+	WHEN 1 THEN '市民'
+	WHEN 2 THEN '企业'
+	ELSE
+		'市民'
+END AS "来电人主体",
+CASE "FromGender"
+	WHEN 0 THEN '女士'
+	WHEN 1 THEN '先生'
+	ELSE '未知'
+END AS "性别" , 
+"PushType" AS "推送分类" , 
+"Content" AS "受理内容" , 
+"ActualOpinion" AS "承办意见" ,
+"FileOpinion" AS "归档意见" ,
+"Id" AS "SugarNav_Id" FROM "order" ordertemp  WHERE (( "CreationTime" >= '2024-08-29' ) AND ( "CreationTime" <= '2024-08-30' ))  AND ( "IsDeleted" = FALSE )ORDER BY "CreationTime" ASC) aaa
+left JOIN
+(select 
+ string_agg(visitdetailtemptwo."OrgProcessingResults"::JSON->>'Value','/') as "OrgProcessingResults",visittemptwo."OrderId" as "OrderId"
+from order_visit visittemptwo
+left join order_visit_detail visitdetailtemptwo on visittemptwo."Id" = visitdetailtemptwo."VisitId"
+where  visittemptwo."CreationTime">='2024-08-29' and visitdetailtemptwo."VisitTarget"=20 AND visittemptwo."VisitState"=30 group by visittemptwo."OrderId") as bbb
+on aaa."SugarNav_Id" = bbb."OrderId"
+left join
+(select string_agg(CASE visitdetailtemp."SeatEvaluate"
+	WHEN 0 THEN '默认满意'
+	WHEN 2 THEN '不满意'
+	WHEN 4 THEN '满意'
+	WHEN 5 THEN '非常满意'
+	WHEN 6 THEN '未接通'
+	WHEN 7 THEN '未做评价'
+	ELSE
+		'-'
+END, '/') AS "SeatVisitResult",visittemp."OrderId" AS "OrderId"
+ from order_visit visittemp
+left join order_visit_detail visitdetailtemp on visittemp."Id"= visitdetailtemp."VisitId"  
+where visittemp."CreationTime">='2024-08-29' and visitdetailtemp."VisitTarget"=10 AND visittemp."VisitState"=30 GROUP BY visittemp."OrderId") as "ccc"
+on aaa."SugarNav_Id" = ccc."OrderId"
+
+