小文件上传完成
This commit is contained in:
parent
4a2a0dcbfa
commit
d67b79e678
64
pom.xml
64
pom.xml
@ -87,30 +87,29 @@
|
|||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--mysql-->
|
<!--H2-->
|
||||||
<dependency>
|
|
||||||
<groupId>mysql</groupId>
|
<!-- <dependency>-->
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
<!-- <groupId>com.h2database</groupId>-->
|
||||||
<scope>runtime</scope>
|
<!-- <artifactId>h2</artifactId>-->
|
||||||
<version>5.1.44</version>
|
<!-- </dependency>-->
|
||||||
</dependency>
|
<!-- <dependency>-->
|
||||||
<dependency>
|
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
|
||||||
<groupId>org.mybatis.spring.boot</groupId>
|
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
|
||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
<!-- <version>2.1.3</version>-->
|
||||||
<version>2.1.3</version>
|
<!-- </dependency>-->
|
||||||
</dependency>
|
|
||||||
<!--分页插件-->
|
<!--分页插件-->
|
||||||
<dependency>
|
<!-- <dependency>-->
|
||||||
<groupId>com.github.pagehelper</groupId>
|
<!-- <groupId>com.github.pagehelper</groupId>-->
|
||||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
<!-- <artifactId>pagehelper-spring-boot-starter</artifactId>-->
|
||||||
<version>1.2.3</version>
|
<!-- <version>1.2.3</version>-->
|
||||||
</dependency>
|
<!-- </dependency>-->
|
||||||
<!--druid-->
|
<!--druid-->
|
||||||
<dependency>
|
<!-- <dependency>-->
|
||||||
<groupId>com.alibaba</groupId>
|
<!-- <groupId>com.alibaba</groupId>-->
|
||||||
<artifactId>druid-spring-boot-starter</artifactId>
|
<!-- <artifactId>druid-spring-boot-starter</artifactId>-->
|
||||||
<version>1.1.10</version>
|
<!-- <version>1.1.10</version>-->
|
||||||
</dependency>
|
<!-- </dependency>-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
@ -123,6 +122,7 @@
|
|||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
<finalName>oneManager-java</finalName>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
@ -142,25 +142,11 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<skip>true</skip>
|
<skip>true</skip>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
|
||||||
<groupId>org.mybatis.generator</groupId>
|
|
||||||
<artifactId>mybatis-generator-maven-plugin</artifactId>
|
|
||||||
<version>1.3.2</version>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>mysql</groupId>
|
|
||||||
<artifactId>mysql-connector-java</artifactId>
|
|
||||||
<version>5.1.44</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<configuration>
|
|
||||||
<!--配置文件的路径-->
|
|
||||||
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
|
|
||||||
<overwrite>true</overwrite>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.zhu.onemanager;
|
package com.zhu.onemanager;
|
||||||
|
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@MapperScan("com.zhu.onemanager.mapper")
|
@EnableScheduling
|
||||||
public class OnemanagerJavaApplication {
|
public class OnemanagerJavaApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package com.zhu.onemanager.controller.onedrive;
|
package com.zhu.onemanager.controller.onedrive;
|
||||||
|
|
||||||
|
import com.zhu.onemanager.logic.impl.OneDriveItemUrlImpl;
|
||||||
import com.zhu.onemanager.pojo.DriveParams;
|
import com.zhu.onemanager.pojo.DriveParams;
|
||||||
|
import com.zhu.onemanager.pojo.OneDriveUploadItem;
|
||||||
import com.zhu.onemanager.result.R;
|
import com.zhu.onemanager.result.R;
|
||||||
import com.zhu.onemanager.service.OnedriveService;
|
import com.zhu.onemanager.service.OnedriveService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ggBall
|
* @author ggBall
|
||||||
@ -23,6 +27,8 @@ public class OnedriveController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private OnedriveService onedriveService;
|
private OnedriveService onedriveService;
|
||||||
|
@Resource
|
||||||
|
private OneDriveItemUrlImpl oneDriveItemUrl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ggball
|
* @Author ggball
|
||||||
@ -44,9 +50,55 @@ public class OnedriveController {
|
|||||||
log.info("itemId:{}",itemId);
|
log.info("itemId:{}",itemId);
|
||||||
String path = "me/drive/items/%s/children"+driveParams.getUrl();
|
String path = "me/drive/items/%s/children"+driveParams.getUrl();
|
||||||
String formatPath = String.format(path,itemId);
|
String formatPath = String.format(path,itemId);
|
||||||
R r = onedriveService.children(formatPath);
|
R r = onedriveService.children(formatPath,itemId);
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 创建上传会话
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [itemId] 项目id
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
**/
|
||||||
|
@GetMapping("/createSession")
|
||||||
|
public R createSession(String itemId,String fileName) {
|
||||||
|
OneDriveUploadItem uploadItem = OneDriveUploadItem.builder()
|
||||||
|
.itemId(itemId)
|
||||||
|
.fileName(fileName)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
String uploadSession = oneDriveItemUrl.getUploadUrl(uploadItem);
|
||||||
|
return R.ok(uploadSession);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 创建上传会话
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [itemId] 项目id
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
**/
|
||||||
|
@PostMapping("/upload")
|
||||||
|
public R upload(@RequestParam("file") MultipartFile file,String itemId) throws IOException {
|
||||||
|
if (file.isEmpty()) {
|
||||||
|
return R.error("上传失败,请选择文件");
|
||||||
|
}
|
||||||
|
|
||||||
|
String fileName = file.getOriginalFilename();
|
||||||
|
OneDriveUploadItem uploadItem = OneDriveUploadItem.builder()
|
||||||
|
.fileName(fileName)
|
||||||
|
.itemId(itemId)
|
||||||
|
.file(file)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return onedriveService.uploadMIniFile(uploadItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
39
src/main/java/com/zhu/onemanager/handler/ItemHandler.java
Normal file
39
src/main/java/com/zhu/onemanager/handler/ItemHandler.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package com.zhu.onemanager.handler;
|
||||||
|
|
||||||
|
import com.zhu.onemanager.pojo.Item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件处理器
|
||||||
|
* @author ggball
|
||||||
|
*/
|
||||||
|
public interface ItemHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件类型
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param []
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
String getType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件变动
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param item 项目
|
||||||
|
* @return void
|
||||||
|
**/
|
||||||
|
void change(Item item);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件变动后置处理
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param oldItem 旧项目
|
||||||
|
* @Param newItem 新项目
|
||||||
|
* @return void
|
||||||
|
**/
|
||||||
|
void changeCallBack(Item oldItem,Item newItem);
|
||||||
|
}
|
38
src/main/java/com/zhu/onemanager/handler/ItemHandlerAbs.java
Normal file
38
src/main/java/com/zhu/onemanager/handler/ItemHandlerAbs.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package com.zhu.onemanager.handler;
|
||||||
|
|
||||||
|
import com.zhu.onemanager.pojo.Item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName FileHandlerAbs.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月05日 17:19:00
|
||||||
|
*/
|
||||||
|
public abstract class ItemHandlerAbs implements ItemHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
public abstract void upload(Item item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
public abstract void delete(Item item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
public abstract void update(Item item);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public abstract Item Check(String id);
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
package com.zhu.onemanager.handler;
|
||||||
|
|
||||||
|
import com.zhu.onemanager.pojo.Item;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName OneDriveFileHandler.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月05日 17:20:00
|
||||||
|
*/
|
||||||
|
public class OneDriveItemHandler extends ItemHandlerAbs {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return java.lang.String
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件类型
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param []
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param item
|
||||||
|
* @return void
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件变动
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param []
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void change(Item item) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param oldItem
|
||||||
|
* @param newItem
|
||||||
|
* @return void
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 文件变动后置处理
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param []
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void changeCallBack(Item oldItem, Item newItem) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传
|
||||||
|
*
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void upload(Item item) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除
|
||||||
|
*
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void delete(Item item) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新
|
||||||
|
*
|
||||||
|
* @param item
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(Item item) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查看
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Item Check(String id) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -36,12 +36,12 @@ public class AuthTokenImpl implements AuthToken {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ServletContext context;
|
private ServletContext context;
|
||||||
|
|
||||||
@Resource
|
// @Resource
|
||||||
private SaveConfig saveConfig;
|
// private SaveConfig saveConfig;
|
||||||
|
//
|
||||||
public AuthTokenImpl(SaveConfig saveConfig) {
|
// public AuthTokenImpl(SaveConfig saveConfig) {
|
||||||
this.saveConfig = saveConfig;
|
// this.saveConfig = saveConfig;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getAccessToken(OnedriveConfig config) throws IOException {
|
public void getAccessToken(OnedriveConfig config) throws IOException {
|
||||||
@ -62,15 +62,15 @@ public class AuthTokenImpl implements AuthToken {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void getRefreshToken(OnedriveConfig config) throws IOException {
|
public void getRefreshToken(OnedriveConfig config) throws IOException {
|
||||||
if ((context.getAttribute("refresh_token") == null && context.getAttribute("refresh_token").toString().isEmpty()) || (context.getAttribute("access_token") == null && context.getAttribute("access_token").toString().isEmpty())) {
|
if (config == null || config.getRefreshToken() == null || config.getAccessToken() == null) {
|
||||||
log.info("Refresh_token:==>" + context.getAttribute("refresh_token"));
|
log.info("Refresh_token:==>" + context.getAttribute("refresh_token"));
|
||||||
log.info("Access_token:==>" + context.getAttribute("access_token"));
|
log.info("Access_token:==>" + context.getAttribute("access_token"));
|
||||||
throw new AppException(ResponseEnum.Token_invalid);
|
throw new AppException(ResponseEnum.TOKEN_INVALID);
|
||||||
}
|
}
|
||||||
Map<String, Object> param = new HashMap<String, Object>();
|
Map<String, Object> param = new HashMap<String, Object>();
|
||||||
param.put("client_id", config.getClientId());
|
param.put("client_id", config.getClientId());
|
||||||
param.put("scope", "files.readwrite.all files.readwrite offline_access");
|
param.put("scope", "files.readwrite.all files.readwrite offline_access");
|
||||||
param.put("refresh_token", context.getAttribute("refresh_token").toString());
|
param.put("refresh_token", config.getRefreshToken());
|
||||||
param.put("redirect_uri", config.getRedirectUri());
|
param.put("redirect_uri", config.getRedirectUri());
|
||||||
param.put("grant_type", "refresh_token");
|
param.put("grant_type", "refresh_token");
|
||||||
param.put("client_secret", config.getClientSecret());
|
param.put("client_secret", config.getClientSecret());
|
||||||
|
@ -0,0 +1,86 @@
|
|||||||
|
package com.zhu.onemanager.logic.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import com.zhu.onemanager.pojo.OneDriveUploadItem;
|
||||||
|
import com.zhu.onemanager.utlis.GHttpUtil;
|
||||||
|
import com.zhu.onemanager.utlis.Strings;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName FileUrlImpl.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月05日 17:06:00
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class OneDriveItemUrlImpl {
|
||||||
|
|
||||||
|
@Value("${microsoft-graph.root-url}")
|
||||||
|
String rootUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 获取大文件会话
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param [driveId, itemId]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public String createUploadSession(OneDriveUploadItem uploadItem) {
|
||||||
|
String url = "/drives/%s/items/%s:/%s:/createUploadSession";
|
||||||
|
return String.format(url,uploadItem.getDriveId(),uploadItem.getItemId(),uploadItem.getFileName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 获取大文件会话
|
||||||
|
* @Date 2022/1/5
|
||||||
|
* @Param [driveId, itemId]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public String createCurUploadSession(OneDriveUploadItem uploadItem) {
|
||||||
|
String url = "/me/drive/items/%s:/%s:/createUploadSession";
|
||||||
|
return String.format(url,uploadItem.getItemId(),uploadItem.getFileName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 获取大文件上传url
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [itemId, fileName]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public String getUploadUrl(OneDriveUploadItem uploadItem) {
|
||||||
|
String uploadSessionUrl = createUploadSession(uploadItem);
|
||||||
|
HashMap<String, String> parameter = new HashMap<>();
|
||||||
|
Dict dict = GHttpUtil.postResDict(rootUrl + uploadSessionUrl, String.valueOf(parameter));
|
||||||
|
System.out.println("dict = " + dict);
|
||||||
|
|
||||||
|
return dict.getStr("uploadUrl");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取小文件上传urL
|
||||||
|
* @param uploadItem
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getMiniUploadUrl(OneDriveUploadItem uploadItem) {
|
||||||
|
String url = "/drives/{drive-id}/items/{parent-id}:/{filename}:/content";
|
||||||
|
return rootUrl + Strings.solve(url,uploadItem.getDriveId(),uploadItem.getItemId(),uploadItem.getFileName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前驱动器小文件上传urL
|
||||||
|
* @param uploadItem
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getCurMiniUploadUrl(OneDriveUploadItem uploadItem) {
|
||||||
|
String url = "/me/drive/items/{parent-id}:/{filename}:/content";
|
||||||
|
return rootUrl + Strings.solve(url,uploadItem.getItemId(),uploadItem.getFileName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,33 +0,0 @@
|
|||||||
package com.zhu.onemanager.mapper;
|
|
||||||
|
|
||||||
import com.zhu.onemanager.pojo.OnedriveConfig;
|
|
||||||
import com.zhu.onemanager.pojo.OnedriveconfigExample;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Repository
|
|
||||||
public interface OnedriveconfigMapper {
|
|
||||||
int countByExample(OnedriveconfigExample example);
|
|
||||||
|
|
||||||
int deleteByExample(OnedriveconfigExample example);
|
|
||||||
|
|
||||||
int deleteByPrimaryKey(String clientid);
|
|
||||||
|
|
||||||
int insert(OnedriveConfig record);
|
|
||||||
|
|
||||||
int insertSelective(OnedriveConfig record);
|
|
||||||
|
|
||||||
List<OnedriveConfig> selectByExample(OnedriveconfigExample example);
|
|
||||||
|
|
||||||
OnedriveConfig selectByPrimaryKey(String clientid);
|
|
||||||
|
|
||||||
int updateByExampleSelective(@Param("record") OnedriveConfig record, @Param("example") OnedriveconfigExample example);
|
|
||||||
|
|
||||||
int updateByExample(@Param("record") OnedriveConfig record, @Param("example") OnedriveconfigExample example);
|
|
||||||
|
|
||||||
int updateByPrimaryKeySelective(OnedriveConfig record);
|
|
||||||
|
|
||||||
int updateByPrimaryKey(OnedriveConfig record);
|
|
||||||
}
|
|
@ -17,7 +17,7 @@ import java.util.Date;
|
|||||||
* @createTime 2021年12月17日 17:52:00
|
* @createTime 2021年12月17日 17:52:00
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
public class DriveItem {
|
public class DriveItem extends Item{
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,6 +92,26 @@ public class DriveItem {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*预览图
|
||||||
|
*/
|
||||||
|
public String getPreView() {
|
||||||
|
if (null != thumbnails && thumbnails.size() > 0) {
|
||||||
|
JSONObject thumbnailJson = (JSONObject)thumbnails.get(0);
|
||||||
|
JSONObject mediumImg = (JSONObject)thumbnailJson.get("large");
|
||||||
|
return mediumImg.getString("url");
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回父级itemId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getParentId() {
|
||||||
|
return parentReference.getString("id");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@JSONField(name = "@microsoft.graph.downloadUrl")
|
@JSONField(name = "@microsoft.graph.downloadUrl")
|
||||||
|
11
src/main/java/com/zhu/onemanager/pojo/Item.java
Normal file
11
src/main/java/com/zhu/onemanager/pojo/Item.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package com.zhu.onemanager.pojo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName Item.java
|
||||||
|
* @Description 网盘单个项目
|
||||||
|
* @createTime 2022年01月05日 17:23:00
|
||||||
|
*/
|
||||||
|
public class Item {
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.zhu.onemanager.pojo;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName OneDriveUploadItem.java
|
||||||
|
* @Description onedrive 上传对象
|
||||||
|
* @createTime 2022年01月06日 23:43:00
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class OneDriveUploadItem implements UploadItem{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 驱动器id
|
||||||
|
*/
|
||||||
|
private String driveId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driveItem id
|
||||||
|
*/
|
||||||
|
private String itemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件名
|
||||||
|
*/
|
||||||
|
private String fileName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件大小
|
||||||
|
*/
|
||||||
|
private String size;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件
|
||||||
|
*/
|
||||||
|
private MultipartFile file;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUploadUrl() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
13
src/main/java/com/zhu/onemanager/pojo/UploadItem.java
Normal file
13
src/main/java/com/zhu/onemanager/pojo/UploadItem.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package com.zhu.onemanager.pojo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName UploadItem.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月06日 23:42:00
|
||||||
|
*/
|
||||||
|
public interface UploadItem {
|
||||||
|
|
||||||
|
String getUploadUrl();
|
||||||
|
}
|
27
src/main/java/com/zhu/onemanager/pojo/vo/ItemListVO.java
Normal file
27
src/main/java/com/zhu/onemanager/pojo/vo/ItemListVO.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package com.zhu.onemanager.pojo.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName ItemList.java
|
||||||
|
* @Description 项目列表
|
||||||
|
* @createTime 2022年01月07日 02:03:00
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ItemListVO implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前项目id
|
||||||
|
*/
|
||||||
|
private String curItemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目列表
|
||||||
|
*/
|
||||||
|
private List itemList;
|
||||||
|
}
|
@ -22,8 +22,20 @@ public class R {
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public R(ResponseEnum responseEnum, String message) {
|
||||||
|
this.code = responseEnum.getCode();
|
||||||
|
this.message = message;
|
||||||
|
this.data = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static R ok(Object data) {
|
public static R ok(Object data) {
|
||||||
|
|
||||||
return new R(ResponseEnum.SUCCESS,data);
|
return new R(ResponseEnum.SUCCESS,data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static R error(String message) {
|
||||||
|
|
||||||
|
return new R(ResponseEnum.SYSTEM_ERROR,message);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@ public enum ResponseEnum {
|
|||||||
SK_BUSY("4001","网络故障"),
|
SK_BUSY("4001","网络故障"),
|
||||||
ID_NOTFOUND("4002","状态错误"),
|
ID_NOTFOUND("4002","状态错误"),
|
||||||
LIST_ERROR("4003","数据格式异常"),
|
LIST_ERROR("4003","数据格式异常"),
|
||||||
Cookie_not_found("4004","Cookie获取失败"),
|
COOKIE_NOT_FOUND("4004","Cookie获取失败"),
|
||||||
Token_invalid("4005","Token失效"),
|
TOKEN_INVALID("4005","Token失效"),
|
||||||
PARAMETERS_ARE_MISSING("4006","参数缺失"),
|
PARAMETERS_ARE_MISSING("4006","参数缺失"),
|
||||||
AUTH_CODE_ISNULL("4007","Auth Code 为空"),
|
AUTH_CODE_ISNULL("4007","Auth Code 为空"),
|
||||||
THE_RESULT_SET_IS_EMPTY("4008","请求结果集为Null,请联系管理员"),
|
THE_RESULT_SET_IS_EMPTY("4008","请求结果集为Null,请联系管理员"),
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
package com.zhu.onemanager.service;
|
package com.zhu.onemanager.service;
|
||||||
|
|
||||||
|
import com.zhu.onemanager.pojo.OneDriveUploadItem;
|
||||||
import com.zhu.onemanager.result.R;
|
import com.zhu.onemanager.result.R;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public interface OnedriveService {
|
public interface OnedriveService {
|
||||||
|
|
||||||
|
|
||||||
@ -21,5 +25,27 @@ public interface OnedriveService {
|
|||||||
* @Param [path]
|
* @Param [path]
|
||||||
* @return com.zhu.onemanager.result.R
|
* @return com.zhu.onemanager.result.R
|
||||||
**/
|
**/
|
||||||
R children(String path);
|
R children(String formatPath, String itemId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 上传大文件
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [file]
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
**/
|
||||||
|
R uploadFile(File file);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 上传小文件(<=4mb)
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [uploadItem]
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
*
|
||||||
|
* @param uploadItem*/
|
||||||
|
R uploadMIniFile(OneDriveUploadItem uploadItem) throws IOException;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,22 @@
|
|||||||
package com.zhu.onemanager.service.impl;
|
package com.zhu.onemanager.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.lang.Dict;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.zhu.onemanager.constant.FileConstant;
|
import com.zhu.onemanager.constant.FileConstant;
|
||||||
|
import com.zhu.onemanager.logic.impl.OneDriveItemUrlImpl;
|
||||||
import com.zhu.onemanager.pojo.DriveItem;
|
import com.zhu.onemanager.pojo.DriveItem;
|
||||||
|
import com.zhu.onemanager.pojo.OneDriveUploadItem;
|
||||||
|
import com.zhu.onemanager.pojo.vo.ItemListVO;
|
||||||
import com.zhu.onemanager.result.R;
|
import com.zhu.onemanager.result.R;
|
||||||
import com.zhu.onemanager.service.OnedriveService;
|
import com.zhu.onemanager.service.OnedriveService;
|
||||||
import com.zhu.onemanager.utlis.GHttpUtil;
|
import com.zhu.onemanager.utlis.GHttpUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -20,10 +28,13 @@ import java.util.Map;
|
|||||||
* @createTime 2021年12月17日 13:21:00
|
* @createTime 2021年12月17日 13:21:00
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@Slf4j
|
||||||
public class OnedriveServiceImpl implements OnedriveService {
|
public class OnedriveServiceImpl implements OnedriveService {
|
||||||
|
|
||||||
@Value("${microsoft-graph.root-url}")
|
@Value("${microsoft-graph.root-url}")
|
||||||
String rootUrl;
|
String rootUrl;
|
||||||
|
@Resource
|
||||||
|
OneDriveItemUrlImpl oneDriveItemUrl;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,17 +46,52 @@ public class OnedriveServiceImpl implements OnedriveService {
|
|||||||
**/
|
**/
|
||||||
@Override
|
@Override
|
||||||
public R getCurrentDriveInfo(String path) {
|
public R getCurrentDriveInfo(String path) {
|
||||||
Map map = GHttpUtil.getMap(rootUrl + FileConstant.PATH_SEPARATOR + path);
|
Map map = GHttpUtil.getResMap(rootUrl + FileConstant.PATH_SEPARATOR + path);
|
||||||
JSONArray value = (JSONArray)map.get("value");
|
JSONArray value = (JSONArray)map.get("value");
|
||||||
List<DriveItem> driveItemList = value.toJavaList(DriveItem.class);
|
List<DriveItem> driveItemList = value.toJavaList(DriveItem.class);
|
||||||
return R.ok(driveItemList);
|
ItemListVO itemListVO = new ItemListVO();
|
||||||
|
itemListVO.setItemList(driveItemList);
|
||||||
|
itemListVO.setCurItemId(driveItemList.get(0).getParentId());
|
||||||
|
return R.ok(itemListVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public R children(String path) {
|
public R children(String formatPath, String itemId) {
|
||||||
Map map = GHttpUtil.getMap(rootUrl + FileConstant.PATH_SEPARATOR + path);
|
Map map = GHttpUtil.getResMap(rootUrl + FileConstant.PATH_SEPARATOR + formatPath);
|
||||||
JSONArray value = (JSONArray)map.get("value");
|
JSONArray value = (JSONArray)map.get("value");
|
||||||
List<DriveItem> driveItemList = value.toJavaList(DriveItem.class);
|
List<DriveItem> driveItemList = value.toJavaList(DriveItem.class);
|
||||||
return R.ok(driveItemList);
|
ItemListVO itemListVO = new ItemListVO();
|
||||||
|
itemListVO.setItemList(driveItemList);
|
||||||
|
itemListVO.setCurItemId(itemId);
|
||||||
|
return R.ok(itemListVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param file
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 上传文件
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [file]
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public R uploadFile(File file) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param uploadItem
|
||||||
|
* @return com.zhu.onemanager.result.R
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 上传小文件(<=4mb)
|
||||||
|
* @Date 2022/1/6
|
||||||
|
* @Param [uploadItem]
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public R uploadMIniFile(OneDriveUploadItem uploadItem) throws IOException {
|
||||||
|
String url = oneDriveItemUrl.getCurMiniUploadUrl(uploadItem);
|
||||||
|
Dict res = GHttpUtil.put(url, uploadItem.getFile().getBytes(), "text/plain");
|
||||||
|
log.info("res:{}",res);
|
||||||
|
return R.ok(res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,42 +1,41 @@
|
|||||||
package com.zhu.onemanager.service.impl;/**
|
//package com.zhu.onemanager.service.impl;/**
|
||||||
* @author: DnsLin
|
// * @author: DnsLin
|
||||||
* @Title: SaveConfigImpl
|
// * @Title: SaveConfigImpl
|
||||||
* @ProjectName: Onemanager-java
|
// * @ProjectName: Onemanager-java
|
||||||
* @Description:
|
// * @Description:
|
||||||
* @date: 2021/10/31 18:28
|
// * @date: 2021/10/31 18:28
|
||||||
*/
|
// */
|
||||||
|
//
|
||||||
import com.zhu.onemanager.exception.AppException;
|
//import com.zhu.onemanager.exception.AppException;
|
||||||
import com.zhu.onemanager.mapper.OnedriveconfigMapper;
|
//import com.zhu.onemanager.pojo.OnedriveConfig;
|
||||||
import com.zhu.onemanager.pojo.OnedriveConfig;
|
//import com.zhu.onemanager.result.ResponseEnum;
|
||||||
import com.zhu.onemanager.result.ResponseEnum;
|
//import com.zhu.onemanager.service.SaveConfig;
|
||||||
import com.zhu.onemanager.service.SaveConfig;
|
//import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
//import org.springframework.stereotype.Service;
|
||||||
import org.springframework.stereotype.Service;
|
//import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
//
|
||||||
|
//
|
||||||
|
//@Service
|
||||||
@Service
|
//public class SaveConfigImpl implements SaveConfig {
|
||||||
public class SaveConfigImpl implements SaveConfig {
|
// @Autowired
|
||||||
@Autowired
|
// private OnedriveconfigMapper onedriveconfigMapper;
|
||||||
private OnedriveconfigMapper onedriveconfigMapper;
|
//
|
||||||
|
// @Override
|
||||||
@Override
|
// @Transactional
|
||||||
@Transactional
|
// public void saveOnedriveConfig(OnedriveConfig config) {
|
||||||
public void saveOnedriveConfig(OnedriveConfig config) {
|
// if (config == null) {
|
||||||
if (config == null) {
|
// throw new AppException(ResponseEnum.OBJECT_IS_EMPTY);
|
||||||
throw new AppException(ResponseEnum.OBJECT_IS_EMPTY);
|
// }
|
||||||
}
|
// // 当clientId存在时候 为更新数据 不存在就插入
|
||||||
// 当clientId存在时候 为更新数据 不存在就插入
|
// OnedriveConfig onedriveconfig = onedriveconfigMapper.selectByPrimaryKey(config.getClientId());
|
||||||
OnedriveConfig onedriveconfig = onedriveconfigMapper.selectByPrimaryKey(config.getClientId());
|
// if (onedriveconfig == null) {
|
||||||
if (onedriveconfig == null) {
|
// int state = onedriveconfigMapper.insertSelective(config);
|
||||||
int state = onedriveconfigMapper.insertSelective(config);
|
// if (state < 1) {
|
||||||
if (state < 1) {
|
// throw new AppException(ResponseEnum.INSERT_THE_FAILURE);
|
||||||
throw new AppException(ResponseEnum.INSERT_THE_FAILURE);
|
// }
|
||||||
}
|
// }else {
|
||||||
}else {
|
// onedriveconfigMapper.updateByPrimaryKey(config);
|
||||||
onedriveconfigMapper.updateByPrimaryKey(config);
|
// }
|
||||||
}
|
//
|
||||||
|
// }
|
||||||
}
|
//}
|
||||||
}
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package com.zhu.onemanager.utlis;
|
package com.zhu.onemanager.utlis;
|
||||||
|
|
||||||
import cn.hutool.http.GlobalHeaders;
|
import cn.hutool.core.lang.Dict;
|
||||||
import cn.hutool.http.HttpGlobalConfig;
|
import cn.hutool.http.*;
|
||||||
import cn.hutool.http.HttpUtil;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -16,13 +15,39 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class GHttpUtil extends HttpUtil {
|
public class GHttpUtil extends HttpUtil {
|
||||||
|
|
||||||
public static Map getMap(String urlString) {
|
/*get请求*/
|
||||||
|
public static Map getResMap(String urlString) {
|
||||||
String res = get(urlString, HttpGlobalConfig.getTimeout());
|
String res = get(urlString, HttpGlobalConfig.getTimeout());
|
||||||
return JSONObject.parseObject(res, Map.class);
|
return JSONObject.parseObject(res, Map.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Dict getResDict(String urlString) {
|
||||||
|
Map resMap = getResMap(urlString);
|
||||||
|
return Dict.parse(resMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map postResMap(String urlString,String body) {
|
||||||
|
String res = post(urlString, body);
|
||||||
|
return JSONObject.parseObject(res, Map.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*post请求*/
|
||||||
|
public static Dict postResDict(String urlString,String body) {
|
||||||
|
Map resMap = postResMap(urlString,body);
|
||||||
|
return Dict.parse(resMap);
|
||||||
|
}
|
||||||
|
|
||||||
public static void putHeaders(String name,String value) {
|
public static void putHeaders(String name,String value) {
|
||||||
GlobalHeaders instance = GlobalHeaders.INSTANCE;
|
GlobalHeaders instance = GlobalHeaders.INSTANCE;
|
||||||
instance.header(name,value);
|
instance.header(name,value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*put请求*/
|
||||||
|
|
||||||
|
public static Dict put(String url,byte[] values,String contentType) {
|
||||||
|
String res = HttpRequest.put(url).contentType(contentType).body(values).execute().body();
|
||||||
|
return Dict.parse(JSONObject.parseObject(res, Map.class));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
100
src/main/java/com/zhu/onemanager/utlis/ObjectUtils.java
Normal file
100
src/main/java/com/zhu/onemanager/utlis/ObjectUtils.java
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package com.zhu.onemanager.utlis;
|
||||||
|
|
||||||
|
import java.time.temporal.TemporalAccessor;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName ObjectUtils.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月07日 00:10:00
|
||||||
|
*/
|
||||||
|
public class ObjectUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果obj为null,则返回默认值,不为null,则返回obj
|
||||||
|
*
|
||||||
|
* @param obj obj
|
||||||
|
* @param defaultValue 默认值
|
||||||
|
* @param <T> 值泛型
|
||||||
|
* @return obj不为null 返回obj,否则返回默认值
|
||||||
|
*/
|
||||||
|
public static <T> T defaultIfNull(T obj, T defaultValue) {
|
||||||
|
return obj != null ? obj : defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
// 对象类型判断
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
|
||||||
|
public static boolean isCollection(Object obj) {
|
||||||
|
return obj instanceof Collection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMap(Object obj) {
|
||||||
|
return obj instanceof Map;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isNumber(Object obj) {
|
||||||
|
return obj instanceof Number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isBoolean(Object obj) {
|
||||||
|
return obj instanceof Boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEnum(Object obj) {
|
||||||
|
return obj instanceof Enum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDate(Object obj) {
|
||||||
|
return obj instanceof Date || obj instanceof TemporalAccessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCharSequence(Object obj) {
|
||||||
|
return obj instanceof CharSequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断对象是否为八大基本类型包装类除外即(boolean, byte, char, short, int, long, float, and double)<br/>
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isPrimitive(Object obj) {
|
||||||
|
return obj != null && obj.getClass().isPrimitive();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断对象是否为包装类或者非包装类的基本类型
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isWrapperOrPrimitive(Object obj) {
|
||||||
|
return isPrimitive(obj) || isNumber(obj) || isCharSequence(obj) || isBoolean(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断一个对象是否为数组
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isArray(Object obj) {
|
||||||
|
return obj != null && obj.getClass().isArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断一个对象是否为基本类型数组即(int[], long[], boolean[], double[]....)
|
||||||
|
*
|
||||||
|
* @param obj
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isPrimitiveArray(Object obj) {
|
||||||
|
return isArray(obj) && obj.getClass().getComponentType().isPrimitive();
|
||||||
|
}
|
||||||
|
}
|
206
src/main/java/com/zhu/onemanager/utlis/PlaceholderResolver.java
Normal file
206
src/main/java/com/zhu/onemanager/utlis/PlaceholderResolver.java
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
package com.zhu.onemanager.utlis;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName PlaceholderResolver.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月07日 00:04:00
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 占位符解析器
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PlaceholderResolver {
|
||||||
|
/**
|
||||||
|
* 默认前缀占位符
|
||||||
|
*/
|
||||||
|
public static final String DEFAULT_PLACEHOLDER_PREFIX = "{";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认后缀占位符
|
||||||
|
*/
|
||||||
|
public static final String DEFAULT_PLACEHOLDER_SUFFIX = "}";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认单例解析器
|
||||||
|
*/
|
||||||
|
private static PlaceholderResolver defaultResolver = new PlaceholderResolver();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 占位符前缀
|
||||||
|
*/
|
||||||
|
private String placeholderPrefix = DEFAULT_PLACEHOLDER_PREFIX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 占位符后缀
|
||||||
|
*/
|
||||||
|
private String placeholderSuffix = DEFAULT_PLACEHOLDER_SUFFIX;
|
||||||
|
|
||||||
|
|
||||||
|
private PlaceholderResolver(){}
|
||||||
|
|
||||||
|
private PlaceholderResolver(String placeholderPrefix, String placeholderSuffix) {
|
||||||
|
this.placeholderPrefix = placeholderPrefix;
|
||||||
|
this.placeholderSuffix = placeholderSuffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认的占位符解析器,即占位符前缀为"{", 后缀为"}"
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static PlaceholderResolver getDefaultResolver() {
|
||||||
|
return defaultResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PlaceholderResolver getResolver(String placeholderPrefix, String placeholderSuffix) {
|
||||||
|
return new PlaceholderResolver(placeholderPrefix, placeholderSuffix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析带有指定占位符的模板字符串,默认占位符为前缀:{ 后缀:}<br/><br/>
|
||||||
|
* 如:template = category:{}:product:{}<br/>
|
||||||
|
* values = {"1", "2"}<br/>
|
||||||
|
* 返回 category:1:product:2<br/>
|
||||||
|
*
|
||||||
|
* @param content 要解析的带有占位符的模板字符串
|
||||||
|
* @param values 按照模板占位符索引位置设置对应的值
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String solve(String content, String... values) {
|
||||||
|
int start = content.indexOf(DEFAULT_PLACEHOLDER_PREFIX);
|
||||||
|
if (start == -1) {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
//值索引
|
||||||
|
int valueIndex = 0;
|
||||||
|
StringBuilder result = new StringBuilder(content);
|
||||||
|
while (start != -1) {
|
||||||
|
int end = result.indexOf(DEFAULT_PLACEHOLDER_SUFFIX);
|
||||||
|
String replaceContent = values[valueIndex++];
|
||||||
|
result.replace(start, end + DEFAULT_PLACEHOLDER_SUFFIX.length(), replaceContent);
|
||||||
|
start = result.indexOf(DEFAULT_PLACEHOLDER_PREFIX, start + replaceContent.length());
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析带有指定占位符的模板字符串,默认占位符为前缀:{ 后缀:}<br/><br/>
|
||||||
|
* 如:template = category:{}:product:{}<br/>
|
||||||
|
* values = {"1", "2"}<br/>
|
||||||
|
* 返回 category:1:product:2<br/>
|
||||||
|
*
|
||||||
|
* @param content 要解析的带有占位符的模板字符串
|
||||||
|
* @param values 按照模板占位符索引位置设置对应的值
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String resolve(String content, String... values) {
|
||||||
|
int start = content.indexOf(this.placeholderPrefix);
|
||||||
|
if (start == -1) {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
//值索引
|
||||||
|
int valueIndex = 0;
|
||||||
|
StringBuilder result = new StringBuilder(content);
|
||||||
|
while (start != -1) {
|
||||||
|
int end = result.indexOf(this.placeholderSuffix);
|
||||||
|
String replaceContent = values[valueIndex++];
|
||||||
|
result.replace(start, end + this.placeholderSuffix.length(), replaceContent);
|
||||||
|
start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析带有指定占位符的模板字符串,默认占位符为前缀:{ 后缀:}<br/><br/>
|
||||||
|
* 如:template = category:{}:product:{}<br/>
|
||||||
|
* values = {"1", "2"}<br/>
|
||||||
|
* 返回 category:1:product:2<br/>
|
||||||
|
*
|
||||||
|
* @param content 要解析的带有占位符的模板字符串
|
||||||
|
* @param values 按照模板占位符索引位置设置对应的值
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String resolve(String content, Object[] values) {
|
||||||
|
return resolve(content, Stream.of(values).map(String::valueOf).toArray(String[]::new));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据替换规则来替换指定模板中的占位符值
|
||||||
|
* @param content 要解析的字符串
|
||||||
|
* @param rule 解析规则回调
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String resolveByRule(String content, Function<String, String> rule) {
|
||||||
|
int start = content.indexOf(this.placeholderPrefix);
|
||||||
|
if (start == -1) {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
StringBuilder result = new StringBuilder(content);
|
||||||
|
while (start != -1) {
|
||||||
|
int end = result.indexOf(this.placeholderSuffix, start);
|
||||||
|
//获取占位符属性值,如{id}, 即获取id
|
||||||
|
String placeholder = result.substring(start + this.placeholderPrefix.length(), end);
|
||||||
|
//替换整个占位符内容,即将{id}值替换为替换规则回调中的内容
|
||||||
|
String replaceContent = placeholder.trim().isEmpty() ? "" : rule.apply(placeholder);
|
||||||
|
result.replace(start, end + this.placeholderSuffix.length(), replaceContent);
|
||||||
|
start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换模板中占位符内容,占位符的内容即为map key对应的值,key为占位符中的内容。<br/><br/>
|
||||||
|
* 如:content = product:{id}:detail:{did}<br/>
|
||||||
|
* valueMap = id -> 1; pid -> 2<br/>
|
||||||
|
* 经过解析返回 product:1:detail:2<br/>
|
||||||
|
*
|
||||||
|
* @param content 模板内容。
|
||||||
|
* @param valueMap 值映射
|
||||||
|
* @return 替换完成后的字符串。
|
||||||
|
*/
|
||||||
|
public String resolveByMap(String content, final Map<String, Object> valueMap) {
|
||||||
|
return resolveByRule(content, placeholderValue -> String.valueOf(valueMap.get(placeholderValue)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据properties文件替换占位符内容
|
||||||
|
* @param content
|
||||||
|
* @param properties
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String resolveByProperties(String content, final Properties properties) {
|
||||||
|
return resolveByRule(content, placeholderValue -> properties.getProperty(placeholderValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据对象中字段路径(即类似js访问对象属性值)替换模板中的占位符 <br/><br/>
|
||||||
|
* 如 content = product:{id}:detail:{detail.id} <br/>
|
||||||
|
* obj = Product.builder().id(1).detail(Detail.builder().id(2).build()).build(); <br/>
|
||||||
|
* 经过解析返回 product:1:detail:2 <br/>
|
||||||
|
*
|
||||||
|
* @param content 要解析的内容
|
||||||
|
* @param obj 填充解析内容的对象(如果是基本类型,则所有占位符替换为相同的值)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String resolveByObject(String content, final Object obj) {
|
||||||
|
if (obj instanceof Map) {
|
||||||
|
return resolveByMap(content, (Map)obj);
|
||||||
|
}
|
||||||
|
return resolveByRule(content, placeholderValue -> String.valueOf(ReflectionUtils.getValueByFieldPath(obj, placeholderValue)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String solve = PlaceholderResolver.solve("你好{},ss{}", "1", "2");
|
||||||
|
String solve2 = PlaceholderResolver.solve("你好{},ss{}", "7", "8");
|
||||||
|
System.out.println("solve = " + solve);
|
||||||
|
}
|
||||||
|
}
|
256
src/main/java/com/zhu/onemanager/utlis/ReflectionUtils.java
Normal file
256
src/main/java/com/zhu/onemanager/utlis/ReflectionUtils.java
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
package com.zhu.onemanager.utlis;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName ReflectionUtils.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月07日 00:08:00
|
||||||
|
*/
|
||||||
|
public final class ReflectionUtils {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有field字段,包含父类继承的
|
||||||
|
*
|
||||||
|
* @param clazz 字段所属类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Field[] getFields(Class<?> clazz) {
|
||||||
|
return getFields(clazz, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类的所有的field,包括父类
|
||||||
|
*
|
||||||
|
* @param clazz 字段所属类型
|
||||||
|
* @param fieldFilter 字段过滤器
|
||||||
|
* @return 符合过滤器条件的字段数组
|
||||||
|
*/
|
||||||
|
public static Field[] getFields(Class<?> clazz, Predicate<Field> fieldFilter) {
|
||||||
|
List<Field> fields = new ArrayList<>(32);
|
||||||
|
while (Object.class != clazz && clazz != null) {
|
||||||
|
// 获得该类所有声明的字段,即包括public、private和protected,但是不包括父类的申明字段,
|
||||||
|
// getFields:获得某个类的所有的公共(public)的字段,包括父类中的字段
|
||||||
|
for (Field field : clazz.getDeclaredFields()) {
|
||||||
|
if (fieldFilter != null && !fieldFilter.test(field)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fields.add(field);
|
||||||
|
}
|
||||||
|
clazz = clazz.getSuperclass();
|
||||||
|
}
|
||||||
|
return fields.toArray(new Field[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对指定类的所有字段执行consumer操作
|
||||||
|
*
|
||||||
|
* @param clazz 目标对象
|
||||||
|
* @param consumer 对字段进行操作
|
||||||
|
*/
|
||||||
|
public static void doWithFields(Class<?> clazz, Consumer<Field> consumer) {
|
||||||
|
Arrays.stream(getFields(clazz)).forEach(consumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类的指定field,包括父类
|
||||||
|
*
|
||||||
|
* @param clazz 字段所属类型
|
||||||
|
* @param name 字段名
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Field getField(Class<?> clazz, String name) {
|
||||||
|
return getField(clazz, name, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定类的指定field,包括父类
|
||||||
|
*
|
||||||
|
* @param clazz 字段所属类型
|
||||||
|
* @param name 字段名
|
||||||
|
* @param type field类型
|
||||||
|
* @return Field对象
|
||||||
|
*/
|
||||||
|
public static Field getField(Class<?> clazz, String name, Class<?> type) {
|
||||||
|
Assert.notNull(clazz, "clazz不能为空!");
|
||||||
|
while (clazz != Object.class && clazz != null) {
|
||||||
|
for (Field field : clazz.getDeclaredFields()) {
|
||||||
|
if ((name == null || name.equals(field.getName())) &&
|
||||||
|
(type == null || type.equals(field.getType()))) {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clazz = clazz.getSuperclass();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取字段值
|
||||||
|
*
|
||||||
|
* @param field 字段
|
||||||
|
* @param target 字段所属实例对象
|
||||||
|
* @return 字段值
|
||||||
|
*/
|
||||||
|
public static Object getFieldValue(Field field, Object target) {
|
||||||
|
makeAccessible(field);
|
||||||
|
try {
|
||||||
|
return field.get(target);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalStateException(String.format("获取%s对象的%s字段值错误!"
|
||||||
|
, target.getClass().getName(), field.getName()), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取对象中指定field值
|
||||||
|
*
|
||||||
|
* @param obj 对象
|
||||||
|
* @param fieldName 字段名
|
||||||
|
* @return 字段值
|
||||||
|
*/
|
||||||
|
public static Object getFieldValue(Object obj, String fieldName) {
|
||||||
|
Assert.notNull(obj, "obj不能为空!");
|
||||||
|
if (ObjectUtils.isWrapperOrPrimitive(obj)) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
return getFieldValue(getField(obj.getClass(), fieldName), obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定对象中指定字段路径的值(类似js访问对象属性) <br/>
|
||||||
|
* 如:Product p = new Product(new User()) <br/>
|
||||||
|
* 可使用ReflectionUtils.getValueByFieldPath(p, "user.name")获取到用户的name属性
|
||||||
|
*
|
||||||
|
* @param obj 取值对象
|
||||||
|
* @param fieldPath 字段路径(形如 user.name)
|
||||||
|
* @return 字段value
|
||||||
|
*/
|
||||||
|
public static Object getValueByFieldPath(Object obj, String fieldPath) {
|
||||||
|
String[] fieldNames = fieldPath.split("\\.");
|
||||||
|
Object result = null;
|
||||||
|
for (String fieldName : fieldNames) {
|
||||||
|
result = getFieldValue(obj, fieldName);
|
||||||
|
if (result == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
obj = result;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置字段值
|
||||||
|
*
|
||||||
|
* @param field 字段
|
||||||
|
* @param target 字段所属对象实例
|
||||||
|
* @param value 需要设置的值
|
||||||
|
*/
|
||||||
|
public static void setFieldValue(Field field, Object target, Object value) {
|
||||||
|
makeAccessible(field);
|
||||||
|
try {
|
||||||
|
field.set(target, value);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalStateException(String.format("设置%s对象的%s字段值错误!"
|
||||||
|
, target.getClass().getName(), field.getName()), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置字段为可见
|
||||||
|
*
|
||||||
|
* @param field
|
||||||
|
*/
|
||||||
|
public static void makeAccessible(Field field) {
|
||||||
|
if ((!Modifier.isPublic(field.getModifiers()) ||
|
||||||
|
!Modifier.isPublic(field.getDeclaringClass().getModifiers()) ||
|
||||||
|
Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) {
|
||||||
|
field.setAccessible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用无参数方法
|
||||||
|
*
|
||||||
|
* @param method 方法对象
|
||||||
|
* @param target 调用对象
|
||||||
|
* @return 执行结果
|
||||||
|
*/
|
||||||
|
public static Object invokeMethod(Method method, Object target) {
|
||||||
|
return invokeMethod(method, target, new Object[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 调用指定对象的方法
|
||||||
|
*
|
||||||
|
* @param method 方法对象
|
||||||
|
* @param target 调用对象
|
||||||
|
* @param args 方法参数
|
||||||
|
* @return 执行结果
|
||||||
|
*/
|
||||||
|
public static Object invokeMethod(Method method, Object target, Object... args) {
|
||||||
|
try {
|
||||||
|
makeAccessible(method);
|
||||||
|
return method.invoke(target, args);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new IllegalStateException(String.format("执行%s.%s()方法错误!"
|
||||||
|
, target.getClass().getName(), method.getName()), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置方法可见性
|
||||||
|
*
|
||||||
|
* @param method 方法
|
||||||
|
*/
|
||||||
|
public static void makeAccessible(Method method) {
|
||||||
|
if ((!Modifier.isPublic(method.getModifiers()) ||
|
||||||
|
!Modifier.isPublic(method.getDeclaringClass().getModifiers())) && !method.isAccessible()) {
|
||||||
|
method.setAccessible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为equals方法
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#equals(Object)
|
||||||
|
*/
|
||||||
|
public static boolean isEqualsMethod(Method method) {
|
||||||
|
if (!"equals".equals(method.getName())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Class<?>[] paramTypes = method.getParameterTypes();
|
||||||
|
return (paramTypes.length == 1 && paramTypes[0] == Object.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为hashCode方法
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#hashCode()
|
||||||
|
*/
|
||||||
|
public static boolean isHashCodeMethod(Method method) {
|
||||||
|
return "hashCode".equals(method.getName()) && method.getParameterCount() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否为Object的toString方法
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
public static boolean isToStringMethod(Method method) {
|
||||||
|
return "toString".equals(method.getName()) && method.getParameterCount() == 0;
|
||||||
|
}
|
||||||
|
}
|
46
src/main/java/com/zhu/onemanager/utlis/Strings.java
Normal file
46
src/main/java/com/zhu/onemanager/utlis/Strings.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.zhu.onemanager.utlis;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ggBall
|
||||||
|
* @version 1.0.0
|
||||||
|
* @ClassName Strings.java
|
||||||
|
* @Description TODO
|
||||||
|
* @createTime 2022年01月07日 00:23:00
|
||||||
|
*/
|
||||||
|
public class Strings {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 解析占位符
|
||||||
|
* @Date 2022/1/7
|
||||||
|
* @Param [content 模板, values 值]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public static String solve(String content, String... values) {
|
||||||
|
return PlaceholderResolver.solve(content,values);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 头部添加字符
|
||||||
|
* @Date 2022/1/7
|
||||||
|
* @Param [content, value]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public static String insert(String content,String value) {
|
||||||
|
return value + content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author ggball
|
||||||
|
* @Description 尾部添加字符
|
||||||
|
* @Date 2022/1/7
|
||||||
|
* @Param [content, value]
|
||||||
|
* @return java.lang.String
|
||||||
|
**/
|
||||||
|
public static String append(String content,String value) {
|
||||||
|
return content + value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,23 +1,10 @@
|
|||||||
spring:
|
spring:
|
||||||
datasource:
|
|
||||||
druid:
|
|
||||||
url: jdbc:mysql://127.0.0.1:3306/onemanager?useUnicode=true&characterEncoding=utf-8&useSSL=false
|
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
|
||||||
username: root
|
|
||||||
password: root
|
|
||||||
initial-size: 10
|
|
||||||
max-active: 50
|
|
||||||
min-idle: 10
|
|
||||||
max-wait: 60000
|
|
||||||
pool-prepared-statements: true
|
|
||||||
max-pool-prepared-statement-per-connection-size: 20
|
|
||||||
validation-query: SELECT 1 FROM DUAL
|
|
||||||
resources:
|
resources:
|
||||||
static-locations: classpath:/
|
static-locations: classpath:/
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
root: info
|
root: info
|
||||||
com.dnslin.onemanager: debug
|
com.zhu.onemanager: debug
|
||||||
server:
|
server:
|
||||||
port: 8081
|
port: 8081
|
||||||
|
|
||||||
|
27
src/main/resources/application-prod.yaml
Normal file
27
src/main/resources/application-prod.yaml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
spring:
|
||||||
|
resources:
|
||||||
|
static-locations: classpath:/
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
root: info
|
||||||
|
com.dnslin.onemanager: debug
|
||||||
|
server:
|
||||||
|
port: 8881
|
||||||
|
servlet:
|
||||||
|
context-path: /oneManagerjava
|
||||||
|
|
||||||
|
onedrive:
|
||||||
|
clientSecret: q847Q~yGYv6_GasCcKRaLF4syQUqpVz5D_HoH
|
||||||
|
scope: offline_access User.Read openid Mail.Read
|
||||||
|
redirectUri: http://localhost:8081/api/outlook
|
||||||
|
clientId: 0d5e84db-18cf-4ab7-bc67-4af2dc9bce6b
|
||||||
|
authenticateEndPoint: login.microsoftonline.com
|
||||||
|
# 文件应用密钥信息
|
||||||
|
file:
|
||||||
|
clientSecret: wfy7Q~0R2MmSF6Zl3YRTcXxkGF0L8XOb_CL7k
|
||||||
|
scope: offline_access Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All
|
||||||
|
redirectUri: https://ggball.top/oneManagerjava/api/file/auth
|
||||||
|
clientId: 526c05e9-5e68-4178-aa62-43f70ba4ae96
|
||||||
|
authenticateEndPoint: login.microsoftonline.com
|
||||||
|
microsoft-graph:
|
||||||
|
root-url: https://graph.microsoft.com/v1.0
|
@ -1,7 +1,7 @@
|
|||||||
jdbc.driverClass=com.mysql.jdbc.Driver
|
#jdbc.driverClass=com.mysql.jdbc.Driver
|
||||||
jdbc.url=jdbc:mysql://127.0.0.1:3306/onemanager?useUnicode=true&characterEncoding=utf-8&useSSL=false
|
#jdbc.url=jdbc:mysql://127.0.0.1:3306/onemanager?useUnicode=true&characterEncoding=utf-8&useSSL=false
|
||||||
jdbc.user=root
|
#jdbc.user=root
|
||||||
jdbc.password=root
|
#jdbc.password=root
|
||||||
|
#
|
||||||
group.package=com.dnslin.onemanager
|
#group.package=com.dnslin.onemanager
|
||||||
catalog.name=onemanager
|
#catalog.name=onemanager
|
@ -1,228 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
|
||||||
<mapper namespace="com.dnslin.onemanager.mapper.OnedriveconfigMapper" >
|
|
||||||
<resultMap id="BaseResultMap" type="com.zhu.onemanager.pojo.OnedriveConfig" >
|
|
||||||
<id column="clientId" property="clientid" jdbcType="VARCHAR" />
|
|
||||||
<result column="redirectUrl" property="redirecturl" jdbcType="VARCHAR" />
|
|
||||||
<result column="clientSecret" property="clientsecret" jdbcType="VARCHAR" />
|
|
||||||
<result column="accessToken" property="accesstoken" jdbcType="VARCHAR" />
|
|
||||||
<result column="refreshToken" property="refreshtoken" jdbcType="VARCHAR" />
|
|
||||||
<result column="expires" property="expires" jdbcType="BIGINT" />
|
|
||||||
</resultMap>
|
|
||||||
<sql id="Example_Where_Clause" >
|
|
||||||
<where >
|
|
||||||
<foreach collection="oredCriteria" item="criteria" separator="or" >
|
|
||||||
<if test="criteria.valid" >
|
|
||||||
<trim prefix="(" suffix=")" prefixOverrides="and" >
|
|
||||||
<foreach collection="criteria.criteria" item="criterion" >
|
|
||||||
<choose >
|
|
||||||
<when test="criterion.noValue" >
|
|
||||||
and ${criterion.condition}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.singleValue" >
|
|
||||||
and ${criterion.condition} #{criterion.value}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.betweenValue" >
|
|
||||||
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.listValue" >
|
|
||||||
and ${criterion.condition}
|
|
||||||
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
|
|
||||||
#{listItem}
|
|
||||||
</foreach>
|
|
||||||
</when>
|
|
||||||
</choose>
|
|
||||||
</foreach>
|
|
||||||
</trim>
|
|
||||||
</if>
|
|
||||||
</foreach>
|
|
||||||
</where>
|
|
||||||
</sql>
|
|
||||||
<sql id="Update_By_Example_Where_Clause" >
|
|
||||||
<where >
|
|
||||||
<foreach collection="example.oredCriteria" item="criteria" separator="or" >
|
|
||||||
<if test="criteria.valid" >
|
|
||||||
<trim prefix="(" suffix=")" prefixOverrides="and" >
|
|
||||||
<foreach collection="criteria.criteria" item="criterion" >
|
|
||||||
<choose >
|
|
||||||
<when test="criterion.noValue" >
|
|
||||||
and ${criterion.condition}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.singleValue" >
|
|
||||||
and ${criterion.condition} #{criterion.value}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.betweenValue" >
|
|
||||||
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
|
|
||||||
</when>
|
|
||||||
<when test="criterion.listValue" >
|
|
||||||
and ${criterion.condition}
|
|
||||||
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
|
|
||||||
#{listItem}
|
|
||||||
</foreach>
|
|
||||||
</when>
|
|
||||||
</choose>
|
|
||||||
</foreach>
|
|
||||||
</trim>
|
|
||||||
</if>
|
|
||||||
</foreach>
|
|
||||||
</where>
|
|
||||||
</sql>
|
|
||||||
<sql id="Base_Column_List" >
|
|
||||||
clientId, redirectUrl, clientSecret, accessToken, refreshToken, expires
|
|
||||||
</sql>
|
|
||||||
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.zhu.onemanager.pojo.OnedriveconfigExample" >
|
|
||||||
select
|
|
||||||
<if test="distinct" >
|
|
||||||
distinct
|
|
||||||
</if>
|
|
||||||
<include refid="Base_Column_List" />
|
|
||||||
from onedriveconfig
|
|
||||||
<if test="_parameter != null" >
|
|
||||||
<include refid="Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
<if test="orderByClause != null" >
|
|
||||||
order by ${orderByClause}
|
|
||||||
</if>
|
|
||||||
</select>
|
|
||||||
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
|
|
||||||
select
|
|
||||||
<include refid="Base_Column_List" />
|
|
||||||
from onedriveconfig
|
|
||||||
where clientId = #{clientid,jdbcType=VARCHAR}
|
|
||||||
</select>
|
|
||||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
|
|
||||||
delete from onedriveconfig
|
|
||||||
where clientId = #{clientid,jdbcType=VARCHAR}
|
|
||||||
</delete>
|
|
||||||
<delete id="deleteByExample" parameterType="com.zhu.onemanager.pojo.OnedriveconfigExample" >
|
|
||||||
delete from onedriveconfig
|
|
||||||
<if test="_parameter != null" >
|
|
||||||
<include refid="Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
</delete>
|
|
||||||
<insert id="insert" parameterType="com.zhu.onemanager.pojo.OnedriveConfig" >
|
|
||||||
insert into onedriveconfig (clientId, redirectUrl, clientSecret,
|
|
||||||
accessToken, refreshToken, expires
|
|
||||||
)
|
|
||||||
values (#{clientid,jdbcType=VARCHAR}, #{redirecturl,jdbcType=VARCHAR}, #{clientsecret,jdbcType=VARCHAR},
|
|
||||||
#{accesstoken,jdbcType=VARCHAR}, #{refreshtoken,jdbcType=VARCHAR}, #{expires,jdbcType=BIGINT}
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
<insert id="insertSelective" parameterType="com.zhu.onemanager.pojo.OnedriveConfig" >
|
|
||||||
insert into onedriveconfig
|
|
||||||
<trim prefix="(" suffix=")" suffixOverrides="," >
|
|
||||||
<if test="clientid != null" >
|
|
||||||
clientId,
|
|
||||||
</if>
|
|
||||||
<if test="redirecturl != null" >
|
|
||||||
redirectUrl,
|
|
||||||
</if>
|
|
||||||
<if test="clientsecret != null" >
|
|
||||||
clientSecret,
|
|
||||||
</if>
|
|
||||||
<if test="accesstoken != null" >
|
|
||||||
accessToken,
|
|
||||||
</if>
|
|
||||||
<if test="refreshtoken != null" >
|
|
||||||
refreshToken,
|
|
||||||
</if>
|
|
||||||
<if test="expires != null" >
|
|
||||||
expires,
|
|
||||||
</if>
|
|
||||||
</trim>
|
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides="," >
|
|
||||||
<if test="clientid != null" >
|
|
||||||
#{clientid,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="redirecturl != null" >
|
|
||||||
#{redirecturl,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="clientsecret != null" >
|
|
||||||
#{clientsecret,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="accesstoken != null" >
|
|
||||||
#{accesstoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="refreshtoken != null" >
|
|
||||||
#{refreshtoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="expires != null" >
|
|
||||||
#{expires,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
</trim>
|
|
||||||
</insert>
|
|
||||||
<select id="countByExample" parameterType="com.zhu.onemanager.pojo.OnedriveconfigExample" resultType="java.lang.Integer" >
|
|
||||||
select count(*) from onedriveconfig
|
|
||||||
<if test="_parameter != null" >
|
|
||||||
<include refid="Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
</select>
|
|
||||||
<update id="updateByExampleSelective" parameterType="map" >
|
|
||||||
update onedriveconfig
|
|
||||||
<set >
|
|
||||||
<if test="record.clientid != null" >
|
|
||||||
clientId = #{record.clientid,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="record.redirecturl != null" >
|
|
||||||
redirectUrl = #{record.redirecturl,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="record.clientsecret != null" >
|
|
||||||
clientSecret = #{record.clientsecret,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="record.accesstoken != null" >
|
|
||||||
accessToken = #{record.accesstoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="record.refreshtoken != null" >
|
|
||||||
refreshToken = #{record.refreshtoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="record.expires != null" >
|
|
||||||
expires = #{record.expires,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
</set>
|
|
||||||
<if test="_parameter != null" >
|
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
</update>
|
|
||||||
<update id="updateByExample" parameterType="map" >
|
|
||||||
update onedriveconfig
|
|
||||||
set clientId = #{record.clientid,jdbcType=VARCHAR},
|
|
||||||
redirectUrl = #{record.redirecturl,jdbcType=VARCHAR},
|
|
||||||
clientSecret = #{record.clientsecret,jdbcType=VARCHAR},
|
|
||||||
accessToken = #{record.accesstoken,jdbcType=VARCHAR},
|
|
||||||
refreshToken = #{record.refreshtoken,jdbcType=VARCHAR},
|
|
||||||
expires = #{record.expires,jdbcType=BIGINT}
|
|
||||||
<if test="_parameter != null" >
|
|
||||||
<include refid="Update_By_Example_Where_Clause" />
|
|
||||||
</if>
|
|
||||||
</update>
|
|
||||||
<update id="updateByPrimaryKeySelective" parameterType="com.zhu.onemanager.pojo.OnedriveConfig" >
|
|
||||||
update onedriveconfig
|
|
||||||
<set >
|
|
||||||
<if test="redirecturl != null" >
|
|
||||||
redirectUrl = #{redirecturl,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="clientsecret != null" >
|
|
||||||
clientSecret = #{clientsecret,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="accesstoken != null" >
|
|
||||||
accessToken = #{accesstoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="refreshtoken != null" >
|
|
||||||
refreshToken = #{refreshtoken,jdbcType=VARCHAR},
|
|
||||||
</if>
|
|
||||||
<if test="expires != null" >
|
|
||||||
expires = #{expires,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
</set>
|
|
||||||
where clientId = #{clientid,jdbcType=VARCHAR}
|
|
||||||
</update>
|
|
||||||
<update id="updateByPrimaryKey" parameterType="com.zhu.onemanager.pojo.OnedriveConfig" >
|
|
||||||
update onedriveconfig
|
|
||||||
set redirectUrl = #{redirecturl,jdbcType=VARCHAR},
|
|
||||||
clientSecret = #{clientsecret,jdbcType=VARCHAR},
|
|
||||||
accessToken = #{accesstoken,jdbcType=VARCHAR},
|
|
||||||
refreshToken = #{refreshtoken,jdbcType=VARCHAR},
|
|
||||||
expires = #{expires,jdbcType=BIGINT}
|
|
||||||
where clientId = #{clientid,jdbcType=VARCHAR}
|
|
||||||
</update>
|
|
||||||
</mapper>
|
|
@ -2,6 +2,7 @@
|
|||||||
const merge = require('webpack-merge')
|
const merge = require('webpack-merge')
|
||||||
const prodEnv = require('./prod.env')
|
const prodEnv = require('./prod.env')
|
||||||
|
|
||||||
module.exports = merge(prodEnv, {
|
module.exports = {
|
||||||
NODE_ENV: '"development"'
|
NODE_ENV: '"development"',
|
||||||
})
|
BASE_URL:'"http://localhost:8081/"'
|
||||||
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
'use strict'
|
'use strict'
|
||||||
module.exports = {
|
module.exports = {
|
||||||
NODE_ENV: '"production"'
|
NODE_ENV: '"production"',
|
||||||
|
// BASE_URL:'"https://ggball.top/oneManagerjava/"'
|
||||||
|
BASE_URL:'"http://localhost:8081/"'
|
||||||
}
|
}
|
||||||
|
21189
src/main/resources/webapp/package-lock.json
generated
21189
src/main/resources/webapp/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -6,21 +6,24 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
||||||
|
"prod": "webpack-dev-server --inline --progress --config build/webpack.prod.conf.js",
|
||||||
"start": "npm run dev",
|
"start": "npm run dev",
|
||||||
"unit": "jest --config test/unit/jest.conf.js --coverage",
|
"unit": "jest --config test/unit/jest.conf.js --coverage",
|
||||||
"e2e": "node test/e2e/runner.js",
|
"e2e": "node test/e2e/runner.js",
|
||||||
"test": "npm run unit && npm run e2e",
|
"test": "npm run unit && npm run e2e",
|
||||||
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
|
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
|
||||||
"build": "node build/build.js"
|
"build-prod": "node build/build.js --config build/webpack.prod.conf.js",
|
||||||
|
"build-dev": "node build/build.js --config build/webpack.dev.conf.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
|
"css-loader": "^0.28.11",
|
||||||
"element-ui": "^2.0.0-rc.1",
|
"element-ui": "^2.0.0-rc.1",
|
||||||
"vue": "^2.5.2",
|
|
||||||
"vue-router": "^3.0.1",
|
|
||||||
"file-loader": "^1.1.11",
|
"file-loader": "^1.1.11",
|
||||||
"sass-loader": "^7.1.0",
|
"sass-loader": "^7.1.0",
|
||||||
"css-loader": "^0.28.11"
|
"vue": "^2.5.2",
|
||||||
|
"vue-pdf": "^4.3.0",
|
||||||
|
"vue-router": "^3.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer": "^7.1.2",
|
"autoprefixer": "^7.1.2",
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div>
|
|
||||||
<input type="text" placeholder="写点什么吧">
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'Demo'
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
@ -1,10 +1,23 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="table">
|
<div id="table">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="24">
|
||||||
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
|
<el-col :span="1">
|
||||||
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
|
<el-button size="small" type="danger">删除</el-button>
|
||||||
<el-col :span="6"><div class="grid-content bg-purple"></div></el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="1">
|
||||||
|
<el-upload
|
||||||
|
class="upload-demo"
|
||||||
|
:action="uploadUrl"
|
||||||
|
:data="uploadExtraData"
|
||||||
|
:show-file-list="false"
|
||||||
|
:on-success="uploadSuccess"
|
||||||
|
:on-error="uploadError"
|
||||||
|
:on-exceed="handleExceed">
|
||||||
|
<el-button size="small" type="primary">上传</el-button>
|
||||||
|
<!-- <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>-->
|
||||||
|
</el-upload>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="3">
|
||||||
<el-switch
|
<el-switch
|
||||||
v-model="isThumbnail"
|
v-model="isThumbnail"
|
||||||
active-text="缩略图模式"
|
active-text="缩略图模式"
|
||||||
@ -13,10 +26,37 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
<el-row :gutter="24">
|
||||||
|
|
||||||
|
<el-col :span="18">
|
||||||
|
<el-breadcrumb separator-class="el-icon-arrow-right">
|
||||||
|
<el-breadcrumb-item :to="{ path: '/layout' }">/</el-breadcrumb-item>
|
||||||
|
|
||||||
|
<el-breadcrumb-item v-for="(pathItem,index) in pathList" :key="index">
|
||||||
|
{{pathItem}}
|
||||||
|
</el-breadcrumb-item>
|
||||||
|
|
||||||
|
</el-breadcrumb>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
|
v-loading="loading"
|
||||||
:data="fileList"
|
:data="fileList"
|
||||||
>
|
>
|
||||||
|
<el-table-column
|
||||||
|
prop="id"
|
||||||
|
label="id"
|
||||||
|
v-if="false"
|
||||||
|
></el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="preView"
|
||||||
|
label="preView"
|
||||||
|
v-if="false"
|
||||||
|
></el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
label="文件名"
|
label="文件名"
|
||||||
@ -29,7 +69,11 @@
|
|||||||
v-if="isThumbnail"
|
v-if="isThumbnail"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<img :src="scope.row.thumbnail" min-width="70" height="70" />
|
<el-image
|
||||||
|
style="width: 70px; height: 70px"
|
||||||
|
:src="scope.row.thumbnail"
|
||||||
|
:preview-src-list=[scope.row.preView]
|
||||||
|
></el-image>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@ -50,13 +94,24 @@
|
|||||||
width="180"
|
width="180"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link :href="scope.row.downloadUrl" :underline="false" style="margin-left:15px">
|
<el-link
|
||||||
<el-button
|
:href="scope.row.downloadUrl"
|
||||||
|
:underline="false"
|
||||||
|
v-if="scope.row.itemType == 'folder' ? false : true"
|
||||||
|
style="margin-left:15px">
|
||||||
|
<el-button type="primary"
|
||||||
size="mini"
|
size="mini"
|
||||||
>{{scope.row.itemType == 'file' ? '下载' : '查看'}}</el-button>
|
>下载</el-button>
|
||||||
</el-link>
|
</el-link>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="mini"
|
||||||
|
v-on:click="checkChildren(scope.row);addPath(scope.row);"
|
||||||
|
v-if="scope.row.itemType == 'folder' ? true : false"
|
||||||
|
>查看</el-button>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
@ -66,26 +121,57 @@
|
|||||||
<script>
|
<script>
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
const baseUrl = 'http://localhost:8081/'
|
|
||||||
|
var env = process.env
|
||||||
|
const baseUrl = env.BASE_URL === 'undefined' ? 'http://localhost:8081/' : env.BASE_URL
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Table',
|
name: 'Table',
|
||||||
created () {
|
mounted () {
|
||||||
this.index()
|
this.index()
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
// 当前itemId
|
||||||
|
curItemId:"",
|
||||||
|
// 文件列表
|
||||||
fileList: [],
|
fileList: [],
|
||||||
|
// 显示缩略图
|
||||||
isThumbnail: false,
|
isThumbnail: false,
|
||||||
|
// 加载动画
|
||||||
|
loading: true,
|
||||||
|
// 路径列表
|
||||||
|
pathList:[],
|
||||||
|
// 上传路径
|
||||||
|
uploadUrl: baseUrl+"oneDrive/upload",
|
||||||
|
// 上传额外信息
|
||||||
|
uploadExtraData: {}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
// 监听缩略图模式
|
// 监听缩略图模式
|
||||||
isThumbnail: 'watchThumbnail'
|
isThumbnail: 'watchThumbnail',
|
||||||
|
curItemId: 'buildUploadExtraData'
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
|
// 刷新当前页面
|
||||||
|
refresh() {
|
||||||
|
this.checkChildren(this.curItemId)
|
||||||
|
},
|
||||||
|
|
||||||
|
//查看目录下的内容
|
||||||
|
checkChildren(row) {
|
||||||
|
console.log(row.id);
|
||||||
|
this.children(row.id);
|
||||||
|
},
|
||||||
|
// 添加路径
|
||||||
|
addPath(raw) {
|
||||||
|
this.pathList.push(raw.name)
|
||||||
|
},
|
||||||
|
|
||||||
|
// 比较缩略状态新旧值
|
||||||
watchThumbnail(curVal,oldVal) {
|
watchThumbnail(curVal,oldVal) {
|
||||||
// if false -> true reIndex
|
// if false -> true reIndex
|
||||||
if (oldVal == false && curVal == true) {
|
if (oldVal == false && curVal == true) {
|
||||||
@ -94,11 +180,10 @@ export default {
|
|||||||
// console.log(curVal,oldVal);
|
// console.log(curVal,oldVal);
|
||||||
},
|
},
|
||||||
|
|
||||||
handleDownload (index, row) {
|
|
||||||
console.log(index, row)
|
|
||||||
},
|
|
||||||
|
|
||||||
|
// 首页信息
|
||||||
index () {
|
index () {
|
||||||
|
this.loading = true;
|
||||||
const that = this
|
const that = this
|
||||||
return axios
|
return axios
|
||||||
.get(baseUrl + 'oneDrive/index',{
|
.get(baseUrl + 'oneDrive/index',{
|
||||||
@ -108,7 +193,10 @@ export default {
|
|||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
console.log(response.data.data)
|
console.log(response.data.data)
|
||||||
that.fileList = response.data.data
|
this.fileList = response.data.data.itemList
|
||||||
|
this.curItemId = response.data.data.curItemId
|
||||||
|
console.log(this.curItemId)
|
||||||
|
this.loading = false;
|
||||||
return response.data.data
|
return response.data.data
|
||||||
})
|
})
|
||||||
.catch(function (error) {
|
.catch(function (error) {
|
||||||
@ -116,6 +204,59 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 根据itemId查看子内容
|
||||||
|
children(itemId) {
|
||||||
|
this.loading = true;
|
||||||
|
return axios
|
||||||
|
.get(baseUrl + 'oneDrive/'+itemId+'/children',{
|
||||||
|
params: {
|
||||||
|
thumbnail: this.isThumbnail
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
console.log(response.data.data)
|
||||||
|
this.fileList = response.data.data.itemList
|
||||||
|
this.curItemId = response.data.data.curItemId
|
||||||
|
this.loading = false;
|
||||||
|
return response.data.data
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log(error)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 上传相关
|
||||||
|
handleRemove(file, fileList) {
|
||||||
|
console.log(file, fileList);
|
||||||
|
},
|
||||||
|
handlePreview(file) {
|
||||||
|
console.log(file);
|
||||||
|
},
|
||||||
|
handleExceed(files, fileList) {
|
||||||
|
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
|
||||||
|
},
|
||||||
|
beforeRemove(file, fileList) {
|
||||||
|
return this.$confirm(`确定移除 ${ file.name }?`);
|
||||||
|
},
|
||||||
|
uploadSuccess(response, file, fileList) {
|
||||||
|
this.$message({
|
||||||
|
message: '上传成功',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
this.index()
|
||||||
|
},
|
||||||
|
uploadError(err, file, fileList) {
|
||||||
|
this.$message({
|
||||||
|
message: '上传失败',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 构造上传额外信息
|
||||||
|
buildUploadExtraData () {
|
||||||
|
this.uploadExtraData = {"itemId":this.curItemId}
|
||||||
|
},
|
||||||
|
|
||||||
// 容量转换
|
// 容量转换
|
||||||
bytesToSize (item) {
|
bytesToSize (item) {
|
||||||
var bytes = item.size
|
var bytes = item.size
|
||||||
|
31
src/main/resources/webapp/src/components/auth.vue
Normal file
31
src/main/resources/webapp/src/components/auth.vue
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-steps :active="active" finish-status="success">
|
||||||
|
<el-step title="授权"></el-step>
|
||||||
|
<el-step title="获取token"></el-step>
|
||||||
|
</el-steps>
|
||||||
|
|
||||||
|
<el-button style="margin-top: 12px;" @click="next">下一步</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'auth',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
active: 0
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
next() {
|
||||||
|
if (this.active++ > 2) this.active = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -12,8 +12,8 @@
|
|||||||
background-color="#545c64"
|
background-color="#545c64"
|
||||||
text-color="#fff"
|
text-color="#fff"
|
||||||
active-text-color="#ffd04b">
|
active-text-color="#ffd04b">
|
||||||
<el-menu-item index="1"><a :href="tokenUrl" target="_blank" style="text-decoration: none;" >授权</a></el-menu-item>
|
<el-menu-item index="auth" id="auth"><a :href="tokenUrl" target="_blank" style="text-decoration: none;" >授权</a></el-menu-item>
|
||||||
<el-menu-item index="2">网盘</el-menu-item>
|
<el-menu-item index="table" id="table">网盘列表</el-menu-item>
|
||||||
<!-- <el-menu-item index="3" disabled>消息中心</el-menu-item>-->
|
<!-- <el-menu-item index="3" disabled>消息中心</el-menu-item>-->
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</el-header>
|
</el-header>
|
||||||
@ -26,6 +26,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var env = process.env
|
||||||
|
const baseUrl = env.BASE_URL
|
||||||
export default {
|
export default {
|
||||||
name: 'navbar',
|
name: 'navbar',
|
||||||
data () {
|
data () {
|
||||||
@ -33,13 +38,15 @@ export default {
|
|||||||
msg: 'Welcome to Your Vue.js App',
|
msg: 'Welcome to Your Vue.js App',
|
||||||
activeIndex: '1',
|
activeIndex: '1',
|
||||||
activeIndex2: '0',
|
activeIndex2: '0',
|
||||||
tokenUrl: 'https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id=526c05e9-5e68-4178-aa62-43f70ba4ae96&redirect_uri=http://localhost:8081/api/file/auth'
|
tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id=526c05e9-5e68-4178-aa62-43f70ba4ae96&redirect_uri='+baseUrl+'api/file/auth&scope=offline_access Files.Read Files.ReadWrite Files.Read.All Files.ReadWrite.All'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleSelect (key, keyPath) {
|
handleSelect (key, keyPath) {
|
||||||
console.log(key, keyPath)
|
console.log(key);
|
||||||
}
|
this.$emit('tableValue',key);
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -17,5 +17,10 @@ export default new Router({
|
|||||||
name: 'Table',
|
name: 'Table',
|
||||||
component: Table
|
component: Table
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/layout',
|
||||||
|
name: 'Layout',
|
||||||
|
component: Layout
|
||||||
|
},
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
@ -2,12 +2,13 @@
|
|||||||
<div id="layout">
|
<div id="layout">
|
||||||
<el-container>
|
<el-container>
|
||||||
<el-header>
|
<el-header>
|
||||||
<navbar/>
|
<navbar @tableValue="changeMain"/>
|
||||||
</el-header>
|
</el-header>
|
||||||
<el-main>
|
<el-main>
|
||||||
<Table/>
|
<Table v-if="tabValue === 'table'"/>
|
||||||
|
<auth v-if="tabValue === 'auth'"/>
|
||||||
</el-main>
|
</el-main>
|
||||||
<el-footer>Footer</el-footer>
|
<!-- <el-footer>Footer</el-footer>-->
|
||||||
</el-container>
|
</el-container>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -16,18 +17,30 @@
|
|||||||
|
|
||||||
import navbar from '../components/navbar'
|
import navbar from '../components/navbar'
|
||||||
import Table from '../components/Table'
|
import Table from '../components/Table'
|
||||||
|
import auth from '../components/auth'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Layout',
|
name: 'Layout',
|
||||||
components: {
|
components: {
|
||||||
navbar,
|
navbar,
|
||||||
Table
|
Table,
|
||||||
|
auth
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
tabValue: "",
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleDownload (index, row) {
|
handleDownload (index, row) {
|
||||||
console.log(index, row)
|
console.log(index, row)
|
||||||
}
|
},
|
||||||
|
changeMain(e) {
|
||||||
|
console.log('changeMain'+e);
|
||||||
|
this.tabValue = e;
|
||||||
|
},
|
||||||
|
|
||||||
// fetchData() {
|
// fetchData() {
|
||||||
// index().then((response) => {
|
// index().then((response) => {
|
||||||
|
18
start.bat
Normal file
18
start.bat
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
@echo off
|
||||||
|
echo 当前批处理全路径:%~f0
|
||||||
|
|
||||||
|
# 删除静态文件目录
|
||||||
|
rd /s /q src/main/resources/static
|
||||||
|
rd /s /q src/main/resources/templates
|
||||||
|
|
||||||
|
echo '删除静态文件夹成功'
|
||||||
|
|
||||||
|
|
||||||
|
cd src\main\resources\webapp
|
||||||
|
# 生成静态文件
|
||||||
|
npm run build & cd ../../../../ & mvn clean -DskipTests=true package
|
||||||
|
|
||||||
|
echo '生成静态文件成功'
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user