Kennem's Blog
  • 🏠主页
  • 🔍搜索
  • 📚文章
  • ⏱时间轴
  • 🔖标签
  • 🗂️分类
  • 🙋🏻‍♂️关于
主页 » 🧩 标签

JavaWeb项目-苍穹外卖

苍穹外卖前端开发(Day1)

苍穹外卖前端开发(Day1) node.js安装 配置全局下载包地址和缓存地址 npm config set prefix "E:x\nodejs\node_global" npm config set cache "E:\x\nodejs\node_cache" 最新的配置淘宝镜像的淘宝官方提供的方法 npm config set registry https://registry.npmmirror.com 安装Vue npm i @vue/cli -g 创建Vue项目 命令行创建(只能在cmd, 不能用powershell) vue create vue-demo-1 用网页的形式创建 vue ui Vue目录结构 node_modules:当前项目依赖的js包 assets:静态资源存放目录 components:公共组件存放目录 App.vue:项目的主组件,页面的入口文件 main.js:整个项目的入口文件 package.json:项目的配置信息、依赖包管理 vue.config.js:vue-cli配置文件 启动Vue项目工程 在Vue项目文件夹中: ...

2024-10-26 · 7 分钟 · 3134 字 · updated: 2024-10-26 · ShowGuan

苍穹外卖后端开发(Day12)

苍穹外卖后端开发(Day12) 工作台 名词解释: 营业额:已完成订单的总金额 有效订单:已完成订单的数量 订单完成率:有效订单数 / 总订单数 * 100% 平均客单价:营业额 / 有效订单数 新增用户:新增用户的数量 Apache POI Apache POI 是一个处理Microsoft Office 各种文件格式的开源项目。 ...

2024-10-24 · 3 分钟 · 1140 字 · updated: 2024-10-24 · ShowGuan

苍穹外卖后端开发(Day11)

苍穹外卖后端开发(Day11) Apache ECharts https://echarts.apache.org/zh/index.html 营业额统计 销量排名Top10 根据返回结果设计VO对象 SalesTop10ReportVO <select id="getSalesTop10" resultType="com.sky.dto.GoodsSalesDTO"> SELECT name, sum(od.number) number from order_detail od, orders o where od.order_id = o.id and o.status = 5 <if test="begin != null"> and o.order_time &gt; #{begin} </if> <if test="end != null"> and o.order_time &lt; #{end} </if> GROUP BY od.name ORDER BY number DESC LIMIT 10; </select>

2024-10-23 · 1 分钟 · 93 字 · updated: 2024-10-23 · ShowGuan

苍穹外卖后端开发(Day10)

苍穹外卖后端开发(Day10) Spring Task Spring Task 是 Spring 框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 cron 表达式 cron 表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间 ...

2024-10-21 · 2 分钟 · 799 字 · updated: 2024-10-21 · ShowGuan

苍穹外卖后端开发(Day7)

苍穹外卖后端开发(Day7) 缓存菜品 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问的压力随之增大。 实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 ...

2024-10-18 · 2 分钟 · 836 字 · updated: 2024-10-18 · ShowGuan

苍穹外卖后端开发(Day6)

苍穹外卖后端开发(Day6) HttpClient HttpClient是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。 ...

2024-10-17 · 3 分钟 · 1020 字 · updated: 2024-10-17 · ShowGuan

苍穹外卖后端开发(Day5)

苍穹外卖后端开发(Day5) Redis Redis 是一个基于内存的key-value结构数据库的 基于内存存储,读写性能高 适合存储热点数据(热点商品,资讯,新闻) 企业应用广泛 Redis安装和使用 安装Redis ...

2024-10-15 · 3 分钟 · 1409 字 · updated: 2024-10-15 · ShowGuan

苍穹外卖后端开发(Day3)

