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 1e8f913f..966f338e 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 @@ -15,6 +15,7 @@ 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; @@ -107,9 +108,76 @@ public interface LogInstanceMapper extends BaseMapperX { * @param type * @return */ - LogInstanceRespVO getNextOrUp(@Param("reqVO") LogInstancePageReqVO dto, + LogInstanceRespVO getMyNextOrUp(@Param("reqVO") LogInstancePageReqVO dto, @Param("id") Long id, @Param("userId") Long userId, @Param("type") Integer type, - @Param("pagingType") Integer pagingType, @Param("userIds") List userIds); + + default IPage getNextOrUp(@Param("reqVO") LogInstancePageReqVO reqVO, + @Param("id") Long id, + @Param("userId") Long userId, + @Param("type") Integer type, + @Param("userIds") List userIds){ + + String sql = ""; + + MPJLambdaWrapperX queryWrapper = new MPJLambdaWrapperX<>(); + queryWrapper.selectAs(LogInstanceDO::getId, LogInstanceRespVO::getId); + queryWrapper.selectAs(LogInstanceDO::getName, LogInstanceRespVO::getName); + queryWrapper.innerJoin(UserPostDO.class, "userPost", UserPostDO::getUserId, LogInstanceDO::getStartUserId); + queryWrapper.innerJoin(DeptDO.class, "dept", DeptDO::getId, LogInstanceDO::getDeptId); + queryWrapper.innerJoin(PostDO.class, "post", PostDO::getId, UserPostDO::getPostId); + if (type == 1) { + sql = " (t.time > tt.time) or\n" + + " (t.time = tt.time and tt.sort > post.sort) or\n" + + " (t.time = tt.time and tt.sort = post.sort and tt.create_time < t.create_time)"; + + queryWrapper.orderByAsc(LogInstanceDO::getTime); + queryWrapper.orderByDesc(PostDO::getSort); + queryWrapper.orderByAsc(LogInstanceDO::getCreateTime); + } + if (type == 0) { + sql = " (t.time < tt.time) or\n" + + " (t.time = tt.time and tt.sort < post.sort) or\n" + + " (t.time = tt.time and tt.sort = post.sort and tt.create_time > t.create_time)"; + + queryWrapper.orderByDesc(LogInstanceDO::getTime); + queryWrapper.orderByAsc(PostDO::getSort); + queryWrapper.orderByDesc(LogInstanceDO::getCreateTime); + } + queryWrapper.innerJoin("(\n" + + "SELECT \n" + + " a.id,\n" + + " a.name,\n" + + " a.time,\n" + + " d.sort,\n" + + " a.create_time\n" + + "FROM \n" + + " work_log_instance_ext a\n" + + " INNER JOIN system_user_post b ON (b.user_id = a.start_user_id) \n" + + " INNER JOIN system_dept c ON (c.id = a.dept_id) \n" + + " INNER JOIN system_post d ON (d.id = b.post_id) \n" + + "WHERE \n" + + " a.id = " + id + "\n" + + " AND a.deleted = 0 \n" + + " AND b.deleted = 0 \n" + + " AND c.deleted = 0 \n" + + " AND d.deleted = 0\n" + + ") tt on \n" + sql); + queryWrapper.eqIfPresent(LogInstanceDO::getDeptId, reqVO.getDeptId()); + queryWrapper.eqIfPresent(LogInstanceDO::getFormId, reqVO.getFormId()); + queryWrapper.eqIfPresent(LogInstanceDO::getStartUserId, reqVO.getStartUserId()); + queryWrapper.betweenIfPresent(LogInstanceDO::getTime, reqVO.getCreateTime()); + queryWrapper.inIfPresent(LogInstanceDO::getStartUserId, userIds); + queryWrapper.ne(LogInstanceDO::getStartUserId, userId); + + if (reqVO.getIsProduce() != null && reqVO.getIsProduce() == 1) { + queryWrapper.like(DeptDO::getFlag, "166"); + } + if (reqVO.getIsProduce() != null && reqVO.getIsProduce() == 2) { + queryWrapper.notLike(DeptDO::getFlag, "166"); + } + + return selectJoinPage(new Page<>(1, 1), LogInstanceRespVO.class, queryWrapper); + } } \ 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 ebde0cd3..873fc912 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,5 +1,6 @@ package cn.iocoder.yudao.module.system.service.worklog; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -256,14 +257,14 @@ public class LogInstanceServiceImpl implements LogInstanceService { if (!records.isEmpty()) { //模版ids过滤 - List workFormIds = records.stream().map(LogInstanceRespVO::getFormId).collect(Collectors.toList()); + Set workFormIds = records.stream().map(LogInstanceRespVO::getFormId).collect(Collectors.toSet()); // 查询模版列表 List formList = logFormService.getFormList(workFormIds); Map formMap = formList.stream().collect(Collectors.toMap(LogFormDO::getId, item -> item)); //查询用户信息列表 - List userIds = records.stream().map(LogInstanceRespVO::getStartUserId).collect(Collectors.toList()); + Set userIds = records.stream().map(LogInstanceRespVO::getStartUserId).collect(Collectors.toSet()); Map userMap = adminUserService.getUserMap(userIds); //遍历 @@ -400,10 +401,26 @@ public class LogInstanceServiceImpl implements LogInstanceService { //以及岗位为总监或副总监的用户 leaderUserIds = adminUserService.getUserByBoss(); } - LogInstanceRespVO upLogInstance = logInstanceMapper.getNextOrUp(dto, id, getLoginUserId(), 1, pagingType, leaderUserIds); - LogInstanceRespVO nextLogInstance = logInstanceMapper.getNextOrUp(dto, id, getLoginUserId(), 0, pagingType, leaderUserIds); - vo.setUpLogInstance(upLogInstance); - vo.setNextLogInstance(nextLogInstance); + if (pagingType == 0) { + IPage upLogInstances = logInstanceMapper.getNextOrUp(dto, id, getLoginUserId(), 1, leaderUserIds); + IPage nextLogInstances = logInstanceMapper.getNextOrUp(dto, id, getLoginUserId(), 0, leaderUserIds); + + if (CollectionUtil.isNotEmpty(upLogInstances.getRecords())) { + vo.setUpLogInstance(upLogInstances.getRecords().get(0)); + } + if (CollectionUtil.isNotEmpty(nextLogInstances.getRecords())) { + vo.setNextLogInstance(nextLogInstances.getRecords().get(0)); + } + } + + if (pagingType == 1) { + LogInstanceRespVO upLogInstance = logInstanceMapper.getMyNextOrUp(dto, id, getLoginUserId(), 1, leaderUserIds); + LogInstanceRespVO nextLogInstance = logInstanceMapper.getMyNextOrUp(dto, id, getLoginUserId(), 0, leaderUserIds); + + vo.setUpLogInstance(upLogInstance); + vo.setNextLogInstance(nextLogInstance); + } + //获取日志详情 return vo; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogInstanceMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogInstanceMapper.xml index d6c4932b..bbb92770 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogInstanceMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/worklog/LogInstanceMapper.xml @@ -94,61 +94,66 @@ or result.data_scope = 1 ) - @@ -156,13 +161,11 @@