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

网站设计文字超链接竞价推广岗位职责

网站设计文字超链接,竞价推广岗位职责,此网站正在建设中,做cg的网站新增菜品 1.1 需求分析与设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 2.2 代码开发2.2.1 文件上传实现2.2.2 新增菜品实现 2.3 功能测试 1.1 需求分析与设计 1.1.1 产品原型 后台系统中可以管理菜品信息#xff0c;通过 新增功能来添加一个新的菜品#xff0c;在添加菜品… 新增菜品 1.1 需求分析与设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 2.2 代码开发2.2.1 文件上传实现2.2.2 新增菜品实现 2.3 功能测试 1.1 需求分析与设计 1.1.1 产品原型 后台系统中可以管理菜品信息通过 新增功能来添加一个新的菜品在添加菜品时需要选择当前菜品所属的菜品分类并且需要上传菜品图片。 新增菜品原型 当填写完表单信息, 点击保存按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据保存至数据库中。 业务规则 菜品名称必须是唯一的菜品必须属于某个分类下不能单独存在新增菜品时可以根据情况选择菜品的口味每个菜品必须对应一张图片 1.1.2 接口设计 根据上述原型图先粗粒度设计接口共包含3个接口。 接口设计 根据类型查询分类已完成文件上传新增菜品 接下来细粒度分析每个接口明确每个接口的请求方式、请求路径、传入参数和返回值。 1. 根据类型查询分类 2. 文件上传 3. 新增菜品 1.1.3 表设计 通过原型图进行分析 新增菜品其实就是将新增页面录入的菜品信息插入到dish表如果添加了口味做法还需要向dish_flavor表插入数据。所以在新增菜品时涉及到两个表 表名说明dish菜品表dish_flavor菜品口味表 1). 菜品表:dish 字段名数据类型说明备注idbigint主键自增namevarchar(32)菜品名称唯一category_idbigint分类id逻辑外键pricedecimal(10,2)菜品价格imagevarchar(255)图片路径descriptionvarchar(255)菜品描述statusint售卖状态1起售 0停售create_timedatetime创建时间update_timedatetime最后修改时间create_userbigint创建人idupdate_userbigint最后修改人id 2). 菜品口味表:dish_flavor 字段名数据类型说明备注idbigint主键自增dish_idbigint菜品id逻辑外键namevarchar(32)口味名称valuevarchar(255)口味值 2.2 代码开发 2.2.1 文件上传实现 因为在新增菜品时需要上传菜品对应的图片(文件)包括后绪其它功能也会使用到文件上传故要实现通用的文件上传接口。 文件上传是指将本地图片、视频、音频等文件上传到服务器上可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务需要有存储的支持那么我们的解决方案将以下几种 直接将图片保存到服务的硬盘springmvc中的文件上传 优点开发便捷成本低缺点扩容困难 使用分布式文件系统进行存储 优点容易实现扩容缺点开发复杂度稍大有成熟的产品可以使用比如FastDFS,MinIO 使用第三方的存储服务例如OSS 优点开发简单拥有强大功能免维护缺点付费 在本项目选用阿里云的OSS服务进行文件存储。 实现步骤 1). 定义OSS相关配置 在sky-server模块 application-dev.yml sky:alioss:endpoint: oss-cn-hangzhou.aliyuncs.comaccess-key-id: **************************access-key-secret: *******************bucket-name: sky-take-outapplication.yml spring:profiles:active: dev #设置环境 sky:alioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: ${sky.alioss.access-key-secret}bucket-name: ${sky.alioss.bucket-name} 2). 读取OSS配置 在sky-common模块中已定义 package com.sky.properties;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;Component ConfigurationProperties(prefix sky.alioss) Data public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}3). 生成OSS工具类对象 在sky-server模块 package com.sky.config;/*** 配置类用于创建AliOssUtil对象*/ Configuration Slf4j public class OssConfiguration {BeanConditionalOnMissingBeanpublic AliOssUtil aliOssUtil(AliOssProperties aliOssProperties){log.info(开始创建阿里云文件上传工具类对象{},aliOssProperties);return new AliOssUtil(aliOssProperties.getEndpoint(),aliOssProperties.getAccessKeyId(),aliOssProperties.getAccessKeySecret(),aliOssProperties.getBucketName());} }其中AliOssUtil.java已在sky-common模块中定义 package com.sky.utils;Data AllArgsConstructor Slf4j public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** param bytes* param objectName* return*/public String upload(byte[] bytes, String objectName) {// 创建OSSClient实例。OSS ossClient new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObject请求。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} catch (OSSException oe) {System.out.println(Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.);System.out.println(Error Message: oe.getErrorMessage());System.out.println(Error Code: oe.getErrorCode());System.out.println(Request ID: oe.getRequestId());System.out.println(Host ID: oe.getHostId());} catch (ClientException ce) {System.out.println(Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.);System.out.println(Error Message: ce.getMessage());} finally {if (ossClient ! null) {ossClient.shutdown();}}//文件访问路径规则 https://BucketName.Endpoint/ObjectNameStringBuilder stringBuilder new StringBuilder(https://);stringBuilder.append(bucketName).append(.).append(endpoint).append(/).append(objectName);log.info(文件上传到:{}, stringBuilder.toString());return stringBuilder.toString();} }4). 定义文件上传接口 在sky-server模块中定义接口 package com.sky.controller.admin;/*** 通用接口*/ RestController RequestMapping(/admin/common) Api(tags 通用接口) Slf4j public class CommonController {Autowiredprivate AliOssUtil aliOssUtil;/*** 文件上传* param file* return*/PostMapping(/upload)ApiOperation(文件上传)public ResultString upload(MultipartFile file){log.info(文件上传{},file);try {//原始文件名String originalFilename file.getOriginalFilename();//截取原始文件名的后缀 dfdfdf.pngString extension originalFilename.substring(originalFilename.lastIndexOf(.));//构造新文件名称String objectName UUID.randomUUID().toString() extension;//文件的请求路径String filePath aliOssUtil.upload(file.getBytes(), objectName);return Result.success(filePath);} catch (IOException e) {log.error(文件上传失败{}, e);}return Result.error(MessageConstant.UPLOAD_FAILED);} }2.2.2 新增菜品实现 1). 设计DTO类 在sky-pojo模块中 package com.sky.dto;Data public class DishDTO implements Serializable {private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//口味private ListDishFlavor flavors new ArrayList(); }2). Controller层 进入到sky-server模块 package com.sky.controller.admin;/*** 菜品管理*/ RestController RequestMapping(/admin/dish) Api(tags 菜品相关接口) Slf4j public class DishController {Autowiredprivate DishService dishService;/*** 新增菜品** param dishDTO* return*/PostMappingApiOperation(新增菜品)public Result save(RequestBody DishDTO dishDTO) {log.info(新增菜品{}, dishDTO);dishService.saveWithFlavor(dishDTO);//后绪步骤开发return Result.success();} }3). Service层接口 package com.sky.service;import com.sky.dto.DishDTO; import com.sky.entity.Dish;public interface DishService {/*** 新增菜品和对应的口味** param dishDTO*/public void saveWithFlavor(DishDTO dishDTO);}4). Service层实现类 package com.sky.service.impl;Service Slf4j public class DishServiceImpl implements DishService {Autowiredprivate DishMapper dishMapper;Autowiredprivate DishFlavorMapper dishFlavorMapper;/*** 新增菜品和对应的口味** param dishDTO*/Transactionalpublic void saveWithFlavor(DishDTO dishDTO) {Dish dish new Dish();BeanUtils.copyProperties(dishDTO, dish);//向菜品表插入1条数据dishMapper.insert(dish);//后绪步骤实现//获取insert语句生成的主键值Long dishId dish.getId();ListDishFlavor flavors dishDTO.getFlavors();if (flavors ! null flavors.size() 0) {flavors.forEach(dishFlavor - {dishFlavor.setDishId(dishId);});//向口味表插入n条数据dishFlavorMapper.insertBatch(flavors);//后绪步骤实现}}}5). Mapper层 DishMapper.java中添加 /*** 插入菜品数据** param dish*/AutoFill(value OperationType.INSERT)void insert(Dish dish);在/resources/mapper中创建DishMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.sky.mapper.DishMapperinsert idinsert useGeneratedKeystrue keyPropertyidinsert into dish (name, category_id, price, image, description, create_time, update_time, create_user,update_user, status)values (#{name}, #{categoryId}, #{price}, #{image}, #{description}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser}, #{status})/insert /mapper DishFlavorMapper.java package com.sky.mapper;import com.sky.entity.DishFlavor; import java.util.List;Mapper public interface DishFlavorMapper {/*** 批量插入口味数据* param flavors*/void insertBatch(ListDishFlavor flavors);}在/resources/mapper中创建DishFlavorMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.sky.mapper.DishFlavorMapperinsert idinsertBatchinsert into dish_flavor (dish_id, name, value) VALUESforeach collectionflavors itemdf separator,(#{df.dishId},#{df.name},#{df.value})/foreach/insert /mapper2.3 功能测试 进入到菜品管理—新建菜品 由于没有实现菜品查询功能所以保存后暂且在表中查看添加的数据。 dish表 dish_flavor表 测试成功。 后记 美好的一天到此结束下次继续努力欲知后续请看下回分解写作不易感谢大家的支持
http://www.pierceye.com/news/169491/

