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

品牌购买网站小程序下载

品牌购买网站,小程序下载,西安网络关键词排名,服饰网站建设模板前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解#xff08;一#xff09;-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解#xff08;二#xff09;-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详…前言 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解一-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解二-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客 5--苍穹外卖-SpringBoot项目中菜品管理 详解一-CSDN博客 6--苍穹外卖-SpringBoot项目中菜品管理 详解二-CSDN博客 7--苍穹外卖-SpringBoot项目中套餐管理 详解一-CSDN博客 8--苍穹外卖-SpringBoot项目中套餐管理 详解二-CSDN博客 9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客 10--苍穹外卖-SpringBoot项目中微信登录 详解-CSDN博客 目录 项目介绍 功能架构图 管理端功能 用户端功能 技术栈 用户层 网关层 应用层 数据层 工具 项目结构 sky-common  sky-pojo      sky-server 登录功能 前端发送的请求是如何请求到后端服务的  答 Swagger 员工管理 新增员工 是否可以使用对应的实体类来接收呢 答 解析出登录员工id后如何传递给Service的save方法 答 员工分页查询 操作时间字段显示 启用禁用员工账号 编辑员工 根据员工id查询信息 编辑员工信息 AOP切面编程 公共字段自动填充功能 菜品管理 文件上传 项目介绍 本项目苍穹外卖是专门为餐饮企业餐厅、饭店定制的一款软件产品包括 系统管理后台 和 小程序端应用 两部分。其中系统管理后台主要提供给餐饮企业内部员工使用可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护对餐厅的各类数据进行统计同时也可进行来单语音播报功能。小程序端主要提供给消费者使用可以在线浏览菜品、添加购物车、下单、支付、催单等。 功能架构图 管理端功能 员工登录/退出 , 员工信息管理 , 分类管理 , 菜品管理 , 套餐管理 , 菜品口味管理 , 订单管理 数据统计来单提醒。 模块描述登录/退出内部员工必须登录后,才可以访问系统管理后台员工管理管理员可以在系统后台对员工信息进行管理包含查询、新增、编辑、禁用等功能分类管理主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护 包含查询、新增、修改、删除等功能菜品管理主要维护各个分类下的菜品信息包含查询、新增、修改、删除、启售、停售等功能套餐管理主要维护当前餐厅中的套餐信息包含查询、新增、修改、删除、启售、停售等功能订单管理主要维护用户在移动端下的订单信息包含查询、取消、派送、完成以及订单报表下载等功能数据统计主要完成对餐厅的各类数据统计如营业额、用户数量、订单等 用户端功能 微信登录 , 收件人地址管理 , 用户历史订单查询 , 菜品规格查询 , 购物车功能 , 下单 , 支付、分类及菜品浏览。 模块描述登录/退出用户需要通过微信授权后登录使用小程序进行点餐点餐-菜单在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择点餐-购物车用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能订单支付用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付个人信息在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据 技术栈 用户层 本项目中在构建系统管理后台的前端页面我们会用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术。而在构建移动端应用时我们会使用到微信小程序。 网关层 Nginx是一个服务器主要用来作为Http服务器部署静态资源访问性能高。在Nginx中还有两个比较重要的作用 反向代理和负载均衡 在进行项目部署时要实现Tomcat的负载均衡就可以通过Nginx来实现。 应用层 SpringBoot 快速构建Spring项目, 采用 约定优于配置 的思想, 简化Spring项目的配置开发。 SpringMVCSpringMVC是spring框架的一个模块springmvc和spring无需通过中间整合层进行整合可以无缝集成。 Spring Task: 由Spring提供的定时任务框架。 httpclient: 主要实现了对http请求的发送。 Spring Cache: 由Spring提供的数据缓存框架 JWT: 用于对应用程序上的用户进行身份验证的标记。 阿里云OSS: 对象存储服务在项目中主要存储文件如图片等。 Swagger 可以自动的帮助开发人员生成接口文档并对接口进行测试。 POI: 封装了对Excel表格的常用操作。 WebSocket: 一种通信网络协议使客户端和服务器之间的数据交换更加简单用于项目的来单、催单功能实现。 数据层 MySQL 关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。 Redis 基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存。 Mybatis 本项目持久层将会使用Mybatis开发。 pagehelper: 分页插件。 spring data redis: 简化java代码操作Redis的API。 工具 git: 版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。 maven: 项目构建工具。 junit单元测试工具开发人员功能实现完毕后需要通过junit对功能进行单元测试。 postman: 接口测工具模拟用户发起的各类HTTP请求获取对应的响应结果。 项目结构 序号名称说明1sky-take-outmaven父工程统一管理依赖版本聚合其他子模块2sky-common子模块存放公共类例如工具类、常量类、异常类等3sky-pojo子模块存放实体类、VO、DTO等4sky-server子模块后端服务存放配置文件、Controller、Service、Mapper等 sky-common  模块中存放的是一些公共类可以供其他模块使用 名称说明constant存放相关常量类context存放上下文类enumeration项目的枚举类存储exception存放自定义异常类json处理json转换的类properties存放SpringBoot相关的配置属性类result返回结果类的封装utils常用工具类 sky-pojo      模块中存放的是一些 entity、DTO、VO 名称说明Entity实体通常和数据库中的表对应DTO数据传输对象通常用于程序中各层之间传递数据VO视图对象为前端展示数据提供的对象POJO普通Java对象只有属性和对应的getter和setter sky-server 模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类等  名称说明config存放配置类controller存放controller类interceptor存放拦截器类mapper存放mapper接口service存放service类SkyApplication启动类 登录功能 实现思路 前端发送的请求是如何请求到后端服务的  前后端两个地址不一致那是如何请求到后端服务的呢 [nginx] nginx反向代理和负载均衡的配置方式-CSDN博客 答 1). nginx反向代理 nginx 反向代理就是将前端发送的动态请求由 nginx 转发到后端服务器 那为什么不直接通过浏览器直接请求后台服务端需要通过nginx反向代理呢 nginx 反向代理的好处 提高访问速度 因为nginx本身可以进行缓存如果访问的同一接口并且做了数据缓存nginx就直接可把数据返回不需要真正地访问服务端从而提高访问速度。 进行负载均衡 所谓负载均衡,就是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器。 保证后端服务安全 因为一般后台服务地址不会暴露所以使用浏览器不能直接访问可以把nginx作为请求访问的入口请求到达nginx后转发到具体的服务中从而保证后端服务的安全。 2).nginx 负载均衡 当如果服务以集群的方式进行部署时那nginx在转发请求到服务器时就需要做相应的负载均衡。其实负载均衡从本质上来说也是基于反向代理来实现的最终都是转发请求。 Swagger Swagger是一个规范和完整的框架用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(https://swagger.io/)。 它的主要作用是 使得前后端分离开发更加方便有利于团队协作 接口的文档在线自动生成降低后端开发人员编写接口文档的负担 功能测试 Spring已经将Swagger纳入自身的标准建立了Spring-swagger项目现在叫Springfox。通过在项目中引入Springfox 即可非常简单快捷的使用Swagger。 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍! 目前一般都使用knife4j框架。 通过注解可以控制生成的接口文档使接口文档拥有更好的可读性常用注解如下 注解说明Api用在类上例如Controller表示对类的说明ApiModel用在类上例如entity、DTO、VOApiModelProperty用在属性上描述属性信息ApiOperation用在方法上例如Controller的方法说明方法的用途、作用 员工管理 新增员工 是否可以使用对应的实体类来接收呢 答 当前端提交的数据和实体类中对应的属性差别比较大时建议使用DTO来封装数据 由于上述传入参数和实体类有较大差别所以自定义DTO类。 在EmployeeController中创建新增员工方法接收前端提交的参数。 在EmployeeService接口中声明新增员工方法 在EmployeeServiceImpl中实现新增员工方法 在EmployeeMapper中声明insert方法 通过某种方式动态获取当前登录员工的id。 员工登录成功后会生成JWT令牌并响应给前端 后续请求中前端会携带JWT令牌通过JWT令牌可以解析出当前登录员工id 解析出登录员工id后如何传递给Service的save方法 答 通过ThreadLocal进行传递。 ThreadLocal 并不是一个Thread而是Thread的局部变量。 ThreadLocal为每个线程提供单独一份存储空间具有线程隔离的效果只有在线程内才能获取到对应的值线程外则不能访问。 初始工程中已经封装了 ThreadLocal 操作的工具类 BaseContext 在拦截器中解析出当前登录员工id并放入线程局部变量中 在Service中获取线程局部变量中的值 员工分页查询 分页查询的返回对象统一都封装为PageResult对象 员工信息分页查询后端返回的对象类型为: ResultPageResult 在sky-server模块中com.sky.controller.admin.EmployeeController中添加分页查询方法。 在EmployeeService接口中声明pageQuery方法 在EmployeeServiceImpl中实现pageQuery方法 此处使用 mybatis 的分页插件 PageHelper 来简化分页代码的开发。底层基于 mybatis 的拦截器实现。 在 EmployeeMapper 中声明 pageQuery 方法 在 src/main/resources/mapper/EmployeeMapper.xml 中编写SQL 操作时间字段显示 方式一 在属性上加上注解对日期进行格式化 但这种方式需要在每个时间属性上都要加上该注解使用较麻烦不能全局处理。 方式二推荐 )  在WebMvcConfiguration中扩展SpringMVC的消息转换器统一对日期类型进行格式处理 /*** 扩展Spring MVC框架的消息转化器* param converters*/protected void extendMessageConverters(ListHttpMessageConverter? converters) {log.info(扩展消息转换器...);//创建一个消息转换器对象MappingJackson2HttpMessageConverter converter new MappingJackson2HttpMessageConverter();//需要为消息转换器设置一个对象转换器对象转换器可以将Java对象序列化为json数据converter.setObjectMapper(new JacksonObjectMapper());//将自己的消息转化器加入容器中converters.add(0,converter);} 启用禁用员工账号 在 EmployeeController 中创建启用禁用员工账号的方法 在 EmployeeService 接口中声明启用禁用员工账号的业务方法 在 EmployeeServiceImpl 中实现启用禁用员工账号的业务方法 在 EmployeeMapper 接口中声明 update 方法 在 EmployeeMapper.xml 中编写SQL 编辑员工 涉及到两个接口 根据id查询员工信息 编辑员工信息 根据员工id查询信息 在 EmployeeController 中创建 getById 方法 在 EmployeeService 接口中声明 getById 方法 在 EmployeeServiceImpl 中实现 getById 方法 在 EmployeeMapper 接口中声明 getById 方法 编辑员工信息 在 EmployeeController 中创建 update 方法 在 EmployeeService 接口中声明 update 方法 在 EmployeeServiceImpl 中实现 update 方法 在实现启用禁用员工账号功能时已实现employeeMapper.update(employee)在此不需写Mapper层代码 AOP切面编程 公共字段自动填充功能 如果都按照之前的操作方式来处理这些公共字段, 需要在每一个业务方法中进行操作, 编码相对冗余、繁琐那能不能对于这些公共字段在某个地方统一处理来简化开发呢 答案是可以的我们使用AOP切面编程实现功能增强来完成公共字段自动填充功能。 在实现公共字段自动填充也就是在插入或者更新的时候为指定字段赋予指定的值使用它的好处就是可以统一对这些字段进行处理避免了重复代码。 技术点枚举、注解、AOP、反射 实现步骤 1). 自定义注解 AutoFill用于标识需要进行公共字段自动填充的方法 2). 自定义切面类 AutoFillAspect统一拦截加入了 AutoFill 注解的方法通过反射为公共字段赋值 3). 在 Mapper 的方法上加入 AutoFill 注解 自定义注解 AutoFill 进入到sky-server模块创建com.sky.annotation包。 package com.sky.annotation;import com.sky.enumeration.OperationType; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** 自定义注解用于标识某个方法需要进行功能字段自动填充处理*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库操作类型UPDATE INSERTOperationType value(); } 其中OperationType已在sky-common模块中定义 package com.sky.enumeration;/*** 数据库操作类型*/ public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT } 自定义切面 AutoFillAspect 在sky-server模块创建com.sky.aspect包 package com.sky.aspect;import com.sky.annotation.AutoFill; import com.sky.constant.AutoFillConstant; import com.sky.context.BaseContext; import com.sky.enumeration.OperationType; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import java.lang.reflect.Method; import java.time.LocalDateTime;/*** 自定义切面实现公共字段自动填充处理逻辑*/ Aspect Component Slf4j public class AutoFillAspect {/*** 切入点*/Pointcut(execution(* com.sky.mapper.*.*(..)) annotation(com.sky.annotation.AutoFill))public void autoFillPointCut(){}/*** 前置通知在通知中进行公共字段的赋值*/Before(autoFillPointCut())public void autoFill(JoinPoint joinPoint){log.info(开始进行公共字段自动填充...);//获取到当前被拦截的方法上的数据库操作类型MethodSignature signature (MethodSignature) joinPoint.getSignature();//方法签名对象AutoFill autoFill signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解对象OperationType operationType autoFill.value();//获得数据库操作类型//获取到当前被拦截的方法的参数--实体对象Object[] args joinPoint.getArgs();if(args null || args.length 0){return;}Object entity args[0];//准备赋值的数据LocalDateTime now LocalDateTime.now();Long currentId BaseContext.getCurrentId();//根据当前不同的操作类型为对应的属性通过反射来赋值if(operationType OperationType.INSERT){//为4个公共字段赋值try {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){//为2个公共字段赋值try {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 注解 以CategoryMapper为例分别在新增和修改方法添加AutoFill()注解也需要EmployeeMapper做相同操作 package com.sky.mapper;Mapper public interface CategoryMapper {/*** 插入数据* param category*/Insert(insert into category(type, name, sort, status, create_time, update_time, create_user, update_user) VALUES (#{type}, #{name}, #{sort}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser}))AutoFill(value OperationType.INSERT)void insert(Category category);/*** 根据id修改分类* param category*/AutoFill(value OperationType.UPDATE)void update(Category category);} 菜品管理 接口设计 根据类型查询分类已完成 文件上传 新增菜品 文件上传 使用第三方的存储服务例如OSS 优点开发简单拥有强大功能免维护 缺点付费
http://www.hkea.cn/news/14318324/

