文件上传更改
This commit is contained in:
parent
c3b80be107
commit
02c5fff316
@ -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);
|
||||
// }
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 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;
|
||||
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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>
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user