Преглед на файлове

日志-oss数据权限优化

lishuangjiang@potevio.com преди 1 година
родител
ревизия
9b7010abb7

+ 2 - 0
iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysLogininforData.java

@@ -34,4 +34,6 @@ public interface ISysLogininforData extends ICommonData<SysLoginInfo, Long> {
      * 清除所有
      */
     void deleteAll();
+
+    void cleanLogininfor();
 }

+ 2 - 0
iot-dao/iot-data-service/src/main/java/cc/iotkit/data/system/ISysOperLogData.java

@@ -25,4 +25,6 @@ public interface ISysOperLogData extends ICommonData<SysOperLog, Long> {
     void deleteByTenantId(String tenantId);
 
     void deleteAll();
+
+    void cleanOperLog();
 }

+ 2 - 1
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbSysOss.java

@@ -1,5 +1,6 @@
 package cc.iotkit.data.model;
 
+import cc.iotkit.common.tenant.dao.TenantAware;
 import cc.iotkit.model.system.SysOss;
 import io.github.linpeilie.annotations.AutoMapper;
 import io.swagger.annotations.ApiModel;
@@ -24,7 +25,7 @@ import javax.persistence.Table;
 @Table(name = "sys_oss")
 @ApiModel(value = "OSS对象存储对象")
 @AutoMapper(target = SysOss.class)
