371 lines
14 KiB
Java
371 lines
14 KiB
Java
package com.jsh.erp.controller;
|
||
|
||
import com.alibaba.fastjson.JSONArray;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.jsh.erp.base.BaseController;
|
||
import com.jsh.erp.base.TableDataInfo;
|
||
import com.jsh.erp.datasource.entities.SystemConfig;
|
||
import com.jsh.erp.service.SystemConfigService;
|
||
import com.jsh.erp.utils.*;
|
||
import io.swagger.annotations.Api;
|
||
import io.swagger.annotations.ApiOperation;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.util.AntPathMatcher;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import org.springframework.web.multipart.MultipartFile;
|
||
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||
import org.springframework.web.servlet.HandlerMapping;
|
||
|
||
import javax.annotation.Resource;
|
||
import javax.imageio.ImageIO;
|
||
import javax.servlet.http.HttpServletRequest;
|
||
import javax.servlet.http.HttpServletResponse;
|
||
import java.awt.image.BufferedImage;
|
||
import java.io.*;
|
||
import java.net.HttpURLConnection;
|
||
import java.net.URL;
|
||
import java.util.HashMap;
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
|
||
import static com.jsh.erp.utils.ResponseJsonUtil.returnJson;
|
||
import static com.jsh.erp.utils.ResponseJsonUtil.returnStr;
|
||
|
||
/**
|
||
* Description
|
||
* @Author: jishenghua
|
||
* @Date: 2021-3-13 0:01
|
||
*/
|
||
@RestController
|
||
@RequestMapping(value = "/systemConfig")
|
||
@Api(tags = {"系统参数"})
|
||
public class SystemConfigController extends BaseController {
|
||
private Logger logger = LoggerFactory.getLogger(SystemConfigController.class);
|
||
|
||
@Resource
|
||
private SystemConfigService systemConfigService;
|
||
|
||
@Value(value="${file.uploadType}")
|
||
private Long fileUploadType;
|
||
|
||
@Value(value="${file.path}")
|
||
private String filePath;
|
||
|
||
@Value(value="${spring.servlet.multipart.max-file-size}")
|
||
private Long maxFileSize;
|
||
|
||
@Value(value="${spring.servlet.multipart.max-request-size}")
|
||
private Long maxRequestSize;
|
||
|
||
@GetMapping(value = "/info")
|
||
@ApiOperation(value = "根据id获取信息")
|
||
public String getList(@RequestParam("id") Long id,
|
||
HttpServletRequest request) throws Exception {
|
||
SystemConfig systemConfig = systemConfigService.getSystemConfig(id);
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
if(systemConfig != null) {
|
||
objectMap.put("info", systemConfig);
|
||
return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
|
||
} else {
|
||
return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
|
||
}
|
||
}
|
||
|
||
@GetMapping(value = "/list")
|
||
@ApiOperation(value = "获取信息列表")
|
||
public TableDataInfo getList(@RequestParam(value = Constants.SEARCH, required = false) String search,
|
||
HttpServletRequest request)throws Exception {
|
||
String companyName = StringUtil.getInfo(search, "companyName");
|
||
List<SystemConfig> list = systemConfigService.select(companyName);
|
||
return getDataTable(list);
|
||
}
|
||
|
||
@PostMapping(value = "/add")
|
||
@ApiOperation(value = "新增")
|
||
public String addResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
int insert = systemConfigService.insertSystemConfig(obj, request);
|
||
return returnStr(objectMap, insert);
|
||
}
|
||
|
||
@PutMapping(value = "/update")
|
||
@ApiOperation(value = "修改")
|
||
public String updateResource(@RequestBody JSONObject obj, HttpServletRequest request)throws Exception {
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
int update = systemConfigService.updateSystemConfig(obj, request);
|
||
return returnStr(objectMap, update);
|
||
}
|
||
|
||
@DeleteMapping(value = "/delete")
|
||
@ApiOperation(value = "删除")
|
||
public String deleteResource(@RequestParam("id") Long id, HttpServletRequest request)throws Exception {
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
int delete = systemConfigService.deleteSystemConfig(id, request);
|
||
return returnStr(objectMap, delete);
|
||
}
|
||
|
||
@DeleteMapping(value = "/deleteBatch")
|
||
@ApiOperation(value = "批量删除")
|
||
public String batchDeleteResource(@RequestParam("ids") String ids, HttpServletRequest request)throws Exception {
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
int delete = systemConfigService.batchDeleteSystemConfig(ids, request);
|
||
return returnStr(objectMap, delete);
|
||
}
|
||
|
||
@GetMapping(value = "/checkIsNameExist")
|
||
@ApiOperation(value = "检查名称是否存在")
|
||
public String checkIsNameExist(@RequestParam Long id, @RequestParam(value ="name", required = false) String name,
|
||
HttpServletRequest request)throws Exception {
|
||
Map<String, Object> objectMap = new HashMap<>();
|
||
int exist = systemConfigService.checkIsNameExist(id, name);
|
||
if(exist > 0) {
|
||
objectMap.put("status", true);
|
||
} else {
|
||
objectMap.put("status", false);
|
||
}
|
||
return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
|
||
}
|
||
|
||
/**
|
||
* 获取当前租户的配置信息
|
||
* @param request
|
||
* @return
|
||
*/
|
||
@GetMapping(value = "/getCurrentInfo")
|
||
@ApiOperation(value = "获取当前租户的配置信息")
|
||
public BaseResponseInfo getCurrentInfo(HttpServletRequest request) throws Exception {
|
||
BaseResponseInfo res = new BaseResponseInfo();
|
||
try{
|
||
List<SystemConfig> list = systemConfigService.getSystemConfig();
|
||
res.code = 200;
|
||
if(list.size()>0) {
|
||
res.data = list.get(0);
|
||
}
|
||
} catch(Exception e){
|
||
logger.error(e.getMessage(), e);
|
||
res.code = 500;
|
||
res.data = "获取数据失败";
|
||
}
|
||
return res;
|
||
}
|
||
|
||
/**
|
||
* 获取文件大小限制
|
||
* @param request
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
@GetMapping(value = "/fileSizeLimit")
|
||
@ApiOperation(value = "获取文件大小限制")
|
||
public BaseResponseInfo fileSizeLimit(HttpServletRequest request) throws Exception {
|
||
BaseResponseInfo res = new BaseResponseInfo();
|
||
try{
|
||
Long limit = 0L;
|
||
if(maxFileSize<maxRequestSize) {
|
||
limit = maxFileSize;
|
||
} else {
|
||
limit = maxRequestSize;
|
||
}
|
||
res.code = 200;
|
||
res.data = limit;
|
||
} catch(Exception e){
|
||
logger.error(e.getMessage(), e);
|
||
res.code = 500;
|
||
res.data = "获取数据失败";
|
||
}
|
||
return res;
|
||
}
|
||
|
||
/**
|
||
* 文件上传统一方法
|
||
* @param request
|
||
* @param response
|
||
* @return
|
||
*/
|
||
@PostMapping(value = "/upload")
|
||
@ApiOperation(value = "文件上传统一方法")
|
||
public BaseResponseInfo upload(HttpServletRequest request, HttpServletResponse response) {
|
||
BaseResponseInfo res = new BaseResponseInfo();
|
||
try {
|
||
String savePath = "";
|
||
String bizPath = request.getParameter("biz");
|
||
if ("bill".equals(bizPath) || "financial".equals(bizPath) || "material".equals(bizPath)) {
|
||
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
|
||
MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
|
||
if(fileUploadType == 1) {
|
||
savePath = systemConfigService.uploadLocal(file, bizPath, request);
|
||
} else if(fileUploadType == 2) {
|
||
savePath = systemConfigService.uploadAliOss(file, bizPath, request);
|
||
}
|
||
if(StringUtil.isNotEmpty(savePath)){
|
||
res.code = 200;
|
||
res.data = savePath;
|
||
}else {
|
||
res.code = 500;
|
||
res.data = "上传失败!";
|
||
}
|
||
} else {
|
||
res.code = 505;
|
||
res.data = "文件分类错误!";
|
||
}
|
||
} catch (Exception e) {
|
||
logger.error(e.getMessage(), e);
|
||
res.code = 500;
|
||
res.data = "上传失败!";
|
||
}
|
||
return res;
|
||
}
|
||
|
||
/**
|
||
* 预览图片&下载文件
|
||
* 请求地址:http://localhost:8080/common/static/{financial/afsdfasdfasdf_1547866868179.txt}
|
||
*
|
||
* @param request
|
||
* @param response
|
||
*/
|
||
@GetMapping(value = "/static/**")
|
||
@ApiOperation(value = "预览图片&下载文件")
|
||
public void view(HttpServletRequest request, HttpServletResponse response) {
|
||
// ISO-8859-1 ==> UTF-8 进行编码转换
|
||
String imgPath = extractPathFromPattern(request);
|
||
if(StringUtil.isEmpty(imgPath) || imgPath=="null"){
|
||
return;
|
||
}
|
||
// 其余处理略
|
||
InputStream inputStream = null;
|
||
OutputStream outputStream = null;
|
||
try {
|
||
imgPath = imgPath.replace("..", "");
|
||
if (imgPath.endsWith(",")) {
|
||
imgPath = imgPath.substring(0, imgPath.length() - 1);
|
||
}
|
||
String fileUrl = "";
|
||
if(fileUploadType == 1) {
|
||
fileUrl = systemConfigService.getFileUrlLocal(imgPath);
|
||
inputStream = new BufferedInputStream(new FileInputStream(fileUrl));
|
||
} else if(fileUploadType == 2) {
|
||
fileUrl = systemConfigService.getFileUrlAliOss(imgPath);
|
||
URL url = new URL(fileUrl);
|
||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||
conn.setRequestMethod("GET");
|
||
conn.setConnectTimeout(5 * 1000);
|
||
inputStream = conn.getInputStream();// 通过输入流获取图片数据
|
||
}
|
||
outputStream = response.getOutputStream();
|
||
byte[] buf = new byte[1024];
|
||
int len;
|
||
while ((len = inputStream.read(buf)) > 0) {
|
||
outputStream.write(buf, 0, len);
|
||
}
|
||
response.flushBuffer();
|
||
} catch (IOException e) {
|
||
logger.error("预览文件失败" + e.getMessage());
|
||
response.setStatus(404);
|
||
logger.error(e.getMessage(), e);
|
||
} catch (Exception e) {
|
||
response.setStatus(404);
|
||
logger.error(e.getMessage(), e);
|
||
} finally {
|
||
if (inputStream != null) {
|
||
try {
|
||
inputStream.close();
|
||
} catch (IOException e) {
|
||
logger.error(e.getMessage(), e);
|
||
}
|
||
}
|
||
if (outputStream != null) {
|
||
try {
|
||
outputStream.close();
|
||
} catch (IOException e) {
|
||
logger.error(e.getMessage(), e);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 预览缩略图&下载文件
|
||
* @param request
|
||
* @param response
|
||
*/
|
||
@GetMapping(value = "/static/mini/**")
|
||
@ApiOperation(value = "预览缩略图&下载文件")
|
||
public void viewMini(HttpServletRequest request, HttpServletResponse response) {
|
||
// ISO-8859-1 ==> UTF-8 进行编码转换
|
||
String imgPath = extractPathFromPattern(request);
|
||
if(StringUtil.isEmpty(imgPath) || imgPath=="null"){
|
||
return;
|
||
}
|
||
InputStream inputStream = null;
|
||
OutputStream outputStream = null;
|
||
try {
|
||
imgPath = imgPath.replace("..", "");
|
||
if (imgPath.endsWith(",")) {
|
||
imgPath = imgPath.substring(0, imgPath.length() - 1);
|
||
}
|
||
String fileUrl = "";
|
||
if(fileUploadType == 1) {
|
||
fileUrl = systemConfigService.getFileUrlLocal(imgPath);
|
||
inputStream = new BufferedInputStream(new FileInputStream(fileUrl));
|
||
} else if(fileUploadType == 2) {
|
||
fileUrl = systemConfigService.getFileUrlAliOss(imgPath);
|
||
URL url = new URL(fileUrl);
|
||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||
conn.setRequestMethod("GET");
|
||
conn.setConnectTimeout(5 * 1000);
|
||
inputStream = conn.getInputStream();// 通过输入流获取图片数据
|
||
}
|
||
int index = fileUrl.lastIndexOf(".");
|
||
String ext = fileUrl.substring(index + 1);
|
||
BufferedImage image = systemConfigService.getImageMini(inputStream, 80);
|
||
outputStream = response.getOutputStream();
|
||
ImageIO.write(image, ext, outputStream);
|
||
response.flushBuffer();
|
||
} catch (Exception e) {
|
||
response.setStatus(404);
|
||
logger.error(e.getMessage(), e);
|
||
} finally {
|
||
if (outputStream != null) {
|
||
try {
|
||
outputStream.close();
|
||
} catch (IOException e) {
|
||
logger.error(e.getMessage(), e);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Excel导出统一接口
|
||
* @param response
|
||
*/
|
||
@PostMapping(value = "/exportExcelByParam")
|
||
@ApiOperation(value = "生成excel表格")
|
||
public void exportExcelByParam(@RequestBody JSONObject jsonObject,
|
||
HttpServletResponse response) {
|
||
try {
|
||
String title = jsonObject.getString("title");
|
||
String head = jsonObject.getString("head");
|
||
String tip = jsonObject.getString("tip");
|
||
JSONArray arr = jsonObject.getJSONArray("list");
|
||
systemConfigService.exportExcelByParam(title, head, tip, arr, response);
|
||
} catch (Exception e) {
|
||
logger.error(e.getMessage(), e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 把指定URL后的字符串全部截断当成参数
|
||
* 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题
|
||
* @param request
|
||
* @return
|
||
*/
|
||
private static String extractPathFromPattern(final HttpServletRequest request) {
|
||
String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
|
||
String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
|
||
return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path);
|
||
}
|
||
}
|