@@ -0,0 +1,36 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import {
|
||||
WECOM_PUSH_CONDITION_GROUPS,
|
||||
WECOM_PUSH_CONDITION_LABELS,
|
||||
WECOM_PUSH_DEFAULT_SETTLEMENT_CONDITIONS,
|
||||
WECOM_SETTLEMENT_PUSH_NAME,
|
||||
parseWecomPushConditions,
|
||||
} from './wecom-message-push';
|
||||
|
||||
describe('wecom-message-push', () => {
|
||||
it('alert.settlement 展示为结算任务失败通知且在系统监控组', () => {
|
||||
expect(WECOM_PUSH_CONDITION_LABELS['alert.settlement']).toBe('结算任务失败通知');
|
||||
const system = WECOM_PUSH_CONDITION_GROUPS.find((g) => g.key === 'system');
|
||||
expect(system?.conditions).toEqual(['alert.system', 'alert.settlement']);
|
||||
});
|
||||
|
||||
it('默认结算通知群条件含任务失败与四账单', () => {
|
||||
expect(WECOM_SETTLEMENT_PUSH_NAME).toBe('结算通知群');
|
||||
expect(WECOM_PUSH_DEFAULT_SETTLEMENT_CONDITIONS).toEqual(
|
||||
expect.arrayContaining([
|
||||
'alert.settlement',
|
||||
'store.withdraw_approved',
|
||||
'finance.store_bill',
|
||||
'finance.partner_bill',
|
||||
'finance.winery_bill',
|
||||
'finance.logistics_bill',
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
it('解析新财务条件', () => {
|
||||
expect(parseWecomPushConditions(['finance.store_bill', 'bogus'])).toEqual([
|
||||
'finance.store_bill',
|
||||
]);
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,4 @@
|
||||
/** 企微群机器人 Webhook · 推送条件(v3.4.11 + v3.5.3 业务通知) */
|
||||
/** 企微群机器人 Webhook · 推送条件(v3.4.11 + v3.5.3 业务通知 + v3.5.11 结算通知) */
|
||||
export const WECOM_PUSH_CONDITIONS = [
|
||||
'alert.ops',
|
||||
'support_ticket.created',
|
||||
@@ -11,9 +11,14 @@ export const WECOM_PUSH_CONDITIONS = [
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'store.withdraw_approved',
|
||||
'order.paid',
|
||||
'redeem.success',
|
||||
'invoice.pending',
|
||||
'finance.store_bill',
|
||||
'finance.partner_bill',
|
||||
'finance.winery_bill',
|
||||
'finance.logistics_bill',
|
||||
] as const;
|
||||
|
||||
export type WecomPushCondition = (typeof WECOM_PUSH_CONDITIONS)[number];
|
||||
@@ -24,15 +29,20 @@ export const WECOM_PUSH_CONDITION_LABELS: Record<WecomPushCondition, string> = {
|
||||
'alert.pay': '支付异常',
|
||||
'alert.redeem': '核销异常',
|
||||
'alert.system': '系统监控(5xx、回调、定时任务)',
|
||||
'alert.settlement': '结算任务告警',
|
||||
'alert.settlement': '结算任务失败通知',
|
||||
'dev_plan.task_dispatch': '开发任务评审派发',
|
||||
'store.audit_pending': '门店提交/重提待审',
|
||||
'store.package_audit_pending': '套餐变更待审',
|
||||
'store.info_change_pending': '门店信息变更待审',
|
||||
'store.withdraw_pending': '门店手动提现待审',
|
||||
'store.withdraw_approved': '门店手动提现已通过',
|
||||
'order.paid': '订单支付成功',
|
||||
'redeem.success': '门店核销成功',
|
||||
'invoice.pending': '发票申请待开票',
|
||||
'finance.store_bill': '门店日账单已生成',
|
||||
'finance.partner_bill': '合伙人月账单已生成',
|
||||
'finance.winery_bill': '酒厂日账单已生成',
|
||||
'finance.logistics_bill': '物流月对账已生成',
|
||||
};
|
||||
|
||||
export const WECOM_PUSH_CONDITION_GROUPS: Array<{
|
||||
@@ -68,9 +78,20 @@ export const WECOM_PUSH_CONDITION_GROUPS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'system',
|
||||
label: '系统与结算',
|
||||
label: '系统监控',
|
||||
conditions: ['alert.system', 'alert.settlement'],
|
||||
},
|
||||
{
|
||||
key: 'settlement',
|
||||
label: '结算通知',
|
||||
conditions: [
|
||||
'store.withdraw_approved',
|
||||
'finance.store_bill',
|
||||
'finance.partner_bill',
|
||||
'finance.winery_bill',
|
||||
'finance.logistics_bill',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'dev_plan',
|
||||
label: '开发计划',
|
||||
@@ -115,9 +136,20 @@ export const WECOM_PUSH_DEFAULT_DEAL_BROADCAST_CONDITIONS: WecomPushCondition[]
|
||||
'redeem.success',
|
||||
];
|
||||
|
||||
/** 默认「结算通知群」 */
|
||||
export const WECOM_PUSH_DEFAULT_SETTLEMENT_CONDITIONS: WecomPushCondition[] = [
|
||||
'alert.settlement',
|
||||
'store.withdraw_approved',
|
||||
'finance.store_bill',
|
||||
'finance.partner_bill',
|
||||
'finance.winery_bill',
|
||||
'finance.logistics_bill',
|
||||
];
|
||||
|
||||
export const WECOM_STORE_AUDIT_PUSH_NAME = '门店审核通知群';
|
||||
export const WECOM_BIZ_TODO_PUSH_NAME = '业务待办通知群';
|
||||
export const WECOM_DEAL_BROADCAST_PUSH_NAME = '成交播报群';
|
||||
export const WECOM_SETTLEMENT_PUSH_NAME = '结算通知群';
|
||||
|
||||
/** 占位 webhook(未配置真实 key 时禁用,避免误推) */
|
||||
export const WECOM_STORE_AUDIT_PLACEHOLDER_WEBHOOK =
|
||||
@@ -131,7 +163,12 @@ export const WECOM_TEMPLATE_EVENT_KEYS = [
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'store.withdraw_approved',
|
||||
'invoice.pending',
|
||||
'finance.store_bill',
|
||||
'finance.partner_bill',
|
||||
'finance.winery_bill',
|
||||
'finance.logistics_bill',
|
||||
] as const;
|
||||
|
||||
export type WecomTemplateEventKey = (typeof WECOM_TEMPLATE_EVENT_KEYS)[number];
|
||||
@@ -143,14 +180,50 @@ export const WECOM_TEMPLATE_EVENT_LABELS: Record<WecomTemplateEventKey, string>
|
||||
'store.package_audit_pending': '套餐变更待审',
|
||||
'store.info_change_pending': '门店信息变更待审',
|
||||
'store.withdraw_pending': '门店手动提现待审',
|
||||
'store.withdraw_approved': '门店手动提现已通过',
|
||||
'invoice.pending': '发票申请待开票',
|
||||
'finance.store_bill': '门店日账单已生成',
|
||||
'finance.partner_bill': '合伙人月账单已生成',
|
||||
'finance.winery_bill': '酒厂日账单已生成',
|
||||
'finance.logistics_bill': '物流月对账已生成',
|
||||
};
|
||||
|
||||
/** 各事件可用占位符说明(HQ 模板编辑) */
|
||||
export const WECOM_TEMPLATE_PLACEHOLDERS: Record<WecomTemplateEventKey, string[]> = {
|
||||
'order.paid': ['orderNo', 'payAmount', 'cityName', 'skuSummary', 'phoneMasked', 'time', 'handleUrl', 'handleLabel'],
|
||||
'redeem.success': ['redeemNo', 'amount', 'storeName', 'channel', 'time', 'handleUrl', 'handleLabel'],
|
||||
'store.audit_pending': ['storeName', 'cityName', 'partnerLabel', 'action', 'time', 'handleUrl', 'handleLabel', 'storeId'],
|
||||
'order.paid': [
|
||||
'orderNo',
|
||||
'payAmount',
|
||||
'cityName',
|
||||
'skuSummary',
|
||||
'deliveryLabel',
|
||||
'receiverInfo',
|
||||
'phoneMasked',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'redeem.success': [
|
||||
'redeemNo',
|
||||
'amount',
|
||||
'storeName',
|
||||
'channel',
|
||||
'userName',
|
||||
'userPhone',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'store.audit_pending': [
|
||||
'storeName',
|
||||
'cityName',
|
||||
'submitter',
|
||||
'partnerLabel',
|
||||
'action',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
'storeId',
|
||||
],
|
||||
'store.package_audit_pending': [
|
||||
'storeName',
|
||||
'cityName',
|
||||
@@ -181,6 +254,16 @@ export const WECOM_TEMPLATE_PLACEHOLDERS: Record<WecomTemplateEventKey, string[]
|
||||
'handleLabel',
|
||||
'storeId',
|
||||
],
|
||||
'store.withdraw_approved': [
|
||||
'storeName',
|
||||
'withdrawNo',
|
||||
'amount',
|
||||
'bankAccount',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
'storeId',
|
||||
],
|
||||
'invoice.pending': [
|
||||
'invoiceNo',
|
||||
'orderNo',
|
||||
@@ -191,6 +274,39 @@ export const WECOM_TEMPLATE_PLACEHOLDERS: Record<WecomTemplateEventKey, string[]
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'finance.store_bill': [
|
||||
'period',
|
||||
'billCount',
|
||||
'billSummary',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'finance.partner_bill': [
|
||||
'period',
|
||||
'billCount',
|
||||
'billSummary',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'finance.winery_bill': [
|
||||
'period',
|
||||
'amount',
|
||||
'orderCount',
|
||||
'bankAccount',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
'finance.logistics_bill': [
|
||||
'period',
|
||||
'billCount',
|
||||
'billSummary',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
};
|
||||
|
||||
export type WecomPushTemplateDto = {
|
||||
|
||||
Reference in New Issue
Block a user