dengsixing 11 months ago
parent
commit
761458f0e5

+ 1 - 0
src/main/java/com/fdkankan/jp/xspace/dto/SceneDTO.java

@@ -16,5 +16,6 @@ public class SceneDTO extends RequestBase {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date timeEnd;
     private Long userId;
+    private Long companyId;
 
 }

+ 3 - 0
src/main/java/com/fdkankan/jp/xspace/entity/SceneXspace.java

@@ -58,6 +58,9 @@ public class SceneXspace implements Serializable {
     @TableField("create_time")
     private Date createTime;
 
+    @TableField(value = "creator")
+    private Long creator;
+
     /**
      * 更新时间
      */

+ 16 - 1
src/main/java/com/fdkankan/jp/xspace/service/impl/ScenePlusServiceImpl.java

@@ -10,10 +10,13 @@ import com.fdkankan.jp.xspace.entity.User;
 import com.fdkankan.jp.xspace.mapper.IScenePlusMapper;
 import com.fdkankan.jp.xspace.service.IScenePlusService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.jp.xspace.service.IUserRoleService;
 import com.fdkankan.jp.xspace.vo.SceneVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -26,9 +29,21 @@ import java.util.List;
 @Service
 public class ScenePlusServiceImpl extends ServiceImpl<IScenePlusMapper, ScenePlus> implements IScenePlusService {
 
+    @Autowired
+    private IUserRoleService userRoleService;
+
     @Override
     public PageInfo pageSgMesh(SceneDTO param, User user) {
-        param.setUserId(user.getId());
+
+        Set<Long> roleIds = userRoleService.getByUser(user);
+        if(!roleIds.contains(5L)){//平台管理员可以看到所有
+            if(roleIds.contains(6L)){//公司管理员可以看到同一公司下所有
+                param.setCompanyId(user.getCompanyId());
+            }else{//普通员工只能看到自己的
+                param.setUserId(user.getId());
+            }
+        }
+
         Page<ScenePlus> page = this.baseMapper.pageSgMesh(new Page<>(param.getPageNum(), param.getPageSize()), param);
         List<SceneVO> sceneVOList = BeanUtil.copyToList(page.getRecords(), SceneVO.class);
         sceneVOList.stream().forEach(v->v.setUserName(user.getUserName()));

+ 20 - 3
src/main/java/com/fdkankan/jp/xspace/service/impl/SceneXspaceServiceImpl.java

@@ -2,6 +2,7 @@ package com.fdkankan.jp.xspace.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fdkankan.common.constant.RecStatus;
@@ -10,6 +11,7 @@ import com.fdkankan.jp.xspace.common.PageInfo;
 import com.fdkankan.jp.xspace.common.Result;
 import com.fdkankan.jp.xspace.common.ResultCode;
 import com.fdkankan.jp.xspace.common.constant.OSSPathConstant;
+import com.fdkankan.jp.xspace.common.exception.BusinessException;
 import com.fdkankan.jp.xspace.common.rabbitmq.RabbitmqConstant;
 import com.fdkankan.jp.xspace.common.rabbitmq.dto.SceneXspaceMqDTO;
 import com.fdkankan.jp.xspace.dto.XspacePageDTO;
@@ -31,6 +33,7 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -118,24 +121,38 @@ public class SceneXspaceServiceImpl extends ServiceImpl<ISceneXspaceMapper, Scen
     @Override
     public Result sync(List<String> nums, User user) {
 
-        List<SceneXspace> syncList = this.list(new LambdaQueryWrapper<SceneXspace>().in(SceneXspace::getNum, nums).eq(SceneXspace::getUserId, user.getId()));
-        List<String> canSyncList = nums;
+
+        //过滤掉已同步的场景,防止前端传参错误
+        List<SceneXspace> syncList = this.list(new LambdaQueryWrapper<SceneXspace>().in(SceneXspace::getNum, nums));//.eq(SceneXspace::getUserId, user.getId()));
+        List<String> canSyncList = nums;//实际需要同步的场景集合
         if(CollUtil.isNotEmpty(syncList)){
             List<String> doneNumsList = syncList.stream().map(v -> v.getNum()).collect(Collectors.toList());
             canSyncList = nums.stream().filter(v->!doneNumsList.contains(v)).collect(Collectors.toList());
         }
 
-        List<ScenePlus> scenePlusList = scenePlusService.list(new LambdaQueryWrapper<ScenePlus>().eq(ScenePlus::getUserId, user.getId()).in(ScenePlus::getNum, canSyncList));
+        List<ScenePlus> scenePlusList = scenePlusService.list(new LambdaQueryWrapper<ScenePlus>().in(ScenePlus::getNum, canSyncList));//.eq(ScenePlus::getUserId, user.getId());
         if(CollUtil.isEmpty(scenePlusList)){
             return Result.success();
         }
 
+        //平台管理员:能查看全部场景数据并且支持同步全部得数据 (平台管理员同步后的场景还是归属于之前这个场景的归属者)
+        //公司管理员:仅能看到自己的场景并且同步自己的场景数据
+        //公司员工:仅能看到自己的场景并且同步自己的场景数据
+        Set<Long> roleIds = userRoleService.getByUser(user);
+        if(!roleIds.contains(5L)){
+            List<String> notPermisionNums = scenePlusList.stream().filter(p->!p.getUserId().equals(user.getId())).map(p->p.getNum()).collect(Collectors.toList());
+            if(CollUtil.isNotEmpty(notPermisionNums)){
+                throw new BusinessException(ResultCode.NOT_PERMISSION.code(), JSON.toJSONString(notPermisionNums));
+            }
+        }
+
 
         List<SceneXspace> sceneXspaceList = scenePlusList.stream().map(p -> {
             SceneXspace sceneXspace = new SceneXspace();
             sceneXspace.setNum(p.getNum());
             sceneXspace.setUserId(p.getUserId());
             sceneXspace.setSerial(UniqueStringGenerator.getUniqueString());
+            sceneXspace.setCreator(user.getId());
             return sceneXspace;
         }).collect(Collectors.toList());
 

+ 7 - 1
src/main/resources/mapper/ScenePlusMapper.xml

@@ -7,6 +7,7 @@
         p.title, p.num,p.create_time
         FROM t_scene_plus p
         LEFT JOIN t_scene_plus_ext e ON p.`id` = e.`plus_id`
+        LEFT JOIN t_user u ON p.`user_id` = u.`id`
         WHERE p.rec_status = 'A'
         AND p.`scene_source` = 5
         AND e.`is_obj` = 1
@@ -15,7 +16,12 @@
         AND NOT EXISTS (
             SELECT 1 FROM t_scene_xspace xs WHERE xs.`num` = p.`num` AND xs.`user_id` = p.`user_id` and xs.rec_status = 'A'
         )
-        AND p.`user_id` = #{param.userId}
+        <if test="param.companyId != null">
+            AND u.`company_id` = #{param.companyId}
+        </if>
+        <if test="param.userId != null">
+            AND p.`user_id` = #{param.userId}
+        </if>
         <if test="param.timeStart != null">
             AND p.`create_time` >= #{param.timeStart}
         </if>

+ 1 - 0
src/main/resources/mapper/XspaceUserMapper.xml

@@ -16,6 +16,7 @@
         <if test="param.nickName != null and param.nickName != ''">
             AND u.`nick_name` LIKE concat('%', #{param.nickName}, '%')
         </if>
+        order by xu.id desc;
     </select>
 
 </mapper>