zhongdaoyi@wondertek.com.cn

审片间详情接口登录登出鉴权接口

... ... @@ -8,6 +8,7 @@
package com.wondertek.config;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
... ... @@ -17,7 +18,13 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.wondertek.enums.GlobalCodeEnum;
import com.wondertek.util.DateUtil;
import com.wondertek.util.ResultBean;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
... ... @@ -26,9 +33,13 @@ import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
... ... @@ -40,10 +51,15 @@ import java.util.TimeZone;
*
* @author Mark sunlightcs@gmail.com
*/
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Value("${spring.profiles.active}")
private String ENV;//当前激活的配置文件
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ByteArrayHttpMessageConverter());
... ... @@ -80,4 +96,47 @@ public class WebMvcConfig extends WebMvcConfigurationSupport {
converter.setObjectMapper(mapper);
return converter;
}
//添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 管理员登录拦截器,实现简单的权限控制
if (!"dev".equals(ENV)) { //开发环境忽略该拦截器
registry.addInterceptor(new HandlerInterceptor() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getSession().getAttribute("admin") != null) {
return true;
}
ResultBean result = new ResultBean();
result.setCode(GlobalCodeEnum.NOT_LOGIN.getCode());
result.setMsg(GlobalCodeEnum.NOT_LOGIN.getMsg());
responseResult(response, result);
return false;
}
}).addPathPatterns("/**").excludePathPatterns("/crp/admin/login", "/crp/admin/logout");
}
}
private void responseResult(HttpServletResponse response, ResultBean result) {
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-type", "application/json;charset=UTF-8");
response.setStatus(200);
try {
response.getWriter().write(JSON.toJSONString(result));
} catch (IOException ex) {
log.error(ex.getMessage());
}
}
}
... ...
package com.wondertek.controller;
import com.wondertek.entity.Admin;
import com.wondertek.util.ResultBean;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Slf4j
@RestController
@RequestMapping("crp/admin")
public class AdminController {
@Resource
private Admin admin;
@PostMapping("/login")
public ResultBean login(String username, String password, HttpServletRequest request) {
// Admin admin = new Admin();
if(admin.getUsername().equals(username) && admin.getPassword().equals(password)) {
request.getSession().setAttribute("admin", admin.getUsername());
Map<String, String> tokenMap = new HashMap<>();
String token = getToken(admin);
tokenMap.put("token", token);
request.getSession().setAttribute("token", token);
return ResultBean.ok(tokenMap);
}
return ResultBean.error("用户名或密码错误!");
}
@PostMapping("/logout")
public ResultBean logout(HttpServletRequest request) {
if(request.getSession().getAttribute("admin") == null) {
return ResultBean.error("注销失败,当前并没有用户登录!");
}
request.getSession().setAttribute("admin", null);
return ResultBean.ok("注销成功!");
}
private String getToken(Admin admin) {
return UUID.randomUUID().toString();
}
}
... ...
... ... @@ -35,18 +35,34 @@ public class LiveMonitorRoomController {
* @param lmRoomDto
* @return
*/
@GetMapping("editPage")
@GetMapping("queryRoom")
PageBean editPage(LMRoomDto lmRoomDto){
return liveMonitorRoomService.queryPage(lmRoomDto);
}
/**
* 新增审片间
* @param lmRoomParam
* @return
*/
@PostMapping("create")
ResultBean create(@RequestBody LMRoomParam lmRoomParam){
return liveMonitorRoomService.create(lmRoomParam);
}
/**
* 更新审片间
* @param
* @return
*/
@PostMapping("update")
ResultBean update(@RequestBody LMRoomParam lmRoomParam){
return liveMonitorRoomService.update(lmRoomParam);
}
@GetMapping("setStatus")
ResultBean updateStatus(@RequestParam(value = "id",required = true)Long id,
@RequestParam(value = "status",required = true)String status){
... ... @@ -59,10 +75,23 @@ public class LiveMonitorRoomController {
return liveMonitorRoomService.delete(id);
}
/**
* 获取任务详情
* @param id
* @return
*/
@GetMapping("taskDetail")
ResultBean taskDetail(@RequestParam(value = "id",required = true)Long id){
return liveMonitorRoomService.taskDetail(id);
}
/**
* 获取房间详情
* @param id
* @return
*/
@GetMapping("getLMRoomDetail")
ResultBean getLMRoomDetail(@RequestParam(value = "id",required = true)Long id){
return liveMonitorRoomService.getLMRoomDetail(id);
}
}
... ...
package com.wondertek.entity;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
@Data
public class Admin implements java.io.Serializable{
/**
* 主键
*/
private Integer id=1;
/**
* 名字
*/
private String nickname;
/**
* 简介
*/
private String profile;
/**
* 头像
*/
private String avatar;
/**
* 密码
*/
@Value("${crp.user.password}")
private String password;
/**
* 用户名
*/
@Value("${crp.user.username}")
private String username;
/**
* 邮箱
*/
private String email;
}
... ...
... ... @@ -10,6 +10,7 @@ public enum GlobalCodeEnum {
SUCCESS("0", "成功"),
FAILURE("1", "失败"),
INVALID_PARAMS("2", "请求参数无效"),
NOT_LOGIN("4011","未登录"), //未登录
UNSUPPORTED_URI("3", "未知URI"),
TOUCH_API_LIMIT("4", "接口调用次数已达到设定的上限"),
NO_AUTHORIZATION("6", "无访问权限"),
... ...
... ... @@ -17,6 +17,9 @@ public interface LiveMonitorRoomService extends IService<LiveMonitorRoom> {
ResultBean create(LMRoomParam lmRoomParam);
ResultBean getLMRoomDetail(Long id);
ResultBean update(LMRoomParam lmRoomParam);
ResultBean updateStatus(Long id, String status);
... ...
... ... @@ -22,11 +22,12 @@ import com.wondertek.util.PageBean;
import com.wondertek.util.ResultBean;
import com.wondertek.vo.LMRoomListVo;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Slf4j
@Service
public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMapper, LiveMonitorRoom> implements LiveMonitorRoomService {
... ... @@ -140,6 +141,7 @@ public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMappe
monitorRoom.setUpdatedTime(LocalDateTime.now());
saveOrUpdate(monitorRoom);
log.info(JSON.toJSONString(ResultBean.ok("修改成功")));
return ResultBean.ok("修改成功");
}
... ... @@ -194,7 +196,9 @@ public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMappe
String reqUrl = getTaskDetail+"?taskId="+taskId;
String res = HttpClientUtils.executeByGET(reqUrl);
Map<Object,Object> output = new HashMap<>();
// Map<Object,Object> output = new HashMap<>();
List<Map<String, Object>> outputDirList= new ArrayList<>();
if(StringUtils.isNotBlank(res)){
Map<String, Object> resMap = JSON.parseObject(res, new TypeReference<Map<String, Object>>() {
});
... ... @@ -211,7 +215,7 @@ public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMappe
for (Map<String, Object> item : tasks) {
//输出地址
Object outGroupNo = item.get("outGroupNo");
List<Map<String, Object>> outputDirList= new ArrayList<>();
if(item.get("outPutList")!=null){
List<Map<String, Object>> outPutList = (List<Map<String, Object>>) item.get("outPutList");
for (Map<String, Object> opmap : outPutList) {
... ... @@ -219,20 +223,23 @@ public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMappe
Map<String, Object> outputDirMap = new HashMap<>();
outputDirMap.put("outputDir", outputDir);
outputDirMap.put("checked", false);
outputDirMap.put("outGroupNo", outGroupNo);
if(outputDir.equals(outputDirCheck)){
outputDirMap.put("checked", true);
}
outputDirList.add(outputDirMap);
}
}
output.put(outGroupNo,outputDirList);
// output.put(outGroupNo,outputDirList);
}
}
}
}
}
streamTaskMap.put("output",output);
streamTaskMap.put("output",outputDirList);
streamTaskMapList.add(streamTaskMap);
}
... ... @@ -243,4 +250,22 @@ public class LiveMonitorRoomServiceImpl extends ServiceImpl<LiveMonitorRoomMappe
return ResultBean.ok(result);
}
@Override
public ResultBean getLMRoomDetail(Long id) {
LiveMonitorRoom monitorRoom = getById(id);
if(monitorRoom == null){
return ResultBean.error("房间不存在");
}
Map<String, Object> result = JSON.parseObject(JSON.toJSONString(monitorRoom), new TypeReference<Map<String, Object>>() {
});
List<StreamTask> taskList = monitorMarkService.list(new QueryWrapper<StreamTask>().eq("room_id", id));
result.put("taskList",taskList);
return ResultBean.ok(result);
}
public static void main(String[] args) {
System.out.println(ResultBean.ok("result"));
}
}
... ...
... ... @@ -44,9 +44,9 @@ public class ResultBean<T> {
return new ResultBean<T>(GlobalCodeEnum.SUCCESS.getCode(), GlobalCodeEnum.SUCCESS.getMsg(), result);
}
public boolean isSuccess() {
return GlobalCodeEnum.SUCCESS.getCode().equals(this.code);
}
// public boolean isSuccess() {
// return GlobalCodeEnum.SUCCESS.getCode().equals(this.code);
// }
public static <T> ResultBean<T> error() {
return new ResultBean<T>(GlobalCodeEnum.FAILURE.getCode(), GlobalCodeEnum.FAILURE.getMsg());
... ...
... ... @@ -64,6 +64,9 @@ transcode:
getTaskDetail: http://192.168.1.237:9002/api/v1/getTaskDetail
crp:
user:
username: admin
password: 123456
log:
open_console: true
... ...
server:
port: 8150
tomcat:
threads:
max: 1000
min-spare: 30
uri-encoding: UTF-8
spring:
application:
name: crp-operation
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://192.168.1.41:3306/crp_cloud?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
##配置初始化大小、最小、最大
initial-size: 5
max-active: 100
min-idle: 5
#配置获取连接等待超时的时间
max-wait: 60000
##打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
validation-query: SELECT 1 FROM DUAL
validation-query-timeout: 60000
##这里建议配置为TRUE,防止取到的连接不可用
test-on-borrow: true
test-on-return: false
test-while-idle: true
##配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 100000
jackson:
date-format: yyy-MM-dd HH:mm:ss
time-zone: GMT+8
banner:
charset: UTF-8
location: classpath:banner.txt
servlet:
multipart:
location: /opt/upload/tmp
max-file-size: 10MB
max-request-size: 100MB
mybatis-plus:
mapper-locations: classpath*:/mapper/*Mapper.xml
typeAliasesPackage: com.wondertek.entity #开启类型别名,降低冗余的全限定类名书写
configuration:
mapUnderscoreToCamelCase: true #开启自动驼峰命名规则(camel case)映射
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置sql打印日志
global-config:
db-config:
logic-not-delete-value: 1
logic-delete-value: 0
transcode:
delayTimeUrl: http://192.168.1.41:8080/transcode/delayTime # 延迟接口
getTaskDetail: http://192.168.1.237:9002/api/v1/getTaskDetail
crp:
user:
username: admin
password: 123456
log:
open_console: true
... ...
spring:
profiles:
active: dev
# active: test
... ...