package com.kmall.admin.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.net.InetAddress; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import com.kmall.admin.entity.SalesDataDownloadEntity; import com.kmall.admin.entity.SalesDataUploadEntity; import com.kmall.admin.fromcomm.entity.SysUserEntity; import com.kmall.admin.service.SalesDataUploadService; import com.kmall.admin.utils.ParamUtils; import com.kmall.admin.utils.ShiroUtils; import com.kmall.common.fileserver.util.FileManager; import com.kmall.common.utils.*; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; /** * 销售数据上传表Controller * * @author emato * @email admin@qhdswl.com * @date 2020-11-16 14:11:53 */ @Controller @RequestMapping("salesdataupload") public class SalesDataUploadController { @Autowired private SalesDataUploadService salesDataUploadService; /** * 查看列表 */ @RequestMapping("/list") // @RequiresPermissions("salesdataupload:list") @ResponseBody public R list(@RequestParam Map params) { ParamUtils.setQueryPowerByRoleType(params, "shopSN", "merchSN", "thirdMerchSN"); //查询列表数据 Query query = new Query(params); List salesDataUploadList = salesDataUploadService.queryList(query); int total = salesDataUploadService.queryTotal(query); PageUtils pageUtil = new PageUtils(salesDataUploadList, total, query.getLimit(), query.getPage()); return R.ok().put("page", pageUtil); } /** * 查看信息 */ @RequestMapping("/info/{fileId}") @RequiresPermissions("salesdataupload:info") @ResponseBody public R info(@PathVariable("fileId") Integer fileId) { SalesDataUploadEntity salesDataUpload = salesDataUploadService.queryObject(fileId); return R.ok().put("salesDataUpload", salesDataUpload); } /** * 保存 */ @RequestMapping("/save") // @RequiresPermissions("salesdataupload:save") @ResponseBody public R save(@RequestBody SalesDataUploadEntity salesDataUpload) { salesDataUploadService.save(salesDataUpload); return R.ok(); } /** * 修改 */ @RequestMapping("/update") @RequiresPermissions("salesdataupload:update") @ResponseBody public R update(@RequestBody SalesDataUploadEntity salesDataUpload) { salesDataUploadService.update(salesDataUpload); return R.ok(); } /** * 删除 */ @RequestMapping("/delete") // @RequiresPermissions("salesdataupload:delete") @ResponseBody public R delete(@RequestBody Integer[] fileIds) { salesDataUploadService.deleteBatch(fileIds); return R.ok(); } /** * 查看所有列表 */ @RequestMapping("/queryAll") @ResponseBody public R queryAll(@RequestParam Map params) { List list = salesDataUploadService.queryList(params); return R.ok().put("list", list); } /** * 上传文件 * @param file * @return * @throws Exception */ @RequestMapping("/upload") @ResponseBody public R upload(@RequestParam("file") MultipartFile file,@RequestParam Map params) throws Exception { if (file.isEmpty()) { throw new RRException("上传文件不能为空"); } //上传文件 String url = FileManager.upload(file); SalesDataUploadEntity salesDataUploadEntity = new SalesDataUploadEntity(); salesDataUploadEntity.setFileName(file.getOriginalFilename()); salesDataUploadEntity.setFileType(file.getContentType()); salesDataUploadEntity.setUploadAddress(url); salesDataUploadEntity.setCreaterSn(ShiroUtils.getUserId().intValue()); salesDataUploadEntity.setCreaterTime(new Date()); salesDataUploadEntity.setMerchSN((String) params.get("merchSN")); salesDataUploadEntity.setThirdMerchSN((String) params.get("thirdMerchSN")); salesDataUploadEntity.setShopSN((String) params.get("shopSN")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); salesDataUploadEntity.setBillTime(sdf.parse((String) params.get("billTime"))); salesDataUploadEntity.setCheckTime(sdf.parse((String) params.get("checkTime"))); salesDataUploadService.save(salesDataUploadEntity); R r = R.ok(); r.put("url", url); r.put("salesDataUpload", salesDataUploadEntity); return r; } /** * 文件下载 * @param filePath * @return * @throws Exception */ @RequestMapping("/download") public ResponseEntity download( HttpServletResponse response, @RequestParam("filePath") String filePath, @RequestParam("fileName") String fileName, @RequestParam("fileId") String fileId) throws Exception { if(StringUtils.isNotEmpty(filePath)){ Map files = new HashMap(); String[] filePaths = filePath.split(","); String[] fileNames = fileName.split(","); String[] fileIds = fileId.split(","); for(int i = 0 ; i < filePaths.length ; i++){ SalesDataDownloadEntity salesDataDownloadEntity = new SalesDataDownloadEntity(); salesDataDownloadEntity.setFileId(Integer.valueOf(fileIds[i])); salesDataDownloadEntity.setDownloadSn(ShiroUtils.getUserId().intValue()); salesDataDownloadEntity.setDownloadTime(new Date()); InetAddress localHost = InetAddress.getLocalHost(); salesDataDownloadEntity.setDownloadIP(localHost.getHostAddress()); salesDataUploadService.saveSalesDownload(salesDataDownloadEntity); ResponseEntity download = FileManager.download(filePaths[i], fileNames[i].substring(0, fileNames[i].lastIndexOf("."))); byte[] msg = download.getBody(); files.put(fileNames[i],msg); } downloadBatchByFile(response,files,"CW保税+新零售销售额统计.zip"); } return null; } /** * 根据文件,进行压缩,批量下载 * @param response * @param files * @throws Exception */ public void downloadBatchByFile(HttpServletResponse response, Map files, String zipName){ try{ response.setContentType("application/x-msdownload"); response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode(zipName, "utf-8")); ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); BufferedOutputStream bos = new BufferedOutputStream(zos); for(Map.Entry entry : files.entrySet()){ String fileName = entry.getKey(); //每个zip文件名 byte[] file = entry.getValue(); //这个zip文件的字节 BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(file)); zos.putNextEntry(new ZipEntry(fileName)); int len = 0; byte[] buf = new byte[10 * 1024]; while( (len=bis.read(buf, 0, buf.length)) != -1){ bos.write(buf, 0, len); } bis.close(); bos.flush(); } bos.close(); }catch(Exception e){ e.printStackTrace(); } } }