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

ui培训的机构小红书seo排名帝搜软件

ui培训的机构,小红书seo排名帝搜软件,青岛黄页电话查询,wordpress添加新菜单到导航前言 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.tj-hxxt.cn/news/140890.html

相关文章:

  • 免费网站如何做推广wordpress 中文版下载
  • 单页网站模板wap上海工商网一窗通
  • 品牌网站建设 结构好的响应式网站有哪些
  • 建设企业外贸网站常州专业网站建设费用
  • 网站后台管理系统界面烟台网站推广
  • 长沙做网站改版价格html自动播放视频
  • pc网页游戏网站南充市企业网站建设
  • seo网站搭建是什么广州定制网站建设方案书
  • 怎么备份网站模板对电子商务网站建设与管理的心得
  • 写一个网站需要什么技术ui设计尺寸规范
  • 教学类网站开发电子商务网站建设收益举例
  • 全美网站开发西安搭建网站
  • 做网站要多大的画布设计网站大全国内
  • 双云官方网站山西seo关键词优化软件搜索
  • 定制网站建设费用预算做网站ps文字有锯齿
  • 云南建设投资集团网站首页沈阳百度seo代理
  • 网站建设的市场公共交易中心招标网
  • 婚介网站建设的策划汕头网站建设网站推广
  • seo做的好的网站有哪些怎么只做自己的电商网站
  • 怎样用模板做网站广告传媒公司加盟代理
  • 怎样用文档做网站首页免费的客户管理软件哪个好用
  • 动态设计网站大连做网站公司哪家好
  • 建设厅网站查询三类人员制作网站协议书
  • 深圳网站建设制作浙江网站建设情况
  • 福州网站设计网址现在进出深圳最新规定
  • 网站模版防被偷wordpress如何生成html代码
  • 网站前后台模板wordpress登录慢
  • 建设网站用什么网站开发哪里安全
  • 电子商务网站问题与解决方案wordpress头条
  • 网络营销概念及理解嘉峪关seo