118 lines
2.2 KiB
TypeScript
118 lines
2.2 KiB
TypeScript
import { ApiProperty } from '@midwayjs/swagger';
|
|
import { Exclude, Expose } from 'class-transformer';
|
|
import {
|
|
BeforeInsert,
|
|
BeforeUpdate,
|
|
Column,
|
|
CreateDateColumn,
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
|
|
@Entity('order_sale')
|
|
@Exclude()
|
|
export class OrderSale {
|
|
@ApiProperty()
|
|
@PrimaryGeneratedColumn()
|
|
@Expose()
|
|
id?: number;
|
|
|
|
@ApiProperty()
|
|
@Column()
|
|
@Expose()
|
|
orderId: number; // 订单 ID
|
|
|
|
@ApiProperty()
|
|
@Column({ nullable: true })
|
|
@Expose()
|
|
siteId: number; // 来源站点唯一标识
|
|
|
|
@ApiProperty()
|
|
@Column({ nullable: true })
|
|
@Expose()
|
|
externalOrderItemId: string; // WooCommerce 订单item ID
|
|
|
|
@ApiProperty()
|
|
@Column()
|
|
@Expose()
|
|
productId: number;
|
|
|
|
@ApiProperty()
|
|
@Column()
|
|
@Expose()
|
|
name: string;
|
|
|
|
@ApiProperty({ description: 'sku', type: 'string' })
|
|
@Expose()
|
|
@Column()
|
|
sku: string;
|
|
|
|
@ApiProperty()
|
|
@Column()
|
|
@Expose()
|
|
quantity: number;
|
|
|
|
@ApiProperty()
|
|
@Column({ default: false })
|
|
@Expose()
|
|
isPackage: boolean;
|
|
|
|
@ApiProperty()
|
|
@Column({ default: false })
|
|
@Expose()
|
|
isYoone: boolean;
|
|
|
|
@ApiProperty()
|
|
@Column({ default: false })
|
|
@Expose()
|
|
isZex: boolean;
|
|
|
|
@ApiProperty({ nullable: true })
|
|
@Column({ type: 'int', nullable: true })
|
|
@Expose()
|
|
size: number | null;
|
|
|
|
@ApiProperty()
|
|
@Column({ default: false })
|
|
@Expose()
|
|
isYooneNew: boolean;
|
|
|
|
@ApiProperty({
|
|
example: '2022-12-12 11:11:11',
|
|
description: '创建时间',
|
|
})
|
|
@CreateDateColumn()
|
|
@Expose()
|
|
createdAt?: Date;
|
|
|
|
@ApiProperty({
|
|
example: '2022-12-12 11:11:11',
|
|
description: '更新时间',
|
|
})
|
|
@UpdateDateColumn()
|
|
@Expose()
|
|
updatedAt?: Date;
|
|
|
|
// === 自动计算逻辑 ===
|
|
@BeforeInsert()
|
|
@BeforeUpdate()
|
|
setFlags() {
|
|
if (!this.name) return;
|
|
const lower = this.name.toLowerCase();
|
|
this.isYoone = lower.includes('yoone');
|
|
this.isZex = lower.includes('zex');
|
|
this.isYooneNew = this.isYoone && lower.includes('new');
|
|
let size: number | null = null;
|
|
const sizes = [3, 6, 9, 12, 15, 18];
|
|
for (const s of sizes) {
|
|
if (lower.includes(s.toString())) {
|
|
size = s;
|
|
break;
|
|
}
|
|
}
|
|
this.size = size;
|
|
}
|
|
|
|
}
|