你已明确:
SyncHand 上继续加方法;后续还会接入学员、课表、教室等,入参结构统一为:
{
"records": [
{
"业务对象字段": "..."
}
]
}
本方案目标:
ISyncDeptStrategy / TrainClassStrategyImpl 等现有策略实现不调整)。SyncHand 与历史全量接口保持原样,避免影响现网。records 批量模型。ResourceDept);新增一条并行链路(与 SyncHand 并存):
BatchSyncController
-> TrainBatchSyncService(培训班级)
-> TrainClassRecordMapper(records -> ResourceDept)
-> 复用策略 ISyncDeptStrategy(TRAIN_CLASS)
-> syncDept(...) / syncDelDept(...)
未来扩展:
TraineeBatchSyncServiceCourseBatchSyncServiceClassroomBatchSyncService它们共享同一 BatchSyncRequest<T> 请求壳与统一处理约定。
建议新增文件:
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/controller/BatchSyncController.java建议路由:
POST /batch-sync/train/classPOST /batch-sync/train/traineePOST /batch-sync/train/coursePOST /batch-sync/train/classroom职责:
BatchSyncRequest<TrainClassRecordRequest>;R<Void> 或后续统一结果对象。建议新增:
BatchSyncRequest<T>:统一壳,字段 List<T> recordsTrainClassRecordRequest:培训班级记录 DTO培训班级字段:
classIdclassNameyearsenester(兼容你给的外部字段拼写)checkinTimestartTimeendTimestudentNumheadTeacherNamedelFlagtenantId说明:
headTeacherName 当前策略链未使用,先保留在请求层。建议新增文件:
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/business/batch/TrainBatchSyncService.java职责:
ResourceDept;delFlag 分流:
syncDelDept(...)syncDept(...)建议新增文件:
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/business/batch/mapper/TrainClassRecordMapper.java职责:
TrainClassRecordRequest 映射为 ResourceDept,复用现有策略所需字段结构。字段映射(与现有策略兼容):
classId -> dept_idclassName -> dept_nameyear -> year(Integer)senester(1/2) -> semester(上学期/下学期)checkinTime -> checkDate + payBeginstartTime -> beginDateendTime -> endDate + payEndstudentNum -> planCount(为空设默认值,防止 planCount.longValue() NPE)tenantId -> tenantId(为空回退默认租户)chooseRoom=0,canEat=1,operatorId=FULL_SYNC_ADMINSyncHand 不改。SyncTrainService.syncTrainClass() 不改。后续新增学员/课表/教室时,仅需:
RecordRequest DTO;*BatchSyncService;BatchSyncController 增加一个路由方法。统一约束:
BatchSyncRequest<T>.records。入口/服务层最小校验:
records 非空;classId/className/year/senester/checkinTime/startTime/endTime);senester 仅允许 1/2;yyyy-MM-dd HH:mm:ss,兼容日期字符串);studentNum 为空时默认 100。错误处理:
ServiceException;R<Void>,后续可扩展批次结果对象。BatchSyncRequest<T>。TrainClassRecordRequest。BatchSyncController 与 POST /batch-sync/train/class。TrainBatchSyncService。TrainClassRecordMapper 并完成字段映射。delFlag 分流并复用策略层调用。SyncHand)完全不受影响。delFlag=0:验证 sys_dept 新增/更新 + 团客新增/更新。delFlag=1:验证 sys_dept 删除 + 团客删除。senester 值非法。studentNum 为空默认值生效。tenantId 缺失时默认租户生效。GET /hand/sync/train/class 行为不变。headTeacherName 暂无落库目标字段,本期仅接收保留。senester 拼写建议在 DTO 层做兼容映射,内部命名可标准化。classId 混合批次歧义。records 请求壳与班级 DTO。SyncHand、不改策略层前提下实现等效业务闭环。