Commit 98b55b93 authored by trumansdo's avatar trumansdo
Browse files

测试98 after emitting copyplugin 问题

parent aa115e88
package com.ibeetl.admin.core.conf.springmvc.interceptor;
import com.ibeetl.admin.core.service.CoreUserService;
import com.ibeetl.admin.core.util.HttpRequestLocal;
import com.ibeetl.admin.core.util.JoseJwtUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.HandlerInterceptor;
public class SessionInterceptor implements HandlerInterceptor {
CoreUserService userService;
public SessionInterceptor(CoreUserService userService) {
this.userService = userService;
}
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response, Object handler) {
String token = HttpRequestLocal.getAuthorization();
boolean isExpiration = JoseJwtUtil.verifyJwtJson(token);
if (isExpiration) {
/*验证失败,无效jwt*/
return false;
} else {
token = JoseJwtUtil.refreshIssuedAtTime(token);
response.setHeader(HttpHeaders.AUTHORIZATION, token);
}
return true;
}
}
package com.ibeetl.admin.core.conf.springmvc.resolve;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.TypeUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ibeetl.admin.core.annotation.RequestBodyPlus;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.core.MethodParameter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.util.Assert;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor;
/** 自定义SpringMVC的controller方法的参数注解 {@link RequestBodyPlus} 的注入解析, 用json path 的方式注入json请求的参数 */
public class RequestBodyPlusProcessor extends AbstractMessageConverterMethodProcessor {
private static final ThreadLocal<String> bodyLocal = ThreadLocal.withInitial(() -> "{}");
public RequestBodyPlusProcessor(List<HttpMessageConverter<?>> converters) {
super(converters);
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(RequestBodyPlus.class);
}
@Override
public Object resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
throws Exception {
parameter = parameter.nestedIfOptional();
/*非json请求过滤*/
Class<?> parameterClass = parameter.getNestedParameterType();
if (!StrUtil.containsAny(
webRequest.getHeader(HttpHeaders.CONTENT_TYPE), MediaType.APPLICATION_JSON_VALUE)) {
return ReflectUtil.newInstanceIfPossible(parameterClass);
}
HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);
Assert.state(servletRequest != null, "No HttpServletRequest");
ServletServerHttpRequest inputMessage = new ServletServerHttpRequest(servletRequest);
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
String jsonBody;
try {
String readBody = stringHttpMessageConverter.read(String.class, inputMessage);
/*每一个参数的注入都会读取一次输入流,但是request的输入流不可重复读,所以需要保持下来*/
if (StrUtil.isBlank(readBody)) {
jsonBody = bodyLocal.get();
} else {
bodyLocal.set(readBody);
jsonBody = bodyLocal.get();
}
} catch (IOException e) {
logger.error("Can't read request body by input stream : {}", e);
jsonBody = bodyLocal.get();
}
RequestBodyPlus requestBodyPlus = parameter.getParameterAnnotation(RequestBodyPlus.class);
JSON json = JSONUtil.parse(jsonBody);
Object parseVal = json.getByPath(requestBodyPlus.value(), parameterClass);
if (parseVal instanceof Map) {
JSONObject jsonObject = JSONUtil.parseObj(parseVal);
parseVal = JSONUtil.toBean(jsonObject, parameter.getNestedGenericParameterType(), true);
} else if (parseVal instanceof List) {
JSONArray jsonArray = JSONUtil.parseArray(parseVal);
Type parameterType = TypeUtil.getTypeArgument(parameter.getNestedGenericParameterType());
Class parameterTypeClass =
null == parameterType ? Object.class : ClassUtil.loadClass(parameterType.getTypeName());
parseVal = JSONUtil.toList(jsonArray, parameterTypeClass);
}
return parseVal;
}
@Override
public boolean supportsReturnType(MethodParameter returnType) {
return false;
}
@Override
public void handleReturnValue(
Object returnValue,
MethodParameter returnType,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest) {}
}
package com.ibeetl.admin.core.conf.springmvc.resolve;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.util.enums.DictTypeEnum;
import java.util.Iterator;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
/**
* Class UnderlineToCamelArgumentResolver : <br>
* 描述:处理请求参数的命名由下划线等转驼峰命名。<br>
* 但是与另一个{@link DictTypeEnum} 枚举处理有冲突,所以交给前端处理命名转换
*
* @author 一日看尽长安花 Created on 2020/2/2
*/
public class UnderlineToCamelArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return true;
}
@Override
public Object resolveArgument(
MethodParameter parameter,
ModelAndViewContainer container,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) {
return handleParameterNames(parameter, webRequest);
}
private Object handleParameterNames(MethodParameter parameter, NativeWebRequest webRequest) {
Object obj = ReflectUtil.newInstanceIfPossible(parameter.getParameterType());
BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(obj);
Iterator<String> paramNames = webRequest.getParameterNames();
while (paramNames.hasNext()) {
String paramName = paramNames.next();
Object o = webRequest.getParameter(paramName);
try {
wrapper.setPropertyValue(StrUtil.toCamelCase(paramName), o);
} catch (BeansException e) {
}
}
return obj;
}
}
......@@ -2,9 +2,11 @@ package com.ibeetl.admin.core.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import org.beetl.sql.core.annotatoin.AssignID;
import org.beetl.sql.core.annotatoin.AutoID;
import org.beetl.sql.core.annotatoin.SeqID;
......@@ -18,6 +20,7 @@ import com.ibeetl.admin.core.util.ValidateConfig;
*
* @author : xiandafu
*/
@Data
public class CoreDict extends BaseEntity {
@NotNull(message = "ID不能为空", groups = ValidateConfig.UPDATE.class)
......@@ -47,90 +50,7 @@ public class CoreDict extends BaseEntity {
private Long parent; // 父Id
private String remark; // 备注
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public Long getParent() {
return parent;
}
public void setParent(Long parent) {
this.parent = parent;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getDelFlag() {
return delFlag;
}
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
private List<CoreDict> children;
public interface TypeListView {}
@Override
public String toString() {
return "CoreDict [value=" + value + ", type=" + type + ", name=" + name + "]";
}
}
......@@ -2,9 +2,11 @@ package com.ibeetl.admin.core.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
import org.beetl.sql.core.annotatoin.AutoID;
import org.beetl.sql.core.annotatoin.SeqID;
......@@ -17,6 +19,7 @@ import com.ibeetl.admin.core.util.enums.CoreDictType;
* 机构对象, 有母公司,一个系统只有一个母公司,多个集团,集团下可以有多个公司,子公司,部门。如果系统不符合这个设定,需要修改· <br>
* 映射了上级机构,可以通过org.parentOrg.xxx取上级机构的属性
*/
@Data
public class CoreOrg extends BaseEntity {
// 自增id
......@@ -48,59 +51,5 @@ public class CoreOrg extends BaseEntity {
@NotBlank(message = "组织类型不能为空", groups = ValidateConfig.class)
private String type;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getParentOrgId() {
return parentOrgId;
}
public void setParentOrgId(Long parentOrgId) {
this.parentOrgId = parentOrgId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Integer getDelFlag() {
return delFlag;
}
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
private List<CoreOrg> chidren;
}
package com.ibeetl.admin.core.entity;
import com.ibeetl.admin.core.annotation.ElColumn;
import com.ibeetl.admin.core.util.enums.ElColumnType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.annotation.Dict;
import com.ibeetl.admin.core.util.ValidateConfig;
import com.ibeetl.admin.core.util.enums.CoreDictType;
import com.ibeetl.admin.core.util.enums.JobTypeEnum;
import com.ibeetl.admin.core.util.enums.StateTypeEnum;
import java.util.Date;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.beetl.sql.core.annotatoin.AutoID;
import org.beetl.sql.core.annotatoin.SeqID;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.annotation.Dict;
import com.ibeetl.admin.core.util.ValidateConfig;
import com.ibeetl.admin.core.util.enums.CoreDictType;
/*
* 用户实体
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CoreUser extends BaseEntity {
@NotNull(message = "ID不能为空", groups = ValidateConfig.UPDATE.class)
......@@ -38,13 +34,16 @@ public class CoreUser extends BaseEntity {
// 登录名,编号
@NotBlank(message = "用户编号不能为空", groups = ValidateConfig.ADD.class)
@Null(message = "用户编号不能为空", groups = ValidateConfig.UPDATE.class)
@NotNull(message = "用户编号不能为空", groups = ValidateConfig.UPDATE.class)
private String code;
// 用户姓名
@NotBlank(message = "用户名不能为空")
private String name;
/** 机构 */
private CoreOrg org;
/*机构id*/
private Long orgId;
......
package com.ibeetl.admin.core.entity;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
/** 前端级联器的数据格式类 */
/** element-ui前端级联器的数据格式类 */
@Data
@NoArgsConstructor
public class ElCascaderData {
private Object id;
private String label;
private Object value;
private List<ElCascaderData> children;
}
package com.ibeetl.admin.core.file;
import java.io.OutputStream;
public abstract class PersistFileItem extends FileItem {
protected Long id;
protected Long userId;
......
package com.ibeetl.admin.core.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.web.JsonResult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.validation.constraints.NotBlank;
import org.beetl.sql.core.mapper.internal.LambdaQueryAmi;
import org.beetl.sql.core.query.LambdaQuery;
import org.beetl.sql.core.query.Query;
......@@ -19,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
import com.ibeetl.admin.core.dao.CoreDictDao;
import com.ibeetl.admin.core.entity.CoreDict;
import com.ibeetl.admin.core.util.enums.DelFlagEnum;
import org.springframework.validation.annotation.Validated;
/**
* 描述: 字典 service,包含常规字典和级联字典的操作。
......@@ -98,6 +105,82 @@ public class CoreDictService extends CoreBaseService<CoreDict> {
return null;
}
/**
* 将数据库中所有字典构建成一个树集。方便前端某些树组件快速获取数据.
*
* @author 一日看尽长安花
* @return List<CoreDict>
*/
@Cacheable(value = CorePlatformService.DICT_CACHE_TREE_LIST)
public List<CoreDict> allCoreDictsTree() {
List<CoreDict> coreDictList =
dictDao.createLambdaQuery().andEq(CoreDict::getDelFlag, DelFlagEnum.NORMAL).select();
CoreDict virtualRoot = new CoreDict();
virtualRoot.setId(0L);
buildListTree(virtualRoot, coreDictList);
return virtualRoot.getChildren();
}
private void buildListTree(CoreDict parentDict, List<CoreDict> coreDictList) {
long parentId = parentDict.getId();
List<CoreDict> currentLevelDict = new ArrayList<>();
List<CoreDict> dels = new ArrayList<>();
for (CoreDict coreDict : coreDictList) {
if (coreDict.getParent() == null || coreDict.getParent() == parentId) {
currentLevelDict.add(coreDict);
dels.add(coreDict);
}
}
parentDict.setChildren(currentLevelDict);
coreDictList.removeAll(dels);
for (CoreDict nextLevelParent : currentLevelDict) {
buildListTree(nextLevelParent, coreDictList);
}
}
/**
* Method findChildrenNodes sets the ${FIELD_NAME} of this CoreDictService object.
*
* <p>在一个完整的字典树里,找到指定的字典子树
*
* @param parentId 要搜寻字典列表的父id,根级的父id为null或者0
* @param type 要搜寻的字典类型
* @author 一日看尽长安花
* @return List<CoreDict>
*/
@Validated
@Cacheable(value = CorePlatformService.DICT_CACHE_TREE_CHILDREN)
public List<CoreDict> findChildrenNodes(Long parentId, @NotBlank String type) {
parentId = parentId == null ? 0L : parentId;
List<CoreDict> allDictTreeList = self.allCoreDictsTree();
return breadthSearchChildrenNodes(allDictTreeList, parentId, type);
}
private List<CoreDict> breadthSearchChildrenNodes(
List<CoreDict> searchDicts, Long parentId, @NotBlank String type) {
List<CoreDict> _resultDicts = new ArrayList<>();
for (CoreDict dict : searchDicts) {
String dictType = dict.getType();
Long parent = Optional.ofNullable(dict.getParent()).orElse(0L);
if (parentId.equals(parent) && type.equals(dictType)) {
_resultDicts.add(dict);
}
}
if (_resultDicts.isEmpty()) {
for (CoreDict dict : searchDicts) {
List<CoreDict> dictChildren = dict.getChildren();
_resultDicts = breadthSearchChildrenNodes(dictChildren, parentId, type);
if (!_resultDicts.isEmpty()) {
break;
}
}
}
return _resultDicts;
}
/*通过名字反向查找数据字典,通常用于excel导入*/
public Map<String, CoreDict> mapDictByName(String type) {
List<CoreDict> list = self.findAllByType(type);
......
package com.ibeetl.admin.core.service;
import com.ibeetl.admin.core.dao.CoreOrgDao;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.util.enums.DelFlagEnum;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CoreOrgService {
@Autowired CoreOrgDao coreOrgDao;
@Autowired CoreOrgService self;
// @Cacheable(value = CorePlatformService.ORG_CACHE_TREE_LIST)
public List<CoreOrg> allCoreOrgsTree() {
List<CoreOrg> coreOrgList =
coreOrgDao.createLambdaQuery().andEq(CoreOrg::getDelFlag, DelFlagEnum.NORMAL).select();
CoreOrg virtualRoot = new CoreOrg();
virtualRoot.setId(0L);
buildListTree(virtualRoot, coreOrgList);
return virtualRoot.getChidren();
}
private void buildListTree(CoreOrg parentOrg, List<CoreOrg> coreOrgs) {
Long parentId = parentOrg.getId();
List<CoreOrg> currentLevelOrgs = new ArrayList<>();
List<CoreOrg> dels = new ArrayList<>();
for (CoreOrg coreOrg : coreOrgs) {
Long tempId = Optional.ofNullable(coreOrg.getParentOrgId()).orElse(0L);
if (tempId.equals(parentId)) {
currentLevelOrgs.add(coreOrg);
dels.add(coreOrg);
}
}
parentOrg.setChidren(currentLevelOrgs);
coreOrgs.removeAll(dels);
for (CoreOrg nextLevelParent : currentLevelOrgs) {
buildListTree(nextLevelParent, coreOrgs);
}
}
// @Cacheable(value = CorePlatformService.ORG_CACHE_TREE_CHILDREN)
public List<CoreOrg> findChildrenNodes(Long parentId) {
parentId = parentId == null ? 0L : parentId;
List<CoreOrg> allDictTreeList = self.allCoreOrgsTree();
return breadthSearchChildrenNodes(allDictTreeList, parentId);
}
private List<CoreOrg> breadthSearchChildrenNodes(
List<CoreOrg> searchOrgs, Long parentId) {
List<CoreOrg> _resultOrgs = new ArrayList<>();
for (CoreOrg org : searchOrgs) {
Long parent = Optional.ofNullable(org.getParentOrgId()).orElse(0L);
if (parentId.equals(parent)) {
_resultOrgs.add(org);
}
}
if (_resultOrgs.isEmpty()) {
for (CoreOrg org : searchOrgs) {
List<CoreOrg> dictChildren = org.getChidren();
_resultOrgs = breadthSearchChildrenNodes(dictChildren, parentId);
if (!_resultOrgs.isEmpty()) {
break;
}
}
}
return _resultOrgs;
}
}
......@@ -52,12 +52,17 @@ public class CorePlatformService {
// 菜单树,组织机构树,功能树缓存标记
public static final String MENU_TREE_CACHE = "cache:core:menuTree";
public static final String ORG_TREE_CACHE = "cache:core:orgTree";
public static final String ORG_CACHE_TREE_CHILDREN = "cache:core:orgTreeChildrens";
public static final String ORG_CACHE_TREE_LIST = "cache:core:orgTreeList";
public static final String FUNCTION_TREE_CACHE = "cache:core:functionTree";
// 字典列表
public static final String DICT_CACHE_TREE_CHILDREN = "cache:core:dictTreeChildrens";
public static final String DICT_CACHE_TREE_LIST = "cache:core:dictTreeList";
public static final String DICT_CACHE_TYPE = "cache:core:dictType";
public static final String DICT_CACHE_VALUE = "cache:core:dictValue";
public static final String DICT_CACHE_SAME_LEVEL = "cache:core:ditcSameLevel";
public static final String DICT_CACHE_CHILDREN = "cache:core:dictChildren";
public static final String USER_FUNCTION_ACCESS_CACHE = "cache:core:userFunctionAccess";
public static final String USER_FUNCTION_CHIDREN_CACHE = "ccache:core:functionChildren";
public static final String FUNCTION_CACHE = "cache:core:function";
......
package com.ibeetl.admin.core.util.enums;
import cn.hutool.core.util.EnumUtil;
/**
* Interface DictTypeEnum ... 描述:只是一个标记接口,任何一个字典枚举类都要实现该接口<br>
* 主要用于Jackson序列化处理
*
* @author Truma Created on 2020/1/12
*/
public interface DictTypeEnum {}
public interface DictTypeEnum<T> {
String getValue();
T findEnum(String value);
}
package com.ibeetl.admin.core.util.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import org.beetl.sql.core.annotatoin.EnumMapping;
@EnumMapping("value")
public enum JobTypeEnum implements DictTypeEnum {
public enum JobTypeEnum implements DictTypeEnum<JobTypeEnum> {
MANAGER("管理岗位", "JT_01", "job_type"),
TECHNOLOGY("技术岗位", "JT_02", "job_type"),
BOARD_OF_DIRECTORS("董事会", "JT_S_01", "job_sub_managment_type"),
......@@ -29,6 +31,7 @@ public enum JobTypeEnum implements DictTypeEnum {
this.name = name;
}
@JsonValue
public String getValue() {
return value;
}
......@@ -44,4 +47,16 @@ public enum JobTypeEnum implements DictTypeEnum {
public void setType(String type) {
this.type = type;
}
@JsonCreator
@Override
public JobTypeEnum findEnum(String value) {
JobTypeEnum[] values = values();
for (JobTypeEnum typeEnum : values) {
if (typeEnum.value.equals(value)) {
return typeEnum;
}
}
return null;
}
}
package com.ibeetl.admin.core.util.enums;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import org.beetl.sql.core.annotatoin.EnumMapping;
@EnumMapping("value")
public enum StateTypeEnum implements DictTypeEnum {
public enum StateTypeEnum implements DictTypeEnum<StateTypeEnum> {
S0("禁用", "S0", "user_state"),
S1("启用", "S1", "job_type");
......@@ -25,6 +27,7 @@ public enum StateTypeEnum implements DictTypeEnum {
this.name = name;
}
@JsonValue
public String getValue() {
return value;
}
......@@ -40,4 +43,16 @@ public enum StateTypeEnum implements DictTypeEnum {
public void setType(String type) {
this.type = type;
}
@JsonCreator
@Override
public StateTypeEnum findEnum(String value) {
StateTypeEnum[] values = values();
for (StateTypeEnum typeEnum : values) {
if (typeEnum.value.equals(value)) {
return typeEnum;
}
}
return null;
}
}
......@@ -7,13 +7,15 @@ import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
......@@ -26,16 +28,27 @@ import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.service.CorePlatformService;
import com.ibeetl.admin.core.util.FileUtil;
/**
* Class FileSystemContorller : <br/>
* 描述:业务中有关文件的上传,下载。<br/>
* TODO 待改动计划:
* 改成加上MD5验证,减少重复文件的io
* 补上文件表中有关文件属性(大小,类型,)的信息
* 补上文件上传的临时状态,避免上传文件却中断业务逻辑,产生无用数据以及文件
* @author 一日看尽长安花
* Updated on 2020/3/8
*/
@Slf4j
@Controller
@RequestMapping("/core/file")
public class FileSystemContorller {
private final Log log = LogFactory.getLog(this.getClass());
@Autowired CorePlatformService platformService;
private static final String MODEL = "/core/file";
@Autowired FileService fileService;
/*附件类操作*/
@PostMapping(MODEL + "/uploadAttachment.json")
@PostMapping("/uploadAttachment.json")
@ResponseBody
public JsonResult uploadFile(
@RequestParam("file") MultipartFile file, String batchFileUUID, String bizType, String bizId)
......@@ -59,14 +72,14 @@ public class FileSystemContorller {
return JsonResult.success(fileItem);
}
@PostMapping(MODEL + "/deleteAttachment.json")
@PostMapping("/deleteAttachment.json")
@ResponseBody
public JsonResult deleteFile(Long fileId, String batchFileUUID) throws IOException {
fileService.removeFile(fileId, batchFileUUID);
return JsonResult.success();
}
@GetMapping(MODEL + "/download/{fileId}/{batchFileUUID}/{name}")
@GetMapping("/download/{fileId}/{batchFileUUID}/{name}")
public ModelAndView download(
HttpServletResponse response, @PathVariable Long fileId, @PathVariable String batchFileUUID)
throws IOException {
......@@ -80,9 +93,7 @@ public class FileSystemContorller {
/*execl 导入导出*/
@Autowired FileService fileService;
@GetMapping(MODEL + "/get.do")
@GetMapping("/get.do")
public ModelAndView index(HttpServletResponse response, String id) throws IOException {
String path = id;
response.setContentType("text/html; charset = UTF-8");
......@@ -97,7 +108,7 @@ public class FileSystemContorller {
return null;
}
@GetMapping(MODEL + "/downloadTemplate.do")
@GetMapping("/downloadTemplate.do")
public ModelAndView dowloadTemplate(HttpServletResponse response, String path)
throws IOException {
response.setContentType("text/html; charset = UTF-8");
......@@ -117,7 +128,7 @@ public class FileSystemContorller {
return null;
}
@GetMapping(MODEL + "/simpleUpload.do")
@GetMapping("/simpleUpload.do")
public ModelAndView simpleUploadPage(String uploadUrl, String templatePath, String fileType)
throws IOException {
ModelAndView view = new ModelAndView("/common/simpleUpload.html");
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment