From f243e54b3ef257c1970630cf6b04d814dd8ddf9c Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sun, 14 Apr 2024 10:43:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=EF=BC=9A=20=E6=88=91?= =?UTF-8?q?=E6=94=B6=E7=9A=84=E5=88=B0=E9=A1=B5=E9=9D=A2=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=20=E8=A7=84=E5=88=99=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E3=80=81=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/worklog/LogInstanceController.java | 78 +++++----- .../admin/worklog/LogRuleController.java | 29 ++++ .../vo/loginstance/LogInstancePageReqVO.java | 14 +- .../vo/loginstance/LogInstanceRespVO.java | 32 +++-- .../worklog/vo/rule/LogRuleSaveReqVO.java | 5 +- .../dal/dataobject/worklog/LogInstanceDO.java | 5 + .../dal/dataobject/worklog/LogRuleDO.java | 4 + .../dal/mysql/worklog/LogInstanceMapper.java | 26 ++-- .../dal/mysql/worklog/LogUseMapper.java | 11 ++ .../service/worklog/LogInstanceService.java | 27 ++-- .../worklog/LogInstanceServiceImpl.java | 136 ++++++++++++++++-- .../service/worklog/LogRuleServiceImpl.java | 42 ++++++ .../system/service/worklog/LogUseService.java | 23 ++- .../service/worklog/LogUseServiceImpl.java | 46 ++++-- .../mapper/user/LogInstanceMapper.xml | 45 +++++- .../mapper/worklog/WorkLogUseMapper.xml | 7 + 16 files changed, 405 insertions(+), 125 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java index f2af66d3..60a69e5e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogInstanceController.java @@ -1,39 +1,34 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog; -import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; - -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; +import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; -@Tag(name = "管理后台 - 日志实例的拓展") +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + +@Tag(name = "管理后台 - 日志实例") @RestController @RequestMapping("/system/log-instance") @Validated @@ -75,21 +70,13 @@ public class LogInstanceController { return success(BeanUtils.toBean(logInstance, LogInstanceRespVO.class)); } - @GetMapping("/my-page") - @Operation(summary = "获得我的日志分页列表", description = "在【我的日志】菜单中,进行调用") - @PreAuthorize("@ss.hasPermission('system:log-instance:query')") - public CommonResult> getMyLogInstancePage(@Valid LogInstancePageReqVO pageReqVO) { - - return success(logInstanceService.getMyProcessInstancePage(getLoginUserId(), pageReqVO)); - } - @GetMapping("/page") - @Operation(summary = "获得我收到的日志分页列表") + @Operation(summary = "获得日志分页列表") @PreAuthorize("@ss.hasPermission('system:view-log:query')") - public CommonResult> getLogInstancePage(@Valid LogInstancePageReqVO pageReqVO) { + public CommonResult> getLogInstancePage(@ModelAttribute LogInstancePageReqVO pageReqVO) { - PageResult pageResult = logInstanceService.getLogInstancePage(pageReqVO); - return success(BeanUtils.toBean(pageResult, LogInstanceRespVO.class)); + IPage pageResult = logInstanceService.getLogInstancePage(pageReqVO); + return success(pageResult); } @PostMapping("/get-dept") @@ -101,14 +88,23 @@ public class LogInstanceController { return success(deptInfo); } + @GetMapping("/get-upLog") + @Operation(summary = "获取上一篇日志,用于导入上一篇日志") + @Parameter(name = "type", description = "日志类型", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('system:view-log:query')") + public CommonResult getUpLog(@RequestParam("type") Integer type) { + + return success(BeanUtils.toBean(logInstanceService.getUpLog(type), LogInstanceRespVO.class)); + } + @GetMapping("/export-excel") - @Operation(summary = "导出日志实例的拓展 Excel") + @Operation(summary = "导出日志实例 Excel") @PreAuthorize("@ss.hasPermission('system:log-instance:export')") @OperateLog(type = EXPORT) public void exportLogInstanceExcel(@Valid LogInstancePageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = logInstanceService.getLogInstancePage(pageReqVO).getList(); + List list = logInstanceService.getLogInstancePage(pageReqVO).getRecords(); // 导出 Excel ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogInstanceRespVO.class, BeanUtils.toBean(list, LogInstanceRespVO.class)); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogRuleController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogRuleController.java index 298aa536..ea2e070b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogRuleController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogRuleController.java @@ -6,11 +6,14 @@ 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.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRulePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRuleRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRuleSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.LogRuleService; +import cn.iocoder.yudao.module.system.service.worklog.LogUseService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -23,6 +26,7 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.util.List; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -36,6 +40,12 @@ public class LogRuleController { @Resource private LogRuleService logRuleService; + @Resource + private LogUseService logUseService; + + @Resource + private AdminUserService userService; + @PostMapping("/create") @Operation(summary = "创建日志规则") @PreAuthorize("@ss.hasPermission('system:log-rule:create')") @@ -65,10 +75,29 @@ public class LogRuleController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('system:log-rule:query')") public CommonResult getLogRule(@RequestParam("id") Long id) { + LogRuleDO logRule = logRuleService.getLogRule(id); + return success(BeanUtils.toBean(logRule, LogRuleRespVO.class)); } + @GetMapping("/get-userInfo") + @Operation(summary = "获得规则内模板使用者信息") + @Parameter(name = "formId", description = "模板编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('system:log-rule:query')") + public CommonResult> getLogUseInfo(@RequestParam("formId") Long formId) { + + //获取模板使用者部门编号组 + List deptIds = logUseService.getDeptByFormId(formId); + //获取模板使用者编号组 + List userIds = logUseService.getUserByFormId(formId); + + //根据部门编号组 获取用户信息 + List userInfo = userService.getUserByDeptIds(deptIds); + + return success(userInfo.stream().filter(user -> userIds.contains(user.getId())).collect(Collectors.toList())); + } + @GetMapping("/page") @Operation(summary = "获得日志规则分页") @PreAuthorize("@ss.hasPermission('system:log-rule:query')") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstancePageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstancePageReqVO.java index c49a9cd7..1ba9beed 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstancePageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstancePageReqVO.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; @@ -8,7 +9,6 @@ import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -44,15 +44,13 @@ public class LogInstancePageReqVO extends PageParam { private Map formVariables; @Schema(description = "创建时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; - @Schema(description = "其他数据") - private OtherData data; + @Schema(description = "未读", example = "0") + private Integer unRead; - private static class OtherData{ - - private List deptIds; - - } + @Schema(description = "分页类型 0是我收到,1是我的", example = "0") + private Integer pagingType; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceRespVO.java index a88e0c70..f47873b1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceRespVO.java @@ -1,14 +1,9 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; - @Schema(description = "管理后台 - 日志实例的拓展 Response VO") @Data @ExcelIgnoreUnannotated @@ -17,10 +12,10 @@ public class LogInstanceRespVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20649") private Long id; - @Schema(description = "日志发起人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24292") + @Schema(description = "日志发起人的用户编号", example = "146") private Long startUserId; - @Schema(description = "日志发起人的部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24292") + @Schema(description = "日志发起人的部门编号", example = "128") private Long deptId; @Schema(description = "日志发起人的用户名称", example = "张三") @@ -39,12 +34,27 @@ public class LogInstanceRespVO { private Long formId; @Schema(description = "模板值") - private Map formVariables; + private String formVariables; + + @Schema(description = "工作日志内容(部分)") + private String workLogContent; @Schema(description = "附件信息") - private List fileItems ; + private String fileItems ; - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; + @Schema(description = "创建时间") + private String createTime; + + @Schema(description = "阅读状态, 0:未读、1:已读", example = "0") + private String readStatus; + + @Schema(description = "评论数", example = "10") + private Integer comment; + + @Schema(description = "已读人数", example = "10") + private Integer readCount; + + @Schema(description = "未读人数", example = "10") + private Integer unreadCount; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/rule/LogRuleSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/rule/LogRuleSaveReqVO.java index fb139140..62d7c486 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/rule/LogRuleSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/rule/LogRuleSaveReqVO.java @@ -12,6 +12,9 @@ public class LogRuleSaveReqVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21181") private Long id; + @Schema(description = "日志模板编号", example = "12") + private Long formId; + @Schema(description = "日志类型", example = "2") private Integer type; @@ -34,7 +37,7 @@ public class LogRuleSaveReqVO { private List userInfo; @Data - private static class UserInfo { + public static class UserInfo { private Long userId; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogInstanceDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogInstanceDO.java index 1eff5a48..1cdaacbc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogInstanceDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogInstanceDO.java @@ -75,4 +75,9 @@ public class LogInstanceDO extends BaseDO { */ @TableField(typeHandler = JacksonTypeHandler.class) private List fileItems ; + + /** + * 时间yyyy-MM-dd 比如 2024-03-13 + */ + private String time; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java index e9633a88..add0ec18 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/worklog/LogRuleDO.java @@ -24,6 +24,10 @@ public class LogRuleDO extends BaseDO { */ @TableId private Long id; + /** + * 日志模板编号 + */ + private Long formId; /** * 日志类型 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java index 487a8cdd..e157d7ab 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogInstanceMapper.java @@ -1,13 +1,15 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -19,24 +21,16 @@ import java.util.List; @Mapper public interface LogInstanceMapper extends BaseMapperX { - default PageResult selectPage(LogInstancePageReqVO reqVO, Long userId) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(LogInstanceDO::getType, reqVO.getType()) - .eqIfPresent(LogInstanceDO::getDeptId, reqVO.getDeptId()) - .eqIfPresent(LogInstanceDO::getStartUserName, reqVO.getStartUserName()) - .betweenIfPresent(LogInstanceDO::getCreateTime, reqVO.getCreateTime()) - .ne(LogInstanceDO::getStartUserId, userId) - .orderByDesc(LogInstanceDO::getId)); - } - default PageResult selectMyPage(Long userId, LogInstancePageReqVO reqVO) { + default List getUpLog(Long userId, Integer type){ - return selectPage(reqVO, new LambdaQueryWrapperX() + return selectList(new LambdaQueryWrapperX() .eq(LogInstanceDO::getStartUserId, userId) - .eqIfPresent(LogInstanceDO::getType, reqVO.getType()) - .betweenIfPresent(LogInstanceDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(LogInstanceDO::getId)); + .eq(LogInstanceDO::getType, type) + .orderByDesc(LogInstanceDO::getCreateTime)); } + IPage selectPageResult(@Param("page")Page page, @Param("reqVO")LogInstancePageReqVO reqVO, @Param("userId")Long userId); + List selectRaedUser(Long deptId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java index b1b33be3..41942f31 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogUseMapper.java @@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; +import java.util.Collection; import java.util.List; /** @@ -19,4 +21,13 @@ public interface LogUseMapper extends BaseMapperX { * @return */ List getFormIdsByDataPermission(); + + default void deleteByFormId(Long formId, Collection userIds) { + + delete(new LambdaQueryWrapper() + .eq(LogUseDO::getFormId, formId) + .in(LogUseDO::getUseUserId, userIds)); + } + + List getDeptByFormId(Long formId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java index 985770af..9655027e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceService.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.system.service.worklog; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; +import com.baomidou.mybatisplus.core.metadata.IPage; import javax.validation.Valid; import java.util.List; @@ -18,7 +18,7 @@ import java.util.List; public interface LogInstanceService { /** - * 创建日志实例的拓展 + * 创建日志实例 * * @param createReqVO 创建信息 * @return 编号 @@ -26,21 +26,21 @@ public interface LogInstanceService { Long createLogInstance(@Valid LogInstanceSaveReqVO createReqVO); /** - * 更新日志实例的拓展 + * 更新日志实例 * * @param updateReqVO 更新信息 */ void updateLogInstance(@Valid LogInstanceSaveReqVO updateReqVO); /** - * 删除日志实例的拓展 + * 删除日志实例 * * @param id 编号 */ void deleteLogInstance(Long id); /** - * 获得日志实例的拓展 + * 获得日志实例 * * @param id 编号 * @return 日志实例的拓展 @@ -48,21 +48,20 @@ public interface LogInstanceService { LogInstanceDO getLogInstance(Long id); /** - * 获得日志实例的拓展分页 + * 获得日志实例分页 * * @param pageReqVO 分页查询 * @return 日志实例的拓展分页 */ - PageResult getLogInstancePage(LogInstancePageReqVO pageReqVO); + IPage getLogInstancePage(LogInstancePageReqVO pageReqVO); /** - * 获得我的日志的分页 - * - * @param userId 用户编号 - * @param pageReqVO 分页请求 - * @return 流程实例的分页 + * 获得我收到的日志页面中的部门列表 */ - PageResult getMyProcessInstancePage(Long userId, LogInstancePageReqVO pageReqVO); - List getDeptInfo(); + + /** + * 获取上一篇日志 + */ + LogInstanceDO getUpLog(Integer type); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java index fe272685..a5b95ac1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogInstanceServiceImpl.java @@ -1,30 +1,36 @@ package cn.iocoder.yudao.module.system.service.worklog; -import ch.qos.logback.core.pattern.ConverterUtil; -import cn.hutool.core.convert.Convert; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONObject; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.system.api.dept.DeptApiImpl; import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO; -import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogInstanceMapper; +import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.system.service.dept.DeptService; -import cn.iocoder.yudao.module.system.service.dict.DictDataService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.WeekFields; +import java.util.Date; import java.util.List; +import java.util.Locale; +import java.util.Map; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -62,6 +68,9 @@ public class LogInstanceServiceImpl implements LogInstanceService { @Override public Long createLogInstance(LogInstanceSaveReqVO createReqVO) { + //校验当前日志类型的日志 是否已提交过 + validateLogInstanceByType(createReqVO); + LogInstanceDO logInstance = BeanUtils.toBean(createReqVO, LogInstanceDO.class); //获取日志类型 @@ -86,6 +95,8 @@ public class LogInstanceServiceImpl implements LogInstanceService { logInstance.setType(logRuleDO.getType()); //设置日志名称 logInstance.setName(adminUserDO.getNickname() + "的" + logFormDo.getName()); + //设置时间 + logInstance.setTime(DateUtil.format(new Date(),"yyyy-MM-dd")); // 插入 logInstanceMapper.insert(logInstance); @@ -101,6 +112,54 @@ public class LogInstanceServiceImpl implements LogInstanceService { return logInstance.getId(); } + private void validateLogInstanceByType(LogInstanceSaveReqVO createReqVO) { + + LogInstanceDO logInstanceDO = getUpLog(createReqVO.getType()); + if (logInstanceDO != null) { + + LocalDate oldTime = logInstanceDO.getCreateTime().toLocalDate(); + LocalDate nowTime = LocalDate.now(); + + //根据日志类型判断 + switch (createReqVO.getType()){ + + //日志类型为日报 + case 1: + if (oldTime.equals(nowTime)) { + + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); + } + //日志类型为周报 + case 2: + WeekFields weekFields = WeekFields.of(Locale.getDefault()); + + // 获取两个日期所属的周数和年份 + int oldWeek = oldTime.get(weekFields.weekOfWeekBasedYear()); + int oldYear = oldTime.get(weekFields.weekBasedYear()); + + int nowWeek = nowTime.get(weekFields.weekOfWeekBasedYear()); + int nowYear = nowTime.get(weekFields.weekBasedYear()); + + if (oldWeek == nowWeek && oldYear == nowYear) { + + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); + } + //日志类型为月报 + case 3: + if (oldTime.getYear() == nowTime.getYear() && oldTime.getMonth() == nowTime.getMonth()) { + + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); + } + //日志类型为年报 + case 4: + if (oldTime.getYear() == nowTime.getYear()) { + + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); + } + } + } + } + @Override public void updateLogInstance(LogInstanceSaveReqVO updateReqVO) { // 校验存在 @@ -130,14 +189,55 @@ public class LogInstanceServiceImpl implements LogInstanceService { } @Override - public PageResult getLogInstancePage(LogInstancePageReqVO pageReqVO) { - return logInstanceMapper.selectPage(pageReqVO, getLoginUserId()); - } + public IPage getLogInstancePage(LogInstancePageReqVO pageReqVO) { - @Override - public PageResult getMyProcessInstancePage(Long userId, LogInstancePageReqVO pageReqVO) { + Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); + IPage pageList = logInstanceMapper.selectPageResult(page, pageReqVO, getLoginUserId()); - return LogInstanceConvert.INSTANCE.convertPage(logInstanceMapper.selectMyPage(userId, pageReqVO)); + List records = pageList.getRecords(); + if (!records.isEmpty()) { + + //模版ids过滤 + List workFormIds = records.stream().map(LogInstanceRespVO::getFormId).collect(Collectors.toList()); + + // 查询模版列表 + List formList = logFormService.getFormList(workFormIds); + Map formMap = formList.stream().collect(Collectors.toMap(LogFormDO::getId, item -> item)); + + //遍历 + records.forEach(item -> { + + //设置日志内部分 + LogFormDO logFormDO = formMap.get(item.getFormId()); + List fields = logFormDO.getFields(); + StringBuilder workLogContent = new StringBuilder(); + if (!item.getFormVariables().isEmpty()) { + JSONObject workLogContentJson = new JSONObject(item.getFormVariables()); + for (String fieldItem : fields) { + JSONObject fieldJson = new JSONObject(fieldItem); + String fieldStr = fieldJson.getStr("field"); + String title = fieldJson.getStr("title"); + String field = workLogContentJson.getStr(fieldStr); + workLogContent.append(title).append(":").append(field); + } + } + item.setWorkLogContent(workLogContent.toString()); + + //设置时间 + LocalDate nowDate = LocalDate.now(); + LocalDateTime createTime = LocalDateTime.parse(item.getCreateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + //日志创建时间是当前日期时 + if (createTime.toLocalDate().equals(nowDate)) { + item.setCreateTime("今日 " + createTime.getHour() + ":" + createTime.getMinute()); + } + //日志创建时间是当前日期前一天时 + if (createTime.toLocalDate().equals(nowDate.minusDays(1))) { + item.setCreateTime("昨日 " + createTime.getHour() + ":" + createTime.getMinute()); + } + }); + } + + return pageList; } @Override @@ -151,4 +251,16 @@ public class LogInstanceServiceImpl implements LogInstanceService { List deptDOS = deptService.getDeptList(deptIds); return BeanUtils.toBean(deptDOS, DeptRespVO.class); } + + @Override + public LogInstanceDO getUpLog(Integer type) { + + LogInstanceDO logInstanceDO = new LogInstanceDO(); + + List logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), type); + if (!logInstanceDOS.isEmpty()) { + logInstanceDO = logInstanceDOS.get(0); + } + return logInstanceDO; + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java index e2937a79..7c7b5a3f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleServiceImpl.java @@ -4,13 +4,17 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRulePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.rule.LogRuleSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO; +import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogFormMapper; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogRuleMapper; +import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseSaveReqDTO; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.List; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_RULE_NOT_EXISTS; @@ -27,11 +31,36 @@ public class LogRuleServiceImpl implements LogRuleService { @Resource private LogRuleMapper logRuleMapper; + @Resource + private LogUseService logUseService; + + @Resource + private LogFormMapper logFormMapper; + @Override public Long createLogRule(LogRuleSaveReqVO createReqVO) { // 插入 LogRuleDO logRule = BeanUtils.toBean(createReqVO, LogRuleDO.class); logRuleMapper.insert(logRule); + + //插入规则后,同步插入模板使用者 + List useDOs = createReqVO.getUserInfo().stream() + .map(user -> { + LogUseSaveReqDTO logUseDo = new LogUseSaveReqDTO(); + logUseDo.setRuleId(createReqVO.getId()); + logUseDo.setFormId(createReqVO.getFormId()); + logUseDo.setUseUserId(user.getUserId()); + logUseDo.setUseUserDept(user.getDeptId()); + return logUseDo; + }).collect(Collectors.toList()); + logUseService.createLogUse(useDOs); + + //把规则编号更新至日志模板表中 + LogFormDO updateObj = new LogFormDO(); + updateObj.setId(createReqVO.getFormId()); + updateObj.setRuleId(createReqVO.getId()); + logFormMapper.updateById(updateObj); + // 返回 return logRule.getId(); } @@ -43,6 +72,19 @@ public class LogRuleServiceImpl implements LogRuleService { // 更新 LogRuleDO updateObj = BeanUtils.toBean(updateReqVO, LogRuleDO.class); logRuleMapper.updateById(updateObj); + + //更新规则表 同步更新模板使用者 + //插入规则后,同步插入模板使用者 + List useDOs = updateReqVO.getUserInfo().stream() + .map(user -> { + LogUseSaveReqDTO logUseDo = new LogUseSaveReqDTO(); + logUseDo.setRuleId(updateReqVO.getId()); + logUseDo.setFormId(updateReqVO.getFormId()); + logUseDo.setUseUserId(user.getUserId()); + logUseDo.setUseUserDept(user.getDeptId()); + return logUseDo; + }).collect(Collectors.toList()); + logUseService.updateLogUse(useDOs, updateReqVO.getFormId()); } @Override diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java index 592da923..4b019de2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseService.java @@ -1,8 +1,9 @@ package cn.iocoder.yudao.module.system.service.worklog; -import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseSaveReqDTO; +import java.util.List; + /** * 日志模板使用者 Service 接口 * @@ -16,20 +17,28 @@ public interface LogUseService { * @param createReqVO 创建信息 * @return 编号 */ - Long createLogUse(LogUseSaveReqDTO createReqVO); + void createLogUse(List createReqVO); /** * 更新日志模板使用者 * * @param updateReqVO 更新信息 */ - void updateLogUse(LogUseSaveReqDTO updateReqVO); + void updateLogUse(List updateReqVO, Long formId); /** - * 获得日志模板使用者 + * 获得日志模板使用者的部门编号组 * - * @param id 编号 - * @return 日志模板使用者 + * @param formId 编号 + * @return 日志模板使用者的部门编号组 */ - LogUseDO getLogUse(Long id); + List getDeptByFormId(Long formId); + + /** + * 获得日志模板使用者编号组 + * + * @param formId 编号 + * @return 日志模板使用者的部门编号组 + */ + List getUserByFormId(Long formId); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java index f37ab7b9..589a3cde 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogUseServiceImpl.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper; @@ -8,8 +9,12 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_USE_NOT_EXISTS; /** @@ -25,21 +30,30 @@ public class LogUseServiceImpl implements LogUseService { private LogUseMapper logUseMapper; @Override - public Long createLogUse(LogUseSaveReqDTO createReqVO) { + public void createLogUse(List createReqVO) { // 插入 - LogUseDO logUse = BeanUtils.toBean(createReqVO, LogUseDO.class); - logUseMapper.insert(logUse); - // 返回 - return logUse.getId(); + List logUse = BeanUtils.toBean(createReqVO, LogUseDO.class); + logUseMapper.insertBatch(logUse); } @Override - public void updateLogUse(LogUseSaveReqDTO updateReqVO) { + public void updateLogUse(List updateReqVO, Long formId) { // 校验存在 - validateLogUseExists(updateReqVO.getFormId()); - // 更新 - LogUseDO updateObj = BeanUtils.toBean(updateReqVO, LogUseDO.class); - logUseMapper.updateById(updateObj); + validateLogUseExists(formId); + List logUseDOS = BeanUtils.toBean(updateReqVO, LogUseDO.class); + + List oldLogUserS = convertList(logUseMapper.selectList(LogUseDO::getFormId, formId), LogUseDO::getUseUserId); + List newLogUsers = convertList(updateReqVO, LogUseSaveReqDTO::getUseUserId); + + Collection createLogUses = CollUtil.subtract(newLogUsers, oldLogUserS); + Collection deleteLogUses = CollUtil.subtract(oldLogUserS, newLogUsers); + + if (CollUtil.isNotEmpty(createLogUses)) { + logUseMapper.insertBatch(logUseDOS.stream().filter(user -> createLogUses.contains(user.getUseUserId())).collect(Collectors.toList())); + } + if (CollUtil.isNotEmpty(deleteLogUses)) { + logUseMapper.deleteByFormId(formId, deleteLogUses); + } } private void validateLogUseExists(Long formId) { @@ -49,7 +63,15 @@ public class LogUseServiceImpl implements LogUseService { } @Override - public LogUseDO getLogUse(Long id) { - return logUseMapper.selectById(id); + public List getDeptByFormId(Long formId) { + + return logUseMapper.getDeptByFormId(formId); + } + + @Override + public List getUserByFormId(Long formId) { + + List logUseDOS = logUseMapper.selectList(LogUseDO::getFormId, formId); + return convertList(logUseDOS, LogUseDO::getUseUserId); } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml index 4692c756..fb9258b3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/user/LogInstanceMapper.xml @@ -83,7 +83,46 @@ or result.data_scope = 1 - - - + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml index d5c35f5d..26f8327e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/WorkLogUseMapper.xml @@ -15,4 +15,11 @@ DISTINCT form_id from work_log_use + + \ No newline at end of file