相关文章:

  • 门户网站用什么后台系统好网页游戏传奇世界网页版
  • 安国市城乡建设局网站优化大师免费下载安装
  • 网站制作公司要文化建设费如何注册咨询公司
  • 做网站赚什么钱广州石井做网站
  • 怎么做网址导航网站网络营销策略内容
  • 渝北集团网站建设如何给网站做排名
  • 传智播客php网站开发实例教程深圳网深圳网站开发公司
  • c2c网站有哪些?免费注册com域名
  • 莱芜网站优化加徽信xiala5效果好加强网站技术建设
  • 最权威的网站推广公司山东正元建设网站
  • 个人做网站的流程新版wordpress文章编辑界面
  • 网站怎么注册怎样做金融理财网站
  • phpcms建站流程怀化网站优化推荐
  • 杭州网站建设规划外贸单在哪些网站做
  • 上海市安全建设监理协会网站小城镇建设期刊网站
  • 普陀网站开发培训学校临沂市建设工程监理公司网站
  • 公司网站建设论文自己设计图片的软件
  • 网站建设实验报告手写增加网站关键词
  • 网站如何接广告赚钱厦门seo排名外包
  • 网页设计及网站建设的相关概念成都企业网站备案流程
  • 金华金东区建设局网站网站建设 设计
  • 百度站长工具seoseo优化实训总结
  • 不会编码可以做网站优化吗网站关键词百度指数
  • 黄冈便宜的网站推广怎么做网站点击量设计
  • 网站有免费的域名和空间么做美容仪器的网站
  • 建筑行业招聘网站推荐一级a做爰片_相关网站
  • 做网站网站加载内容慢怎么解决查找做影评的工作网站
  • 辽宁省建设工程信息网官网新网站入口建站之家官网
  • 注册网站公司企业官网的意义
  • 鹤岗住房和城乡建设局网站wordpress 图集功能