当前位置: 首页 > news >正文

扬州立扬计算机培训网站建设怎么样厦门网站建设门户

扬州立扬计算机培训网站建设怎么样,厦门网站建设门户,动态表情包在线制作网站,营销推广方案前言 写了很久#xff0c;终于可以完整运行项目了#xff0c;记录下这几天的心得体会回顾一下知识点 第一天、Git 分布式版本控制工具 一、Git概述 定义#xff1a;是分布式版本控制工具#xff0c;用于管理软件开发中的源代码文件#xff0c;像Java类、xml文件、html…前言 写了很久终于可以完整运行项目了记录下这几天的心得体会回顾一下知识点 第一天、Git 分布式版本控制工具 一、Git概述 定义是分布式版本控制工具用于管理软件开发中的源代码文件像Java类、xml文件、html页面等软件开发中应用广泛。仓库类型 本地仓库位于开发人员自己电脑上。远程仓库存在于远程服务器上可借助GitHub、码云、GitLab等代码托管服务搭建。 二、Git的下载与安装 下载地址https://git-scm.com/download下载后双击安装文件完成安装。安装成功标志在任意目录下点击鼠标右键出现“Git GUI Here”打开Git图形界面和“Git Bash Here”打开Git命令行菜单。 三、常用代码托管服务 GitHub面向开源及私有软件项目的托管平台只支持Git作为版本库格式托管。码云国内代码托管平台服务器在国内速度相对较快。GitLab用于仓库管理系统的开源项目基于Git搭建的web服务。BitBucket源代码托管网站采用Mercurial和Git作为分布式版本控制系统有商业计划和免费账户。 四、Git常用命令 全局设置 设置用户名称和email地址非注册码云账号时用的用户名和邮箱可任意设置 git config --global user.name itcastgit config --global user.email helloitcast.cn 查看配置信息git config --list 获取Git仓库 本地初始化在指定目录下执行git init命令创建成功后会出现隐藏的.git文件夹。从远程仓库克隆使用git clone 远程仓库地址命令将远程仓库拷贝到本地。 工作区、暂存区、版本库相关概念 版本库.git隐藏文件夹存储配置、日志、文件版本等信息。工作区包含.git文件夹的目录存放开发代码。暂存区.git文件夹中的index文件临时保存修改文件。 工作区文件状态分为untracked未跟踪、tracked已跟踪含Unmodified未修改、Modified已修改、Staged已暂存状态状态随Git命令执行而变化。本地仓库操作命令 git status查看文件状态。git add将文件修改加入暂存区如git add fileName。git reset取消暂存git reset 文件名或切换到指定版本git reset --hard 版本号。git commit将暂存区文件修改提交到版本库如git commit -m msg 文件名-m用于添加提交说明可用通配符一次提交多个文件。git log查看提交日志。 远程仓库操作命令 git remote查看远程仓库加-v参数查看详细信息。git remote add添加远程仓库格式为git remote add 简称 远程仓库地址一个本地仓库可关联多个远程仓库。git clone从远程仓库克隆数据到本地。git push将本地仓库内容推送到远程仓库格式为git push 远程仓库简称 分支名称。git pull从远程仓库获取最新版本并合并到本地仓库格式为git pull 远程仓库简称 分支名称若本地非克隆仓库拉取文件报错可加--allow-unrelated-histories参数解决。 分支操作命令 git branch查看分支git branch列出本地分支git branch -r列出远程分支git branch -a列出所有本地和远程分支。git branch [name]创建分支。git checkout [name]切换分支。git push [shortName] [name]推送至远程仓库分支。git merge [name]合并分支。 标签操作命令 git tag查看标签。git tag [name]创建标签。git push [shortName] [name]将标签推送至远程仓库。git checkout -b [branch] [name]检出标签新建分支指向标签。 五、在IDEA中使用Git 配置Git需提前安装好Git若安装在默认目录C:\Program Files\GitIDEA可直接使用否则需手动配置Git安装目录下的git.exe可执行文件路径。获取Git仓库 本地初始化仓库通过菜单【VCS】—【Import into Version Control】—【Create Git Repository】操作选择项目根目录完成初始化会出现.git隐藏目录工具栏出现相关操作图标。从远程仓库克隆在IDEA开始窗口点击【Get from Version Control】输入远程仓库URL地址和本地仓库存放目录点击【Clone】按钮克隆。 Git忽略文件通过.gitignore文件指定工作区中不需要Git管理的文件如编译后的.class文件、开发工具配置文件等文件名固定添加到忽略列表的文件后续Git会忽略。本地仓库操作在IDEA中可进行将文件加入暂存区操作类似命令git add、将暂存区文件提交到版本库简化操作可直接提交有提交单个文件、多个文件等不同操作方式工具栏有快捷按钮、查看日志可查看整个项目或某个文件的提交日志等操作。远程仓库操作可查看远程仓库对应git remote命令、添加远程仓库对应git remote add命令、推送至远程仓库对应git push命令工具栏有提交快捷按钮可同时完成提交和推送、从远程仓库拉取对应git pull命令工具栏有快捷按钮。分支操作可查看分支对应git branch命令状态栏有快捷按钮、创建分支输入分支名创建、切换分支、将分支推送到远程仓库对应git push命令、合并分支对应git merge命令等操作。 第二天、Swagger理解、开发环境搭建 以下是“苍穹外卖-day01”课程知识点的快速总结 一、软件开发整体介绍 软件开发流程 需求分析编写需求规格说明书用Word描述项目各部分如系统定义、功能规格等和产品原型以网页形式展示页面效果、交互逻辑等。设计包含UI设计页面及交互逻辑设计、数据库设计确定数据库、表结构及关系等、接口设计分析原型图确定接口相关参数及路径、请求方式。编码开发工程师进行项目代码编写并完成单元测试。测试测试人员在测试环境对部署好的项目进行功能测试出具测试报告。上线运维运维人员准备服务器环境将项目部署到服务器上线运行。 角色分工 项目经理负责整个项目进行任务分配和把控进度贯穿全阶段。产品经理在需求分析阶段进行需求调研输出需求调研文档、产品原型。UI设计师在设计阶段根据产品原型输出界面效果图。架构师负责项目整体架构设计、技术选型等设计相关工作。开发工程师在编码阶段实现项目功能代码。测试工程师针对项目编写测试用例、输出测试报告负责测试阶段工作。运维工程师在上线运维阶段搭建软件环境、部署项目上线。 软件环境 开发环境软件开发人员开发阶段使用外部用户一般无法访问如开发中使用的本地或服务器中的MySQL等软件项目测试、上线后不再使用。测试环境开发人员完成功能模块开发与单元测试后将项目部署至此供测试人员使用用于项目测试外部用户无法访问。生产环境项目开发、测试通过后上线部署的环境正式对外提供服务可位于机房或云服务器等线上环境。 二、苍穹外卖项目介绍 项目介绍专为餐饮企业定制包含系统管理后台供内部员工管理餐厅各类信息、统计数据、来单语音播报等和小程序端供消费者点餐、下单、支付等两部分。产品原型由产品经理设计展示项目业务功能非最终页面效果分为管理端原型员工登录、管理等功能展示和用户端原型微信登录、点餐、支付等功能展示。技术选型 用户层管理后台前端用H5、Vue.js、ElementUI、apache echarts等移动端用微信小程序。网关层Nginx作Http服务器有反向代理、负载均衡作用可部署静态资源、提高访问性能。应用层SpringBoot快速构建项目SpringMVC与Spring无缝集成还有Spring Task、httpclient、Spring Cache、JWT、阿里云OSS、Swagger、POI、WebSocket等用于不同功能实现。数据层核心业务数据存MySQL用Redis做缓存Mybatis做持久层开发搭配pagehelper分页插件以及spring data redis简化Redis操作。工具git管理代码版本maven构建项目junit进行单元测试postman测试接口。 三、开发环境搭建 前端环境搭建基于nginx将前端运行环境的nginx移到非中文目录启动nginx双击nginx.exe访问端口80即可访问前端页面。后端环境搭建 熟悉项目结构后端基于maven分模块开发有sky-take-out父工程管理依赖、聚合模块、sky-common存放公共类、sky-pojo存放实体、DTO、VO等、sky-server存放配置、Controller、Service、Mapper等模块各模块内有不同功能的包。Git版本控制创建本地仓库再在码云等平台创建远程仓库将本地文件提交到本地仓库后添加远程仓库地址推送文件至远程仓库。数据库环境搭建找到sky.sql文件直接打开执行创建数据库及11张表如员工表、分类表等了解各表大致存储数据可参考《数据库设计文档》了解详细结构。前后端联调后端初始工程已实现登录功能介绍了从Controller层、Service层到Mapper层的代码逻辑可通过断点调试跟踪执行过程。nginx反向代理和负载均衡 反向代理将前端动态请求由nginx转发到后端服务器可提高访问速度、进行负载均衡、保证后端服务安全配置通过如location /api/ { proxy_pass http://localhost:8080/admin/; }等指令实现。负载均衡基于反向代理实现把请求按指定策略分配给集群中服务器策略有轮询、weight权重、ip_hash、least_conn、url_hash、fair等各有对应配置方式。 完善登录功能针对员工表密码明文存储安全性低的问题采用MD5加密方式修改数据库中密码为密文同时在Java代码比对密码时先对前端提交密码加密后再比对。 四、导入接口文档 前后端分离开发流程先定义接口确定路径、请求方式、参数等前端和后端并行开发与自测然后前后端连调测试最后提交给测试人员最终测试。操作步骤从资料中找到项目接口文件在YApi平台http://yapi.feisudu.com/ 创建项目后导入接口文件管理端和用户端分别导入对应json文件。 五、Swagger 介绍是规范完整框架利于前后端分离开发、自动生成接口文档、进行功能测试。Springfox基于Spring整合Swaggerknife4j是集成Swagger生成Api文档的增强解决方案目前常用knife4j。使用步骤 导入knife4j的maven坐标到pom.xml。在配置类中加入knife4j相关配置如定义Docket设置ApiInfo等。设置静态资源映射确保接口文档页面能访问。通过访问http://ip:port/doc.html路径进行接口文档访问与测试。 常用注解 Api用在类如Controller上说明类。ApiModel用在类如entity、DTO、VO上。ApiModelProperty用在属性上描述属性信息。ApiOperation用在方法上说明方法用途、作用使用这些注解可生成可读性更好的接口文档。 第三天、员工查询分页等业务逻辑 本文档围绕苍穹外卖项目展开主要介绍了项目开发中员工管理和菜品分类管理相关功能的实现包括需求分析与设计、代码开发、功能测试以及代码提交等内容具体知识点如下 员工管理功能 新增员工 需求分析与设计依据产品原型明确功能需求设计新增员工接口及对应的employee表结构规定账号、手机号、身份证号等信息的格式及默认值等要求。代码开发涉及DTO类设计、Controller层、Service层接口与实现类、Mapper层的代码编写实现数据的接收、业务逻辑处理及数据库插入操作。功能测试通过接口文档测试和前后端联调测试两种方式进行解决了如JWT令牌校验失败等测试中出现的问题。代码完善针对用户名重复、创建人及修改人id固定等问题利用全局异常处理器和ThreadLocal机制进行优化处理。代码提交按流程完成代码提交操作。 员工分页查询 需求分析与设计根据产品原型确定分页展示员工信息及按姓名查询的业务规则明确接口相关要求。代码开发设计DTO类封装请求参数统一用PageResult封装分页查询结果在各层级编写代码实现分页查询功能利用PageHelper插件简化开发。功能测试采用接口文档测试和前后端联调测试方式针对操作时间字段显示格式问题进行代码完善。代码提交完成相应提交操作。 启用禁用员工账号 需求分析与设计依照产品原型明确账号启用禁用的操作规则及对应接口设计要求。代码开发在Controller层、Service层、Mapper层编写代码实现相关业务逻辑及数据库操作。功能测试运用接口文档测试和前后端联调测试进行验证。代码提交按常规步骤提交代码。 编辑员工 需求分析与设计基于产品原型梳理出根据id查询员工信息和编辑员工信息两个接口需求。代码开发分别在各层级编写代码实现员工信息回显及修改功能部分功能复用已有代码。功能测试通过接口文档测试和前后端联调测试检验功能实现情况。代码提交完成代码提交流程。 菜品分类管理功能 需求分析与设计从产品原型出发分析新增、分页查询、删除、修改、启用禁用、按类型查询菜品分类等功能需求确定接口设计及category表结构。代码导入按照mapper、service、controller顺序导入资料中提供的分类管理模块功能代码并进行编译。功能测试重启服务后对菜品分类管理的各项功能如分页查询、分类类型查询、启用禁用、修改、新增、删除等进行测试验证。代码提交按照常规流程完成代码提交。 第四天、菜品管理板块 一、公共字段自动填充 问题分析 系统中很多表存在公共字段如创建时间、创建人、修改时间、修改人在新增或编辑数据时需重复赋值代码冗余繁琐。 实现思路 自定义注解AutoFill标识需自动填充公共字段的方法。自定义切面AutoFillAspect拦截加AutoFill注解的方法通过反射为公共字段赋值。在Mapper方法上加AutoFill注解。 技术点运用 枚举定义OperationType枚举UPDATE、INSERT表示数据库操作类型。注解创建AutoFill注解指定作用于方法运行时有效关联OperationType枚举值。AOP通过Aspect、Component定义切面类设置切入点autoFillPointCut在前置通知autoFill方法中实现公共字段赋值逻辑。反射在autoFill方法中利用反射获取被拦截方法的参数实体对象根据操作类型为公共字段赋值。 代码开发要点 自定义注解AutoFill在com.sky.annotation包中关联OperationType枚举。切面AutoFillAspect在com.sky.aspect包中切入点表达式execution(* com.sky.mapper.*.*(..)) annotation(com.sky.annotation.AutoFill)在前置通知中获取方法签名、注解、操作类型以及方法参数实体对象然后根据操作类型利用反射为实体对象的公共字段赋值。在Mapper接口方法如CategoryMapper、EmployeeMapper的新增和修改方法上添加AutoFill注解并注释掉业务层中原来为公共字段赋值的代码。 功能测试与提交 以新增菜品分类为例测试查看控制台输出的 SQL 和数据库表中数据确认公共字段自动填充成功。代码提交时注意可能出现的提示按步骤推送成功。 二、新增菜品 需求分析与设计 产品原型后台可管理菜品信息新增菜品时需选择所属分类并上传图片菜品名称唯一可选择口味对应一张图片。接口设计包括根据类型查询分类已完成、文件上传、新增菜品。明确各接口请求方式、路径、参数和返回值。表设计涉及菜品表dish包含菜品名称、分类 ID、价格、图片、描述、状态、创建时间、更新时间、创建人、更新人等字段和菜品口味表dish_flavor包含菜品 ID、口味名称、口味值等字段。 代码开发步骤 文件上传实现 定义OSS相关配置在sky-server模块的application-dev.yml和application.yml中设置alioss的endpoint、access-key-id、access-key-secret、bucket-name等属性。读取OSS配置在sky-common模块的AliOssProperties类中通过ConfigurationProperties读取配置。生成OSS工具类对象在sky-server模块的OssConfiguration类中创建AliOssUtil对象。定义文件上传接口在sky-server模块的CommonController中创建upload方法接收MultipartFile类型的文件处理文件名、生成新文件名利用AliOssUtil上传文件并返回文件路径。 新增菜品实现 设计DTO类DishDTO在sky-pojo模块中包含菜品基本信息和口味列表。Controller层在sky-server模块的DishController中创建save方法接收DishDTO调用DishService的saveWithFlavor方法。Service层接口DishService中定义saveWithFlavor方法。Service层实现类DishServiceImpl中实现saveWithFlavor方法先将DishDTO属性复制到Dish实体插入菜品表获取主键再处理口味数据插入口味表。Mapper层DishMapper中添加insert方法并在DishMapper.xml中编写插入菜品数据的 SQLDishFlavorMapper中添加insertBatch方法并在DishFlavorMapper.xml中编写批量插入口味数据的 SQL。 功能测试与提交 进入菜品管理新建菜品页面填写信息保存后在数据库表中查看数据确认新增菜品功能成功。代码提交按常规步骤操作注意提交过程中的提示信息。 三、菜品分页查询 需求分析和设计 产品原型菜品数据多以分页展示展示菜品基本信息、图片需下载和分类名称需关联查询。业务规则按页码展示每页 10 条可根据菜品名称、分类、状态查询。接口设计设计菜品分页查询接口明确请求方式、路径、参数和返回值。 代码开发流程 设计DTO类DishPageQueryDTO在sky-pojo模块中包含页码、页大小、菜品名称、分类 ID、状态等属性。设计VO类DishVO在sky-pojo模块中包含菜品基本信息、分类名称、口味列表等属性。Controller层在DishController中创建page方法接收DishPageQueryDTO调用DishService的pageQuery方法并返回结果。Service层接口DishService中扩展pageQuery方法。Service层实现类DishServiceImpl中实现pageQuery方法使用PageHelper进行分页调用DishMapper的pageQuery方法并封装PageResult返回。Mapper层DishMapper接口中声明pageQuery方法在DishMapper.xml中编写 SQL关联dish表和category表根据条件查询并按创建时间倒序排列。 功能测试与提交 可通过接口文档测试启动服务使用admin用户登录获取token在Swagger中访问菜品分页查询接口发送请求和前后端联调测试启动nginx访问http://localhost点击菜品管理确认数据成功查出。代码提交步骤与之前类似注意处理提交过程中的问题。 四、删除菜品 需求分析和设计 产品原型菜品列表有删除操作可单个或批量删除。业务规则起售中菜品不能删除被套餐关联的菜品不能删除删除菜品时关联口味数据也删除。接口设计设计菜品批量删除接口ids参数可包含多个菜品 ID。表设计涉及dish表、dish_flavor表和setmeal_dish表菜品与套餐关联中间表。 代码开发实现 Controller层在DishController中创建delete方法接收菜品 ID 列表调用DishService的deleteBatch方法。Service层接口DishService中声明deleteBatch方法。Service层实现类DishServiceImpl中实现deleteBatch方法先判断菜品是否起售中或被套餐关联若可删除则先删除菜品表数据再删除关联口味数据。Mapper层DishMapper中声明getById方法并编写 SQL 查询菜品SetmealDishMapper中声明getSetmealIdsByDishIds方法并在SetmealDishMapper.xml中编写 SQL 根据菜品 ID 查询套餐 IDDishMapper中声明deleteById方法并编写 SQL 删除菜品数据DishFlavorMapper中声明deleteByDishId方法并编写 SQL 删除关联口味数据。 功能测试与提交 通过前后端联调测试在菜品列表页面进行删除操作包括删除正常菜品和起售中菜品检查数据库表中数据是否正确删除确认功能是否符合业务规则。代码提交按常规流程操作留意提交时的提示信息。 五、修改菜品 需求分析和设计 产品原型菜品管理列表点击修改按钮进入修改页面回显信息并修改保存。接口设计涉及根据 ID 查询菜品和修改菜品两个接口明确各接口请求方式、路径、参数和返回值。 代码开发步骤 根据 ID 查询菜品实现 Controller层在DishController中创建getById方法接收菜品 ID调用DishService的getByIdWithFlavor方法并返回结果。Service层接口DishService中声明getByIdWithFlavor方法。Service层实现类DishServiceImpl中实现getByIdWithFlavor方法先查询菜品数据再查询关联口味数据封装到DishVO返回。Mapper层DishFlavorMapper中声明getByDishId方法并编写 SQL 根据菜品 ID 查询口味数据。 修改菜品实现 Controller层在DishController中创建update方法接收DishDTO调用DishService的updateWithFlavor方法。Service层接口DishService中声明updateWithFlavor方法。Service层实现类DishServiceImpl中实现updateWithFlavor方法先更新菜品表基本信息再删除原口味数据最后重新插入口味数据。Mapper层DishMapper中声明update方法并在DishMapper.xml中编写动态更新菜品数据的 SQL关联AutoFill注解实现公共字段自动更新。 功能测试与提交 通过前后端联调测试在菜品列表页面选择菜品修改检查回显和修改保存功能是否正常。代码提交同常规操作注意提交过程中的细节。 第五天、Redis的应用简单理解 Redis入门 简介 Redis是基于内存的key-value结构数据库是存储中间件具有读写性能高、适合存储热点数据等特点属于非关系型数据库NoSql是关系型数据库的补充。存储的value类型丰富被称为结构化的NoSql数据库官方给出的QPS能达100000。 下载与安装 下载分为Windows版下载地址https://github.com/microsoftarchive/redis/releases 和Linux版下载地址https://download.redis.io/releases/ 资料中也提供了安装包。安装 Windows中安装属于绿色软件解压即可使用解压后有特定目录结构。Linux中安装简单了解需上传安装包后解压安装依赖环境gcc进入对应目录编译、安装安装后有如Redis服务启动脚本、客户端脚本、配置文件等重点文件。 服务启动与停止 服务启动命令以Windows版为例使用“redis-server.exe redis.windows.conf”命令启动默认端口号为6379按Ctrl C可停止服务。客户端连接命令“redis-cli.exe”默认连接本地Redis服务及6379端口也可通过指定参数如-h、-p、-a连接特定的服务、端口、设置密码等。修改Redis配置文件设置密码后需重启服务连接时需带上密码若有在某些情况下可省略部分参数。Redis客户端图形工具默认客户端工具界面和操作不太友好引入图形工具安装后可新建连接并进行操作。 Redis数据类型 Redis中key是字符串类型value有5种常用数据类型分别是 字符串string普通字符串是最简单的数据类型。哈希hash类似Java中的HashMap结构是string类型的field和value的映射表适合存储对象。列表list按插入顺序排序可包含重复元素类似Java中的LinkedList。集合set无序集合无重复元素类似Java中的HashSet。有序集合sorted set/zset集合中元素关联分数根据分数升序排序无重复元素。 Redis常用命令 字符串操作命令如“SET”设置指定key的值“GET”获取指定key的值“SETEX”设置值并设过期时间“SETNX”在key不存在时设置值等。哈希操作命令像“HSET”设置哈希表中字段的值“HGET”获取指定字段的值“HDEL”删除指定字段“HKEYS”获取所有字段“HVALS”获取所有值等。列表操作命令例如“LPUSH”将值插入列表头部“LRANGE”获取列表指定范围元素“RPOP”移除并获取最后一个元素“LLEN”获取列表长度“BRPOP”移出并获取最后元素可阻塞等待等。集合操作命令包含“SADD”向集合添加成员“SMEMBERS”返回集合所有成员“SCARD”获取集合成员数“SINTER”返回交集“SUNION”返回并集“SREM”移除集合成员等。有序集合操作命令有“ZADD”添加成员“ZRANGE”通过索引区间返回成员可带分数“ZINCRBY”对成员分数增加增量“ZREM”移除成员等。通用命令不分数据类型如“KEYS”查找符合模式的key“EXISTS”检查key是否存在“TYPE”返回key储存值的类型“DEL”删除key“rename”重命名“ping”测试连接“expire”设置key存活时间“ttl”返回key剩余生存时间等。 在Java中操作Redis Redis的Java客户端常用的有Jedis、Lettuce、Spring Data Redis等重点学习Spring Data RedisSpring Boot项目中提供对应的Starter方便使用。Spring Data Redis使用方式 环境搭建 导入maven坐标在项目中添加“spring-boot-starter-data-redis”依赖。配置Redis数据源在配置文件如application-dev.yml、application.yml中指定Redis的主机、端口、密码、使用的数据库等信息。编写配置类创建RedisTemplate对象配置类中创建RedisTemplate设置连接工厂对象及key的序列化器将默认的修改为StringRedisSerializer虽然Spring Boot会自动装配但修改序列化器能让存入Redis的数据更符合预期。通过RedisTemplate对象操作Redis注入RedisTemplate后可获取对应不同数据类型操作的接口对象如ValueOperations字符串操作、HashOperations哈希操作等进而操作不同类型数据。 操作常见类型数据通过编写具体的测试方法利用对应的操作接口对象实现对字符串、哈希、列表、集合、有序集合类型数据以及通用命令的操作示例如对字符串的存取值、设置过期等操作对哈希类型的增删改查操作等。 店铺营业状态设置 需求分析和设计 产品原型后台可设置餐厅营业状态营业中/打烊中不同状态决定用户能否在小程序下单点击营业状态按钮可更改状态。接口设计包含设置营业状态、管理端查询营业状态、用户端查询营业状态三个接口虽查询的营业状态一致但因管理端和用户端请求前缀不同分为两个接口实现。营业状态存储方式基于Redis的字符串存储约定1表示营业0表示打烊。 代码开发 设置营业状态在“sky-server”模块创建“ShopController”类编写“setStatus”方法通过注入的RedisTemplate对象将营业状态值存入Redis。管理端查询营业状态在“ShopController”类中编写“getStatus”方法从Redis中获取营业状态值返回。用户端查询营业状态在“com.sky.controller.user”包下创建“ShopController”类同样编写“getStatus”方法从Redis获取并返回营业状态值。 功能测试 接口文档测试启动服务访问接口文档登录获取token后分别进行设置营业状态、管理端和用户端查询营业状态的操作查看控制台日志及Redis中数据验证功能。接口分组展示通过修改配置类如“WebMvcConfiguration.java”分别扫描管理端和用户端接口所在包生成不同分组的接口文档方便区分。前后端联调测试启动nginx访问项目进入后台操作营业状态设置查看状态变化验证功能。 第六天、微信小程序开发 HttpClient 介绍 是Apache Jakarta Common下的子项目用于提供支持HTTP协议的客户端编程工具包能发送HTTP请求及接收响应数据支持HTTP协议最新版本与建议。有诸多应用场景如扫描支付、查看地图等功能实现中应用程序需访问对应服务发送HTTP请求并接收响应就可借助HttpClient来完成。有HttpClient、HttpClients、CloseableHttpClient、HttpGet、HttpPost等核心API使用时需按创建HttpClient对象、创建Http请求对象、调用execute方法发送请求的步骤操作。通过maven坐标“org.apache.httpcomponents:httpclient:4.5.13”引入依赖不过项目中若引入了特定依赖如aliyun-sdk-oss其底层已包含HttpClient相关依赖可选择不单独导入。 入门案例 GET方式请求在Java程序中先创建HttpClient对象如使用HttpClients.createDefault()再创建HttpGet请求对象指定请求的URL接着调用HttpClient的execute方法发送请求获取响应结果后解析最后关闭相关资源。示例中发送请求到“http://localhost:8080/user/shop/status”并输出服务端返回状态码与数据。POST方式请求同样先创建HttpClient对象然后创建HttpPost请求对象对于携带参数的POST请求需将参数封装为请求体对象如StringEntity并设置到请求对象中指定编码方式、数据格式等后续发送请求、解析响应结果以及关闭资源的步骤与GET请求类似。示例中发送请求到“http://localhost:8080/admin/employee/login”并输出响应码与响应数据。 微信小程序开发 介绍是一种可在微信内便捷获取与传播、体验出色的开放能力不同注册主体个人、企业、政府、媒体等开发权限有别比如个人身份注册小程序无法开通支付权限。微信官方提供了开发文档、开发者工具、设计指南以及体验DEMO等帮助开发者开发开发完上线也有详细接入流程。准备工作 注册小程序通过指定注册地址https://mp.weixin.qq.com/wxopen/waregister?actionstep1 进行注册时要选择合适主体。完善小程序信息登录小程序后台https://mp.weixin.qq.com/ 完善信息、类目等并查看小程序的AppID。下载开发者工具资料中若已提供则无需下载熟悉下载步骤即可下载地址为https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html 使用时需扫描登录、创建小程序项目还可设置不校验合法域名开发阶段若不勾选请求发送到后端服务器可能失败。 入门案例 小程序目录结构主体部分含app.js存放逻辑代码、app.json配置文件存放公共配置、app.wxss存放公共样式表非必须每个页面又由js文件存放业务逻辑代码、wxml文件存放页面结构类似HTML页面、json文件存放页面相关配置非必须、wxss文件存放页面样式表类似CSS文件组成。编写和编译小程序在对应文件如index.wxml编写页面布局index.js编写业务逻辑代码编写代码后点击编译按钮运行查看效果运行时若涉及请求后端服务如发送请求到“http://localhost:8080/user/shop/status”需先启动后台项目同时要设置不校验合法域名以防请求失败。发布小程序代码开发完点击上传按钮指定版本号上传到微信服务器此时为开发版本还需进到微信公众平台的版本管理页面提交审核变为审核版本审核通过后发布成线上版本这样微信用户就能搜索使用该小程序了。 微信登录 导入小程序代码因小程序开发偏前端后端开发为主时可直接导入已提供的小程序代码到微信开发者工具使用导入时填写自己的AppID还需根据实际情况修改后端服务的ip地址和端口号修改配置文件中对应项。微信登录流程 小程序端先调用wx.login()获取code授权码每次获取只能使用一次再调用wx.request()携带code请求开发者服务器。开发者服务端通过HttpClient向微信接口服务发送请求携带appId、appsecret、code三个参数接收返回的session_key、opendId微信用户唯一标识等数据后自定义登录态生成令牌token和openid等返回给小程序端方便后续请求身份校验。小程序端收到后存储后续发起业务请求时携带token开发者服务端收到请求后通过token解析登录用户id进行身份校验校验通过处理业务逻辑并返回业务数据。可使用Postman按流程进行测试。 需求分析和设计 产品原型用户进入小程序需微信授权登录才能点餐登录要获取用户昵称、头像等信息新用户首次使用自动完成注册存到数据库。接口设计小程序端获取授权码后发给后端后端请求微信接口服务最终返回openid和token等数据设计出接口的请求参数如传入用户登录相关的code和返回数据包含用户id、openid、token等请求路径为/user/user/login。表设计用户首次使用小程序自动注册时用户信息存储到user表表中包含id、openid、name、phone等字段其中手机号字段获取权限因小程序注册主体不同而有差异个人注册小程序通常拿不到微信用户手机号。 代码开发 定义相关配置在配置文件如application-dev.yml、application.yml中配置微信登录所需的appid、secret以及为微信用户生成jwt令牌时用到的相关配置项如签名加密秘钥、过期时间、令牌名称等。DTO设计根据传入参数设计UserLoginDTO类包含如code等属性用于接收小程序端传入的登录相关数据。VO设计根据返回数据设计UserLoginVO类包含id、openid、token等属性用于返回给小程序端登录相关结果数据。Controller层在UserController中创建login方法接收UserLoginDTO参数先调用Service层的wxLogin方法实现微信登录再为微信用户生成jwt令牌最后构建UserLoginVO对象返回给小程序端。Service层接口与实现类UserService接口定义wxLogin方法UserServiceImpl实现类中wxLogin方法先调用getOpenid方法获取微信用户openid判断是否为空为空则登录失败抛异常再判断用户是否新用户新用户自动注册插入数据库getOpenid方法通过HttpClientUtil向微信接口服务发送请求获取openid。Mapper层UserMapper接口定义根据openid查询用户、插入用户数据的方法对应的UserMapper.xml映射文件实现插入用户数据的SQL语句。编写拦截器编写JwtTokenUserInterceptor拦截器用于拦截用户端请求进行jwt校验从请求头获取令牌并校验校验通过设置当前用户id到上下文校验不通过响应401状态码在WebMvcConfiguration配置类中注册拦截器指定拦截路径和排除的路径如登录接口、查询店铺营业状态接口不拦截。 功能测试重新编译小程序进行登录可获取到openid和token数据查看后台日志以及数据库user表验证功能首次登录会自动注册新用户到表中。 导入商品浏览功能代码 需求分析和设计 产品原型用户登录成功进入首页按分类展示菜品和套餐菜品根据是否设置口味信息展示不同按钮同时有菜品列表、口味、套餐列表、套餐详情等不同效果图展示相应展示要求。接口设计先粗粒度设计包含查询分类、根据分类id查询菜品、根据分类id查询套餐、根据套餐id查询包含的菜品这4个接口然后细粒度分析明确各接口的请求方式、请求路径、传入参数和返回值。 代码导入按mapper、service、controller顺序导入资料中的商品浏览功能代码到sky-server模块中。 Mapper层在SetmealMapper.java添加查询套餐、根据套餐id查询菜品选项的方法创建SetmealMapper.xml文件实现动态条件查询套餐的SQL语句在DishService.java添加条件查询菜品和口味的方法定义在DishServiceImpl.java实现该方法查询菜品及对应的口味信息。Service层创建SetmealService.java接口定义条件查询、根据id查询菜品选项等方法SetmealServiceImpl.java实现类实现相应业务逻辑在DishService相关类中完善条件查询菜品和口味的方法定义与实现。Controller层分别创建DishController.java、CategoryController.java、SetmealController.java在各控制器类中编写对应接口方法如根据分类id查询菜品、查询分类、根据分类id查询套餐及根据套餐id查询菜品列表等调用Service层方法处理业务并返回结果。 功能测试重启服务器、重新编译小程序微信登录进入首页后测试菜品和套餐分类查询、具体分类下菜品查询、菜品口味查询等功能是否正常展示。代码提交按常规操作流程进行代码提交。 第七天、缓存菜品、购物车功能的实现 缓存菜品 问题说明用户端小程序展示菜品数据依赖查询数据库访问量较大时会增大数据库访问压力导致系统响应慢、用户体验差。实现思路利用Redis缓存菜品数据减少数据库查询缓存逻辑为每个分类下的菜品保存一份缓存数据且数据库中菜品数据变更时清理对应缓存数据。代码开发 用户端接口修改在DishController的list方法中先从Redis查询菜品数据若存在则直接返回若不存在则查询数据库将结果存入Redis后再返回。管理端接口优化在管理端DishController中添加cleanCache方法用于清理缓存数据然后在新增菜品、批量删除菜品、修改菜品、菜品起售停售等相关方法中调用cleanCache方法保证数据库与Redis数据一致性。 功能测试可通过查看控制台sql、前后端联调、查看Redis缓存数据等方式测试。例如首次查询菜品分类时从数据库查询并缓存到Redis再次查询相同分类直接从Redis获取修改菜品数据后能清空对应缓存保证下次访问时重新从数据库查询并更新缓存数据。代码提交按照常规步骤提交代码与其他功能代码提交后续操作类似。 缓存套餐 Spring Cache介绍 概述是实现基于注解的缓存功能的框架提供了抽象层底层可切换不同缓存实现如EHCache、Caffeine、Redis等。常用注解 EnableCaching开启缓存注解功能加在启动类上。Cacheable方法执行前先查缓存有无数据有则直接返回无则调用方法并将返回值存入缓存。CachePut将方法的返回值放入缓存。CacheEvict从缓存中删除一条或多条数据。 入门案例展示了在不同场景下各注解的使用如在保存用户信息的方法上加CachePut将数据存入缓存在查询用户信息的方法上加Cacheable实现先查缓存无数据再查数据库并缓存结果在删除用户信息的方法上加CacheEvict清理指定缓存。 实现思路导入Spring Cache和Redis相关maven坐标在启动类加EnableCaching注解开启缓存功能在用户端接口SetmealController的list方法上加Cacheable注解缓存套餐数据在管理端接口SetmealController的相关修改、删除、起售停售等方法上加CacheEvict注解清理缓存。代码开发按照实现思路在项目中添加相应依赖、注解等代码实现缓存套餐功能。功能测试通过前后端联调并观察redis中缓存的套餐数据来测试与缓存菜品功能测试方法类似。代码提交按照既定流程提交代码与其他功能代码提交后续操作一样。 添加购物车 需求分析和设计 产品原型用户可将菜品设置口味信息的需选规格后或套餐添加到购物车购物车中能修改商品数量、清空购物车。接口设计设计添加购物车接口传入参数可能是菜品id或套餐id。表设计购物车数据存于shopping_cart表表中记录用户id、菜品或套餐相关id、口味、数量、单价、创建时间等信息同一商品选多份只需更新数量字段。 代码开发 DTO设计根据接口参数设计ShoppingCartDTO类包含菜品id、套餐id、菜品口味等属性。各层代码实现 Controller层创建ShoppingCartController其中add方法接收ShoppingCartDTO参数调用Service层的addShoppingCart方法后续实现添加购物车。Service层接口与实现类ShoppingCartService接口定义addShoppingCart方法ShoppingCartServiceImpl实现类中该方法先判断商品是否已在购物车若已存在则更新数量不存在则根据是菜品还是套餐插入相应数据到购物车。Mapper层创建ShoppingCartMapper接口及对应的ShoppingCartMapper.xml定义条件查询、更新数量、插入数据等方法及对应的SQL语句。 功能测试进入小程序添加菜品到购物车通过查询数据库因暂未实现查看购物车功能查看购物车数据前后端联调时可通过断点查看运行步骤。代码提交按常规操作提交代码后续步骤与其他功能代码提交相同。 查看购物车 需求分析和设计产品原型体现用户添加完商品后可进入购物车查看菜品和套餐接口设计明确了查看购物车接口相关的请求、返回信息。代码开发 Controller层在ShoppingCartController中创建list方法调用Service层的showShoppingCart方法后续实现并返回结果。Service层接口与实现类ShoppingCartService接口声明showShoppingCart方法ShoppingCartServiceImpl实现类中该方法通过查询数据库获取当前用户的购物车数据并返回。 功能测试进入小程序会发起查看购物车请求点击购物车图标能看到购物车内容则测试成功。代码提交按正常流程提交代码与其他功能代码提交后续步骤一致。 清空购物车 需求分析和设计产品原型展示点击清空按钮可清空购物车所有数据接口设计明确了清空购物车接口相关的请求等信息。代码开发 各层代码实现 Controller层在ShoppingCartController中创建clean方法调用Service层的cleanShoppingCart方法后续实现。Service层接口与实现类ShoppingCartService接口声明cleanShoppingCart方法ShoppingCartServiceImpl实现类中该方法通过Mapper层的deleteByUserId方法删除当前用户的购物车数据。Mapper层在ShoppingCartMapper接口中创建deleteByUserId方法定义根据用户id删除购物车数据的SQL语句。 功能测试进入购物车页面点击清空按钮后查看数据库确认当前用户购物车数据已全部删除则测试成功。代码提交按常规操作提交代码后续步骤与其他功能代码提交相同。 第八天、微信支付功能实现 根据上传的文件内容以下是关于“苍穹外卖-day08”课程的关键知识点总结 1. 导入地址簿功能代码 1.1 需求分析和设计 产品原型用户可以维护自己的地址信息包括查询、新增、修改、删除地址以及设置默认地址。接口设计定义了7个接口用于处理地址簿管理的不同操作。表设计创建address_book表存储用户的地址信息。 1.2 代码导入 Mapper层实现了与数据库交互的基本方法如新增地址、查询地址等。Service层提供了业务逻辑处理的服务接口及实现类。Controller层为前端提供RESTful API接口以JSON格式响应请求。 1.3 功能测试 通过前后端联调测试来验证各个功能点是否正常工作。 2. 用户下单 2.1 需求分析和设计 产品原型用户将菜品加入购物车后可提交订单并完成支付。表设计设计了orders订单表和order_detail订单明细表两个数据表用以保存订单相关信息。 2.2 代码开发 DTO设计定义了传输对象OrdersSubmitDTO用于接收用户提交的订单信息。VO设计定义了视图对象OrderSubmitVO用于返回给用户的订单确认信息。Controller层提供了用户下单的API接口。Service层接口声明了用户下单的方法。Service层实现类实现了订单创建的具体逻辑包括异常情况的处理。Mapper层实现了订单及其明细数据的插入操作。 2.3 功能测试 完成了从去结算到支付成功的整个流程测试。 3. 订单支付 3.1 微信支付介绍 简要介绍了微信支付的产品和服务强调了微信支付接入的重要性。 3.2 微信支付准备工作 讨论了确保数据安全的方法如使用证书进行加密解密并解释了如何通过内网穿透技术让微信后台能够调用到本地服务器。 3.3 代码导入 配置相关属性在配置文件中设置了微信支付所需的参数。Mapper层增加了查询订单和更新订单状态的方法。Service层实现了订单支付和支付成功后的订单状态更新逻辑。Controller层提供了订单支付的API接口。PayNotifyController处理来自微信支付的成功回调通知。 3. 订单支付 3.1 微信支付介绍 微信支付产品本项目选择小程序支付。微信支付接入流程商户系统调用微信支付接口生成预支付交易单用户支付后微信后台通知商户系统支付结果。微信支付相关接口包括JSAPI下单和微信小程序调起支付。 3.2 微信支付准备工作 数据安全使用微信支付平台证书和商户私钥文件保证数据安全。内网穿透使用cpolar软件获取临时域名确保微信后台可以调用到商户系统。 3.3 代码导入 配置文件配置了微信支付相关的参数。Mapper层实现了订单的查询和更新操作。Service层实现了订单支付和支付成功的业务逻辑。Controller层提供了订单支付的接口并处理微信支付的回调通知。 3.4 功能测试 通过前后端联调测试了订单支付功能确保支付流程正常。 总结 地址簿管理实现了用户地址的增删改查功能支持设置默认地址。用户下单实现了用户下单功能生成订单并清理购物车。订单支付实现了微信支付功能支持用户支付订单并处理支付回调。 通过本次课程我们掌握了如何实现用户地址管理、用户下单和订单支付功能并了解了微信支付的基本流程和接口调用方式。 第十天、催单、实时通讯功能实现 1. Spring Task 作用: 用于定时执行任务适用于需要定时处理的场景如订单超时处理、通知提醒等。使用步骤: 导入spring-context依赖。在启动类上添加EnableScheduling注解以开启任务调度。创建定时任务类并在方法上使用Scheduled注解指定cron表达式。 cron表达式: 定义任务执行时间的字符串分为秒、分钟、小时、日、月、周、年可选七个域支持通配符和特殊字符。 2. WebSocket 作用: 实现浏览器与服务器之间的全双工通信适用于实时通信场景。特点: 长连接、双向通信、基于TCP。使用步骤: 前端使用WebSocket API建立连接。后端使用ServerEndpoint注解定义WebSocket服务端点。配置WebSocket支持如注册ServerEndpointExporter bean。实现连接打开、消息接收、连接关闭等回调方法。 3. 来单提醒和客户催单 设计思路: 使用WebSocket保持管理端与服务器的长连接。当用户支付成功或点击催单时服务器通过WebSocket向管理端推送消息。管理端解析消息并进行相应的提示和语音播报。 实现细节: 在支付成功和催单方法中通过WebSocket向所有客户端发送消息。消息格式为JSON包含类型、订单ID和内容字段。管理端根据消息类型进行不同的处理。 4. 代码结构和提交 代码结构: 按模块划分如sky-server模块包含业务逻辑、数据访问层等。代码提交: 按功能模块进行提交确保每次提交的代码完整且有明确的提交信息。 5. 功能测试 测试方法: 通过浏览器调试工具查看数据交互进行前后端联调。测试步骤: 登录管理端建立WebSocket连接。在小程序端进行下单支付和催单操作。查看管理端是否收到相应的提醒和语音播报。 6. 其他注意事项 cron表达式生成器: 使用在线工具生成cron表达式避免手动编写错误。WebSocket安全: 考虑WebSocket连接的安全性如添加身份验证和授权机制。WebSocket重连: 处理网络波动导致的连接中断实现自动重连机制。 第十一天、echart、用户统计、订单统计、销量功能实时显示 1. Apache ECharts 介绍基于Javascript的数据可视化图表库可提供直观、生动、可交互且能个性化定制的数据可视化图表本质是对数据进行可视化展示常见效果有柱形图、饼形图、折线图等官网地址为https://echarts.apache.org/zh/index.html。入门案例 实现步骤引入echarts.js文件、为ECharts准备设置宽高的DOM、初始化echarts实例、指定图表配置项和数据、使用配置项和数据显示图表。代码开发示例给出了HTML页面中相关的代码结构包括脚本的引入、DOM元素的定义以及具体配置项和图表显示的代码逻辑。测试方式通过浏览器打开页面即可使用Echarts重点在于研究图表所需的数据格式后端需按前端要求返回相应格式数据。 2. 营业额统计 需求分析和设计 产品原型基于折线图按天展示营业额光标放对应点可展示具体数值日期由时间选择器决定营业额指已完成订单金额合计X轴为日期Y轴为营业额。接口设计需根据原型图设计接口后端要适配前端对数据格式的要求。 代码开发 VO设计定义TurnoverReportVO类包含日期列表和营业额列表字段用逗号分隔对应数据在sky-pojo模块中实现。Controller层创建ReportController类提供turnoverStatistics方法用于营业额数据统计接收日期参数并返回对应结果。Service层接口与实现类ReportService接口声明getTurnover方法ReportServiceImpl实现类实现该方法通过调用Mapper层方法结合相关业务逻辑计算并封装营业额数据。Mapper层在OrderMapper接口声明sumByMap方法并在OrderMapper.xml文件编写动态SQL用于根据动态条件统计营业额。 功能测试可通过接口文档测试、前后端联调测试示例展示了查看近7日、近30日营业额统计情况及查看返回数据的操作。代码提交按常规步骤提交代码给出对应截图示意与其他功能代码提交后续步骤一致。 3. 用户统计 需求分析和设计 产品原型通过折线图展示用户总量和新增用户数量基于可视化报表X轴为日期Y轴为用户数根据时间选择区间展示对应数据。接口设计依照原型图设计接口。 代码开发 VO设计定义UserReportVO类包含日期、用户总量、新增用户列表字段以逗号分隔对应数据位于sky-pojo模块。Controller层在ReportController中创建userStatistics方法用于获取用户数据统计结果。Service层接口与实现类ReportService接口声明getUserStatistics方法ReportServiceImpl实现类实现该方法通过循环计算不同日期下新增用户数和总用户数并封装返回。Mapper层在UserMapper接口声明countByMap方法在对应xml文件编写动态SQL用于根据动态条件统计用户数量。 功能测试可采用接口文档测试、前后端联调测试展示了查看近7日、近30日用户统计情况及查看返回数据的操作。代码提交按常规步骤提交代码给出对应截图示意与其他功能代码提交后续步骤一致。 4. 订单统计 需求分析和设计 产品原型用折线图展示订单总数和有效订单数已完成状态订单同时展示所选时间区间内的总订单数、有效订单数、订单完成率X轴为日期Y轴为订单数量。接口设计根据原型图设计相应接口。 代码开发 VO设计定义OrderReportVO类包含日期、每日订单数、每日有效订单数、订单总数、有效订单数、订单完成率等字段在sky-pojo模块中定义。Controller层在ReportController里创建orderStatistics方法用于获取订单数据统计结果。Service层接口与实现类ReportService接口声明getOrderStatistics方法ReportServiceImpl实现类实现该方法通过循环统计每天订单相关数据并计算时间区间内总订单数、有效订单数及订单完成率后封装返回。Mapper层在OrderMapper接口声明countByMap方法在对应xml文件编写动态SQL实现根据动态条件统计订单数量。 功能测试能通过接口文档测试、前后端联调测试展示了查看近7日、近30日订单统计情况及查看返回数据的操作。代码提交按常规步骤提交代码给出对应截图示意与其他功能代码提交后续步骤一致。 5. 销量排名Top10 需求分析和设计 产品原型针对菜品和套餐销售数量进行排名通过柱形图降序展示销量排名前十的商品根据时间选择区间展示相应数据销量指商品销售份数。接口设计依据原型图来设计接口。 代码开发 VO设计定义SalesTop10ReportVO类包含商品名称列表和销量列表字段以逗号分隔对应数据在sky-pojo模块中定义。Controller层在ReportController中创建top10方法用于获取销量排名统计结果。Service层接口与实现类ReportService接口声明getSalesTop10方法ReportServiceImpl实现类实现该方法调用Mapper层方法获取商品销量排名数据并进行封装返回。Mapper层在OrderMapper接口声明getSalesTop10方法在对应xml文件编写动态SQL实现查询商品销量排名。 功能测试可利用接口文档测试、前后端联调测试展示了查看近30日销量排名Top10统计情况及查看返回数据的操作若某时间段无销量数据则可能无展示效果。代码提交按常规步骤提交代码给出对应截图示意与其他功能代码提交后续步骤一致。 第十二天、导出数据Excel表、工作台数据功能完善 1. 工作台 需求分析和设计 产品原型作为系统运营的数据看板与快捷操作入口展示今日数据、订单管理、菜品总览、套餐总览、订单信息等内容还对营业额、有效订单、订单完成率、平均客单价、新增用户等名词做了解释。接口设计依据原型图分析得出共6个接口包含今日数据、订单管理、菜品总览、套餐总览、订单搜索已完成、各个状态的订单数量统计已完成等接口并分别展示了各接口相关设计内容。 代码导入 Controller层WorkSpaceController.java中定义了如工作台今日数据查询、订单管理数据查询等多个方法通过调用WorkspaceService的对应方法并返回相应结果。Service层接口WorkspaceService.java声明了根据时间段统计营业数据、查询订单管理数据等多个方法为业务逻辑提供接口定义。Service层实现类WorkspaceServiceImpl.java实现了WorkspaceService中的方法在各方法中通过调用对应Mapper层方法结合业务逻辑计算并返回如营业数据、订单管理数据、菜品及套餐总览数据等。Mapper层在SetmealMapper和DishMapper中分别添加countByMap方法定义并在对应xml文件编写SQL实现用于根据条件统计套餐和菜品数量。 功能测试 接口文档测试启动服务后访问接口文档地址使用admin用户登录重新获取token并设置全局参数防止失效分别对今日数据查询、菜品总览查询、订单管理数据查询、套餐总览查询等接口进行测试并展示对应测试结果截图。前后端联调测试启动nginx后访问对应网址进入工作台进入开发者模式分别查看今日数据、订单管理、菜品总览、套餐总览等相关内容并展示对应测试结果截图。 代码提交给出代码提交相关截图示意后续步骤和其他功能代码提交一致。 2. Apache POI 介绍处理Miscrosoft Office各种文件格式的开源项目通常用于Java程序中对Miscrosoft Office文件尤其是Excel文件进行读写操作介绍了其常见应用场景如银行网银系统导出交易明细、业务系统导出Excel报表、批量导入业务数据等并展示了相关场景示例图。入门案例 将数据写入Excel文件 代码开发展示了使用Apache POI将数据写入Excel文件的Java代码示例包括创建Excel文件对象、Sheet页、行及单元格设置单元格值通过输出流将内存中Excel文件写入磁盘等操作。实现效果在指定路径生成Excel文件并成功写入对应内容展示了生成文件的截图示例。 读取Excel文件中的数据 代码开发呈现了利用Apache POI读取Excel文件数据的Java代码示例涵盖通过输入流读取文件、获取Sheet页、遍历行及单元格并获取其中文本内容等操作。实现效果实现对指定Excel文件数据的读取并展示读取后控制台输出内容的截图示例。 3. 导出运营数据Excel报表 需求分析和设计 产品原型在数据统计页面点击数据导出按钮可下载Excel格式文件包含最近30日运营相关数据分为概览数据和明细数据两部分按固定表格形式填充数字后可存档。接口设计根据原型图设计接口该接口无参数传递后端自行计算最近30天运营数据也无返回数据报表导出本质是文件下载通过输出流将Excel文件下载到客户端浏览器。 代码开发 实现步骤明确设计Excel模板文件、查询近30天运营数据、将数据写入模板文件、通过输出流下载Excel文件到客户端浏览器这几个步骤。Controller层在ReportController中创建export方法调用ReportService的exportBusinessData方法用于导出运营数据报表。Service层接口与实现类ReportService接口声明exportBusinessData方法ReportServiceImpl实现类实现该方法先获取近30天时间范围查询对应运营数据加载模板文件创建Excel对象将数据填充到Excel的对应单元格后通过输出流下载文件到客户端浏览器并对可能出现的IOException做异常处理。 功能测试采用前后端联调测试进入数据统计页面点击数据导出按钮成功下载Excel报表并展示对应截图示例。代码提交给出代码提交相关截图示意后续步骤和其他功能代码提交一致。 总结 苍穹外卖项目学习总结 苍穹外卖项目是一个综合性的在线餐饮服务平台涵盖了从用户端到管理端的一系列功能模块。通过这12天的学习对项目整体架构、业务流程以及相关技术有了深入的理解和掌握。 功能模块概述 基础功能模块包括员工管理、菜品分类管理、菜品管理、店铺营业状态设置等。员工管理实现了员工信息的增删改查菜品分类管理和菜品管理确保了菜品体系的有序构建店铺营业状态设置灵活控制店铺营业与否。用户交互模块用户可通过微信登录进入小程序进行商品浏览、添加购物车、下单、支付等操作。商品浏览展示菜品和套餐购物车功能方便用户管理选购商品下单与支付流程完整流畅同时地址簿管理使用户能便捷维护收货地址。数据统计与展示模块利用Apache ECharts实现数据可视化通过折线图、柱状图展示营业额、用户数据、订单数据和销量排名等统计信息帮助商家直观了解运营状况。工作台集成了今日数据、订单管理、菜品及套餐总览等功能提供数据看板与快捷操作入口。报表导出模块借助Apache POI实现运营数据的Excel报表导出便于商家存档与数据分析。 技术要点总结 后端技术采用Spring Boot框架构建项目集成MyBatis进行数据库操作使用Spring Data Redis实现缓存功能提高系统性能。HttpClient用于发送HTTP请求实现与外部服务的交互如微信登录、微信支付等功能。前端技术小程序基于微信小程序开发框架运用JavaScript语言进行页面逻辑编写通过WXML构建页面结构WXSS定义页面样式实现用户端的交互功能。 项目收获与体会 技术能力提升熟练掌握了前后端开发技术的整合应用包括数据库设计与操作、接口开发、缓存策略等提升了系统架构设计和性能优化能力。业务理解深化深入理解餐饮外卖业务流程明确各功能模块间的协作关系能更好地从业务需求出发进行功能设计与开发。问题解决能力增强在项目开发过程中遇到各种问题如数据一致性维护、接口对接等通过分析与调试有效提升了问题解决能力。 展望未来 苍穹外卖项目为进一步开发提供了良好基础后续可考虑优化用户体验如提升页面加载速度、优化支付流程拓展功能如增加会员体系、营销活动功能加强系统安全保障用户数据和交易安全等。
文章转载自:
http://www.morning.bdqpl.cn.gov.cn.bdqpl.cn
http://www.morning.nchsz.cn.gov.cn.nchsz.cn
http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn
http://www.morning.dqwykj.com.gov.cn.dqwykj.com
http://www.morning.ccjhr.cn.gov.cn.ccjhr.cn
http://www.morning.nfdty.cn.gov.cn.nfdty.cn
http://www.morning.zpqk.cn.gov.cn.zpqk.cn
http://www.morning.wiitw.com.gov.cn.wiitw.com
http://www.morning.fbmjl.cn.gov.cn.fbmjl.cn
http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn
http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn
http://www.morning.rqqn.cn.gov.cn.rqqn.cn
http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn
http://www.morning.jmmz.cn.gov.cn.jmmz.cn
http://www.morning.rglzy.cn.gov.cn.rglzy.cn
http://www.morning.czrcf.cn.gov.cn.czrcf.cn
http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn
http://www.morning.cwqln.cn.gov.cn.cwqln.cn
http://www.morning.mpscg.cn.gov.cn.mpscg.cn
http://www.morning.hrhwn.cn.gov.cn.hrhwn.cn
http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn
http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn
http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn
http://www.morning.mtrrf.cn.gov.cn.mtrrf.cn
http://www.morning.jkftn.cn.gov.cn.jkftn.cn
http://www.morning.psyrz.cn.gov.cn.psyrz.cn
http://www.morning.rccpl.cn.gov.cn.rccpl.cn
http://www.morning.gwtgt.cn.gov.cn.gwtgt.cn
http://www.morning.wgrl.cn.gov.cn.wgrl.cn
http://www.morning.qtzqk.cn.gov.cn.qtzqk.cn
http://www.morning.tcpnp.cn.gov.cn.tcpnp.cn
http://www.morning.csdgt.cn.gov.cn.csdgt.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn
http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn
http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn
http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn
http://www.morning.eshixi.com.gov.cn.eshixi.com
http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn
http://www.morning.rhsg.cn.gov.cn.rhsg.cn
http://www.morning.hxlpm.cn.gov.cn.hxlpm.cn
http://www.morning.hbkkc.cn.gov.cn.hbkkc.cn
http://www.morning.qygfb.cn.gov.cn.qygfb.cn
http://www.morning.trlhc.cn.gov.cn.trlhc.cn
http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn
http://www.morning.tphrx.cn.gov.cn.tphrx.cn
http://www.morning.xwrhk.cn.gov.cn.xwrhk.cn
http://www.morning.wrbf.cn.gov.cn.wrbf.cn
http://www.morning.xjmpg.cn.gov.cn.xjmpg.cn
http://www.morning.yjfzk.cn.gov.cn.yjfzk.cn
http://www.morning.c7623.cn.gov.cn.c7623.cn
http://www.morning.chbcj.cn.gov.cn.chbcj.cn
http://www.morning.btmwd.cn.gov.cn.btmwd.cn
http://www.morning.gdpai.com.cn.gov.cn.gdpai.com.cn
http://www.morning.rwyd.cn.gov.cn.rwyd.cn
http://www.morning.gynkr.cn.gov.cn.gynkr.cn
http://www.morning.rrxnz.cn.gov.cn.rrxnz.cn
http://www.morning.rknsp.cn.gov.cn.rknsp.cn
http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn
http://www.morning.ndcf.cn.gov.cn.ndcf.cn
http://www.morning.dpmkn.cn.gov.cn.dpmkn.cn
http://www.morning.mghgl.cn.gov.cn.mghgl.cn
http://www.morning.hffjj.cn.gov.cn.hffjj.cn
http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn
http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn
http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn
http://www.morning.qyrnp.cn.gov.cn.qyrnp.cn
http://www.morning.zphlb.cn.gov.cn.zphlb.cn
http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn
http://www.morning.xjmyq.com.gov.cn.xjmyq.com
http://www.morning.2d1bl5.cn.gov.cn.2d1bl5.cn
http://www.morning.fpqq.cn.gov.cn.fpqq.cn
http://www.morning.nmqdk.cn.gov.cn.nmqdk.cn
http://www.morning.nfccq.cn.gov.cn.nfccq.cn
http://www.morning.rjrz.cn.gov.cn.rjrz.cn
http://www.morning.qqpg.cn.gov.cn.qqpg.cn
http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn
http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn
http://www.morning.tpnx.cn.gov.cn.tpnx.cn
http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn
http://www.tj-hxxt.cn/news/245512.html

