diff --git a/server/app/common/service/ExpressTrackingService.php b/server/app/common/service/ExpressTrackingService.php index a09989cc..68068a22 100644 --- a/server/app/common/service/ExpressTrackingService.php +++ b/server/app/common/service/ExpressTrackingService.php @@ -249,9 +249,7 @@ class ExpressTrackingService /** * 处方业务订单履约「已发货(5) / 已签收(6)」时:清空关联诊单(患者)医助,并写入 tcm_diagnosis_assign_log(含关联业务订单 creator_id / create_time 快照,便于核对医助创建订单时间)。 * 快递 100 定时拉轨迹、甘草路由、甘草回调与履约核对共用同一规则。 - * 例外:指派日志中若存在「从某医助改派到另一医助」(原、新医助 ID 均大于 0)的记录,视为人工指派链,自动释放跳过。 - * 例外:患者当前医助在「二中心」及其全部子部门(与后台部门树一致)下任职时,不自动清空医助(按 admin_dept 与 dept 树判定)。 - * 非二中心且已自动释放:诊单写入 shipped_non_er_assistant_cleared_at,assistant_id 已为 0 时后续履约核对不再重复扫描(重新指派医助后可再次处理)。 + * 不自动清空的情形仅两种:(1)患者当前医助在「二中心」及其全部子部门(与后台部门树一致)下任职;(2)诊单已有 shipped_non_er_assistant_cleared_at 且 assistant_id 已为 0(视为已处理过,重新指派医助后可再次处理)。 * * @param array{tracking_id?:int,tracking_number?:string,source?:string} $meta * @return array{ @@ -314,17 +312,6 @@ class ExpressTrackingService return null; } - if (self::diagnosisHasFormalAssistantReassignInAssignLog($diagnosisId)) { - Log::info('Skipped auto assistant release (shipped/signed): formal assistant reassign in assign log', [ - 'diagnosis_id' => $diagnosisId, - 'prescription_order_id' => $orderId, - 'source' => $source, - 'current_assistant_id' => $fromAssistantId, - ]); - - return null; - } - if (self::currentAssistantBelongsToErzhongxinDeptTree($fromAssistantId)) { Log::info('Skipped auto assistant release (shipped/signed): assistant under 二中心 dept tree', [ 'diagnosis_id' => $diagnosisId, @@ -453,21 +440,6 @@ class ExpressTrackingService return false; } - /** - * 是否存在「由原医助改派到新医助」的指派记录(两端 admin 均大于 0)。有此记录则已发货自动释放医助不执行。 - */ - private static function diagnosisHasFormalAssistantReassignInAssignLog(int $diagnosisId): bool - { - if ($diagnosisId <= 0) { - return false; - } - - return DiagnosisAssignLog::where('diagnosis_id', $diagnosisId) - ->where('from_assistant_id', '>', 0) - ->where('to_assistant_id', '>', 0) - ->count() > 0; - } - private static function maybeClearDiagnosisAssistantWhenShippedPrescription(ExpressTracking $tracking): ?array { if ((string) $tracking->order_type !== 'prescription') { @@ -646,9 +618,8 @@ class ExpressTrackingService } /** - * 按处方订单履约核对:已发货(5)/已签收(6) 时诊单仍挂在医助的,一律释放并写指派日志。 - * 与快递 100 / 甘草来自哪个物流渠道无关,保障「已发货」后患者侧医助被清掉。 - * 已对非二中心医助做过发货/签收释放且 assistant_id=0 的诊单(shipped_non_er_assistant_cleared_at>0)不再纳入本扫描,避免重复命中 creator 分支。 + * 按处方订单履约核对:已发货(5)/已签收(6) 时符合条件的订单调用 applyAssistantReleaseForShippedPrescriptionOrder。 + * 与快递 100 / 甘草来自哪个物流渠道无关;是否清空医助以该方法为准(仅二中心不释放;已 shipped 释放且 assistant_id=0 视为已处理)。 * * @return array{scanned: int, cleared: int, lines: list} */ @@ -714,7 +685,7 @@ class ExpressTrackingService * assistant_cleared: int, * assistant_skipped_assign_log: int, * assistant_lines: list - * } assistant_skipped_assign_log 保留兼容恒为 0(已发货/签收一律写指派日志并清空医助) + * } assistant_skipped_assign_log 保留兼容恒为 0 */ public static function autoUpdateBatch(int $limit = 50): array {