diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentLibraryController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentLibraryController.java index 8cde2c3..2ae551a 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentLibraryController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentLibraryController.java @@ -15,10 +15,8 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.util.JwtUtil; -import org.jeecg.modules.database.entity.DocumentHome; -import org.jeecg.modules.database.entity.DocumentLibrary; -import org.jeecg.modules.database.service.IDocumentFavoritesService; -import org.jeecg.modules.database.service.IDocumentLibraryService; +import org.jeecg.modules.database.entity.*; +import org.jeecg.modules.database.service.*; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; @@ -45,7 +43,9 @@ public class DocumentLibraryController extends JeecgController add(@RequestBody DocumentLibrary documentLibrary) { + public Result add(@RequestBody DocumentLibrary documentLibrary, HttpServletRequest request) { documentLibraryService.save(documentLibrary); + String username = JwtUtil.getUserNameByToken(request); + SysUser userByName = userService.getUserByName(username); + DocumentVisitHistory his = new DocumentVisitHistory(); + his.setDocumentId(documentLibrary.getId()); + his.setUserId(userByName.getId()); + his.setVisitCount(1); + documentVisitHistoryService.save(his); return Result.OK("添加成功!"); } @@ -126,8 +133,16 @@ public class DocumentLibraryController extends JeecgController edit(@RequestBody DocumentLibrary documentLibrary) { + public Result edit(@RequestBody DocumentLibrary documentLibrary, HttpServletRequest request) { documentLibraryService.updateById(documentLibrary); + + String username = JwtUtil.getUserNameByToken(request); + SysUser userByName = userService.getUserByName(username); + DocumentVisitHistory his = documentVisitHistoryService.findByUserAndDocId(userByName.getId(), documentLibrary.getId()); + his.setDocumentId(documentLibrary.getId()); + his.setUserId(userByName.getId()); + his.addVisitCount(); + documentVisitHistoryService.saveOrUpdate(his); return Result.OK("编辑成功!"); } @@ -170,11 +185,19 @@ public class DocumentLibraryController extends JeecgController queryById(@RequestParam(name = "id", required = true) String id) { + public Result queryById(@RequestParam(name = "id", required = true) String id, HttpServletRequest request) { DocumentLibrary documentLibrary = documentLibraryService.getById(id); if (documentLibrary == null) { return Result.error("未找到对应数据"); } + + String username = JwtUtil.getUserNameByToken(request); + SysUser userByName = userService.getUserByName(username); + DocumentVisitHistory his = documentVisitHistoryService.findByUserAndDocId(userByName.getId(), documentLibrary.getId()); + his.setDocumentId(documentLibrary.getId()); + his.setUserId(userByName.getId()); + his.addVisitCount(); + documentVisitHistoryService.saveOrUpdate(his); return Result.OK(documentLibrary); } diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentVisitHistoryController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentVisitHistoryController.java new file mode 100644 index 0000000..03d08a1 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/DocumentVisitHistoryController.java @@ -0,0 +1,162 @@ +package org.jeecg.modules.database.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.modules.database.entity.DocumentVisitHistory; +import org.jeecg.modules.database.service.IDocumentVisitHistoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import java.util.Arrays; + +/** + * @Description: 文档访问历史 + * @Author: jeecg-boot + * @Date: 2024-11-14 + * @Version: V1.0 + */ +@Tag(name = "文档访问历史") +@RestController +@RequestMapping("/library/documentVisitHistory") +@Slf4j +public class DocumentVisitHistoryController extends JeecgController { + @Autowired + private IDocumentVisitHistoryService documentVisitHistoryService; + + /** + * 分页列表查询 + * + * @param documentVisitHistory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "文档访问历史-分页列表查询") + @Operation(summary = "文档访问历史-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(DocumentVisitHistory documentVisitHistory, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(documentVisitHistory, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = documentVisitHistoryService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param documentVisitHistory + * @return + */ + @AutoLog(value = "文档访问历史-添加") + @Operation(summary = "文档访问历史-添加") + @RequiresPermissions("library:document_visit_history:add") + @PostMapping(value = "/add") + public Result add(@RequestBody DocumentVisitHistory documentVisitHistory) { + documentVisitHistoryService.save(documentVisitHistory); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param documentVisitHistory + * @return + */ + @AutoLog(value = "文档访问历史-编辑") + @Operation(summary = "文档访问历史-编辑") + @RequiresPermissions("library:document_visit_history:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody DocumentVisitHistory documentVisitHistory) { + documentVisitHistoryService.updateById(documentVisitHistory); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "文档访问历史-通过id删除") + @Operation(summary = "文档访问历史-通过id删除") + @RequiresPermissions("library:document_visit_history:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + documentVisitHistoryService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "文档访问历史-批量删除") + @Operation(summary = "文档访问历史-批量删除") + @RequiresPermissions("library:document_visit_history:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.documentVisitHistoryService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "文档访问历史-通过id查询") + @Operation(summary = "文档访问历史-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + DocumentVisitHistory documentVisitHistory = documentVisitHistoryService.getById(id); + if (documentVisitHistory == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(documentVisitHistory); + } + + /** + * 导出excel + * + * @param request + * @param documentVisitHistory + */ + @RequiresPermissions("library:document_visit_history:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, DocumentVisitHistory documentVisitHistory) { + return super.exportXls(request, documentVisitHistory, DocumentVisitHistory.class, "文档访问历史"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("library:document_visit_history:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, DocumentVisitHistory.class); + } + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentHome.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentHome.java index e33f8fb..9c811d3 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentHome.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentHome.java @@ -4,6 +4,7 @@ */ package org.jeecg.modules.database.entity; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; @@ -19,7 +20,10 @@ import java.util.List; public class DocumentHome implements Serializable { private static final long serialVersionUID = 1L; + @Schema(description = "我的收藏") private List favorite; + @Schema(description = "最新文档") private List latest; + @Schema(description = "最近访问") private List recently; } \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentVisitHistory.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentVisitHistory.java new file mode 100644 index 0000000..a3891cb --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/entity/DocumentVisitHistory.java @@ -0,0 +1,95 @@ +package org.jeecg.modules.database.entity; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 文档访问历史 + * @Author: jeecg-boot + * @Date: 2024-11-14 + * @Version: V1.0 + */ +@Data +@TableName("document_visit_history") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description = "文档访问历史") +public class DocumentVisitHistory implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private String id; + /** + * 创建人 + */ + @Schema(description = "创建人") + private String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private Date createTime; + /** + * 更新人 + */ + @Schema(description = "更新人") + private String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "更新日期") + private Date updateTime; + /** + * 所属部门 + */ + @Schema(description = "所属部门") + private String sysOrgCode; + /** + * 文档ID + */ + @Excel(name = "文档ID", width = 15) + @Schema(description = "文档ID") + private String documentId; + /** + * 用户ID + */ + @Excel(name = "用户ID", width = 15) + @Schema(description = "用户ID") + private String userId; + /** + * 文档标题 + */ + @Excel(name = "文档标题", width = 15) + @Schema(description = "文档标题") + private String documentTitle; + /** + * 访问次数 + */ + @Excel(name = "访问次数", width = 15) + @Schema(description = "访问次数") + private Integer visitCount; + + public void addVisitCount() { + if (this.visitCount == null) { + this.visitCount = 0; + } + this.visitCount++; + } +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentVisitHistoryMapper.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentVisitHistoryMapper.java new file mode 100644 index 0000000..fe563a6 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/DocumentVisitHistoryMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.database.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.database.entity.DocumentVisitHistory; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 文档访问历史 + * @Author: jeecg-boot + * @Date: 2024-11-14 + * @Version: V1.0 + */ +public interface DocumentVisitHistoryMapper extends BaseMapper { + +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/DocumentVisitHistoryMapper.xml b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/DocumentVisitHistoryMapper.xml new file mode 100644 index 0000000..7dba620 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/mapper/xml/DocumentVisitHistoryMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentVisitHistoryService.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentVisitHistoryService.java new file mode 100644 index 0000000..a82da44 --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/IDocumentVisitHistoryService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.database.service; + +import org.jeecg.modules.database.entity.DocumentVisitHistory; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 文档访问历史 + * @Author: jeecg-boot + * @Date: 2024-11-14 + * @Version: V1.0 + */ +public interface IDocumentVisitHistoryService extends IService { + DocumentVisitHistory findByUserAndDocId(String userId, String documentId); +} diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentVisitHistoryServiceImpl.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentVisitHistoryServiceImpl.java new file mode 100644 index 0000000..82b3c7a --- /dev/null +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/service/impl/DocumentVisitHistoryServiceImpl.java @@ -0,0 +1,35 @@ +package org.jeecg.modules.database.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.modules.database.entity.DocumentVisitHistory; +import org.jeecg.modules.database.mapper.DocumentVisitHistoryMapper; +import org.jeecg.modules.database.service.IDocumentVisitHistoryService; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * @Description: 文档访问历史 + * @Author: jeecg-boot + * @Date: 2024-11-14 + * @Version: V1.0 + */ +@Service +public class DocumentVisitHistoryServiceImpl extends ServiceImpl + implements IDocumentVisitHistoryService { + + @Override + public DocumentVisitHistory findByUserAndDocId(String userId, String documentId) { + DocumentVisitHistory one = getOne(new LambdaQueryWrapper().eq(DocumentVisitHistory::getUserId, userId) + .eq(DocumentVisitHistory::getDocumentId, documentId)); + if (Objects.isNull(one)) { + DocumentVisitHistory documentVisitHistory = new DocumentVisitHistory(); + documentVisitHistory.setUserId(userId); + documentVisitHistory.setDocumentId(documentId); + documentVisitHistory.setVisitCount(1); + return documentVisitHistory; + } + return one; + } +}