Procházet zdrojové kódy

pms 日报任务 数据权限

zhangcl před 1 měsícem
rodič
revize
efec0cc1f3

+ 9 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotprojecttask/IotProjectTaskController.java

@@ -395,10 +395,16 @@ public class IotProjectTaskController {
     @GetMapping("/list")
     @Operation(summary = "获得项目信息任务拆分全部数据")
     @PreAuthorize("@ss.hasPermission('rq:iot-project-task:query')")
-    public CommonResult<PageResult<IotProjectTaskRespVO>> getTaskList( IotProjectTaskPageReqVO pageReqVO) {
+    public CommonResult<PageResult<IotProjectTaskRespVO>> getTaskList(IotProjectTaskPageReqVO pageReqVO) {
         Set<Long> idList = new HashSet<>();
-        PageResult<IotProjectTaskDO> taskList = iotProjectTaskService.taskList(pageReqVO, idList);
-        return success(new PageResult<>(buildProjectTaskList(taskList.getList()), taskList.getTotal()));
+        if (StrUtil.isNotBlank(pageReqVO.getSearchKey())) {
+            // app 端搜索
+            PageResult<IotProjectTaskDO> taskList = iotProjectTaskService.appTaskList(pageReqVO, idList);
+            return success(new PageResult<>(buildProjectTaskList(taskList.getList()), taskList.getTotal()));
+        } else {
+            PageResult<IotProjectTaskDO> taskList = iotProjectTaskService.taskList(pageReqVO, idList);
+            return success(new PageResult<>(buildProjectTaskList(taskList.getList()), taskList.getTotal()));
+        }
     }
 
     @GetMapping("/taskWellNames")

+ 32 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotprojecttask/IotProjectTaskMapper.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.dal.mysql.iotprojecttask;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
@@ -13,6 +14,7 @@ import org.apache.ibatis.annotations.Param;
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
@@ -82,6 +84,34 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
         return selectList(wrapper);
     }
 
+    default List<IotProjectTaskDO> selectAppList(IotProjectTaskPageReqVO reqVO) {
+        LambdaQueryWrapperX<IotProjectTaskDO> wrapper = buildCommonQuery(reqVO)
+                .inIfPresent(IotProjectTaskDO::getId, reqVO.getTaskIds());
+
+        // 处理deptId特殊查询
+        if (CollUtil.isNotEmpty(reqVO.getDeptIds())) {
+            String deptIdsJson = reqVO.getDeptIds().stream()
+                    .map(String::valueOf)
+                    .collect(Collectors.joining(",", "[", "]"));
+            wrapper.apply("JSON_OVERLAPS(dept_ids, CAST({0} AS JSON))", deptIdsJson);
+        }
+
+        // 新增searchKey多字段模糊查询
+        if (ObjUtil.isNotEmpty(reqVO.getSearchKey())) {
+            wrapper.and(wq -> wq.like(IotProjectTaskDO::getWellName, reqVO.getSearchKey())
+                    .or()
+                    .like(IotProjectTaskDO::getLocation, reqVO.getSearchKey()));
+        }
+        // 定时任务 如果是平台井 只生成主井号任务
+        if (ObjUtil.isNotEmpty(reqVO.getJobFlag())) {
+            wrapper.and(wq -> wq.ne(IotProjectTaskDO::getStatus, "wg"));
+                    /* .and(innerWq -> innerWq.eq(IotProjectTaskDO::getPlatformWell, 0)
+                    .or()
+                    .eq(IotProjectTaskDO::getPlatformWell, 1))); */
+        }
+        return selectList(wrapper);
+    }
+
     IPage<IotProjectTaskDO> taskList(IPage<?> page,
                                      @Param("companyId") Long companyId,
                                      @Param("manufactureName") String manufactureName,
@@ -90,8 +120,10 @@ public interface IotProjectTaskMapper extends BaseMapperX<IotProjectTaskDO> {
                                      @Param("wellName") String wellName,
                                      @Param("createTime") LocalDateTime[] createTime,
                                      @Param("deptIds") Collection<Long> deptIds,
+                                     @Param("dataPermissionTaskIds") Collection<Long> dataPermissionTaskIds,
                                      @Param("searchDeptIds") Collection<Long> searchDeptIds,
                                      @Param("projectIds") Collection<Long> projectIds,
+                                     @Param("qualifiedTaskIds") Collection<Long> qualifiedTaskIds,
                                      @Param("platformFlag") String platformFlag
     );
 

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoService.java

@@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 import javax.validation.Valid;
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 项目信息 Service 接口
@@ -74,6 +75,12 @@ public interface IotProjectInfoService {
 
     List<DeptDO> companyLevelDepts();
 
+    /**
+     * 查询当前登录用户所属部门及下属部门
+     * @return
+     */
+    Set<Long> customLevelDepts();
+
     /**
      * 保存业务数据中与数据字典值相关的字段 新值 更新到 数据字典
      * @param dictType

+ 18 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojectinfo/IotProjectInfoServiceImpl.java

@@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import cn.iocoder.yudao.module.system.service.dict.DictDataService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -45,7 +46,8 @@ public class IotProjectInfoServiceImpl implements IotProjectInfoService {
     private AdminUserMapper userMapper;
     @Resource
     private DictDataService dictDataService;
-
+    @Resource
+    private DeptService deptService;
 
     @Override
     public Long createIotProjectInfo(IotProjectInfoSaveReqVO createReqVO) {
@@ -247,4 +249,19 @@ public class IotProjectInfoServiceImpl implements IotProjectInfoService {
         return resultDepts;
     }
 
+    @Override
+    public Set<Long> customLevelDepts() {
+        // 找到当前登录人所属部门及子部门列表
+        // 查询当前登录人所属部门
+        Long userId = SecurityFrameworkUtils.getLoginUserId();
+        AdminUserDO user = userMapper.selectById(userId);
+        Long deptId = user.getDeptId();
+        DeptDO dept = deptMapper.selectById(deptId);
+
+        // 找到当前登录人所属部门及子部门
+        Set<Long> allRhChildDeptIds = deptService.getChildDeptIdListFromCache(deptId);
+        allRhChildDeptIds.add(deptId);
+        return allRhChildDeptIds;
+    }
+
 }

+ 8 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskService.java

@@ -72,6 +72,14 @@ public interface IotProjectTaskService {
 
     PageResult<IotProjectTaskDO> taskList(IotProjectTaskPageReqVO taskDO,Collection<Long> deptIds);
 
+    /**
+     * 移动端查询 任务列表
+     * @param taskDO
+     * @param deptIds
+     * @return
+     */
+    PageResult<IotProjectTaskDO> appTaskList(IotProjectTaskPageReqVO taskDO,Collection<Long> deptIds);
+
     /**
      * 查询所有任务井号信息 过滤数据权限
      *

+ 96 - 5
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotprojecttask/IotProjectTaskServiceImpl.java

@@ -274,13 +274,22 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
     @Override
     public PageResult<IotProjectTaskDO> taskList(IotProjectTaskPageReqVO vo, Collection<Long> deptIds) {
         // 查询当前登录人所属部门的公司级组织 查询组织下的项目任务
-        List<DeptDO> depts = iotProjectInfoService.companyLevelDepts();
-        Set<Long> departmentIds = new HashSet<>();
-        if (CollUtil.isNotEmpty(depts)) {
-            depts.forEach(dept -> {
-                departmentIds.add(dept.getId());
+        // List<DeptDO> depts = iotProjectInfoService.companyLevelDepts();
+        // 兼容移动端数据权限
+        Set<Long> dataPermissionTaskIds = new HashSet<>();
+        // 瑞恒 查看 任务列表 设置数据权限
+        Set<Long> customDeptIds = iotProjectInfoService.customLevelDepts();
+        // 根据任务井号 或 施工地点 模糊搜索
+        IotProjectTaskPageReqVO deptIdsReqVO = new IotProjectTaskPageReqVO();
+        deptIdsReqVO.setDeptIds(customDeptIds);
+        List<IotProjectTaskDO> dataPermissionTasks = iotProjectTaskMapper.selectAppList(deptIdsReqVO);
+        if (CollUtil.isNotEmpty(dataPermissionTasks)) {
+            dataPermissionTasks.forEach(task -> {
+                dataPermissionTaskIds.add(task.getId());
             });
         }
+        Set<Long> departmentIds = new HashSet<>();
+
         // 客户名称模板搜索
         Set<Long> projectIds = new HashSet<>();
         if (StrUtil.isNotBlank(vo.getManufactureName())) {
@@ -309,6 +318,86 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
                 return new PageResult<>(new ArrayList<>(), 0l);
             }
         }
+        List<Long> qualifiedTaskIds = new ArrayList<>();
+        IPage<IotProjectTaskDO> taskDOIPage = iotProjectTaskMapper.taskList(Page.of(vo.getPageNo(), vo.getPageSize()),
+                vo.getCompanyId(),
+                vo.getManufactureName(),
+                vo.getContractName(),
+                vo.getContractCode(),
+                vo.getWellName(),
+                vo.getCreateTime(),
+                departmentIds,
+                dataPermissionTaskIds,
+                qualifiedDeptIds,
+                projectIds,
+                qualifiedTaskIds,
+                vo.getPlatformFlag());
+        return new PageResult<>(taskDOIPage.getRecords(), taskDOIPage.getTotal());
+    }
+
+    @Override
+    public PageResult<IotProjectTaskDO> appTaskList(IotProjectTaskPageReqVO vo, Collection<Long> deptIds) {
+        // 查询当前登录人所属部门的公司级组织 查询组织下的项目任务
+        // List<DeptDO> depts = iotProjectInfoService.companyLevelDepts();
+        // 区分当前登录人所属 部门 项目部查看项目下所有部门的数据 施工队伍查看 本队伍的任务井
+        // 符合当前登录人数据权限的 任务id集合
+        Set<Long> dataPermissionTaskIds = new HashSet<>();
+        // 瑞恒 查看 任务列表 设置数据权限
+        Set<Long> customDeptIds = iotProjectInfoService.customLevelDepts();
+        // 根据任务井号 或 施工地点 模糊搜索
+        IotProjectTaskPageReqVO deptIdsReqVO = new IotProjectTaskPageReqVO();
+        deptIdsReqVO.setDeptIds(customDeptIds);
+        List<IotProjectTaskDO> dataPermissionTasks = iotProjectTaskMapper.selectAppList(deptIdsReqVO);
+        if (CollUtil.isNotEmpty(dataPermissionTasks)) {
+            dataPermissionTasks.forEach(task -> {
+                dataPermissionTaskIds.add(task.getId());
+            });
+        }
+        Set<Long> departmentIds = new HashSet<>();
+
+        // 客户名称 模板搜索
+        Set<Long> projectIds = new HashSet<>();
+        // 施工队伍 模糊搜索
+        List<Long> qualifiedDeptIds = new ArrayList<>();
+        // 根据井号 施工地点 模糊搜索 任务井数据
+        List<Long> qualifiedTaskIds = new ArrayList<>();
+        if (StrUtil.isNotBlank(vo.getSearchKey())) {
+            IotProjectInfoPageReqVO reqVO = new IotProjectInfoPageReqVO();
+            if (StrUtil.isNotBlank(vo.getSearchKey())) {
+                reqVO.setManufactureName(vo.getSearchKey());
+            }
+            List<IotProjectInfoDO> matchedProjects = iotProjectInfoMapper.selectList(reqVO);
+            if (CollUtil.isNotEmpty(matchedProjects)) {
+                matchedProjects.forEach(project -> {
+                    projectIds.add(project.getId());
+                });
+            }
+            // 施工队伍 名称 模糊搜索
+            // 根据名称查询部门id
+            DeptListReqVO deptReqVO = new DeptListReqVO();
+            deptReqVO.setName(vo.getDeptName());
+            if (StrUtil.isNotBlank(vo.getDeptName())) {
+                deptReqVO.setName(vo.getDeptName());
+            }
+            if (StrUtil.isNotBlank(vo.getSearchKey())) {
+                deptReqVO.setName(vo.getSearchKey());
+            }
+            List<DeptDO> qualifiedDepts = deptMapper.selectList(deptReqVO);
+            qualifiedDeptIds = convertList(qualifiedDepts, DeptDO::getId);
+
+            // 根据任务井号 或 施工地点 模糊搜索
+            IotProjectTaskPageReqVO wellReqVO = new IotProjectTaskPageReqVO();
+            wellReqVO.setSearchKey(vo.getSearchKey());
+            List<IotProjectTaskDO> tasks = iotProjectTaskMapper.selectList(wellReqVO);
+            if (CollUtil.isNotEmpty(tasks)) {
+                tasks.forEach(task -> {
+                    qualifiedTaskIds.add(task.getId());
+                });
+            }
+        }
+        if (CollUtil.isEmpty(projectIds) && CollUtil.isEmpty(qualifiedDeptIds) && CollUtil.isEmpty(qualifiedTaskIds)) {
+            return new PageResult<>(new ArrayList<>(), 0l);
+        }
 
         IPage<IotProjectTaskDO> taskDOIPage = iotProjectTaskMapper.taskList(Page.of(vo.getPageNo(), vo.getPageSize()),
                 vo.getCompanyId(),
@@ -318,8 +407,10 @@ public class IotProjectTaskServiceImpl implements IotProjectTaskService {
                 vo.getWellName(),
                 vo.getCreateTime(),
                 departmentIds,
+                dataPermissionTaskIds,
                 qualifiedDeptIds,
                 projectIds,
+                qualifiedTaskIds,
                 vo.getPlatformFlag());
         return new PageResult<>(taskDOIPage.getRecords(), taskDOIPage.getTotal());
     }

+ 12 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/resources/mapper/static/iotprojecttask/IotProjectTaskMapper.xml

@@ -101,6 +101,18 @@
                 #{projectId}
             </foreach>
         </if>
+        <if test="qualifiedTaskIds != null and !qualifiedTaskIds.isEmpty()">
+            AND a.id IN
+            <foreach collection="qualifiedTaskIds" item="taskId" open="(" separator="," close=")">
+                #{taskId}
+            </foreach>
+        </if>
+        <if test="dataPermissionTaskIds != null and !dataPermissionTaskIds.isEmpty()">
+            AND a.id IN
+            <foreach collection="dataPermissionTaskIds" item="taskId" open="(" separator="," close=")">
+                #{taskId}
+            </foreach>
+        </if>
         ORDER BY a.id DESC
     </select>