文件上传更改

This commit is contained in:
XaoLi717 2024-09-13 07:49:10 +08:00
parent c3b80be107
commit 02c5fff316
10 changed files with 823 additions and 0 deletions

View File

@ -0,0 +1,316 @@
package cn.iocoder.yudao.module.only.controller.admin.only;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.onlyoffice.utils.DocumentConstants;
import cn.iocoder.yudao.module.bpm.controller.admin.onlyoffice.utils.FileUtil;
import cn.iocoder.yudao.module.bpm.controller.admin.onlyoffice.utils.Md5Utils;
import cn.iocoder.yudao.module.bpm.controller.admin.onlyoffice.vo.Document;
import cn.iocoder.yudao.module.bpm.service.document.DocumentService;
import cn.iocoder.yudao.module.bpm.service.fileupload.FileUploadService;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.onlyofPageReqVO;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.onlyofRespVO;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.onlyofSaveReqVO;
import cn.iocoder.yudao.module.only.dal.dataobject.only.onlyofDO;
import cn.iocoder.yudao.module.only.service.only.onlyofService;
import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.lang3.StringUtils;
import org.hashids.Hashids;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 文件编辑")
@RestController
@RequestMapping("/only/onlyof")
@Validated
@Controller
public class onlyofController {
@Value("${files.savePath}")
private String filePath;
@Value("${files.docservice.url.site}")
private String officeUrl;
@Value("${files.docservice.url.command}")
private String officeCommand;
@Autowired
private DocumentService documentService;
@Autowired
private FileUploadService uploadService;
@Autowired
RestTemplate restTemplate;
// @Resource
// private DocumentService documentService;
@Resource
private onlyofService onlyofService;
@PostMapping("/create")
@Operation(summary = "创建文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:create')")
public CommonResult<Integer> createonlyof(@Valid @RequestBody onlyofSaveReqVO createReqVO) {
return success(onlyofService.createonlyof(createReqVO));
}
/**
* 下载文档接口
* @param name
* @param response
*/
@GetMapping("/download")
@Operation(summary = "创建文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:create')")
public void download(String name, HttpServletResponse response) {
System.out.println("download---"+name+"-----"+response);
try {
FileUtil.downLoadFile(name,filePath,response);
} catch (IOException e) {
e.printStackTrace();
}
}
@GetMapping("/edit")
@Operation(summary = "更新文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:update')")
public ModelAndView editDocFile(@RequestParam String name, String userName, String userId ,String token, Model model) {
String path = filePath+name;
System.out.println("path:"+path);
ModelAndView mav = new ModelAndView();
Document document = documentService.getDocumentToken(documentService.buildDocument(path, name),token);
mav.addObject("document", document);
if (!documentService.canEdit(document)) {
System.out.println("demo");
return mav;
}
mav.addObject("documentEditParam", documentService.buildDocumentEditParamToken(userId, userName, name,token));
mav.setViewName("editor");
System.out.println(mav);
return mav;
}
@GetMapping("/editStatus")
@Operation(summary = "更新文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:update')")
public ResponseEntity<Object> getDoucmentEditStatus(String name) throws ParseException {
System.out.println("editStatus");
String url = officeUrl+officeCommand;
Map<String,String> map = new HashMap<String,String>();
map.put("c", "forcesave");
String docFileMd5 = Md5Utils.getFileMd5(new File(filePath+name));
if (StringUtils.isBlank(docFileMd5)) {
// throw new DocumentException(ErrorCodeEnum.DOC_FILE_MD5_ERROR);
}
String pathShortMd5 = Md5Utils.md5(filePath + name);
String nameShortMd5 = Md5Utils.md5(name);
Hashids hashids = new Hashids(DocumentConstants.HASH_KEY);
// (将路径字符串短md5值 + 名称字符串短md5值) ==> 再转成短id形式 ==> 作为文档的key暂且认为是不会重复的
String key = hashids.encodeHex(String.format("%s%s%s", docFileMd5,pathShortMd5, nameShortMd5));
map.put("key", key);
map.put("userdata", "sample userdata");
JSONObject obj = (JSONObject) new JSONParser().parse(FileUtil.editStatus(url, JSON.toJSONString(map)));
return new ResponseEntity<Object>(obj, HttpStatus.OK);
}
@RequestMapping("/callback")
@Operation(summary = "更新文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:update')")
public void saveDocumentFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println("callback");
//处理编辑回调逻辑
callBack(request, response);
}
/**
* 处理在线编辑文档的逻辑
* @param request
* @param response
* @throws IOException
*/
private void callBack(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter writer = null;
JSONObject jsonObj = null;
System.out.println("===saveeditedfile------------");
try {
System.out.println("1111");
writer = response.getWriter();
System.out.println("2222");
Scanner scanner = new Scanner(request.getInputStream()).useDelimiter("\\A");
String body = scanner.hasNext() ? scanner.next() : "";
System.out.println("4444: "+body);
jsonObj = (JSONObject) new JSONParser().parse(body);
System.out.println("5555");
// jsonObj = (JSONObject) new JSONParser(body);
System.out.println(jsonObj);
System.out.println("===saveeditedfile:" + jsonObj.get("status"));
/*
0 - no document with the key identifier could be found,
1 - document is being edited,
2 - document is ready for saving,
3 - document saving error has occurred,
4 - document is closed with no changes,
6 - document is being edited, but the current document state is saved,
7 - error has occurred while force saving the document.
* */
if ((long) jsonObj.get("status") == 2) {
FileUtil.callBackSaveDocument(jsonObj,filePath,request, response);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (org.json.simple.parser.ParseException e) {
throw new RuntimeException(e);
}
/*
* status = 1我们给onlyoffice的服务返回{"error":"0"}的信息这样onlyoffice会认为回调接口是没问题的这样就可以在线编辑文档了否则的话会弹出窗口说明
* 在线编辑还没有关闭前端有人下载文档时强制保存最新内容 当status 是6时说明有人在编辑时下载文档
* */
System.out.println(jsonObj.get("status"));
if ((long) jsonObj.get("status") == 6) {
//处理当文档正在编辑为关闭时下载文档
if (((String)jsonObj.get("userdata")).equals("sample userdata")){
FileUtil.callBackSaveDocument(jsonObj,filePath,request, response);
}
System.out.println("====保存失败:");
writer.write("{\"error\":1}");
} else {
//执行删除编辑时下载保存的文件:
FileUtil.deleteTempFile(filePath,request.getParameter("fileName"));
writer.write("{\"error\":0}");
}
}
@PostMapping("/update")
@Operation(summary = "更新文件编辑")
@PreAuthorize("@ss.hasPermission('only:onlyof:update')")
// public ResponseEntity<Object> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
// public ResponseEntity<Object> upload( String file) throws Exception {
public ResponseEntity<Object> upload(@RequestParam("file") MultipartFile file) throws Exception {
System.out.println("Open");
System.out.println("1111"+file.getOriginalFilename());
if (file.isEmpty()){
throw new Exception("上传文件不能为空");
}
// onlyofficeDO upload = new onlyofficeDO();
// System.out.println("3333"+upload);
// String fileName = file.getOriginalFilename();
// //更新保存文件信息到数据库
// FileUtil.saveFile(file.getInputStream(),filePath+file.getOriginalFilename());
// upload.setUploadDate(new Date());
// upload.setFileName(fileName.substring(fileName.indexOf(".")));
// upload.setFilePath(filePath);
// upload.setFileName(file.getOriginalFilename());
// upload.setFileSize(file.getSize());
// System.out.println(upload);
// uploadService.save(upload);
// System.out.println("a111");
return new ResponseEntity<Object>("上传成功", HttpStatus.OK);
}
// public CommonResult<Boolean> updateonlyof(@Valid @RequestBody onlyofSaveReqVO updateReqVO) {
// onlyofService.updateonlyof(updateReqVO);
// return success(true);
// }
@DeleteMapping("/delete")
@Operation(summary = "删除文件编辑")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('only:onlyof:delete')")
public CommonResult<Boolean> deleteonlyof(@RequestParam("id") Integer id) {
onlyofService.deleteonlyof(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得文件编辑")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('only:onlyof:query')")
public CommonResult<onlyofRespVO> getonlyof(@RequestParam("id") Integer id) {
onlyofDO onlyof = onlyofService.getonlyof(id);
return success(BeanUtils.toBean(onlyof, onlyofRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得文件编辑分页")
@PreAuthorize("@ss.hasPermission('only:onlyof:query')")
public CommonResult<PageResult<onlyofRespVO>> getonlyofPage(@Valid onlyofPageReqVO pageReqVO) {
PageResult<onlyofDO> pageResult = onlyofService.getonlyofPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, onlyofRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出文件编辑 Excel")
@PreAuthorize("@ss.hasPermission('only:onlyof:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportonlyofExcel(@Valid onlyofPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<onlyofDO> list = onlyofService.getonlyofPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "文件编辑.xls", "数据", onlyofRespVO.class,
BeanUtils.toBean(list, onlyofRespVO.class));
}
@PostMapping("/upload")
@PreAuthorize("@ss.hasPermission('only:onlyof:query')")
public String upload() {
return "56789";
}
// public ResponseEntity<Object> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
// System.out.println("1111");
// if (file.isEmpty()){
// throw new Exception("上传文件不能为空");
// }
// onlyofficeDO upload = new onlyofficeDO();
// System.out.println("3333"+upload);
// String fileName = file.getOriginalFilename();
// //更新保存文件信息到数据库
// FileUtil.saveFile(file.getInputStream(),filePath+file.getOriginalFilename());
// upload.setUploadDate(new Date());
// upload.setFileName(fileName.substring(fileName.indexOf(".")));
// upload.setFilePath(filePath);
// upload.setFileName(file.getOriginalFilename());
// upload.setFileSize(file.getSize());
// System.out.println(upload);
// uploadService.save(upload);
// System.out.println("a111");
//
// return new ResponseEntity<Object>("上传成功", HttpStatus.OK);
// }
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.only.controller.admin.only.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 文件编辑分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class onlyofPageReqVO extends PageParam {
@Schema(description = "文件名", example = "芋艿")
private String fileName;
@Schema(description = "文件大小")
private Long fileSize;
@Schema(description = "文件类型", example = "1")
private String fileType;
@Schema(description = "文件路径")
private String filePath;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] uploadDate;
@Schema(description = "知识状态0正常 1停用", example = "1")
private String status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.only.controller.admin.only.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 文件编辑 Response VO")
@Data
@ExcelIgnoreUnannotated
public class onlyofRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32318")
@ExcelProperty("id")
private Integer id;
@Schema(description = "文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("文件名")
private String fileName;
@Schema(description = "文件大小")
@ExcelProperty("文件大小")
private Long fileSize;
@Schema(description = "文件类型", example = "1")
@ExcelProperty("文件类型")
private String fileType;
@Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("文件路径")
private String filePath;
@Schema(description = "更新时间")
@ExcelProperty("更新时间")
private LocalDateTime uploadDate;
@Schema(description = "知识状态0正常 1停用", example = "1")
@ExcelProperty("知识状态0正常 1停用")
private String status;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.only.controller.admin.only.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 文件编辑新增/修改 Request VO")
@Data
public class onlyofSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32318")
private Integer id;
@Schema(description = "文件名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@NotEmpty(message = "文件名不能为空")
private String fileName;
@Schema(description = "文件大小")
private Long fileSize;
@Schema(description = "文件类型", example = "1")
private String fileType;
@Schema(description = "文件路径", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "文件路径不能为空")
private String filePath;
@Schema(description = "更新时间")
private LocalDateTime uploadDate;
@Schema(description = "知识状态0正常 1停用", example = "1")
private String status;
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.only.dal.dataobject.only;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 文件编辑 DO
*
* @author 君风
*/
@TableName("file_info")
@KeySequence("file_info_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class onlyofDO extends BaseDO {
/**
* id
*/
@TableId
private Integer id;
/**
* 文件名
*/
private String fileName;
/**
* 文件大小
*/
private Long fileSize;
/**
* 文件类型
*/
private String fileType;
/**
* 文件路径
*/
private String filePath;
/**
* 更新时间
*/
private LocalDateTime uploadDate;
/**
* 知识状态0正常 1停用
*/
private String status;
}

View File

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.only.dal.mysql.only;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.only.dal.dataobject.only.onlyofDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.*;
/**
* 文件编辑 Mapper
*
* @author 君风
*/
@Mapper
public interface onlyofMapper extends BaseMapperX<onlyofDO> {
default PageResult<onlyofDO> selectPage(onlyofPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<onlyofDO>()
.likeIfPresent(onlyofDO::getFileName, reqVO.getFileName())
.eqIfPresent(onlyofDO::getFileSize, reqVO.getFileSize())
.eqIfPresent(onlyofDO::getFileType, reqVO.getFileType())
.eqIfPresent(onlyofDO::getFilePath, reqVO.getFilePath())
.betweenIfPresent(onlyofDO::getUploadDate, reqVO.getUploadDate())
.eqIfPresent(onlyofDO::getStatus, reqVO.getStatus())
.betweenIfPresent(onlyofDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(onlyofDO::getId));
}
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.only.service.only;
import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.*;
import cn.iocoder.yudao.module.only.dal.dataobject.only.onlyofDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
/**
* 文件编辑 Service 接口
*
* @author 君风
*/
public interface onlyofService {
/**
* 创建文件编辑
*
* @param createReqVO 创建信息
* @return 编号
*/
Integer createonlyof(@Valid onlyofSaveReqVO createReqVO);
/**
* 更新文件编辑
*
* @param updateReqVO 更新信息
*/
void updateonlyof(@Valid onlyofSaveReqVO updateReqVO);
/**
* 删除文件编辑
*
* @param id 编号
*/
void deleteonlyof(Integer id);
/**
* 获得文件编辑
*
* @param id 编号
* @return 文件编辑
*/
onlyofDO getonlyof(Integer id);
/**
* 获得文件编辑分页
*
* @param pageReqVO 分页查询
* @return 文件编辑分页
*/
PageResult<onlyofDO> getonlyofPage(onlyofPageReqVO pageReqVO);
}

View File

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.only.service.only;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.*;
import cn.iocoder.yudao.module.only.dal.dataobject.only.onlyofDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.only.dal.mysql.only.onlyofMapper;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.ONLYOF_NOT_EXISTS;
/**
* 文件编辑 Service 实现类
*
* @author 君风
*/
@Service
@Validated
public class onlyofServiceImpl implements onlyofService {
@Resource
private onlyofMapper onlyofMapper;
@Override
public Integer createonlyof(onlyofSaveReqVO createReqVO) {
// 插入
onlyofDO onlyof = BeanUtils.toBean(createReqVO, onlyofDO.class);
onlyofMapper.insert(onlyof);
// 返回
return onlyof.getId();
}
@Override
public void updateonlyof(onlyofSaveReqVO updateReqVO) {
// 校验存在
validateonlyofExists(updateReqVO.getId());
// 更新
onlyofDO updateObj = BeanUtils.toBean(updateReqVO, onlyofDO.class);
onlyofMapper.updateById(updateObj);
}
@Override
public void deleteonlyof(Integer id) {
// 校验存在
validateonlyofExists(id);
// 删除
onlyofMapper.deleteById(id);
}
private void validateonlyofExists(Integer id) {
if (onlyofMapper.selectById(id) == null) {
throw exception(ONLYOF_NOT_EXISTS);
}
}
@Override
public onlyofDO getonlyof(Integer id) {
return onlyofMapper.selectById(id);
}
@Override
public PageResult<onlyofDO> getonlyofPage(onlyofPageReqVO pageReqVO) {
return onlyofMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,12 @@
<?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="cn.iocoder.yudao.module.only.dal.mysql.only.onlyofMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -0,0 +1,154 @@
package cn.iocoder.yudao.module.only.service.only;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.only.controller.admin.only.vo.*;
import cn.iocoder.yudao.module.only.dal.dataobject.only.onlyofDO;
import cn.iocoder.yudao.module.only.dal.mysql.only.onlyofMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import javax.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.ONLYOF_NOT_EXISTS;
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
* {@link onlyofServiceImpl} 的单元测试类
*
* @author 君风
*/
@Import(onlyofServiceImpl.class)
public class onlyofServiceImplTest extends BaseDbUnitTest {
@Resource
private onlyofServiceImpl onlyofService;
@Resource
private onlyofMapper onlyofMapper;
@Test
public void testCreateonlyof_success() {
// 准备参数
onlyofSaveReqVO createReqVO = randomPojo(onlyofSaveReqVO.class).setId(null);
// 调用
Integer onlyofId = onlyofService.createonlyof(createReqVO);
// 断言
assertNotNull(onlyofId);
// 校验记录的属性是否正确
onlyofDO onlyof = onlyofMapper.selectById(onlyofId);
assertPojoEquals(createReqVO, onlyof, "id");
}
@Test
public void testUpdateonlyof_success() {
// mock 数据
onlyofDO dbonlyof = randomPojo(onlyofDO.class);
onlyofMapper.insert(dbonlyof);// @Sql: 先插入出一条存在的数据
// 准备参数
onlyofSaveReqVO updateReqVO = randomPojo(onlyofSaveReqVO.class, o -> {
o.setId(dbonlyof.getId()); // 设置更新的 ID
});
// 调用
onlyofService.updateonlyof(updateReqVO);
// 校验是否更新正确
onlyofDO onlyof = onlyofMapper.selectById(updateReqVO.getId()); // 获取最新的
assertPojoEquals(updateReqVO, onlyof);
}
@Test
public void testUpdateonlyof_notExists() {
// 准备参数
onlyofSaveReqVO updateReqVO = randomPojo(onlyofSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> onlyofService.updateonlyof(updateReqVO), ONLYOF_NOT_EXISTS);
}
@Test
public void testDeleteonlyof_success() {
// mock 数据
onlyofDO dbonlyof = randomPojo(onlyofDO.class);
onlyofMapper.insert(dbonlyof);// @Sql: 先插入出一条存在的数据
// 准备参数
Integer id = dbonlyof.getId();
// 调用
onlyofService.deleteonlyof(id);
// 校验数据不存在了
assertNull(onlyofMapper.selectById(id));
}
@Test
public void testDeleteonlyof_notExists() {
// 准备参数
// Integer id = randomIntegerId();
// 调用, 并断言异常
// assertServiceException(() -> onlyofService.deleteonlyof(id), ONLYOF_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值然后删除 @Disabled 注解
public void testGetonlyofPage() {
// mock 数据
onlyofDO dbonlyof = randomPojo(onlyofDO.class, o -> { // 等会查询到
o.setFileName(null);
o.setFileSize(null);
o.setFileType(null);
o.setFilePath(null);
o.setUploadDate(null);
o.setStatus(null);
o.setCreateTime(null);
});
onlyofMapper.insert(dbonlyof);
// 测试 fileName 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setFileName(null)));
// 测试 fileSize 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setFileSize(null)));
// 测试 fileType 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setFileType(null)));
// 测试 filePath 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setFilePath(null)));
// 测试 uploadDate 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setUploadDate(null)));
// 测试 status 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setStatus(null)));
// 测试 createTime 不匹配
onlyofMapper.insert(cloneIgnoreId(dbonlyof, o -> o.setCreateTime(null)));
// 准备参数
onlyofPageReqVO reqVO = new onlyofPageReqVO();
reqVO.setFileName(null);
reqVO.setFileSize(null);
reqVO.setFileType(null);
reqVO.setFilePath(null);
// reqVO.setUploadDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setStatus(null);
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<onlyofDO> pageResult = onlyofService.getonlyofPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbonlyof, pageResult.getList().get(0));
}
}