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. 头秃元凶「真面目」首次被揭穿,鹅厂程序员立功了 | Nature子刊
  2. GitHub官方开源新命令行工具
  3. maven web项目build失败
  4. 2018年1月 常用的linux命令
  5. 复习Java的精华总结
  6. c#执行多句oracle,C#一次执行多条SQL语句,Oracle11g数据库
  7. python爬虫免费代理池_Python爬取免费代理搭建代理池
  8. 力扣题目——230. 二叉搜索树中第K小的元素
  9. 毕业后,两个月,第二家公司上班第一天
  10. ubuntu修改文件权限
  11. 181025词霸有道扇贝每日一句
  12. SpringBoot项目获取Spring容器中的bean
  13. Anaconda版本与Python版本对应关系
  14. SAP 标准Status拷贝(SE41 SAPLSLVC_FULLSCREEN -> STANDARD_FULLSCREEN )
  15. docker修改redis配置文件
  16. 菠萝罐头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. MySQL初始密码的查看
  18. python 各类距离公式实现
  19. 柔性电子: Triboelectric Nanogenerator摩擦生电
  20. 笔记本也瑜枷,联想展示最新概念机

热门文章

  1. Thymeleaf的th标签的应用
  2. sleep include linux,linux下 sleep() 与 usleep()
  3. 错误:php70w-common conflicts with php-common-5.3.3-49.el6.x86_64 You could try using --skip-broken to
  4. C/C++ 字符串转数字函数
  5. css_背景图片撑开DIV高度
  6. Math-Model(一)数学建模算法综述
  7. 踩上元宇宙的风口后,消费级AR眼镜真的复兴了吗?
  8. isaca 会员资料
  9. ISACA发布SIEM研究报告
  10. 《网络协议》TCP 的成块数据流