Commit f4e905a2 authored by zhouleilei's avatar zhouleilei

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	signal-feign-service/src/main/resources/application-docker.properties
parents 139b9b1f 27636fc2
utc.service.url=http://37.12.182.29:32000/utc
utc.dt.service.url=http://37.12.182.29:39002/utc-dt
utc.hisense.service.url=http://37.12.182.29:39003/utc-hisense
control.url=http://37.12.182.29:32001/web
utc.service.url=http://173.0.0.1:32000/utc
utc.dt.service.url=http://173.0.0.1:39002/utc-dt
utc.hisense.service.url=http://173.0.0.1:39003/utc-hisense
control.url=http://173.0.0.1:32001/web
ehualu.url=http://173.0.0.1:30015
......@@ -47,6 +47,14 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
......@@ -120,6 +128,18 @@
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<!-- rabbitmq -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.9.0</version>
</dependency>
<!-- ftp上传下载-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
</dependency>
</dependencies>
<build>
......@@ -288,6 +308,97 @@
</executions>
</plugin>
<!-- maven 打包方式-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<!--<version>2.6</version>-->
<executions>
<!--将启动脚本复制到指定目录-->
<execution>
<id>copy-bin</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.parent.basedir}/assembly/${project.name}/bin</outputDirectory>
<resources>
<resource>
<directory>src/main/resources/bin</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
<!--将配置文件复制到指定目录-->
<execution>
<id>copy-configs</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.parent.basedir}/assembly/${project.name}/resources
</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/bin/*</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<!--将依赖jar包复制到lib目录-->
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.parent.basedir}/assembly/${project.name}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!--指定生成jar包目录-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--<classpathPrefix>lib/</classpathPrefix>-->
<classpathPrefix></classpathPrefix>
<mainClass> net.wanji.opt.SignalOptimizeApplication</mainClass>
</manifest>
<manifestEntries>
<Class-Path>../resources/</Class-Path>
</manifestEntries>
</archive>
<excludes>
<exclude>*.**</exclude>
<exclude>*/*.xml</exclude>
<!--<exclude>configs/**/**</exclude>-->
</excludes>
<outputDirectory>${project.parent.basedir}/assembly/${project.name}/lib</outputDirectory>
<classesDirectory>
</classesDirectory>
</configuration>
</plugin>
</plugins>
</build>
......
package net.wanji.opt.common;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
@EnableAutoConfiguration
public class RedisConfig extends CachingConfigurerSupport {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private int database;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxTotal;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private long maxWaitMillis;
/**
* 获取Jedis连接工厂
* <p>用于创建Jedis对象</p>
* @return JedisPool
*/
@Bean
public JedisPool redisPoolFactory() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMaxIdle(maxIdle);
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisPoolConfig.setMinIdle(minIdle);
jedisPoolConfig.setTestOnBorrow(false);
jedisPoolConfig.setTestOnReturn(false);
return new JedisPool(jedisPoolConfig, host, port,timeout, password, database);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 使用 Jackson 作为序列化器
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(objectMapper);
template.setValueSerializer(serializer);
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
/**
* 选择redis作为默认缓存工具
* @param redisConnectionFactory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
}
\ No newline at end of file
package net.wanji.opt.controller.induce;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.Page;
import net.wanji.common.framework.rest.ValidationGroups;
import net.wanji.opt.dto.induce.InduceDTO;
import net.wanji.opt.entity.InduceHist;
import net.wanji.opt.service.induce.InduceHistService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* 诱导屏-下发历史信息
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Api(value = "InduceHistController", description = "诱导屏-下发历史信息")
@RestController
@RequestMapping("/induceHist")
@Slf4j
public class InduceHistController {
@Resource
private InduceHistService induceHistService;
/**
* 获取所有诱导下发记录
*
* @return JsonViewObject
*/
@ApiOperation(value = "获取所有诱导下发记录", notes = "获取所有诱导下发记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@GetMapping(value = "/byAll", produces = MediaType.APPLICATION_JSON)
JsonViewObject getAll(){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try{
List<InduceHist> list=this.induceHistService.list();
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
/**
* 根据条件查询记录
*
* @param InduceHist 查询条件
* @return JsonViewObject
*/
@ApiOperation(value = "根据条件查询记录", notes = "根据条件查询记录", response = JsonViewObject.class, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/byCondition", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject getByWhere(@ApiParam(value = "查询条件", required = true) @RequestBody @Validated({ValidationGroups.Query.class}) InduceHist InduceHist){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
String jsonStr = JSON.toJSONString(InduceHist);
try {
//参数校验过程中修改,兼容实现,restful入参不用map,便于进行参数逐个校验
Map params = JSONObject.parseObject(JSONObject.toJSONString(InduceHist), Map.class);
List list = this.induceHistService.listByMap(params);
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getByWhere error,jsonStr:{}", this.getClass().getSimpleName(), jsonStr, e);
}
return jsonView;
}
/**
* 根据id查询记录
*
* @param id
* @return JsonViewObject
*/
@ApiOperation(value = "根据id查询记录", notes = "根据id查询记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON)
JsonViewObject getById(@ApiParam(value = "记录的id", required = true, example = "1") @PathVariable("id") @NotBlank(message = "查询id不能为空") String id){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
InduceHist InduceHist = this.induceHistService.getById(id);
jsonView.success(InduceHist);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("AbstractRestServerImpl getById error, id:{}", id, e);
}
return jsonView;
}
/**
* 根据id删除
*
* @param ids
* @return JsonViewObject
*/
@ApiOperation(value = "根据多个id删除记录", notes = "根据多个id删除记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@ApiImplicitParams(value = {
@ApiImplicitParam(paramType = "query", name = "ids", dataType = "String", required = true, value = "多个记录id,用逗号分隔", example = "1,2")
})
@GetMapping(value = "/deleting", produces = MediaType.APPLICATION_JSON)
JsonViewObject deleteByIds(@QueryParam("ids") @NotBlank(message = "删除ids不能为空") String ids){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
String[] idArray = ids.split(",");
try {
if (idArray.length > 0) {
for (String id : idArray) {
jsonView = this.induceHistService.removeByIds(Arrays.asList(ids.split(",")))?jsonView.success():jsonView.fail();;
}
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("DELETE_FAILED_MSG"));
log.error("AbstractRestServerImpl deleteByIds error, id:{}", ids, e);
}
return jsonView;
}
/**
* 新建记录
*
* @param InduceHist
* @return JsonViewObject
*/
@ApiOperation(value = "新建记录", notes = "新建记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/creating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject save(@ApiParam(value = "记录的JSON格式字符串", required = true) @RequestBody @Validated({ValidationGroups.Create.class}) InduceHist InduceHist){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
if (InduceHist != null) {
jsonView = this.induceHistService.saveOrUpdate(InduceHist)?jsonView.success():jsonView.fail();
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("AbstractRestServerImpl save error, jsonStr:{}", JSON.toJSONString(InduceHist), e);
}
return jsonView;
}
/**
* 修改记录
*
* @param InduceHist
* @return
*/
@ApiOperation(value = "修改记录", notes = "修改记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/updating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject update(@ApiParam(value = "记录的JSON格式字符串", required = true) @RequestBody @Validated({ValidationGroups.Update.class}) InduceHist InduceHist){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
if (InduceHist != null) {
jsonView = this.induceHistService.saveOrUpdate(InduceHist)?jsonView.success():jsonView.fail();
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("UPDATE_FAILED_MSG"));
log.error("AbstractRestServerImpl update error, jsonStr:{}", JSON.toJSONString(InduceHist), e);
}
return jsonView;
}
}
package net.wanji.opt.controller.induce;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.opt.entity.InduceTemplate;
import net.wanji.opt.dto.induce.MessageParam;
import net.wanji.opt.service.induce.InduceSendService;
import net.wanji.opt.service.induce.InduceTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@Api(value = "InduceSendController", description = "诱导屏-下发消息接口(对接易华录)")
@RestController
@RequestMapping("/induce")
@Slf4j
public class InduceSendController {
@Autowired
private InduceSendService induceSendService;
@Autowired
private InduceTemplateService induceTemplateService;
@PostMapping("/send")
public JsonViewObject send(@RequestBody MessageParam param) {
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
induceSendService.send(param);
return jsonView.success();
} catch (Exception e) {
log.info(e.getMessage());
return jsonView.fail("发送失败");
}
}
/**
* 获取ftp图片
*/
@GetMapping(value = "/file")
public ResponseEntity<byte[]> ftpFile(@RequestParam("fileId") Long fileId) {
// 根据 fileId 获取文件名
InduceTemplate pictureFile = this.induceTemplateService.getById(fileId);
if (pictureFile == null) {
return ResponseEntity.status(HttpStatus.OK)
.body("无效的文件ID".getBytes(StandardCharsets.UTF_8));
}
try {
// 获取ftp服务器图片
byte[] imageBytes = this.induceSendService.downloadImage(pictureFile.getFileName());
if (imageBytes != null && imageBytes.length > 0) {
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "image/jpeg"); // 图片类型
headers.set("Content-Length", String.valueOf(imageBytes.length)); // 设置内容长度
headers.set("Content-Disposition", "inline; filename=\"" + pictureFile.getFileName() + "\""); // 设置文件名
// 返回响应
return new ResponseEntity<>(imageBytes, headers, HttpStatus.OK);
} else {
return ResponseEntity.status(HttpStatus.OK)
.body("未查询到对应文件".getBytes(StandardCharsets.UTF_8));
}
} catch (IOException e) {
log.error("ftp文件下载失败: ", e.getMessage());
return ResponseEntity.status(HttpStatus.OK)
.body("程序查询错误请联系管理员".getBytes(StandardCharsets.UTF_8));
}
}
}
package net.wanji.opt.controller.induce;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.Page;
import net.wanji.common.framework.rest.ValidationGroups;
import net.wanji.opt.entity.InduceTemplate;
import net.wanji.opt.service.induce.InduceTemplateService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* 诱导屏-发布模板
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Api(value = "InduceTemplateController", description = "诱导屏-发布模板")
@RestController
@RequestMapping("/induceTemplate")
@Slf4j
public class InduceTemplateController {
@Resource
private InduceTemplateService induceTemplateService;
/**
* 获取所有记录
*
* @return JsonViewObject
*/
@ApiOperation(value = "获取所有记录", notes = "获取所有记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@GetMapping(value = "/byAll", produces = MediaType.APPLICATION_JSON)
JsonViewObject getAll(){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
List<InduceTemplate> list = this.induceTemplateService.list();
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
/**
* 根据条件查询记录
*
* @param InduceTemplate 查询条件
* @return JsonViewObject
*/
@ApiOperation(value = "根据条件查询记录", notes = "根据条件查询记录", response = JsonViewObject.class, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/byCondition", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject getByWhere(@ApiParam(value = "查询条件", required = true) @RequestBody @Validated({ValidationGroups.Query.class}) InduceTemplate InduceTemplate){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
String jsonStr = JSON.toJSONString(InduceTemplate);
try {
//参数校验过程中修改,兼容实现,restful入参不用map,便于进行参数逐个校验
Map params = JSONObject.parseObject(JSONObject.toJSONString(InduceTemplate), Map.class);
List list = this.induceTemplateService.listByMap(params);
jsonView.success(list);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getByWhere error,jsonStr:{}", this.getClass().getSimpleName(), jsonStr, e);
}
return jsonView;
}
/**
* 根据id查询记录
*
* @param id
* @return JsonViewObject
*/
@ApiOperation(value = "根据id查询记录", notes = "根据id查询记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON)
JsonViewObject getById(@ApiParam(value = "记录的id", required = true, example = "1") @PathVariable("id") @NotBlank(message = "查询id不能为空") String id){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
InduceTemplate InduceTemplate = this.induceTemplateService.getById(id);
jsonView.success(InduceTemplate);
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("AbstractRestServerImpl getById error, id:{}", id, e);
}
return jsonView;
}
/**
* 根据id删除
*
* @param ids
* @return JsonViewObject
*/
@ApiOperation(value = "根据多个id删除记录", notes = "根据多个id删除记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON)
@ApiImplicitParams(value = {
@ApiImplicitParam(paramType = "query", name = "ids", dataType = "String", required = true, value = "多个记录id,用逗号分隔", example = "1,2")
})
@GetMapping(value = "/deleting", produces = MediaType.APPLICATION_JSON)
JsonViewObject deleteByIds(@QueryParam("ids") @NotBlank(message = "删除ids不能为空") String ids){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
String[] idArray = ids.split(",");
try {
if (idArray.length > 0) {
for (String id : idArray) {
jsonView = this.induceTemplateService.removeByIds(Arrays.asList(ids.split(",")))?jsonView.success():jsonView.fail();
}
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("DELETE_FAILED_MSG"));
log.error("AbstractRestServerImpl deleteByIds error, id:{}", ids, e);
}
return jsonView;
}
/**
* 新建记录
*
* @param InduceTemplate
* @return JsonViewObject
*/
@ApiOperation(value = "新建记录", notes = "新建记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/creating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject save(@ApiParam(value = "记录的JSON格式字符串", required = true) @RequestBody @Validated({ValidationGroups.Create.class}) InduceTemplate InduceTemplate){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
if (InduceTemplate != null) {
jsonView = this.induceTemplateService.saveOrUpdate(InduceTemplate)?jsonView.success():jsonView.fail();
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("SAVE_FAILED_MSG"));
log.error("AbstractRestServerImpl save error, jsonStr:{}", JSON.toJSONString(InduceTemplate), e);
}
return jsonView;
}
/**
* 修改记录
*
* @param InduceTemplate
* @return
*/
@ApiOperation(value = "修改记录", notes = "修改记录", response = JsonViewObject.class, produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/updating", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
JsonViewObject update(@ApiParam(value = "记录的JSON格式字符串", required = true) @RequestBody @Validated({ValidationGroups.Update.class}) InduceTemplate InduceTemplate){
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
if (InduceTemplate != null) {
jsonView = this.induceTemplateService.saveOrUpdate(InduceTemplate)?jsonView.success():jsonView.fail();
}
} catch (Exception e) {
jsonView.fail(I18nResourceBundle.getConstants("UPDATE_FAILED_MSG"));
log.error("AbstractRestServerImpl update error, jsonStr:{}", JSON.toJSONString(InduceTemplate), e);
}
return jsonView;
}
}
package net.wanji.opt.dao.mapper;
import net.wanji.opt.entity.DeviceInduces;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 设备-交通诱导屏设备 Mapper 接口
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface DeviceInducesMapper extends BaseMapper<DeviceInduces> {
}
......@@ -3,9 +3,16 @@ package net.wanji.opt.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.opt.synthesis.pojo.StrategyPlanInfoEntity;
import java.util.List;
/**
* @author duanruiming
* @date 2024/11/08 10:14
*/
public interface StrategyPlanInfoMapper extends BaseMapper<StrategyPlanInfoEntity> {
List<StrategyPlanInfoEntity> selectByCrossId(String crossId);
List<StrategyPlanInfoEntity> selectAll();
}
package net.wanji.opt.dao.mapper.induce;
import net.wanji.opt.entity.GreenwaveInducesHist;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* 绿波诱导下发历史信息表 Mapper 接口
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface GreenwaveInducesHistMapper extends BaseMapper<GreenwaveInducesHist> {
//
//
// List<GreenwaveInducesHist> findByPage(Map<String, Object> map);
}
package net.wanji.opt.dao.mapper.induce;
import net.wanji.opt.entity.GreenwaveInduces;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* 绿波-诱导屏幕关系表 Mapper 接口
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface GreenwaveInducesMapper extends BaseMapper<GreenwaveInduces> {
//
//
// List<GreenwaveInduces> findByPage(Map<String, Object> map);
}
package net.wanji.opt.dao.mapper.induce;
import net.wanji.opt.entity.InduceHist;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* 诱导屏-发布模板 Mapper 接口
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface InduceHistMapper extends BaseMapper<InduceHist> {
//
// List<InduceHist> findByPage(Map<String, Object> map);
}
package net.wanji.opt.dao.mapper.induce;
import net.wanji.opt.entity.InduceTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* 诱导屏-发布模板 Mapper 接口
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface InduceTemplateMapper extends BaseMapper<InduceTemplate> {
//
// List<InduceTemplate> findByPage(Map<String, Object> map);
}
package net.wanji.opt.dto.induce;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@NoArgsConstructor
@Data
public class GreenwaveDTO {
@ApiModelProperty(name = "绿波编号")
private Integer greenId;
@ApiModelProperty(name = "绿波干线名称")
private String greenName;
@ApiModelProperty(name = "设计速度")
private Double designSpeed;
@ApiModelProperty(name = "当前策略")
private Integer strategyId;
@ApiModelProperty(name = "策略名称")
private String strategyName;
@ApiModelProperty(name = "绿波方向:1 南向北 2 西向东 3 北向南 4 东向西")
private Integer dir;
@ApiModelProperty(name = "执行时段")
private String controlOptTimes;
}
package net.wanji.opt.dto.induce;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@NoArgsConstructor
@Data
public class GreenwaveInducesDTO {
@ApiModelProperty(name = "绿波编号")
private Integer greenId;
@ApiModelProperty(name = "绿波干线名称")
private String greenName;
@ApiModelProperty(name = "诱导屏数量")
private Integer equipCount;
@ApiModelProperty(name = "设计速度")
private Double designSpeed;
@ApiModelProperty(name = "发布状态")
private Integer status ;
@ApiModelProperty(name = "当前策略")
private Integer strategyId;
@ApiModelProperty(name = "策略名称")
private String strategyName;
@ApiModelProperty(name = "绿波方向:1 南向北 2 西向东 3 北向南 4 东向西")
private Integer dir;
@ApiModelProperty(name = "推荐最小速度")
private Double minSpeed;
@ApiModelProperty(name = "推荐最大速度")
private Double maxSpeed;
@ApiModelProperty(name = "执行时段")
private String controlOptTimes;
@ApiModelProperty(name = "诱导屏列表")
private List<InduceDTO> induceList;
}
package net.wanji.opt.dto.induce;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.wanji.opt.entity.InduceTemplate;
import java.math.BigDecimal;
import java.util.List;
@NoArgsConstructor
@Data
public class InduceDTO {
@ApiModelProperty(name = "诱导下发编号")
private Integer id;
@ApiModelProperty(name = "屏幕编号")
private String equipCode;
@ApiModelProperty(name = "设备名称")
private String equipName;
@ApiModelProperty(name = "方向")
private Integer ridDir;
@ApiModelProperty(name = "发布状态")
private Integer status ;
@ApiModelProperty(name = "屏幕分辨率宽度")
private BigDecimal resolutionWidth;
@ApiModelProperty(name = "屏幕分辨率高度")
private BigDecimal resolutionHeight;
@ApiModelProperty(name = "关联绿波信息")
private List<GreenwaveDTO> greenwaveList;
@ApiModelProperty(name = "关联模板信息")
private List<InduceTemplate> induceTemplateList;
}
package net.wanji.opt.dto.induce;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank;
/**
* @Description
* @Author zjf
* @Date 2024/11/11
**/
@Data
public class MessageParam {
private Integer induceId;
private Integer greenId;
/**
* 1上屏 2下屏
*/
@NotBlank(message = "是否上传ftp标识必传")
private int flg;
/**
* sourceid
*/
@NotBlank(message = "sourceid标识必传")
private String sourceId;
/**
* 屏体ID 由现场提供
*/
@NotBlank(message = "屏体ID标识必传")
private String equipCode;
/**
* 文件
*/
// private MultipartFile file;
@ApiModelProperty(value = "开始时间,格式 2024-11-07 00:00:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private String starTtime="";
@ApiModelProperty(value = "结束时间,格式 2024-11-07 00:00:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private String endTime="";
/**
* ftp地址
*/
private String ftpPath;
/**
* 节目类型 TFM 路况 TFMH 独占 TAM 交通事件
*/
private String type = "TFMH";
/**
* x,y,w,h 为屏上发布的位置 一般 x=0 y=0 w为屏宽 h为屏高
*/
private Integer x = 0;
private Integer y = 0;
@NotBlank(message = "屏体宽度必传")
private Integer resolutionWidth=0;
@NotBlank(message = "屏体高度必传")
private Integer resolutionHeight=0;
/**
* 节目顺序号 顺着往下排
*/
private Integer playorder = 0;
/**
* 为每一屏的停留时间
*/
private Integer duration = 10;
// 以下为追加最新字段
/**
* 图片id
*/
@NotBlank(message = "图片模板id必传")
private Long templateId=0L;
/**
* 文本内容
*/
@NotBlank(message = "生成的文本内容必传")
private String[] contents;
}
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* <p>
* 设备-交通诱导屏设备
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_device_induces")
public class DeviceInduces implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "oid", type = IdType.AUTO)
private Long oid;
/**
* 厂家设备编号
*/
@TableField("equip_code")
private String equipCode;
/**
* 设备名称
*/
@TableField("equip_name")
private String equipName;
/**
* 设备型号
*/
@TableField("equip_model")
private String equipModel;
/**
* 设备IP
*/
@TableField("equip_ip")
private String equipIp;
/**
* 设备点位地址描述
*/
@TableField("equip_addr")
private String equipAddr;
/**
* 设备图片地址
*/
@TableField("equip_img_url")
private String equipImgUrl;
/**
* 所在路口编号
*/
@TableField("cross_id")
private String crossId;
/**
* 诱导关联路段
*/
@TableField("rid")
private String rid;
/**
* 关联路段方向
*/
@TableField("rid_dir")
private Integer ridDir;
/**
* 功能类型(1.常规诱导屏、2.潮汐车道诱导屏、3.可变车道诱导屏)
*/
@TableField("function_type")
private String functionType;
/**
* 屏幕类型(1.点阵屏、2.光带屏、3.复合屏、4.全彩屏)
*/
@TableField("screen_type")
private String screenType;
/**
* 屏幕尺寸
*/
@TableField("screen_size")
private String screenSize;
/**
* 屏幕分辨率宽度
*/
@TableField("resolution_width")
private BigDecimal resolutionWidth;
/**
* 屏幕分辨率高度
*/
@TableField("resolution_height")
private BigDecimal resolutionHeight;
/**
* 位置坐标
*/
@TableField("wkt")
private String wkt;
/**
* 诱导发布次数
*/
@TableField("induce_publish_count")
private String inducePublishCount;
/**
* 安装高度
*/
@TableField("allow_word_num")
private Integer allowWordNum;
/**
* 安装位置
*/
@TableField("install_height")
private BigDecimal installHeight;
/**
* 设备朝向
*/
@TableField("equipment_direct")
private String equipmentDirect;
/**
* 诱导车流方向
*/
@TableField("traffic_direct")
private String trafficDirect;
/**
* 设备厂商
*/
@TableField("manufacturer")
private String manufacturer;
/**
* 行政区域代码
*/
@TableField("area_code")
private String areaCode;
/**
* 安装日期
*/
@TableField("install_time")
private String installTime;
/**
* 维保开始时间
*/
@TableField("maintenance_start_time")
private String maintenanceStartTime;
/**
* 维保到期时间
*/
@TableField("maintenance_expiration_time")
private String maintenanceExpirationTime;
/**
* 建设主体单位
*/
@TableField("main_construction_unit")
private String mainConstructionUnit;
/**
* 建设单位
*/
@TableField("build_unit")
private String buildUnit;
/**
* 建设单位负责人
*/
@TableField("build_unit_people")
private String buildUnitPeople;
/**
* 承建单位
*/
@TableField("contractor")
private String contractor;
/**
* 承建单位负责人
*/
@TableField("contractor_unit_people")
private String contractorUnitPeople;
/**
* 维护单位
*/
@TableField("maintenance_unit")
private String maintenanceUnit;
/**
* 维护单位负责人
*/
@TableField("maintenance_unit_people")
private String maintenanceUnitPeople;
/**
* 维护人员
*/
@TableField("maintenance_people")
private String maintenancePeople;
/**
* 维护人员联系方式
*/
@TableField("maintenance_people_telephone")
private String maintenancePeopleTelephone;
/**
* 设备状态 0:离线 1:在线
*/
@TableField("status")
private String status;
/**
* 是否显示
*/
@TableField("is_show")
private Boolean isShow;
}
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* <p>
* 绿波-诱导屏幕关系表
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_greenwave_induces")
public class GreenwaveInduces implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 绿波ID
*/
@TableField("green_id")
private Integer greenId;
/**
* 关联诱导屏幕设备编号
*/
@TableField("equip_code")
private String equipCode;
/**
* 路段走向:1 南向北 2 西向东 3 北向南 4 东向西
*/
@TableField("dir")
private Integer dir;
/**
* 诱导屏幕顺序号
*/
@TableField("sort")
private Integer sort;
/**
* 诱导下发编号(sourceId,下发的时候生成的UUID)
*/
@TableField("source_id")
private String sourceId;
/**
* 诱导下发计数
*/
@TableField("induces_count")
private Long inducesCount;
/**
* 0 未发布 1 已发布
*/
@TableField("status")
private Integer status;
/**
* 创建时间
*/
@TableField("gmt_create")
private Date gmtCreate;
/**
* 修改时间
*/
@TableField("gmt_modified")
private Date gmtModified;
}
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* <p>
* 绿波诱导下发历史信息表
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_greenwave_induces_hist")
public class GreenwaveInducesHist implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 绿波编号
*/
@TableField("green_id")
private Integer greenId;
/**
* 当前策略名称
*/
@TableField("strategy_name")
private String strategyName;
/**
* 绿波带下发时间
*/
@TableField("control_time")
private Date controlTime;
/**
* 执行策略 1单条 2垂直 3平行
*/
@TableField("type")
private Integer type;
/**
* 绿波方向:1 南向北 2 西向东 3 北向南 4 东向西
*/
@TableField("dir")
private Integer dir;
/**
* 绿波最大速度
*/
@TableField("max_speed")
private Double maxSpeed;
/**
* 绿波最小速度
*/
@TableField("min_speed")
private Double minSpeed;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 修改时间
*/
@TableField("modify_time")
private Date modifyTime;
/**
* 执行策略编号
*/
@TableField("strategy_id")
private Integer strategyId;
/**
* 0 未发布 1 已发布
*/
@TableField("status")
private Integer status;
/**
* 执行时段
*/
@TableField("control_opt_times")
private String controlOptTimes;
/**
* 节目顺序号 顺着往下排
*/
@TableField("playorder")
private Integer playorder;
/**
* 为每一屏的停留时间
*/
@TableField("duration")
private Integer duration;
}
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
/**
* <p>
* 诱导屏-发布历史
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_induce_hist_log")
public class InduceHist implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 诱导屏编号
*/
@TableField("equip_code")
private String equipCode;
/**
* 诱导下发编号(sourceId,下发的时候生成的UUID)
*/
@TableField("source_id")
private String sourceId;
/**
* 绿波ID
*/
@TableField("green_id")
private Integer greenId;
/**
* 下发文件路径
*/
@TableField("file_path")
private String filePath;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
}
package net.wanji.opt.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.ibatis.type.BlobTypeHandler;
/**
* <p>
* 诱导屏-发布模板
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_induce_template")
public class InduceTemplate implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 诱导屏编号
*/
@TableField("equip_code")
private String equipCode;
/**
* 模板名称
*/
@TableField("file_name")
private String fileName;
/**
* 模板路径
*/
@TableField("file_path")
private String filePath;
/**
* 模板内容
*/
@TableField(value = "file_content", typeHandler = BlobTypeHandler.class)
private byte[] fileContent;
/**
* 文字左上角X坐标
*/
@TableField("text_x")
private Integer textX;
/**
* 文字左上角Y坐标
*/
@TableField("text_y")
private Integer textY;
/**
* 文字大小
*/
@TableField("text_size")
private Integer textSize;
/**
* 0:横向生成、1:竖向生成
*/
@TableField("text_sign")
private Boolean textSign;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 修改时间
*/
@TableField("gmt_modified")
private Date gmtModified;
}
......@@ -45,7 +45,7 @@ public class ConsumerHandler implements KafkaListenerErrorHandler {
private final HoloForeignDeviceMapper holoForeignDeviceMapper;
@Transactional
@KafkaListener(topics = {"cross_real_time_lane_data"})
// @KafkaListener(topics = {"cross_real_time_lane_data"})
public void receiveCrossRealTimeLaneData(ConsumerRecord<Object, Object> record, Acknowledgment acknowledgment) throws Exception {
try {
String crossRealTimeLaneData = String.valueOf(record.value());
......@@ -81,7 +81,7 @@ public class ConsumerHandler implements KafkaListenerErrorHandler {
}
@Transactional
@KafkaListener(topics = {"cross_real_time_data"})
// @KafkaListener(topics = {"cross_real_time_data"})
public void receiveCrossRealTimeData(ConsumerRecord<Object, Object> record, Acknowledgment acknowledgment) throws Exception {
try {
String crossRealTimeData = String.valueOf(record.value());
......@@ -130,7 +130,7 @@ public class ConsumerHandler implements KafkaListenerErrorHandler {
}
@Transactional
@KafkaListener(topics = {"cross_real_time_dir_data"})
// @KafkaListener(topics = {"cross_real_time_dir_data"})
public void receiveCrossRealTimeDirData(ConsumerRecord<Object, Object> record, Acknowledgment acknowledgment) throws Exception {
try {
String crossRealTimeDirData = String.valueOf(record.value());
......@@ -155,7 +155,7 @@ public class ConsumerHandler implements KafkaListenerErrorHandler {
}
@Transactional
@KafkaListener(topics = {"cross_real_time_turn_data"})
// @KafkaListener(topics = {"cross_real_time_turn_data"})
public void receiveCrossRealTimeTurnData(ConsumerRecord<Object, Object> record, Acknowledgment acknowledgment) throws Exception {
try {
String crossRealTimeTurnData = String.valueOf(record.value());
......
......@@ -18,7 +18,7 @@ public class StrategyGreenOptHistEntity {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("green_id")
private String greenId;
private Integer greenId;
@TableField("length")
private Double length;
@TableField("cycle")
......
package net.wanji.opt.service;
import net.wanji.opt.entity.DeviceInduces;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 设备-交通诱导屏设备 服务类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface DeviceInducesService extends IService<DeviceInduces> {
}
package net.wanji.opt.service.impl;
import net.wanji.opt.entity.DeviceInduces;
import net.wanji.opt.dao.mapper.DeviceInducesMapper;
import net.wanji.opt.service.DeviceInducesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 设备-交通诱导屏设备 服务实现类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Service
public class DeviceInducesServiceImpl extends ServiceImpl<DeviceInducesMapper, DeviceInduces> implements DeviceInducesService {
}
package net.wanji.opt.service.induce;
import net.wanji.opt.entity.GreenwaveInducesHist;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 绿波诱导下发历史信息表 服务类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface GreenwaveInducesHistService extends IService<GreenwaveInducesHist> {
}
package net.wanji.opt.service.induce;
import net.wanji.opt.entity.GreenwaveInduces;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 绿波-诱导屏幕关系表 服务类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface GreenwaveInducesService extends IService<GreenwaveInduces> {
}
package net.wanji.opt.service.induce;
import net.wanji.opt.entity.InduceHist;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 诱导屏-发布模板 服务类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface InduceHistService extends IService<InduceHist> {
}
package net.wanji.opt.service.induce;
import freemarker.template.TemplateException;
import net.wanji.opt.dto.induce.MessageParam;
import java.awt.image.BufferedImage;
import java.io.IOException;
public interface InduceSendService {
void send(MessageParam param) throws IOException, TemplateException;
String uploadFile(BufferedImage image,String directoryName, String fileName);
byte[] downloadImage(String remoteFile) throws IOException;
}
package net.wanji.opt.service.induce;
import net.wanji.opt.entity.InduceTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 诱导屏-发布模板 服务类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
public interface InduceTemplateService extends IService<InduceTemplate> {
}
package net.wanji.opt.service.induce.impl;
import net.wanji.opt.entity.GreenwaveInducesHist;
import net.wanji.opt.dao.mapper.induce.GreenwaveInducesHistMapper;
import net.wanji.opt.service.induce.GreenwaveInducesHistService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 绿波诱导下发历史信息表 服务实现类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Service
public class GreenwaveInducesHistServiceImpl extends ServiceImpl<GreenwaveInducesHistMapper, GreenwaveInducesHist> implements GreenwaveInducesHistService {
}
package net.wanji.opt.service.induce.impl;
import net.wanji.opt.entity.GreenwaveInduces;
import net.wanji.opt.dao.mapper.induce.GreenwaveInducesMapper;
import net.wanji.opt.service.induce.GreenwaveInducesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 绿波-诱导屏幕关系表 服务实现类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Service
public class GreenwaveInducesServiceImpl extends ServiceImpl<GreenwaveInducesMapper, GreenwaveInduces> implements GreenwaveInducesService {
}
package net.wanji.opt.service.induce.impl;
import net.wanji.opt.entity.InduceHist;
import net.wanji.opt.dao.mapper.induce.InduceHistMapper;
import net.wanji.opt.service.induce.InduceHistService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 诱导屏-发布模板 服务实现类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Service
public class InduceHistServiceImpl extends ServiceImpl<InduceHistMapper, InduceHist> implements InduceHistService {
}
package net.wanji.opt.service.induce.impl;
import net.wanji.opt.entity.InduceTemplate;
import net.wanji.opt.dao.mapper.induce.InduceTemplateMapper;
import net.wanji.opt.service.induce.InduceTemplateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 诱导屏-发布模板 服务实现类
* </p>
*
* @author guoliang.dong
* @since 2024-11-22
*/
@Service
public class InduceTemplateServiceImpl extends ServiceImpl<InduceTemplateMapper, InduceTemplate> implements InduceTemplateService {
}
......@@ -5,19 +5,14 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.opt.common.Constants;
import net.wanji.opt.common.RedisUtils;
import net.wanji.opt.service.GreenBeltInfoService;
import net.wanji.opt.synthesis.service.impl.StrategyGreenBeltServiceImpl;
import net.wanji.opt.vo.GreenBeltChartVO;
import net.wanji.opt.vo.GreenBeltInfoVO;
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.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.ws.rs.core.MediaType;
import java.util.Date;
/**
* @author duanruiming
......@@ -30,43 +25,31 @@ import javax.ws.rs.core.MediaType;
public class StrategyGreenBeltController {
@Resource
private RedisUtils redisUtils;
@Resource
private GreenBeltInfoService greenBeltInfoService;
private StrategyGreenBeltServiceImpl strategyGreenBeltService;
@ApiOperation(value = "绿波时序图数据查询", notes = "绿波时序图数据查询", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/greenBletData",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/greenBletData")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenBeltInfoVO.class),
})
public JsonViewObject greenBletData(@RequestBody String greenId) throws Exception {
// todo 测试
GreenBeltInfoVO greenBeltInfoVO1 = greenBeltInfoService.convertData(null);
greenBeltInfoService.save(greenBeltInfoVO1);
String key = Constants.GREEN_ID_OPT_KEY.concat(greenId);
redisUtils.set(key, JacksonUtils.getInstance().writeValueAsString(greenBeltInfoVO1));
Object obj = redisUtils.get(key);
public JsonViewObject greenBletData(String greenId) throws Exception {
//String key = Constants.GREEN_ID_OPT_KEY.concat(greenId);
//Object obj = redisUtils.get(key);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
GreenBeltInfoVO greenBeltInfoVO = JacksonUtils.getInstance().readValue(String.valueOf(obj), GreenBeltInfoVO.class);
return jsonViewObject.success(greenBeltInfoVO);
//GreenBeltInfoVO greenBeltInfoVO = JacksonUtils.getInstance().readValue(String.valueOf(obj), GreenBeltInfoVO.class);
return jsonViewObject.success(null);
}
@ApiOperation(value = "绿波时序图图形查询", notes = "绿波时序图图形查询", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/greenBeltChart",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@GetMapping(value = "/greenBeltChart")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = GreenBeltInfoVO.class),
})
public JsonViewObject greenBeltChart(@RequestBody String greenId) throws Exception {
String key = Constants.GREEN_ID_OPT_CHART_KEY.concat(greenId);
Object obj = redisUtils.get(key);
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
GreenBeltChartVO greenBeltChartVO = JacksonUtils.getInstance().readValue(String.valueOf(obj), GreenBeltChartVO.class);
return jsonViewObject.success(greenBeltChartVO);
public JsonViewObject greenBeltChart(Integer greenId, Date date) throws Exception {
GreenBeltChartVO greenBeltChartVO = strategyGreenBeltService.selectChart(greenId, date);
return JsonViewObject.newInstance().success(greenBeltChartVO);
}
}
package net.wanji.opt.synthesis.service;
import net.wanji.opt.vo.GreenBeltChartVO;
import java.util.Date;
/**
* @author duanruiming
* @date 2024/11/25 13:53
*/
public interface StrategyGreenBeltService {
GreenBeltChartVO selectChart(Integer greenId, Date queryDate);
}
package net.wanji.opt.vo;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.wanji.common.utils.tool.JacksonUtils;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
......@@ -16,12 +22,27 @@ import java.util.Map;
@ApiModel(value = "GreenBeltChartVO", description = "绿波时序图返回实体")
@JsonIgnoreProperties(ignoreUnknown = true)
public class GreenBeltChartVO {
private static final long serialVersionUID = 1L;
@ApiModelProperty("绿波路口红灯范围")
Map<String, List<Double[]>> crossRedTimesMap;
@JsonProperty("crossRedTimesMap")
String crossRedTimesMap;
@ApiModelProperty("反向绿波路口红灯范围")
@JsonProperty("backCrossRedTimesMap")
String backCrossRedTimesMap;
@ApiModelProperty("绿波路口绿波开始时间")
Map<String, Double> greenStartMap;
@JsonProperty("greenStartMap")
String greenStartMap;
@ApiModelProperty("反向绿波路口绿波开始时间")
String BackGreenStartMap;
@JsonProperty("distanceMap")
@ApiModelProperty("绿波路口距离下一个路口距离")
Map<String, Double> distanceMap;
String distanceMap;
@ApiModelProperty("绿波带宽")
private Double greenWidthTime;
@ApiModelProperty("反向绿波带宽")
private Double BackGreenWidthTime;
@JsonCreator
public GreenBeltChartVO(){
}
}
......@@ -2,7 +2,7 @@ spring:
cloud:
nacos:
config:
server-addr: 173.17.0.1:8848
server-addr: 37.12.182.29:8848
file-extension: yaml
group: signal
namespace: signal
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.DeviceInducesMapper">
</mapper>
......@@ -4,4 +4,12 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.StrategyPlanInfoMapper">
<select id="selectByCrossId" resultType="net.wanji.opt.synthesis.pojo.StrategyPlanInfoEntity" parameterType="String" >
select * from t_strategy_plan_info where `cross_id`=#{crossId} and ( `status`=1 or `status` is null) and ((CURRENT_DATE &lt; `end_time` and CURRENT_DATE &gt; `start_time`) or `end_time` is null )
</select>
<select id="selectAll" resultType="net.wanji.opt.synthesis.pojo.StrategyPlanInfoEntity" >
select * from t_strategy_plan_info where ( `status`=1 or `status` is null) and ((CURRENT_DATE &lt; `end_time` and CURRENT_DATE &gt; `start_time`) or `end_time` is null )
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.induce.GreenwaveInducesHistMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.induce.GreenwaveInducesMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.induce.InduceHistMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.opt.dao.mapper.induce.InduceTemplateMapper">
</mapper>
......@@ -3,7 +3,7 @@
<mapper namespace="net.wanji.opt.dao.mapper.trend.EventAlarmMapper">
<!-- 通用查询映射结果 -->
<resultMap type="net.wanji.opt.po.trend.EventAlarmPO" id="BaseResultMap">
<resultMap type="net.wanji.opt.po.trend.EventAlarmPO" id="EventAlarmBaseResultMap">
<result property="id" column="id"/>
<result property="eventId" column="event_id"/>
<result property="eventDesc" column="event_desc"/>
......@@ -17,7 +17,7 @@
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<select id="selectByTodayTime" resultMap="BaseResultMap">
<select id="selectByTodayTime" resultMap="EventAlarmBaseResultMap" >
select
id,event_id,event_desc,type,start_time,end_time,source,wkt,image_url,gmt_create,gmt_modified
from t_event_data
......
<?xml version="1.0" encoding="gb2312"?>
<message System="ATMS" Ver="1.0">
<systemtype>VMS</systemtype>
<messagetype>CONTROL</messagetype>
<!--token-->
<sourceIP>${sourceid}</sourceIP>
<targetIP></targetIP>
<user></user>
<password></password>
<task>
<tasktype>deletelistandfile</tasktype>
<taskdetail>
<!--屏体ID 由现场提供-->
<ledid>${vmsid}</ledid>
</taskdetail>
<!--节目类型 TFM 路况 TFMH 独占 TAM 交通事件-->
<senderinfo>${type}</senderinfo>
</task>
</message>
\ No newline at end of file
<?xml version="1.0" encoding="GB2312"?>
<message System="ATMS" Ver="1.0">
<systemtype>VMS</systemtype>
<messagetype>CONTROL</messagetype>
<sourceIP>${sourceId}</sourceIP>
<targetIP></targetIP>
<user></user>
<password></password>
<task>
<tasktype>updatelistandfileEx</tasktype>
<taskdetail>
<ledid width="${resolutionWidth}" height="${resolutionHeight}">${equipCode}</ledid>
<list type="composite">
<file playorder="${playorder}" duration="${duration}" starttime="${startTime}" endtime="${endTime}" backgroundcolor="#000000" url="">
<area contenttype="imageFile" x="${x}" y="${y}" w="${resolutionWidth}" h="${resolutionHeight}" entermode="0" enterspeed="1" exitmode="0" exitspeed="0">
<imagefile filetype="bmp" type="uri">${ftpPath}</imagefile>
</area>
</file>
</list>
</taskdetail>
<senderinfo>${type}</senderinfo>
</task>
</message>
\ No newline at end of file
......@@ -9,7 +9,8 @@ public class BasicEnum {
public enum ManufacturerEnum {
HK("海康", "HK"),
DT("东土", "DT"),
HISENSE("海信", "HISENSE");
HISENSE("海信", "HISENSE"),
EHULU("易华录", "EHUALU");
private String nick;
private String code;
......
......@@ -81,6 +81,9 @@ public class SignalStatusController {
List<LightsStatusVO2> listResult = new ArrayList<>(lightsStatusVOList.size());
for (LightsStatusVO lightsStatusVO : lightsStatusVOList) {
if (Objects.isNull(lightsStatusVO)) {
continue;
}
Integer cyclePhaseCountDown = lightsStatusVO.getCyclePhaseCountDown();
LightsStatusVO2 lightsStatusVO2 = new LightsStatusVO2();
BeanUtils.copyProperties(lightsStatusVO, lightsStatusVO2);
......
......@@ -22,4 +22,10 @@ public interface GreenwaveCrossMapper {
List<GreenwaveCrossPO> selectAll();
List<GreenwaveCrossPOExt> selectAllWidthAndSpeed();
/**
* 获取所有绿波路口
* @return
*/
List<GreenwaveCrossPOExt> selectAllGreeenCross();
}
......@@ -59,5 +59,13 @@
ORDER BY t2.start_time
</select>
<select id="selectAllGreeenCross" resultType="net.wanji.databus.dao.entity.GreenwaveCrossPOExt">
SELECT t1.id as greenwaveCrossId, t1.green_id, t1.cross_id, t1.design_speed,
t4.name as greenwaveName
FROM t_greenwave_cross t1
JOIN t_greenwave_info t4
WHERE t1.green_id = t4.id
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment