1. 商品业务处理

1.1 实现文件上传

1.1.1 编辑ImageVO对象

1.1.2 编辑FileController

@RestController
@CrossOrigin
@RequestMapping("/file")
public class FileController {@Autowiredprivate FileService fileService;@PostMapping("/upload")public SysResult upload(MultipartFile file) throws IOException {ImageVO imageVO = fileService.upload(file);if(imageVO == null){return SysResult.fail();}return SysResult.success(imageVO);}}

1.1.3 编辑pro配置文件

 image.localPathDir=D:/JT_IMAGEimage.localUrlPath=http://image.jt.com

1.1.4 编辑FileService

@Service
@PropertySource("classpath:/properties/image.properties")
public class FileServiceImpl implements FileService{//为属性动态赋值 注解@Value@Value("${image.localPathDir}")private String localPathDir;        // = "D:/JT_IMAGE";@Value("${image.localUrlPath}")private String localUrlPath;        // = "http://image.jt.com";//1.参数  ~~~已知条件//2.干什么 ~~~ 实现文件上传//3.返回值: void ImageVO 有效返回/*** 文件上传案例实现* 1.如何保证前端是上传的数据是有效的!!*      1.1 校验文件的名称检查是否为图片*      1.2 校验是否为恶意程序.* @param file* @return*/@Overridepublic ImageVO upload(MultipartFile file) throws IOException {//1.1校验是否为图片类型  abc.jpg ABC.JPG 文件大小写String fileName = file.getOriginalFilename();//将所有的文件名称转化为小写fileName = fileName.toLowerCase();if(!fileName.matches("^.+\\.(jpg|png|gif)$")){return null;}//1.2 校验图片类型是否为木马try {BufferedImage bufferedImage = ImageIO.read(file.getInputStream());int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();if(width == 0 || height == 0 ){return null;}}catch (Exception e){return null;}//2. 目录结构//2.1 实现分目录存储...  可以以时间维度进行分隔 /yyyy/MM/dd/String datePath =new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());//2.2 进行目录的拼接  "D:/JT_IMAGE/2021/11/11";String localDir = localPathDir + datePath;//2.3 需要创建目录File dirFile = new File(localDir);if(!dirFile.exists()){dirFile.mkdirs();}//3.文件名称重复  采用UUID防止文件重名 uuid.jpgString uuid = UUID.randomUUID().toString().replace("-", "");//fileName = abc.jpgString fileType =fileName.substring(fileName.lastIndexOf("."));String realFileName = uuid + fileType;//c:jt_image/2021/11/11/uuid.jpgString filePathAll = localDir + realFileName;//实现文件上传File realFile = new File(filePathAll);file.transferTo(realFile);//2021/11/11/uuid.jpgString virtualPath = datePath + realFileName;//http://image.jt.com/2021/11/11/uuid.jpgString urlPath = localUrlPath + virtualPath;return new ImageVO(virtualPath,urlPath,realFileName);}}

1.2 实现图片删除

1.2.1 编辑页面JS

1.2.2 编辑FileController

 //实现文件的删除功能//URL: /file/deleteFile@DeleteMapping("/deleteFile")public SysResult fileRemove(String virtualPath){fileService.fileRemove(virtualPath);return SysResult.success();}

1.2.3 编辑FileService

 //如何实现文件删除??  virtualPath: 2021/11/11/uuid.jpg@Overridepublic void fileRemove(String virtualPath) {String filePath = localPathDir + virtualPath;File file = new File(filePath);//删除文件file.delete();}

1.3 富文本编辑器实现

1.3.1 导入样式

1.3.2 导入富文本CSS样式

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
import './assets/css/global.css'
import './assets/ali-icon/iconfont.css'/* 导入富文本编辑器 */
import VueQuillEditor from 'vue-quill-editor'/* 导入富文本编辑器对应的样式 */
import 'quill/dist/quill.core.css' // import styles
import 'quill/dist/quill.snow.css' // for snow theme
import 'quill/dist/quill.bubble.css' // for bubble theme
/* 导入axios包 */
import axios from 'axios'/* 设定axios的请求根目录 */
axios.defaults.baseURL = 'http://localhost:8091/'
/* 向vue对象中添加全局对象 以后发送ajax请求使用$http对象 */
Vue.prototype.$http = axios/* 将富文本编辑器注册为全局可用的组件 */
Vue.use(VueQuillEditor)//定义格式化价格的过滤器
Vue.filter('priceFormat',(price) => {return (price/100).toFixed(2)
})Vue.config.productionTip = falsenew Vue({router,render: h => h(App)
}).$mount('#app')

1.4 实现商品新增

1.4.1 商品新增的数据结构

1.商品的基本信息 item
2. 商品的参数信息 注意每个商品都应该有自己单独的参数 item_param
3. 商品详情信息 每个商品都应该有自己的详情 (大字段存储) item_desc

1.4.2 商品新增的JS

1.4.3 商品新增业务接口


数据返回值:

1.4.4 关于JSON转化API

说明: 使用ObjectMapper 实现对象的转化
1). writeValueAsString 表示将对象转化为JSON
2). readValue 表示将JSON串转化为对象

 @Testpublic void toJSON() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();ItemParamVO itemParamVO = new ItemParamVO();itemParamVO.setParamId(1);itemParamVO.setParamVals("100");ItemParamVO itemParamVO2 = new ItemParamVO();itemParamVO2.setParamId(1);itemParamVO2.setParamVals("100");List list = new ArrayList();list.add(itemParamVO);list.add(itemParamVO2);String json =mapper.writeValueAsString(list);//JSON转化为对象List<ItemParamVO> list2 = mapper.readValue(json, List.class);System.out.println(list2);}

