Ready for Development
As a 开发者, I want 将order模块从allin_system-master移植为独立包@d8d/allin-order-module,完成实体重构、文件模块集成和循环依赖处理, so that 我们可以将Allin系统的订单管理功能集成到当前项目中,遵循现有的模块化架构和编码标准,并实现与@d8d/file-module的文件集成和与@d8d/allin-disability-module的依赖解耦。
allin-packages/order-module目录结构@d8d/allin-enums包中的OrderStatus和WorkStatus枚举OrderPersonAsset实体,添加fileId字段引用File实体fileId参数@d8d/file-module和@d8d/allin-enums的依赖allin-packages/order-module/allin-packages/salary-module/package.json
allin-packages/salary-module/package.json@d8d/allin-order-module,添加对@d8d/file-module和@d8d/allin-enums的依赖@d8d/file-module, @d8d/allin-enums, @d8d/core-module, @d8d/shared-crud, @d8d/shared-utilspnpm-workspace.yaml中添加allin-packages/*配置allin-packages/salary-module/tsconfig.json
allin-packages/salary-module/tsconfig.jsonallin-packages/salary-module/vitest.config.ts
allin-packages/salary-module/vitest.config.tspnpm-workspace.yaml中添加allin-packages/order-module
/mnt/code/188-179-template-6/pnpm-workspace.yaml'allin-packages/order-module'源文件路径: allin_system-master/server/src/order/employment_order.entity.ts
目标文件路径: allin-packages/order-module/src/entities/employment-order.entity.ts
参考对照文件:
allin-packages/salary-module/src/entities/salary-level.entity.ts(实体结构)allin-packages/enums/src/enums/order-status.enum.ts(枚举引用)allin-packages/enums/src/enums/work-status.enum.ts(枚举引用)修改要点:
orderId改为id以遵循GenericCrudService约定orderStatus字段类型从string改为OrderStatus枚举workStatus字段,使用WorkStatus枚举order_name → orderName, platform_id → platformId等@Entity('employment_order')源文件路径: allin_system-master/server/src/order/order_person.entity.ts
目标文件路径: allin-packages/order-module/src/entities/order-person.entity.ts
参考对照文件:
allin-packages/disability-module/src/entities/disabled-person.entity.ts(实体结构)DisabledPerson实体,需要解耦处理修改要点:
opId改为idpersonId字段类型保持为number(不直接引用DisabledPerson实体)@Entity('order_person')DisabledPerson的直接引用,改为使用personId: number源文件路径: allin_system-master/server/src/order/order_person_asset.entity.ts
目标文件路径: allin-packages/order-module/src/entities/order-person-asset.entity.ts
参考对照文件:
allin-packages/disability-module/src/entities/disabled-photo.entity.ts(文件实体集成)packages/file-module/src/entities/file.entity.ts(文件实体引用)修改要点:
opId改为idassetUrl: string字段,添加fileId: number字段@ManyToOne(() => File)DisabledPerson的直接引用,改为使用personId: numberAssetType和AssetFileType枚举移到实体文件中(模块内部枚举)@Entity('order_person_asset')目标文件路径:
allin-packages/order-module/src/dto/create-order.dto.tsallin-packages/order-module/src/dto/update-order.dto.tsallin-packages/order-module/src/dto/create-order-person.dto.tsallin-packages/order-module/src/dto/create-order-person-asset.dto.tsallin-packages/order-module/src/schemas/order.schema.ts参考对照文件:
allin-packages/salary-module/src/dto/create-salary.dto.ts(DTO结构)allin-packages/salary-module/src/dto/update-salary.dto.tsallin-packages/salary-module/src/schemas/salary.schema.ts(Zod schema)allin-packages/disability-module/src/schemas/disabled-person.schema.ts(文件ID验证)修改要点:
fileId验证OrderStatus和WorkStatus枚举源文件路径: allin_system-master/server/src/order/order.service.ts
目标文件路径: allin-packages/order-module/src/services/order.service.ts
参考对照文件:
allin-packages/salary-module/src/services/salary.service.ts(服务层结构)allin-packages/disability-module/src/services/disabled-person.service.ts(文件验证逻辑)修改要点:
GenericCrudService<EmploymentOrder>DisabledPersonRepository的直接依赖fileId的有效性源文件路径: allin_system-master/server/src/order/order.controller.ts
目标文件路径: allin-packages/order-module/src/routes/order.routes.ts
参考对照文件:
allin-packages/salary-module/src/routes/salary.routes.ts(Hono路由结构)allin-packages/disability-module/src/routes/disabled-person.routes.ts(文件ID参数处理)修改要点:
fileId参数处理目标文件路径:
allin-packages/order-module/src/index.tsallin-packages/order-module/src/order.module.ts参考对照文件:
allin-packages/salary-module/src/index.ts(导出结构)allin-packages/salary-module/src/salary.module.ts(模块定义)目标文件路径:
allin-packages/order-module/tests/unit/order.controller.test.tsallin-packages/order-module/tests/unit/order.service.test.tsallin-packages/order-module/tests/integration/order.integration.test.ts参考对照文件:
allin-packages/salary-module/tests/unit/salary.controller.test.ts(单元测试结构)allin-packages/salary-module/tests/integration/salary.integration.test.ts(集成测试结构)allin-packages/disability-module/tests/integration/disability.integration.test.ts(文件集成测试)测试重点:
OrderStatus和WorkStatus枚举的正确使用问题: 订单模块与disability-module存在相互引用 源文件分析:
DisabledPerson实体EmploymentOrder和OrderPerson实体解决方案:
PersonReference接口,避免直接引用DisabledPerson实体personId: number代替直接的实体引用allin-packages/salary-module与@d8d/geo-areas的集成方式实施步骤:
PersonReference类型personId: number代替person: DisabledPersonpersonId: number代替person: DisabledPersonpnpm testpnpm test:integrationpnpm typecheckpnpm buildid作为主键字段名,而不是orderId、opId等特定名称pnpm-workspace.yaml中添加新包路径'allin-packages/order-module'tests/integration/setup.tspnpm typecheck检查类型错误,特别注意枚举导入和循环依赖@d8d/file-module的关联关系,参考disabled-photo.entity.ts@d8d/allin-enums包导入OrderStatus和WorkStatus枚举OrderStatus和WorkStatus枚举集成:
import { OrderStatus, WorkStatus } from '@d8d/allin-enums';
@Column({
name: 'order_status',
type: 'enum',
enum: OrderStatus,
default: OrderStatus.DRAFT,
comment: '订单状态'
})
orderStatus!: OrderStatus;
@Column({
name: 'work_status',
type: 'enum',
enum: WorkStatus,
default: WorkStatus.NOT_WORKING,
comment: '工作状态'
})
workStatus!: WorkStatus;
OrderPersonAsset实体文件集成:
import { File } from '@d8d/file-module/entities';
@Column({
name: 'file_id',
type: 'int',
nullable: false,
comment: '文件ID,引用files表'
})
fileId!: number;
@ManyToOne(() => File)
@JoinColumn({ name: 'file_id' })
file!: File;
循环依赖处理方案:
// 原代码(有循环依赖):
// @ManyToOne(() => DisabledPerson)
// person!: DisabledPerson;
// 新代码(解耦):
@Column({
name: 'person_id',
type: 'int',
nullable: false,
comment: '人员ID'
})
personId!: number;
// 可选:定义引用接口
export interface PersonReference {
id: number;
name: string;
idCard: string;
}
AssetType和AssetFileType枚举:
order-person-asset.entity.ts中定义即可TAX = 'tax', SALARY = 'salary'等@d8d/file-module将在开发完成后填写
故事创建时间:2025-12-02 创建者:Bob (Scrum Master) 更新说明:重新创建故事,吸取之前移植故事的经验教训,在任务中标注迁移文件的路径和参考对照文件的路径