|
@@ -1,28 +1,36 @@
|
|
|
package com.kmall.admin.controller;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.kmall.admin.dto.GoodsDetailsDto;
|
|
|
import com.kmall.admin.dto.GoodsDto;
|
|
|
import com.kmall.admin.entity.GoodsEntity;
|
|
|
import com.kmall.admin.entity.GoodsGalleryEntity;
|
|
|
-import com.kmall.admin.entity.StoreEntity;
|
|
|
-import com.kmall.admin.service.GoodsGalleryService;
|
|
|
-import com.kmall.admin.service.GoodsService;
|
|
|
-import com.kmall.admin.service.OfflineCartService;
|
|
|
-import com.kmall.admin.service.StoreService;
|
|
|
+import com.kmall.admin.entity.SysOssEntity;
|
|
|
+import com.kmall.admin.service.*;
|
|
|
import com.kmall.admin.utils.ParamUtils;
|
|
|
import com.kmall.admin.utils.ShiroUtils;
|
|
|
+import com.kmall.api.cache.UserTokenCache;
|
|
|
import com.kmall.common.constant.Dict;
|
|
|
import com.kmall.common.constant.JxlsXmlTemplateName;
|
|
|
import com.kmall.admin.fromcomm.entity.SysUserEntity;
|
|
|
+import com.kmall.common.fileserver.util.FileManager;
|
|
|
import com.kmall.common.utils.*;
|
|
|
import com.kmall.common.utils.excel.ExcelUtil;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.apache.commons.fileupload.FileItem;
|
|
|
+import org.apache.commons.fileupload.FileItemFactory;
|
|
|
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
|
+import org.apache.commons.logging.Log;
|
|
|
+import org.apache.commons.logging.LogFactory;
|
|
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
+import java.io.*;
|
|
|
import java.util.*;
|
|
|
+import org.apache.tools.zip.ZipEntry;
|
|
|
+import org.apache.tools.zip.ZipFile;
|
|
|
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
|
|
|
|
|
|
/**
|
|
|
* Controller
|
|
@@ -34,6 +42,8 @@ import java.util.*;
|
|
|
@RestController
|
|
|
@RequestMapping("goods")
|
|
|
public class GoodsController {
|
|
|
+
|
|
|
+ private static Log logger = LogFactory.getLog(UserTokenCache.class);
|
|
|
@Autowired
|
|
|
private GoodsService goodsService;
|
|
|
@Autowired
|
|
@@ -44,7 +54,8 @@ public class GoodsController {
|
|
|
private ExcelUtil excelUtil;
|
|
|
@Autowired
|
|
|
private StoreService storeService;
|
|
|
-
|
|
|
+ @Autowired
|
|
|
+ private SysOssService sysOssService;
|
|
|
/**
|
|
|
* 查看列表
|
|
|
*/
|
|
@@ -300,6 +311,216 @@ public class GoodsController {
|
|
|
return R.ok().put("goodsDetails", goods);
|
|
|
}
|
|
|
|
|
|
+ @RequestMapping("/generalGoodsImgUploadByZip")
|
|
|
+ @ResponseBody
|
|
|
+ public R batchAddImgByZip(@RequestParam("file") MultipartFile file) throws IOException {
|
|
|
+ //上传文件
|
|
|
+ batchAdd(file,2);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping("/generalGoodsImgUpload")
|
|
|
+ @ResponseBody
|
|
|
+ public R batchAddImg(@RequestParam("file") MultipartFile file) throws IOException {
|
|
|
+ //上传文件
|
|
|
+ batchAdd(file,1);
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> batchAdd(MultipartFile file, int type) throws IOException {
|
|
|
+ /*
|
|
|
+ *创建临时文件夹
|
|
|
+ * 解压文件
|
|
|
+ */
|
|
|
+ String fileName = file.getOriginalFilename();
|
|
|
+ String path = "/data/project/img/";
|
|
|
+ File dir = new File(path);
|
|
|
+ dir.mkdirs();
|
|
|
+ String filePath = "/data/project/img2/";
|
|
|
+ File fileDir = new File(filePath);
|
|
|
+ fileDir.mkdirs();
|
|
|
+ File saveFile = new File(fileDir, fileName);//将压缩包解析到指定位置
|
|
|
+ List<String>list = new ArrayList<>();
|
|
|
+
|
|
|
+ try {
|
|
|
+ file.transferTo(saveFile);
|
|
|
+ String newFilePath = filePath + fileName;
|
|
|
+ File zipFile = new File(newFilePath);
|
|
|
+ unZipFiles(zipFile, path,list,type);//解压文件,获取文件路径
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ System.out.println("解压执行失败");
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ logger.info(JSON.toJSONString(list));
|
|
|
+ //程序结束时,删除临时文件
|
|
|
+ deleteFiles(filePath);//删除压缩包文件夹
|
|
|
+ deleteFiles(path);//删除解压文件夹**
|
|
|
+
|
|
|
+ Map<String, Object> jsonMap = new HashMap<String, Object>();
|
|
|
+ jsonMap.put("ret",list);
|
|
|
+ return jsonMap;
|
|
|
+ }
|
|
|
|
|
|
+ public void deleteFiles(String filePath) {
|
|
|
+ File file = new File(filePath);
|
|
|
+ if ((!file.exists()) || (!file.isDirectory())) {
|
|
|
+ System.out.println("file not exist");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String[] tempList = file.list();
|
|
|
+ File temp = null;
|
|
|
+ for (int i = 0; i < tempList.length; i++) {
|
|
|
+ if (filePath.endsWith(File.separator)) {
|
|
|
+ temp = new File(filePath + tempList[i]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ temp = new File(filePath + File.separator + tempList[i]);
|
|
|
+ }
|
|
|
+ if (temp.isFile()) {
|
|
|
+ temp.delete();
|
|
|
+ }
|
|
|
+ if (temp.isDirectory()) {
|
|
|
+ this.deleteFiles(filePath + "/" + tempList[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 空文件的删除
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+
|
|
|
+ public void unZipFiles(File srcFile, String destDirPath, List<String> list, int type) throws RuntimeException {
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ // 判断源文件是否存在
|
|
|
+ if (!srcFile.exists()) {
|
|
|
+ throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
|
|
|
+ }
|
|
|
+ // 开始解压
|
|
|
+ ZipFile zipFile = null;
|
|
|
+ try {
|
|
|
+ zipFile = new ZipFile(srcFile);
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RRException("zip文件解压出错", e);
|
|
|
+ }
|
|
|
+ zipFile.getEncoding();
|
|
|
+ Enumeration<?> entries = zipFile.getEntries();
|
|
|
+ List<ZipEntry> entryList = new ArrayList<>();
|
|
|
+ while (entries.hasMoreElements()) {
|
|
|
+ ZipEntry entry = (ZipEntry) entries.nextElement();
|
|
|
+ logger.info("解压" + entry.getName());
|
|
|
+ entryList.add(entry);
|
|
|
+ // 如果是文件夹,就创建个文件夹
|
|
|
+ }
|
|
|
+ if(null==entryList){
|
|
|
+ throw new RRException("文件夹内无图片信息,请检查后重试");
|
|
|
+ }
|
|
|
+ if(entryList.size()>30){
|
|
|
+ throw new RRException("最多上传30张图片");
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ for(ZipEntry entry : entryList){
|
|
|
+ if (entry.isDirectory()) {
|
|
|
+ String dirPath = destDirPath + "/" + entry.getName();
|
|
|
+ File dir = new File(dirPath);
|
|
|
+ dir.mkdirs();
|
|
|
+ } else {
|
|
|
+ // 如果是文件,就先创建一个文件,然后用io流把内容copy过去
|
|
|
+ File targetFile = new File(destDirPath + "/" + entry.getName());
|
|
|
+ // 保证这个文件的父文件夹必须要存在
|
|
|
+
|
|
|
+ if(!targetFile.getParentFile().exists()){
|
|
|
+
|
|
|
+ }
|
|
|
+ targetFile.createNewFile();
|
|
|
+ // 将压缩文件内容写入到这个文件中
|
|
|
+ InputStream is = zipFile.getInputStream(entry);
|
|
|
+ FileOutputStream fos = new FileOutputStream(targetFile);
|
|
|
+ int len;
|
|
|
+ byte[] buf = new byte[1024];
|
|
|
+ while ((len = is.read(buf)) != -1) {
|
|
|
+ fos.write(buf, 0, len);
|
|
|
+ }
|
|
|
+
|
|
|
+ MultipartFile mulFileByPath = getMulFileByPath(destDirPath + "/" + entry.getName());
|
|
|
+ //上传文件
|
|
|
+ String url = FileManager.upload(mulFileByPath);
|
|
|
+ list.add(url);
|
|
|
+ if(type == 1){
|
|
|
+ String sku = entry.getName().split("\\.")[0];
|
|
|
+ if (null==sku||"".equals(sku)) {
|
|
|
+ throw new RRException("文件名为:" + sku + "的商品命名格式不正确,请检查!");
|
|
|
+ }
|
|
|
+ GoodsEntity goodsEntity = goodsService.queryBySku(sku);
|
|
|
+ goodsEntity.setPrimaryPicUrl(url);
|
|
|
+ goodsEntity.setListPicUrl(url);
|
|
|
+ goodsService.updateForImgUrl(goodsEntity);
|
|
|
+ }else if(type == 2){
|
|
|
+ String barCode = entry.getName().split("/")[1];
|
|
|
+ GoodsEntity goodsEntity = goodsService.queryByBarcode(barCode);
|
|
|
+ goodsEntity.setPrimaryPicUrl(url);
|
|
|
+ goodsEntity.setListPicUrl(url);
|
|
|
+ goodsService.updateForImgUrl(goodsEntity);
|
|
|
+ }
|
|
|
+ //保存文件信息
|
|
|
+ SysOssEntity ossEntity = new SysOssEntity();
|
|
|
+ ossEntity.setUrl(url);
|
|
|
+ ossEntity.setCreateDate(new Date());
|
|
|
+ sysOssService.save(ossEntity);
|
|
|
+ // 关流顺序,先打开的后关闭
|
|
|
+ fos.close();
|
|
|
+ is.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ long end = System.currentTimeMillis();
|
|
|
+ System.out.println("解压完成,耗时:" + (end - start) +" ms");
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException("unzip error from ZipUtils", e);
|
|
|
+ } finally {
|
|
|
+ if(zipFile != null){
|
|
|
+ try {
|
|
|
+ zipFile.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static MultipartFile getMulFileByPath(String picPath) {
|
|
|
+ FileItem fileItem = createFileItem(picPath);
|
|
|
+ MultipartFile mfile = new CommonsMultipartFile(fileItem);
|
|
|
+ return mfile;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static FileItem createFileItem(String filePath)
|
|
|
+ {
|
|
|
+ FileItemFactory factory = new DiskFileItemFactory(16, null);
|
|
|
+ String textFieldName = "textField";
|
|
|
+ int num = filePath.lastIndexOf(".");
|
|
|
+ String extFile = filePath.substring(num);
|
|
|
+ FileItem item = factory.createItem(textFieldName, "text/plain", true,
|
|
|
+ "MyFileName" + extFile);
|
|
|
+ File newfile = new File(filePath);
|
|
|
+ int bytesRead = 0;
|
|
|
+ byte[] buffer = new byte[8192];
|
|
|
+ try
|
|
|
+ {
|
|
|
+ FileInputStream fis = new FileInputStream(newfile);
|
|
|
+ OutputStream os = item.getOutputStream();
|
|
|
+ while ((bytesRead = fis.read(buffer, 0, 8192))
|
|
|
+ != -1)
|
|
|
+ {
|
|
|
+ os.write(buffer, 0, bytesRead);
|
|
|
+ }
|
|
|
+ os.close();
|
|
|
+ fis.close();
|
|
|
+ }
|
|
|
+ catch (IOException e)
|
|
|
+ {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ }
|
|
|
|
|
|
}
|