更新
This commit is contained in:
@@ -390,7 +390,7 @@
|
|||||||
<el-tooltip placement="top" effect="dark" :show-after="200">
|
<el-tooltip placement="top" effect="dark" :show-after="200">
|
||||||
<template #content>
|
<template #content>
|
||||||
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
|
<div style="max-width: 320px; line-height: 1.7; font-size: 12px">
|
||||||
<b>tcm_diagnosis_assign_log</b> 行数(成功指派:<b>to_assistant_id > 0</b>),**仅按 <b>related_po_create_time</b>** 落在所选区间内(与日志表快照一致;诊单手动指派已写入该字段)。按<b>被指派医助</b>归属展示部门。<template v-if="tb.channel_name">
|
<b>tcm_diagnosis_assign_log</b> 中成功指派(<b>to_assistant_id > 0</b>,<b>剔除勾选「继承」的指派</b>)按<b>指派操作时间</b>落在所选区间内,「医助 × 诊单」去重、剔除已删诊单,与「复诊接诊率」页面同口径。按<b>被指派医助</b>归属展示部门。<template v-if="tb.channel_name">
|
||||||
选定渠道时收窄与「{{ tb.channel_name }}」业绩同口径(标签诊单或 channels EXISTS)。<br />
|
选定渠道时收窄与「{{ tb.channel_name }}」业绩同口径(标签诊单或 channels EXISTS)。<br />
|
||||||
<b>二中心及其组织下级</b>在选定渠道下本列计 <b>0</b>。
|
<b>二中心及其组织下级</b>在选定渠道下本列计 <b>0</b>。
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ use think\facade\Db;
|
|||||||
*
|
*
|
||||||
* - 进线数据 = 区间内 add_external_contact 事件,按接待员工(user_id) 归属部门
|
* - 进线数据 = 区间内 add_external_contact 事件,按接待员工(user_id) 归属部门
|
||||||
* · 与 qywx.customer/todayArrival、客户列表同源事件表;选定渠道时客户须带对应企微标签(contact_tag);**二中心及其组织下级在选定渠道下进线计 0**
|
* · 与 qywx.customer/todayArrival、客户列表同源事件表;选定渠道时客户须带对应企微标签(contact_tag);**二中心及其组织下级在选定渠道下进线计 0**
|
||||||
* - 被指派数 = 区间内 `tcm_diagnosis_assign_log` 且 **to_assistant_id>0**,且 **related_po_create_time>0** 并落在区间(**一律按快照字段统计**,与履约释放写入一致;诊单后台指派时会回填该字段,见 DiagnosisLogic::assign)
|
* - 被指派数 = 区间内 `tcm_diagnosis_assign_log` 且 **to_assistant_id>0**,**剔除勾选「继承」的指派 is_inherit=1**,按**指派操作时间 lg.create_time** 落区间,
|
||||||
|
* 「医助 × 诊单」去重、剔除已删诊单 —— 与「复诊接诊率」页面「当月被指派总数」完全同口径(见 RevisitRateLogic)
|
||||||
* · **二中心及其组织下级在选定渠道下计 0**(与进线一致)
|
* · **二中心及其组织下级在选定渠道下计 0**(与进线一致)
|
||||||
* - 复诊统计 = 仅**名称含「二中心」的部门及其组织架构下级**:区间内业务单按患者 create_time 排序,第 1 笔不计,第 2 笔起分列「复诊2」「复诊3」…;口径同业绩单条件;按**订单创建人**所在部门在组织树内 rollup(含下级),与排行榜复诊一致
|
* - 复诊统计 = 仅**名称含「二中心」的部门及其组织架构下级**:区间内业务单按患者 create_time 排序,第 1 笔不计,第 2 笔起分列「复诊2」「复诊3」…;口径同业绩单条件;按**订单创建人**所在部门在组织树内 rollup(含下级),与排行榜复诊一致
|
||||||
* - 已完成挂号 = status=3 挂号条数(appointment_date),列「已完成挂号」;部门归属:有效医助→接诊医生→展示行映射。
|
* - 已完成挂号 = status=3 挂号条数(appointment_date),列「已完成挂号」;部门归属:有效医助→接诊医生→展示行映射。
|
||||||
@@ -857,7 +858,7 @@ class YejiStatsLogic
|
|||||||
? ('排行诊金 = 选定渠道「' . $channelName . '」业绩中「订单创建人 = 该医助」的部分;与部门表该渠道业绩列同口径(按订单创建人归属)。被指派数与部门表同口径。接诊率 = 诊金 ÷ 进线(元/进线)。'
|
? ('排行诊金 = 选定渠道「' . $channelName . '」业绩中「订单创建人 = 该医助」的部分;与部门表该渠道业绩列同口径(按订单创建人归属)。被指派数与部门表同口径。接诊率 = 诊金 ÷ 进线(元/进线)。'
|
||||||
. '「二中心」及其组织下级医助在该渠道下诊金、进线与被指派计 0。'
|
. '「二中心」及其组织下级医助在该渠道下诊金、进线与被指派计 0。'
|
||||||
. ' 预约诊单:预约表按「预约日期」落在区间内、有效医助口径同接诊,状态含已预约/已完成/已过号(不含已取消);科室下医助全量展示。')
|
. ' 预约诊单:预约表按「预约日期」落在区间内、有效医助口径同接诊,状态含已预约/已完成/已过号(不含已取消);科室下医助全量展示。')
|
||||||
: '排行诊金 = 业务订单中「订单创建人 = 该医助」的金额合计;与部门表「合计业绩」同口径(按订单创建人归属)。被指派数为指派至该医助的次数。接诊率 = 诊金 ÷ 进线(元/进线;进线为 0 时为 0)。'
|
: '排行诊金 = 业务订单中「订单创建人 = 该医助」的金额合计;与部门表「合计业绩」同口径(按订单创建人归属)。被指派数为指派至该医助的次数(剔除勾选「继承」的指派)。接诊率 = 诊金 ÷ 进线(元/进线;进线为 0 时为 0)。'
|
||||||
. ' 预约诊单:预约表按「预约日期」落在区间内、有效医助口径同接诊,状态含已预约/已完成/已过号(不含已取消);科室下医助全量展示。';
|
. ' 预约诊单:预约表按「预约日期」落在区间内、有效医助口径同接诊,状态含已预约/已完成/已过号(不含已取消);科室下医助全量展示。';
|
||||||
|
|
||||||
$leaderboards = [];
|
$leaderboards = [];
|
||||||
@@ -1777,8 +1778,9 @@ class YejiStatsLogic
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 被指派数:统计 `tcm_diagnosis_assign_log`(to_assistant_id>0),**仅**按 **related_po_create_time** 落入区间(须 >0)。
|
* 被指派数:统计 `tcm_diagnosis_assign_log`(to_assistant_id>0,**剔除勾选「继承」的指派 is_inherit=1**),
|
||||||
* 选定字典渠道时 INNER JOIN 诊单以满足挂号 channels EXISTS;tag 退化口径只过滤日志字段,不强制挂诊单。
|
* 按**指派操作时间 lg.create_time** 落入区间,「医助 × 诊单」去重(COUNT DISTINCT diagnosis_id)、剔除已删诊单,
|
||||||
|
* 与「复诊接诊率」页面同口径。选定字典渠道时按挂号 channels EXISTS 收窄;tag 退化口径按日志字段过滤。
|
||||||
*
|
*
|
||||||
* @param array<int, int> $adminToPrimary
|
* @param array<int, int> $adminToPrimary
|
||||||
* @param int[]|null $tagDiagIds
|
* @param int[]|null $tagDiagIds
|
||||||
@@ -1801,11 +1803,13 @@ class YejiStatsLogic
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$diagTable = self::tableWithPrefix('tcm_diagnosis');
|
||||||
$query = Db::name('tcm_diagnosis_assign_log')
|
$query = Db::name('tcm_diagnosis_assign_log')
|
||||||
->alias('lg')
|
->alias('lg')
|
||||||
->where('lg.related_po_create_time', '>', 0)
|
->join("{$diagTable} dg", 'dg.id = lg.diagnosis_id AND dg.delete_time IS NULL', 'INNER')
|
||||||
->where('lg.related_po_create_time', 'between', [$startTs, $endTs])
|
->where('lg.create_time', 'between', [$startTs, $endTs])
|
||||||
->where('lg.to_assistant_id', '>', 0);
|
->where('lg.to_assistant_id', '>', 0)
|
||||||
|
->where('lg.is_inherit', 0);
|
||||||
if ($channelFilterActive) {
|
if ($channelFilterActive) {
|
||||||
if ($appointmentChannelValues !== []) {
|
if ($appointmentChannelValues !== []) {
|
||||||
$norm = self::normalizeAppointmentChannelValues($appointmentChannelValues);
|
$norm = self::normalizeAppointmentChannelValues($appointmentChannelValues);
|
||||||
@@ -1816,8 +1820,6 @@ class YejiStatsLogic
|
|||||||
if ($pack === null) {
|
if ($pack === null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$diagTable = self::tableWithPrefix('tcm_diagnosis');
|
|
||||||
$query->join("{$diagTable} dg", 'dg.id = lg.diagnosis_id AND dg.delete_time IS NULL', 'INNER');
|
|
||||||
$query->whereRaw($pack[0], $pack[1]);
|
$query->whereRaw($pack[0], $pack[1]);
|
||||||
} elseif ($tagDiagIds !== null || $tagAssistantIds !== null) {
|
} elseif ($tagDiagIds !== null || $tagAssistantIds !== null) {
|
||||||
if ($tagDiagIds !== null && $tagDiagIds === []) {
|
if ($tagDiagIds !== null && $tagDiagIds === []) {
|
||||||
@@ -1837,7 +1839,7 @@ class YejiStatsLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$query->field(['lg.to_assistant_id', Db::raw('COUNT(*) AS cnt')])
|
$query->field(['lg.to_assistant_id', Db::raw('COUNT(DISTINCT lg.diagnosis_id) AS cnt')])
|
||||||
->group('lg.to_assistant_id');
|
->group('lg.to_assistant_id');
|
||||||
|
|
||||||
$rows = $query->select()->toArray();
|
$rows = $query->select()->toArray();
|
||||||
@@ -1869,7 +1871,7 @@ class YejiStatsLogic
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 医助维度被指派次数:与 countDiagnosisAssignsByDept 同过滤与区间,按 to_assistant_id 汇总(供排行榜)。
|
* 医助维度被指派次数:与 countDiagnosisAssignsByDept 同过滤与区间(同样剔除 is_inherit=1),按 to_assistant_id 汇总(供排行榜)。
|
||||||
*
|
*
|
||||||
* @return array<int, int>
|
* @return array<int, int>
|
||||||
*/
|
*/
|
||||||
@@ -1883,11 +1885,13 @@ class YejiStatsLogic
|
|||||||
?array $dataScopeAdminIds = null,
|
?array $dataScopeAdminIds = null,
|
||||||
?array $channelInfo = null
|
?array $channelInfo = null
|
||||||
): array {
|
): array {
|
||||||
|
$diagTable = self::tableWithPrefix('tcm_diagnosis');
|
||||||
$query = Db::name('tcm_diagnosis_assign_log')
|
$query = Db::name('tcm_diagnosis_assign_log')
|
||||||
->alias('lg')
|
->alias('lg')
|
||||||
->where('lg.related_po_create_time', '>', 0)
|
->join("{$diagTable} dg", 'dg.id = lg.diagnosis_id AND dg.delete_time IS NULL', 'INNER')
|
||||||
->where('lg.related_po_create_time', 'between', [$startTs, $endTs])
|
->where('lg.create_time', 'between', [$startTs, $endTs])
|
||||||
->where('lg.to_assistant_id', '>', 0);
|
->where('lg.to_assistant_id', '>', 0)
|
||||||
|
->where('lg.is_inherit', 0);
|
||||||
|
|
||||||
if ($channelFilterActive) {
|
if ($channelFilterActive) {
|
||||||
if ($appointmentChannelValues !== []) {
|
if ($appointmentChannelValues !== []) {
|
||||||
@@ -1899,8 +1903,6 @@ class YejiStatsLogic
|
|||||||
if ($pack === null) {
|
if ($pack === null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$diagTable = self::tableWithPrefix('tcm_diagnosis');
|
|
||||||
$query->join("{$diagTable} dg", 'dg.id = lg.diagnosis_id AND dg.delete_time IS NULL', 'INNER');
|
|
||||||
$query->whereRaw($pack[0], $pack[1]);
|
$query->whereRaw($pack[0], $pack[1]);
|
||||||
} elseif ($tagDiagIds !== null || $tagAssistantIds !== null) {
|
} elseif ($tagDiagIds !== null || $tagAssistantIds !== null) {
|
||||||
if ($tagDiagIds !== null && $tagDiagIds === []) {
|
if ($tagDiagIds !== null && $tagDiagIds === []) {
|
||||||
@@ -1920,7 +1922,7 @@ class YejiStatsLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$query->field(['lg.to_assistant_id', Db::raw('COUNT(*) AS cnt')])
|
$query->field(['lg.to_assistant_id', Db::raw('COUNT(DISTINCT lg.diagnosis_id) AS cnt')])
|
||||||
->group('lg.to_assistant_id');
|
->group('lg.to_assistant_id');
|
||||||
|
|
||||||
$rows = $query->select()->toArray();
|
$rows = $query->select()->toArray();
|
||||||
|
|||||||
Reference in New Issue
Block a user