feat(wecom): 结算账单明细与成交播报用户明文
支付/核销补 HQ 备注且手机号不脱敏;结算通知按城市、合伙人、笔数和累计金额分块推送。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -208,8 +208,8 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
this.logger.log(`seeded wecom push template: ${def.eventKey}`);
|
||||
continue;
|
||||
}
|
||||
const legacy = WECOM_PUSH_TEMPLATE_LEGACY_BODIES[def.eventKey];
|
||||
if (legacy && existing.body === legacy) {
|
||||
const legacyBodies = WECOM_PUSH_TEMPLATE_LEGACY_BODIES[def.eventKey] ?? [];
|
||||
if (legacyBodies.includes(existing.body)) {
|
||||
await this.prisma.wecomPushTemplate.update({
|
||||
where: { eventKey: def.eventKey },
|
||||
data: {
|
||||
@@ -473,7 +473,10 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
skuSummary: '杜康原浆 52度 瓶×2',
|
||||
deliveryLabel: '同城',
|
||||
receiverInfo: '张三 13800008000 河南省郑州市金水区示例路1号',
|
||||
phoneMasked: '138****8000',
|
||||
userName: '好客用户',
|
||||
userPhone: '13800008000',
|
||||
userRemark: '大客户',
|
||||
phoneMasked: '13800008000',
|
||||
},
|
||||
handlePath: '/orders?orderNo=DK202608200001',
|
||||
},
|
||||
@@ -484,7 +487,8 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
storeName: '示例门店',
|
||||
channel: '扫码',
|
||||
userName: '好客用户',
|
||||
userPhone: '138****8000',
|
||||
userPhone: '13800008000',
|
||||
userRemark: '大客户',
|
||||
},
|
||||
handlePath: '/redeem-records?redeemNo=RD202608200001',
|
||||
},
|
||||
@@ -531,9 +535,14 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
},
|
||||
'store.withdraw_approved': {
|
||||
vars: {
|
||||
cityName: '郑州',
|
||||
storeName: '示例门店',
|
||||
partnerLabel: '郑州某某商贸-张三',
|
||||
withdrawNo: 'SW202608200001',
|
||||
amount: '500.00',
|
||||
payee: '张三',
|
||||
accountNo: '6222000011112222',
|
||||
bankBranch: '郑州支行',
|
||||
bankAccount: '张三 / 郑州支行 / 6222000011112222',
|
||||
storeId: '1',
|
||||
},
|
||||
@@ -553,7 +562,19 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
vars: {
|
||||
period: '2026-08-25',
|
||||
billCount: '2',
|
||||
billSummary: '示例门店 ¥300.00 张三 / 郑州支行 / 6222000011112222',
|
||||
totalAmount: '500.00',
|
||||
billSummary: [
|
||||
'城市:郑州',
|
||||
'门店:示例门店',
|
||||
'合伙人:郑州某某商贸-张三',
|
||||
'核销笔数:12',
|
||||
'核销金额:¥500.00',
|
||||
'结算比例:60%',
|
||||
'账单:¥300.00',
|
||||
'收款人:张三',
|
||||
'收款账户:6222000011112222',
|
||||
'收款开户行:郑州支行',
|
||||
].join('\n'),
|
||||
},
|
||||
handlePath: '/finance/store-bills?kind=T1_BILL',
|
||||
},
|
||||
@@ -561,15 +582,36 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
vars: {
|
||||
period: '2026-07',
|
||||
billCount: '1',
|
||||
billSummary: '郑州某某商贸 ¥120.00 张三 / 郑州支行 / 6222000011112222',
|
||||
totalAmount: '120.00',
|
||||
billSummary: [
|
||||
'城市:郑州',
|
||||
'合伙人:郑州某某商贸-张三',
|
||||
'订单笔数:8',
|
||||
'核销笔数:12',
|
||||
'订单佣金:¥100.00',
|
||||
'核销佣金:¥20.00',
|
||||
'账单:¥120.00',
|
||||
'收款人:张三',
|
||||
'收款账户:6222000011112222',
|
||||
'收款开户行:郑州支行',
|
||||
].join('\n'),
|
||||
},
|
||||
handlePath: '/finance/partner-bills',
|
||||
},
|
||||
'finance.winery_bill': {
|
||||
vars: {
|
||||
period: '2026-08-23',
|
||||
billCount: '1',
|
||||
totalAmount: '1990.00',
|
||||
cityNames: '郑州、洛阳',
|
||||
partnerNames: '郑州某某商贸-张三',
|
||||
amount: '1990.00',
|
||||
orderCount: '8',
|
||||
orderAmount: '6633.33',
|
||||
rate: '30%',
|
||||
payee: '杜康酒厂',
|
||||
accountNo: '6222000099998888',
|
||||
bankBranch: '洛阳支行',
|
||||
bankAccount: '杜康酒厂 / 洛阳支行 / 6222000099998888',
|
||||
},
|
||||
handlePath: '/finance/winery-bills',
|
||||
@@ -578,7 +620,19 @@ export class WecomMessagePushService implements OnModuleInit {
|
||||
vars: {
|
||||
period: '2026-07',
|
||||
billCount: '1',
|
||||
billSummary: '小飞侠 ¥86.00 承运商 / 郑州支行 / 6222000033334444',
|
||||
totalAmount: '86.00',
|
||||
billSummary: [
|
||||
'城市:郑州',
|
||||
'合伙人:郑州某某商贸-张三',
|
||||
'承运商:小飞侠',
|
||||
'结算方式:充值扣款',
|
||||
'发货笔数:10',
|
||||
'瓶数:60',
|
||||
'账单:¥86.00',
|
||||
'收款人:承运商',
|
||||
'收款账户:6222000033334444',
|
||||
'收款开户行:郑州支行',
|
||||
].join('\n'),
|
||||
},
|
||||
handlePath: '/finance/logistics-bills',
|
||||
},
|
||||
|
||||
@@ -20,7 +20,8 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
'商品:{{skuSummary}}',
|
||||
'物流:{{deliveryLabel}}',
|
||||
'收货:{{receiverInfo}}',
|
||||
'用户:{{phoneMasked}}',
|
||||
'用户:{{userName}} {{userPhone}}',
|
||||
'备注:{{userRemark}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
@@ -36,6 +37,7 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
'门店:{{storeName}}',
|
||||
'渠道:{{channel}}',
|
||||
'用户:{{userName}} {{userPhone}}',
|
||||
'备注:{{userRemark}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
@@ -102,10 +104,14 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
title: '门店提现已通过',
|
||||
body: [
|
||||
'**门店提现已通过**',
|
||||
'城市:{{cityName}}',
|
||||
'门店:{{storeName}}',
|
||||
'合伙人:{{partnerLabel}}',
|
||||
'提现单号:{{withdrawNo}}',
|
||||
'金额:¥{{amount}}',
|
||||
'收款账户:{{bankAccount}}',
|
||||
'账单:¥{{amount}}',
|
||||
'收款人:{{payee}}',
|
||||
'收款账户:{{accountNo}}',
|
||||
'收款开户行:{{bankBranch}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
@@ -132,9 +138,12 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
body: [
|
||||
'**门店日账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'账单笔数:{{billCount}}',
|
||||
'累计金额:¥{{totalAmount}}',
|
||||
'时间:{{time}}',
|
||||
'',
|
||||
'{{billSummary}}',
|
||||
'',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
handleLabel: '去处理',
|
||||
@@ -145,9 +154,12 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
body: [
|
||||
'**合伙人月账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'账单笔数:{{billCount}}',
|
||||
'累计金额:¥{{totalAmount}}',
|
||||
'时间:{{time}}',
|
||||
'',
|
||||
'{{billSummary}}',
|
||||
'',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
handleLabel: '去处理',
|
||||
@@ -158,10 +170,20 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
body: [
|
||||
'**酒厂日账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'订单数:{{orderCount}}',
|
||||
'金额:¥{{amount}}',
|
||||
'收款账户:{{bankAccount}}',
|
||||
'账单笔数:{{billCount}}',
|
||||
'累计金额:¥{{totalAmount}}',
|
||||
'时间:{{time}}',
|
||||
'',
|
||||
'城市:{{cityNames}}',
|
||||
'合伙人:{{partnerNames}}',
|
||||
'订单笔数:{{orderCount}}',
|
||||
'订单金额:¥{{orderAmount}}',
|
||||
'结算比例:{{rate}}',
|
||||
'账单:¥{{amount}}',
|
||||
'收款人:{{payee}}',
|
||||
'收款账户:{{accountNo}}',
|
||||
'收款开户行:{{bankBranch}}',
|
||||
'',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
handleLabel: '去处理',
|
||||
@@ -172,62 +194,149 @@ export const WECOM_PUSH_TEMPLATE_DEFAULTS: WecomTemplateDefault[] = [
|
||||
body: [
|
||||
'**物流月对账已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'账单笔数:{{billCount}}',
|
||||
'累计金额:¥{{totalAmount}}',
|
||||
'时间:{{time}}',
|
||||
'',
|
||||
'{{billSummary}}',
|
||||
'',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
handleLabel: '去处理',
|
||||
},
|
||||
];
|
||||
|
||||
/** v3.5.3 默认正文;ensureTemplates 仅在库中仍为此文案时升级,不覆盖 HQ 手改 */
|
||||
export const WECOM_PUSH_TEMPLATE_LEGACY_BODIES: Partial<Record<WecomTemplateEventKey, string>> = {
|
||||
/** 上一版默认正文;ensureTemplates 仅在库中仍为此文案时升级,不覆盖 HQ 手改 */
|
||||
export const WECOM_PUSH_TEMPLATE_LEGACY_BODIES: Partial<Record<WecomTemplateEventKey, string[]>> = {
|
||||
'order.paid': [
|
||||
'**订单支付成功**',
|
||||
'订单号:{{orderNo}}',
|
||||
'实付:¥{{payAmount}}',
|
||||
'城市:{{cityName}}',
|
||||
'商品:{{skuSummary}}',
|
||||
'用户:{{phoneMasked}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**订单支付成功**',
|
||||
'订单号:{{orderNo}}',
|
||||
'实付:¥{{payAmount}}',
|
||||
'城市:{{cityName}}',
|
||||
'商品:{{skuSummary}}',
|
||||
'用户:{{phoneMasked}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**订单支付成功**',
|
||||
'订单号:{{orderNo}}',
|
||||
'实付:¥{{payAmount}}',
|
||||
'城市:{{cityName}}',
|
||||
'商品:{{skuSummary}}',
|
||||
'物流:{{deliveryLabel}}',
|
||||
'收货:{{receiverInfo}}',
|
||||
'用户:{{phoneMasked}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'redeem.success': [
|
||||
'**门店核销成功**',
|
||||
'核销单号:{{redeemNo}}',
|
||||
'金额:¥{{amount}}',
|
||||
'门店:{{storeName}}',
|
||||
'渠道:{{channel}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**门店核销成功**',
|
||||
'核销单号:{{redeemNo}}',
|
||||
'金额:¥{{amount}}',
|
||||
'门店:{{storeName}}',
|
||||
'渠道:{{channel}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**门店核销成功**',
|
||||
'核销单号:{{redeemNo}}',
|
||||
'金额:¥{{amount}}',
|
||||
'门店:{{storeName}}',
|
||||
'渠道:{{channel}}',
|
||||
'用户:{{userName}} {{userPhone}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'store.audit_pending': [
|
||||
'**门店审核待处理 · {{action}}**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'合伙人:{{partnerLabel}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**门店审核待处理 · {{action}}**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'合伙人:{{partnerLabel}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'store.package_audit_pending': [
|
||||
'**套餐变更待审核**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'提交端:{{submitter}}',
|
||||
'套餐条数:{{packageCount}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**套餐变更待审核**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'提交端:{{submitter}}',
|
||||
'套餐条数:{{packageCount}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'store.info_change_pending': [
|
||||
'**门店信息变更待审**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'提交端:{{submitter}}',
|
||||
'变更字段:{{changedFields}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
[
|
||||
'**门店信息变更待审**',
|
||||
'门店:{{storeName}}',
|
||||
'城市:{{cityName}}',
|
||||
'提交端:{{submitter}}',
|
||||
'变更字段:{{changedFields}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'store.withdraw_approved': [
|
||||
[
|
||||
'**门店提现已通过**',
|
||||
'门店:{{storeName}}',
|
||||
'提现单号:{{withdrawNo}}',
|
||||
'金额:¥{{amount}}',
|
||||
'收款账户:{{bankAccount}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'finance.store_bill': [
|
||||
[
|
||||
'**门店日账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'finance.partner_bill': [
|
||||
[
|
||||
'**合伙人月账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'finance.winery_bill': [
|
||||
[
|
||||
'**酒厂日账单已生成**',
|
||||
'账期:{{period}}',
|
||||
'订单数:{{orderCount}}',
|
||||
'金额:¥{{amount}}',
|
||||
'收款账户:{{bankAccount}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
'finance.logistics_bill': [
|
||||
[
|
||||
'**物流月对账已生成**',
|
||||
'账期:{{period}}',
|
||||
'笔数:{{billCount}}',
|
||||
'{{billSummary}}',
|
||||
'时间:{{time}}',
|
||||
'[{{handleLabel}}]({{handleUrl}})',
|
||||
].join('\n'),
|
||||
],
|
||||
};
|
||||
|
||||
export function getDefaultTemplate(eventKey: string): WecomTemplateDefault | undefined {
|
||||
|
||||
Reference in New Issue
Block a user