Commit 49aee2d1 authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 2eeb0f71 b9a99677
......@@ -138,4 +138,8 @@ public interface FeignCommon {
@PostMapping("/controlCommand/stepingPhase")
JsonViewObject stepingPhase(@RequestBody StepingPhaseDTO stepingPhaseDTO);
// 海信-查询方案优化记录
@PostMapping("/staticInfo/schemeOptLog")
JsonViewObject schemeOptLog(@RequestBody CrossSchemeRingsDTO crossSchemeRingsDTO);
}
utc.service.url=http://173.17.0.1:32000/utc
utc.dt.service.url=http://173.17.0.1:39002/utc-dt
utc.hisense.service.url=http://173.17.0.1:39003/utc-hisense
control.url=http://173.17.0.1:32001/web
ehualu.url=http://173.17.0.1:30015
\ No newline at end of file
utc.service.url=http://192.168.150.1:32000/utc
utc.dt.service.url=http://192.168.150.1:39002/utc-dt
utc.hisense.service.url=http://192.168.150.1:39003/utc-hisense
control.url=http://192.168.150.1:32001/web
ehualu.url=http://192.168.150.1:30015
\ No newline at end of file
......@@ -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>
......
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;
}
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 {
}
......@@ -2,21 +2,26 @@ package net.wanji.opt.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageInfo;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.enums.LightsAddressEnum;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.CrossUtil;
import net.wanji.common.utils.tool.JacksonUtils;
import net.wanji.databus.bo.CrossIdAndSchemeIdBO;
import net.wanji.databus.bo.CrossIdBO;
import net.wanji.databus.dao.entity.BaseCrossDirInfoPO;
import net.wanji.databus.dao.entity.BaseCrossSchemePO;
import net.wanji.databus.dao.entity.CrossPhasePO;
import net.wanji.databus.dao.entity.RidInfoEntity;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.*;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.po.*;
import net.wanji.databus.vo.SchemeOptSendVO;
import net.wanji.databus.vo.SchemeSendVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.opt.dao.mapper.CrossSchemeOptLogMapper;
import net.wanji.opt.dao.mapper.strategy.SceneMapper;
import net.wanji.opt.dto.*;
......@@ -29,11 +34,12 @@ import net.wanji.opt.service.signalcontrol.FeignProxyService;
import net.wanji.opt.service.strategy.SceneService;
import net.wanji.opt.vo.CrossIdAndLocationVO;
import net.wanji.opt.vo.OptEffectVO;
import net.wanji.databus.vo.SchemeOptSendVO;
import net.wanji.opt.vo.SchemeOptVO;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
......@@ -61,10 +67,13 @@ public class DiagnoServiceImpl implements DiagnoService {
private final CrossDirDataRealtimeMapper crossDirDataRealtimeMapper;
private final BaseCrossLaneLightsMapper baseCrossLaneLightsMapper;
private final BaseCrossLightsMapper baseCrossLightsMapper;
@Resource
private UtcFeignClients utcFeignClients;
private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
// 机动车灯数据库类型与前端类型对应关系
private static final Map<Integer, Integer> MOTOR_VEH_MAP = new HashMap<>(5);
static {
MOTOR_VEH_MAP.put(1, 1);
MOTOR_VEH_MAP.put(2, 3);
......@@ -72,8 +81,10 @@ public class DiagnoServiceImpl implements DiagnoService {
MOTOR_VEH_MAP.put(4, 5);
MOTOR_VEH_MAP.put(5, 6);
}
// 非机动车灯数据库类型与前端类型对应关系
private static final Map<Integer, Integer> NON_MOTOR_VEH_MAP = new HashMap<>(5);
static {
MOTOR_VEH_MAP.put(10, 2);
MOTOR_VEH_MAP.put(11, 3);
......@@ -200,21 +211,58 @@ public class DiagnoServiceImpl implements DiagnoService {
@Override
public List<SchemeOptVO.PhaseOptTime> queryOptTime(CrossIdAndSchemeIdDTO crossIdAndSchemeIdDTO) {
//TODO
String crossId = crossIdAndSchemeIdDTO.getCrossId();
Integer schemeId = crossIdAndSchemeIdDTO.getSchemeId();
List<SchemeOptVO.PhaseOptTime> phaseOptTimeList = new ArrayList<>();
// 选择数据批次时间最大的记录
List<CrossSchemeOptLogPO> maxList = crossSchemeOptLogMapper.selectMaxByCrossId(crossId);
for (CrossSchemeOptLogPO crossSchemeOptLogPO : maxList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
String phaseNo = crossSchemeOptLogPO.getPhaseNo();
phaseOptTime.setPhaseNo(phaseNo);
Integer oriGreenTime = crossSchemeOptLogPO.getOriGreenTime();
phaseOptTime.setOriGreenTime(oriGreenTime);
Integer optGreenTime = getNewGreenTime(crossId, schemeId, phaseNo);
phaseOptTime.setOptGreenTime(optGreenTime);
phaseOptTime.setOptTime(optGreenTime - oriGreenTime);
phaseOptTimeList.add(phaseOptTime);
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(crossId);
//方案号*3-2
crossSchemeRingsDTO.setPattern(String.valueOf(schemeId));
//通过路口号和方案号查询方案id
Integer integer = baseCrossSchemeMapper.selectIdByCrossIdAndSchemeNo(crossId, String.valueOf(schemeId));
List<CrossPhasePO> phasePOList = baseCrossPhaseMapper.selectByCrossIdAndSchemeId(crossId, integer);
if (ObjectUtils.isEmpty(phasePOList) || ObjectUtils.isEmpty(integer)) {
return phaseOptTimeList;
}
JsonViewObject jsonViewObject = utcFeignClients.schemeOptLog(crossSchemeRingsDTO);
Integer code = jsonViewObject.getCode();
ObjectMapper mapper = JacksonUtils.getInstance();
List<CrossSchemeStageOptLogPO> crossSchedulesPOList = mapper.convertValue(jsonViewObject.getContent(), new TypeReference<List<CrossSchemeStageOptLogPO>>() {
});
//
if (code != 200 || ObjectUtils.isEmpty(crossSchedulesPOList)) {
log.info("该路口方案暂未优化,{}", JSONObject.toJSONString(crossIdAndSchemeIdDTO));
//将优化后的方案都设置为0
for (CrossPhasePO crossPhasePO : phasePOList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
phaseOptTime.setPhaseNo(crossPhasePO.getPhaseNo());
phaseOptTime.setOriGreenTime(crossPhasePO.getPhaseTime());
phaseOptTime.setOptGreenTime(0);
phaseOptTime.setOptTime(0);
phaseOptTimeList.add(phaseOptTime);
}
} else {
for (CrossPhasePO crossPhasePO : phasePOList) {
SchemeOptVO.PhaseOptTime phaseOptTime = new SchemeOptVO.PhaseOptTime();
phaseOptTime.setPhaseNo(crossPhasePO.getPhaseNo());
Integer oriPhaseTime = crossPhasePO.getPhaseTime();
phaseOptTime.setOriGreenTime(oriPhaseTime);
List<CrossSchemeStageOptLogPO> list = crossSchedulesPOList.stream().filter(x -> x.getPhaseNo().equals(String.valueOf(crossPhasePO.getSort()))).collect(Collectors.toList());
if (ObjectUtils.isEmpty(list)) {
phaseOptTime.setOptGreenTime(0);
phaseOptTime.setOptTime(0);
} else {
CrossSchemeStageOptLogPO optLogPO = list.get(0);
Integer optPhaseTime = optLogPO.getPhaseTime();
phaseOptTime.setOptGreenTime(optPhaseTime);
//两个时间的绝对值
int optTime = Math.abs(oriPhaseTime - optPhaseTime);
phaseOptTime.setOptTime(optTime);
}
phaseOptTimeList.add(phaseOptTime);
}
}
return phaseOptTimeList;
}
......
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 {
}
package net.wanji.opt.task;
public class inducesMonitorTask {
}
spring:
profiles:
active: dev
\ No newline at end of file
active: docker
\ 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.databus.dao.mapper.CrossSchemeOptLogMapper">
<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>
<?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,6 +9,7 @@ import net.wanji.common.annotation.aspect.AspectLog;
import net.wanji.common.enums.BaseEnum;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.databus.dao.entity.CrossSchedulesPO;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.PlanSectionVO;
......@@ -127,4 +128,21 @@ public class StaticInfoController {
}
}
@AspectLog(description = "查询方案优化记录", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/schemeOptLog")
@ApiOperation(value = "查询方案优化记录", notes = "查询方案优化记录", response = CrossSchemeRings.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossSchemeRings.class)
})
public JsonViewObject schemeOptLog(@RequestBody @Validated CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
List<CrossSchemeStageOptLogPO> crossSchemeStageOptLogPOList = staticInfoService.schemeOptLog(crossSchemeRingsDTO);
if (ObjectUtils.isNotEmpty(crossSchemeStageOptLogPOList)) {
return JsonViewObject.newInstance().success(crossSchemeStageOptLogPOList);
} else {
return JsonViewObject.newInstance().fail("查询方案优化记录 失败");
}
}
}
package net.wanji.utc.hisense.service;
import net.wanji.databus.dao.entity.CrossSchedulesPO;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.CrossInfoPO;
import net.wanji.databus.vo.PlanSectionVO;
......@@ -31,4 +32,11 @@ public interface StaticInfoService {
**/
CrossSchemeRings crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
/**
* @Description : 查询方案优化记录
* @Param crossId 路口编号
* @Param pattern 方案号
**/
List<CrossSchemeStageOptLogPO> schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
}
package net.wanji.utc.hisense.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossSchemeStageOptLogMapper;
import net.wanji.databus.dto.CrossSchemeRingsDTO;
import net.wanji.databus.dto.ExtendPhaseDTO;
import net.wanji.databus.dto.StepingPhaseDTO;
......@@ -46,6 +49,10 @@ public class ControlCommandServiceImpl implements ControlCommandService {
private CrossInfoMapper crossInfoMapper;
@Resource
private StaticInfoService staticInfoService;
@Resource
private StaticInfoServiceImpl staticInfoServiceImpl;
@Resource
private CrossSchemeStageOptLogMapper crossSchemeStageOptLogMapper;
@Override
public JsonViewObject schemeSend(SchemeSendVO schemeSendVO) throws Exception {
......@@ -354,11 +361,8 @@ public class ControlCommandServiceImpl implements ControlCommandService {
if (code != 200) {
optResult = 2;
}
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
crossSchemeRingsDTO.setCrossId(tempSchemeSendVO.getCrossId());
crossSchemeRingsDTO.setPattern(tempSchemeSendVO.getPattern());
//方案优化记录
crossSchemeOptLog(crossSchemeRingsDTO, tempSchemeSendVO.getSplit(), optResult);
crossSchemeOptLog(tempSchemeSendVO, tempSchemeSendVO.getSplit(), optResult);
return jsonViewObject;
}
......@@ -369,8 +373,12 @@ public class ControlCommandServiceImpl implements ControlCommandService {
* @Param split 优化的绿信比
* @Param result 下发结果
**/
private void crossSchemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO, String split, int result) throws Exception {
//TODO
private void crossSchemeOptLog(TempSchemeSendVO tempSchemeSendVO, String greenTime, int result) throws Exception {
CrossSchemeRingsDTO crossSchemeRingsDTO = new CrossSchemeRingsDTO();
String crossId = tempSchemeSendVO.getCrossId();
String pattern = tempSchemeSendVO.getPattern();
crossSchemeRingsDTO.setCrossId(crossId);
crossSchemeRingsDTO.setPattern(pattern);
//方案环图请求
CrossSchemeRings crossSchemeRings = staticInfoService.crossSchemeRings(crossSchemeRingsDTO);
if (Optional.ofNullable(crossSchemeRings).isPresent()) {
......@@ -386,21 +394,62 @@ public class ControlCommandServiceImpl implements ControlCommandService {
int schemeNo = (Integer.valueOf(crossSchemeRings.getPattern()) + 2) / 3;
List<CrossSchemeRings.Phase> phaseList = crossSchemeRings.getPhaseList();
CrossSchemeRings.Phase phase = phaseList.get(0);
//红灯黄灯时间给默认值0
phase.setRedTime(getDefaultPhaseTime());
phase.setYellowTime(getDefaultPhaseTime());
//绿灯时间为神思绿信比时间
phase.setGreenTime(greenTime);
//封装环和环上相位数据
Map<Integer, List<RingPhaseDTO>> ringPhasesMap = StaticInfoServiceImpl.getRingPhasesMap(ringCount, cycleJSONObject, phase);
Map<Integer, List<RingPhaseDTO>> ringPhasesMap = staticInfoServiceImpl.getRingPhasesMap(ringCount, cycleJSONObject, phase);
//环封装阶段
List<StagePhaseDTO> stagePhaseDTOList = StaticInfoServiceImpl.stagePhaseList(cycle, ringCount, ringPhasesMap);
System.out.println(stagePhaseDTOList);
List<StagePhaseDTO> stagePhaseDTOList = null;
try {
stagePhaseDTOList = staticInfoServiceImpl.stagePhaseList(cycle, ringCount, ringPhasesMap);
} catch (Exception e) {
log.error("绿信比有误!");
throw new RuntimeException(e);
}
long currentTimeMillis = System.currentTimeMillis();
if (ObjectUtil.isNotEmpty(stagePhaseDTOList)) {
for (StagePhaseDTO stagePhaseDTO : stagePhaseDTOList) {
CrossSchemeStageOptLogPO crossSchemeStageOptLogPO = new CrossSchemeStageOptLogPO();
crossSchemeStageOptLogPO.setCrossId(crossId);
//方案号处理
int schemeId = (Integer.valueOf(crossSchemeRingsDTO.getPattern()) + 2) / 3;
crossSchemeStageOptLogPO.setSchemeId(schemeId);
crossSchemeStageOptLogPO.setPhaseNo(stagePhaseDTO.getStageId() + "");
crossSchemeStageOptLogPO.setPhaseTime(stagePhaseDTO.getStageTime());
crossSchemeStageOptLogPO.setOptResult(1);
crossSchemeStageOptLogPO.setDataInfo(JSONObject.toJSONString(tempSchemeSendVO));
crossSchemeStageOptLogPO.setBatchTime(currentTimeMillis);
crossSchemeStageOptLogMapper.insert(crossSchemeStageOptLogPO);
}
} else {
CrossSchemeStageOptLogPO crossSchemeStageOptLogPO = new CrossSchemeStageOptLogPO();
crossSchemeStageOptLogPO.setCrossId(crossId);
//方案号处理
int schemeId = (Integer.valueOf(crossSchemeRingsDTO.getPattern()) + 2) / 3;
crossSchemeStageOptLogPO.setSchemeId(schemeId);
crossSchemeStageOptLogPO.setOptResult(2);
crossSchemeStageOptLogPO.setDataInfo(JSONObject.toJSONString(tempSchemeSendVO));
crossSchemeStageOptLogPO.setBatchTime(currentTimeMillis);
crossSchemeStageOptLogMapper.insert(crossSchemeStageOptLogPO);
}
}
}
public static void main(String[] args) {
/**
* @return java.lang.String
* @Description 默认的相位时间
* @Param []
**/
private String getDefaultPhaseTime() {
StringBuilder str = new StringBuilder();
for (int i = 0; i < 16; i++) {
str.append("0").append(" ");
}
StringBuilder stringBuilder = str.deleteCharAt(str.lastIndexOf("") - 1);
return stringBuilder.toString();
}
@Override
......
......@@ -9,6 +9,7 @@ import net.wanji.common.utils.tool.ScheduleUtil;
import net.wanji.common.utils.tool.StringUtils;
import net.wanji.databus.dao.entity.*;
import net.wanji.databus.dao.mapper.CrossInfoMapper;
import net.wanji.databus.dao.mapper.CrossSchemeStageOptLogMapper;
import net.wanji.databus.dao.mapper.ManufacturerInfoMapper;
import net.wanji.databus.dto.*;
import net.wanji.databus.po.CrossInfoPO;
......@@ -68,6 +69,8 @@ public class StaticInfoServiceImpl implements StaticInfoService {
private VNtcipChannelViewMapper vNtcipChannelViewMapper;
@Resource
private VNtcipPatternMapper vNtcipPatternMapper;
@Resource
private CrossSchemeStageOptLogMapper crossSchemeStageOptLogMapper;
@Override
public List<CrossInfoPO> crossBasicInfo(CrossInfoDTO crossInfoDTO) throws Exception {
......@@ -177,7 +180,7 @@ public class StaticInfoServiceImpl implements StaticInfoService {
* @Param greenTime 绿
* @Param yellowTime 黄
**/
public static Map<Integer, List<RingPhaseDTO>> getRingPhasesMap(int ringCount, JSONObject cycleJSONObject, CrossSchemeRings.Phase phaseDto) {
public Map<Integer, List<RingPhaseDTO>> getRingPhasesMap(int ringCount, JSONObject cycleJSONObject, CrossSchemeRings.Phase phaseDto) {
//16 个相位的红灯时间(单位秒),中间用空格隔开,不存在的相位置 0。
String[] redTime = phaseDto.getRedTime().split(" ");
//16 个相位的绿灯时间(单位秒),中间用空格隔开,不存在的相位置 0。
......@@ -247,7 +250,7 @@ public class StaticInfoServiceImpl implements StaticInfoService {
* @Param [cycle, ringCount, ringPhasesMap]
* @return java.util.List<net.wanji.utc.hisense.pojo.dto.StagePhaseDTO>
**/
public static List<StagePhaseDTO> stagePhaseList(int cycle, int ringCount,Map<Integer, List<RingPhaseDTO>> ringPhasesMap){
public List<StagePhaseDTO> stagePhaseList(int cycle, int ringCount,Map<Integer, List<RingPhaseDTO>> ringPhasesMap){
//已经计算的阶段时长
int stageTime = 0;
//循环次数,也代表阶段号
......@@ -295,7 +298,7 @@ public class StaticInfoServiceImpl implements StaticInfoService {
//取最后一位
RingPhaseDTO phaseDTO = collect.get(collect.size() - 1);
//状态最后一次出现的1的下一个相位
int index = ringPhaseDTOS.lastIndexOf(phaseDTO) + 1;
int index = ringPhaseDTOS.lastIndexOf(phaseDTO)+1;
RingPhaseDTO ringPhaseDTO = ringPhaseDTOS.get(index);
//计算该相位及走过的所有时间
int totalTime = ringPhaseDTOS.stream().filter(x -> ringPhaseDTOS.indexOf(x) <= index).mapToInt(RingPhaseDTO::getPhaseTime).sum();
......@@ -764,4 +767,14 @@ public class StaticInfoServiceImpl implements StaticInfoService {
}
return null;
}
@Override
public List<CrossSchemeStageOptLogPO> schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
LambdaQueryWrapper<CrossSchemeStageOptLogPO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CrossSchemeStageOptLogPO::getCrossId, crossSchemeRingsDTO.getCrossId())
.eq(CrossSchemeStageOptLogPO::getSchemeId,crossSchemeRingsDTO.getPattern())
.inSql(CrossSchemeStageOptLogPO::getBatchTime, "select max(batch_time) from t_cross_scheme_opt_log where cross_id = '"+crossSchemeRingsDTO.getCrossId()+"' and scheme_id = "+crossSchemeRingsDTO.getPattern());
List<CrossSchemeStageOptLogPO> crossSchemeStageOptLogPOS = crossSchemeStageOptLogMapper.selectList(queryWrapper);
return crossSchemeStageOptLogPOS;
}
}
......@@ -156,6 +156,15 @@ public class StaticInfoController {
public JsonViewObject crossSchemeRings(@Validated @RequestBody CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
return staticInfoService.crossSchemeRings(crossSchemeRingsDTO);
}
@AspectLog(description = "查询方案优化记录", operationType = BaseEnum.OperationTypeEnum.QUERY)
@PostMapping(value = "/schemeOptLog", produces = MediaType.APPLICATION_JSON)
@ApiOperation(value = "查询方案优化记录", notes = "查询方案优化记录")
@ApiResponses({
@ApiResponse(code = 200, message = "OK", response = CrossSchedulesPO.class)
})
public JsonViewObject schemeOptLog(@Validated @RequestBody CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
return staticInfoService.schemeOptLog(crossSchemeRingsDTO);
}
}
......@@ -31,4 +31,5 @@ public interface StaticInfoService {
JsonViewObject signalTime(String crossId) throws Exception;
JsonViewObject crossSchemeNo(String crossId) throws Exception;
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
}
......@@ -53,4 +53,5 @@ public interface WanJiCommonStaticInfoService {
**/
JsonViewObject crossSchemeRings(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception;
}
......@@ -229,4 +229,11 @@ public class StaticInfoServiceImpl implements StaticInfoService {
jsonViewObject = wanjiCommonStaticInfoService.crossSchemeRings(crossSchemeRingsDTO);
return jsonViewObject;
}
@Override
public JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
JsonViewObject jsonViewObject = JsonViewObject.newInstance();
jsonViewObject = wanjiCommonStaticInfoService.schemeOptLog(crossSchemeRingsDTO);
return jsonViewObject;
}
}
......@@ -206,4 +206,15 @@ public class WanJiCommonStaticInfoServiceImpl implements WanJiCommonStaticInfoSe
return jsonViewObject;
}
@Override
public JsonViewObject schemeOptLog(CrossSchemeRingsDTO crossSchemeRingsDTO) throws Exception {
String manufacturerIdCode = crossInfoCache.getManufacturerCodeByCrossId(crossSchemeRingsDTO.getCrossId());
FeignCommon utcFeignClientService = utcFeignClientCache.getUtcFeignClientService(manufacturerIdCode);
JsonViewObject jsonViewObject = utcFeignClientService.schemeOptLog(crossSchemeRingsDTO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
throw new Exception("查询方案优化记录远程服务调用异常,异常信息" + jsonViewObject.getMessage());
}
return jsonViewObject;
}
}
package net.wanji.databus.dao.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -12,38 +13,31 @@ import java.sql.Date;
* @Date 2024/11/23 14:23
*/
@Data
public class CrossSchemeOptLogPO {
@ApiModelProperty(value = "主键id")
private Integer id;
@TableName("t_cross_scheme_opt_log")
public class CrossSchemeStageOptLogPO {
@ApiModelProperty(value = "")
@ApiModelProperty(value = "路口编号")
private String crossId;
@ApiModelProperty(value = "")
@ApiModelProperty(value = "方案号")
private Integer schemeId;
@ApiModelProperty(value = "")
private Integer offset;
@ApiModelProperty(value = "")
@ApiModelProperty(value = "相位编号")
private String phaseNo;
@ApiModelProperty(value = "")
private Integer oriPhaseTime;
@ApiModelProperty(value = "")
private Integer optPhaseTime;
@ApiModelProperty(value = "")
private Integer optTime;
@ApiModelProperty(value = "相位时长")
private Integer phaseTime;
@ApiModelProperty(value = "优化结果:1-成功 2-失败")
private String optResult;
private Integer optResult;
@ApiModelProperty(value = "请求信息")
private String dataInfo;
@ApiModelProperty(value = "")
private Integer batchTime;
@ApiModelProperty(value = "数据批次时间")
private Long batchTime;
@ApiModelProperty(value = "")
@ApiModelProperty(value = "数据插入时间")
private Date insertTime;
}
package net.wanji.databus.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.wanji.databus.dao.entity.CrossSchemeOptLogPO;
import net.wanji.databus.dao.entity.CrossSchemeStageOptLogPO;
/**
* @ClassName CrossSchemeOptLogMapper
......@@ -9,5 +9,5 @@ import net.wanji.databus.dao.entity.CrossSchemeOptLogPO;
* @Author zhouleilei
* @Date 2024/11/23 14:34
*/
public interface CrossSchemeOptLogMapper extends BaseMapper<CrossSchemeOptLogPO> {
public interface CrossSchemeStageOptLogMapper extends BaseMapper<CrossSchemeStageOptLogPO> {
}
......@@ -22,4 +22,10 @@ public interface GreenwaveCrossMapper {
List<GreenwaveCrossPO> selectAll();
List<GreenwaveCrossPOExt> selectAllWidthAndSpeed();
/**
* 获取所有绿波路口
* @return
*/
List<GreenwaveCrossPOExt> selectAllGreeenCross();
}
<?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.databus.dao.mapper.CrossSchemeStageOptLogMapper">
</mapper>
......@@ -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