Commit 54c4384a authored by duanruiming's avatar duanruiming

Merge remote-tracking branch 'origin/master'

parents 38f53bd4 4b90d2ea
/*
* Copyright (C) 2018 Zhejiang xiaominfo Technology CO.,LTD.
* All rights reserved.
* Official Web Site: http://www.xiaominfo.com.
* Developer Web Site: http://open.xiaominfo.com.
*/
package net.wanji.opt.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.collect.Lists;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.List;
//import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
//import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
//import springfox.documentation.swagger2.annotations.EnableSwagger2;
//import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
//import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
/**
* @author <a href="mailto:xiaoymin@foxmail.com">xiaoymin@foxmail.com</a>
* 2020/11/07 9:26
* @since:knife4j-spring-boot-fast-demo 1.0
*/
@Configuration
//@EnableSwagger2WebMvc
@EnableSwagger2
@EnableKnife4j
public class Knife4jConfiguration {
/**
* 设置头,因为平台携带token进行验证,所以需要在Swagger添加头设置的功能
* @return
*/
private List<SecurityScheme> securitySchemes(){
return Lists.newArrayList(
new ApiKey("Authorization","token","header"));
}
private List<SecurityContext> securityContexts(){
return Lists.newArrayList(SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!login).*$"))
.build()
);
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(
new SecurityReference("Authorization",authorizationScopes)
);
}
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
String groupName="v0.1版本";
Docket docket=new Docket(DocumentationType.SWAGGER_2)
//.host(swaggerDocUrl)
.apiInfo(apiInfo())
.groupName(groupName)
.select()
.apis(RequestHandlerSelectors.basePackage("com.wanji.holo.restful"))
.paths(PathSelectors.any())
.build()
.securitySchemes(securitySchemes())
.securityContexts(securityContexts())
;//.extensions(openApiExtensionResolver.buildSettingExtensions());
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("全息路段接口文档")
.description("全息路口监测系统 RESTful APIs")
//.termsOfServiceUrl(swaggerDocUrl)
.contact("wj@qq.com")
.version("0.1")
.build();
}
}
package net.wanji.opt.controller;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.ResponseHeader;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.i18n.I18nResourceBundle;
import net.wanji.common.framework.rest.AbstractRestServer;
import net.wanji.common.framework.rest.JsonViewObject;
import net.wanji.common.framework.rest.impl.AbstractRestServerImpl;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.service.GreenwaveHistProvider;
import net.wanji.opt.vo.GreenwaveCrossMetricsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
/**
* <p>
* 绿波历史数据 接口API
* </p>
* @version 1.0
* @author fengyi
* @Date 2024-11-18
*/
@RestController
@Slf4j
@RequestMapping("/greenwave-hist")
@Api(value="GreenwaveHistRestServer", description="绿波历史数据接口", tags = "绿波干线评价")
public class GreenwaveHistRestServer {
@Autowired
private GreenwaveHistProvider greenwaveHistProvider;
@GetMapping("/findStatisticIndexTrend")
@ApiOperation(httpMethod="GET",value="绿波历史数据-数据指标统计", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "greenId", value = "绿波ID", required = true, dataType = "String",defaultValue = "1"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-04 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-05 00:00:00")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenwaveHist.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findStatisticIndex(String greenId,@RequestParam(defaultValue ="2024-11-12 00:00:00") String startTime,
@RequestParam(defaultValue ="2024-11-13 00:00:00") String endTime) {
JsonViewObject jsonView = JsonViewObject.newInstance();
long start=System.currentTimeMillis();
try {
JSONObject list = greenwaveHistProvider.findStatisticIndex(greenId,startTime,endTime,null);
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@GetMapping("/findGreenCrossInfo")
@ApiOperation(httpMethod="GET",value="绿波干线路口信息查询", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "greenId", value = "绿波ID", required = true, dataType = "String",defaultValue = "1")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenwaveHist.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findGreenCrossInfo(Integer greenId) {
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
List<Map<String,Object>> list = greenwaveHistProvider.findGreenCross(greenId);
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
@GetMapping("/findUnCoordinateDirIndex")
@ApiOperation(httpMethod="GET",value="绿波非协调方向指标趋势", notes="")
@ApiImplicitParams({
@ApiImplicitParam(name = "crossId", value = "路口ID", required = true, dataType = "String",defaultValue = "13MOD0B5SI0"),
@ApiImplicitParam(name = "greenDir", value = "绿波协调方向,多个逗号分隔", required = true, dataType = "String",defaultValue = "5,7"),
@ApiImplicitParam(name = "startTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-04 00:00:00"),
@ApiImplicitParam(name = "endTime", value = "截止时间,格式:yyyy-MM-dd HH:mm:ss", required = false, dataType = "String",defaultValue = "2024-12-05 00:00:00")
})
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = GreenwaveHist.class,
responseHeaders = {@ResponseHeader(name = "Content-Type", description = "application/json")})
})
public JsonViewObject findUnCoordinateDirIndex(String crossId,String greenDir,String startTime,String endTime) {
JsonViewObject jsonView = JsonViewObject.newInstance();
try {
JSONObject list = greenwaveHistProvider.findUnCoordinateCrossIndex(crossId,greenDir,startTime,endTime);
jsonView.success(list);
} catch (DubboProviderException e) {
jsonView.fail(I18nResourceBundle.getConstants("GET_FAILED_MSG"));
log.error("{} getAll error", this.getClass().getSimpleName(), e);
}
return jsonView;
}
}
......@@ -49,7 +49,7 @@ public class RunningEvaluateController {
return JsonViewObject.newInstance().success(res);
}
@ApiOperation(value = "路口评价", notes = "路口评价", response = JsonViewObject.class,
@ApiOperation(value = "信号评价-路口评价", notes = "路口评价", response = JsonViewObject.class,
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
@PostMapping(value = "/crossEvaluate",
produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
......
......@@ -104,7 +104,7 @@ public class InduceSendController {
param.setEndTime(greenwaveInducesHistList.get(0).getControlOptTimes().split("\\|")[1]);
} else {
param.setStartTime(DateUtil.format(new Date(), Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
param.setEndTime(DateUtil.format(System.currentTimeMillis() + 1000 * 30, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
param.setEndTime(DateUtil.format(System.currentTimeMillis() + 1000 * 60, Constants.DATE_FORMAT.E_DATE_FORMAT_SECOND));
}
induceSendService.send(param);
}
......
package net.wanji.opt.dao.mapper;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.opt.entity.GreenwaveHist;
import java.util.List;
import java.util.Map;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
public interface GreenwaveHistoryMapper extends BaseInterfaceMapper<GreenwaveHist> {
/**
* 绿波历史指标查询
* @param params
* @return
*/
public List<GreenwaveHist> findStatisticIndex(Map<String,Object> params);
/**
* 干线路口查询
* @param params
* @return
*/
List<Map<String,Object>> findGreenCross(Map<String,Object> params);
/**
* 查看非协调方向路口指标
* @return
*/
List<GreenwaveHist> findUnCoordinateCrossIndex(Map<String,Object> params);
}
package net.wanji.opt.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.wanji.common.framework.domain.TrackableEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
@Data
@ApiModel(value="GreenwaveHist对象", description="绿波历史数据")
public class GreenwaveHist extends TrackableEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "绿波编号")
private Integer greenId;
@ApiModelProperty(value = "协调方向 0正向 1反向 2双向")
private int direction;
@ApiModelProperty(value = "交通状态:1畅通;2缓行;3拥堵;4严重拥堵;5未知")
private Integer status;
@ApiModelProperty(value = "拥堵类型:1常规;2异常")
private Integer type;
@ApiModelProperty(value = "交通指数")
private BigDecimal trafficIndex;
@ApiModelProperty(value = "行程速度(km/h)")
private BigDecimal speed;
@ApiModelProperty(value = "行程时间(秒)")
private Integer trvalTime;
@ApiModelProperty(value = "停车次数")
private BigDecimal stopTimes;
@ApiModelProperty(value = "拥堵距离(米)")
private BigDecimal queueLength;
@ApiModelProperty(value = "拥堵比例")
private BigDecimal congRate;
@ApiModelProperty(value = "延误时间(秒)")
private Integer delayTime;
@ApiModelProperty(value = "不停车通过率")
private BigDecimal noparkPassRate;
@ApiModelProperty(value = "协调方案可靠性")
private BigDecimal cordReliability;
@ApiModelProperty(value = "协调路段排队空间占比")
private BigDecimal cordQueueRatio;
@ApiModelProperty(value = "非协调相位二次排队")
private BigDecimal uncoordinatePhaseQueue;
@ApiModelProperty(value = "开始时间:yyyy-MM-dd HH:mm:ss")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime;
@ApiModelProperty(value = "创建时间")
private Date gmtCreate;
@ApiModelProperty(value = "修改时间")
private Date gmtModified;
@ApiModelProperty(value = "绿波车流方向")
private String roadDirection;
@ApiModelProperty(value = "路口ID")
private String crossId;
}
......@@ -97,7 +97,7 @@ public class GreenwaveInducesHist implements Serializable {
* 0 未发布 1 已发布
*/
@TableField("status")
private Integer status;
private Integer status=0;
/**
* 执行时段
......
package net.wanji.opt.service;
import com.alibaba.fastjson.JSONObject;
import net.wanji.common.framework.dubbointerface.BaseDubboInterface;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.opt.entity.GreenwaveHist;
import java.util.List;
import java.util.Map;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
public interface GreenwaveHistProvider extends BaseDubboInterface<GreenwaveHist> {
/**
*
* @param greenId
* @param startTime
* @param endTime
* @param type
* @return
* @throws DubboProviderException
*/
JSONObject findStatisticIndex(String greenId, String startTime, String endTime, String type) throws DubboProviderException;
/**
* 干线路口信息
* @param greenId
* @return
* @throws DubboProviderException
*/
List<Map<String, Object>> findGreenCross(Integer greenId) throws DubboProviderException;
/**
* 非协调方向路口指标统计
* @param crossId 路口ID
* @param greenDir 协调方向
* @param startTime 开始时间
* @param endTime 截止时间
* @return
*/
JSONObject findUnCoordinateCrossIndex(String crossId,String greenDir, String startTime, String endTime) throws DubboProviderException;
}
package net.wanji.opt.service.impl;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import net.wanji.common.framework.dubbointerface.impl.BaseDubboInterfaceImpl;
import net.wanji.common.framework.exception.DubboProviderException;
import net.wanji.common.framework.mapper.BaseInterfaceMapper;
import net.wanji.common.utils.tool.DateUtil;
import net.wanji.opt.dao.mapper.GreenwaveHistoryMapper;
import net.wanji.opt.entity.GreenwaveHist;
import net.wanji.opt.service.GreenwaveHistProvider;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.stream.Collectors;
/**
* <p>
* 绿波历史数据
* </p>
*
* @Author fengyi
* @Date 2024-11-18
*/
@Slf4j
@Component
@DubboService
public class GreenwaveHistProviderImpl extends BaseDubboInterfaceImpl<GreenwaveHist> implements GreenwaveHistProvider {
@Resource
private GreenwaveHistoryMapper greenwaveHistoryMapper;
@Override
public BaseInterfaceMapper<GreenwaveHist> getBaseInterfaceMapper() {
return this.greenwaveHistoryMapper;
}
@Override
public JSONObject findStatisticIndex(String greenId, String startTime, String endTime, String type) {
Map<String, Object> params = new HashMap<>();
params.put("greenId", greenId);
params.put("startDate", startTime);
params.put("endDate", endTime);
List<GreenwaveHist> list = greenwaveHistoryMapper.findStatisticIndex(params);
list = list.stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
//存放时段
Set<String> sortedSet = new TreeSet<>();
//存放所有进口数据
List<Map<String, Object>> allList = new ArrayList<>();
//按时间分组分组
Map<String, List<GreenwaveHist>> groupByDir = list.stream().collect(Collectors.groupingBy(o -> o.getRoadDirection(), TreeMap::new, Collectors.toList()));
List<Map<String, Object>> turnList = new ArrayList<>();
for (Map.Entry<String, List<GreenwaveHist>> entry : groupByDir.entrySet()) {
String key = entry.getKey();
//按方向排序
List<GreenwaveHist> value = entry.getValue().stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
Map<String, Object> mapList = new HashMap<>();
mapList.put("direction", key);
mapList.put("list", value);
allList.add(mapList);
for (GreenwaveHist po : value) {
Map<String, Object> turnMap = new HashMap<>();
turnMap.put("direction", po.getDirection());
if (!turnList.contains(turnMap)) {
turnList.add(turnMap);
}
//提取时间
sortedSet.add(DateUtil.formatDate(po.getStartTime(), "HH:mm"));
}
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("type", type);
jsonObject.put("timeList", sortedSet);
jsonObject.put("dataList", allList);
jsonObject.put("directionList", new int[]{0, 1, 2});
return jsonObject;
}
@Override
public List<Map<String, Object>> findGreenCross(Integer greenId) throws DubboProviderException {
Map<String,Object> params = new HashMap<>();
params.put("greenId",greenId);
List<Map<String, Object>> list = greenwaveHistoryMapper.findGreenCross(params);
String dirs = list.stream().map(o->o.get("inDir").toString()).distinct().collect(Collectors.joining(","));
return list;
}
@Override
public JSONObject findUnCoordinateCrossIndex(String crossId, String greenDir, String startTime, String endTime) {
Map<String,Object> params = new HashMap<>();
params.put("crossId",crossId);
params.put("startDate",startTime);
params.put("endDate",endTime);
params.put("greenDir",greenDir);
List<GreenwaveHist> list = greenwaveHistoryMapper.findUnCoordinateCrossIndex(params);
list = list.stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
//存放时段
Set<String> sortedSet = new TreeSet<>();
//存放所有进口数据
List<Map<String, Object>> allList = new ArrayList<>();
//按时间分组分组
Map<Integer, List<GreenwaveHist>> groupByDir = list.stream().collect(Collectors.groupingBy(o -> o.getDirection(), TreeMap::new, Collectors.toList()));
List<Map<String, Object>> turnList = new ArrayList<>();
for (Map.Entry<Integer, List<GreenwaveHist>> entry : groupByDir.entrySet()) {
Integer key = entry.getKey();
//按方向排序
List<GreenwaveHist> value = entry.getValue().stream().sorted(Comparator.comparing(o -> o.getStartTime())).collect(Collectors.toList());
Map<String, Object> mapList = new HashMap<>();
mapList.put("direction", key);
mapList.put("list", value);
allList.add(mapList);
for (GreenwaveHist po : value) {
Map<String, Object> turnMap = new HashMap<>();
turnMap.put("direction", po.getDirection());
if (!turnList.contains(turnMap)) {
turnList.add(turnMap);
}
//提取时间
sortedSet.add(DateUtil.formatDate(po.getStartTime(), "HH:mm"));
}
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("timeList", sortedSet);
jsonObject.put("dataList", allList);
return jsonObject;
}
}
......@@ -8,8 +8,5 @@ spring:
namespace: signal
username: nacos
password: nacos
application:
# dubbo启动需要程序名称
name: signal-optimize-service
main:
allow-circular-references: true
......@@ -5,7 +5,7 @@ spring:
cloud:
nacos:
config:
server-addr: 10.102.1.182:8848
server-addr: 37.12.182.29:8848
file-extension: yaml
group: signal
namespace: signal
......
......@@ -5,7 +5,7 @@
<mapper namespace="net.wanji.opt.dao.mapper.StrategyGreenOptHistMapper">
<select id="selectByGreenId" resultType="net.wanji.opt.po.StrategyGreenOptHistEntity" parameterType="String" >
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and TIMESTAMPDIFF(SECOND,`control_time`, now()) &lt; `control_duration` order by create_time desc limit 1;
select * from t_strategy_green_opt_hist where `green_id` = #{greenId} and TIMESTAMPDIFF(SECOND,`control_time`, now()) &lt; `control_duration` order by create_time desc limit 2;
</select>
</mapper>
\ No newline at end of file
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