苍穹外卖后端开发(Day3) 菜品管理 公共字段自动填充 对于创建时间、创建人id,修改时间,修改人id等字段 重复性代码进行统一编写 自定义注解AutoFill,用于标识需要进行公共字段自动填充的方法 package com.sky.annotation; /** * 自定义注解,用于标识某个方法需要进行功能字段自动填充处理。 * 这个注解可以应用于方法上,用于指示在特定的数据库操作时 * 需要自动填充某些功能字段。 */ @Target(ElementType.METHOD) // 指定注解可以用于方法 @Retention(RetentionPolicy.RUNTIME) // 指定注解在运行时可用 public @interface AutoFill { /** * 数据库操作类型:用于指示自动填充的操作类型。 * 可选值包括 UPDATE 和 INSERT。 * * @return 操作类型 */ OperationType value(); } 自定义切面类AutoFillAspect, 统一拦截加入了AutoFill注解的方法,通过反射为公共字段赋值。 package com.sky.aspect; /** * 自定义切面, 实现公共字段自动填充 */ @Aspect @Component @Slf4j public class AutoFillAspect { /** * 定义切入点,匹配com.sky.mapper包下的所有方法,并且方法上需有@AutoFill注解 */ @Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)") public void autoFillPointCut() { } /** * 前置通知,在目标方法执行前进行公共字段赋值 * * @param joinPoint 连接点,表示被拦截的方法调用 */ @Before("autoFillPointCut()") public void autoFill(JoinPoint joinPoint) { log.info("开始进行公共字段自动填充..."); // 获取当前被拦截方法的签名(方法信息) MethodSignature signature = (MethodSignature) joinPoint.getSignature(); // 从方法签名中获取@AutoFill注解 AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class); // 获取操作类型(INSERT或UPDATE) OperationType operationType = autoFill.value(); // 获取目标方法的参数(假设第一个参数是实体对象) Object[] args = joinPoint.getArgs(); if (args == null || args.length == 0) { return; // 如果没有参数则直接返回 } // 获取实体对象(目标方法的第一个参数) Object entity = args[0]; // 获取当前时间和当前操作用户ID LocalDateTime now = LocalDateTime.now(); Long currentId = BaseContext.getCurrentId(); // 根据操作类型判断是INSERT还是UPDATE操作 if (operationType == OperationType.INSERT) { try { // 通过反射调用实体对象的set方法,赋值创建和更新时间、创建和更新用户 Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class); Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class); Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); // 调用方法进行赋值 setCreateTime.invoke(entity, now); setCreateUser.invoke(entity, currentId); setUpdateTime.invoke(entity, now); setUpdateUser.invoke(entity, currentId); } catch (Exception e) { e.printStackTrace(); // 捕获异常并打印 } } else if (operationType == OperationType.UPDATE) { try { // 通过反射调用实体对象的set方法,赋值更新时间和更新用户 Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); // 调用方法进行赋值 setUpdateTime.invoke(entity, now); setUpdateUser.invoke(entity, currentId); } catch (Exception e) { e.printStackTrace(); // 捕获异常并打印 } } } } 在Mapper的方法上加入AutoFill注解 ...

2024-10-14 · 5 分钟 · 2026 字 · updated: 2024-10-14 · ShowGuan

苍穹外卖后端开发(Day2)

苍穹外卖后端开发(Day2) 新增员工 管理端发出的请求, 统一使用/admin作为前缀 用户端发出的请求,统一使用/user作为前缀 代码开发 根据新增员工接口设计对应的DTO 注意 : 当前端提交的数据和实体类中对应的属性差别比较大时,建议使用DTO来封装数据 ...

2024-10-13 · 3 分钟 · 1241 字 · updated: 2024-10-13 · ShowGuan

苍穹外卖后端开发(Day1)

苍穹外卖后端开发(Day1) 软件开发流程 需求分析 : 需求规格说明说、产品原型 设计 : UI设计、 数据库设计、接口设计 编码 : 项目代码、单元测试 测试 : 测试用例、测试报告 上线运维 : 软件环境安装、配置 ...

2024-10-12 · 4 分钟 · 1528 字 · updated: 2024-10-12 · ShowGuan
© 2025 Kennem's Blog · Powered by Hugo & PaperMod
👤 Visitors: 👀 Views: