云禾外卖补充—项目整体初始架构解析

📅 发布时间:2026/10/15 21:24:38
云禾外卖补充—项目整体初始架构解析
sky-server 只完成了一个业务模块员工管理其它业务订单/菜品/套餐/购物车/用户/地址/报表只到 entity/dto/vo 这层没有业务实现一、三个子工程的整体职责模块职责可被谁依赖sky-common通用工具箱常量、异常、响应包装、配置类、JWT/OSS/微信工具、JSON 映射sky-pojo、sky-serversky-pojo数据模型层entity数据库表映射、dto前端→后端入参、vo后端→前端出参sky-serversky-server业务实现层启动类、配置、Controller、Service、Mapper、拦截器、异常处理不被任何模块依赖部署入口依赖方向server → pojo → commonserver → common直接用工具类。典型的三层依赖倒置结构。二、sky-common28 个类6 个包包类职责constantAutoFillConstantAOP 自动填充注解里用的常量SET_CREATE_USER/SET_UPDATE_USER等JwtClaimsConstantJWT claims 的 key 名如EMP_ID empIdMessageConstant业务异常文案如账号不存在密码错误PasswordConstant默认密码常量123456StatusConstant员工/菜品状态常量ENABLE1/DISABLE0contextBaseContext基于 ThreadLocal 存当前登录用户 id拦截器写入业务层取出enumerationOperationTypeAOP 枚举UPDATE/INSERT配合AutoFill用exceptionBaseException所有业务异常的父类AccountNotFoundException账号不存在AccountLockedException账号被锁定PasswordErrorException密码错误PasswordEditFailedException修改密码失败LoginFailedException登录失败UserNotLoginException用户未登录AddressBookBusinessException地址簿业务异常OrderBusinessException订单业务异常ShoppingCartBusinessException购物车业务异常SetmealEnableFailedException套餐起售失败含未停售菜品DeletionNotAllowedException删除受限外键关联jsonJacksonObjectMapper自定义 Jackson 序列化器LocalDateTime/Long→String 等propertiesJwtProperties绑定sky.jwt.*配置密钥、TTL、token 名称AliOssProperties绑定sky.alioss.*配置endpoint、accessKey、bucketWeChatProperties绑定sky.wechat.*配置appid、secret、商户号resultResultT统一响应体{code, msg, data}PageResult分页结果{total, records}utilsJwtUtilcreateJWT / parseJWT基于 jjwt 0.9.1AliOssUtilupload / getFileUrl基于阿里云 OSS SDKWeChatPayUtil微信支付下单/退款/查询封装HttpClientUtil基于 HttpClient 的 HTTP 工具三、sky-pojo51 个类3 个包纯 POJO包数量职责entity11 个数据库表映射Employee/Category分类/Dish菜品/DishFlavor菜品口味/Setmeal套餐/SetmealDish套餐-菜品关系/Orders订单/OrderDetail订单明细/ShoppingCart购物车/UserC 端用户/AddressBook地址簿dto19 个Controller 入参EmployeeDTO新增员工、EmployeeLoginDTO登录、EmployeePageQueryDTO分页、CategoryDTO/CategoryPageQueryDTO、DishDTO/DishPageQueryDTO、SetmealDTO/SetmealPageQueryDTO、OrdersDTO下单/OrdersPageQueryDTO分页/OrdersSubmitDTO提交/OrdersPaymentDTO支付/OrdersConfirmDTO接单/OrdersRejectionDTO拒单/OrdersCancelDTO取消、ShoppingCartDTO、UserLoginDTOC 端微信登录、PasswordEditDTO、GoodsSalesDTO销量 Top10、DataOverViewQueryDTO数据看板vo21 个Controller 出参EmployeeLoginVO带 token、UserLoginVOC 端带 openid、DishVO含口味列表、SetmealVO含菜品列表、OrderVO含明细、OrderSubmitVO、OrderPaymentVO支付参数、OrderStatisticsVO各状态订单数量、OrderOverViewVO管理端今日订单概览、SetmealOverViewVO/DishOverViewVO起售停售概览、TurnoverReportVO/UserReportVO/OrderReportVO/SalesTop10ReportVO数据报表、DishItemVO按分类查菜品、BusinessDataVO工作台数据注意pojo 的类全部是数据载体没有任何业务逻辑没有注解、没有方法跟表结构/接口一一对应。四、sky-server全模块只 8 个文件sky-server/src/main/java/com/sky/ ├── SkyApplication.java # 启动类 ├── config/ │ └── WebMvcConfiguration.java # Web 配置拦截器、Knife4j、静态资源 ├── handler/ │ └── GlobalExceptionHandler.java # 全局异常处理 ├── interceptor/ │ └── JwtTokenAdminInterceptor.java # JWT 拦截器 ├── controller/admin/ │ └── EmployeeController.java # 员工 Controller仅 1 个 ├── service/ │ ├── EmployeeService.java # 员工 Service 接口 │ └── impl/ │ └── EmployeeServiceImpl.java # 员工 Service 实现仅 1 个 └── mapper/ └── EmployeeMapper.java # 员工 Mapper仅 1 个每个类真实职责类关键注解 / 配置实际做的事SkyApplicationSpringBootApplicationEnableTransactionManagement启动入口开启注解事务WebMvcConfigurationConfiguration继承WebMvcConfigurationSupport① 注册 JWT 拦截器拦截/admin/**放行/admin/employee/login② 配置 Knife4j 文档扫描com.sky.controller包访问/doc.html③ 映射 Swagger 静态资源JwtTokenAdminInterceptorComponent实现HandlerInterceptor从请求头拿token→JwtUtil.parseJWT解析 → 把员工 id 存到BaseContext的 ThreadLocal里失败返 401GlobalExceptionHandlerRestControllerAdviceExceptionHandler捕获所有BaseException子类 → 打日志 → 返回Result.error(msg)保证任何业务异常都包成统一响应体EmployeeControllerRestControllerRequestMapping(/admin/employee)3 个接口/login登录返 JWT token、/logout登出、POST /新增员工saveEmployeeService接口2 个方法签名login(EmployeeLoginDTO)、save(EmployeeDTO)EmployeeServiceImplService只有login写完了58 行查用户 → MD5 比对密码 → 校验账号状态。save方法是空的接口里声明了实现没写EmployeeMapperMapperXML 在resources/mapper/EmployeeMapper.xml当前只有 1 个方法Select注解方式按用户名查询五、目前项目情况业务entitydtovoControllerServiceMapper员工 Employee✅✅✅✅ 1 个✅ 1 个只完成 login✅ 1 个分类 Category✅✅—❌❌❌菜品 Dish / DishFlavor✅✅✅❌❌❌套餐 Setmeal / SetmealDish✅✅✅❌❌❌订单 Orders / OrderDetail✅✅✅❌❌❌购物车 ShoppingCart✅✅—❌❌❌C 端用户 User✅✅✅❌❌❌地址簿 AddressBook✅——❌❌❌报表营业额/用户/订单/SalesTop10—✅✅❌❌❌目前能跑通的接口只有/admin/employee/login、/admin/employee/logout需要编写分类/菜品/套餐的 CRUD、购物车、订单下单→支付→接单→拒单→催单、WebSocket 实时通知、阿里云 OSS 上传、Excel 报表、微信登录/支付、AOP 自动填充、切面日志、AOP Redis 缓存等目前entity/dto/vo 都已建好表只需写 Controller → Service → Mapper 即可