package com.izouma.awesomeadmin.web;
import com.izouma.awesomeadmin.constant.AppConstant;
import com.izouma.awesomeadmin.dto.Page;
import com.izouma.awesomeadmin.dto.Result;
import com.izouma.awesomeadmin.model.ImageUploadLog;
import com.izouma.awesomeadmin.model.OrderImage;
import com.izouma.awesomeadmin.model.UserOrder;
import com.izouma.awesomeadmin.service.ImageUploadLogService;
import com.izouma.awesomeadmin.service.OSSFileService;
import com.izouma.awesomeadmin.service.OrderImageService;
import com.izouma.awesomeadmin.service.UserOrderService;
import com.izouma.awesomeadmin.util.ExportExcelUtil;
import com.izouma.awesomeadmin.util.ImagesUtil;
import com.izouma.awesomeadmin.util.PropertiesFileLoader;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.List;
/**
* controller类
*/
@Controller
@RequestMapping("/orderImage")
public class OrderImageController {
/**
* 日志对象zipFilesDown
*/
private static Logger logger = Logger.getLogger(OrderImageController.class);
@Autowired
private OrderImageService orderImageService;
@Autowired
private UserOrderService userOrderService;
@Autowired
private OSSFileService OSSFileService;
@Autowired
private ImageUploadLogService imageUploadLogService;
/**
*
获取全部记录。
*/
@RequiresAuthentication
@RequestMapping(value = "/all", method = RequestMethod.GET)
@ResponseBody
public Result all(OrderImage record) {
List pp = orderImageService.getOrderImageList(record);
return new Result(true, pp);
}
/**
* 根据Id。
*/
@RequestMapping(value = "/getOrderImage", method = RequestMethod.GET)
@ResponseBody
public Result getOrderImage(@RequestParam(required = false, value = "id") String id) {
OrderImage data = orderImageService.getOrderImageById(id);
return new Result(true, data);
}
/**
* 根据条件获取。
*/
@RequestMapping(value = "/getOne", method = RequestMethod.GET)
@ResponseBody
public Result getOne(OrderImage record) {
OrderImage data = orderImageService.getOrderImage(record);
return new Result(true, data);
}
/**
* 分页查询。
*/
@RequestMapping(value = "/page", method = RequestMethod.GET)
@ResponseBody
public Result page(Page page, OrderImage record) {
Map result = new HashMap<>();
List pp = orderImageService.getOrderImageByPage(page, record);
result.put(AppConstant.PAGE, page);
result.put("pp", pp);
return new Result(true, result);
}
/**
* 保存。
*/
@RequestMapping(value = "/save", method = RequestMethod.POST)
@ResponseBody
public Result save(OrderImage record) {
boolean num = orderImageService.createOrderImage(record);
if (num) {
return new Result(true, record.getId());
}
return new Result(false, "保存异常");
}
/**
* 更新信息。
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
@ResponseBody
public Result updateOrderImage(OrderImage record) {
boolean num = orderImageService.updateOrderImage(record);
if (num) {
return new Result(true, "保存成功");
}
return new Result(false, "保存异常");
}
/**
* 删除。
*/
@RequestMapping(value = "/del", method = RequestMethod.POST)
@ResponseBody
public Result deleteOrderImage(@RequestParam(required = true, value = "id") String id) {
boolean num = orderImageService.deleteOrderImage(id);
if (num) {
return new Result(true, "删除成功");
}
return new Result(false, "删除异常");
}
/**
* 导出Excel
*
* @param request
* @param response
* @param record
* @throws Exception
*/
@RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
@ResponseBody
public void exportExcel(HttpServletRequest request, HttpServletResponse response, OrderImage record) throws Exception {
List orderImages = orderImageService.getOrderImageList(record);
String sheetName = "order_image";
String titleName = "订单图片数据表";
String fileName = "订单图片表";
int columnNumber = 16;
int[] columnWidth = {20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20};
String[] columnName = {"", "删除标识", "更新时间", "更新人", "创建时间", "创建人", "订单", "用户", "店铺", "原片地址", "原片大小", "成片地址", "成片大小", "修图人", "状态", "备注"};
String[][] dataList = new String[orderImages.size()][16];
for (int i = 0; i < orderImages.size(); i++) {
dataList[i][0] = String.valueOf(orderImages.get(i).getId());
dataList[i][1] = String.valueOf(orderImages.get(i).getDelFlag());
dataList[i][2] = String.valueOf(orderImages.get(i).getUpdateTime());
dataList[i][3] = String.valueOf(orderImages.get(i).getUpdateUser());
dataList[i][4] = String.valueOf(orderImages.get(i).getCreateTime());
dataList[i][5] = String.valueOf(orderImages.get(i).getCreateUser());
dataList[i][6] = String.valueOf(orderImages.get(i).getOrderId());
dataList[i][7] = String.valueOf(orderImages.get(i).getUserId());
dataList[i][8] = String.valueOf(orderImages.get(i).getStoreId());
dataList[i][9] = String.valueOf(orderImages.get(i).getOriginalImage());
dataList[i][10] = String.valueOf(orderImages.get(i).getOriginalSize());
dataList[i][11] = String.valueOf(orderImages.get(i).getFinishedImage());
dataList[i][12] = String.valueOf(orderImages.get(i).getFinishedSize());
dataList[i][13] = String.valueOf(orderImages.get(i).getDealUser());
dataList[i][14] = String.valueOf(orderImages.get(i).getStatusFlag());
dataList[i][15] = String.valueOf(orderImages.get(i).getRemark());
}
ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
columnNumber, columnWidth, columnName, dataList, response);
}
/**
* 返修。
*/
@RequestMapping(value = "/repair", method = RequestMethod.POST)
@ResponseBody
public Result repair(OrderImage record) {
boolean num = orderImageService.repair(record);
if (num) {
return new Result(true, "保存成功");
}
return new Result(false, "保存异常");
}
@RequestMapping(value = "/uploadFileForOrder")
@ResponseBody
public Result uploadFile(HttpServletRequest request, String storeId, String orderId, String userId, String typeFlag) {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator it = multiRequest.getFileNames();
List paths = new ArrayList<>();
while (it.hasNext()) {
MultipartFile file = multiRequest.getFile(it.next().toString());
if (file != null) {
try {
String originalFilename = file.getOriginalFilename();
long srcSize = file.getSize();
String uploadPath = storeId + "/" + orderId + "/" + typeFlag + "/" + originalFilename;
String path = OSSFileService.upload(file.getInputStream(), uploadPath);
ImageUploadLog imageUploadLog = new ImageUploadLog();
imageUploadLog.setStoreId(storeId);
imageUploadLog.setOrderId(orderId);
imageUploadLog.setTypeFlag(typeFlag);
imageUploadLog.setUserId(userId);
imageUploadLog.setImageName(originalFilename);
imageUploadLog.setUrl(path);
imageUploadLog.setArtworkUrl(path);
imageUploadLog.setImageSize(BigDecimal.valueOf(file.getSize()));
int bigSize = 2 * 1024 * 1024;
if (srcSize > bigSize) {
String minPath = storeId + "/" + orderId + "/" + typeFlag + "/" + "min/" + originalFilename;
String min = OSSFileService.upload(ImagesUtil.changeMinPhoto(
file.getInputStream(),
originalFilename.split("[.]")[1],
2000, 1), minPath);
imageUploadLog.setUrl(min);
}
imageUploadLogService.createImageUploadLog(imageUploadLog);
paths.add(imageUploadLog);
} catch (IOException e) {
logger.error("上传订单图片失败", e);
return new Result(false, "上传失败");
}
}
}
return new Result(true, paths);
}
return new Result(false, "上传失败");
}
/**
* 清空未使用图片
*
* @param orderId
* @return
*/
@RequestMapping(value = "/delOssImage", method = RequestMethod.POST)
@ResponseBody
public Result delOssImage(@RequestParam(required = true, value = "orderId") String orderId) {
List imageUploadLogs = imageUploadLogService.queryDelOssImage(orderId);
for (ImageUploadLog imageUploadLog : imageUploadLogs) {
String imageName = imageUploadLog.getUrl().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.deleteObject(imageName);
if (StringUtils.isNotEmpty(imageUploadLog.getArtworkUrl()) && !imageUploadLog.getUrl().equals(imageUploadLog.getArtworkUrl())) {
String artwork = imageUploadLog.getArtworkUrl().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.deleteObject(artwork);
}
}
return new Result(true, "删除成功");
}
/**
* 批量更新成片
*
* @param orderId
* @param imageIds
* @return
*/
@RequestMapping(value = "/updateFinishedImages", method = RequestMethod.POST)
@ResponseBody
public Result updateFinishedImages(@RequestParam(required = true, value = "orderId") String orderId, @RequestParam(required = true, value = "imageIds") String imageIds) {
ImageUploadLog record = new ImageUploadLog();
record.setOrderId(orderId);
record.setIdStr(imageIds);
List imageUploadLogs = imageUploadLogService.getImageUploadLogList(record);
for (ImageUploadLog imageUploadLog : imageUploadLogs) {
OrderImage orderImage = new OrderImage();
orderImage.setOrderId(orderId);
orderImage.setImageName(imageUploadLog.getImageName());
orderImage = orderImageService.getOrderImage(orderImage);
if (orderImage != null) {
if (orderImage.getStatusFlag() != 1) {
orderImage.setStatusFlag(0);
orderImage.setFinishedImage(imageUploadLog.getUrl());
orderImage.setFinishedSize(imageUploadLog.getImageSize());
orderImage.setFinishedArtwork(imageUploadLog.getArtworkUrl());
orderImageService.updateOrderImage(orderImage);
}
}
}
return new Result(true, "保存成功");
}
/**
* 获取店铺存储情况
*
* @param record
* @return
*/
@RequestMapping(value = "/getMemorySize", method = RequestMethod.GET)
@ResponseBody
public Result getMemorySize(OrderImage record) {
OrderImage data = orderImageService.getMemorySize(record);
return new Result(true, data);
}
/**
* 下载压缩包
*
* @param orderId 订单ID
* @param typeFlag 类型 original / finished
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/zipFilesDown", method = RequestMethod.GET)
@ResponseBody
public void zipFilesDown(@RequestParam(required = true, value = "orderId") String orderId,
@RequestParam(required = true, value = "typeFlag") String typeFlag,
HttpServletRequest request, HttpServletResponse response) {
try {
OrderImage record = new OrderImage();
record.setOrderId(orderId);
List orderImageList = orderImageService.getOrderImageList(record);
if (orderImageList.size() > 0) {
UserOrder userOrder = userOrderService.getUserOrderById(orderId);
if (userOrder != null) {
List keyList = new ArrayList<>();
String zipName = userOrder.getOrderCode() + "_" + typeFlag;
for (OrderImage orderImage : orderImageList) {
if ("original".equals(typeFlag)) {
if (StringUtils.isNotEmpty(orderImage.getOriginalImage())) {
if (StringUtils.isNotEmpty(orderImage.getOriginalArtwork())) {
String imageName = orderImage.getOriginalArtwork().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
keyList.add(imageName);
} else {
String imageName = orderImage.getOriginalImage().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
keyList.add(imageName);
}
}
} else if ("finished".equals(typeFlag)) {
if (StringUtils.isNotEmpty(orderImage.getFinishedImage())) {
if (StringUtils.isNotEmpty(orderImage.getFinishedArtwork())) {
String imageName = orderImage.getFinishedArtwork().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
keyList.add(imageName);
} else {
String imageName = orderImage.getFinishedImage().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
keyList.add(imageName);
}
//更新成已下载
orderImage.setDownloadFlag("Y");
orderImageService.updateOrderImage(orderImage);
}
}
}
if (keyList.size() > 0) {
OSSFileService.zipFilesDown(keyList, zipName, request, response);
}
}
}
} catch (Exception e) {
logger.error("zipFilesDown,批量下载异常", e);
}
}
/**
* 单张下载
*
* @param id orderImage id
* @param typeFlag 类型 original / finished
* @param request
* @param response
*/
@RequestMapping(value = "/singleFileDown", method = RequestMethod.GET)
@ResponseBody
public void singleFileDown(@RequestParam(required = true, value = "id") String id,
@RequestParam(required = true, value = "typeFlag") String typeFlag,
HttpServletRequest request, HttpServletResponse response) {
try {
OrderImage orderImage = orderImageService.getOrderImageById(id);
if (orderImage != null) {
if ("original".equals(typeFlag)) {
if (StringUtils.isNotEmpty(orderImage.getOriginalImage())) {
if (StringUtils.isNotEmpty(orderImage.getOriginalArtwork())) {
String imageName = orderImage.getOriginalArtwork().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.singleFileDown(imageName, request, response);
} else {
String imageName = orderImage.getOriginalImage().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.singleFileDown(imageName, request, response);
}
}
} else if ("finished".equals(typeFlag)) {
if (StringUtils.isNotEmpty(orderImage.getFinishedImage())) {
if (StringUtils.isNotEmpty(orderImage.getFinishedArtwork())) {
String imageName = orderImage.getFinishedArtwork().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.singleFileDown(imageName, request, response);
} else {
String imageName = orderImage.getFinishedImage().replace(PropertiesFileLoader.getProperties("aliImageSever") + "/", "");
OSSFileService.singleFileDown(imageName, request, response);
}
//更新成已下载
orderImage.setDownloadFlag("Y");
orderImageService.updateOrderImage(orderImage);
}
}
}
} catch (Exception e) {
logger.error("singleFileDown,单张下载异常", e);
}
}
@RequestMapping(value = "/autoCleanOrderImage", method = RequestMethod.GET)
@ResponseBody
public Result autoCleanOrderImage() {
return orderImageService.autoCleanOrderImage(null);
}
}