新增
This commit is contained in:
+50
-50
@@ -1,50 +1,50 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 控制台配置
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
// 指令定义
|
||||
'commands' => [
|
||||
// 定时任务
|
||||
'crontab' => 'app\common\command\Crontab',
|
||||
// 退款查询
|
||||
'query_refund' => 'app\common\command\QueryRefund',
|
||||
// 同步企业微信对外收款
|
||||
'sync_wechat_work_bills' => 'app\common\command\SyncWechatWorkBills',
|
||||
'fill_order_creator_from_payee' => 'app\common\command\FillOrderCreatorFromPayee',
|
||||
// 挂号单状态自动更新(过号->4,超8小时->2)
|
||||
'update_appointment_status' => 'app\common\command\UpdateAppointmentStatus',
|
||||
// 诊单腾讯云 IM 聊天记录入库归档
|
||||
'sync_im_chat_archive' => 'app\common\command\SyncImChatArchive',
|
||||
// 药材库拼音首字母回填(name_pinyin_abbr)
|
||||
'sync_medicine_pinyin_abbr' => 'app\common\command\SyncMedicinePinyinAbbr',
|
||||
// 物流自动更新
|
||||
'express:auto-update' => 'app\\command\\ExpressAutoUpdate',
|
||||
// 同步现有订单快递单号
|
||||
'express:sync' => 'app\\command\\SyncTrackingNumbers',
|
||||
// 企业微信客户同步
|
||||
'qywx:sync-customer' => 'app\\command\\QywxSyncCustomer',
|
||||
// 一次性回填企微客户 tags 字段(从本地 follow_users JSON 提取,不调企微 API)
|
||||
'qywx:backfill-customer-tags' => 'app\\command\\QywxBackfillCustomerTags',
|
||||
// 扫描企微客户渠道标签
|
||||
'qywx:scan-media-channel' => 'app\\command\\QywxScanMediaChannel',
|
||||
// 企业微信会话内容存档同步(需开通会话存档 License 并配置 msgaudit_* 相关项 + 动态库)
|
||||
'qywx:sync-msg-archive' => 'app\\command\\QywxSyncMsgArchive',
|
||||
// 获客助手 ChatKey 仅 30 分钟有效,部署时应每分钟执行一次
|
||||
'qywx:retry-customer-acquisition-events' => 'app\\command\\QywxRetryCustomerAcquisitionEvents',
|
||||
// 甘草订单物流路由同步(GET_TASK_ROUTE_LIST)
|
||||
'gancao:sync-logistics' => 'app\\command\\GancaoSyncLogisticsRoute',
|
||||
'ej-pharmacy:sync-catalog' => 'app\\command\\EjPharmacySyncCatalog',
|
||||
'ej-pharmacy:bootstrap-medicines' => 'app\\command\\EjPharmacyBootstrapMedicines',
|
||||
// 历史 internal_cost:批量甘草预报价回填(CTM_PREVIEW)
|
||||
'tcm:backfill-internal-cost' => 'app\\command\\TcmBackfillPrescriptionOrderInternalCost',
|
||||
// 批量回填业务订单签收时间到物流库(导出读库即可,不再逐单 HTTP)
|
||||
'tcm:backfill-sign-time' => 'app\\command\\TcmBackfillPrescriptionOrderSignTime',
|
||||
// 迁移诊单图片到医生备注表
|
||||
'migrate:images-to-doctor-note' => 'app\\command\\MigrateImagesToDoctorNote',
|
||||
// 诊单待办事项:扫描到点的待执行项并向创建人发送企业微信消息
|
||||
'tcm:diagnosis-todo-notify' => 'app\\command\\DiagnosisTodoNotify',
|
||||
// 待分配诊单自动指派:按上月二诊复诊接诊率分档轮询分配(>70% 3条/60~70% 2条/50~60% 1条),写自动指派日志
|
||||
'tcm:auto-assign-pending' => 'app\\command\\AutoAssignPendingDiagnosis',
|
||||
],
|
||||
];
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | 控制台配置
|
||||
// +----------------------------------------------------------------------
|
||||
return [
|
||||
// 指令定义
|
||||
'commands' => [
|
||||
// 定时任务
|
||||
'crontab' => 'app\common\command\Crontab',
|
||||
// 退款查询
|
||||
'query_refund' => 'app\common\command\QueryRefund',
|
||||
// 同步企业微信对外收款
|
||||
'sync_wechat_work_bills' => 'app\common\command\SyncWechatWorkBills',
|
||||
'fill_order_creator_from_payee' => 'app\common\command\FillOrderCreatorFromPayee',
|
||||
// 挂号单状态自动更新(过号->4,超8小时->2)
|
||||
'update_appointment_status' => 'app\common\command\UpdateAppointmentStatus',
|
||||
// 诊单腾讯云 IM 聊天记录入库归档
|
||||
'sync_im_chat_archive' => 'app\common\command\SyncImChatArchive',
|
||||
// 药材库拼音首字母回填(name_pinyin_abbr)
|
||||
'sync_medicine_pinyin_abbr' => 'app\common\command\SyncMedicinePinyinAbbr',
|
||||
// 物流自动更新
|
||||
'express:auto-update' => 'app\\command\\ExpressAutoUpdate',
|
||||
// 同步现有订单快递单号
|
||||
'express:sync' => 'app\\command\\SyncTrackingNumbers',
|
||||
// 企业微信客户同步
|
||||
'qywx:sync-customer' => 'app\\command\\QywxSyncCustomer',
|
||||
// 一次性回填企微客户 tags 字段(从本地 follow_users JSON 提取,不调企微 API)
|
||||
'qywx:backfill-customer-tags' => 'app\\command\\QywxBackfillCustomerTags',
|
||||
// 扫描企微客户渠道标签
|
||||
'qywx:scan-media-channel' => 'app\\command\\QywxScanMediaChannel',
|
||||
// 企业微信会话内容存档同步(需开通会话存档 License 并配置 msgaudit_* 相关项 + 动态库)
|
||||
'qywx:sync-msg-archive' => 'app\\command\\QywxSyncMsgArchive',
|
||||
// 获客助手 ChatKey 仅 30 分钟有效,部署时应每分钟执行一次
|
||||
'qywx:retry-customer-acquisition-events' => 'app\\command\\QywxRetryCustomerAcquisitionEvents',
|
||||
// 甘草订单物流路由同步(GET_TASK_ROUTE_LIST)
|
||||
'gancao:sync-logistics' => 'app\\command\\GancaoSyncLogisticsRoute',
|
||||
'ej-pharmacy:sync-catalog' => 'app\\command\\EjPharmacySyncCatalog',
|
||||
'ej-pharmacy:bootstrap-medicines' => 'app\\command\\EjPharmacyBootstrapMedicines',
|
||||
// 历史 internal_cost:批量甘草预报价回填(CTM_PREVIEW)
|
||||
'tcm:backfill-internal-cost' => 'app\\command\\TcmBackfillPrescriptionOrderInternalCost',
|
||||
// 批量回填业务订单签收时间到物流库(导出读库即可,不再逐单 HTTP)
|
||||
'tcm:backfill-sign-time' => 'app\\command\\TcmBackfillPrescriptionOrderSignTime',
|
||||
// 迁移诊单图片到医生备注表
|
||||
'migrate:images-to-doctor-note' => 'app\\command\\MigrateImagesToDoctorNote',
|
||||
// 诊单待办事项:扫描到点的待执行项并向创建人发送企业微信消息
|
||||
'tcm:diagnosis-todo-notify' => 'app\\command\\DiagnosisTodoNotify',
|
||||
// 待分配诊单自动指派:按上月二诊复诊接诊率分档轮询分配(>70% 3条/60~70% 2条/50~60% 1条),写自动指派日志
|
||||
'tcm:auto-assign-pending' => 'app\\command\\AutoAssignPendingDiagnosis',
|
||||
],
|
||||
];
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* 甘草药管家 SCM 开放平台(处方下单)
|
||||
*
|
||||
* @see https://apidoc.igancao.com/service-doc/scm-outer-recipel.html
|
||||
*
|
||||
* .env 注意:ThinkPHP 使用 parse_ini_file 分区后,写在 `[trtc]` 等分区**下面**的键会
|
||||
* 变成 `TRTC_XXX` 而不是顶层 `GANCAO_SCM_XXX`。请把 GANCAO_SCM_* 写在文件最前(任意
|
||||
* `[分区]` 之前),或使用独立分区 `[GANCAO_SCM]`(键为 ENABLED、GATEWAY_AK 等)。
|
||||
*
|
||||
* 网关层:与 GcOpenApi.php 一致(AK/SK + AES 请求体)。
|
||||
* 业务层:MAKE_TOKEN 使用 biz_ak / biz_sk(pwd=md5(timestamp+业务sk))。**常与网关 OpenAPI AK/SK 不是同一套**;
|
||||
* 若甘草返回 10103 等,请在 .env 单独配置 GANCAO_SCM_BIZ_AK / GANCAO_SCM_BIZ_SK。仅当业务与网关确为同一套时才可留空 BIZ 以复用网关。
|
||||
*
|
||||
* 药材 id:甘草接口 m_list[].id 为平台药 id。解析顺序:处方 herbs 的 gc_id / gancao_id →
|
||||
* 下方 herb_id_map → 医师药品库 zyt_doctor_medicine(name 精确匹配、status=1、gid 为纯数字)。
|
||||
*/
|
||||
if (!function_exists('zyt_gancao_scm_env')) {
|
||||
/**
|
||||
* 读取环境变量:优先 GANCAO_SCM_*;兼容误写在 [trtc] 下的 TRTC_GANCAO_SCM_*。
|
||||
*
|
||||
* @param mixed $default
|
||||
*/
|
||||
function zyt_gancao_scm_env(string $suffix, mixed $default = null): mixed
|
||||
{
|
||||
$primary = env('GANCAO_SCM_' . $suffix, null);
|
||||
if ($primary !== null && $primary !== '' && $primary !== false) {
|
||||
return is_string($primary) ? trim($primary, " \t\n\r\0\x0B\"") : $primary;
|
||||
}
|
||||
$fallback = env('TRTC_GANCAO_SCM_' . $suffix, $default);
|
||||
if (is_string($fallback)) {
|
||||
return trim($fallback, " \t\n\r\0\x0B\"");
|
||||
}
|
||||
|
||||
return $fallback;
|
||||
}
|
||||
}
|
||||
// 测试网关:http://dev-gapis-base.igancao.com/oapi ;生产:https://oapi.igancao.com(见甘草《网关对接规范》)
|
||||
$gwUrl = rtrim((string) zyt_gancao_scm_env('GATEWAY_URL', 'https://oapi.igancao.com'), '/');
|
||||
if (str_contains($gwUrl, 'dev-gapis-base.igancao.com') && !preg_match('#/oapi$#i', $gwUrl)) {
|
||||
$gwUrl .= '/oapi';
|
||||
}
|
||||
$gwAk = (string) zyt_gancao_scm_env('GATEWAY_AK', '');
|
||||
$gwSk = (string) zyt_gancao_scm_env('GATEWAY_SK', '');
|
||||
$bizAk = (string) zyt_gancao_scm_env('BIZ_AK', '');
|
||||
$bizSk = (string) zyt_gancao_scm_env('BIZ_SK', '');
|
||||
if ($bizAk === '') {
|
||||
$bizAk = $gwAk;
|
||||
}
|
||||
if ($bizSk === '') {
|
||||
$bizSk = $gwSk;
|
||||
}
|
||||
$CALLBACK_URL = (string) zyt_gancao_scm_env('GANCAO_SCM_CALLBACK_URL', '');
|
||||
$enabledRaw = zyt_gancao_scm_env('ENABLED', false);
|
||||
|
||||
return [
|
||||
'enabled' => filter_var($enabledRaw, FILTER_VALIDATE_BOOLEAN),
|
||||
'gateway_url' => $gwUrl,
|
||||
'gateway_ak' => $gwAk,
|
||||
'gateway_sk' => $gwSk,
|
||||
'biz_ak' => $bizAk,
|
||||
'biz_sk' => $bizSk,
|
||||
'callback_url' => (string) zyt_gancao_scm_env('CALLBACK_URL', ''),
|
||||
// 回调签名凭证:与下单业务账号 biz_ak/biz_sk 不同,由甘草控制台「订单流转回调通知」配置
|
||||
'callback_appkey' => (string) zyt_gancao_scm_env('CALLBACK_APPKEY', ''),
|
||||
'callback_secret' => (string) zyt_gancao_scm_env('CALLBACK_SECRET', ''),
|
||||
'cradle_store' => (string) zyt_gancao_scm_env('CRADLE_STORE', '甄养堂互联网医院'),
|
||||
'df_id' => (int) zyt_gancao_scm_env('DF_ID', 102),
|
||||
'express_type' => (string) zyt_gancao_scm_env('EXPRESS_TYPE', 'general'),
|
||||
'default_is_decoct' => (int) zyt_gancao_scm_env('DEFAULT_IS_DECOCT', 1),
|
||||
'default_times_per_day' => (int) zyt_gancao_scm_env('TIMES_PER_DAY', 2),
|
||||
'default_num_per_pack' => (int) zyt_gancao_scm_env('NUM_PER_PACK', 2),
|
||||
'default_dose_ml' => (int) zyt_gancao_scm_env('DOSE_ML', 150),
|
||||
'herb_id_map' => [],
|
||||
'df_ids' => ['饮片' => '101', '浓缩水丸' => '102'],
|
||||
// 可选:HTTPS cURL cipher list。默认留空 → 走 cURL 内置默认,兼容性最好。
|
||||
// 需要对付弱加密服务器时:
|
||||
// - OpenSSL 构建(绝大多数 Linux Docker):GANCAO_SCM_TLS_CIPHERS="DEFAULT@SECLEVEL=1"
|
||||
// - 通用:GANCAO_SCM_TLS_CIPHERS="DEFAULT:!aNULL:!eNULL"
|
||||
// 如果 cURL 报 CURLE_SSL_CIPHER(59) Unknown cipher in list,八成是底层不是 OpenSSL,清空此项即可。
|
||||
'tls_ciphers' => (string) zyt_gancao_scm_env('TLS_CIPHERS', ''),
|
||||
];
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* 甘草药管家 SCM 开放平台(处方下单)
|
||||
*
|
||||
* @see https://apidoc.igancao.com/service-doc/scm-outer-recipel.html
|
||||
*
|
||||
* .env 注意:ThinkPHP 使用 parse_ini_file 分区后,写在 `[trtc]` 等分区**下面**的键会
|
||||
* 变成 `TRTC_XXX` 而不是顶层 `GANCAO_SCM_XXX`。请把 GANCAO_SCM_* 写在文件最前(任意
|
||||
* `[分区]` 之前),或使用独立分区 `[GANCAO_SCM]`(键为 ENABLED、GATEWAY_AK 等)。
|
||||
*
|
||||
* 网关层:与 GcOpenApi.php 一致(AK/SK + AES 请求体)。
|
||||
* 业务层:MAKE_TOKEN 使用 biz_ak / biz_sk(pwd=md5(timestamp+业务sk))。**常与网关 OpenAPI AK/SK 不是同一套**;
|
||||
* 若甘草返回 10103 等,请在 .env 单独配置 GANCAO_SCM_BIZ_AK / GANCAO_SCM_BIZ_SK。仅当业务与网关确为同一套时才可留空 BIZ 以复用网关。
|
||||
*
|
||||
* 药材 id:甘草接口 m_list[].id 为平台药 id。解析顺序:处方 herbs 的 gc_id / gancao_id →
|
||||
* 下方 herb_id_map → 医师药品库 zyt_doctor_medicine(name 精确匹配、status=1、gid 为纯数字)。
|
||||
*/
|
||||
if (!function_exists('zyt_gancao_scm_env')) {
|
||||
/**
|
||||
* 读取环境变量:优先 GANCAO_SCM_*;兼容误写在 [trtc] 下的 TRTC_GANCAO_SCM_*。
|
||||
*
|
||||
* @param mixed $default
|
||||
*/
|
||||
function zyt_gancao_scm_env(string $suffix, mixed $default = null): mixed
|
||||
{
|
||||
$primary = env('GANCAO_SCM_' . $suffix, null);
|
||||
if ($primary !== null && $primary !== '' && $primary !== false) {
|
||||
return is_string($primary) ? trim($primary, " \t\n\r\0\x0B\"") : $primary;
|
||||
}
|
||||
$fallback = env('TRTC_GANCAO_SCM_' . $suffix, $default);
|
||||
if (is_string($fallback)) {
|
||||
return trim($fallback, " \t\n\r\0\x0B\"");
|
||||
}
|
||||
|
||||
return $fallback;
|
||||
}
|
||||
}
|
||||
// 测试网关:http://dev-gapis-base.igancao.com/oapi ;生产:https://oapi.igancao.com(见甘草《网关对接规范》)
|
||||
$gwUrl = rtrim((string) zyt_gancao_scm_env('GATEWAY_URL', 'https://oapi.igancao.com'), '/');
|
||||
if (str_contains($gwUrl, 'dev-gapis-base.igancao.com') && !preg_match('#/oapi$#i', $gwUrl)) {
|
||||
$gwUrl .= '/oapi';
|
||||
}
|
||||
$gwAk = (string) zyt_gancao_scm_env('GATEWAY_AK', '');
|
||||
$gwSk = (string) zyt_gancao_scm_env('GATEWAY_SK', '');
|
||||
$bizAk = (string) zyt_gancao_scm_env('BIZ_AK', '');
|
||||
$bizSk = (string) zyt_gancao_scm_env('BIZ_SK', '');
|
||||
if ($bizAk === '') {
|
||||
$bizAk = $gwAk;
|
||||
}
|
||||
if ($bizSk === '') {
|
||||
$bizSk = $gwSk;
|
||||
}
|
||||
$CALLBACK_URL = (string) zyt_gancao_scm_env('GANCAO_SCM_CALLBACK_URL', '');
|
||||
$enabledRaw = zyt_gancao_scm_env('ENABLED', false);
|
||||
|
||||
return [
|
||||
'enabled' => filter_var($enabledRaw, FILTER_VALIDATE_BOOLEAN),
|
||||
'gateway_url' => $gwUrl,
|
||||
'gateway_ak' => $gwAk,
|
||||
'gateway_sk' => $gwSk,
|
||||
'biz_ak' => $bizAk,
|
||||
'biz_sk' => $bizSk,
|
||||
'callback_url' => (string) zyt_gancao_scm_env('CALLBACK_URL', ''),
|
||||
// 回调签名凭证:与下单业务账号 biz_ak/biz_sk 不同,由甘草控制台「订单流转回调通知」配置
|
||||
'callback_appkey' => (string) zyt_gancao_scm_env('CALLBACK_APPKEY', ''),
|
||||
'callback_secret' => (string) zyt_gancao_scm_env('CALLBACK_SECRET', ''),
|
||||
'cradle_store' => (string) zyt_gancao_scm_env('CRADLE_STORE', '甄养堂互联网医院'),
|
||||
'df_id' => (int) zyt_gancao_scm_env('DF_ID', 102),
|
||||
'express_type' => (string) zyt_gancao_scm_env('EXPRESS_TYPE', 'general'),
|
||||
'default_is_decoct' => (int) zyt_gancao_scm_env('DEFAULT_IS_DECOCT', 1),
|
||||
'default_times_per_day' => (int) zyt_gancao_scm_env('TIMES_PER_DAY', 2),
|
||||
'default_num_per_pack' => (int) zyt_gancao_scm_env('NUM_PER_PACK', 2),
|
||||
'default_dose_ml' => (int) zyt_gancao_scm_env('DOSE_ML', 150),
|
||||
'herb_id_map' => [],
|
||||
'df_ids' => ['饮片' => '101', '浓缩水丸' => '102'],
|
||||
// 可选:HTTPS cURL cipher list。默认留空 → 走 cURL 内置默认,兼容性最好。
|
||||
// 需要对付弱加密服务器时:
|
||||
// - OpenSSL 构建(绝大多数 Linux Docker):GANCAO_SCM_TLS_CIPHERS="DEFAULT@SECLEVEL=1"
|
||||
// - 通用:GANCAO_SCM_TLS_CIPHERS="DEFAULT:!aNULL:!eNULL"
|
||||
// 如果 cURL 报 CURLE_SSL_CIPHER(59) Unknown cipher in list,八成是底层不是 OpenSSL,清空此项即可。
|
||||
'tls_ciphers' => (string) zyt_gancao_scm_env('TLS_CIPHERS', ''),
|
||||
];
|
||||
|
||||
+98
-98
@@ -1,98 +1,98 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* 物流轨迹(顺丰 / 京东等)
|
||||
* 对接快递100「实时查询」: https://api.kuaidi100.com
|
||||
*
|
||||
* 规则:同时配置好 CUSTOMER、KEY 即自动走快递100(不必再设 ENABLE=true)。
|
||||
* 若需临时关闭(保留密钥):LOGISTICS_KUAIDI100_DISABLE = true
|
||||
*/
|
||||
$stripQuotes = static function (string $v): string {
|
||||
$v = trim($v);
|
||||
if (strlen($v) >= 2 && (($v[0] === '"' && $v[strlen($v) - 1] === '"') || ($v[0] === "'" && $v[strlen($v) - 1] === "'"))) {
|
||||
return substr($v, 1, -1);
|
||||
}
|
||||
|
||||
return $v;
|
||||
};
|
||||
|
||||
// .env 为 INI 格式:写在某个 [section](如 [trtc])下面的键会变成 trtc.xxx,读不到顶层 LOGISTICS_*
|
||||
$envKuaidi = static function (string $suffix, $default = '') use ($stripQuotes) {
|
||||
$top = 'LOGISTICS_KUAIDI100_' . $suffix;
|
||||
$v = env($top, null);
|
||||
if ($v !== null && $v !== '') {
|
||||
return $stripQuotes((string) $v);
|
||||
}
|
||||
$nested = env('trtc.' . $top, $default);
|
||||
|
||||
return $stripQuotes((string) $nested);
|
||||
};
|
||||
|
||||
$customer = $envKuaidi('CUSTOMER', '');
|
||||
$key = $envKuaidi('KEY', '');
|
||||
$hasCreds = $customer !== '' && $key !== '';
|
||||
$forceDisableRaw = env('LOGISTICS_KUAIDI100_DISABLE', null);
|
||||
if ($forceDisableRaw === null || $forceDisableRaw === '') {
|
||||
$forceDisableRaw = env('trtc.LOGISTICS_KUAIDI100_DISABLE', false);
|
||||
}
|
||||
$forceDisable = filter_var($forceDisableRaw, FILTER_VALIDATE_BOOLEAN);
|
||||
// 已填 CUSTOMER+KEY 即启用;需临时关闭时设 LOGISTICS_KUAIDI100_DISABLE=true(LOGISTICS_KUAIDI100_ENABLE 已废弃,可删)
|
||||
$kuaidiEnabled = ! $forceDisable && $hasCreds;
|
||||
|
||||
// 京东物流开放平台 LOP(https://api.jdl.com)
|
||||
// 仅当填好 APP_KEY / APP_SECRET / ACCESS_TOKEN(RSA2 模式还需 RSA_PRIVATE_KEY)时启用;
|
||||
// 作为快递100 对京东自营单(JDVE…)轨迹陈旧时的兜底数据源,并供后台「京东接口更新」按钮使用。
|
||||
// 未配置时本段 enable=false,ExpressTrackService 完全沿用现有快递100 逻辑,互不影响。
|
||||
// 加签方式由 JD_LOGISTICS_ALGORITHM 控制:rsa2(默认,需私钥) / md5(摘要,无需私钥)。
|
||||
$envJd = static function (string $suffix, $default = '') use ($stripQuotes) {
|
||||
$top = 'JD_LOGISTICS_' . $suffix;
|
||||
$v = env($top, null);
|
||||
if ($v !== null && $v !== '') {
|
||||
return $stripQuotes((string) $v);
|
||||
}
|
||||
// 兼容误写进 [trtc] 等分区的情况
|
||||
$nested = env('trtc.' . $top, $default);
|
||||
|
||||
return $stripQuotes((string) $nested);
|
||||
};
|
||||
|
||||
$jdAppKey = $envJd('APP_KEY', '');
|
||||
$jdAppSecret = $envJd('APP_SECRET', '');
|
||||
$jdAccessToken = $envJd('ACCESS_TOKEN', '');
|
||||
$jdHasCreds = $jdAppKey !== '' && $jdAppSecret !== '' && $jdAccessToken !== '';
|
||||
$jdDisableRaw = env('JD_LOGISTICS_DISABLE', null);
|
||||
if ($jdDisableRaw === null || $jdDisableRaw === '') {
|
||||
$jdDisableRaw = env('trtc.JD_LOGISTICS_DISABLE', false);
|
||||
}
|
||||
$jdDisabled = filter_var($jdDisableRaw, FILTER_VALIDATE_BOOLEAN);
|
||||
$jdEnabled = ! $jdDisabled && $jdHasCreds;
|
||||
|
||||
return [
|
||||
'kuaidi100' => [
|
||||
'enable' => $kuaidiEnabled,
|
||||
'customer' => $customer,
|
||||
'key' => $key,
|
||||
'query_url' => $envKuaidi('QUERY_URL', 'https://poll.kuaidi100.com/poll/query.do'),
|
||||
],
|
||||
'jd' => [
|
||||
'enable' => $jdEnabled,
|
||||
'app_key' => $jdAppKey,
|
||||
'app_secret' => $jdAppSecret,
|
||||
'access_token' => $jdAccessToken,
|
||||
// LOP 网关签名算法(与官方 SDK 一致):md5-salt(默认) / HMacMD5 / HMacSHA1 / HMacSHA256 / HMacSHA512
|
||||
'algorithm' => $envJd('ALGORITHM', 'md5-salt'),
|
||||
// 生产网关基址(不含路径)
|
||||
'gateway' => $envJd('GATEWAY', 'https://api.jdl.com'),
|
||||
// 接口 path(即签名里的 method);京东物流标准轨迹服务(2025-04-29 改版)
|
||||
'method' => $envJd('METHOD', '/jd/tracking/query'),
|
||||
// LOP-DN:对接方案编码(订阅记录可查),标准轨迹服务为 Tracking_JD
|
||||
'lop_dn' => $envJd('LOP_DN', 'Tracking_JD'),
|
||||
// 业务体字段:单号字段名 / 单号类型(20000=运单号) / 商家编码(可选)
|
||||
'reference_field' => $envJd('REFERENCE_FIELD', 'referenceNumber'),
|
||||
'reference_type' => $envJd('REFERENCE_TYPE', '20000'),
|
||||
'customer_code' => $envJd('CUSTOMER_CODE', ''),
|
||||
'api_version' => $envJd('API_VERSION', '2.0'),
|
||||
],
|
||||
];
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* 物流轨迹(顺丰 / 京东等)
|
||||
* 对接快递100「实时查询」: https://api.kuaidi100.com
|
||||
*
|
||||
* 规则:同时配置好 CUSTOMER、KEY 即自动走快递100(不必再设 ENABLE=true)。
|
||||
* 若需临时关闭(保留密钥):LOGISTICS_KUAIDI100_DISABLE = true
|
||||
*/
|
||||
$stripQuotes = static function (string $v): string {
|
||||
$v = trim($v);
|
||||
if (strlen($v) >= 2 && (($v[0] === '"' && $v[strlen($v) - 1] === '"') || ($v[0] === "'" && $v[strlen($v) - 1] === "'"))) {
|
||||
return substr($v, 1, -1);
|
||||
}
|
||||
|
||||
return $v;
|
||||
};
|
||||
|
||||
// .env 为 INI 格式:写在某个 [section](如 [trtc])下面的键会变成 trtc.xxx,读不到顶层 LOGISTICS_*
|
||||
$envKuaidi = static function (string $suffix, $default = '') use ($stripQuotes) {
|
||||
$top = 'LOGISTICS_KUAIDI100_' . $suffix;
|
||||
$v = env($top, null);
|
||||
if ($v !== null && $v !== '') {
|
||||
return $stripQuotes((string) $v);
|
||||
}
|
||||
$nested = env('trtc.' . $top, $default);
|
||||
|
||||
return $stripQuotes((string) $nested);
|
||||
};
|
||||
|
||||
$customer = $envKuaidi('CUSTOMER', '');
|
||||
$key = $envKuaidi('KEY', '');
|
||||
$hasCreds = $customer !== '' && $key !== '';
|
||||
$forceDisableRaw = env('LOGISTICS_KUAIDI100_DISABLE', null);
|
||||
if ($forceDisableRaw === null || $forceDisableRaw === '') {
|
||||
$forceDisableRaw = env('trtc.LOGISTICS_KUAIDI100_DISABLE', false);
|
||||
}
|
||||
$forceDisable = filter_var($forceDisableRaw, FILTER_VALIDATE_BOOLEAN);
|
||||
// 已填 CUSTOMER+KEY 即启用;需临时关闭时设 LOGISTICS_KUAIDI100_DISABLE=true(LOGISTICS_KUAIDI100_ENABLE 已废弃,可删)
|
||||
$kuaidiEnabled = ! $forceDisable && $hasCreds;
|
||||
|
||||
// 京东物流开放平台 LOP(https://api.jdl.com)
|
||||
// 仅当填好 APP_KEY / APP_SECRET / ACCESS_TOKEN(RSA2 模式还需 RSA_PRIVATE_KEY)时启用;
|
||||
// 作为快递100 对京东自营单(JDVE…)轨迹陈旧时的兜底数据源,并供后台「京东接口更新」按钮使用。
|
||||
// 未配置时本段 enable=false,ExpressTrackService 完全沿用现有快递100 逻辑,互不影响。
|
||||
// 加签方式由 JD_LOGISTICS_ALGORITHM 控制:rsa2(默认,需私钥) / md5(摘要,无需私钥)。
|
||||
$envJd = static function (string $suffix, $default = '') use ($stripQuotes) {
|
||||
$top = 'JD_LOGISTICS_' . $suffix;
|
||||
$v = env($top, null);
|
||||
if ($v !== null && $v !== '') {
|
||||
return $stripQuotes((string) $v);
|
||||
}
|
||||
// 兼容误写进 [trtc] 等分区的情况
|
||||
$nested = env('trtc.' . $top, $default);
|
||||
|
||||
return $stripQuotes((string) $nested);
|
||||
};
|
||||
|
||||
$jdAppKey = $envJd('APP_KEY', '');
|
||||
$jdAppSecret = $envJd('APP_SECRET', '');
|
||||
$jdAccessToken = $envJd('ACCESS_TOKEN', '');
|
||||
$jdHasCreds = $jdAppKey !== '' && $jdAppSecret !== '' && $jdAccessToken !== '';
|
||||
$jdDisableRaw = env('JD_LOGISTICS_DISABLE', null);
|
||||
if ($jdDisableRaw === null || $jdDisableRaw === '') {
|
||||
$jdDisableRaw = env('trtc.JD_LOGISTICS_DISABLE', false);
|
||||
}
|
||||
$jdDisabled = filter_var($jdDisableRaw, FILTER_VALIDATE_BOOLEAN);
|
||||
$jdEnabled = ! $jdDisabled && $jdHasCreds;
|
||||
|
||||
return [
|
||||
'kuaidi100' => [
|
||||
'enable' => $kuaidiEnabled,
|
||||
'customer' => $customer,
|
||||
'key' => $key,
|
||||
'query_url' => $envKuaidi('QUERY_URL', 'https://poll.kuaidi100.com/poll/query.do'),
|
||||
],
|
||||
'jd' => [
|
||||
'enable' => $jdEnabled,
|
||||
'app_key' => $jdAppKey,
|
||||
'app_secret' => $jdAppSecret,
|
||||
'access_token' => $jdAccessToken,
|
||||
// LOP 网关签名算法(与官方 SDK 一致):md5-salt(默认) / HMacMD5 / HMacSHA1 / HMacSHA256 / HMacSHA512
|
||||
'algorithm' => $envJd('ALGORITHM', 'md5-salt'),
|
||||
// 生产网关基址(不含路径)
|
||||
'gateway' => $envJd('GATEWAY', 'https://api.jdl.com'),
|
||||
// 接口 path(即签名里的 method);京东物流标准轨迹服务(2025-04-29 改版)
|
||||
'method' => $envJd('METHOD', '/jd/tracking/query'),
|
||||
// LOP-DN:对接方案编码(订阅记录可查),标准轨迹服务为 Tracking_JD
|
||||
'lop_dn' => $envJd('LOP_DN', 'Tracking_JD'),
|
||||
// 业务体字段:单号字段名 / 单号类型(20000=运单号) / 商家编码(可选)
|
||||
'reference_field' => $envJd('REFERENCE_FIELD', 'referenceNumber'),
|
||||
'reference_type' => $envJd('REFERENCE_TYPE', '20000'),
|
||||
'customer_code' => $envJd('CUSTOMER_CODE', ''),
|
||||
'api_version' => $envJd('API_VERSION', '2.0'),
|
||||
],
|
||||
];
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 处方库 AI 解释(Dify Chat App /chat-messages)
|
||||
*
|
||||
* 每个模型必须对应一个在 Dify 中锁定好实际模型的独立 App Key。
|
||||
* App Key 只能配置在服务端环境变量中,禁止下发到管理端浏览器。
|
||||
*/
|
||||
return [
|
||||
'enable' => filter_var(
|
||||
env('prescription_ai.ENABLE', env('prescription_ai.enable', true)),
|
||||
FILTER_VALIDATE_BOOLEAN
|
||||
),
|
||||
'base_url' => rtrim((string) env(
|
||||
'prescription_ai.BASE_URL',
|
||||
env('prescription_ai.base_url', '')
|
||||
), '/'),
|
||||
'timeout' => (int) env(
|
||||
'prescription_ai.TIMEOUT',
|
||||
env('prescription_ai.timeout', 90)
|
||||
),
|
||||
'models' => [
|
||||
'qwen' => [
|
||||
'name' => 'qwen3.6-35b',
|
||||
'label' => '千问',
|
||||
'api_key' => (string) env(
|
||||
'prescription_ai.QWEN_API_KEY',
|
||||
env('prescription_ai.qwen_api_key', '')
|
||||
),
|
||||
],
|
||||
'openai' => [
|
||||
'name' => 'gpt-5.6-sol',
|
||||
'label' => 'OpenAI',
|
||||
'api_key' => (string) env(
|
||||
'prescription_ai.OPENAI_API_KEY',
|
||||
env('prescription_ai.openai_api_key', '')
|
||||
),
|
||||
],
|
||||
],
|
||||
];
|
||||
+178
-178
@@ -1,178 +1,178 @@
|
||||
<?php
|
||||
return [
|
||||
// 系统版本号
|
||||
'version' => '1.9.4',
|
||||
|
||||
// 官网
|
||||
'website' => [
|
||||
'name' => env('project.web_name', 'likeadmin'), // 网站名称
|
||||
'url' => env('project.web_url', 'www.likeadmin.cn/'), // 网站地址
|
||||
'login_image' => 'resource/image/adminapi/default/login_image.png',
|
||||
'web_logo' => 'resource/image/adminapi/default/web_logo.jpg', // 网站logo
|
||||
'web_favicon' => 'resource/image/adminapi/default/web_favicon.ico', // 网站图标
|
||||
'shop_name' => 'likeadmin', // 商城名称
|
||||
'shop_logo' => 'resource/image/adminapi/default/shop_logo.png', // 商城图标
|
||||
'pc_logo' => 'resource/image/adminapi/default/pc_logo.png', // pc_logo
|
||||
'pc_ico' => 'resource/image/adminapi/default/web_favicon.ico', // pc_ico
|
||||
'pc_title' => 'likeadmin', // PC网站标题
|
||||
'h5_favicon' => 'resource/image/adminapi/default/web_favicon.ico', // 网站图标
|
||||
],
|
||||
|
||||
// 后台登录
|
||||
'admin_login' => [
|
||||
// 管理后台登录限制 0-不限制 1-需要限制
|
||||
'login_restrictions' => 1,
|
||||
// 限制密码错误次数
|
||||
'password_error_times' => 5,
|
||||
// 限制禁止多少分钟不能登录
|
||||
'limit_login_time' => 30,
|
||||
],
|
||||
|
||||
// 唯一标识,密码盐、路径加密等
|
||||
'unique_identification' => env('project.unique_identification', 'likeadmin'),
|
||||
|
||||
// 后台管理员token(登录令牌)配置
|
||||
'admin_token' => [
|
||||
'expire_duration' => 3600 * 8,//管理后台token过期时长(单位秒)
|
||||
'be_expire_duration' => 3600,//管理后台token临时过期前时长,自动续期
|
||||
],
|
||||
|
||||
// 商城用户token(登录令牌)配置
|
||||
'user_token' => [
|
||||
'expire_duration' => 3600 * 8,//用户token过期时长(单位秒)
|
||||
'be_expire_duration' => 3600,//用户token临时过期前时长,自动续期
|
||||
],
|
||||
|
||||
// 列表页
|
||||
'lists' => [
|
||||
'page_size_max' => 25000,//列表页查询数量限制(列表页每页数量、导出每页数量)
|
||||
'page_size' => 25, //默认每页数量
|
||||
/** Excel 导出:接口内放宽 PHP 限制(JsonService::relaxLimitsForExcelExport) */
|
||||
'export_max_execution_time' => 600,
|
||||
'export_memory_limit' => '512M',
|
||||
],
|
||||
|
||||
// 各种默认图片
|
||||
'default_image' => [
|
||||
'admin_avatar' => 'resource/image/adminapi/default/avatar.png',
|
||||
'user_avatar' => 'resource/image/adminapi/default/default_avatar.png',
|
||||
'qq_group' => 'resource/image/adminapi/default/qq_group.png', // qq群
|
||||
'customer_service' => 'resource/image/adminapi/default/customer_service.jpg', // 客服
|
||||
'menu_admin' => 'resource/image/adminapi/default/menu_admin.png',// 首页快捷菜单-管理员
|
||||
'menu_role' => 'resource/image/adminapi/default/menu_role.png', // 首页快捷菜单-角色
|
||||
'menu_dept' => 'resource/image/adminapi/default/menu_dept.png',// 首页快捷菜单-部门
|
||||
'menu_dict' => 'resource/image/adminapi/default/menu_dict.png',// 首页快捷菜单-字典
|
||||
'menu_generator' => 'resource/image/adminapi/default/menu_generator.png',// 首页快捷菜单-代码生成器
|
||||
'menu_auth' => 'resource/image/adminapi/default/menu_auth.png',// 首页快捷菜单-菜单权限
|
||||
'menu_web' => 'resource/image/adminapi/default/menu_web.png',// 首页快捷菜单-网站信息
|
||||
'menu_file' => 'resource/image/adminapi/default/menu_file.png',// 首页快捷菜单-素材中心
|
||||
],
|
||||
|
||||
// 文件上传限制 (图片)
|
||||
'file_image' => [
|
||||
'jpg', 'png', 'gif', 'jpeg', 'webp', 'ico'
|
||||
],
|
||||
|
||||
// 文件上传限制 (视频)
|
||||
'file_video' => [
|
||||
'wmv', 'avi', 'mpg', 'mpeg', '3gp', 'mov', 'mp4', 'flv', 'f4v', 'rmvb', 'mkv', 'webm'
|
||||
],
|
||||
|
||||
//上传文件的格式 (文件)
|
||||
'file_file' => [
|
||||
'zip','rar','txt','pdf','doc','docx','xls','xlsx','ppt','pptx','csv','txt','ftr','7z','gz',
|
||||
'mp3', 'wav', 'm4a', 'aac', 'amr', 'wma', // 音频
|
||||
],
|
||||
|
||||
// 登录设置
|
||||
'login' => [
|
||||
// 登录方式:1-账号密码登录;2-手机短信验证码登录
|
||||
'login_way' => ['1', '2'],
|
||||
// 注册强制绑定手机 0-关闭 1-开启
|
||||
'coerce_mobile' => 1,
|
||||
// 第三方授权登录 0-关闭 1-开启
|
||||
'third_auth' => 1,
|
||||
// 微信授权登录 0-关闭 1-开启
|
||||
'wechat_auth' => 1,
|
||||
// qq授权登录 0-关闭 1-开启
|
||||
'qq_auth' => 0,
|
||||
// 登录政策协议 0-关闭 1-开启
|
||||
'login_agreement' => 1,
|
||||
],
|
||||
|
||||
// 后台装修
|
||||
'decorate' => [
|
||||
// 底部导航栏样式设置
|
||||
'tabbar_style' => ['default_color' => '#999999', 'selected_color' => '#c455ff'],
|
||||
],
|
||||
|
||||
// 医助创建订单权限:拥有以下角色ID的用户可修改任意订单,其他用户只能修改自己创建的订单
|
||||
'order_edit_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 处方库:以下角色ID + 超级管理员(root) 可查看/编辑/删除全部;他人仅可管理自己创建的,公开处方对他人只读
|
||||
'prescription_library_manage_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 消费者处方单:以下角色 + root 可对「待审核」处方进行通过/驳回(驳回即作废处方)
|
||||
'prescription_audit_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 处方业务订单 internal_cost 等财务字段:以下角色 ID + root 可见
|
||||
'prescription_order_finance_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 业务订单「关联支付单」审核:以下角色 ID + root 可操作(可与财务角色一致)
|
||||
'prescription_order_payment_audit_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 订单管理列表(order/index):以下角色 ID + root 可查看全部订单,其余仅本人创建
|
||||
'order_list_view_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 自录转化统计(stats.self_input / personal_yeji / personal_account_cost):
|
||||
// 以下角色 ID + root 在列表与总览中可见全部录入人的业绩/账户消耗(不受角色 data_scope 收窄)。
|
||||
// 编辑/删除由菜单按钮权限(stats.personal_yeji/edit 等)控制,不在此配置。
|
||||
'self_input_stats_view_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 业务订单列表金额统计:医助角色 ID;非支付审核白名单的医助仅统计其诊单 assistant_id=本人 的业绩
|
||||
'prescription_order_stats_assistant_role_id' => 2,
|
||||
|
||||
// 业务订单列表:「下单」角色(id=6)可按审核人姓名筛选本人审核过的订单
|
||||
'prescription_order_placer_role_ids' => [6],
|
||||
// 同时拥有以下角色时可按任意审核人筛选(如经理、管理员)
|
||||
'prescription_order_placer_exempt_role_ids' => [3, 8],
|
||||
|
||||
/*
|
||||
* 数据隔离(按部门):全局可用,角色上的 data_scope 控制范围
|
||||
* 1=全部 2=本部门及下级 3=仅本部门 4=仅本人
|
||||
* root 管理员永远视为「全部」;多角色取最严格范围(数值最大,与 DataScopeService 一致)
|
||||
*/
|
||||
'data_scope' => [
|
||||
// 顶层总开关:false 时所有列表不应用按部门的数据隔离(仍保留老的白名单规则)
|
||||
'enabled' => true,
|
||||
// 兜底:当用户未挂任何部门、且角色非「全部」时,只能看到自己(true=只看自己;false=返回空)
|
||||
'no_dept_fallback_self' => true,
|
||||
// 跳过 DataScope 的豁免角色 ID(冗余开关;一般优先用角色 data_scope=1 表达)
|
||||
'exempt_roles' => [],
|
||||
],
|
||||
|
||||
/*
|
||||
* 提成结算 stats.commissionSettlement(YejiStatsLogic)
|
||||
* require_system_auto_prescription:true(默认)仅系统代开口径(is_system_auto=1),常与订单列表「全部已完成」条数不一致。
|
||||
* false 时与列表一致纳入手动开方单(仍需履约完成、业绩归因等其它条件)。
|
||||
* .env 可选:commission_settlement.require_system_auto = 1|0 ,未配置时读本项。
|
||||
*/
|
||||
'commission_settlement' => [
|
||||
'require_system_auto_prescription' => (int) env('commission_settlement.require_system_auto', 1) === 1,
|
||||
],
|
||||
|
||||
// 腾讯云实时音视频(TRTC)配置
|
||||
'trtc' => [
|
||||
'sdkAppId' => (int)env('trtc.sdk_app_id', 1600127710),
|
||||
'secretKey' => env('trtc.secret_key', '8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d'),
|
||||
'expireTime' => 86400,
|
||||
'enable' => env('trtc.enable', false),
|
||||
],
|
||||
|
||||
// 企业微信客户同步配置
|
||||
// 从哪个部门开始同步(1=根部门,会递归获取所有子部门成员)
|
||||
'qywx_sync_department_id' => 1,
|
||||
// 使用「批量获取客户详情」batch/get_by_user,大幅减少 HTTP 次数(失败时自动回退逐条 get)
|
||||
'qywx_sync_use_batch_detail' => true,
|
||||
|
||||
];
|
||||
<?php
|
||||
return [
|
||||
// 系统版本号
|
||||
'version' => '1.9.4',
|
||||
|
||||
// 官网
|
||||
'website' => [
|
||||
'name' => env('project.web_name', 'likeadmin'), // 网站名称
|
||||
'url' => env('project.web_url', 'www.likeadmin.cn/'), // 网站地址
|
||||
'login_image' => 'resource/image/adminapi/default/login_image.png',
|
||||
'web_logo' => 'resource/image/adminapi/default/web_logo.jpg', // 网站logo
|
||||
'web_favicon' => 'resource/image/adminapi/default/web_favicon.ico', // 网站图标
|
||||
'shop_name' => 'likeadmin', // 商城名称
|
||||
'shop_logo' => 'resource/image/adminapi/default/shop_logo.png', // 商城图标
|
||||
'pc_logo' => 'resource/image/adminapi/default/pc_logo.png', // pc_logo
|
||||
'pc_ico' => 'resource/image/adminapi/default/web_favicon.ico', // pc_ico
|
||||
'pc_title' => 'likeadmin', // PC网站标题
|
||||
'h5_favicon' => 'resource/image/adminapi/default/web_favicon.ico', // 网站图标
|
||||
],
|
||||
|
||||
// 后台登录
|
||||
'admin_login' => [
|
||||
// 管理后台登录限制 0-不限制 1-需要限制
|
||||
'login_restrictions' => 1,
|
||||
// 限制密码错误次数
|
||||
'password_error_times' => 5,
|
||||
// 限制禁止多少分钟不能登录
|
||||
'limit_login_time' => 30,
|
||||
],
|
||||
|
||||
// 唯一标识,密码盐、路径加密等
|
||||
'unique_identification' => env('project.unique_identification', 'likeadmin'),
|
||||
|
||||
// 后台管理员token(登录令牌)配置
|
||||
'admin_token' => [
|
||||
'expire_duration' => 3600 * 8,//管理后台token过期时长(单位秒)
|
||||
'be_expire_duration' => 3600,//管理后台token临时过期前时长,自动续期
|
||||
],
|
||||
|
||||
// 商城用户token(登录令牌)配置
|
||||
'user_token' => [
|
||||
'expire_duration' => 3600 * 8,//用户token过期时长(单位秒)
|
||||
'be_expire_duration' => 3600,//用户token临时过期前时长,自动续期
|
||||
],
|
||||
|
||||
// 列表页
|
||||
'lists' => [
|
||||
'page_size_max' => 25000,//列表页查询数量限制(列表页每页数量、导出每页数量)
|
||||
'page_size' => 25, //默认每页数量
|
||||
/** Excel 导出:接口内放宽 PHP 限制(JsonService::relaxLimitsForExcelExport) */
|
||||
'export_max_execution_time' => 600,
|
||||
'export_memory_limit' => '512M',
|
||||
],
|
||||
|
||||
// 各种默认图片
|
||||
'default_image' => [
|
||||
'admin_avatar' => 'resource/image/adminapi/default/avatar.png',
|
||||
'user_avatar' => 'resource/image/adminapi/default/default_avatar.png',
|
||||
'qq_group' => 'resource/image/adminapi/default/qq_group.png', // qq群
|
||||
'customer_service' => 'resource/image/adminapi/default/customer_service.jpg', // 客服
|
||||
'menu_admin' => 'resource/image/adminapi/default/menu_admin.png',// 首页快捷菜单-管理员
|
||||
'menu_role' => 'resource/image/adminapi/default/menu_role.png', // 首页快捷菜单-角色
|
||||
'menu_dept' => 'resource/image/adminapi/default/menu_dept.png',// 首页快捷菜单-部门
|
||||
'menu_dict' => 'resource/image/adminapi/default/menu_dict.png',// 首页快捷菜单-字典
|
||||
'menu_generator' => 'resource/image/adminapi/default/menu_generator.png',// 首页快捷菜单-代码生成器
|
||||
'menu_auth' => 'resource/image/adminapi/default/menu_auth.png',// 首页快捷菜单-菜单权限
|
||||
'menu_web' => 'resource/image/adminapi/default/menu_web.png',// 首页快捷菜单-网站信息
|
||||
'menu_file' => 'resource/image/adminapi/default/menu_file.png',// 首页快捷菜单-素材中心
|
||||
],
|
||||
|
||||
// 文件上传限制 (图片)
|
||||
'file_image' => [
|
||||
'jpg', 'png', 'gif', 'jpeg', 'webp', 'ico'
|
||||
],
|
||||
|
||||
// 文件上传限制 (视频)
|
||||
'file_video' => [
|
||||
'wmv', 'avi', 'mpg', 'mpeg', '3gp', 'mov', 'mp4', 'flv', 'f4v', 'rmvb', 'mkv', 'webm'
|
||||
],
|
||||
|
||||
//上传文件的格式 (文件)
|
||||
'file_file' => [
|
||||
'zip','rar','txt','pdf','doc','docx','xls','xlsx','ppt','pptx','csv','txt','ftr','7z','gz',
|
||||
'mp3', 'wav', 'm4a', 'aac', 'amr', 'wma', // 音频
|
||||
],
|
||||
|
||||
// 登录设置
|
||||
'login' => [
|
||||
// 登录方式:1-账号密码登录;2-手机短信验证码登录
|
||||
'login_way' => ['1', '2'],
|
||||
// 注册强制绑定手机 0-关闭 1-开启
|
||||
'coerce_mobile' => 1,
|
||||
// 第三方授权登录 0-关闭 1-开启
|
||||
'third_auth' => 1,
|
||||
// 微信授权登录 0-关闭 1-开启
|
||||
'wechat_auth' => 1,
|
||||
// qq授权登录 0-关闭 1-开启
|
||||
'qq_auth' => 0,
|
||||
// 登录政策协议 0-关闭 1-开启
|
||||
'login_agreement' => 1,
|
||||
],
|
||||
|
||||
// 后台装修
|
||||
'decorate' => [
|
||||
// 底部导航栏样式设置
|
||||
'tabbar_style' => ['default_color' => '#999999', 'selected_color' => '#c455ff'],
|
||||
],
|
||||
|
||||
// 医助创建订单权限:拥有以下角色ID的用户可修改任意订单,其他用户只能修改自己创建的订单
|
||||
'order_edit_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 处方库:以下角色ID + 超级管理员(root) 可查看/编辑/删除全部;他人仅可管理自己创建的,公开处方对他人只读
|
||||
'prescription_library_manage_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 消费者处方单:以下角色 + root 可对「待审核」处方进行通过/驳回(驳回即作废处方)
|
||||
'prescription_audit_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 处方业务订单 internal_cost 等财务字段:以下角色 ID + root 可见
|
||||
'prescription_order_finance_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 业务订单「关联支付单」审核:以下角色 ID + root 可操作(可与财务角色一致)
|
||||
'prescription_order_payment_audit_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 订单管理列表(order/index):以下角色 ID + root 可查看全部订单,其余仅本人创建
|
||||
'order_list_view_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 自录转化统计(stats.self_input / personal_yeji / personal_account_cost):
|
||||
// 以下角色 ID + root 在列表与总览中可见全部录入人的业绩/账户消耗(不受角色 data_scope 收窄)。
|
||||
// 编辑/删除由菜单按钮权限(stats.personal_yeji/edit 等)控制,不在此配置。
|
||||
'self_input_stats_view_all_roles' => [0, 3, 4, 9, 6],
|
||||
|
||||
// 业务订单列表金额统计:医助角色 ID;非支付审核白名单的医助仅统计其诊单 assistant_id=本人 的业绩
|
||||
'prescription_order_stats_assistant_role_id' => 2,
|
||||
|
||||
// 业务订单列表:「下单」角色(id=6)可按审核人姓名筛选本人审核过的订单
|
||||
'prescription_order_placer_role_ids' => [6],
|
||||
// 同时拥有以下角色时可按任意审核人筛选(如经理、管理员)
|
||||
'prescription_order_placer_exempt_role_ids' => [3, 8],
|
||||
|
||||
/*
|
||||
* 数据隔离(按部门):全局可用,角色上的 data_scope 控制范围
|
||||
* 1=全部 2=本部门及下级 3=仅本部门 4=仅本人
|
||||
* root 管理员永远视为「全部」;多角色取最严格范围(数值最大,与 DataScopeService 一致)
|
||||
*/
|
||||
'data_scope' => [
|
||||
// 顶层总开关:false 时所有列表不应用按部门的数据隔离(仍保留老的白名单规则)
|
||||
'enabled' => true,
|
||||
// 兜底:当用户未挂任何部门、且角色非「全部」时,只能看到自己(true=只看自己;false=返回空)
|
||||
'no_dept_fallback_self' => true,
|
||||
// 跳过 DataScope 的豁免角色 ID(冗余开关;一般优先用角色 data_scope=1 表达)
|
||||
'exempt_roles' => [],
|
||||
],
|
||||
|
||||
/*
|
||||
* 提成结算 stats.commissionSettlement(YejiStatsLogic)
|
||||
* require_system_auto_prescription:true(默认)仅系统代开口径(is_system_auto=1),常与订单列表「全部已完成」条数不一致。
|
||||
* false 时与列表一致纳入手动开方单(仍需履约完成、业绩归因等其它条件)。
|
||||
* .env 可选:commission_settlement.require_system_auto = 1|0 ,未配置时读本项。
|
||||
*/
|
||||
'commission_settlement' => [
|
||||
'require_system_auto_prescription' => (int) env('commission_settlement.require_system_auto', 1) === 1,
|
||||
],
|
||||
|
||||
// 腾讯云实时音视频(TRTC)配置
|
||||
'trtc' => [
|
||||
'sdkAppId' => (int)env('trtc.sdk_app_id', 1600127710),
|
||||
'secretKey' => env('trtc.secret_key', '8a6b3ce533b0e46b9d6e17d5c77bac240bc0ccdce4e3db93a0d6a1e55160c73d'),
|
||||
'expireTime' => 86400,
|
||||
'enable' => env('trtc.enable', false),
|
||||
],
|
||||
|
||||
// 企业微信客户同步配置
|
||||
// 从哪个部门开始同步(1=根部门,会递归获取所有子部门成员)
|
||||
'qywx_sync_department_id' => 1,
|
||||
// 使用「批量获取客户详情」batch/get_by_user,大幅减少 HTTP 次数(失败时自动回退逐条 get)
|
||||
'qywx_sync_use_batch_detail' => true,
|
||||
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user