-public class TbSysOss extends BaseEntity {
+public class TbSysOss extends BaseEntity implements TenantAware {
 
     /**
      * 对象存储主键

+ 12 - 18
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysLogininfoDataImpl.java

@@ -23,6 +23,7 @@ import org.springframework.context.annotation.Primary;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -30,7 +31,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import static cc.iotkit.data.model.QTbSysDept.tbSysDept;
 import static cc.iotkit.data.model.QTbSysLogininfor.tbSysLogininfor;
 
 /**
@@ -77,7 +77,7 @@ public class SysLogininfoDataImpl implements ISysLogininforData, IJPACommData<Sy
 
     private static Predicate genPredicate(SysLoginInfo data) {
         PredicateBuilder predicateBuilder = PredicateBuilder.instance()
-//                .and(StringUtils.isNotBlank(LoginHelper.getTenantId()),()->tbSysLogininfor.tenantId.eq(LoginHelper.getTenantId()))
+//                .and(StringUtils.isNotBlank(data.getTenantId()),()->tbSysLogininfor.tenantId.eq(data.getTenantId()))
                 .and(StringUtils.isNotBlank(data.getIpaddr()), () -> tbSysLogininfor.ipaddr.like(data.getIpaddr()))
                 .and(StringUtils.isNotBlank(data.getStatus()), () -> tbSysLogininfor.status.eq(data.getStatus()))
                 .and(StringUtils.isNotBlank(data.getUserName()), () -> tbSysLogininfor.userName.like(data.getUserName()));
@@ -87,20 +87,8 @@ public class SysLogininfoDataImpl implements ISysLogininforData, IJPACommData<Sy
     }
 
     private static void checkDataPermission(PredicateBuilder predicateBuilder, String tenantId){
-        Long deptId = LoginHelper.getDeptId();
-        List<Long> deptList = new ArrayList<>();
-        if(ObjectUtil.isNotNull(deptId)){
-            String ChildDept = RedisUtils.getCacheObject(GlobalConstants.DEPT_CHILD_PREFIX+tenantId+":"+LoginHelper.getDeptId());
-            if(StringUtils.isNotEmpty(ChildDept)){
-                deptList= Arrays.stream(StringUtils.split(ChildDept,",")).map(Long::parseLong).collect(Collectors.toList());
-                deptList.add(LoginHelper.getDeptId());
-            }else{
-                deptList = Collections.singletonList(LoginHelper.getDeptId());
-            }
-        }
-        List<Long> finalDeptList = deptList;
-        predicateBuilder.and(CollectionUtil.isNotEmpty(deptList),()->tbSysLogininfor.createDept.in(finalDeptList));
-
+        List<Long> finalDeptList = PredicateBuilder.queryCacheChildDeptIds(tenantId);
+        predicateBuilder.and(CollectionUtil.isNotEmpty(finalDeptList),()->tbSysLogininfor.createDept.in(finalDeptList));
     }
 
     @Override
@@ -119,6 +107,12 @@ public class SysLogininfoDataImpl implements ISysLogininforData, IJPACommData<Sy
         logininfoRepository.deleteAll();
     }
 
-
-
+    @Override
+    @Transactional
+    public void cleanLogininfor() {
+        SysLoginInfo sysLoginInfo = new SysLoginInfo();
+        sysLoginInfo.setTenantId(LoginHelper.getTenantId());
+        List<Long> childDepts = PredicateBuilder.queryCacheChildDeptIds(LoginHelper.getTenantId());
+        jpaQueryFactory.delete(tbSysLogininfor).where(tbSysLogininfor.createDept.in(CollectionUtil.isNotEmpty(childDepts)?childDepts:Collections.singletonList(-1L))).execute();
+    }
 }

+ 14 - 13
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/service/SysOperLogDataImpl.java

@@ -23,6 +23,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Primary;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -30,6 +31,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static cc.iotkit.data.model.QTbSysLogininfor.tbSysLogininfor;
 import static cc.iotkit.data.model.QTbSysOperLog.tbSysOperLog;
 
 /**
@@ -86,6 +88,15 @@ public class SysOperLogDataImpl implements ISysOperLogData, IJPACommData<SysOper
         operLogRepository.deleteAll();
     }
 
+    @Override
+    @Transactional
+    public void cleanOperLog() {
+        SysOperLog sysOperLog = new SysOperLog();
+        sysOperLog.setTenantId(LoginHelper.getTenantId());
+        List<Long> childDepts = PredicateBuilder.queryCacheChildDeptIds(LoginHelper.getTenantId());
+        jpaQueryFactory.delete(tbSysOperLog).where(tbSysOperLog.createDept.in(CollectionUtil.isNotEmpty(childDepts)?childDepts:Collections.singletonList(-1L))).execute();
+    }
+
     @Override
     public List<SysOperLog> findAllByCondition(SysOperLog data) {
         List<TbSysOperLog> ret = jpaQueryFactory.selectFrom(tbSysOperLog).where(buildQueryCondition(data))
@@ -95,6 +106,7 @@ public class SysOperLogDataImpl implements ISysOperLogData, IJPACommData<SysOper
 
     private Predicate buildQueryCondition(SysOperLog data) {
         PredicateBuilder predicateBuilder = PredicateBuilder.instance()
+//                .and(StringUtils.isNotBlank(data.getTenantId()), () -> tbSysOperLog.tenantId.eq(data.getTenantId()))
                 .and(StringUtils.isNotBlank(data.getTitle()), () -> tbSysOperLog.title.like(data.getTitle()))
                 .and(data.getBusinessType() != null && data.getBusinessType() > 0, () -> tbSysOperLog.businessType.eq(data.getBusinessType()))
                 .and(ArrayUtil.isNotEmpty(data.getBusinessTypes()), () -> tbSysOperLog.businessType.in(Arrays.asList(data.getBusinessTypes())))
@@ -105,19 +117,8 @@ public class SysOperLogDataImpl implements ISysOperLogData, IJPACommData<SysOper
     }
 
     private static void checkDataPermission(PredicateBuilder predicateBuilder, String tenantId){
-        Long deptId = LoginHelper.getDeptId();
-        List<Long> deptList = new ArrayList<>();
-        if(ObjectUtil.isNotNull(deptId)){
-            String ChildDept = RedisUtils.getCacheObject(GlobalConstants.DEPT_CHILD_PREFIX+tenantId+":"+LoginHelper.getDeptId());
-            if(StringUtils.isNotEmpty(ChildDept)){
-                deptList= Arrays.stream(StringUtils.split(ChildDept,",")).map(Long::parseLong).collect(Collectors.toList());
-                deptList.add(LoginHelper.getDeptId());
-            }else{
-                deptList = Collections.singletonList(LoginHelper.getDeptId());
-            }
-        }
-        List<Long> finalDeptList = deptList;
-        predicateBuilder.and(CollectionUtil.isNotEmpty(deptList),()->tbSysOperLog.createDept.in(finalDeptList));
+        List<Long> finalDeptList = PredicateBuilder.queryCacheChildDeptIds(tenantId);
+        predicateBuilder.and(CollectionUtil.isNotEmpty(finalDeptList),()->tbSysOperLog.createDept.in(finalDeptList));
 
     }
 

+ 28 - 0
iot-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/util/PredicateBuilder.java

@@ -1,9 +1,20 @@
 package cc.iotkit.data.util;
 
+import cc.iotkit.common.constant.GlobalConstants;
+import cc.iotkit.common.redis.utils.RedisUtils;
+import cc.iotkit.common.satoken.utils.LoginHelper;
+import cc.iotkit.common.utils.StringUtils;
+import cn.hutool.core.util.ObjectUtil;
 import com.querydsl.core.types.Predicate;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import com.querydsl.core.types.dsl.Expressions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 /**
  * @author: Longjun.Tu
@@ -113,4 +124,21 @@ public class PredicateBuilder {
   private boolean exprIsNull() {
     return null == expression;
   }
+
+
+
+  public static List<Long> queryCacheChildDeptIds(String tenantId){
+    Long deptId = LoginHelper.getDeptId();
+    List<Long> deptList = new ArrayList<>();
+    if(ObjectUtil.isNotNull(deptId)){
+      String ChildDept = RedisUtils.getCacheObject(GlobalConstants.DEPT_CHILD_PREFIX+tenantId+":"+deptId);
+      if(StringUtils.isNotEmpty(ChildDept)){
+        deptList= Arrays.stream(StringUtils.split(ChildDept,",")).map(Long::parseLong).collect(Collectors.toList());
+        deptList.add(deptId);
+      }else{
+        deptList = Collections.singletonList(deptId);
+      }
+    }
+    return deptList;
+  }
 }

+ 6 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysOperlogController.java

@@ -22,7 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author:tfd
@@ -44,6 +46,10 @@ public class SysOperlogController extends BaseController {
     @SaCheckPermission("monitor:operlog:list")
     @PostMapping("/list")
     public Paging<SysOperLogVo> list(@RequestBody @Validated(QueryGroup.class) PageRequest<SysOperLogBo> query) {
+        //按照时间倒叙
+        Map<String,String> sortMap = new HashMap<>();
+        sortMap.put("createTime","desc");
+        query.setSortMap(sortMap);
         return operLogService.selectPageOperLogList(query);
     }
 

+ 2 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysLogininforServiceImpl.java

@@ -134,7 +134,8 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
      */
     @Override
     public void cleanLogininfor() {
-        sysLogininforData.deleteAll();
+        sysLogininforData.cleanLogininfor();
+//        sysLogininforData.deleteAll();
     }
 
     @Override

+ 1 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysOperLogServiceImpl.java

@@ -100,6 +100,6 @@ public class SysOperLogServiceImpl implements ISysOperLogService {
      */
     @Override
     public void cleanOperLog() {
-        sysOperLogData.deleteAll();
+        sysOperLogData.cleanOperLog();
     }
 }

+ 3 - 0
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysOssServiceImpl.java

@@ -8,6 +8,7 @@ import cc.iotkit.common.oss.core.OssClient;
 import cc.iotkit.common.oss.entity.UploadResult;
 import cc.iotkit.common.oss.enumd.AccessPolicyType;
 import cc.iotkit.common.oss.factory.OssFactory;
+import cc.iotkit.common.satoken.utils.LoginHelper;
 import cc.iotkit.common.utils.MapstructUtils;
 import cc.iotkit.common.utils.SpringUtils;
 import cc.iotkit.common.utils.StringUtils;
@@ -94,6 +95,8 @@ public class SysOssServiceImpl implements ISysOssService {
         }
         // 保存文件信息
         SysOss oss = new SysOss();
+        oss.setTenantId(LoginHelper.getTenantId());
+        oss.setCreateDept(LoginHelper.getDeptId());
         oss.setUrl(uploadResult.getUrl());
         oss.setFileSuffix(suffix);
         oss.setFileName(uploadResult.getFilename());