[UPDATE]:测试角色权限模块
This commit is contained in:
parent
1975a0a8a3
commit
9213f8b199
|
@ -68,6 +68,22 @@
|
||||||
<version>${tcctlo.version}</version>
|
<version>${tcctlo.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -1,22 +1,29 @@
|
||||||
package com.tcctlo.web.controller.common;
|
package com.tcctlo.web.controller.common;
|
||||||
|
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.tcctlo.common.annotation.Anonymous;
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
import org.dromara.x.file.storage.core.FileInfo;
|
import org.dromara.x.file.storage.core.FileInfo;
|
||||||
import org.dromara.x.file.storage.core.FileStorageService;
|
import org.dromara.x.file.storage.core.FileStorageService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import com.tcctlo.common.config.RuoYiConfig;
|
import com.tcctlo.common.config.RuoYiConfig;
|
||||||
import com.tcctlo.common.constant.Constants;
|
import com.tcctlo.common.constant.Constants;
|
||||||
|
@ -31,10 +38,10 @@ import com.tcctlo.framework.config.ServerConfig;
|
||||||
*
|
*
|
||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
*/
|
*/
|
||||||
|
@Anonymous
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/common")
|
@RequestMapping("/common")
|
||||||
public class CommonController
|
public class CommonController {
|
||||||
{
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
|
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -49,15 +56,12 @@ public class CommonController
|
||||||
* 通用下载请求
|
* 通用下载请求
|
||||||
*
|
*
|
||||||
* @param fileName 文件名称
|
* @param fileName 文件名称
|
||||||
* @param delete 是否删除
|
* @param delete 是否删除
|
||||||
*/
|
*/
|
||||||
@GetMapping("/download")
|
@GetMapping("/download")
|
||||||
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
|
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) {
|
||||||
{
|
try {
|
||||||
try
|
if (!FileUtils.checkAllowDownload(fileName)) {
|
||||||
{
|
|
||||||
if (!FileUtils.checkAllowDownload(fileName))
|
|
||||||
{
|
|
||||||
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
|
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
|
||||||
}
|
}
|
||||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||||
|
@ -66,13 +70,10 @@ public class CommonController
|
||||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
FileUtils.setAttachmentResponseHeader(response, realFileName);
|
FileUtils.setAttachmentResponseHeader(response, realFileName);
|
||||||
FileUtils.writeBytes(filePath, response.getOutputStream());
|
FileUtils.writeBytes(filePath, response.getOutputStream());
|
||||||
if (delete)
|
if (delete) {
|
||||||
{
|
|
||||||
FileUtils.deleteFile(filePath);
|
FileUtils.deleteFile(filePath);
|
||||||
}
|
}
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.error("下载文件失败", e);
|
log.error("下载文件失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,10 +82,8 @@ public class CommonController
|
||||||
* 通用上传请求(单个)
|
* 通用上传请求(单个)
|
||||||
*/
|
*/
|
||||||
@PostMapping("/upload")
|
@PostMapping("/upload")
|
||||||
public AjaxResult uploadFile(MultipartFile file) throws Exception
|
public AjaxResult uploadFile(MultipartFile file) throws Exception {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
/*// 上传文件路径
|
/*// 上传文件路径
|
||||||
String filePath = RuoYiConfig.getUploadPath();
|
String filePath = RuoYiConfig.getUploadPath();
|
||||||
// 上传并返回新文件名称
|
// 上传并返回新文件名称
|
||||||
|
@ -104,29 +103,50 @@ public class CommonController
|
||||||
ajax.put("newFileName", FileUtils.getName(fileInfo.getUrl()));
|
ajax.put("newFileName", FileUtils.getName(fileInfo.getUrl()));
|
||||||
ajax.put("originalFilename", file.getOriginalFilename());
|
ajax.put("originalFilename", file.getOriginalFilename());
|
||||||
return ajax;
|
return ajax;
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return AjaxResult.error(e.getMessage());
|
return AjaxResult.error(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载文件至本地
|
||||||
|
* @param response 响应
|
||||||
|
*/
|
||||||
|
@GetMapping("/downloadFileOnLocal")
|
||||||
|
public AjaxResult downloadFile(HttpServletResponse response, @RequestParam("urlPath") String urlPath, @RequestParam("path") String path) {
|
||||||
|
try {
|
||||||
|
URL url = new URL(urlPath);
|
||||||
|
String filePath = "F:\\fileDownload\\" + UUID.randomUUID() + urlPath.substring(urlPath.lastIndexOf("."));
|
||||||
|
URLConnection conn = url.openConnection();
|
||||||
|
InputStream inputStream = conn.getInputStream();
|
||||||
|
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
|
||||||
|
int bytesum = 0;
|
||||||
|
int byteread;
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
while ((byteread = inputStream.read(buffer)) != -1) {
|
||||||
|
bytesum += byteread;
|
||||||
|
fileOutputStream.write(buffer, 0, byteread);
|
||||||
|
}
|
||||||
|
fileOutputStream.close();
|
||||||
|
return AjaxResult.success("下载成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("下载失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用上传请求(多个)
|
* 通用上传请求(多个)
|
||||||
*/
|
*/
|
||||||
@PostMapping("/uploads")
|
@PostMapping("/uploads")
|
||||||
public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
|
public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
// 上传文件路径
|
// 上传文件路径
|
||||||
String filePath = RuoYiConfig.getUploadPath();
|
String filePath = RuoYiConfig.getUploadPath();
|
||||||
List<String> urls = new ArrayList<String>();
|
List<String> urls = new ArrayList<String>();
|
||||||
List<String> fileNames = new ArrayList<String>();
|
List<String> fileNames = new ArrayList<String>();
|
||||||
List<String> newFileNames = new ArrayList<String>();
|
List<String> newFileNames = new ArrayList<String>();
|
||||||
List<String> originalFilenames = new ArrayList<String>();
|
List<String> originalFilenames = new ArrayList<String>();
|
||||||
for (MultipartFile file : files)
|
for (MultipartFile file : files) {
|
||||||
{
|
|
||||||
// 上传并返回新文件名称
|
// 上传并返回新文件名称
|
||||||
String fileName = FileUploadUtils.upload(filePath, file);
|
String fileName = FileUploadUtils.upload(filePath, file);
|
||||||
String url = serverConfig.getUrl() + fileName;
|
String url = serverConfig.getUrl() + fileName;
|
||||||
|
@ -141,9 +161,7 @@ public class CommonController
|
||||||
ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
|
ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
|
||||||
ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
|
ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
|
||||||
return ajax;
|
return ajax;
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
return AjaxResult.error(e.getMessage());
|
return AjaxResult.error(e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,12 +171,9 @@ public class CommonController
|
||||||
*/
|
*/
|
||||||
@GetMapping("/download/resource")
|
@GetMapping("/download/resource")
|
||||||
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
|
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
|
||||||
throws Exception
|
throws Exception {
|
||||||
{
|
try {
|
||||||
try
|
if (!FileUtils.checkAllowDownload(resource)) {
|
||||||
{
|
|
||||||
if (!FileUtils.checkAllowDownload(resource))
|
|
||||||
{
|
|
||||||
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
|
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
|
||||||
}
|
}
|
||||||
// 本地资源路径
|
// 本地资源路径
|
||||||
|
@ -170,9 +185,7 @@ public class CommonController
|
||||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
FileUtils.setAttachmentResponseHeader(response, downloadName);
|
FileUtils.setAttachmentResponseHeader(response, downloadName);
|
||||||
FileUtils.writeBytes(downloadPath, response.getOutputStream());
|
FileUtils.writeBytes(downloadPath, response.getOutputStream());
|
||||||
}
|
} catch (Exception e) {
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
log.error("下载文件失败", e);
|
log.error("下载文件失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ spring:
|
||||||
druid:
|
druid:
|
||||||
# 主库数据源
|
# 主库数据源
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://117.72.45.219:23308/low-office-OA?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
url: jdbc:mysql://localhost:3306/low-office-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||||
username: root
|
username: root
|
||||||
password: root
|
password: root
|
||||||
# 从库数据源
|
# 从库数据源
|
||||||
|
|
|
@ -68,7 +68,7 @@ spring:
|
||||||
# redis 配置
|
# redis 配置
|
||||||
redis:
|
redis:
|
||||||
# 地址
|
# 地址
|
||||||
host: 117.72.45.219
|
host: 127.0.0.1
|
||||||
# 端口,默认为6379
|
# 端口,默认为6379
|
||||||
port: 6379
|
port: 6379
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
|
@ -95,7 +95,7 @@ token:
|
||||||
# 令牌密钥
|
# 令牌密钥
|
||||||
secret: abcdefghijklmnopqrstuvwxyz
|
secret: abcdefghijklmnopqrstuvwxyz
|
||||||
# 令牌有效期(默认30分钟)
|
# 令牌有效期(默认30分钟)
|
||||||
expireTime: 30
|
expireTime: 60
|
||||||
|
|
||||||
mybatis-plus:
|
mybatis-plus:
|
||||||
# 搜索指定包别名
|
# 搜索指定包别名
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
import com.tcctlo.TCCTLawOfficeApplication;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
|
@SpringBootTest(classes = TCCTLawOfficeApplication.class)
|
||||||
|
public class FileTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("测试:截取文件后缀名")
|
||||||
|
public void testFileName(){
|
||||||
|
String fileName = "https://low-office.oss-cn-beijing.aliyuncs.com/low-office-images/2025/01/25/67948d96229fc1a67923a564.xlsx";
|
||||||
|
System.out.println(fileName.substring(fileName.lastIndexOf(".")));
|
||||||
|
}
|
||||||
|
}
|
|
@ -146,6 +146,8 @@
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
<version>3.5.1</version>
|
<version>3.5.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -71,7 +71,9 @@ public class SysLoginService
|
||||||
Authentication authentication = null;
|
Authentication authentication = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// 创建用户名密码对象
|
||||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
|
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
|
||||||
|
//将用户名密码放入认证上下文
|
||||||
AuthenticationContextHolder.setContext(authenticationToken);
|
AuthenticationContextHolder.setContext(authenticationToken);
|
||||||
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
|
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
|
||||||
authentication = authenticationManager.authenticate(authenticationToken);
|
authentication = authenticationManager.authenticate(authenticationToken);
|
||||||
|
@ -94,7 +96,10 @@ public class SysLoginService
|
||||||
AuthenticationContextHolder.clearContext();
|
AuthenticationContextHolder.clearContext();
|
||||||
}
|
}
|
||||||
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
|
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
|
||||||
|
|
||||||
|
//通过springSecurity获取登录用户的信息,包含用户角色、权限
|
||||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||||
|
|
||||||
recordLoginInfo(loginUser.getUserId());
|
recordLoginInfo(loginUser.getUserId());
|
||||||
// 生成token
|
// 生成token
|
||||||
return tokenService.createToken(loginUser);
|
return tokenService.createToken(loginUser);
|
||||||
|
|
|
@ -43,12 +43,19 @@ public class SysPasswordService
|
||||||
|
|
||||||
public void validate(SysUser user)
|
public void validate(SysUser user)
|
||||||
{
|
{
|
||||||
|
//获取当前的认证信息
|
||||||
Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext();
|
Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext();
|
||||||
|
|
||||||
|
//从认证信息中提取用户名
|
||||||
String username = usernamePasswordAuthenticationToken.getName();
|
String username = usernamePasswordAuthenticationToken.getName();
|
||||||
|
|
||||||
|
//从认证信息中提取密码
|
||||||
String password = usernamePasswordAuthenticationToken.getCredentials().toString();
|
String password = usernamePasswordAuthenticationToken.getCredentials().toString();
|
||||||
|
|
||||||
|
//尝试从缓存中获取当前用户的密码重试次数
|
||||||
Integer retryCount = redisCache.getCacheObject(getCacheKey(username));
|
Integer retryCount = redisCache.getCacheObject(getCacheKey(username));
|
||||||
|
|
||||||
|
//如果缓存中没有重试次数,初始化为0
|
||||||
if (retryCount == null)
|
if (retryCount == null)
|
||||||
{
|
{
|
||||||
retryCount = 0;
|
retryCount = 0;
|
||||||
|
|
|
@ -54,8 +54,10 @@ public class UserDetailsServiceImpl implements UserDetailsService
|
||||||
throw new ServiceException(MessageUtils.message("user.blocked"));
|
throw new ServiceException(MessageUtils.message("user.blocked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//验证用户名密码是否正确
|
||||||
passwordService.validate(user);
|
passwordService.validate(user);
|
||||||
|
|
||||||
|
//创建并返回登录用户对象(将用户相关信息存入spring Security)
|
||||||
return createLoginUser(user);
|
return createLoginUser(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class GeneratorUIServer {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
//所有生成的java文件的父包名,后续也可单独在界面上设置
|
//所有生成的java文件的父包名,后续也可单独在界面上设置
|
||||||
.basePackage("com.tcctyn.forestfire")
|
.basePackage("com.tcctlo.law")
|
||||||
.port(8068)
|
.port(8068)
|
||||||
.build();
|
.build();
|
||||||
MybatisPlusToolsApplication.run(config);
|
MybatisPlusToolsApplication.run(config);
|
||||||
|
|
|
@ -1,22 +1,18 @@
|
||||||
package com.tcctlo.law.controller;
|
package com.tcctlo.law.controller;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.tcctlo.common.annotation.Anonymous;
|
||||||
|
import com.tcctlo.law.entity.Goods;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PutMapping;
|
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import com.tcctlo.common.annotation.Log;
|
import com.tcctlo.common.annotation.Log;
|
||||||
import com.tcctlo.common.core.controller.BaseController;
|
import com.tcctlo.common.core.controller.BaseController;
|
||||||
import com.tcctlo.common.core.domain.AjaxResult;
|
import com.tcctlo.common.core.domain.AjaxResult;
|
||||||
import com.tcctlo.common.enums.BusinessType;
|
import com.tcctlo.common.enums.BusinessType;
|
||||||
import com.tcctlo.law.domain.Goods;
|
|
||||||
import com.tcctlo.law.service.IGoodsService;
|
import com.tcctlo.law.service.IGoodsService;
|
||||||
import com.tcctlo.common.utils.poi.ExcelUtil;
|
import com.tcctlo.common.utils.poi.ExcelUtil;
|
||||||
import com.tcctlo.common.core.page.TableDataInfo;
|
import com.tcctlo.common.core.page.TableDataInfo;
|
||||||
|
@ -24,24 +20,32 @@ import com.tcctlo.common.core.page.TableDataInfo;
|
||||||
/**
|
/**
|
||||||
* 商品管理Controller
|
* 商品管理Controller
|
||||||
*
|
*
|
||||||
* @author 张世琪
|
* @author coco
|
||||||
* @date 2025-01-20
|
* @date 2025-01-30
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/tcctlo-law-office/goods")
|
@RequestMapping("/tcctlo-law-office/goods")
|
||||||
public class GoodsController extends BaseController
|
public class GoodsController extends BaseController {
|
||||||
{
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IGoodsService goodsService;
|
private IGoodsService goodsService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模拟案件转移给其他律师
|
||||||
|
* @param map 原承办律师与要转移的律师数据集
|
||||||
|
*/
|
||||||
|
@Anonymous
|
||||||
|
@PostMapping("/hello")
|
||||||
|
public void test(@RequestBody Map<String, Object> map) {
|
||||||
|
System.out.println(map);
|
||||||
|
System.out.println("test");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询商品管理列表
|
* 查询商品管理列表
|
||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:list')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:list')")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(Goods goods)
|
public TableDataInfo list(Goods goods) {
|
||||||
{
|
|
||||||
//测试提交
|
|
||||||
startPage();
|
startPage();
|
||||||
List<Goods> list = goodsService.selectGoodsList(goods);
|
List<Goods> list = goodsService.selectGoodsList(goods);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
|
@ -53,8 +57,7 @@ public class GoodsController extends BaseController
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:export')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:export')")
|
||||||
@Log(title = "商品管理", businessType = BusinessType.EXPORT)
|
@Log(title = "商品管理", businessType = BusinessType.EXPORT)
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
public void export(HttpServletResponse response, Goods goods)
|
public void export(HttpServletResponse response, Goods goods) {
|
||||||
{
|
|
||||||
List<Goods> list = goodsService.selectGoodsList(goods);
|
List<Goods> list = goodsService.selectGoodsList(goods);
|
||||||
ExcelUtil<Goods> util = new ExcelUtil<Goods>(Goods.class);
|
ExcelUtil<Goods> util = new ExcelUtil<Goods>(Goods.class);
|
||||||
util.exportExcel(response, list, "商品管理数据");
|
util.exportExcel(response, list, "商品管理数据");
|
||||||
|
@ -65,8 +68,7 @@ public class GoodsController extends BaseController
|
||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:query')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:query')")
|
||||||
@GetMapping(value = "/{id}")
|
@GetMapping(value = "/{id}")
|
||||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
||||||
{
|
|
||||||
return success(goodsService.selectGoodsById(id));
|
return success(goodsService.selectGoodsById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,8 +78,7 @@ public class GoodsController extends BaseController
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:add')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:add')")
|
||||||
@Log(title = "商品管理", businessType = BusinessType.INSERT)
|
@Log(title = "商品管理", businessType = BusinessType.INSERT)
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public AjaxResult add(@RequestBody Goods goods)
|
public AjaxResult add(@RequestBody Goods goods) {
|
||||||
{
|
|
||||||
return toAjax(goodsService.insertGoods(goods));
|
return toAjax(goodsService.insertGoods(goods));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,8 +88,7 @@ public class GoodsController extends BaseController
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:edit')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:edit')")
|
||||||
@Log(title = "商品管理", businessType = BusinessType.UPDATE)
|
@Log(title = "商品管理", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public AjaxResult edit(@RequestBody Goods goods)
|
public AjaxResult edit(@RequestBody Goods goods) {
|
||||||
{
|
|
||||||
return toAjax(goodsService.updateGoods(goods));
|
return toAjax(goodsService.updateGoods(goods));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +97,8 @@ public class GoodsController extends BaseController
|
||||||
*/
|
*/
|
||||||
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:remove')")
|
@PreAuthorize("@ss.hasPermi('tcctlo-law-office:goods:remove')")
|
||||||
@Log(title = "商品管理", businessType = BusinessType.DELETE)
|
@Log(title = "商品管理", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/{ids}")
|
@DeleteMapping("/{ids}")
|
||||||
public AjaxResult remove(@PathVariable Long[] ids)
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||||
{
|
|
||||||
return toAjax(goodsService.deleteGoodsByIds(ids));
|
return toAjax(goodsService.deleteGoodsByIds(ids));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.tcctlo.law.domain;
|
package com.tcctlo.law.entity;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
import com.tcctlo.common.annotation.Excel;
|
import com.tcctlo.common.annotation.Excel;
|
||||||
|
@ -8,31 +9,31 @@ import com.tcctlo.common.core.domain.BaseEntity;
|
||||||
/**
|
/**
|
||||||
* 商品管理对象 goods
|
* 商品管理对象 goods
|
||||||
*
|
*
|
||||||
* @author 张世琪
|
* @author coco
|
||||||
* @date 2025-01-20
|
* @date 2025-01-30
|
||||||
*/
|
*/
|
||||||
public class Goods extends BaseEntity
|
public class Goods extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 主键 */
|
/** 主键id */
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/** 商品名称 */
|
/** 商品名称 */
|
||||||
@Excel(name = "商品名称")
|
@Excel(name = "商品名称")
|
||||||
private String name;
|
private String goodsName;
|
||||||
|
|
||||||
/** 商品图片 */
|
/** 商品图片 */
|
||||||
@Excel(name = "商品图片")
|
@Excel(name = "商品图片")
|
||||||
private String goodsImage;
|
private String goodsImages;
|
||||||
|
|
||||||
/** 商品文件 */
|
/** 商品文件 */
|
||||||
@Excel(name = "商品文件")
|
@Excel(name = "商品文件")
|
||||||
private String goodsFile;
|
private String goodsFile;
|
||||||
|
|
||||||
/** 商品价格 */
|
/** 商品金额 */
|
||||||
@Excel(name = "商品价格")
|
@Excel(name = "商品金额")
|
||||||
private Long price;
|
private BigDecimal goodsMoney;
|
||||||
|
|
||||||
public void setId(Long id)
|
public void setId(Long id)
|
||||||
{
|
{
|
||||||
|
@ -43,23 +44,23 @@ public class Goods extends BaseEntity
|
||||||
{
|
{
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
public void setName(String name)
|
public void setGoodsName(String goodsName)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.goodsName = goodsName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName()
|
public String getGoodsName()
|
||||||
{
|
{
|
||||||
return name;
|
return goodsName;
|
||||||
}
|
}
|
||||||
public void setGoodsImage(String goodsImage)
|
public void setGoodsImages(String goodsImages)
|
||||||
{
|
{
|
||||||
this.goodsImage = goodsImage;
|
this.goodsImages = goodsImages;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getGoodsImage()
|
public String getGoodsImages()
|
||||||
{
|
{
|
||||||
return goodsImage;
|
return goodsImages;
|
||||||
}
|
}
|
||||||
public void setGoodsFile(String goodsFile)
|
public void setGoodsFile(String goodsFile)
|
||||||
{
|
{
|
||||||
|
@ -70,24 +71,24 @@ public class Goods extends BaseEntity
|
||||||
{
|
{
|
||||||
return goodsFile;
|
return goodsFile;
|
||||||
}
|
}
|
||||||
public void setPrice(Long price)
|
public void setGoodsMoney(BigDecimal goodsMoney)
|
||||||
{
|
{
|
||||||
this.price = price;
|
this.goodsMoney = goodsMoney;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getPrice()
|
public BigDecimal getGoodsMoney()
|
||||||
{
|
{
|
||||||
return price;
|
return goodsMoney;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
.append("id", getId())
|
.append("id", getId())
|
||||||
.append("name", getName())
|
.append("goodsName", getGoodsName())
|
||||||
.append("goodsImage", getGoodsImage())
|
.append("goodsImages", getGoodsImages())
|
||||||
.append("goodsFile", getGoodsFile())
|
.append("goodsFile", getGoodsFile())
|
||||||
.append("price", getPrice())
|
.append("goodsMoney", getGoodsMoney())
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,13 +1,14 @@
|
||||||
package com.tcctlo.law.mapper;
|
package com.tcctlo.law.mapper;
|
||||||
|
|
||||||
|
import com.tcctlo.law.entity.Goods;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.tcctlo.law.domain.Goods;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品管理Mapper接口
|
* 商品管理Mapper接口
|
||||||
*
|
*
|
||||||
* @author 张世琪
|
* @author coco
|
||||||
* @date 2025-01-20
|
* @date 2025-01-30
|
||||||
*/
|
*/
|
||||||
public interface GoodsMapper
|
public interface GoodsMapper
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package com.tcctlo.law.service;
|
package com.tcctlo.law.service;
|
||||||
|
|
||||||
|
import com.tcctlo.law.entity.Goods;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.tcctlo.law.domain.Goods;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品管理Service接口
|
* 商品管理Service接口
|
||||||
*
|
*
|
||||||
* @author 张世琪
|
* @author coco
|
||||||
* @date 2025-01-20
|
* @date 2025-01-30
|
||||||
*/
|
*/
|
||||||
public interface IGoodsService
|
public interface IGoodsService
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
package com.tcctlo.law.service.impl;
|
package com.tcctlo.law.service.impl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.tcctlo.law.entity.Goods;
|
||||||
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 com.tcctlo.law.mapper.GoodsMapper;
|
import com.tcctlo.law.mapper.GoodsMapper;
|
||||||
import com.tcctlo.law.domain.Goods;
|
|
||||||
import com.tcctlo.law.service.IGoodsService;
|
import com.tcctlo.law.service.IGoodsService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品管理Service业务层处理
|
* 商品管理Service业务层处理
|
||||||
*
|
*
|
||||||
* @author 张世琪
|
* @author coco
|
||||||
* @date 2025-01-20
|
* @date 2025-01-30
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class GoodsServiceImpl implements IGoodsService
|
public class GoodsServiceImpl implements IGoodsService
|
||||||
|
|
|
@ -4,25 +4,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.tcctlo.law.mapper.GoodsMapper">
|
<mapper namespace="com.tcctlo.law.mapper.GoodsMapper">
|
||||||
|
|
||||||
<resultMap type="Goods" id="GoodsResult">
|
<resultMap type="com.tcctlo.law.entity.Goods" id="GoodsResult">
|
||||||
<result property="id" column="id" />
|
<result property="id" column="id" />
|
||||||
<result property="name" column="name" />
|
<result property="goodsName" column="goods_name" />
|
||||||
<result property="goodsImage" column="goods_image" />
|
<result property="goodsImages" column="goods_images" />
|
||||||
<result property="goodsFile" column="goods_file" />
|
<result property="goodsFile" column="goods_file" />
|
||||||
<result property="price" column="price" />
|
<result property="goodsMoney" column="goods_money" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectGoodsVo">
|
<sql id="selectGoodsVo">
|
||||||
select id, name, goods_image, goods_file, price from goods
|
select id, goods_name, goods_images, goods_file, goods_money from goods
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectGoodsList" parameterType="Goods" resultMap="GoodsResult">
|
<select id="selectGoodsList" parameterType="com.tcctlo.law.entity.Goods" resultMap="GoodsResult">
|
||||||
<include refid="selectGoodsVo"/>
|
<include refid="selectGoodsVo"/>
|
||||||
<where>
|
<where>
|
||||||
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
|
<if test="goodsName != null and goodsName != ''"> and goods_name like concat('%', #{goodsName}, '%')</if>
|
||||||
<if test="goodsImage != null and goodsImage != ''"> and goods_image = #{goodsImage}</if>
|
<if test="goodsImages != null and goodsImages != ''"> and goods_images = #{goodsImages}</if>
|
||||||
<if test="goodsFile != null and goodsFile != ''"> and goods_file = #{goodsFile}</if>
|
<if test="goodsFile != null and goodsFile != ''"> and goods_file = #{goodsFile}</if>
|
||||||
<if test="price != null "> and price = #{price}</if>
|
<if test="goodsMoney != null "> and goods_money = #{goodsMoney}</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@ -31,29 +31,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="insertGoods" parameterType="Goods" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insertGoods" parameterType="com.tcctlo.law.entity.Goods" useGeneratedKeys="true" keyProperty="id">
|
||||||
insert into goods
|
insert into goods
|
||||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||||
<if test="name != null">name,</if>
|
<if test="goodsName != null">goods_name,</if>
|
||||||
<if test="goodsImage != null">goods_image,</if>
|
<if test="goodsImages != null">goods_images,</if>
|
||||||
<if test="goodsFile != null">goods_file,</if>
|
<if test="goodsFile != null">goods_file,</if>
|
||||||
<if test="price != null">price,</if>
|
<if test="goodsMoney != null">goods_money,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="name != null">#{name},</if>
|
<if test="goodsName != null">#{goodsName},</if>
|
||||||
<if test="goodsImage != null">#{goodsImage},</if>
|
<if test="goodsImages != null">#{goodsImages},</if>
|
||||||
<if test="goodsFile != null">#{goodsFile},</if>
|
<if test="goodsFile != null">#{goodsFile},</if>
|
||||||
<if test="price != null">#{price},</if>
|
<if test="goodsMoney != null">#{goodsMoney},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<update id="updateGoods" parameterType="Goods">
|
<update id="updateGoods" parameterType="com.tcctlo.law.entity.Goods">
|
||||||
update goods
|
update goods
|
||||||
<trim prefix="SET" suffixOverrides=",">
|
<trim prefix="SET" suffixOverrides=",">
|
||||||
<if test="name != null">name = #{name},</if>
|
<if test="goodsName != null">goods_name = #{goodsName},</if>
|
||||||
<if test="goodsImage != null">goods_image = #{goodsImage},</if>
|
<if test="goodsImages != null">goods_images = #{goodsImages},</if>
|
||||||
<if test="goodsFile != null">goods_file = #{goodsFile},</if>
|
<if test="goodsFile != null">goods_file = #{goodsFile},</if>
|
||||||
<if test="price != null">price = #{price},</if>
|
<if test="goodsMoney != null">goods_money = #{goodsMoney},</if>
|
||||||
</trim>
|
</trim>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
Loading…
Reference in New Issue