1.4.5 编辑ItemController

1.4.6 编辑ItemService

/*** 实现三张表入库 商品表/商品详情表/商品参数表* @param itemVO*/@Transactional@Overridepublic void saveItem(ItemVO itemVO){//1.入库商品表Item item = itemVO.getItem();item.setStatus(true);    //默认启用状态//要求入库之后返回主键//MP如果设定了主键自增则会自动的实现数据回显itemMapper.insert(item);//2.入库商品详情ItemDesc itemDesc = itemVO.getItemDesc();itemDesc.setId(item.getId());itemDescMapper.insert(itemDesc);//3.入库商品参数//1.一个商品应该有自己的单独的参数. 动态参数/静态属性 KYE-VLAUE [key:value,key2:value2]ItemParam itemParam = itemVO.getItemParam();ItemParamVO[] dynamic = itemParam.getDynamicArray();ItemParamVO[] staticParam  = itemParam.getStaticArray();try {//将页面传递的数据转化为JSON,之后数据库保存String dynamicJSON = MAPPER.writeValueAsString(dynamic);String staticJSON = MAPPER.writeValueAsString(staticParam);//封装商品参数信息itemParam.setDynamicArgs(dynamicJSON).setStaticArgs(staticJSON).setId(item.getId());//实现入库操作itemParamMapper.insert(itemParam);} catch (JsonProcessingException e) {e.printStackTrace();//如果程序执行报错 则抛出异常throw new RuntimeException(e);}}

CGB2102-京淘项目day17相关推荐

  1. boot sprint 项目结构_京淘项目03 08.28

    JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...

  2. 京淘项目实战开发-01

    1.京淘项目架构设计 1.1电商网站行业特点 1.1.1 高并发 概念: 同一时间内,有大量的用户访问服务器. 常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产 ...

  3. Lesson9 【LINUX】将京淘项目发布到Linux系统上

    前言 将京淘项目发布到Linux系统上 我在windows系统中已经用IDEA编写好了京淘项目的代码,并且打好了war包. 现在我就想把这个京淘项目发布到linux系统上. 因为在工作中,都是要将项目 ...

  4. 2003京淘项目Day-03京淘后台项目搭建

    1.SpringBoot 整合JSP 1.1 创建项目 1.1.1 创建项目 1.1.2 编辑POM.xml文件 添加继承/依赖/插件 <!--parent标签作用:管理所有被springBoo ...

  5. 京淘项目Day-04

    1.关于项目打包/发布问题说明 1.1 利用maven工具项目打包 说明: 父级JT 其中包含了2个子级项目 jt-manager 依赖于jt-common.所以项目打包是有顺序的. 1.2 mave ...

  6. 【后端结合】新程序猿笔记Day13(京淘项目)

    1. 用户模块管理 1.1 用户列表展现 1.1.1 业务接口文档 请求路径: /user/list 请求类型: GET 请求参数: 后台使用PageResult对象接收 请求案例: http://l ...

  7. 京淘项目业务接口文档

    一 用户登陆 1 用户登录验证接口 请求路径: /user/login 请求方式: POST 请求参数 参数名称 参数说明 备注 username 用户名 不能为空 password 密码 不能为空 ...

  8. 京淘项目模块分析:用户登;三级列表展现

    文章目录 用户登录 用户登录验证接口 返回的SysResult对象 用户登录业务流程 MD5说明 编辑UserController 编辑UserService UserServiceImpl User ...

  9. 关于京淘项目虚拟机IP修改说明

    0. 修改虚拟机MAC地址 当新建虚拟机时,修改mac网络地址. 0.Window 配置IP地址 1).修改IP地址 2).设定IP租用时间 3).检查windowsIP地址 4).检查LinuxIP ...

最新文章

  1. C# access update 出错总结,注意事项
  2. 后端接收到信息并返回了但是前端无响应_Bug的噩梦:前端调试必备的7个“大杀器”...
  3. Python如何创建相同值的数组/列表
  4. 面试题 04.02. 最小高度树
  5. springboot 后台模板_spring boot实战
  6. Discuz!NT实际安装流程
  7. css的position中absolute和fixed的区别
  8. GridView的DataFormatString格式化字符串
  9. 搭建WEB服务器及常见端口扫描工具分享
  10. matlab中的脚本文件和函数文件
  11. 运维必备——Zabbix监控系统
  12. Groovy 字符串
  13. 数据结构与算法——23. 用嵌套列表与链表实现树结构
  14. 【概率DP】SRM515 NewItemShop
  15. PTA基础编程题目集
  16. codeforces(D2. Coffee and Coursework (Hard Version))二分答案
  17. 【电路理论】KCL、KVL、线性直流电路各大方法、定理详解
  18. 广和通5G模组FM650-CN在Win11下的短信和通话演示
  19. 上海java程序员招聘流程分析
  20. java中如何删除文件或清除文件夹下的所有文件

热门文章

  1. 如何判断一个网站或域名是否被K过
  2. newmat乔里斯基分解
  3. Python数据挖掘入门与实践 彩图 pdf
  4. [激光原理与应用-20]:《激光原理与技术》-6- 激光产生技术 - 谐振腔的结构、作用、工作原理
  5. LeetCode1-300题汇总,希望对你有点帮助!
  6. Vue2+Spirngboot前后端分离项目(二)
  7. RISC-V 指令学习笔记(基于CH32V103)
  8. 利用sed命令插入文本
  9. (附源码)spring boot智能养老系统平台 毕业设计 170900
  10. Java学习笔记(持续更新中)