相关文章:

  • 百度网站排名软件怎么做网站竞价
  • 设计素材网站校园二手市场网站建设
  • 电子产品网站设计asp做微网站
  • 网站内部优化建设温州 网站制作
  • 怎么自己做网站地图网站涉及敏感视频等该怎么做
  • 个人网站建设主要功能南京自助建站网站
  • 替别人做设计的网站商业空间
  • 做网站很赚钱吗郴州网站定制
  • 霞浦建站公司建设通是个什么网站
  • 帮企业建网站网络广告有哪些
  • 网站的访问量怎么查知名电子商务网站
  • 鸣蝉小程序制作平台南通seo排名公司
  • 建设网站都要学些什么网站开发承包合同
  • 网站搭建好了怎么上到服务器好看wordpress主题
  • 免费自己制作网站教程网站文字格式
  • 模板建站教程网站建设公司特色
  • 广州网站设计制作江门住房与城乡建设局官方网站
  • 电子商城网站建设参考文献新手建立企业网站流程
  • 站长工具使用wordpress搜索框制作教程
  • 上海翼成信息科技有限公司做的什么网站怎么办一个网站
  • 上海网站建设的英文wordpress login 图标
  • 雅安市网站建设搭建网站工具
  • 网站如何做301重定向南宁一站网 给网站做营销
  • 网站 使用的字体女生电子商务专业适合做什么
  • 电商网站首页模板连云港 网站 建设
  • 自助建站广告发布企业年检网上申报流程
  • 河北平台网站建设价位外包网站有哪些
  • 做网站客户需要提供的资料梧州网站建设推荐
  • 网站商城建设实训心得网络推广有用吗
  • 考试网站建设房价2024年暴跌