server/meeting/meeting_admin/src/main/java/com/doumee/MeetingAdminApplication.java
@@ -16,8 +16,8 @@ @Slf4j @EnableAsync @SpringBootApplication @MapperScan("com.doumee.dao.*") @EnableDiscoveryClient @MapperScan("com.doumee.dao") public class MeetingAdminApplication { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(MeetingAdminApplication.class); server/meeting/meeting_admin/src/main/java/com/doumee/api/business/BookingsController.java
@@ -66,7 +66,7 @@ @GetMapping("/delete/{id}") @RequiresPermissions("business:bookings:delete") public ApiResponse deleteById(@PathVariable Integer id) { bookingsService.deleteById(id); bookingsService.deleteById(id,this.getLoginUser(null)); return ApiResponse.success(null); } @@ -79,7 +79,7 @@ for (String id : idArray) { idList.add(Integer.valueOf(id)); } bookingsService.deleteByIdInBatch(idList); bookingsService.deleteByIdInBatch(idList,this.getLoginUser(null)); return ApiResponse.success(null); } server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java
@@ -83,7 +83,7 @@ bq2.eq(Bookings::getStatus, Constants.ZERO); bq2.apply("DATE_FORMAT(t.START_TIME,'%Y-%m-%d') = DATE_FORMAT(now(),'%Y-%m-%d') " ); // bq2.last("limit 1"); bq2.select("(select count(u.id) from user_rel u where u.ISDELETED=0 and u.OBJ_ID=t.id)as bookingUser"); bq2.select("(select count(u.id) from meeting_user_rel u where u.ISDELETED=0 and u.OBJ_ID=t.id)as bookingUser"); List<Bookings> bk2= bookingsJoinMapper.selectJoinList(Bookings.class,bq2); Integer bookingUser=0; server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/BookingsCloudController.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.doumee.api.BaseController; import com.doumee.config.annotation.CloudRequiredPermission; import com.doumee.core.annotation.excel.ExcelExporter; import com.doumee.core.annotation.pr.PreventRepeat; import com.doumee.core.model.ApiResponse; @@ -23,7 +24,6 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -54,7 +54,7 @@ @PreventRepeat @ApiOperation("新建") @PostMapping("/create") @RequiresPermissions("business:bookings:create") @CloudRequiredPermission("business:bookings:create") public ApiResponse create(@RequestBody Bookings bookings,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ LoginUserInfo user = getLoginUser(token); bookings.setLoginUserInfo(user); @@ -64,7 +64,7 @@ @ApiOperation("根据ID删除") @GetMapping("/delete/{id}") @RequiresPermissions("business:bookings:delete") @CloudRequiredPermission("business:bookings:delete") public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ bookingsService.deleteById(id,this.getLoginUser(token)); return ApiResponse.success(null); @@ -72,7 +72,7 @@ @ApiOperation("批量删除") @GetMapping("/delete/batch") @RequiresPermissions("business:bookings:delete") @CloudRequiredPermission("business:bookings:delete") public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ String [] idArray = ids.split(","); List<Integer> idList = new ArrayList<>(); @@ -85,7 +85,7 @@ @ApiOperation("根据ID修改") @PostMapping("/updateById") @RequiresPermissions("business:bookings:update") @CloudRequiredPermission("business:bookings:update") public ApiResponse updateById(@RequestBody Bookings bookings,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ LoginUserInfo user = getLoginUser(token); bookings.setLoginUserInfo(user); @@ -96,21 +96,21 @@ @ApiOperation("分页查询") @PostMapping("/page") @RequiresPermissions("business:bookings:query") @CloudRequiredPermission("business:bookings:query") public ApiResponse<PageData<Bookings>> findPage (@RequestBody PageWrap<Bookings> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ return ApiResponse.success(bookingsService.findPage(pageWrap)); } @ApiOperation("导出Excel") @PostMapping("/exportExcel") @RequiresPermissions("business:bookings:exportExcel") @CloudRequiredPermission("business:bookings:exportExcel") public void exportExcel (@RequestBody PageWrap<Bookings> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ ExcelExporter.build(Bookings.class).export(bookingsService.findPage(pageWrap).getRecords(), "会议室预定信息表", response); } @ApiOperation("根据ID查询") @GetMapping("/{id}") @RequiresPermissions("business:bookings:query") @CloudRequiredPermission("business:bookings:query") public ApiResponse<MeetingDetailResponse> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ return ApiResponse.success(bookingsService.getMeetingDetail(id)); } @@ -118,7 +118,7 @@ @ApiOperation("取消") @PostMapping("/cancelById") @RequiresPermissions("business:bookings:update") @CloudRequiredPermission("business:bookings:update") public ApiResponse cancelById(@RequestBody Bookings bookings,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ bookings.setLoginUserInfo(this.getLoginUser(token)); bookingsService.cancelById(bookings); @@ -127,21 +127,21 @@ @ApiOperation("会议室使用时长统计") @GetMapping("/getRoomStatistics") @RequiresPermissions("business:bookings:update") @CloudRequiredPermission("business:bookings:update") public ApiResponse<List<RoomStatisticsVo>> getRoomStatistics(@RequestParam Integer yearNum, @RequestParam Integer roomId){ return ApiResponse.success(bookingsService.getRoomStatistics(yearNum)); } @ApiOperation("人员参加会议时常") @PostMapping("/getUserStatistics") @RequiresPermissions("business:bookings:update") @CloudRequiredPermission("business:bookings:update") public ApiResponse<PageData<UserStatisticsVo>> getUserStatistics(@RequestBody PageWrap<UserStatisticsDTO> pageWrap ){ return ApiResponse.success(bookingsService.getUserStatistics(pageWrap)); } @ApiOperation("人员参会时长统计导出Excel") @PostMapping("/exportUserStatistics") @RequiresPermissions("business:bookings:exportExcel") @CloudRequiredPermission("business:bookings:exportExcel") public void exportUserStatistics (@RequestBody PageWrap<UserStatisticsDTO> pageWrap,HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ List<UserStatisticsVo> records = bookingsService.getUserStatistics(pageWrap).getRecords(); @@ -165,7 +165,7 @@ @ApiOperation("会议室使用时长统计导出Excel") @PostMapping("/exportRoomStatistics") @RequiresPermissions("business:bookings:exportExcel") @CloudRequiredPermission("business:bookings:exportExcel") public void exportRoomStatistics (@RequestBody PageWrap<UserStatisticsDTO> pageWrap,HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ List<RoomStatisticsVo> roomStatistics = bookingsService.getRoomStatistics(pageWrap.getModel().getYearNum()); if (!CollectionUtils.isEmpty(roomStatistics)){ server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/ProjectsCloudController.java
@@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author 江蹄蹄 @@ -93,13 +94,12 @@ return ApiResponse.success(projectsService.findById(id)); } @ApiOperation("会议关联的项目") @PostMapping("/findListByObjId") @CloudRequiredPermission("business:projects:query") public ApiResponse<List<ProjectsResponse>> findListByObjId (@RequestParam Integer objId, @RequestParam Integer objType, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { return ApiResponse.success(projectsService.getProjectsList(objId,objType)); public ApiResponse<List<ProjectsResponse>> findListByObjId (@RequestBody Map<String,Object> param, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { // @RequestParam Integer objId, @RequestParam Integer objType, return ApiResponse.success(projectsService.getProjectsList((Integer) param.get("objId"), (Integer) param.get("objType"))); } } server/meeting/meeting_admin/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -59,6 +59,7 @@ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(shiroRealm); securityManager.setSessionManager(this.sessionManager()); securityManager.setCacheManager(shiroCacheManager); return securityManager; } @@ -67,7 +68,7 @@ public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, String> map = new HashMap<>(); Map<String, String> map = new LinkedHashMap<>(); // 路径拦截配置 map.put("/system/login", "anon"); map.put("/system/logout", "anon"); @@ -75,7 +76,6 @@ //文件上传取消拦截 map.put("/public/**", "anon"); map.put(Constants.CLOUD_SERVICE_URL_INDEX+"/**", "anon"); // - 放行swagger map.put("/doc.html", "anon"); map.put("/webjars/**", "anon"); server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -513,7 +513,7 @@ prquery.selectAll(ProjectRel.class); prquery.eq(ProjectRel::getIsdeleted, MeetConstants.ZERO); prquery.eq(ProjectRel::getObjId, s.getId()); prquery.select("(select p.name from projects p where t.PROJECT_ID = p.id and p.ISDELETED = 0 ) as projectName"); prquery.select("(select p.name from meeting_projects p where t.PROJECT_ID = p.id and p.ISDELETED = 0 ) as projectName"); List<ProjectRel> prList = projectRelJoinMapper.selectJoinList(ProjectRel.class, prquery); s.setProjectList(prList); @@ -744,7 +744,7 @@ @Override public List<Bookings> getMyBookings(Integer userId, String dateMsg) { return bookingsMapper.selectList(new QueryWrapper<Bookings>() .apply(" id in ( select u.OBJ_ID from user_rel u where u.USER_ID = '" + userId + "' and u.ISDELETED = 0 and OBJ_TYPE = 1 ) ") .apply(" id in ( select u.OBJ_ID from meeting_user_rel u where u.USER_ID = '" + userId + "' and u.ISDELETED = 0 and OBJ_TYPE = 1 ) ") .eq("ISDELETED",MeetConstants.ZERO) // .eq("STATUS",MeetConstants.ZERO) .apply(" ROOM_ID in ( select r.id from rooms r where r.ISDELETED = 0 and r.STATUS = 0 )") @@ -765,7 +765,7 @@ j -> j.like("a.NAME",pageWrap.getModel().getRoomsName()).or() .like(" b.NAME", pageWrap.getModel().getRoomsName())) .exists(pageWrap.getModel().getQueryType().equals(MeetConstants.ONE) && !Objects.isNull(pageWrap.getModel().getUserId()), " select 1 from user_rel u where a.id = u.OBJ_ID and u.USER_ID = '" + pageWrap.getModel().getUserId() + "' and u.ISDELETED = 0 and OBJ_TYPE = 1 ") " select 1 from meeting_user_rel u where a.id = u.OBJ_ID and u.USER_ID = '" + pageWrap.getModel().getUserId() + "' and u.ISDELETED = 0 and OBJ_TYPE = 1 ") .eq(pageWrap.getModel().getQueryType().equals(MeetConstants.TWO) && !Objects.isNull(pageWrap.getModel().getUserId()), "a.CREATOR", pageWrap.getModel().getUserId()) .like(StringUtils.isNotBlank(pageWrap.getModel().getQueryDate()), "a.START_TIME", pageWrap.getModel().getQueryDate()) .eq(!Objects.isNull(pageWrap.getModel().getRoomsId()), "b.id", pageWrap.getModel().getRoomsId()) server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java
@@ -180,7 +180,7 @@ public List<ProjectsResponse> getProjectsList(Integer objId,Integer objType) { return projectsMapper.getProjectsList(new QueryWrapper<ProjectsResponse>() .eq("ISDELETED",MeetConstants.ZERO) .exists(" select 1 from project_rel p where p.PROJECT_ID = projects.id and p.OBJ_ID = "+objId+" and p.OBJ_TYPE = "+objType+" ") .exists(" select 1 from meeting_project_rel p where p.PROJECT_ID = projects.id and p.OBJ_ID = "+objId+" and p.OBJ_TYPE = "+objType+" ") ); } } server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
@@ -450,7 +450,7 @@ // queryWrapper.leftJoin(UserRel.class,UserRel::getObjId,Rooms::getId); List<Integer> collect = pageWrap.getModel().getSysList().stream().map(UserRel::getUserId).collect(Collectors.toList()); queryWrapper.exists("select u.id from user_rel u where u.ISDELETED=0 and u.OBJ_ID =t.id and u.USER_ID in (" + StringUtils.strip(collect.toString(),"[]")+" )"); queryWrapper.exists("select u.id from meeting_user_rel u where u.ISDELETED=0 and u.OBJ_ID =t.id and u.USER_ID in (" + StringUtils.strip(collect.toString(),"[]")+" )"); } String path = systemDictDataBiz.queryByCode(Constants.FTP, Constants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode(); @@ -536,7 +536,7 @@ .eq("STATUS",Constants.ZERO) .eq("ISDELETED",Constants.ZERO) .like(StringUtils.isNotBlank(pageWrap.getModel().getRoomsName()),"NAME",pageWrap.getModel().getRoomsName()) .exists(" select 1 from user_rel u where u.USER_ID = "+pageWrap.getModel().getUserId()+" and u.ISDELETED = 0 and u.OBJ_ID = rooms.id and u.OBJ_TYPE = 0 ") .exists(" select 1 from meeting_user_rel u where u.USER_ID = "+pageWrap.getModel().getUserId()+" and u.ISDELETED = 0 and u.OBJ_ID = rooms.id and u.OBJ_TYPE = 0 ") .orderByDesc("CREATE_DATE") ); String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP, Constants.FTP_RESOURCE_PATH).getCode() server/system_service/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java
@@ -145,7 +145,7 @@ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"路径参数不完整"); } SystemDict queryDto = new SystemDict(); queryDto.setCode(Constants.OSS); queryDto.setCode(Constants.FTP); queryDto.setDeleted(Boolean.FALSE); SystemDict dictData = systemDictService.findOne(queryDto); if (dictData == null) { server/system_service/src/main/java/com/doumee/config/cloudfilter/LoginHandlerInterceptor.java
@@ -32,46 +32,51 @@ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HandlerMethod handlerMethod = (HandlerMethod) handler; Class<?> beanType = handlerMethod.getBeanType(); if (!beanType.isAnnotationPresent(LoginNoRequired.class) && !handlerMethod.hasMethodAnnotation(LoginNoRequired.class)) { //获取token Cookie[] cookies = request.getCookies(); String token = request.getHeader(Constants.HEADER_USER_TOKEN); // 从 http 请求头中取出 token if(StringUtils.isBlank(token)){ for(Cookie c :cookies){ if(StringUtils.equals(c.getName(),Constants.HEADER_USER_TOKEN)){ token = c.getValue(); if(handler instanceof HandlerMethod){ HandlerMethod handlerMethod = (HandlerMethod) handler; Class<?> beanType = handlerMethod.getBeanType(); if (!beanType.isAnnotationPresent(LoginNoRequired.class) && !handlerMethod.hasMethodAnnotation(LoginNoRequired.class)) { //获取token Cookie[] cookies = request.getCookies(); String token = request.getHeader(Constants.HEADER_USER_TOKEN); // 从 http 请求头中取出 token if(StringUtils.isBlank(token)){ for(Cookie c :cookies){ if(StringUtils.equals(c.getName(),Constants.HEADER_USER_TOKEN)){ token = c.getValue(); } } } } if (StringUtils.isNotBlank(token)) { LoginUserInfo user = checkLogin(token); if (handlerMethod.hasMethodAnnotation(CloudRequiredPermission.class)) { CloudRequiredPermission p = handlerMethod.getMethodAnnotation(CloudRequiredPermission.class); if(p.value()!=null && p.value().length>0){ boolean hasPermission = false; for(String s :p.value()){ if(user.getPermissions()!=null){ for(String t :user.getPermissions()){ if(StringUtils.equals(t,s)){ hasPermission = true; break; if (StringUtils.isNotBlank(token)) { LoginUserInfo user = checkLogin(token); if (handlerMethod.hasMethodAnnotation(CloudRequiredPermission.class)) { CloudRequiredPermission p = handlerMethod.getMethodAnnotation(CloudRequiredPermission.class); if(p.value()!=null && p.value().length>0){ boolean hasPermission = false; for(String s :p.value()){ if(user.getPermissions()!=null){ for(String t :user.getPermissions()){ if(StringUtils.equals(t,s)){ hasPermission = true; break; } } } } if(!hasPermission) { //没有操作权限 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"没有该操作权限"); } } if(!hasPermission) { //没有操作权限 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"没有该操作权限"); } } } } else { throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录"); } } else { throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录"); } }else{ throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录"); } return true; } server/system_service/src/main/java/com/doumee/core/model/LoginUserModel.java
@@ -1,6 +1,8 @@ package com.doumee.core.model; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import lombok.Data; /** @@ -11,6 +13,7 @@ @Data public class LoginUserModel { @TableField(exist = false) @ApiModelProperty(hidden = true) private LoginUserInfo loginUserInfo; } server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -32,6 +32,8 @@ @ApiModelProperty(value = "主键", example = "1") @NotNull(message = "主键不能为空", groups = {OperaType.Update.class}) private Integer id; @ApiModelProperty(value = "用户编码(关联member)", example = "1") private Integer memberId; @ApiModelProperty(value = "用户名") @NotBlank(message = "用户名不能为空")