From 9096be7cf38bfb282b340395655b3e085d7c7300 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Mon, 15 Apr 2024 10:38:47 +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/LogFormController.java | 21 +- .../admin/worklog/LogInstanceController.java | 77 +++++++- .../admin/worklog/vo/form/LogFormRespVO.java | 3 + .../vo/loginstance/LogInstancePageReqVO.java | 8 +- .../vo/loginstance/LogInstanceRespVO.java | 18 +- .../vo/loginstance/LogInstanceSaveReqVO.java | 2 + .../convert/worklog/LogInstanceConvert.java | 15 +- .../dal/mysql/worklog/LogFormMapper.java | 11 +- .../dal/mysql/worklog/LogInstanceMapper.java | 11 +- .../dal/mysql/worklog/LogReadMapper.java | 18 ++ .../dal/mysql/worklog/LogUseMapper.java | 8 + .../service/user/AdminUserServiceImpl.java | 4 + .../service/worklog/LogFormServiceImpl.java | 12 +- .../service/worklog/LogInstanceService.java | 8 +- .../worklog/LogInstanceServiceImpl.java | 182 ++++++++++++------ .../service/worklog/LogReadService.java | 15 ++ .../service/worklog/LogReadServiceImpl.java | 24 +++ .../service/worklog/LogRuleService.java | 8 + .../service/worklog/LogRuleServiceImpl.java | 5 + .../system/service/worklog/LogUseService.java | 15 ++ .../service/worklog/LogUseServiceImpl.java | 13 ++ .../mapper/user/LogInstanceMapper.xml | 9 +- 22 files changed, 393 insertions(+), 94 deletions(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogFormController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogFormController.java index eba19673..589fc6a0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogFormController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/LogFormController.java @@ -5,7 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.*; import cn.iocoder.yudao.module.system.convert.worklog.LogFormConvert; 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.service.worklog.LogFormService; +import cn.iocoder.yudao.module.system.service.worklog.LogRuleService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,6 +30,9 @@ public class LogFormController { @Resource private LogFormService formService; + @Resource + private LogRuleService logRuleService; + @PostMapping("/create") @Operation(summary = "创建动态模板") @PreAuthorize("@ss.hasPermission('worklog:form:create')") @@ -57,8 +62,20 @@ public class LogFormController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('worklog:form:query')") public CommonResult getForm(@RequestParam("id") Long id) { + LogFormDO form = formService.getForm(id); - return success(LogFormConvert.INSTANCE.convert(form)); + LogFormRespVO logFormRespVO = LogFormConvert.INSTANCE.convert(form); + + if (form != null) { + + //获取规则信息 + LogRuleDO logRuleDO = logRuleService.getLogRule(form.getRuleId()); + + //设置日志类型 + logFormRespVO.setType(logRuleDO.getType()); + } + + return success(logFormRespVO); } @GetMapping("/list-all-simple") @@ -77,7 +94,7 @@ public class LogFormController { } @GetMapping("/page-by-rule") - @Operation(summary = "获得配置规则后的模板分页") + @Operation(summary = "获得我可以使用的模板分页") @PreAuthorize("@ss.hasPermission('worklog:form:query')") public CommonResult> getFormPageByRule(@Valid LogFormPageReqVO pageVO) { 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 60a69e5e..1598a41a 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 @@ -6,11 +6,14 @@ 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.user.vo.user.UserRespVO; 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 cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; +import cn.iocoder.yudao.module.system.service.worklog.LogReadService; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -23,10 +26,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 日志实例") @RestController @@ -37,6 +44,12 @@ public class LogInstanceController { @Resource private LogInstanceService logInstanceService; + @Resource + private LogReadService logReadService; + + @Resource + private AdminUserService userService; + @PostMapping("/create") @Operation(summary = "创建日志实例") @PreAuthorize("@ss.hasPermission('system:log-instance:create')") @@ -63,11 +76,15 @@ public class LogInstanceController { @GetMapping("/get") @Operation(summary = "获得日志实例") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('system:log-instance:query')") + @Parameter(name = "id", description = "编号", required = true, example = "1") + @PreAuthorize("@ss.hasPermission('system:view-log:query')") public CommonResult getLogInstance(@RequestParam("id") Long id) { - LogInstanceDO logInstance = logInstanceService.getLogInstance(id); - return success(BeanUtils.toBean(logInstance, LogInstanceRespVO.class)); + + //查看日志详情时,变更当前用户日志的阅读状态 + logReadService.updateReadStatus(id, getLoginUserId()); + + LogInstanceRespVO logInstance = logInstanceService.getLogInstance(id); + return success(logInstance); } @GetMapping("/page") @@ -75,7 +92,16 @@ public class LogInstanceController { @PreAuthorize("@ss.hasPermission('system:view-log:query')") public CommonResult> getLogInstancePage(@ModelAttribute LogInstancePageReqVO pageReqVO) { - IPage pageResult = logInstanceService.getLogInstancePage(pageReqVO); + IPage pageResult = logInstanceService.getLogInstancePage(pageReqVO, 0); + return success(pageResult); + } + + @GetMapping("/my-page") + @Operation(summary = "获得我的日志分页列表") + @PreAuthorize("@ss.hasPermission('system:view-log:query')") + public CommonResult> getMyLogInstancePage(@ModelAttribute LogInstancePageReqVO pageReqVO) { + + IPage pageResult = logInstanceService.getLogInstancePage(pageReqVO, 1); return success(pageResult); } @@ -90,11 +116,42 @@ public class LogInstanceController { @GetMapping("/get-upLog") @Operation(summary = "获取上一篇日志,用于导入上一篇日志") - @Parameter(name = "type", description = "日志类型", required = true, example = "1") + @Parameter(name = "formId", description = "日志模板编号", required = true, example = "1") @PreAuthorize("@ss.hasPermission('system:view-log:query')") - public CommonResult getUpLog(@RequestParam("type") Integer type) { + public CommonResult getUpLog(@RequestParam("formId") Long formId) { - return success(BeanUtils.toBean(logInstanceService.getUpLog(type), LogInstanceRespVO.class)); + LogInstanceRespVO logInstanceRespVO = LogInstanceConvert.INSTANCE.convert(logInstanceService.getUpLog(formId, null)); + logInstanceRespVO = logInstanceService.setContentFun(logInstanceRespVO); + + return success(logInstanceRespVO); + } + + @PostMapping("/getByLogId") + @Operation(summary = "获得可查看日志的用户详情") + @Parameter(name = "logId", description = "日志编号", required = true, example = "10") + @PreAuthorize("@ss.hasPermission('system:view-log:query')") + public CommonResult>> getUserByLogId(@RequestParam("logId") Long logId) { + + List> readUserVO = new ArrayList<>(); + + Map> usrMap = logReadService.getUserId(logId); + + List unReadUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(0)), UserRespVO.class); + List readUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(1)), UserRespVO.class); + + Map unReadMap = new HashMap<>(); + Map readMap = new HashMap<>(); + + unReadMap.put("readStatus", 0); + unReadMap.put("value", unReadUserInfo); + + readMap.put("readStatus", 1); + readMap.put("value", readUserInfo); + + readUserVO.add(unReadMap); + readUserVO.add(readMap); + + return success(readUserVO); } @GetMapping("/export-excel") @@ -104,7 +161,7 @@ public class LogInstanceController { public void exportLogInstanceExcel(@Valid LogInstancePageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = logInstanceService.getLogInstancePage(pageReqVO).getRecords(); + List list = logInstanceService.getLogInstancePage(pageReqVO,null).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/vo/form/LogFormRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRespVO.java index 9c2128ff..ba00ee6a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/form/LogFormRespVO.java @@ -17,6 +17,9 @@ public class LogFormRespVO extends LogFormBaseVO { @Schema(description = "表单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long id; + @Schema(description = "日志类型", example = "1") + private Integer type; + @Schema(description = "表单的配置-JSON 字符串", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "表单的配置不能为空") private String conf; 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 1ba9beed..92e013e2 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,7 +1,6 @@ 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; @@ -9,7 +8,6 @@ import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import java.util.Map; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -41,16 +39,12 @@ public class LogInstancePageReqVO extends PageParam { private Long formId; @Schema(description = "模板值") - private Map formVariables; + private String 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 = "未读", example = "0") private Integer unRead; - - @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 f47873b1..56ed8882 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,8 +1,15 @@ package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.List; +import java.util.Map; @Schema(description = "管理后台 - 日志实例的拓展 Response VO") @Data @@ -10,6 +17,7 @@ import lombok.Data; public class LogInstanceRespVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20649") + @JsonSerialize(using = ToStringSerializer.class) private Long id; @Schema(description = "日志发起人的用户编号", example = "146") @@ -36,13 +44,21 @@ public class LogInstanceRespVO { @Schema(description = "模板值") private String formVariables; - @Schema(description = "工作日志内容(部分)") + @Schema(description = "工作日志内容(部分) | 分页列表使用") private String workLogContent; + @Schema(description = "工作日志内容详情") + private List> logDetail; + @Schema(description = "附件信息") private String fileItems ; + @Schema(description = "日志日期") + private String time; + @Schema(description = "创建时间") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private String createTime; @Schema(description = "阅读状态, 0:未读、1:已读", example = "0") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceSaveReqVO.java index 399d17cc..c99e400c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/worklog/vo/loginstance/LogInstanceSaveReqVO.java @@ -35,4 +35,6 @@ public class LogInstanceSaveReqVO { @Schema(description = "附件信息") private List fileItems ; + @Schema(description = "日志详情,日期的值 | yyyy-MM-dd", example = "2024-04-14") + private String time; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogInstanceConvert.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogInstanceConvert.java index 3dae2faf..46fbd741 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogInstanceConvert.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogInstanceConvert.java @@ -1,12 +1,15 @@ package cn.iocoder.yudao.module.system.convert.worklog; -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.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.alibaba.fastjson.JSONObject; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; +import java.time.format.DateTimeFormatter; + /** * 日志详情 Convert * @@ -19,8 +22,14 @@ public interface LogInstanceConvert { LogInstanceDO convert(LogInstanceSaveReqVO bean); + default LogInstanceRespVO convert(LogInstanceDO logInstanceDO) { - LogInstanceRespVO convert(LogInstanceDO bean); + LogInstanceRespVO logInstanceRespVO = BeanUtils.toBean(logInstanceDO, LogInstanceRespVO.class); - PageResult convertPage(PageResult page); + logInstanceRespVO.setFormVariables(JSONObject.toJSONString(logInstanceDO.getFormVariables())); + logInstanceRespVO.setFileItems(JSONObject.toJSONString(logInstanceDO.getFileItems())); + logInstanceRespVO.setCreateTime(logInstanceDO.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + + return logInstanceRespVO; + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java index cb3a6db6..a4d20dbc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogFormMapper.java @@ -2,9 +2,9 @@ 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.framework.mybatis.core.query.QueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; import org.apache.ibatis.annotations.Mapper; @@ -19,10 +19,9 @@ public interface LogFormMapper extends BaseMapperX { .orderByDesc("id")); } - default PageResult selectPageByRule(LogFormPageReqVO reqVO) { - return selectPage(reqVO, new QueryWrapperX() - .likeIfPresent("name", reqVO.getName()) - .isNotNull("rule_id") - .orderByDesc("id")); + default PageResult selectPageByRule(LogFormPageReqVO reqVO, List formIds) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .in(LogFormDO::getId, formIds) + .orderByDesc(LogFormDO::getId)); } } 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 e157d7ab..bce3f1ec 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 @@ -22,15 +22,20 @@ import java.util.List; public interface LogInstanceMapper extends BaseMapperX { - default List getUpLog(Long userId, Integer type){ + default List getUpLog(Long userId, Long formId, Integer type){ return selectList(new LambdaQueryWrapperX() .eq(LogInstanceDO::getStartUserId, userId) - .eq(LogInstanceDO::getType, type) + .eqIfPresent(LogInstanceDO::getFormId, formId) + .eqIfPresent(LogInstanceDO::getType, type) .orderByDesc(LogInstanceDO::getCreateTime)); } - IPage selectPageResult(@Param("page")Page page, @Param("reqVO")LogInstancePageReqVO reqVO, @Param("userId")Long userId); + IPage selectPageResult(@Param("page")Page page, @Param("reqVO")LogInstancePageReqVO reqVO, + @Param("userId")Long userId, @Param("pagingType") Integer pagingType, @Param("logId")Long logId); + + LogInstanceRespVO selectPageResult(@Param("reqVO")LogInstancePageReqVO reqVO, @Param("userId")Long userId, + @Param("pagingType") Integer pagingType, @Param("logId")Long logId); 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/LogReadMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogReadMapper.java index 7526f696..9a5bea14 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogReadMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/worklog/LogReadMapper.java @@ -1,9 +1,12 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 日志查看 Mapper * @@ -11,4 +14,19 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface LogReadMapper extends BaseMapperX { + + default List selectUserByLogId(Long logId, Integer readStatus) { + + return selectList(new LambdaQueryWrapperX() + .eq(LogReadDo::getLogInstanceId, logId) + .eq(LogReadDo::getReadStatus, readStatus)); + } + + default void updateReadStatus(Long logId, Long userId){ + + update(new LogReadDo().setReadStatus(1), + new LambdaQueryWrapperX() + .eq(LogReadDo::getLogInstanceId, logId) + .eq(LogReadDo::getReadUserId, userId)); + } } 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 41942f31..41734fec 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 @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.ibatis.annotations.Mapper; @@ -29,5 +30,12 @@ public interface LogUseMapper extends BaseMapperX { .in(LogUseDO::getUseUserId, userIds)); } + default Long getCountByUser(Long formId, Long userId){ + + return selectCount(new LambdaQueryWrapperX() + .eq(LogUseDO::getUseUserId, userId) + .eq(LogUseDO::getFormId, formId)); + } + 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/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 7425ef2a..fdad8b0c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -25,6 +25,7 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; +import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -74,6 +75,9 @@ public class AdminUserServiceImpl implements AdminUserService { @Resource private UserPostMapper userPostMapper; + @Resource + private LogInstanceService logInstanceService; + @Resource private FileApi fileApi; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java index b31cdd37..2a5abfeb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogFormServiceImpl.java @@ -18,6 +18,7 @@ import javax.annotation.Resource; import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; /** * 动态表单 Service 实现类 @@ -31,6 +32,9 @@ public class LogFormServiceImpl implements LogFormService{ @Resource private LogFormMapper formMapper; + @Resource + private LogUseService logUseService; + @Override public Long createForm(LogFormCreateReqVO createReqVO) { this.checkFields(createReqVO.getFields()); @@ -87,7 +91,13 @@ public class LogFormServiceImpl implements LogFormService{ @Override public PageResult getFormPageByRule(LogFormPageReqVO pageReqVO) { - return formMapper.selectPageByRule(pageReqVO); + + List formIds = logUseService.getFormIdByUserId(getLoginUserId()); + if (formIds.isEmpty()) { + + return null; + } + return formMapper.selectPageByRule(pageReqVO, formIds); } /** 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 9655027e..c20a06c4 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 @@ -45,7 +45,7 @@ public interface LogInstanceService { * @param id 编号 * @return 日志实例的拓展 */ - LogInstanceDO getLogInstance(Long id); + LogInstanceRespVO getLogInstance(Long id); /** * 获得日志实例分页 @@ -53,7 +53,7 @@ public interface LogInstanceService { * @param pageReqVO 分页查询 * @return 日志实例的拓展分页 */ - IPage getLogInstancePage(LogInstancePageReqVO pageReqVO); + IPage getLogInstancePage(LogInstancePageReqVO pageReqVO, Integer pagingType); /** * 获得我收到的日志页面中的部门列表 @@ -63,5 +63,7 @@ public interface LogInstanceService { /** * 获取上一篇日志 */ - LogInstanceDO getUpLog(Integer type); + LogInstanceDO getUpLog(Long formId, Integer type); + + LogInstanceRespVO setContentFun(LogInstanceRespVO logInstanceRespVO); } \ 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 a5b95ac1..62095a3b 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,6 +1,5 @@ package cn.iocoder.yudao.module.system.service.worklog; -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.controller.admin.dept.vo.dept.DeptRespVO; @@ -25,18 +24,15 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; 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.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_INSTANCE_NOT_EXISTS; -import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_RULE_NOT_FIND; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; /** * 日志实例的拓展 Service 实现类 @@ -54,11 +50,14 @@ public class LogInstanceServiceImpl implements LogInstanceService { private DeptService deptService; @Resource - private LogRuleService logRuleService; + private LogUseService logUseService; @Resource private LogFormService logFormService; + @Resource + private LogRuleService logRuleService; + @Resource private AdminUserService adminUserService; @@ -75,13 +74,16 @@ public class LogInstanceServiceImpl implements LogInstanceService { //获取日志类型 LogFormDO logFormDo = logFormService.getForm(createReqVO.getFormId()); - LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId()); - if (logRuleDO == null) { - throw exception(LOG_RULE_NOT_FIND); + + Long count = logUseService.getCountByUser(logFormDo.getId(), getLoginUserId()); + if (count == 0L) { + throw exception(LOG_FORM_NOT_USE); } //获取部门信息 AdminUserDO adminUserDO = adminUserService.getUser(getLoginUserId()); + //获取规则信息 + LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId()); //设置发起人用户编号 logInstance.setStartUserId(getLoginUserId()); @@ -95,8 +97,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")); + //设置日志日期 + logInstance.setTime(createReqVO.getTime()); // 插入 logInstanceMapper.insert(logInstance); @@ -112,51 +114,55 @@ public class LogInstanceServiceImpl implements LogInstanceService { return logInstance.getId(); } + /** + * 校验当前日志类型的日志 是否已提交过 + */ private void validateLogInstanceByType(LogInstanceSaveReqVO createReqVO) { - LogInstanceDO logInstanceDO = getUpLog(createReqVO.getType()); - if (logInstanceDO != null) { + LogInstanceDO logInstanceDO = getUpLog(null, createReqVO.getType()); + if (logInstanceDO == null) { + return; + } - LocalDate oldTime = logInstanceDO.getCreateTime().toLocalDate(); - LocalDate nowTime = LocalDate.now(); + LocalDate oldTime = LocalDate.parse(logInstanceDO.getTime()); + LocalDate nowTime = LocalDate.now(); - //根据日志类型判断 - switch (createReqVO.getType()){ + //根据日志类型判断 + switch (createReqVO.getType()){ - //日志类型为日报 - case 1: - if (oldTime.equals(nowTime)) { + //日志类型为日报 + case 1: + if (oldTime.equals(nowTime)) { - throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); - } + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "日报"); + } //日志类型为周报 - case 2: - WeekFields weekFields = WeekFields.of(Locale.getDefault()); + case 2: + WeekFields weekFields = WeekFields.of(Locale.getDefault()); - // 获取两个日期所属的周数和年份 - int oldWeek = oldTime.get(weekFields.weekOfWeekBasedYear()); - int oldYear = oldTime.get(weekFields.weekBasedYear()); + // 获取两个日期所属的周数和年份 + int oldWeek = oldTime.get(weekFields.weekOfWeekBasedYear()); + int oldYear = oldTime.get(weekFields.weekBasedYear()); - int nowWeek = nowTime.get(weekFields.weekOfWeekBasedYear()); - int nowYear = nowTime.get(weekFields.weekBasedYear()); + int nowWeek = nowTime.get(weekFields.weekOfWeekBasedYear()); + int nowYear = nowTime.get(weekFields.weekBasedYear()); - if (oldWeek == nowWeek && oldYear == nowYear) { + if (oldWeek == nowWeek && oldYear == nowYear) { - throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); - } + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "周报"); + } //日志类型为月报 - case 3: - if (oldTime.getYear() == nowTime.getYear() && oldTime.getMonth() == nowTime.getMonth()) { + case 3: + if (oldTime.getYear() == nowTime.getYear() && oldTime.getMonth() == nowTime.getMonth()) { - throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); - } + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "月报"); + } //日志类型为年报 - case 4: - if (oldTime.getYear() == nowTime.getYear()) { + case 4: + if (oldTime.getYear() == nowTime.getYear()) { - throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType()); - } - } + throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "年报"); + } } } @@ -164,6 +170,25 @@ public class LogInstanceServiceImpl implements LogInstanceService { public void updateLogInstance(LogInstanceSaveReqVO updateReqVO) { // 校验存在 validateLogInstanceExists(updateReqVO.getId()); + + //校验要修改的日志是否是当天发送的 + LogInstanceDO logInstanceDO = logInstanceMapper.selectById(updateReqVO.getId()); + if (!logInstanceDO.getCreateTime().toLocalDate().equals(LocalDate.now())) { + + throw exception(LOG_NOT_DATE); + } + + LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId()); + String endTime = logRuleDO.getEndTime(); + if (logRuleDO.getType() != 1) { + + endTime = endTime.split(",")[1]; + } + + if (LocalTime.now().isBefore(LocalTime.parse(endTime))) { + throw exception(LOG_NOT_UPDATE); + } + // 更新 LogInstanceDO updateObj = BeanUtils.toBean(updateReqVO, LogInstanceDO.class); logInstanceMapper.updateById(updateObj); @@ -184,15 +209,20 @@ public class LogInstanceServiceImpl implements LogInstanceService { } @Override - public LogInstanceDO getLogInstance(Long id) { - return logInstanceMapper.selectById(id); + public LogInstanceRespVO getLogInstance(Long id) { + + //获取日志详情 + LogInstanceRespVO logInstanceRespVO = logInstanceMapper.selectPageResult(new LogInstancePageReqVO(), getLoginUserId(), null, id); + + //设置日志详情 模板内容和时间 + return setContentFun(logInstanceRespVO); } @Override - public IPage getLogInstancePage(LogInstancePageReqVO pageReqVO) { + public IPage getLogInstancePage(LogInstancePageReqVO pageReqVO, Integer pagingType) { Page page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); - IPage pageList = logInstanceMapper.selectPageResult(page, pageReqVO, getLoginUserId()); + IPage pageList = logInstanceMapper.selectPageResult(page, pageReqVO, getLoginUserId(), pagingType, null); List records = pageList.getRecords(); if (!records.isEmpty()) { @@ -228,11 +258,11 @@ public class LogInstanceServiceImpl implements LogInstanceService { 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()); + item.setCreateTime("今日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm"))); } //日志创建时间是当前日期前一天时 if (createTime.toLocalDate().equals(nowDate.minusDays(1))) { - item.setCreateTime("昨日 " + createTime.getHour() + ":" + createTime.getMinute()); + item.setCreateTime("昨日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm"))); } }); } @@ -253,14 +283,56 @@ public class LogInstanceServiceImpl implements LogInstanceService { } @Override - public LogInstanceDO getUpLog(Integer type) { + public LogInstanceDO getUpLog(Long formId, Integer type) { - LogInstanceDO logInstanceDO = new LogInstanceDO(); - - List logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), type); + List logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId, type); if (!logInstanceDOS.isEmpty()) { - logInstanceDO = logInstanceDOS.get(0); + + return logInstanceDOS.get(0); } - return logInstanceDO; + + return null; + } + + @Override + public LogInstanceRespVO setContentFun(LogInstanceRespVO logInstanceRespVO) { + + if (logInstanceRespVO.getFormId() == null) { + return logInstanceRespVO; + } + //获取模板信息 + LogFormDO logFormDO = logFormService.getForm(logInstanceRespVO.getFormId()); + List fields = logFormDO.getFields(); + List> logDetail = new ArrayList<>(); + + if (!logInstanceRespVO.getFormVariables().isEmpty()) { + JSONObject workLogContentJson = new JSONObject(logInstanceRespVO.getFormVariables()); + for (String fieldItem : fields) { + Map detail = new HashMap<>(); + + JSONObject fieldJson = new JSONObject(fieldItem); + String fieldStr = fieldJson.getStr("field"); + String title = fieldJson.getStr("title"); + String field = workLogContentJson.getStr(fieldStr); + + detail.put("title", title); + detail.put("value", field); + logDetail.add(detail); + } + logInstanceRespVO.setLogDetail(logDetail); + } + //设置时间 + LocalDate nowDate = LocalDate.now(); + LocalDateTime createTime = LocalDateTime.parse(logInstanceRespVO.getCreateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + //日志创建时间是当前日期时 + if (createTime.toLocalDate().equals(nowDate)) { + logInstanceRespVO.setCreateTime("今日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm"))); + } + //日志创建时间是当前日期前一天时 + if (createTime.toLocalDate().equals(nowDate.minusDays(1))) { + logInstanceRespVO.setCreateTime("昨日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm"))); + } + + return logInstanceRespVO; } } \ 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/LogReadService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java index 18449439..5070432d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadService.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO; import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * 日志查看 Service 接口 @@ -19,4 +20,18 @@ public interface LogReadService { * @param createReqVO 创建信息 */ void createLogRule(@Valid List createReqVO, Long logInstanceId, Long startUserId); + + /** + * 获取日志可查看的用户编号组 + * @param logId 日志编号 + * @return 阅读状态,用户编号组 + */ + Map> getUserId(Long logId); + + /** + * 更新日志阅读状态 + * @param logId 日志编号 + * @param userId 查看者用户编号 + */ + void updateReadStatus(Long logId, Long userId); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java index 898307cf..57ce78bc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogReadServiceImpl.java @@ -7,9 +7,13 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; + /** * 日志查看 Service 实现类 * @@ -39,4 +43,24 @@ public class LogReadServiceImpl implements LogReadService{ logReadMapper.insertBatch(userInfoList); } + + @Override + public Map> getUserId(Long logId) { + + Map> readDoMap = new HashMap<>(); + + List UnReadDos = logReadMapper.selectUserByLogId(logId, 0); + List readDos = logReadMapper.selectUserByLogId(logId, 1); + + readDoMap.put(0, convertList(UnReadDos, LogReadDo::getReadUserId)); + readDoMap.put(1, convertList(readDos, LogReadDo::getReadUserId)); + + return readDoMap; + } + + @Override + public void updateReadStatus(Long logId, Long userId) { + + logReadMapper.updateReadStatus(logId, userId); + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java index b10221c6..945dd2d4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/worklog/LogRuleService.java @@ -45,6 +45,14 @@ public interface LogRuleService { */ LogRuleDO getLogRule(Long id); + /** + * 获得日志规则 + * + * @param formId 模板编号 + * @return 日志规则 + */ + LogRuleDO getLogRuleByFormId(Long formId); + /** * 获得日志规则分页 * 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 7c7b5a3f..59fbced7 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 @@ -106,6 +106,11 @@ public class LogRuleServiceImpl implements LogRuleService { return logRuleMapper.selectById(id); } + @Override + public LogRuleDO getLogRuleByFormId(Long formId) { + return logRuleMapper.selectOne(LogRuleDO::getFormId, formId); + } + @Override public PageResult getLogRulePage(LogRulePageReqVO pageReqVO) { return logRuleMapper.selectPage(pageReqVO); 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 4b019de2..a1941c09 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 @@ -41,4 +41,19 @@ public interface LogUseService { * @return 日志模板使用者的部门编号组 */ List getUserByFormId(Long formId); + + /** + * 根据使用者编号和模板编号,查询模板数量 + * @param formId 模板编号 + * @param userId 用户编号 + * @return 数量 + */ + Long getCountByUser(Long formId, Long userId); + + /** + * 获取我可以使用的模板编号组 + * @param userId 用户编号 + * @return 日志模板编号组 + */ + List getFormIdByUserId(Long userId); } \ 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 589a3cde..b6e7150f 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 @@ -74,4 +74,17 @@ public class LogUseServiceImpl implements LogUseService { List logUseDOS = logUseMapper.selectList(LogUseDO::getFormId, formId); return convertList(logUseDOS, LogUseDO::getUseUserId); } + + @Override + public Long getCountByUser(Long formId, Long userId) { + + return logUseMapper.getCountByUser(formId, userId); + } + + @Override + public List getFormIdByUserId(Long userId) { + + List logUseDOS = logUseMapper.selectList(LogUseDO::getUseUserId, userId); + return convertList(logUseDOS, LogUseDO::getFormId); + } } \ 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 fb9258b3..0c320b08 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 @@ -92,12 +92,15 @@ COUNT(d.log_instance_id) AS unreadCount FROM work_log_instance_ext as a - LEFT JOIN work_log_comment as b ON a.start_user_id = b.user_id + LEFT JOIN work_log_comment as b ON a.id = b.work_log_id LEFT JOIN work_log_read as e ON a.id = e.log_instance_id and e.read_user_id = #{userId} LEFT JOIN work_log_read as c ON a.id = c.log_instance_id and c.read_status = 1 LEFT JOIN work_log_read as d ON a.id = d.log_instance_id and d.read_status = 0 where 1=1 + + and a.id = #{logId} + and a.type = #{reqVO.type} @@ -116,10 +119,10 @@ and e.read_status = 0 - + and a.start_user_id != #{userId} - + and a.start_user_id = #{userId} GROUP BY a.id,e.read_status