|  |  |  | 
|---|
|  |  |  | import cc.mrbird.febs.common.entity.QueryRequest; | 
|---|
|  |  |  | import cc.mrbird.febs.common.utils.OssUtils; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.dto.AddMallGoodsDto; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.dto.MallGoodsUpdateDto; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.dto.UpMallGoodsDto; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.entity.MallGoods; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.entity.MallGoodsCategory; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.service.IAdminMallGoodsService; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo; | 
|---|
|  |  |  | import cc.mrbird.febs.mall.vo.AdminMallGoodsTreeVo; | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import cn.hutool.core.lang.UUID; | 
|---|
|  |  |  | import cn.hutool.core.util.IdUtil; | 
|---|
|  |  |  | import cn.hutool.core.util.StrUtil; | 
|---|
|  |  |  | import lombok.RequiredArgsConstructor; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import net.coobird.thumbnailator.Thumbnails; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Value; | 
|---|
|  |  |  | import org.springframework.util.FileCopyUtils; | 
|---|
|  |  |  | import org.springframework.validation.annotation.Validated; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.*; | 
|---|
|  |  |  | import org.springframework.web.multipart.MultipartFile; | 
|---|
|  |  |  | import sun.misc.BASE64Encoder; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.imageio.ImageIO; | 
|---|
|  |  |  | import javax.validation.Valid; | 
|---|
|  |  |  | import java.io.IOException; | 
|---|
|  |  |  | import javax.validation.constraints.NotNull; | 
|---|
|  |  |  | import java.awt.image.BufferedImage; | 
|---|
|  |  |  | import java.io.*; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | 
|---|
|  |  |  | private final IAdminMallGoodsService adminMallGoodsService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 通用上传请求 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${static.resource.url}") | 
|---|
|  |  |  | private String resourceUrl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Value("${static.resource.path}") | 
|---|
|  |  |  | private String resourcePath; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @PostMapping("/uploadFileBase64") | 
|---|
|  |  |  | @ControllerEndpoint(operation = "图片上传", exceptionMessage = "上传失败") | 
|---|
|  |  |  | public Map<String,Object> upload(MultipartFile file) throws IOException { | 
|---|
|  |  |  | if (file == null) { | 
|---|
|  |  |  | return new FebsResponse().message("上传文件为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 文件保存目录路径 | 
|---|
|  |  |  | String savePath = resourcePath; | 
|---|
|  |  |  | // 文件保存目录URL | 
|---|
|  |  |  | String saveUrl = resourceUrl; | 
|---|
|  |  |  | // 检查目录 | 
|---|
|  |  |  | File uploadDir = new File(savePath); | 
|---|
|  |  |  | if (!uploadDir.isDirectory()) { | 
|---|
|  |  |  | uploadDir.mkdir(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获得文件的后缀 | 
|---|
|  |  |  | String fileName = file.getOriginalFilename(); | 
|---|
|  |  |  | String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1); | 
|---|
|  |  |  | String newFileName = UUID.randomUUID().toString() + "." + fileExt; | 
|---|
|  |  |  | if (isImage(file.getInputStream())) { | 
|---|
|  |  |  | Thumbnails.of(file.getInputStream()) | 
|---|
|  |  |  | // 图片大小(长宽)压缩比例 从0-1,1表示原图 | 
|---|
|  |  |  | .scale(1f) | 
|---|
|  |  |  | // 图片质量压缩比例 从0-1,越接近1质量越好 | 
|---|
|  |  |  | .outputQuality(0.9f) | 
|---|
|  |  |  | .toOutputStream(new FileOutputStream(savePath + newFileName)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | File uploadedFile = new File(savePath, newFileName); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | //存文件 | 
|---|
|  |  |  | FileCopyUtils.copy(file.getBytes(), uploadedFile); | 
|---|
|  |  |  | } catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String visitPath = (saveUrl + newFileName); | 
|---|
|  |  |  | Map<String,Object> map = new HashMap<String,Object>(); | 
|---|
|  |  |  | Map<String,Object> map2 = new HashMap<String,Object>(); | 
|---|
|  |  |  | map.put("code",0);//0表示成功,1失败 | 
|---|
|  |  |  | map.put("msg","上传成功");//提示消息 | 
|---|
|  |  |  | map.put("data",map2); | 
|---|
|  |  |  | map2.put("src",visitPath);//图片url | 
|---|
|  |  |  | map2.put("title",fileName);//图片名称,这个会显示在输入框里 | 
|---|
|  |  |  | return map; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private boolean isImage(InputStream inputStream) { | 
|---|
|  |  |  | BufferedImage read = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | read = ImageIO.read(inputStream); | 
|---|
|  |  |  | } catch (IOException e) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return read != null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  图片上传 | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping(value = "/uploadFileBase64") | 
|---|
|  |  |  | @PostMapping(value = "/uploadFileBase64oss") | 
|---|
|  |  |  | @ControllerEndpoint(operation = "图片上传", exceptionMessage = "上传失败") | 
|---|
|  |  |  | public Map<String,Object> uploadFileBase64(@RequestBody @Validated MultipartFile file) { | 
|---|
|  |  |  | if (file.isEmpty()) { | 
|---|
|  |  |  | new FebsResponse().message("上传文件为空"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //文件加密 | 
|---|
|  |  |  | String base64EncoderImg = ""; | 
|---|
|  |  |  | BASE64Encoder base64Encoder =new BASE64Encoder(); | 
|---|
|  |  |  | String base64EncoderImg = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | base64EncoderImg = base64Encoder.encode(file.getBytes()); | 
|---|
|  |  |  | } catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | List<String> imageFuffixStr = CollUtil.toList(StrUtil.split(file.getOriginalFilename(), ".")); | 
|---|
|  |  |  | String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); | 
|---|
|  |  |  | if("jpg".equals(imageFuffixStr.get(1))){ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | //输出到BufferedImage | 
|---|
|  |  |  | BufferedImage bufferedImage = Thumbnails.of(file.getInputStream()) | 
|---|
|  |  |  | // 图片大小(长宽)压缩比例 从0-1,1表示原图 | 
|---|
|  |  |  | .scale(1f) | 
|---|
|  |  |  | // 图片质量压缩比例 从0-1,越接近1质量越好 | 
|---|
|  |  |  | .outputQuality(0.5f) | 
|---|
|  |  |  | .asBufferedImage(); | 
|---|
|  |  |  | //对内存中的图片文件进行Base64处理 | 
|---|
|  |  |  | ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流 | 
|---|
|  |  |  | ImageIO.write(bufferedImage, "jpg", newBaos);//写入流中 | 
|---|
|  |  |  | byte[] bytes = newBaos.toByteArray();//转换成字节 | 
|---|
|  |  |  | base64EncoderImg = base64Encoder.encode(bytes); | 
|---|
|  |  |  | //            base64EncoderImg = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8"); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | base64EncoderImg = base64Encoder.encode(file.getBytes()); | 
|---|
|  |  |  | } catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String imageFuffix = ".png"; | 
|---|
|  |  |  | //文件加密 | 
|---|
|  |  |  | //        String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); | 
|---|
|  |  |  | //      String imageFuffix = ".png"; | 
|---|
|  |  |  | String imageNames = System.currentTimeMillis() + IdUtil.simpleUUID() + imageFuffix; | 
|---|
|  |  |  | String imageName = "uploadeFile/" + imageNames; | 
|---|
|  |  |  | OssUtils.uploadFileWithBase64(base64EncoderImg, imageName); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-热卖 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @GetMapping("goodsHot/{id}") | 
|---|
|  |  |  | @ControllerEndpoint(operation = " 商品-热卖", exceptionMessage = "设置失败") | 
|---|
|  |  |  | public FebsResponse goodsHot(@NotNull(message = "{required}") @PathVariable Long id) { | 
|---|
|  |  |  | return adminMallGoodsService.goodsHot(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-取消热卖 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @GetMapping("goodsNotHot/{id}") | 
|---|
|  |  |  | @ControllerEndpoint(operation = " 商品-取消热卖", exceptionMessage = "设置失败") | 
|---|
|  |  |  | public FebsResponse goodsNotHot(@NotNull(message = "{required}") @PathVariable Long id) { | 
|---|
|  |  |  | return adminMallGoodsService.goodsNotHot(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-上架 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping("upMallGoods") | 
|---|
|  |  |  | @GetMapping("upMallGoods/{id}") | 
|---|
|  |  |  | @ControllerEndpoint(operation = " 商品-上架", exceptionMessage = "上架失败") | 
|---|
|  |  |  | public FebsResponse upMallGoods(@RequestBody @Valid UpMallGoodsDto upMallGoodsDto) { | 
|---|
|  |  |  | return adminMallGoodsService.upMallGoods(upMallGoodsDto); | 
|---|
|  |  |  | public FebsResponse upMallGoods(@NotNull(message = "{required}") @PathVariable Long id) { | 
|---|
|  |  |  | return adminMallGoodsService.upMallGoods(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-下架 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping("downMallGoods") | 
|---|
|  |  |  | @GetMapping("downMallGoods/{id}") | 
|---|
|  |  |  | @ControllerEndpoint(operation = " 商品-下架", exceptionMessage = "下架失败") | 
|---|
|  |  |  | public FebsResponse downMallGoods(@RequestBody @Valid UpMallGoodsDto upMallGoodsDto) { | 
|---|
|  |  |  | return adminMallGoodsService.downMallGoods(upMallGoodsDto); | 
|---|
|  |  |  | public FebsResponse downMallGoods(@NotNull(message = "{required}") @PathVariable Long id) { | 
|---|
|  |  |  | return adminMallGoodsService.downMallGoods(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-删除 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @GetMapping("delMallGoods/{id}") | 
|---|
|  |  |  | @ControllerEndpoint(operation = " 商品-删除", exceptionMessage = "删除失败") | 
|---|
|  |  |  | public FebsResponse delMallGoods(@NotNull(message = "{required}") @PathVariable Long id) { | 
|---|
|  |  |  | return adminMallGoodsService.delMallGoods(id); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-编辑 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @PostMapping("updateMallGoods") | 
|---|
|  |  |  | @ControllerEndpoint(operation = "商品-编辑", exceptionMessage = "操作失败") | 
|---|
|  |  |  | public FebsResponse updateMallGoods(@RequestBody @Valid MallGoodsUpdateDto mallGoodsUpdateDto) { | 
|---|
|  |  |  | return adminMallGoodsService.updateMallGoods(mallGoodsUpdateDto); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 商品-全部选择 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @GetMapping("goods/allTree") | 
|---|
|  |  |  | @ControllerEndpoint(exceptionMessage = "获取商品失败") | 
|---|
|  |  |  | public List<AdminMallGoodsTreeVo> getAllGoodsTree(){ | 
|---|
|  |  |  | return adminMallGoodsService.getAllGoodsTree(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|