@@ -34,12 +34,15 @@ async function main() {
|
|||||||
['monthly', '经营月报', 9],
|
['monthly', '经营月报', 9],
|
||||||
];
|
];
|
||||||
for (const [kind, name, hour] of seeds) {
|
for (const [kind, name, hour] of seeds) {
|
||||||
await prisma.$executeRaw`
|
await prisma.$executeRawUnsafe(
|
||||||
INSERT IGNORE INTO wecom_report_push
|
`INSERT IGNORE INTO wecom_report_push
|
||||||
(kind, name, webhook_url, enabled, send_hour, send_minute, send_weekday, send_month_day)
|
(kind, name, webhook_url, enabled, send_hour, send_minute, send_weekday, send_month_day, created_at, updated_at)
|
||||||
VALUES
|
VALUES (?, ?, ?, 0, ?, 0, 1, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3))`,
|
||||||
(${kind}, ${name}, ${PLACEHOLDER}, 0, ${hour}, 0, 1, 1)
|
kind,
|
||||||
`;
|
name,
|
||||||
|
PLACEHOLDER,
|
||||||
|
hour,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
console.log('migrate-wecom-report done');
|
console.log('migrate-wecom-report done');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -561,7 +561,7 @@ model WecomReportPush {
|
|||||||
lastSentPeriod String? @map("last_sent_period") @db.VarChar(16)
|
lastSentPeriod String? @map("last_sent_period") @db.VarChar(16)
|
||||||
lastSentAt DateTime? @map("last_sent_at") @db.DateTime(3)
|
lastSentAt DateTime? @map("last_sent_at") @db.DateTime(3)
|
||||||
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
createdAt DateTime @default(now()) @map("created_at") @db.DateTime(3)
|
||||||
updatedAt DateTime @updatedAt @map("updated_at") @db.DateTime(3)
|
updatedAt DateTime @default(now()) @updatedAt @map("updated_at") @db.DateTime(3)
|
||||||
|
|
||||||
@@map("wecom_report_push")
|
@@map("wecom_report_push")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ type ReportRow = WecomReportPush;
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class AdminWecomReportsService implements OnModuleInit {
|
export class AdminWecomReportsService implements OnModuleInit {
|
||||||
private readonly logger = new Logger(AdminWecomReportsService.name);
|
private readonly logger = new Logger(AdminWecomReportsService.name);
|
||||||
|
private defaultsReady = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly prisma: PrismaService,
|
private readonly prisma: PrismaService,
|
||||||
@@ -77,11 +78,36 @@ export class AdminWecomReportsService implements OnModuleInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 早期 INSERT IGNORE 未写 updated_at,Prisma db push 的列又无默认值,
|
||||||
|
* MySQL 会落成 0000-00-00,后续 Prisma 读行即报 invalid datetime。
|
||||||
|
*/
|
||||||
|
private async repairZeroDatetimes(): Promise<void> {
|
||||||
|
await this.prisma.$executeRawUnsafe(`
|
||||||
|
UPDATE wecom_report_push
|
||||||
|
SET created_at = CURRENT_TIMESTAMP(3)
|
||||||
|
WHERE CAST(created_at AS CHAR) REGEXP '^0000|-00-'
|
||||||
|
`);
|
||||||
|
await this.prisma.$executeRawUnsafe(`
|
||||||
|
UPDATE wecom_report_push
|
||||||
|
SET updated_at = CURRENT_TIMESTAMP(3)
|
||||||
|
WHERE CAST(updated_at AS CHAR) REGEXP '^0000|-00-'
|
||||||
|
`);
|
||||||
|
await this.prisma.$executeRawUnsafe(`
|
||||||
|
UPDATE wecom_report_push
|
||||||
|
SET last_sent_at = NULL
|
||||||
|
WHERE last_sent_at IS NOT NULL AND CAST(last_sent_at AS CHAR) REGEXP '^0000|-00-'
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
async ensureDefaults(): Promise<void> {
|
async ensureDefaults(): Promise<void> {
|
||||||
|
if (this.defaultsReady) return;
|
||||||
|
await this.repairZeroDatetimes();
|
||||||
for (const seed of KIND_SEED) {
|
for (const seed of KIND_SEED) {
|
||||||
await this.prisma.wecomReportPush.upsert({
|
const existing = await this.prisma.wecomReportPush.findUnique({ where: { kind: seed.kind } });
|
||||||
where: { kind: seed.kind },
|
if (existing) continue;
|
||||||
create: {
|
await this.prisma.wecomReportPush.create({
|
||||||
|
data: {
|
||||||
kind: seed.kind,
|
kind: seed.kind,
|
||||||
name: seed.name,
|
name: seed.name,
|
||||||
webhookUrl: WECOM_STORE_AUDIT_PLACEHOLDER_WEBHOOK,
|
webhookUrl: WECOM_STORE_AUDIT_PLACEHOLDER_WEBHOOK,
|
||||||
@@ -91,9 +117,9 @@ export class AdminWecomReportsService implements OnModuleInit {
|
|||||||
sendWeekday: 1,
|
sendWeekday: 1,
|
||||||
sendMonthDay: 1,
|
sendMonthDay: 1,
|
||||||
},
|
},
|
||||||
update: {},
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
this.defaultsReady = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseKind(raw: string): WecomReportKind {
|
parseKind(raw: string): WecomReportKind {
|
||||||
|
|||||||
Reference in New Issue
Block a user