Просмотр исходного кода

fix(order-module): 修复循环依赖导致的服务器启动错误

- 将外部实体导入改为 import type (Company, Platform, Channel, DisabledPerson, File)
- 使用TypeORM字符串语法替代箭头函数引用外部实体
- 修复 "Cannot access 'EmploymentOrder' before initialization" 错误

问题根源:order-module 与其他模块之间形成循环依赖,导致模块初始化顺序错误。
解决方案:import type 只在编译时保留,配合TypeORM字符串语法彻底打破循环依赖。

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 неделя назад
Родитель
Сommit
f780b3bf05

+ 9 - 9
allin-packages/order-module/src/entities/employment-order.entity.ts

@@ -1,9 +1,9 @@
 import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, OneToMany, ManyToOne, JoinColumn, Index } from 'typeorm';
 import type { OrderPerson } from './order-person.entity';
 import { OrderStatus, WorkStatus } from '@d8d/allin-enums';
-import { Company } from '@d8d/allin-company-module';
-import { Platform } from '@d8d/allin-platform-module';
-import { Channel } from '@d8d/allin-channel-module';
+import type { Company } from '@d8d/allin-company-module';
+import type { Platform } from '@d8d/allin-platform-module';
+import type { Channel } from '@d8d/allin-channel-module';
 
 @Entity('employment_order', { comment: '用工订单表' })
 @Index(['companyId', 'orderStatus']) // 企业统计查询优化
@@ -112,18 +112,18 @@ export class EmploymentOrder {
   @OneToMany('OrderPerson', 'order')
   orderPersons!: OrderPerson[];
 
-  // 关联关系 - 公司
-  @ManyToOne(() => Company)
+  // 关联关系 - 公司(使用字符串语法避免循环依赖)
+  @ManyToOne('Company')
   @JoinColumn({ name: 'company_id' })
   company!: Company;
 
-  // 关联关系 - 平台
-  @ManyToOne(() => Platform)
+  // 关联关系 - 平台(使用字符串语法避免循环依赖)
+  @ManyToOne('Platform')
   @JoinColumn({ name: 'platform_id' })
   platform!: Platform;
 
-  // 关联关系 - 渠道(可选)
-  @ManyToOne(() => Channel, { nullable: true })
+  // 关联关系 - 渠道(可选,使用字符串语法避免循环依赖
+  @ManyToOne('Channel', { nullable: true })
   @JoinColumn({ name: 'channel_id' })
   channel?: Channel;
 

+ 3 - 3
allin-packages/order-module/src/entities/order-person-asset.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, Index } from 'typeorm';
 import type { EmploymentOrder } from './employment-order.entity';
-import { File } from '@d8d/core-module/file-module';
+import type { File } from '@d8d/core-module/file-module';
 import { AssetType, AssetFileType } from '../schemas/order.schema';
 
 @Entity('order_person_asset', { comment: '订单人员资产表' })
@@ -106,8 +106,8 @@ export class OrderPersonAsset {
   // @JoinColumn({ name: 'person_id' })
   // person: DisabledPerson;
 
-  // 关系定义 - 与文件的关联
-  @ManyToOne(() => File, { onDelete: 'CASCADE' })
+  // 关系定义 - 与文件的关联(使用字符串语法避免循环依赖)
+  @ManyToOne('File', { onDelete: 'CASCADE' })
   @JoinColumn({ name: 'file_id' })
   file!: File;
 

+ 3 - 3
allin-packages/order-module/src/entities/order-person.entity.ts

@@ -1,6 +1,6 @@
 import { Entity, Column, PrimaryGeneratedColumn, ManyToOne, JoinColumn, Index } from 'typeorm';
 import type { EmploymentOrder } from './employment-order.entity';
-import { DisabledPerson } from '@d8d/allin-disability-module/entities';
+import type { DisabledPerson } from '@d8d/allin-disability-module/entities';
 import { WorkStatus } from '@d8d/allin-enums';
 
 @Entity('order_person', { comment: '订单人员关联表' })
@@ -83,8 +83,8 @@ export class OrderPerson {
   @JoinColumn({ name: 'order_id' })
   order!: EmploymentOrder;
 
-  // 与残疾人员的关联
-  @ManyToOne(() => DisabledPerson, { onDelete: 'CASCADE' })
+  // 与残疾人员的关联(使用字符串语法避免循环依赖)
+  @ManyToOne('DisabledPerson', { onDelete: 'CASCADE' })
   @JoinColumn({ name: 'person_id' })
   person!: DisabledPerson;