ard-work/src/main/java/com/ruoyi/app/task/controller/ArdAppTaskController.java
@@ -50,6 +50,7 @@ List<ArdAppTask> list = ardAppTaskService.selectArdAppTaskList(ardAppTask); return getDataTable(list); } @ApiOperation("单兵端 - 下发给我的任务列表") @PreAuthorize("@ss.hasPermi('app:task:list')") @GetMapping("/listWithDetail") @@ -99,6 +100,7 @@ /** * 修改app任务管理 */ @ApiOperation("指挥端-修改任务") @PreAuthorize("@ss.hasPermi('app:task:edit')") @Log(title = "app任务管理", businessType = BusinessType.UPDATE) @PutMapping ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTask.java
@@ -1,7 +1,9 @@ package com.ruoyi.app.task.domain; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; @@ -50,6 +52,29 @@ /** app任务详情信息 */ @ApiModelProperty(notes = "app任务详情信息") private List<ArdAppTaskDetail> ardAppTaskDetailList; /** 首次查看时间 */ @Excel(name = "首次查看时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date viewTime; /** 首次查看位置 */ @Excel(name = "首次查看位置") private String viewPosition; public Date getViewTime() { return viewTime; } public void setViewTime(Date viewTime) { this.viewTime = viewTime; } public String getViewPosition() { return viewPosition; } public void setViewPosition(String viewPosition) { this.viewPosition = viewPosition; } public List<ArdAppTaskPic> getArdAppTaskPicList() { ard-work/src/main/java/com/ruoyi/app/task/domain/ArdAppTaskDetail.java
@@ -68,12 +68,12 @@ /** app任务详情图片信息 */ private List<ArdAppTaskDetailPic> ardAppTaskDetailPic; /** 首次查看时间 */ @Excel(name = "首次查看时间") /** 打卡时间 */ @Excel(name = "打卡时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date viewTime; /** 首次查看位置 */ @Excel(name = "首次查看位置") /** 打卡位置 */ @Excel(name = "打卡位置") private String viewPosition; public Date getViewTime() { ard-work/src/main/java/com/ruoyi/app/task/service/IArdAppTaskService.java
@@ -41,6 +41,7 @@ * @return app任务详情集合 */ public List<ArdAppTask> selectArdAppTaskListWithDetail(ArdAppTask ardAppTask); public List<ArdAppTask> selectArdAppTaskListWithDetailById(ArdAppTask ardAppTask); /** * 新增app任务管理 ard-work/src/main/java/com/ruoyi/app/task/service/impl/ArdAppTaskServiceImpl.java
@@ -57,8 +57,7 @@ ArdAppTaskDetailPic ardAppTaskDetailPic = new ArdAppTaskDetailPic(); ardAppTaskDetailPic.setTaskDetailId(id); List<ArdAppTaskDetailPic> ardAppTaskDetailPicList = ardAppTaskDetailPicMapper.selectArdAppTaskDetailPicList(ardAppTaskDetailPic); if(ardAppTaskDetailPicList.size()>0) { if (ardAppTaskDetailPicList.size() > 0) { appTaskDetail.setArdAppTaskDetailPic(ardAppTaskDetailPicList); } return appTaskDetail; @@ -132,8 +131,7 @@ public int updateArdAppTask(ArdAppTask ardAppTask) { ardAppTask.setUpdateBy(SecurityUtils.getUsername()); ardAppTask.setUpdateTime(DateUtils.getNowDate()); ardAppTaskMapper.deleteArdAppTaskPicByTaskId(ardAppTask.getId()); ardAppTaskMapper.deleteArdAppTaskDetailByTaskId(ardAppTask.getId()); insertArdAppTaskPic(ardAppTask); insertArdAppTaskDetail(ardAppTask); return ardAppTaskMapper.updateArdAppTask(ardAppTask); @@ -173,8 +171,10 @@ */ public void insertArdAppTaskPic(ArdAppTask ardAppTask) { List<ArdAppTaskPic> ardAppTaskPicList = ardAppTask.getArdAppTaskPicList(); String id = ardAppTask.getId(); if (StringUtils.isNotNull(ardAppTaskPicList)) { ardAppTaskMapper.deleteArdAppTaskPicByTaskId(ardAppTask.getId()); String id = ardAppTask.getId(); List<ArdAppTaskPic> list = new ArrayList<ArdAppTaskPic>(); for (ArdAppTaskPic ardAppTaskPic : ardAppTaskPicList) { ardAppTaskPic.setId(IdUtils.simpleUUID()); @@ -193,21 +193,29 @@ * @param ardAppTask app任务管理对象 */ public void insertArdAppTaskDetail(ArdAppTask ardAppTask) { List<String> userIds = ardAppTask.getUserIds(); for (String userId : userIds) { List<ArdAppTaskDetail> ardAppTaskDetailList = ardAppTask.getArdAppTaskDetailList(); String id = ardAppTask.getId(); if (StringUtils.isNotNull(ardAppTaskDetailList)) { List<ArdAppTaskDetail> list = new ArrayList<ArdAppTaskDetail>(); for (ArdAppTaskDetail ardAppTaskDetail : ardAppTaskDetailList) { ardAppTaskDetail.setId(IdUtils.simpleUUID()); ardAppTaskDetail.setStatus("0"); ardAppTaskDetail.setTaskId(id); ardAppTaskDetail.setUserId(userId); list.add(ardAppTaskDetail); } if (list.size() > 0) { ardAppTaskMapper.batchArdAppTaskDetail(list); List<ArdAppTaskDetail> ardAppTaskDetailList = ardAppTask.getArdAppTaskDetailList(); if (StringUtils.isNotNull(ardAppTaskDetailList)) { if (ardAppTaskDetailList.size() > 0) { List<String> userIds = ardAppTask.getUserIds(); if (userIds.size() > 0) { ardAppTaskMapper.deleteArdAppTaskDetailByTaskId(ardAppTask.getId()); for (String userId : userIds) { String id = ardAppTask.getId(); if (StringUtils.isNotNull(ardAppTaskDetailList)) { List<ArdAppTaskDetail> list = new ArrayList<ArdAppTaskDetail>(); for (ArdAppTaskDetail ardAppTaskDetail : ardAppTaskDetailList) { ardAppTaskDetail.setId(IdUtils.simpleUUID()); ardAppTaskDetail.setStatus("0"); ardAppTaskDetail.setTaskId(id); ardAppTaskDetail.setUserId(userId); list.add(ardAppTaskDetail); } if (list.size() > 0) { ardAppTaskMapper.batchArdAppTaskDetail(list); } } } } } } ard-work/src/main/resources/mapper/app/ArdAppTaskMapper.xml
@@ -15,6 +15,8 @@ <result property="createTime" column="create_time"/> <result property="updateBy" column="update_by"/> <result property="updateTime" column="update_time"/> <result property="viewTime" column="view_time"/> <result property="viewPosition" column="view_position"/> </resultMap> <resultMap id="ArdAppTaskSubResult" type="ArdAppTask" extends="ArdAppTaskResult"> <collection property="ardAppTaskPicList" notNullColumn="sub2_id" javaType="java.util.List" @@ -61,7 +63,9 @@ c.create_by, c.create_time, c.update_by, c.update_time c.update_time, c.view_time, c.view_position from ard_app_task c left join sys_dept d on d.dept_id = c.dept_id left join sys_user u on u.user_id = c.user_id @@ -77,6 +81,8 @@ a.create_time, a.update_by, a.update_time, a.view_time, a.view_position, b.id as sub2_id, b.task_id as sub2_task_id, b.pic_url as sub2_pic_url, @@ -190,6 +196,8 @@ <if test="createTime != null">create_time = #{createTime},</if> <if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="viewTime != null">view_time = #{viewTime},</if> <if test="viewPosition != null">view_position = #{viewPosition},</if> </trim> where id = #{id} </update> @@ -282,7 +290,7 @@ c.text, c.voice, c.status, c.clock_in_pic_url c.clock_in_pic_url, c.view_time, c.view_position from ard_app_task_detail c ard-work/src/main/resources/mapper/device/ArdCamerasMapper.xml
@@ -92,6 +92,9 @@ <if test="camMaxVisibleDistance != null ">and c.cam_max_visible_distance = #{camMaxVisibleDistance}</if> <if test="camAlarmGuideEnable != null ">and c.cam_alarm_guide_enable = #{camAlarmGuideEnable}</if> <if test="loginId != null ">and c.login_id = #{loginId}</if> <if test="deptId != null ">and (d.dept_id = #{deptId} OR d.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE cast(#{deptId} as varchar) = any(string_to_array(ancestors,',')) )) </if> <!-- 数据范围过滤 --> ${params.dataScope} </where> ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @@ -23,8 +24,7 @@ */ @Aspect @Component public class DataScopeAspect { public class DataScopeAspect { /** * 全部数据权限 */ @@ -56,22 +56,18 @@ public static final String DATA_SCOPE = "dataScope"; @Before("@annotation(controllerDataScope)") public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable { public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable { clearDataScope(point); handleDataScope(point, controllerDataScope); } protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) { protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) { // 获取当前的用户 LoginUser loginUser = SecurityUtils.getLoginUser(); if (StringUtils.isNotNull(loginUser)) { if (StringUtils.isNotNull(loginUser)) { SysUser currentUser = loginUser.getUser(); // 如果是超级管理员,则不过滤数据;如果是app指挥端,则不过滤数据; if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) { if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) { String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext()); dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), controllerDataScope.userAlias(), permission); @@ -83,58 +79,42 @@ /** * 数据范围过滤 * * @param joinPoint 切点 * @param user 用户 * @param deptAlias 部门别名 * @param userAlias 用户别名 * @param joinPoint 切点 * @param user 用户 * @param deptAlias 部门别名 * @param userAlias 用户别名 * @param permission 权限字符 */ public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) { public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) { StringBuilder sqlString = new StringBuilder(); List<String> conditions = new ArrayList<String>(); for (SysRole role : user.getRoles()) { for (SysRole role : user.getRoles()) { String dataScope = role.getDataScope(); if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) { if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope)) { continue; } if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions()) && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) { && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) { continue; } if (DATA_SCOPE_ALL.equals(dataScope)) { if (DATA_SCOPE_ALL.equals(dataScope)) { sqlString = new StringBuilder(); break; } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { } else if (DATA_SCOPE_CUSTOM.equals(dataScope)) { sqlString.append(StringUtils.format( " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); } else if (DATA_SCOPE_DEPT.equals(dataScope)) { } else if (DATA_SCOPE_DEPT.equals(dataScope)) { sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) { } else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {//" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or '{}'= any(string_to_array(ancestors,',') ))", sqlString.append(StringUtils.format( " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or '{}'= any(string_to_array(ancestors,',') ))", deptAlias, user.getDeptId(), user.getDeptId())); } else if (DATA_SCOPE_SELF.equals(dataScope)) { if (StringUtils.isNotBlank(userAlias)) { " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE CAST ( {} AS VARCHAR ) = ANY ( string_to_array( ancestors, ',' )))", deptAlias, user.getDeptId())); } else if (DATA_SCOPE_SELF.equals(dataScope)) { if (StringUtils.isNotBlank(userAlias)) { sqlString.append(StringUtils.format(" OR {}.user_id = '{}' ", userAlias, user.getUserId())); } else { } else { // 数据权限为仅本人且没有userAlias别名不查询任何数据 sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); } @@ -142,11 +122,9 @@ conditions.add(dataScope); } if (StringUtils.isNotBlank(sqlString.toString())) { if (StringUtils.isNotBlank(sqlString.toString())) { Object params = joinPoint.getArgs()[0]; if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) params; baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); } @@ -156,11 +134,9 @@ /** * 拼接权限sql前先清空params.dataScope参数防止注入 */ private void clearDataScope(final JoinPoint joinPoint) { private void clearDataScope(final JoinPoint joinPoint) { Object params = joinPoint.getArgs()[0]; if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { if (StringUtils.isNotNull(params) && params instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) params; baseEntity.getParams().put(DATA_SCOPE, ""); }