| @@ -1,13 +0,0 @@ | |||
| package com.xueyi.system.api.device.domain.vo; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| @Data | |||
| @NoArgsConstructor | |||
| public class DeviceTenantSourceMergeVo { | |||
| Long tenantId; | |||
| String sourceSlave; | |||
| } | |||
| @@ -2,8 +2,8 @@ package com.xueyi.system.api.device.feign; | |||
| import com.xueyi.common.core.constant.basic.ServiceConstants; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.device.domain.po.DmDeviceTenantMergePo; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.organize.feign.factory.RemoteUserFallbackFactory; | |||
| import com.xueyi.tenant.api.source.domain.po.TeSourcePo; | |||
| import org.springframework.cloud.openfeign.FeignClient; | |||
| @@ -0,0 +1,85 @@ | |||
| package com.xueyi.common.core.utils; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import org.springframework.util.DigestUtils; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.IOException; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.Set; | |||
| import java.util.stream.Collectors; | |||
| public class DecodeRequestUtils { | |||
| /** | |||
| * 获取Request中的JSON字符串 | |||
| * | |||
| * @param request | |||
| * @return | |||
| * @throws IOException | |||
| */ | |||
| public static String getRequestPostStr(HttpServletRequest request) throws IOException { | |||
| byte[] buffer = getRequestPostBytes(request); | |||
| String charEncoding = request.getCharacterEncoding(); | |||
| if (charEncoding == null) { | |||
| charEncoding = "UTF-8"; | |||
| } | |||
| return new String(buffer, charEncoding); | |||
| } | |||
| private static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { | |||
| int contentLength = request.getContentLength(); | |||
| if (contentLength < 0) { | |||
| return null; | |||
| } | |||
| byte[] buffer = new byte[contentLength]; | |||
| for (int i = 0; i < contentLength; ) { | |||
| int readlen = request.getInputStream().read(buffer, i, | |||
| contentLength - i); | |||
| if (readlen == -1) { | |||
| break; | |||
| } | |||
| i += readlen; | |||
| } | |||
| return buffer; | |||
| } | |||
| /** | |||
| * JSON对象转为网址传参格式(按key的首字母从小到大排序) | |||
| * | |||
| * @param jsonObject | |||
| * @return | |||
| */ | |||
| public static String json2pathValue(JSONObject jsonObject) { | |||
| Map map = jsonObject.toJavaObject(Map.class); | |||
| Set<String> set = map.keySet(); | |||
| List<String> keyList = new ArrayList<>(set); | |||
| List<String> collect = keyList.stream().sorted().collect(Collectors.toList()); | |||
| StringBuilder stringBuilder = new StringBuilder(); | |||
| for (String s : collect) { | |||
| String value = map.get(s).toString(); | |||
| stringBuilder.append(s).append("=").append(value).append("&"); | |||
| } | |||
| stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&")); | |||
| return stringBuilder.toString(); | |||
| } | |||
| /** | |||
| * 计算sign签名 | |||
| * | |||
| * @param jsonObject | |||
| * @param genKey | |||
| * @return | |||
| */ | |||
| public static String calculateSign(JSONObject jsonObject, String genKey) { | |||
| String pathvalue = json2pathValue(jsonObject); | |||
| System.out.println(pathvalue); | |||
| pathvalue = pathvalue + "&gen_key=" + genKey; | |||
| System.out.println(pathvalue); | |||
| String sign = DigestUtils.md5DigestAsHex(pathvalue.getBytes(StandardCharsets.UTF_8)); | |||
| return sign; | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package com.xueyi.common.core.web.vo; | |||
| import lombok.Data; | |||
| import lombok.NoArgsConstructor; | |||
| import java.io.Serializable; | |||
| @Data | |||
| @NoArgsConstructor | |||
| public class DeviceTenantSourceMergeVo implements Serializable { | |||
| Long tenantId; | |||
| String sourceSlave; | |||
| String devId; | |||
| } | |||
| @@ -28,6 +28,10 @@ public class HeaderInterceptor implements AsyncHandlerInterceptor { | |||
| return true; | |||
| } | |||
| // JSONObject jsonObject = JSONObject.parseObject(DecodeRequestUtils.getRequestPostStr(request)); | |||
| SecurityContextHolder.setEnterpriseId(ServletUtil.getHeader(request, SecurityConstants.BaseSecurity.ENTERPRISE_ID.getCode())); | |||
| SecurityContextHolder.setEnterpriseName(ServletUtil.getHeader(request, SecurityConstants.BaseSecurity.ENTERPRISE_NAME.getCode())); | |||
| SecurityContextHolder.setIsLessor(ServletUtil.getHeader(request, SecurityConstants.BaseSecurity.IS_LESSOR.getCode())); | |||
| @@ -48,6 +52,19 @@ public class HeaderInterceptor implements AsyncHandlerInterceptor { | |||
| AuthUtil.verifyLoginUserExpire(token, accountType); | |||
| } | |||
| } | |||
| /*if ((request.getParameterMap().containsKey("deviceId")||request.getParameterMap().containsKey("devId")) || (jsonObject!=null && (jsonObject.containsKey("deviceId")||jsonObject.containsKey("devId")))) { | |||
| String devId = request.getParameter("deviceId"); | |||
| devId = StringUtils.isEmpty(devId) ? request.getParameter("devId") : devId; | |||
| if (StringUtils.isEmpty(devId) && jsonObject != null) { | |||
| devId = jsonObject.getString("deviceId"); | |||
| devId = StringUtils.isEmpty(devId) ? jsonObject.getString("devId") : devId; | |||
| } | |||
| SecurityContextHolder.setEnterpriseId("1676567054677766146"); | |||
| SecurityContextHolder.setSourceName("slave"); | |||
| SecurityContextHolder.set(SecurityConstants.FROM_SOURCE, "inner"); | |||
| }*/ | |||
| return true; | |||
| } | |||
| @@ -0,0 +1,39 @@ | |||
| package com.xueyi.common.web.config; | |||
| import com.xueyi.common.web.interceptor.ApiRequestInterceptor; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.web.servlet.config.annotation.InterceptorRegistry; | |||
| import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; | |||
| /** | |||
| * 拦截器配置 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Configuration | |||
| public class WebApiMvcConfig implements WebMvcConfigurer { | |||
| /** | |||
| * 不需要拦截地址 | |||
| */ | |||
| public static final String[] excludeUrls = {"/login", "/logout", "/refresh"}; | |||
| @Override | |||
| public void addInterceptors(InterceptorRegistry registry) { | |||
| System.err.println("WebMvcConfig.addInterceptors======================hshshkbb"); | |||
| registry.addInterceptor(getApiInterceptor()) | |||
| .addPathPatterns("/**") | |||
| .excludePathPatterns(excludeUrls) | |||
| .order(1); | |||
| } | |||
| /** | |||
| * 自定义请求头拦截器 | |||
| */ | |||
| @Bean | |||
| public ApiRequestInterceptor getApiInterceptor() { | |||
| return new ApiRequestInterceptor(); | |||
| } | |||
| } | |||
| @@ -2,9 +2,9 @@ package com.xueyi.common.web.controller; | |||
| import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
| import com.google.common.collect.Lists; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.web.constant.ResponseCode; | |||
| import com.xueyi.common.web.response.MyResponse; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.device.feign.RemoteDeviceTenantMergeService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| @@ -0,0 +1,21 @@ | |||
| package com.xueyi.common.web.entity.domain.mapper; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.web.annotation.TenantIgnore; | |||
| import com.xueyi.common.web.entity.domain.provider.DeviceTenantSqlProvider; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.apache.ibatis.annotations.SelectProvider; | |||
| /** | |||
| * 设备租户(企业)关联管理 数据封装层 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Mapper | |||
| public interface DeviceTenantMergeMapper { | |||
| @TenantIgnore(tenantLine = true) | |||
| @SelectProvider(type= DeviceTenantSqlProvider.class, method="selectDeviceTenant") | |||
| DeviceTenantSourceMergeVo selectByDeviceId(@Param("deviceId") String deviceId); | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| package com.xueyi.common.web.entity.domain.provider; | |||
| import org.apache.ibatis.annotations.Param; | |||
| /** | |||
| * @author yk | |||
| * @description | |||
| * @date 2023-11-25 11:15 | |||
| */ | |||
| public class DeviceTenantSqlProvider { | |||
| public String selectDeviceTenant(@Param("deviceId") String deviceId) { | |||
| return "SELECT ddtm.dev_id, ddtm.tenant_id, s.source_slave FROM dm_device_tenant_merge ddtm JOIN te_tenant t ON t.id=ddtm.tenant_id JOIN te_strategy s ON s.id=t.strategy_id AND dev_id= #{deviceId}"; | |||
| } | |||
| } | |||
| @@ -0,0 +1,71 @@ | |||
| package com.xueyi.common.web.interceptor; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.context.SecurityContextHolder; | |||
| import com.xueyi.common.core.utils.DecodeRequestUtils; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.web.entity.domain.mapper.DeviceTenantMergeMapper; | |||
| import com.xueyi.system.api.device.feign.RemoteDeviceTenantMergeService; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.method.HandlerMethod; | |||
| import org.springframework.web.servlet.HandlerInterceptor; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| /** | |||
| * 自定义API拦截器,验证api请求权限 | |||
| * 会根据传入的deviceId值,验证权限 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| public class ApiRequestInterceptor implements HandlerInterceptor { | |||
| @Autowired | |||
| RemoteDeviceTenantMergeService remoteDeviceTenantMergeService; | |||
| @Autowired | |||
| private DeviceTenantMergeMapper mergeMapper; | |||
| //为以下方法加行级注释 | |||
| @Override | |||
| public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { | |||
| if (!(handler instanceof HandlerMethod)) { | |||
| return true; | |||
| } | |||
| JSONObject jsonObject = JSONObject.parseObject(DecodeRequestUtils.getRequestPostStr(request));// 解析请求参数 | |||
| if ((request.getParameterMap().containsKey("deviceId")||request.getParameterMap().containsKey("devId")) || (jsonObject!=null && (jsonObject.containsKey("deviceId")||jsonObject.containsKey("devId")))) { | |||
| String devId = request.getParameter("deviceId"); | |||
| devId = StringUtils.isEmpty(devId) ? request.getParameter("devId") : devId; | |||
| if (StringUtils.isEmpty(devId) && jsonObject != null) { | |||
| devId = jsonObject.getString("deviceId"); | |||
| devId = StringUtils.isEmpty(devId) ? jsonObject.getString("devId") : devId; | |||
| } | |||
| /*DeviceTenantSourceMergeVo vo = null; | |||
| if (RedisUtil.existed("saas:source:device:" + devId)) { | |||
| vo = (DeviceTenantSourceMergeVo) RedisUtil.getVal("saas:source:device:" + devId); | |||
| } else { | |||
| vo = remoteDeviceTenantMergeService.selectDeviceTenantSourceMerge(devId); | |||
| RedisUtil.setVal("saas:source:device:" + devId, vo); | |||
| }*/ | |||
| DeviceTenantSourceMergeVo vo = mergeMapper.selectByDeviceId(devId);// 查询设备与租户、来源的关联关系 | |||
| SecurityContextHolder.setEnterpriseId(vo.getTenantId().toString());// 设置企业ID | |||
| SecurityContextHolder.setSourceName(vo.getSourceSlave());// 设置数据源名称 | |||
| SecurityContextHolder.set(SecurityConstants.FROM_SOURCE, SecurityConstants.INNER);// 设置数据来源 | |||
| } | |||
| return true; | |||
| } | |||
| @Override | |||
| public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { | |||
| SecurityContextHolder.remove(); | |||
| } | |||
| } | |||
| @@ -3,4 +3,6 @@ com.xueyi.common.web.config.XueYiMyBatisPlusConfig | |||
| com.xueyi.common.web.config.XueYiMyRespConfig | |||
| com.xueyi.common.web.handler.XueYiMetaObjectHandler | |||
| com.xueyi.common.web.handler.TenantLineHandler | |||
| com.xueyi.common.web.aspect.AutoInjectAspect | |||
| com.xueyi.common.web.aspect.AutoInjectAspect | |||
| com.xueyi.common.web.config.WebApiMvcConfig | |||
| com.xueyi.common.web.interceptor.ApiRequestInterceptor | |||
| @@ -37,7 +37,8 @@ public class AuthFilter implements GlobalFilter, Ordered { | |||
| @Autowired | |||
| private RedisService redisService; | |||
| private static final String[] whitePrefix = {"/message/api", "/pass/api", "/meeting/api", "/visit/api", "/file/api","/staff/api","/apkversion/api","/man/api","/holiday/api", "/skill/api", "/intent/api","/system/api","/dept/api"}; | |||
| //TODO. 需要删除,通过nacos配置管理白名单 | |||
| // private static final String[] whitePrefix = {"/message/api", "/pass/api", "/visit/api", "/file/api","/staff/api","/apkversion/api","/man/api","/device/api","/holiday/api", "/skill/api", "/intent/api","/system/api"}; | |||
| @Override | |||
| public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { | |||
| @@ -49,9 +50,9 @@ public class AuthFilter implements GlobalFilter, Ordered { | |||
| if (StrUtil.matches(url, ignoreWhite.getWhites())) { | |||
| return chain.filter(exchange); | |||
| } | |||
| // 跳过不需要验证的路径. | |||
| for (String item : whitePrefix) | |||
| if (url.contains(item)) return chain.filter(exchange); | |||
| // TODO. 需要删除 跳过不需要验证的路径. | |||
| /*for (String item : whitePrefix) | |||
| if (url.contains(item)) return chain.filter(exchange);*/ | |||
| String token = getToken(request); | |||
| if (StrUtil.isEmpty(token)) { | |||
| @@ -3,10 +3,10 @@ package com.xueyi.message.handler; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.mqtt.annotation.MqttService; | |||
| import com.xueyi.common.mqtt.annotation.MqttTopic; | |||
| import com.xueyi.message.api.transfer.domain.vo.DmDeployScheduleVo; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.device.feign.RemoteDeviceTenantMergeService; | |||
| import com.xueyi.system.api.digitalmans.feign.RemoteDigitalmanMqttService; | |||
| import com.xueyi.system.api.version.feign.RemoteReleaseManagerService; | |||
| @@ -9,13 +9,13 @@ import com.xueyi.common.core.constant.digitalman.InitConstants; | |||
| import com.xueyi.common.core.constant.digitalman.MessageConstants; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.redis.utils.RedisUtil; | |||
| import com.xueyi.common.web.utils.DateUtils; | |||
| import com.xueyi.message.api.transfer.domain.vo.DmActiveVo; | |||
| import com.xueyi.message.api.transfer.domain.vo.DmDeviceVo; | |||
| import com.xueyi.message.transfer.service.impl.MessageQueueServiceImpl; | |||
| import com.xueyi.system.api.authority.feign.RemoteLoginService; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.device.feign.RemoteDeviceTenantMergeService; | |||
| import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto; | |||
| import com.xueyi.system.api.digitalmans.domain.dto.DmSkillDto; | |||
| @@ -3,10 +3,10 @@ package com.xueyi.modules.auth.controller; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.web.controller.BaseApiController; | |||
| import com.xueyi.modules.auth.api.domain.vo.IntentionReqDto; | |||
| import com.xueyi.modules.auth.api.feign.RemoteSkillAuthService; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| @@ -6,6 +6,7 @@ import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.validate.V_A; | |||
| import com.xueyi.common.core.web.validate.V_E; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.datasource.annotation.Master; | |||
| import com.xueyi.common.log.annotation.Log; | |||
| import com.xueyi.common.log.enums.BusinessType; | |||
| @@ -14,7 +15,6 @@ import com.xueyi.common.web.annotation.TenantIgnore; | |||
| import com.xueyi.common.web.entity.controller.BaseController; | |||
| import com.xueyi.system.api.device.domain.dto.DmDeviceTenantMergeDto; | |||
| import com.xueyi.system.api.device.domain.po.DmDeviceTenantMergePo; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.digitalmans.domain.dto.DmManDeviceDto; | |||
| import com.xueyi.system.api.digitalmans.domain.po.DmManDevicePo; | |||
| import com.xueyi.system.api.model.Source; | |||
| @@ -29,7 +29,15 @@ import com.xueyi.system.organize.service.ISysEnterpriseService; | |||
| import com.xueyi.tenant.api.source.domain.po.TeSourcePo; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.validation.annotation.Validated; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import org.springframework.web.bind.annotation.DeleteMapping; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.PutMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| @@ -13,6 +13,7 @@ import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.validate.V_A; | |||
| import com.xueyi.common.core.web.validate.V_E; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.log.annotation.Log; | |||
| import com.xueyi.common.log.enums.BusinessType; | |||
| import com.xueyi.common.security.annotation.InnerAuth; | |||
| @@ -21,7 +22,6 @@ import com.xueyi.common.web.entity.controller.BaseController; | |||
| import com.xueyi.common.web.utils.DateUtils; | |||
| import com.xueyi.file.api.feign.RemoteFileService; | |||
| import com.xueyi.message.api.transfer.feign.RemoteTransferService; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.device.feign.RemoteDeviceTenantMergeService; | |||
| import com.xueyi.system.api.dict.domain.dto.SysDictDataDto; | |||
| import com.xueyi.system.api.digitalmans.domain.dto.DmDigitalmanWorktimeDto; | |||
| @@ -3,15 +3,19 @@ package com.xueyi.system.meeting.controller.api; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.sms.service.SmsService; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo; | |||
| import com.xueyi.system.api.digitalmans.feign.RemoteDigitalmanService; | |||
| import com.xueyi.system.api.meeting.domain.dto.DmMeetingOrdersDto; | |||
| import com.xueyi.system.api.meeting.domain.dto.DmMeetingRoomsDto; | |||
| import com.xueyi.system.api.meeting.domain.po.DmMeetingRoomsPo; | |||
| import com.xueyi.system.api.meeting.feign.RemoteMeetingService; | |||
| import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto; | |||
| import com.xueyi.system.api.pass.feign.RemoteRecognizedRecordsService; | |||
| import com.xueyi.system.digitalmans.service.IDmDigitalmanService; | |||
| import com.xueyi.system.meeting.domain.model.DmMeetingRoomsConverter; | |||
| import com.xueyi.system.meeting.mapper.DmMeetingRoomsMapper; | |||
| import com.xueyi.system.resource.controller.api.BaseApiController; | |||
| import com.xueyi.system.utils.common.ImageUtil; | |||
| import org.slf4j.Logger; | |||
| @@ -72,6 +76,39 @@ public class DmMeetingApiController extends BaseApiController { | |||
| } | |||
| @Autowired | |||
| IDmDigitalmanService dgService; | |||
| @Autowired | |||
| private DmMeetingRoomsMapper dmMeetingRoomsMapper; | |||
| @Autowired | |||
| private DmMeetingRoomsConverter dmMeetingRoomsConverter; | |||
| @GetMapping(value = "/room-lists2") | |||
| public R<List<DmMeetingRoomsDto>> roomList2(@RequestParam(value = "devId") String devId){ | |||
| DeviceTenantSourceMergeVo vo = super.getDeviceTenantSourceMergeVo(devId); | |||
| DmDigitalmanExtPo extPo = dgService.selectExt(devId); | |||
| if (extPo != null) { | |||
| DmMeetingRoomsPo dm = new DmMeetingRoomsPo(); | |||
| dm.setDeptId(extPo.getDeptId()); | |||
| List<DmMeetingRoomsPo> pos = dmMeetingRoomsMapper.selectRoomList(dm); | |||
| List<DmMeetingRoomsDto> dtoList = new ArrayList<>(); | |||
| pos.forEach(item -> { | |||
| DmMeetingRoomsDto di = dmMeetingRoomsConverter.mapperDto(item); | |||
| dtoList.add(di); | |||
| }); | |||
| return R.ok(dtoList); | |||
| } else { | |||
| return R.fail("获取失败"); | |||
| } | |||
| } | |||
| @ResponseBody | |||
| @PostMapping(value = "/person-lists") | |||
| @@ -16,8 +16,8 @@ import com.alibaba.fastjson2.JSONObject; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.web.annotation.TenantIgnore; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.pass.domain.dto.DmRecognizedMultiRecordsDto; | |||
| import com.xueyi.system.api.pass.domain.dto.DmRecognizedRecordsDto; | |||
| import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo; | |||
| @@ -2,16 +2,13 @@ package com.xueyi.system.staff.controller.api; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||
| import com.baomidou.mybatisplus.core.toolkit.StringUtils; | |||
| import com.google.common.collect.Lists; | |||
| import com.xueyi.common.cache.utils.SourceUtil; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.context.SecurityContextHolder; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.redis.utils.RedisUtil; | |||
| import com.xueyi.common.web.annotation.TenantIgnore; | |||
| import com.xueyi.file.api.feign.RemoteFileService; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.model.Source; | |||
| import com.xueyi.system.api.pass.domain.po.DmRecognizedRecordsPo; | |||
| import com.xueyi.system.api.staff.domain.dto.DmStaffCommonDto; | |||
| @@ -24,19 +21,16 @@ import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Async; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PathVariable; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.ResponseBody; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import java.time.LocalDateTime; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * 员工管理 API业务处理 | |||
| @@ -119,32 +113,6 @@ public class DmStaffApiController extends BaseApiController { | |||
| List<DmRecognizedRecordsPo> lists = recognizedRecordsMapper.selectList(new LambdaQueryWrapper<DmRecognizedRecordsPo>().between(DmRecognizedRecordsPo::getRecognizedTime, LocalDateTime.now().minusDays(30), LocalDateTime.now())); | |||
| return R.ok(lists); | |||
| } | |||
| @Autowired | |||
| private DmRecognizedRecordsMapper mapper; | |||
| @Autowired | |||
| private RemoteFileService fileService; | |||
| @GetMapping(value = "inner-del-recognized-records-img") | |||
| @ResponseBody | |||
| @TenantIgnore(tenantLine = true) | |||
| @Async | |||
| public R delRecordsImg(@RequestParam("day") Integer day){ | |||
| List<DmRecognizedRecordsPo> pos = mapper.queryPass(day); | |||
| List<String> urls = pos.stream().filter(s-> StringUtils.isNotEmpty(s.getFaceUrl())).map(DmRecognizedRecordsPo::getFaceUrl).collect(Collectors.toList()); | |||
| //List<String>转为String[] | |||
| // String[] urlsArray = (String[])urls.toArray(new String[0]); | |||
| //将list以100为单位,分割 | |||
| List<List<String>> lists = Lists.partition(urls, 50); | |||
| for (List<String> list : lists) { | |||
| fileService.deleteFiles(list.toArray(new String[0])); | |||
| } | |||
| // fileService.deleteFiles(urls); | |||
| return R.ok(); | |||
| } | |||
| @GetMapping(value = "recognized-records") | |||
| @ResponseBody | |||
| public R<List<DmRecognizedRecordsPo>> recognizedRecords(){ | |||
| @@ -2,7 +2,7 @@ package com.xueyi.system.staff.controller.api; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.system.api.device.domain.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.common.core.web.vo.DeviceTenantSourceMergeVo; | |||
| import com.xueyi.system.api.staff.domain.dto.DmVisitCommonDto; | |||
| import com.xueyi.system.api.staff.feign.RemoteVisitorService; | |||
| import com.xueyi.system.resource.controller.api.BaseApiController; | |||