相关文章:

  • 学前端要逛那些网站搜索引擎原理
  • 寿光网站建设定制wordpress 数据库索引
  • 福鼎市建设局网站台州网站制作案例
  • 阜阳公司做网站wordpress category id
  • 做网站昆山wordpress 下载页面
  • easyui 网站设计wordpress菜单子菜单
  • 找别人做网站需要注意什么织梦新闻模板
  • 做百度排名推广有哪些网站高端企业网站建设核心
  • 哪些网站可以发广告wordpress做成论坛
  • 做分析图的网站网站大改版
  • 北京微信网站制作电话美橙网站建设教程
  • 使用动易模版制作网站网站 被刷流量
  • 瑞安外贸网站制作wordpress 建的网站吗
  • 自己做的小网站如何发布青羊区建设和交通网站
  • 网站开发兼容ie电脑网页游戏大全
  • 做国际网站阿里巴巴wordpress 修改导航
  • 网站防止机器注册支付网站搭建
  • 做网站 用 云主机建立知识体系
  • 学校网站怎么下载不了app程序开发用什么编程
  • 哪家可以做网站忘了网站链接怎么做
  • 美工素材网站化妆品网站建设描述
  • 台州网站关键字优化详情设计微信公众号的网站吗
  • 小说网站建设的支柱织梦科技
  • 内蒙古自治区建设厅网站商标网商标注册查询
  • 临沂城乡建设管理局网站wordpress生成pdf
  • 联享品牌网站建设网络营销产品的首选产品
  • 网站更换域名备案吗wordpress led主题
  • 自主网站云服务器和虚拟主机有什么区别
  • 企业网站优化培训济南网站建设群
  • 有那种网站的浏览器汽车用品网站源码