246 lines
6.5 KiB
TypeScript
246 lines
6.5 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
console.log('Seeding preV1 data...');
|
|
|
|
await prisma.partnerBill.deleteMany();
|
|
await prisma.storePayout.deleteMany();
|
|
await prisma.redeemRecord.deleteMany();
|
|
await prisma.benefitLedger.deleteMany();
|
|
await prisma.benefitCoupon.deleteMany();
|
|
await prisma.orderStatusLog.deleteMany();
|
|
await prisma.orderDelivery.deleteMany();
|
|
await prisma.payment.deleteMany();
|
|
await prisma.orderItem.deleteMany();
|
|
await prisma.order.deleteMany();
|
|
await prisma.storeAudit.deleteMany();
|
|
await prisma.storeAccount.deleteMany();
|
|
await prisma.storeMedia.deleteMany();
|
|
await prisma.store.deleteMany();
|
|
await prisma.userCityPreference.deleteMany();
|
|
await prisma.userAddress.deleteMany();
|
|
await prisma.user.deleteMany();
|
|
await prisma.partnerAccount.deleteMany();
|
|
await prisma.cityCommissionRule.deleteMany();
|
|
await prisma.city.deleteMany();
|
|
await prisma.partner.deleteMany();
|
|
await prisma.product.deleteMany();
|
|
await prisma.storeCategory.deleteMany();
|
|
await prisma.hqAccount.deleteMany();
|
|
|
|
const partner = await prisma.partner.create({
|
|
data: {
|
|
companyName: '郑州城市合伙人',
|
|
address: '河南省郑州市金水区',
|
|
contactPhone: '13700000001',
|
|
bankAccountName: '郑州合伙人公司',
|
|
bankAccountNo: '6222021234567890',
|
|
bankBranch: '工商银行郑州分行',
|
|
},
|
|
});
|
|
|
|
const city = await prisma.city.create({
|
|
data: {
|
|
code: '410100',
|
|
name: '郑州市',
|
|
province: '河南省',
|
|
status: 'ACTIVE',
|
|
partnerId: partner.id,
|
|
localMinQty: 2,
|
|
crossMinQty: 6,
|
|
},
|
|
});
|
|
|
|
await prisma.cityCommissionRule.create({
|
|
data: {
|
|
cityId: city.id,
|
|
orderCommissionRate: 0.05,
|
|
redeemCommissionRate: 0.03,
|
|
partnerProfitRate: 0.35,
|
|
storeSettlementRate: 0.6,
|
|
},
|
|
});
|
|
|
|
const categories = await Promise.all([
|
|
prisma.storeCategory.create({ data: { code: 'HOTPOT', name: '火锅', sort: 1 } }),
|
|
prisma.storeCategory.create({ data: { code: 'LOCAL', name: '地方菜', sort: 2 } }),
|
|
]);
|
|
|
|
const products = await Promise.all([
|
|
prisma.product.create({
|
|
data: {
|
|
skuCode: 'QX-001',
|
|
name: '杜康·白水古酿 500ml',
|
|
subtitle: '清香型 52度 礼盒装',
|
|
aromaType: 'QINGXIANG',
|
|
spec: '500ml | 52度',
|
|
price: 599,
|
|
benefitAmount: 599,
|
|
status: 'ON_SALE',
|
|
sortOrder: 1,
|
|
mainImageUrl: 'https://picsum.photos/seed/dukang1/400/400',
|
|
},
|
|
}),
|
|
prisma.product.create({
|
|
data: {
|
|
skuCode: 'QX-002',
|
|
name: '杜康·年份陈酿(十年)',
|
|
subtitle: '清香型 42度 纯粮酿造',
|
|
aromaType: 'QINGXIANG',
|
|
spec: '500ml | 42度',
|
|
price: 880,
|
|
benefitAmount: 880,
|
|
status: 'ON_SALE',
|
|
sortOrder: 2,
|
|
mainImageUrl: 'https://picsum.photos/seed/dukang2/400/400',
|
|
},
|
|
}),
|
|
prisma.product.create({
|
|
data: {
|
|
skuCode: 'QX-003',
|
|
name: '杜康·御享1号 珍藏版',
|
|
subtitle: '高端定制 限量发售',
|
|
aromaType: 'QINGXIANG',
|
|
spec: '500ml | 52度',
|
|
price: 1299,
|
|
benefitAmount: 1299,
|
|
status: 'ON_SALE',
|
|
sortOrder: 3,
|
|
mainImageUrl: 'https://picsum.photos/seed/dukang3/400/400',
|
|
},
|
|
}),
|
|
prisma.product.create({
|
|
data: {
|
|
skuCode: 'QX-004',
|
|
name: '杜康·经典传承',
|
|
subtitle: '清香型 纯粮固态',
|
|
aromaType: 'QINGXIANG',
|
|
spec: '500ml | 46度',
|
|
price: 399,
|
|
benefitAmount: 399,
|
|
status: 'ON_SALE',
|
|
sortOrder: 4,
|
|
mainImageUrl: 'https://picsum.photos/seed/dukang4/400/400',
|
|
},
|
|
}),
|
|
]);
|
|
|
|
await prisma.partnerAccount.create({
|
|
data: {
|
|
partnerId: partner.id,
|
|
phone: '13700000001',
|
|
name: '郑州合伙人主账号',
|
|
isPrimary: 1,
|
|
staffRole: 'PARTNER',
|
|
},
|
|
});
|
|
|
|
const store1 = await prisma.store.create({
|
|
data: {
|
|
cityId: city.id,
|
|
partnerId: partner.id,
|
|
categoryId: categories[0].id,
|
|
name: '郑州老城店',
|
|
phone: '13910000001',
|
|
province: '河南省',
|
|
cityName: '郑州市',
|
|
district: '金水区',
|
|
address: '花园路100号',
|
|
intro: '正宗河南菜,欢迎核销好客权益',
|
|
coverUrl: 'https://picsum.photos/seed/store1/400/300',
|
|
status: 'OPEN',
|
|
openTime: '10:00',
|
|
closeTime: '22:00',
|
|
bankAccountName: '郑州老城店',
|
|
bankAccountNo: '6222029876543210',
|
|
bankBranch: '建设银行郑州分行',
|
|
},
|
|
});
|
|
|
|
const store2 = await prisma.store.create({
|
|
data: {
|
|
cityId: city.id,
|
|
partnerId: partner.id,
|
|
categoryId: categories[1].id,
|
|
name: '郑州美食城店',
|
|
phone: '13910000002',
|
|
province: '河南省',
|
|
cityName: '郑州市',
|
|
district: '二七区',
|
|
address: '大学路200号',
|
|
intro: '地方特色餐饮',
|
|
coverUrl: 'https://picsum.photos/seed/store2/400/300',
|
|
status: 'OPEN',
|
|
openTime: '10:00',
|
|
closeTime: '22:00',
|
|
},
|
|
});
|
|
|
|
await prisma.storeAccount.create({
|
|
data: { storeId: store1.id, phone: '13910000001', name: '郑州老城店' },
|
|
});
|
|
|
|
await prisma.user.create({
|
|
data: {
|
|
userNo: 'DK88293401',
|
|
phone: '13800000001',
|
|
nickname: '测试用户',
|
|
cityPref: {
|
|
create: {
|
|
selectedCityCode: '410100',
|
|
selectedDistrict: '郑州市',
|
|
locateCityCode: '410100',
|
|
locateDistrict: '金水区',
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
await prisma.hqAccount.create({
|
|
data: {
|
|
phone: '13600000001',
|
|
name: '总部管理员',
|
|
adminRole: 'SUPER_ADMIN',
|
|
},
|
|
});
|
|
|
|
const now = new Date();
|
|
const periodStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
const periodEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0);
|
|
await prisma.partnerBill.create({
|
|
data: {
|
|
billNo: `PB${Date.now()}`,
|
|
partnerId: partner.id,
|
|
periodStart,
|
|
periodEnd,
|
|
orderCommission: 1200,
|
|
redeemCommission: 800,
|
|
totalAmount: 2000,
|
|
status: 'CONFIRMED',
|
|
confirmedAt: now,
|
|
},
|
|
});
|
|
|
|
console.log('Seed complete:', {
|
|
city: city.name,
|
|
products: products.length,
|
|
stores: 2,
|
|
testPhones: {
|
|
user: '13800000001',
|
|
store: '13910000001',
|
|
partner: '13700000001',
|
|
},
|
|
});
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|